mirror of
https://github.com/balena-io/balena-cli.git
synced 2025-06-24 18:45:07 +00:00
Compare commits
31 Commits
add-update
...
v16.7.5
Author | SHA1 | Date | |
---|---|---|---|
c6313c08ae | |||
f5764c4659 | |||
aff094575b | |||
4aaaf64f8d | |||
7b88ce273f | |||
b011af89ad | |||
1bf8c1bfe7 | |||
2b39d5d111 | |||
98663af7f6 | |||
5628824bee | |||
d12d7996bc | |||
0dcf4cbff6 | |||
884e37d242 | |||
f4a24e26c3 | |||
122eccf3dc | |||
bd598788dc | |||
406482b4da | |||
a381c97ca9 | |||
8ce78ba33c | |||
f53f148c89 | |||
0086feb645 | |||
4ee55b049f | |||
90c6f121cc | |||
d3c27ae859 | |||
8f39c1de6c | |||
4df1831187 | |||
2bce761ace | |||
d78b76aceb | |||
f07f6b84d4 | |||
d297a10570 | |||
9d0b82122a |
@ -1,3 +1,488 @@
|
||||
- commits:
|
||||
- subject: Abstract the fleet/app/block create commands
|
||||
hash: aff094575bb26547fa28b49eceec840a4c683929
|
||||
body: ""
|
||||
footer:
|
||||
Change-type: patch
|
||||
change-type: patch
|
||||
author: Thodoris Greasidis
|
||||
nested: []
|
||||
version: 16.7.5
|
||||
title: ""
|
||||
date: 2023-07-21T06:59:20.298Z
|
||||
- commits:
|
||||
- subject: "move: Include fleets of discontinued device types in the fleet
|
||||
selection"
|
||||
hash: b011af89ad7b4f43199be9666009155a8c6371b7
|
||||
body: ""
|
||||
footer:
|
||||
Change-type: patch
|
||||
change-type: patch
|
||||
author: Thodoris Greasidis
|
||||
nested: []
|
||||
version: 16.7.4
|
||||
title: ""
|
||||
date: 2023-07-20T10:41:06.291Z
|
||||
- commits:
|
||||
- subject: "promote: Allow joining fleets of discontinued device types"
|
||||
hash: 5628824bee935f6520fad3be498ea768e591755b
|
||||
body: ""
|
||||
footer:
|
||||
Change-type: patch
|
||||
change-type: patch
|
||||
author: Thodoris Greasidis
|
||||
nested: []
|
||||
version: 16.7.3
|
||||
title: ""
|
||||
date: 2023-07-20T08:30:06.798Z
|
||||
- commits:
|
||||
- subject: Update balena-compose to v3.0.2
|
||||
hash: 884e37d24293fc09a3a1c0f8e8763dc24698418c
|
||||
body: |
|
||||
Update balena-compose to v3.0.2
|
||||
|
||||
That release removes the use of the `cachefrom` on pull tasks, which
|
||||
there is good evidence to suggest is the cause of #2165
|
||||
footer:
|
||||
Change-type: patch
|
||||
change-type: patch
|
||||
author: Felipe Lalanne
|
||||
nested: []
|
||||
version: 16.7.2
|
||||
title: ""
|
||||
date: 2023-07-19T01:43:53.469Z
|
||||
- commits:
|
||||
- subject: Update balena-sdk to 17.8.0
|
||||
hash: bd598788dcb70fc48d225290c9705ae17ad0b2b5
|
||||
body: |
|
||||
Update balena-sdk from 17.0.0 to 17.8.0
|
||||
footer:
|
||||
Change-type: patch
|
||||
change-type: patch
|
||||
author: Thodoris Greasidis
|
||||
nested:
|
||||
- commits:
|
||||
- subject: "billing: Add `removeBillingInfo` method for removing billing info"
|
||||
hash: 25d24ccdfe89ecc816ca8781cbfed6dafeda91bc
|
||||
body: ""
|
||||
footer:
|
||||
Change-type: minor
|
||||
change-type: minor
|
||||
author: myarmolinsky
|
||||
nested: []
|
||||
version: balena-sdk-17.8.0
|
||||
title: ""
|
||||
date: 2023-07-10T13:20:21.969Z
|
||||
- commits:
|
||||
- subject: "deviceType.getBySlugOrName: Use a clearer var name in the docs
|
||||
example"
|
||||
hash: 41f7b823975667c37daf1c541919c20e95a9198b
|
||||
body: ""
|
||||
footer:
|
||||
Change-type: patch
|
||||
change-type: patch
|
||||
author: Thodoris Greasidis
|
||||
nested: []
|
||||
version: balena-sdk-17.7.1
|
||||
title: ""
|
||||
date: 2023-07-09T21:29:32.317Z
|
||||
- commits:
|
||||
- subject: Add typings for the organization.is_frozen computed term
|
||||
hash: 95a4304cf75a6537036764d59d6a7f9c9060d623
|
||||
body: ""
|
||||
footer:
|
||||
Depends-on: https://github.com/balena-io/balena-api/pull/4503
|
||||
depends-on: https://github.com/balena-io/balena-api/pull/4503
|
||||
Change-type: minor
|
||||
change-type: minor
|
||||
author: Thodoris Greasidis
|
||||
nested: []
|
||||
version: balena-sdk-17.7.0
|
||||
title: ""
|
||||
date: 2023-07-06T11:02:18.622Z
|
||||
- commits:
|
||||
- subject: "application.create: Enable creating fleets with archived device types"
|
||||
hash: 97a267ce844840936a3bffe7d4f317e21cd0f8ad
|
||||
body: ""
|
||||
footer:
|
||||
Change-type: minor
|
||||
change-type: minor
|
||||
author: myarmolinsky
|
||||
nested: []
|
||||
version: balena-sdk-17.6.0
|
||||
title: ""
|
||||
date: 2023-07-05T12:29:10.114Z
|
||||
- commits:
|
||||
- subject: Add `owns__credit_bundle` typing for `Organization`
|
||||
hash: 5260e77117f6eb07e32cb70da8889eb18112d216
|
||||
body: ""
|
||||
footer:
|
||||
Change-type: minor
|
||||
change-type: minor
|
||||
author: myarmolinsky
|
||||
nested: []
|
||||
version: balena-sdk-17.5.0
|
||||
title: ""
|
||||
date: 2023-06-27T17:12:54.385Z
|
||||
- commits:
|
||||
- subject: Add typings for Credits Notifications
|
||||
hash: a1f526da9d3b217a51fe1987d8913c345ed0c996
|
||||
body: ""
|
||||
footer:
|
||||
Change-type: minor
|
||||
change-type: minor
|
||||
author: myarmolinsky
|
||||
nested: []
|
||||
version: balena-sdk-17.4.0
|
||||
title: ""
|
||||
date: 2023-06-19T10:20:57.945Z
|
||||
- commits:
|
||||
- subject: "util: Simplify the listImagesFromTargetState helper"
|
||||
hash: b4efb2c3412020a2a186a9798f4f225bf7cee2d5
|
||||
body: ""
|
||||
footer:
|
||||
Change-type: patch
|
||||
change-type: patch
|
||||
author: Thodoris Greasidis
|
||||
nested: []
|
||||
version: balena-sdk-17.3.2
|
||||
title: ""
|
||||
date: 2023-06-19T06:20:01.454Z
|
||||
- commits:
|
||||
- subject: Fix prettier complaining on windows runners
|
||||
hash: 8d7f2eae237f270b128af35a2dd2da8377ea5092
|
||||
body: ""
|
||||
footer:
|
||||
Change-type: patch
|
||||
change-type: patch
|
||||
author: Thodoris Greasidis
|
||||
nested: []
|
||||
- subject: "deviceType.getInstructions: Improve the return type"
|
||||
hash: 8339dbc86b295147c5d3054a27ff667920f4ac55
|
||||
body: ""
|
||||
footer:
|
||||
Change-type: patch
|
||||
change-type: patch
|
||||
author: Thodoris Greasidis
|
||||
nested: []
|
||||
- subject: Fix browser tests now failing to find a polyfill for querystring
|
||||
hash: 02b72b0091c092403e684a6ae1ea3f3affcdb2fa
|
||||
body: ""
|
||||
footer:
|
||||
Change-type: patch
|
||||
change-type: patch
|
||||
author: Thodoris Greasidis
|
||||
nested: []
|
||||
version: balena-sdk-17.3.1
|
||||
title: ""
|
||||
date: 2023-06-17T09:13:14.340Z
|
||||
- commits:
|
||||
- subject: "os: Export the OsDownloadOptions type"
|
||||
hash: ccfbb31d225c3dfa1d6ad8f11fc8d475b1a04315
|
||||
body: ""
|
||||
footer:
|
||||
Change-type: minor
|
||||
change-type: minor
|
||||
author: Thodoris Greasidis
|
||||
nested: []
|
||||
version: balena-sdk-17.3.0
|
||||
title: ""
|
||||
date: 2023-06-05T07:51:40.633Z
|
||||
- commits:
|
||||
- subject: "tsconfig: Allow noImplicitThis in the tests"
|
||||
hash: 0688fef9932a22d6dc4783f862aee3bf919d753a
|
||||
body: ""
|
||||
footer:
|
||||
Change-type: patch
|
||||
change-type: patch
|
||||
author: Thodoris Greasidis
|
||||
nested: []
|
||||
- subject: "tsconfig: Switch to strict compilation to fix the 5.1 errors"
|
||||
hash: d4facc8362966b03fec3120f8d4664d7de512c17
|
||||
body: ""
|
||||
footer:
|
||||
Change-type: patch
|
||||
change-type: patch
|
||||
author: Thodoris Greasidis
|
||||
nested: []
|
||||
- subject: Update TypeScript to 5.1.3
|
||||
hash: f9c9c2be9cdd0e9a293131631b2bbfd932381ccc
|
||||
body: ""
|
||||
footer:
|
||||
Change-type: patch
|
||||
change-type: patch
|
||||
author: Thodoris Greasidis
|
||||
nested: []
|
||||
version: balena-sdk-17.2.3
|
||||
title: ""
|
||||
date: 2023-06-04T11:35:09.276Z
|
||||
- commits:
|
||||
- subject: Access other models internally via the shared current sdk instance
|
||||
hash: 4ea321fa304c47ef8bfa474adbd45a430f6b6b40
|
||||
body: ""
|
||||
footer:
|
||||
Change-type: patch
|
||||
change-type: patch
|
||||
author: Thodoris Greasidis
|
||||
nested: []
|
||||
version: balena-sdk-17.2.2
|
||||
title: ""
|
||||
date: 2023-06-01T15:12:15.596Z
|
||||
- commits:
|
||||
- subject: Convert the remaining .js tests to .ts
|
||||
hash: c4cd34fbeeb8815eba2684d071df313d14689238
|
||||
body: ""
|
||||
footer:
|
||||
Change-type: patch
|
||||
change-type: patch
|
||||
author: Thodoris Greasidis
|
||||
nested: []
|
||||
version: balena-sdk-17.2.1
|
||||
title: ""
|
||||
date: 2023-06-01T13:02:29.958Z
|
||||
- commits:
|
||||
- subject: Extends batch device actions to accept arrays of full UUIDs
|
||||
hash: 3344ea5c83d0a3698293d4e989d29397fcd6a59b
|
||||
body: ""
|
||||
footer:
|
||||
Change-type: minor
|
||||
change-type: minor
|
||||
author: Thodoris Greasidis
|
||||
nested: []
|
||||
- subject: "device.startOsUpdate: Add support for providing an array of UUIDs"
|
||||
hash: 2aa208c0b086c6885948672ccd068458c7f10139
|
||||
body: ""
|
||||
footer:
|
||||
Change-type: minor
|
||||
change-type: minor
|
||||
See: https://balena.zulipchat.com/#narrow/stream/345889-balena-io.2Fos/topic/Enpal.20HUP
|
||||
see: https://balena.zulipchat.com/#narrow/stream/345889-balena-io.2Fos/topic/Enpal.20HUP
|
||||
author: Thodoris Greasidis
|
||||
nested: []
|
||||
version: balena-sdk-17.2.0
|
||||
title: ""
|
||||
date: 2023-06-01T10:37:18.645Z
|
||||
- commits:
|
||||
- subject: Add 2fa tests
|
||||
hash: 969559251e183c0cba203404e6a4642c64e4a6b4
|
||||
body: ""
|
||||
footer:
|
||||
Change-type: patch
|
||||
change-type: patch
|
||||
author: Otávio Jacobi
|
||||
nested: []
|
||||
- subject: Fix auth.twoFactor.isEnabled() regression returning always true
|
||||
hash: 77c194aa66c17287f88ecc6d488dbace759d4c1a
|
||||
body: |
|
||||
Update balena-auth from 4.1.0 to 4.2.0
|
||||
footer:
|
||||
Change-type: patch
|
||||
change-type: patch
|
||||
author: Thodoris Greasidis
|
||||
nested:
|
||||
- commits:
|
||||
- subject: Add a get2FAStatus() method
|
||||
hash: 266c8bc9b12d13fd96ce0ae6b12d7767a27030d8
|
||||
body: ""
|
||||
footer:
|
||||
Change-type: minor
|
||||
change-type: minor
|
||||
author: Thodoris Greasidis
|
||||
nested: []
|
||||
version: balena-auth-4.2.0
|
||||
title: ""
|
||||
date: 2023-05-25T12:06:34.551Z
|
||||
- commits:
|
||||
- subject: Fix async tests not waiting for the result
|
||||
hash: 027af56893911b7b6a95c6743eb90cae86cc3f86
|
||||
body: ""
|
||||
footer:
|
||||
Change-type: patch
|
||||
change-type: patch
|
||||
author: Thodoris Greasidis
|
||||
nested: []
|
||||
version: balena-auth-4.1.3
|
||||
title: ""
|
||||
date: 2023-05-25T08:28:54.576Z
|
||||
- commits:
|
||||
- subject: Delete redundant .resinci.yml
|
||||
hash: eca476bec2b6ddd9c41809f3bca4c2c2f776fe69
|
||||
body: ""
|
||||
footer:
|
||||
Change-type: patch
|
||||
change-type: patch
|
||||
author: Thodoris Greasidis
|
||||
nested: []
|
||||
version: balena-auth-4.1.2
|
||||
title: ""
|
||||
date: 2022-09-26T12:39:48.984Z
|
||||
- commits:
|
||||
- subject: Replace balenaCI with flowzone
|
||||
hash: 349377a015dcbc7d963b950dc63ba2b2a03ad6a7
|
||||
body: ""
|
||||
footer:
|
||||
Change-type: patch
|
||||
change-type: patch
|
||||
author: Thodoris Greasidis
|
||||
nested: []
|
||||
version: balena-auth-4.1.1
|
||||
title: ""
|
||||
date: 2022-09-22T22:01:40.204Z
|
||||
version: balena-sdk-17.1.4
|
||||
title: ""
|
||||
date: 2023-05-30T06:58:26.026Z
|
||||
- commits:
|
||||
- subject: Add support to short uuid on device.serviceVar.set
|
||||
hash: 7b38ccb080e1d0028e6d9730738722f2122b0854
|
||||
body: ""
|
||||
footer:
|
||||
Change-type: patch
|
||||
change-type: patch
|
||||
author: Otávio Jacobi
|
||||
nested: []
|
||||
version: balena-sdk-17.1.3
|
||||
title: ""
|
||||
date: 2023-05-29T14:17:14.708Z
|
||||
- commits:
|
||||
- subject: Switch to a stricter request limiting queuing mode
|
||||
hash: 4302addfba8a773f1b528d4e12e4dd070593d149
|
||||
body: ""
|
||||
footer:
|
||||
Change-type: patch
|
||||
change-type: patch
|
||||
author: Thodoris Greasidis
|
||||
nested: []
|
||||
version: balena-sdk-17.1.2
|
||||
title: ""
|
||||
date: 2023-05-25T15:40:23.870Z
|
||||
- commits:
|
||||
- subject: Drop the callback examples from the docs
|
||||
hash: 5d9bb410c83cbf2c0a8f031ab746984ffe912b5a
|
||||
body: ""
|
||||
footer:
|
||||
Change-type: patch
|
||||
change-type: patch
|
||||
author: Thodoris Greasidis
|
||||
nested: []
|
||||
version: balena-sdk-17.1.1
|
||||
title: ""
|
||||
date: 2023-05-25T08:12:20.868Z
|
||||
- commits:
|
||||
- subject: Add the requestLimit & requestLimitInterval options to the SDK factory
|
||||
hash: 9a92f9b8da880b53379522f6201cadcd7fcb97bd
|
||||
body: ""
|
||||
footer:
|
||||
Change-type: minor
|
||||
change-type: minor
|
||||
author: Thodoris Greasidis
|
||||
nested: []
|
||||
version: balena-sdk-17.1.0
|
||||
title: ""
|
||||
date: 2023-05-24T18:28:06.683Z
|
||||
- commits:
|
||||
- subject: Update dependencies
|
||||
hash: c709c49f64ffc53e2a2c0477b5b28c6db56c064d
|
||||
body: ""
|
||||
footer:
|
||||
Change-type: patch
|
||||
change-type: patch
|
||||
author: Thodoris Greasidis
|
||||
nested: []
|
||||
version: balena-sdk-17.0.2
|
||||
title: ""
|
||||
date: 2023-05-24T16:45:55.757Z
|
||||
- commits:
|
||||
- subject: Add a method to retrieve the supervisor image for a DT
|
||||
hash: b64ee7ec80343f9846367b3b8794ef77421fe25b
|
||||
body: ""
|
||||
footer:
|
||||
Change-type: patch
|
||||
change-type: patch
|
||||
author: Edwin Joassart
|
||||
nested: []
|
||||
- subject: Add util to list images referenced in a target state v3
|
||||
hash: 9cbebb75cde280394871d6dd04758c237a2229aa
|
||||
body: ""
|
||||
footer:
|
||||
Change-type: patch
|
||||
change-type: patch
|
||||
author: Edwin Joassart
|
||||
nested: []
|
||||
- subject: Add a method for retrieving an application's virtual device target
|
||||
supervisor state
|
||||
hash: 3bc2fe3d7b6f20b733dba326e8895c7bba2e1c2f
|
||||
body: ""
|
||||
footer:
|
||||
Change-type: patch
|
||||
change-type: patch
|
||||
Signed-off-by: Edwin Joassart <edwin.joassart@balena.io>
|
||||
signed-off-by: Edwin Joassart <edwin.joassart@balena.io>
|
||||
author: Edwin Joassart
|
||||
nested: []
|
||||
version: balena-sdk-17.0.1
|
||||
title: ""
|
||||
date: 2023-05-24T15:35:03.815Z
|
||||
version: 16.7.1
|
||||
title: ""
|
||||
date: 2023-07-18T20:27:03.774Z
|
||||
- commits:
|
||||
- subject: "preload: Add the --no-pin-device-to-release flag to avoid interactive
|
||||
questions"
|
||||
hash: f53f148c8955f90f80e98962f10d4a1fe0dc8474
|
||||
body: ""
|
||||
footer:
|
||||
Change-type: minor
|
||||
change-type: minor
|
||||
See: https://balena.zulipchat.com/#narrow/stream/345746-aspect.2Fproduct/topic/Level.20-.20need.20thoughts.20on.20questions.20.26.20feature.20suggestions
|
||||
see: https://balena.zulipchat.com/#narrow/stream/345746-aspect.2Fproduct/topic/Level.20-.20need.20thoughts.20on.20questions.20.26.20feature.20suggestions
|
||||
author: Thodoris Greasidis
|
||||
nested: []
|
||||
version: 16.7.0
|
||||
title: ""
|
||||
date: 2023-07-17T19:59:49.480Z
|
||||
- commits:
|
||||
- subject: Reduce lodash usage in common user interaction patterns
|
||||
hash: d3c27ae859b32e187546964830cdbc236cc56138
|
||||
body: ""
|
||||
footer:
|
||||
Change-type: patch
|
||||
change-type: patch
|
||||
author: Thodoris Greasidis
|
||||
nested: []
|
||||
version: 16.6.6
|
||||
title: ""
|
||||
date: 2023-07-10T17:16:05.627Z
|
||||
- commits:
|
||||
- subject: "fleet/block/app create: Fetch the supported device types using the
|
||||
hostApps"
|
||||
hash: d78b76aceb4cff60dbfe29d61b3ee5e9a2883fc9
|
||||
body: ""
|
||||
footer:
|
||||
Change-type: patch
|
||||
change-type: patch
|
||||
See: https://balena.fibery.io/Organisation/Improvements-849#Improvements/Stop-relying-on-device-types-v1-device-type.json-for-unrelated-things-257
|
||||
see: https://balena.fibery.io/Organisation/Improvements-849#Improvements/Stop-relying-on-device-types-v1-device-type.json-for-unrelated-things-257
|
||||
author: Thodoris Greasidis
|
||||
nested: []
|
||||
version: 16.6.5
|
||||
title: ""
|
||||
date: 2023-07-09T21:29:52.818Z
|
||||
- commits:
|
||||
- subject: Bump balena-compose to v2.3.0
|
||||
hash: 9d0b82122a3df2791a55c83371828635f6e4a0c1
|
||||
body: |
|
||||
This allows the the CLI to use docker registry config when querying the
|
||||
images manifest.
|
||||
footer:
|
||||
Relates-to: balena-io-modules/balena-compose#31
|
||||
relates-to: balena-io-modules/balena-compose#31
|
||||
Change-type: patch
|
||||
change-type: patch
|
||||
author: Felipe Lalanne
|
||||
nested: []
|
||||
version: 16.6.4
|
||||
title: ""
|
||||
date: 2023-07-06T13:58:25.571Z
|
||||
- commits:
|
||||
- subject: Remove redundant dependency on docker-toolbelt
|
||||
hash: 0f4054fa4ddf74a8c7ec869bef74cee43f182df1
|
||||
|
151
CHANGELOG.md
151
CHANGELOG.md
@ -4,6 +4,157 @@ All notable changes to this project will be documented in this file
|
||||
automatically by Versionist. DO NOT EDIT THIS FILE MANUALLY!
|
||||
This project adheres to [Semantic Versioning](http://semver.org/).
|
||||
|
||||
## 16.7.5 - 2023-07-21
|
||||
|
||||
* Abstract the fleet/app/block create commands [Thodoris Greasidis]
|
||||
|
||||
## 16.7.4 - 2023-07-20
|
||||
|
||||
* move: Include fleets of discontinued device types in the fleet selection [Thodoris Greasidis]
|
||||
|
||||
## 16.7.3 - 2023-07-20
|
||||
|
||||
* promote: Allow joining fleets of discontinued device types [Thodoris Greasidis]
|
||||
|
||||
## 16.7.2 - 2023-07-19
|
||||
|
||||
* Update balena-compose to v3.0.2 [Felipe Lalanne]
|
||||
|
||||
## 16.7.1 - 2023-07-18
|
||||
|
||||
|
||||
<details>
|
||||
<summary> Update balena-sdk to 17.8.0 [Thodoris Greasidis] </summary>
|
||||
|
||||
> ### balena-sdk-17.8.0 - 2023-07-10
|
||||
>
|
||||
> * billing: Add `removeBillingInfo` method for removing billing info [myarmolinsky]
|
||||
>
|
||||
> ### balena-sdk-17.7.1 - 2023-07-09
|
||||
>
|
||||
> * deviceType.getBySlugOrName: Use a clearer var name in the docs example [Thodoris Greasidis]
|
||||
>
|
||||
> ### balena-sdk-17.7.0 - 2023-07-06
|
||||
>
|
||||
> * Add typings for the organization.is_frozen computed term [Thodoris Greasidis]
|
||||
>
|
||||
> ### balena-sdk-17.6.0 - 2023-07-05
|
||||
>
|
||||
> * application.create: Enable creating fleets with archived device types [myarmolinsky]
|
||||
>
|
||||
> ### balena-sdk-17.5.0 - 2023-06-27
|
||||
>
|
||||
> * Add `owns__credit_bundle` typing for `Organization` [myarmolinsky]
|
||||
>
|
||||
> ### balena-sdk-17.4.0 - 2023-06-19
|
||||
>
|
||||
> * Add typings for Credits Notifications [myarmolinsky]
|
||||
>
|
||||
> ### balena-sdk-17.3.2 - 2023-06-19
|
||||
>
|
||||
> * util: Simplify the listImagesFromTargetState helper [Thodoris Greasidis]
|
||||
>
|
||||
> ### balena-sdk-17.3.1 - 2023-06-17
|
||||
>
|
||||
> * Fix prettier complaining on windows runners [Thodoris Greasidis]
|
||||
> * deviceType.getInstructions: Improve the return type [Thodoris Greasidis]
|
||||
> * Fix browser tests now failing to find a polyfill for querystring [Thodoris Greasidis]
|
||||
>
|
||||
> ### balena-sdk-17.3.0 - 2023-06-05
|
||||
>
|
||||
> * os: Export the OsDownloadOptions type [Thodoris Greasidis]
|
||||
>
|
||||
> ### balena-sdk-17.2.3 - 2023-06-04
|
||||
>
|
||||
> * tsconfig: Allow noImplicitThis in the tests [Thodoris Greasidis]
|
||||
> * tsconfig: Switch to strict compilation to fix the 5.1 errors [Thodoris Greasidis]
|
||||
> * Update TypeScript to 5.1.3 [Thodoris Greasidis]
|
||||
>
|
||||
> ### balena-sdk-17.2.2 - 2023-06-01
|
||||
>
|
||||
> * Access other models internally via the shared current sdk instance [Thodoris Greasidis]
|
||||
>
|
||||
> ### balena-sdk-17.2.1 - 2023-06-01
|
||||
>
|
||||
> * Convert the remaining .js tests to .ts [Thodoris Greasidis]
|
||||
>
|
||||
> ### balena-sdk-17.2.0 - 2023-06-01
|
||||
>
|
||||
> * Extends batch device actions to accept arrays of full UUIDs [Thodoris Greasidis]
|
||||
> * device.startOsUpdate: Add support for providing an array of UUIDs [Thodoris Greasidis]
|
||||
>
|
||||
> ### balena-sdk-17.1.4 - Invalid date
|
||||
>
|
||||
> * Add 2fa tests [Otávio Jacobi]
|
||||
>
|
||||
> <details>
|
||||
> <summary> Fix auth.twoFactor.isEnabled() regression returning always true [Thodoris Greasidis] </summary>
|
||||
>
|
||||
>> #### balena-auth-4.2.0 - 2023-05-25
|
||||
>>
|
||||
>> * Add a get2FAStatus() method [Thodoris Greasidis]
|
||||
>>
|
||||
>> #### balena-auth-4.1.3 - 2023-05-25
|
||||
>>
|
||||
>> * Fix async tests not waiting for the result [Thodoris Greasidis]
|
||||
>>
|
||||
>> #### balena-auth-4.1.2 - 2022-09-26
|
||||
>>
|
||||
>> * Delete redundant .resinci.yml [Thodoris Greasidis]
|
||||
>>
|
||||
>> #### balena-auth-4.1.1 - 2022-09-22
|
||||
>>
|
||||
>> * Replace balenaCI with flowzone [Thodoris Greasidis]
|
||||
>>
|
||||
>
|
||||
> </details>
|
||||
>
|
||||
>
|
||||
> ### balena-sdk-17.1.3 - 2023-05-29
|
||||
>
|
||||
> * Add support to short uuid on device.serviceVar.set [Otávio Jacobi]
|
||||
>
|
||||
> ### balena-sdk-17.1.2 - 2023-05-25
|
||||
>
|
||||
> * Switch to a stricter request limiting queuing mode [Thodoris Greasidis]
|
||||
>
|
||||
> ### balena-sdk-17.1.1 - 2023-05-25
|
||||
>
|
||||
> * Drop the callback examples from the docs [Thodoris Greasidis]
|
||||
>
|
||||
> ### balena-sdk-17.1.0 - 2023-05-24
|
||||
>
|
||||
> * Add the requestLimit & requestLimitInterval options to the SDK factory [Thodoris Greasidis]
|
||||
>
|
||||
> ### balena-sdk-17.0.2 - 2023-05-24
|
||||
>
|
||||
> * Update dependencies [Thodoris Greasidis]
|
||||
>
|
||||
> ### balena-sdk-17.0.1 - 2023-05-24
|
||||
>
|
||||
> * Add a method to retrieve the supervisor image for a DT [Edwin Joassart]
|
||||
> * Add util to list images referenced in a target state v3 [Edwin Joassart]
|
||||
> * Add a method for retrieving an application's virtual device target supervisor state [Edwin Joassart]
|
||||
>
|
||||
|
||||
</details>
|
||||
|
||||
## 16.7.0 - 2023-07-17
|
||||
|
||||
* preload: Add the --no-pin-device-to-release flag to avoid interactive questions [Thodoris Greasidis]
|
||||
|
||||
## 16.6.6 - 2023-07-10
|
||||
|
||||
* Reduce lodash usage in common user interaction patterns [Thodoris Greasidis]
|
||||
|
||||
## 16.6.5 - 2023-07-09
|
||||
|
||||
* fleet/block/app create: Fetch the supported device types using the hostApps [Thodoris Greasidis]
|
||||
|
||||
## 16.6.4 - 2023-07-06
|
||||
|
||||
* Bump balena-compose to v2.3.0 [Felipe Lalanne]
|
||||
|
||||
## 16.6.3 - 2023-06-30
|
||||
|
||||
* Remove redundant dependency on docker-toolbelt [Akis Kesoglou]
|
||||
|
@ -18,19 +18,9 @@
|
||||
import { flags } from '@oclif/command';
|
||||
|
||||
import Command from '../../command';
|
||||
import { ExpectedError } from '../../errors';
|
||||
import * as cf from '../../utils/common-flags';
|
||||
import { getBalenaSdk, stripIndent } from '../../utils/lazy';
|
||||
|
||||
interface FlagsDef {
|
||||
organization?: string;
|
||||
type?: string; // application device type
|
||||
help: void;
|
||||
}
|
||||
|
||||
interface ArgsDef {
|
||||
name: string;
|
||||
}
|
||||
import { stripIndent } from '../../utils/lazy';
|
||||
import { ArgsDef, FlagsDef } from '../../utils/application-create';
|
||||
|
||||
export default class AppCreateCmd extends Command {
|
||||
public static description = stripIndent`
|
||||
@ -90,61 +80,8 @@ export default class AppCreateCmd extends Command {
|
||||
AppCreateCmd,
|
||||
);
|
||||
|
||||
// Ascertain device type
|
||||
const deviceType =
|
||||
options.type ||
|
||||
(await (await import('../../utils/patterns')).selectDeviceType());
|
||||
|
||||
// Ascertain organization
|
||||
const organization =
|
||||
options.organization?.toLowerCase() || (await this.getOrganization());
|
||||
|
||||
// Create application
|
||||
try {
|
||||
const application = await getBalenaSdk().models.application.create({
|
||||
name: params.name,
|
||||
deviceType,
|
||||
organization,
|
||||
applicationClass: 'app',
|
||||
});
|
||||
|
||||
// Output
|
||||
console.log(
|
||||
`App created: slug "${application.slug}", device type "${deviceType}"`,
|
||||
);
|
||||
} catch (err) {
|
||||
if ((err.message || '').toLowerCase().includes('unique')) {
|
||||
// BalenaRequestError: Request error: "organization" and "app_name" must be unique.
|
||||
throw new ExpectedError(
|
||||
`Error: An app or block or fleet with the name "${params.name}" already exists in organization "${organization}".`,
|
||||
);
|
||||
} else if ((err.message || '').toLowerCase().includes('unauthorized')) {
|
||||
// BalenaRequestError: Request error: Unauthorized
|
||||
throw new ExpectedError(
|
||||
`Error: You are not authorized to create apps in organization "${organization}".`,
|
||||
);
|
||||
}
|
||||
|
||||
throw err;
|
||||
}
|
||||
}
|
||||
|
||||
async getOrganization() {
|
||||
const { getOwnOrganizations } = await import('../../utils/sdk');
|
||||
const organizations = await getOwnOrganizations(getBalenaSdk(), {
|
||||
$select: ['name', 'handle'],
|
||||
});
|
||||
|
||||
if (organizations.length === 0) {
|
||||
// User is not a member of any organizations (should not happen).
|
||||
throw new Error('This account is not a member of any organizations');
|
||||
} else if (organizations.length === 1) {
|
||||
// User is a member of only one organization - use this.
|
||||
return organizations[0].handle;
|
||||
} else {
|
||||
// User is a member of multiple organizations -
|
||||
const { selectOrganization } = await import('../../utils/patterns');
|
||||
return selectOrganization(organizations);
|
||||
}
|
||||
await (
|
||||
await import('../../utils/application-create')
|
||||
).applicationCreateBase('app', options, params);
|
||||
}
|
||||
}
|
||||
|
@ -18,9 +18,8 @@
|
||||
import { flags } from '@oclif/command';
|
||||
|
||||
import Command from '../../command';
|
||||
import { ExpectedError } from '../../errors';
|
||||
import * as cf from '../../utils/common-flags';
|
||||
import { getBalenaSdk, stripIndent } from '../../utils/lazy';
|
||||
import { stripIndent } from '../../utils/lazy';
|
||||
|
||||
interface FlagsDef {
|
||||
organization?: string;
|
||||
@ -90,61 +89,8 @@ export default class BlockCreateCmd extends Command {
|
||||
BlockCreateCmd,
|
||||
);
|
||||
|
||||
// Ascertain device type
|
||||
const deviceType =
|
||||
options.type ||
|
||||
(await (await import('../../utils/patterns')).selectDeviceType());
|
||||
|
||||
// Ascertain organization
|
||||
const organization =
|
||||
options.organization?.toLowerCase() || (await this.getOrganization());
|
||||
|
||||
// Create application
|
||||
try {
|
||||
const application = await getBalenaSdk().models.application.create({
|
||||
name: params.name,
|
||||
deviceType,
|
||||
organization,
|
||||
applicationClass: 'block',
|
||||
});
|
||||
|
||||
// Output
|
||||
console.log(
|
||||
`Block created: slug "${application.slug}", device type "${deviceType}"`,
|
||||
);
|
||||
} catch (err) {
|
||||
if ((err.message || '').toLowerCase().includes('unique')) {
|
||||
// BalenaRequestError: Request error: "organization" and "app_name" must be unique.
|
||||
throw new ExpectedError(
|
||||
`Error: An app or block or fleet with the name "${params.name}" already exists in organization "${organization}".`,
|
||||
);
|
||||
} else if ((err.message || '').toLowerCase().includes('unauthorized')) {
|
||||
// BalenaRequestError: Request error: Unauthorized
|
||||
throw new ExpectedError(
|
||||
`Error: You are not authorized to create blocks in organization "${organization}".`,
|
||||
);
|
||||
}
|
||||
|
||||
throw err;
|
||||
}
|
||||
}
|
||||
|
||||
async getOrganization() {
|
||||
const { getOwnOrganizations } = await import('../../utils/sdk');
|
||||
const organizations = await getOwnOrganizations(getBalenaSdk(), {
|
||||
$select: ['name', 'handle'],
|
||||
});
|
||||
|
||||
if (organizations.length === 0) {
|
||||
// User is not a member of any organizations (should not happen).
|
||||
throw new Error('This account is not a member of any organizations');
|
||||
} else if (organizations.length === 1) {
|
||||
// User is a member of only one organization - use this.
|
||||
return organizations[0].handle;
|
||||
} else {
|
||||
// User is a member of multiple organizations -
|
||||
const { selectOrganization } = await import('../../utils/patterns');
|
||||
return selectOrganization(organizations);
|
||||
}
|
||||
await (
|
||||
await import('../../utils/application-create')
|
||||
).applicationCreateBase('block', options, params);
|
||||
}
|
||||
}
|
||||
|
@ -20,7 +20,6 @@ import type { IArg } from '@oclif/parser/lib/args';
|
||||
import type {
|
||||
BalenaSDK,
|
||||
Device,
|
||||
DeviceType,
|
||||
PineOptions,
|
||||
PineTypedResult,
|
||||
} from 'balena-sdk';
|
||||
@ -138,7 +137,6 @@ export default class DeviceMoveCmd extends Command {
|
||||
balena: BalenaSDK,
|
||||
devices: Awaited<ReturnType<typeof this.getDevices>>,
|
||||
) {
|
||||
const { getExpandedProp } = await import('../../utils/pine');
|
||||
// deduplicate the slugs
|
||||
const deviceCpuArchs = Array.from(
|
||||
new Set(
|
||||
@ -148,48 +146,44 @@ export default class DeviceMoveCmd extends Command {
|
||||
),
|
||||
);
|
||||
|
||||
const deviceTypeOptions = {
|
||||
$select: 'slug',
|
||||
$expand: {
|
||||
is_of__cpu_architecture: {
|
||||
$select: 'slug',
|
||||
},
|
||||
const allCpuArches = await balena.pine.get({
|
||||
resource: 'cpu_architecture',
|
||||
options: {
|
||||
$select: ['id', 'slug'],
|
||||
},
|
||||
} satisfies PineOptions<DeviceType>;
|
||||
const deviceTypes = (await balena.models.deviceType.getAllSupported(
|
||||
deviceTypeOptions,
|
||||
)) as Array<PineTypedResult<DeviceType, typeof deviceTypeOptions>>;
|
||||
});
|
||||
|
||||
const compatibleDeviceTypeSlugs = new Set(
|
||||
deviceTypes
|
||||
.filter((deviceType) => {
|
||||
const deviceTypeArch = getExpandedProp(
|
||||
deviceType.is_of__cpu_architecture,
|
||||
'slug',
|
||||
)!;
|
||||
return deviceCpuArchs.every((deviceCpuArch) =>
|
||||
balena.models.os.isArchitectureCompatibleWith(
|
||||
deviceCpuArch,
|
||||
deviceTypeArch,
|
||||
),
|
||||
);
|
||||
})
|
||||
.map((deviceType) => deviceType.slug),
|
||||
);
|
||||
const compatibleCpuArchIds = allCpuArches
|
||||
.filter((cpuArch) => {
|
||||
return deviceCpuArchs.every((deviceCpuArch) =>
|
||||
balena.models.os.isArchitectureCompatibleWith(
|
||||
deviceCpuArch,
|
||||
cpuArch.slug,
|
||||
),
|
||||
);
|
||||
})
|
||||
.map((deviceType) => deviceType.id);
|
||||
|
||||
const patterns = await import('../../utils/patterns');
|
||||
try {
|
||||
const application = await patterns.selectApplication(
|
||||
(app) =>
|
||||
compatibleDeviceTypeSlugs.has(app.is_for__device_type[0].slug) &&
|
||||
devices.some(
|
||||
(device) => device.belongs_to__application.__id !== app.id,
|
||||
),
|
||||
{
|
||||
is_for__device_type: {
|
||||
$any: {
|
||||
$alias: 'dt',
|
||||
$expr: {
|
||||
dt: {
|
||||
is_of__cpu_architecture: { $in: compatibleCpuArchIds },
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
true,
|
||||
);
|
||||
return application;
|
||||
} catch (err) {
|
||||
if (!compatibleDeviceTypeSlugs.size) {
|
||||
if (!compatibleCpuArchIds.length) {
|
||||
throw new ExpectedError(
|
||||
`${err.message}\nDo all devices have a compatible architecture?`,
|
||||
);
|
||||
|
@ -18,19 +18,9 @@
|
||||
import { flags } from '@oclif/command';
|
||||
|
||||
import Command from '../../command';
|
||||
import { ExpectedError } from '../../errors';
|
||||
import * as cf from '../../utils/common-flags';
|
||||
import { getBalenaSdk, stripIndent } from '../../utils/lazy';
|
||||
|
||||
interface FlagsDef {
|
||||
organization?: string;
|
||||
type?: string; // application device type
|
||||
help: void;
|
||||
}
|
||||
|
||||
interface ArgsDef {
|
||||
name: string;
|
||||
}
|
||||
import { stripIndent } from '../../utils/lazy';
|
||||
import { ArgsDef, FlagsDef } from '../../utils/application-create';
|
||||
|
||||
export default class FleetCreateCmd extends Command {
|
||||
public static description = stripIndent`
|
||||
@ -90,60 +80,8 @@ export default class FleetCreateCmd extends Command {
|
||||
FleetCreateCmd,
|
||||
);
|
||||
|
||||
// Ascertain device type
|
||||
const deviceType =
|
||||
options.type ||
|
||||
(await (await import('../../utils/patterns')).selectDeviceType());
|
||||
|
||||
// Ascertain organization
|
||||
const organization =
|
||||
options.organization?.toLowerCase() || (await this.getOrganization());
|
||||
|
||||
// Create application
|
||||
try {
|
||||
const application = await getBalenaSdk().models.application.create({
|
||||
name: params.name,
|
||||
deviceType,
|
||||
organization,
|
||||
});
|
||||
|
||||
// Output
|
||||
console.log(
|
||||
`Fleet created: slug "${application.slug}", device type "${deviceType}"`,
|
||||
);
|
||||
} catch (err) {
|
||||
if ((err.message || '').toLowerCase().includes('unique')) {
|
||||
// BalenaRequestError: Request error: "organization" and "app_name" must be unique.
|
||||
throw new ExpectedError(
|
||||
`Error: An app or block or fleet with the name "${params.name}" already exists in organization "${organization}".`,
|
||||
);
|
||||
} else if ((err.message || '').toLowerCase().includes('unauthorized')) {
|
||||
// BalenaRequestError: Request error: Unauthorized
|
||||
throw new ExpectedError(
|
||||
`Error: You are not authorized to create fleets in organization "${organization}".`,
|
||||
);
|
||||
}
|
||||
|
||||
throw err;
|
||||
}
|
||||
}
|
||||
|
||||
async getOrganization() {
|
||||
const { getOwnOrganizations } = await import('../../utils/sdk');
|
||||
const organizations = await getOwnOrganizations(getBalenaSdk(), {
|
||||
$select: ['name', 'handle'],
|
||||
});
|
||||
|
||||
if (organizations.length === 0) {
|
||||
// User is not a member of any organizations (should not happen).
|
||||
throw new Error('This account is not a member of any organizations');
|
||||
} else if (organizations.length === 1) {
|
||||
// User is a member of only one organization - use this.
|
||||
return organizations[0].handle;
|
||||
} else {
|
||||
// User is a member of multiple organizations -
|
||||
const { selectOrganization } = await import('../../utils/patterns');
|
||||
return selectOrganization(organizations);
|
||||
}
|
||||
await (
|
||||
await import('../../utils/application-create')
|
||||
).applicationCreateBase('fleet', options, params);
|
||||
}
|
||||
}
|
||||
|
@ -15,6 +15,7 @@
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
import type * as BalenaSdk from 'balena-sdk';
|
||||
import { flags } from '@oclif/command';
|
||||
|
||||
import Command from '../command';
|
||||
@ -22,7 +23,7 @@ import * as cf from '../utils/common-flags';
|
||||
import { getBalenaSdk, stripIndent } from '../utils/lazy';
|
||||
import type { DataSetOutputOptions } from '../framework';
|
||||
|
||||
interface ExtendedApplication extends ApplicationWithDeviceType {
|
||||
interface ExtendedApplication extends ApplicationWithDeviceTypeSlug {
|
||||
device_count: number;
|
||||
online_devices: number;
|
||||
device_type?: string;
|
||||
@ -60,15 +61,20 @@ export default class FleetsCmd extends Command {
|
||||
|
||||
const balena = getBalenaSdk();
|
||||
|
||||
const pineOptions = {
|
||||
$select: ['id', 'app_name', 'slug'],
|
||||
$expand: {
|
||||
is_for__device_type: { $select: 'slug' },
|
||||
owns__device: { $select: 'is_online' },
|
||||
},
|
||||
} satisfies BalenaSdk.PineOptions<BalenaSdk.Application>;
|
||||
// Get applications
|
||||
const applications =
|
||||
(await balena.models.application.getAllDirectlyAccessible({
|
||||
$select: ['id', 'app_name', 'slug'],
|
||||
$expand: {
|
||||
is_for__device_type: { $select: 'slug' },
|
||||
owns__device: { $select: 'is_online' },
|
||||
},
|
||||
})) as ExtendedApplication[];
|
||||
(await balena.models.application.getAllDirectlyAccessible(
|
||||
pineOptions,
|
||||
)) as Array<
|
||||
BalenaSdk.PineTypedResult<BalenaSdk.Application, typeof pineOptions>
|
||||
> as ExtendedApplication[];
|
||||
|
||||
// Add extended properties
|
||||
applications.forEach((application) => {
|
||||
|
@ -204,7 +204,7 @@ export default class OsConfigureCmd extends Command {
|
||||
const helpers = await import('../../utils/helpers');
|
||||
const { getApplication } = await import('../../utils/sdk');
|
||||
|
||||
let app: ApplicationWithDeviceType | undefined;
|
||||
let app: ApplicationWithDeviceTypeSlug | undefined;
|
||||
let device;
|
||||
let deviceTypeSlug: string;
|
||||
|
||||
@ -223,7 +223,7 @@ export default class OsConfigureCmd extends Command {
|
||||
$expand: {
|
||||
is_for__device_type: { $select: 'slug' },
|
||||
},
|
||||
})) as ApplicationWithDeviceType;
|
||||
})) as ApplicationWithDeviceTypeSlug;
|
||||
await checkDeviceTypeCompatibility(options, app);
|
||||
deviceTypeSlug =
|
||||
options['device-type'] || app.is_for__device_type[0].slug;
|
||||
|
@ -46,7 +46,7 @@ interface FlagsDef extends DockerConnectionCliFlags {
|
||||
commit?: string;
|
||||
'splash-image'?: string;
|
||||
'dont-check-arch': boolean;
|
||||
'pin-device-to-release': boolean;
|
||||
'pin-device-to-release'?: boolean;
|
||||
'additional-space'?: number;
|
||||
'add-certificate'?: string[];
|
||||
help: void;
|
||||
@ -122,7 +122,7 @@ https://github.com/balena-io-examples/staged-releases\
|
||||
'disable architecture compatibility check between image and fleet',
|
||||
}),
|
||||
'pin-device-to-release': flags.boolean({
|
||||
default: false,
|
||||
allowNo: true,
|
||||
description:
|
||||
'pin the preloaded device to the preloaded release on provision',
|
||||
char: 'p',
|
||||
@ -230,7 +230,7 @@ Can be repeated to add multiple certificates.\
|
||||
const splashImage = options['splash-image'];
|
||||
const additionalSpace = options['additional-space'];
|
||||
const dontCheckArch = options['dont-check-arch'] || false;
|
||||
const pinDevice = options['pin-device-to-release'] || false;
|
||||
const pinDevice = options['pin-device-to-release'];
|
||||
|
||||
if (dontCheckArch && !fleetSlug) {
|
||||
throw new ExpectedError(
|
||||
@ -257,7 +257,7 @@ Can be repeated to add multiple certificates.\
|
||||
splashImage,
|
||||
undefined, // TODO: Currently always undefined, investigate approach in ssh command.
|
||||
dontCheckArch,
|
||||
pinDevice,
|
||||
pinDevice ?? false,
|
||||
certificates,
|
||||
additionalSpace,
|
||||
);
|
||||
@ -450,14 +450,14 @@ Can be repeated to add multiple certificates.\
|
||||
async offerToDisableAutomaticUpdates(
|
||||
application: Pick<Application, 'id' | 'should_track_latest_release'>,
|
||||
commit: string,
|
||||
pinDevice: boolean,
|
||||
pinDevice: boolean | undefined,
|
||||
) {
|
||||
const balena = getBalenaSdk();
|
||||
|
||||
if (
|
||||
this.isCurrentCommit(commit) ||
|
||||
!application.should_track_latest_release ||
|
||||
pinDevice
|
||||
pinDevice != null
|
||||
) {
|
||||
return;
|
||||
}
|
||||
@ -476,8 +476,9 @@ through the web dashboard or programatically through the balena API / SDK.
|
||||
Documentation about release policies and pinning can be found at:
|
||||
https://www.balena.io/docs/learn/deploy/release-strategy/release-policy/
|
||||
|
||||
Alternatively, the --pin-device-to-release flag may be used to pin only the
|
||||
preloaded device to the selected release.
|
||||
Alternatively, the --pin-device-to-release or --no-pin-device-to-release flags may be used
|
||||
to avoid this interactive confirmation and pin only the preloaded device to the selected release
|
||||
or keep it unpinned respectively.
|
||||
|
||||
Would you like to disable automatic updates for this fleet now?\
|
||||
`;
|
||||
@ -511,7 +512,7 @@ Would you like to disable automatic updates for this fleet now?\
|
||||
options: {
|
||||
slug?: string;
|
||||
commit?: string;
|
||||
pinDevice: boolean;
|
||||
pinDevice?: boolean;
|
||||
},
|
||||
) {
|
||||
await preloader.prepare();
|
||||
|
58
lib/utils/application-create.ts
Normal file
58
lib/utils/application-create.ts
Normal file
@ -0,0 +1,58 @@
|
||||
import { ExpectedError } from '../errors';
|
||||
import { getBalenaSdk } from './lazy';
|
||||
|
||||
export interface FlagsDef {
|
||||
organization?: string;
|
||||
type?: string; // application device type
|
||||
help: void;
|
||||
}
|
||||
|
||||
export interface ArgsDef {
|
||||
name: string;
|
||||
}
|
||||
|
||||
export async function applicationCreateBase(
|
||||
resource: 'fleet' | 'app' | 'block',
|
||||
options: FlagsDef,
|
||||
params: ArgsDef,
|
||||
) {
|
||||
// Ascertain device type
|
||||
const deviceType =
|
||||
options.type || (await (await import('./patterns')).selectDeviceType());
|
||||
|
||||
// Ascertain organization
|
||||
const organization =
|
||||
options.organization?.toLowerCase() ||
|
||||
(await (await import('./patterns')).getAndSelectOrganization());
|
||||
|
||||
// Create application
|
||||
try {
|
||||
const application = await getBalenaSdk().models.application.create({
|
||||
name: params.name,
|
||||
deviceType,
|
||||
organization,
|
||||
});
|
||||
|
||||
// Output
|
||||
const { capitalize } = await import('lodash');
|
||||
console.log(
|
||||
`${capitalize(resource)} created: slug "${
|
||||
application.slug
|
||||
}", device type "${deviceType}"`,
|
||||
);
|
||||
} catch (err) {
|
||||
if ((err.message || '').toLowerCase().includes('unique')) {
|
||||
// BalenaRequestError: Request error: "organization" and "app_name" must be unique.
|
||||
throw new ExpectedError(
|
||||
`Error: An app or block or fleet with the name "${params.name}" already exists in organization "${organization}".`,
|
||||
);
|
||||
} else if ((err.message || '').toLowerCase().includes('unauthorized')) {
|
||||
// BalenaRequestError: Request error: Unauthorized
|
||||
throw new ExpectedError(
|
||||
`Error: You are not authorized to create ${resource}s in organization "${organization}".`,
|
||||
);
|
||||
}
|
||||
|
||||
throw err;
|
||||
}
|
||||
}
|
@ -588,7 +588,7 @@ async function assignDockerBuildOpts(
|
||||
pull: opts.pull,
|
||||
};
|
||||
if (task.external) {
|
||||
task.dockerOpts.authconfig = await getAuthConfigObj(
|
||||
task.dockerOpts.authconfig = getAuthConfigObj(
|
||||
task.imageName!,
|
||||
opts.registrySecrets,
|
||||
);
|
||||
|
@ -19,10 +19,10 @@ import type {
|
||||
BalenaSDK,
|
||||
Device,
|
||||
Organization,
|
||||
PineFilter,
|
||||
PineOptions,
|
||||
PineTypedResult,
|
||||
} from 'balena-sdk';
|
||||
import _ = require('lodash');
|
||||
|
||||
import { instanceOf, NotLoggedInError, ExpectedError } from '../errors';
|
||||
import { getBalenaSdk, getVisuals, stripIndent, getCliForm } from './lazy';
|
||||
@ -115,22 +115,22 @@ export function askLoginType() {
|
||||
});
|
||||
}
|
||||
|
||||
export function selectDeviceType() {
|
||||
return getBalenaSdk()
|
||||
.models.config.getDeviceTypes()
|
||||
.then((deviceTypes) => {
|
||||
deviceTypes = _.sortBy(deviceTypes, 'name').filter(
|
||||
(dt) => dt.state !== 'DISCONTINUED',
|
||||
);
|
||||
return getCliForm().ask({
|
||||
message: 'Device Type',
|
||||
type: 'list',
|
||||
choices: _.map(deviceTypes, ({ slug: value, name }) => ({
|
||||
name,
|
||||
value,
|
||||
})),
|
||||
});
|
||||
});
|
||||
export async function selectDeviceType() {
|
||||
const sdk = getBalenaSdk();
|
||||
let deviceTypes = await sdk.models.deviceType.getAllSupported();
|
||||
if (deviceTypes.length === 0) {
|
||||
// Without this open-balena users would get an empty list
|
||||
// until we add a hostApps import in open-balena.
|
||||
deviceTypes = await sdk.models.deviceType.getAll();
|
||||
}
|
||||
return getCliForm().ask({
|
||||
message: 'Device Type',
|
||||
type: 'list',
|
||||
choices: deviceTypes.map(({ slug: value, name }) => ({
|
||||
name,
|
||||
value,
|
||||
})),
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
@ -179,27 +179,32 @@ type SelectApplicationResult = PineTypedResult<
|
||||
>;
|
||||
|
||||
export async function selectApplication(
|
||||
filter?: (app: SelectApplicationResult) => boolean,
|
||||
filter?:
|
||||
| PineFilter<Application>
|
||||
| ((app: SelectApplicationResult) => boolean),
|
||||
errorOnEmptySelection = false,
|
||||
) {
|
||||
const balena = getBalenaSdk();
|
||||
const apps = (await balena.models.application.getAllDirectlyAccessible(
|
||||
selectApplicationPineOptions,
|
||||
)) as SelectApplicationResult[];
|
||||
let apps = (await balena.models.application.getAllDirectlyAccessible({
|
||||
...selectApplicationPineOptions,
|
||||
...(filter != null && typeof filter === 'object' && { $filter: filter }),
|
||||
})) as SelectApplicationResult[];
|
||||
|
||||
if (!apps.length) {
|
||||
throw new ExpectedError('No fleets found');
|
||||
}
|
||||
|
||||
const applications = filter ? apps.filter(filter) : apps;
|
||||
if (filter != null && typeof filter === 'function') {
|
||||
apps = apps.filter(filter);
|
||||
}
|
||||
|
||||
if (errorOnEmptySelection && applications.length === 0) {
|
||||
if (errorOnEmptySelection && apps.length === 0) {
|
||||
throw new ExpectedError('No suitable fleets found for selection');
|
||||
}
|
||||
return getCliForm().ask({
|
||||
message: 'Select an application',
|
||||
type: 'list',
|
||||
choices: _.map(applications, (application) => ({
|
||||
choices: apps.map((application) => ({
|
||||
name: `${application.app_name} (${application.slug}) [${application.is_for__device_type[0].slug}]`,
|
||||
value: application,
|
||||
})),
|
||||
@ -223,6 +228,24 @@ export async function selectOrganization(
|
||||
});
|
||||
}
|
||||
|
||||
export async function getAndSelectOrganization() {
|
||||
const { getOwnOrganizations } = await import('./sdk');
|
||||
const organizations = await getOwnOrganizations(getBalenaSdk(), {
|
||||
$select: ['name', 'handle'],
|
||||
});
|
||||
|
||||
if (organizations.length === 0) {
|
||||
// User is not a member of any organizations (should not happen).
|
||||
throw new Error('This account is not a member of any organizations');
|
||||
} else if (organizations.length === 1) {
|
||||
// User is a member of only one organization - use this.
|
||||
return organizations[0].handle;
|
||||
} else {
|
||||
// User is a member of multiple organizations -
|
||||
return selectOrganization(organizations);
|
||||
}
|
||||
}
|
||||
|
||||
export async function awaitDeviceOsUpdate(
|
||||
uuid: string,
|
||||
targetOsVersion: string,
|
||||
@ -338,7 +361,7 @@ export async function getOnlineTargetDeviceUuid(
|
||||
const devices = application.owns__device;
|
||||
|
||||
// Throw if no devices online
|
||||
if (_.isEmpty(devices)) {
|
||||
if (!devices.length) {
|
||||
throw new ExpectedError(
|
||||
`Fleet ${application.slug} found, but has no devices online.`,
|
||||
);
|
||||
@ -349,7 +372,7 @@ export async function getOnlineTargetDeviceUuid(
|
||||
message: `Select a device on fleet ${application.slug}`,
|
||||
type: 'list',
|
||||
default: devices[0].uuid,
|
||||
choices: _.map(devices, (device) => ({
|
||||
choices: devices.map((device) => ({
|
||||
name: `${device.device_name || 'Untitled'} (${device.uuid.slice(0, 7)})`,
|
||||
value: device.uuid,
|
||||
})),
|
||||
@ -363,7 +386,7 @@ export function selectFromList<T>(
|
||||
return getCliForm().ask<T>({
|
||||
message,
|
||||
type: 'list',
|
||||
choices: _.map(choices, (s) => ({
|
||||
choices: choices.map((s) => ({
|
||||
name: s.name,
|
||||
value: s,
|
||||
})),
|
||||
|
@ -228,8 +228,8 @@ async function selectLocalDevice(): Promise<string> {
|
||||
}
|
||||
|
||||
async function selectAppFromList(
|
||||
applications: ApplicationWithDeviceType[],
|
||||
): Promise<ApplicationWithDeviceType> {
|
||||
applications: ApplicationWithDeviceTypeSlug[],
|
||||
): Promise<ApplicationWithDeviceTypeSlug> {
|
||||
const _ = await import('lodash');
|
||||
const { selectFromList } = await import('../utils/patterns');
|
||||
|
||||
@ -247,7 +247,7 @@ async function getOrSelectApplication(
|
||||
sdk: BalenaSdk.BalenaSDK,
|
||||
deviceTypeSlug: string,
|
||||
appName?: string,
|
||||
): Promise<ApplicationWithDeviceType> {
|
||||
): Promise<ApplicationWithDeviceTypeSlug> {
|
||||
const pineOptions = {
|
||||
$select: 'slug',
|
||||
$expand: {
|
||||
@ -256,51 +256,72 @@ async function getOrSelectApplication(
|
||||
},
|
||||
},
|
||||
} satisfies BalenaSdk.PineOptions<BalenaSdk.DeviceType>;
|
||||
const [deviceType, allDeviceTypes] = await Promise.all([
|
||||
sdk.models.deviceType.get(deviceTypeSlug, pineOptions) as Promise<
|
||||
BalenaSdk.PineTypedResult<BalenaSdk.DeviceType, typeof pineOptions>
|
||||
>,
|
||||
sdk.models.deviceType.getAllSupported(pineOptions) as Promise<
|
||||
Array<BalenaSdk.PineTypedResult<BalenaSdk.DeviceType, typeof pineOptions>>
|
||||
>,
|
||||
]);
|
||||
const deviceType = (await sdk.models.deviceType.get(
|
||||
deviceTypeSlug,
|
||||
pineOptions,
|
||||
)) as BalenaSdk.PineTypedResult<BalenaSdk.DeviceType, typeof pineOptions>;
|
||||
const allCpuArches = await sdk.pine.get({
|
||||
resource: 'cpu_architecture',
|
||||
options: {
|
||||
$select: ['id', 'slug'],
|
||||
},
|
||||
});
|
||||
|
||||
const compatibleDeviceTypes = allDeviceTypes
|
||||
.filter((dt) =>
|
||||
const compatibleCpuArchIds = allCpuArches
|
||||
.filter((cpuArch) =>
|
||||
sdk.models.os.isArchitectureCompatibleWith(
|
||||
deviceType.is_of__cpu_architecture[0].slug,
|
||||
dt.is_of__cpu_architecture[0].slug,
|
||||
cpuArch.slug,
|
||||
),
|
||||
)
|
||||
.map((type) => type.slug);
|
||||
.map((cpu) => cpu.id);
|
||||
|
||||
if (!appName) {
|
||||
return createOrSelectApp(sdk, compatibleDeviceTypes, deviceTypeSlug);
|
||||
return createOrSelectApp(
|
||||
sdk,
|
||||
{
|
||||
is_for__device_type: {
|
||||
$any: {
|
||||
$alias: 'dt',
|
||||
$expr: {
|
||||
dt: {
|
||||
is_of__cpu_architecture: { $in: compatibleCpuArchIds },
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
deviceTypeSlug,
|
||||
);
|
||||
}
|
||||
|
||||
const options: BalenaSdk.PineOptions<BalenaSdk.Application> = {
|
||||
const options = {
|
||||
$expand: {
|
||||
is_for__device_type: { $select: 'slug' },
|
||||
is_for__device_type: { $select: ['slug', 'is_of__cpu_architecture'] },
|
||||
},
|
||||
};
|
||||
} satisfies BalenaSdk.PineOptions<BalenaSdk.Application>;
|
||||
|
||||
// Check for a fleet slug of the form `user/fleet` and update the API query.
|
||||
let name: string;
|
||||
const match = appName.split('/');
|
||||
if (match.length > 1) {
|
||||
// These will match at most one fleet
|
||||
options.$filter = { slug: appName.toLowerCase() };
|
||||
(options as BalenaSdk.PineOptions<BalenaSdk.Application>).$filter = {
|
||||
slug: appName.toLowerCase(),
|
||||
};
|
||||
name = match[1];
|
||||
} else {
|
||||
// We're given an application; resolve it if it's ambiguous and also validate
|
||||
// it's of appropriate device type.
|
||||
options.$filter = { app_name: appName };
|
||||
(options as BalenaSdk.PineOptions<BalenaSdk.Application>).$filter = {
|
||||
app_name: appName,
|
||||
};
|
||||
name = appName;
|
||||
}
|
||||
|
||||
const applications = (await sdk.models.application.getAllDirectlyAccessible(
|
||||
options,
|
||||
)) as ApplicationWithDeviceType[];
|
||||
)) as Array<BalenaSdk.PineTypedResult<BalenaSdk.Application, typeof options>>;
|
||||
|
||||
if (applications.length === 0) {
|
||||
await confirm(
|
||||
@ -315,8 +336,11 @@ async function getOrSelectApplication(
|
||||
|
||||
// We've found at least one fleet with the given name.
|
||||
// Filter out fleets for non-matching device types and see what we're left with.
|
||||
const compatibleCpuArchIdsSet = new Set(compatibleCpuArchIds);
|
||||
const validApplications = applications.filter((app) =>
|
||||
compatibleDeviceTypes.includes(app.is_for__device_type[0].slug),
|
||||
compatibleCpuArchIdsSet.has(
|
||||
app.is_for__device_type[0].is_of__cpu_architecture.__id,
|
||||
),
|
||||
);
|
||||
|
||||
if (validApplications.length === 0) {
|
||||
@ -332,21 +356,14 @@ async function getOrSelectApplication(
|
||||
|
||||
async function createOrSelectApp(
|
||||
sdk: BalenaSdk.BalenaSDK,
|
||||
compatibleDeviceTypes: string[],
|
||||
compatibleDeviceTypesFilter: BalenaSdk.PineFilter<BalenaSdk.Application>,
|
||||
deviceType: string,
|
||||
): Promise<ApplicationWithDeviceType> {
|
||||
): Promise<ApplicationWithDeviceTypeSlug> {
|
||||
// No fleet specified, show a list to select one.
|
||||
const applications = (await sdk.models.application.getAllDirectlyAccessible({
|
||||
$expand: { is_for__device_type: { $select: 'slug' } },
|
||||
$filter: {
|
||||
is_for__device_type: {
|
||||
$any: {
|
||||
$alias: 'dt',
|
||||
$expr: { dt: { slug: { $in: compatibleDeviceTypes } } },
|
||||
},
|
||||
},
|
||||
},
|
||||
})) as ApplicationWithDeviceType[];
|
||||
$filter: compatibleDeviceTypesFilter,
|
||||
})) as ApplicationWithDeviceTypeSlug[];
|
||||
|
||||
if (applications.length === 0) {
|
||||
await confirm(
|
||||
@ -366,7 +383,7 @@ async function createApplication(
|
||||
sdk: BalenaSdk.BalenaSDK,
|
||||
deviceType: string,
|
||||
name?: string,
|
||||
): Promise<ApplicationWithDeviceType> {
|
||||
): Promise<ApplicationWithDeviceTypeSlug> {
|
||||
const validation = await import('./validation');
|
||||
|
||||
const username = await sdk.auth.whoami();
|
||||
@ -414,12 +431,12 @@ async function createApplication(
|
||||
$expand: {
|
||||
is_for__device_type: { $select: 'slug' },
|
||||
},
|
||||
})) as ApplicationWithDeviceType;
|
||||
})) as ApplicationWithDeviceTypeSlug;
|
||||
}
|
||||
|
||||
async function generateApplicationConfig(
|
||||
sdk: BalenaSdk.BalenaSDK,
|
||||
app: ApplicationWithDeviceType,
|
||||
app: ApplicationWithDeviceTypeSlug,
|
||||
options: {
|
||||
version: string;
|
||||
appUpdatePollInterval?: number;
|
||||
|
487
npm-shrinkwrap.json
generated
487
npm-shrinkwrap.json
generated
@ -1,16 +1,16 @@
|
||||
{
|
||||
"name": "balena-cli",
|
||||
"version": "16.6.3",
|
||||
"version": "16.7.5",
|
||||
"lockfileVersion": 2,
|
||||
"requires": true,
|
||||
"packages": {
|
||||
"": {
|
||||
"name": "balena-cli",
|
||||
"version": "16.6.3",
|
||||
"version": "16.7.5",
|
||||
"hasInstallScript": true,
|
||||
"license": "Apache-2.0",
|
||||
"dependencies": {
|
||||
"@balena/compose": "^2.2.1",
|
||||
"@balena/compose": "^3.0.2",
|
||||
"@balena/dockerignore": "^1.0.2",
|
||||
"@balena/es-version": "^1.0.1",
|
||||
"@oclif/command": "^1.8.16",
|
||||
@ -24,7 +24,7 @@
|
||||
"balena-image-fs": "^7.0.6",
|
||||
"balena-image-manager": "^9.0.0",
|
||||
"balena-preload": "^14.0.0",
|
||||
"balena-sdk": "^17.0.0",
|
||||
"balena-sdk": "^17.8.0",
|
||||
"balena-semver": "^2.3.0",
|
||||
"balena-settings-client": "^5.0.2",
|
||||
"balena-settings-storage": "^7.0.0",
|
||||
@ -1103,9 +1103,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@babel/generator": {
|
||||
"version": "7.22.5",
|
||||
"resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.22.5.tgz",
|
||||
"integrity": "sha512-+lcUbnTRhd0jOewtFSedLyiPsD5tswKkbgcezOqqWFUVNEwoUTlpPOBmvhG7OXWLR4jMdv0czPGH5XbflnD1EA==",
|
||||
"version": "7.22.9",
|
||||
"resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.22.9.tgz",
|
||||
"integrity": "sha512-KtLMbmicyuK2Ak/FTCJVbDnkN1SlT8/kceFTiuDiiRUUSMnHMidxSCdG4ndkTOHHpoomWe/4xkvHkEOncwjYIw==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"@babel/types": "^7.22.5",
|
||||
@ -1296,9 +1296,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@babel/template/node_modules/@babel/parser": {
|
||||
"version": "7.22.5",
|
||||
"resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.22.5.tgz",
|
||||
"integrity": "sha512-DFZMC9LJUG9PLOclRC32G63UXwzqS2koQC8dkx+PLdmt1xSePYpbT/NbsrJy8Q/muXz7o/h/d4A7Fuyixm559Q==",
|
||||
"version": "7.22.7",
|
||||
"resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.22.7.tgz",
|
||||
"integrity": "sha512-7NF8pOkHP5o2vpmGgNGcfAeCvOYhGLyA3Z4eBQkT1RJlWu47n63bCs93QfJ2hIAFCil7L5P2IWhs1oToVgrL0Q==",
|
||||
"dev": true,
|
||||
"bin": {
|
||||
"parser": "bin/babel-parser.js"
|
||||
@ -1343,9 +1343,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@babel/traverse/node_modules/@babel/parser": {
|
||||
"version": "7.22.5",
|
||||
"resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.22.5.tgz",
|
||||
"integrity": "sha512-DFZMC9LJUG9PLOclRC32G63UXwzqS2koQC8dkx+PLdmt1xSePYpbT/NbsrJy8Q/muXz7o/h/d4A7Fuyixm559Q==",
|
||||
"version": "7.22.7",
|
||||
"resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.22.7.tgz",
|
||||
"integrity": "sha512-7NF8pOkHP5o2vpmGgNGcfAeCvOYhGLyA3Z4eBQkT1RJlWu47n63bCs93QfJ2hIAFCil7L5P2IWhs1oToVgrL0Q==",
|
||||
"dev": true,
|
||||
"bin": {
|
||||
"parser": "bin/babel-parser.js"
|
||||
@ -1394,9 +1394,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@balena/compose": {
|
||||
"version": "2.2.1",
|
||||
"resolved": "https://registry.npmjs.org/@balena/compose/-/compose-2.2.1.tgz",
|
||||
"integrity": "sha512-NxXXG6IN50fx5ZB6e41IsUKH/W1qCFPJeF1Tg0Tg2SqsPn7zq6o5LL0ENc0WkG+ytphxA8W+d4KjV2SQMe6ClA==",
|
||||
"version": "3.0.2",
|
||||
"resolved": "https://registry.npmjs.org/@balena/compose/-/compose-3.0.2.tgz",
|
||||
"integrity": "sha512-CZnGpAmt1g1ltm6f8UhnWX3/iglpOOgWtphAhh9wPirR5v3KkzjbRRnXbBNLWC5UIyxJNwXvmioByPVEaNE6mQ==",
|
||||
"dependencies": {
|
||||
"ajv": "^6.12.3",
|
||||
"bluebird": "^3.7.2",
|
||||
@ -1421,12 +1421,12 @@
|
||||
"request": "^2.88.2",
|
||||
"semver": "^7.3.5",
|
||||
"stream-to-promise": "^3.0.0",
|
||||
"tar-stream": "^2.1.3",
|
||||
"tar-utils": "^2.1.0",
|
||||
"tar-stream": "^3.1.6",
|
||||
"tar-utils": "^3.0.2",
|
||||
"typed-error": "^3.2.1"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=12.0.0"
|
||||
"node": ">=16.13.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@balena/compose/node_modules/docker-modem": {
|
||||
@ -1502,6 +1502,27 @@
|
||||
"node": ">= 10"
|
||||
}
|
||||
},
|
||||
"node_modules/@balena/compose/node_modules/tar-stream": {
|
||||
"version": "3.1.6",
|
||||
"resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-3.1.6.tgz",
|
||||
"integrity": "sha512-B/UyjYwPpMBv+PaFSWAmtYjwdrlEaZQEhMIBFNC5oEG8lpiW8XjcSdmEaClj28ArfKScKHs2nshz3k2le6crsg==",
|
||||
"dependencies": {
|
||||
"b4a": "^1.6.4",
|
||||
"fast-fifo": "^1.2.0",
|
||||
"streamx": "^2.15.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@balena/compose/node_modules/tar-utils": {
|
||||
"version": "3.0.2",
|
||||
"resolved": "https://registry.npmjs.org/tar-utils/-/tar-utils-3.0.2.tgz",
|
||||
"integrity": "sha512-UimIIz7AKMvSKPF09ma4QG++NKjeHL/IylmCXOWgCAaAikruR40PlbhfxDmWVM/JKwc4umHGSp65UFIeJ/5/Hw==",
|
||||
"dependencies": {
|
||||
"tar-stream": "^3.1.6"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=16.13.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@balena/dockerignore": {
|
||||
"version": "1.0.2",
|
||||
"resolved": "https://registry.npmjs.org/@balena/dockerignore/-/dockerignore-1.0.2.tgz",
|
||||
@ -1802,16 +1823,16 @@
|
||||
"integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg=="
|
||||
},
|
||||
"node_modules/@oclif/command": {
|
||||
"version": "1.8.29",
|
||||
"resolved": "https://registry.npmjs.org/@oclif/command/-/command-1.8.29.tgz",
|
||||
"integrity": "sha512-wupMygd4nZ5B4oCjkjGBMzZKY9tjNKGg8iZgqjLpWs9zz8WlwIf0DemDkdaYfIkZ7vUGbPAKSg0zbD/qSdhMRw==",
|
||||
"version": "1.8.33",
|
||||
"resolved": "https://registry.npmjs.org/@oclif/command/-/command-1.8.33.tgz",
|
||||
"integrity": "sha512-7ZPvThrZaICX1hoZ/S82DaGgjI3UGG2rveBfxCE9JlgvrDQQiHLA6a/N7Hf3jq6t51AkXbBMhaMOBzXtSd73QA==",
|
||||
"dependencies": {
|
||||
"@oclif/config": "^1.18.2",
|
||||
"@oclif/errors": "^1.3.6",
|
||||
"@oclif/help": "^1.0.1",
|
||||
"@oclif/parser": "^3.8.12",
|
||||
"@oclif/parser": "^3.8.14",
|
||||
"debug": "^4.1.1",
|
||||
"semver": "^7.5.3"
|
||||
"semver": "^7.5.4"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=12.0.0"
|
||||
@ -2026,14 +2047,14 @@
|
||||
"integrity": "sha512-Ups2dShK52xXa8w6iBWLgcjPJWjais6KPJQq3gQ/88AY6BXoTX+MIGFPrWQO1KLMiQfoTpcLnUwloN4brrVUHw=="
|
||||
},
|
||||
"node_modules/@oclif/parser": {
|
||||
"version": "3.8.12",
|
||||
"resolved": "https://registry.npmjs.org/@oclif/parser/-/parser-3.8.12.tgz",
|
||||
"integrity": "sha512-yGUrpddLHdPMJIS5jEd55cEPTIFRZRdx38zz0YdFp17Co4RdZvii2jnrnAoICHhumAoQ3EBxwjGpp88D7Bin4w==",
|
||||
"version": "3.8.14",
|
||||
"resolved": "https://registry.npmjs.org/@oclif/parser/-/parser-3.8.14.tgz",
|
||||
"integrity": "sha512-dGF3/Db+YZTxlR2f5cUbFcUXhrGxeVu9aT+Y/J7Wt6KMRiBJ6igIBChDHvRjjQVujR00OpdkS6fyLgBFI5meWQ==",
|
||||
"dependencies": {
|
||||
"@oclif/errors": "^1.3.6",
|
||||
"@oclif/linewrap": "^1.0.0",
|
||||
"chalk": "^4.1.0",
|
||||
"tslib": "^2.5.3"
|
||||
"tslib": "^2.6.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=8.0.0"
|
||||
@ -3061,9 +3082,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@types/node": {
|
||||
"version": "16.18.37",
|
||||
"resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.37.tgz",
|
||||
"integrity": "sha512-ql+4dw4PlPFBP495k8JzUX/oMNRI2Ei4PrMHgj8oT4VhGlYUzF4EYr0qk2fW+XBVGIrq8Zzk13m4cvyXZuv4pA=="
|
||||
"version": "16.18.38",
|
||||
"resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.38.tgz",
|
||||
"integrity": "sha512-6sfo1qTulpVbkxECP+AVrHV9OoJqhzCsfTNp5NIG+enM4HyM3HvZCO798WShIXBN0+QtDIcutJCjsVYnQP5rIQ=="
|
||||
},
|
||||
"node_modules/@types/node-cleanup": {
|
||||
"version": "2.1.2",
|
||||
@ -3906,15 +3927,20 @@
|
||||
"follow-redirects": "^1.14.0"
|
||||
}
|
||||
},
|
||||
"node_modules/b4a": {
|
||||
"version": "1.6.4",
|
||||
"resolved": "https://registry.npmjs.org/b4a/-/b4a-1.6.4.tgz",
|
||||
"integrity": "sha512-fpWrvyVHEKyeEvbKZTVOeZF3VSKKWtJxFIxX/jaVPf+cLbGUSitjb49pHLqPV2BUNNZ0LcoeEGfE/YCpyDYHIw=="
|
||||
},
|
||||
"node_modules/balanced-match": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
|
||||
"integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c="
|
||||
},
|
||||
"node_modules/balena-auth": {
|
||||
"version": "4.1.2",
|
||||
"resolved": "https://registry.npmjs.org/balena-auth/-/balena-auth-4.1.2.tgz",
|
||||
"integrity": "sha512-F0cnqcm45X2aujClDePH3TOYj/ngz1IepFE9F5A6/QRqPgju1uLlMgplnUahgZK+wpPhuegn+ke3wvjzWU7vSQ==",
|
||||
"version": "4.2.1",
|
||||
"resolved": "https://registry.npmjs.org/balena-auth/-/balena-auth-4.2.1.tgz",
|
||||
"integrity": "sha512-crYf0gHp+hgP19HbjDmo3YoZqUBKB/5ziFjnvDxnnetW8yr0tpy38hlwQD1HkjPjjBqj5vRvnAQJgYnPv2oYCg==",
|
||||
"dependencies": {
|
||||
"@types/jwt-decode": "^2.2.1",
|
||||
"balena-errors": "^4.7.1",
|
||||
@ -4162,15 +4188,15 @@
|
||||
}
|
||||
},
|
||||
"node_modules/balena-sdk": {
|
||||
"version": "17.0.0",
|
||||
"resolved": "https://registry.npmjs.org/balena-sdk/-/balena-sdk-17.0.0.tgz",
|
||||
"integrity": "sha512-CivFA2dGjV232nhPyc/1aA19EXLbZ5BAJ3EQ0TsA3xNx7M7fZr76Q9s47BDfAFgEO921dFxBZx30xqY1ifFI6g==",
|
||||
"version": "17.8.0",
|
||||
"resolved": "https://registry.npmjs.org/balena-sdk/-/balena-sdk-17.8.0.tgz",
|
||||
"integrity": "sha512-njbSVvmG3u5SNrnF0FojJXx6ELCCk98pzcjT5E5wd5Ig3dyKEKbmocgcW4YzarIvb8q1/f0FAYvwKNw4RM354A==",
|
||||
"dependencies": {
|
||||
"@balena/es-version": "^1.0.0",
|
||||
"@types/json-schema": "^7.0.9",
|
||||
"@types/node": "^14.0.0",
|
||||
"abortcontroller-polyfill": "^1.7.1",
|
||||
"balena-auth": "^4.1.0",
|
||||
"balena-auth": "^4.2.0",
|
||||
"balena-errors": "^4.7.3",
|
||||
"balena-hup-action-utils": "~5.0.0",
|
||||
"balena-register-device": "^8.0.0",
|
||||
@ -4182,6 +4208,7 @@
|
||||
"lodash": "^4.17.21",
|
||||
"memoizee": "^0.4.15",
|
||||
"ndjson": "^2.0.0",
|
||||
"p-throttle": "^4.1.1",
|
||||
"pinejs-client-core": "^6.12.0",
|
||||
"tslib": "^2.1.0"
|
||||
},
|
||||
@ -4190,9 +4217,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/balena-sdk/node_modules/@types/node": {
|
||||
"version": "14.18.52",
|
||||
"resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.52.tgz",
|
||||
"integrity": "sha512-DGhiXKOHSFVVm+PJD+9Y0ObxXLeG6qwc0HoOn+ooQKeNNu+T2mEJCM5UBDUREKAggl9MHYjb5E71PAmx6MbzIg=="
|
||||
"version": "14.18.53",
|
||||
"resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.53.tgz",
|
||||
"integrity": "sha512-soGmOpVBUq+gaBMwom1M+krC/NNbWlosh4AtGA03SyWNDiqSKtwp7OulO1M6+mg8YkHMvJ/y0AkCeO8d1hNb7A=="
|
||||
},
|
||||
"node_modules/balena-sdk/node_modules/date-fns": {
|
||||
"version": "2.30.0",
|
||||
@ -6121,9 +6148,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/cross-spawn/node_modules/semver": {
|
||||
"version": "5.7.1",
|
||||
"resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
|
||||
"integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
|
||||
"version": "5.7.2",
|
||||
"resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz",
|
||||
"integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==",
|
||||
"bin": {
|
||||
"semver": "bin/semver"
|
||||
}
|
||||
@ -7025,9 +7052,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/editions/node_modules/semver": {
|
||||
"version": "6.3.0",
|
||||
"resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
|
||||
"integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
|
||||
"version": "6.3.1",
|
||||
"resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
|
||||
"integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
|
||||
"bin": {
|
||||
"semver": "bin/semver.js"
|
||||
}
|
||||
@ -7486,9 +7513,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/eslint/node_modules/semver": {
|
||||
"version": "6.3.0",
|
||||
"resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
|
||||
"integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
|
||||
"version": "6.3.1",
|
||||
"resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
|
||||
"integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
|
||||
"dev": true,
|
||||
"bin": {
|
||||
"semver": "bin/semver.js"
|
||||
@ -7764,9 +7791,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/etcher-sdk/node_modules/detect-libc": {
|
||||
"version": "2.0.1",
|
||||
"resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.1.tgz",
|
||||
"integrity": "sha512-463v3ZeIrcWtdgIg6vI6XUncguvr2TnGl4SzDXinkt9mSLpBJKXT3mW6xT3VQdDN11+WVs29pgvivTc4Lp8v+w==",
|
||||
"version": "2.0.2",
|
||||
"resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.2.tgz",
|
||||
"integrity": "sha512-UX6sGumvvqSaXgdKGUsgZWqcUyIXZ/vZTrlRT/iobiKhGL0zL4d3osHj3uqllWJK+i+sixDS/3COVEOFbupFyw==",
|
||||
"engines": {
|
||||
"node": ">=8"
|
||||
}
|
||||
@ -8290,6 +8317,11 @@
|
||||
"resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
|
||||
"integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q=="
|
||||
},
|
||||
"node_modules/fast-fifo": {
|
||||
"version": "1.3.0",
|
||||
"resolved": "https://registry.npmjs.org/fast-fifo/-/fast-fifo-1.3.0.tgz",
|
||||
"integrity": "sha512-IgfweLvEpwyA4WgiQe9Nx6VV2QkML2NkvZnk1oKnIzXgXdWxuhF7zw4DvLTPZJn6PIUneiAXPF24QmoEqHTjyw=="
|
||||
},
|
||||
"node_modules/fast-glob": {
|
||||
"version": "3.3.0",
|
||||
"resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.0.tgz",
|
||||
@ -11442,9 +11474,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/jsonwebtoken/node_modules/semver": {
|
||||
"version": "5.7.1",
|
||||
"resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
|
||||
"integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
|
||||
"version": "5.7.2",
|
||||
"resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz",
|
||||
"integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==",
|
||||
"dev": true,
|
||||
"bin": {
|
||||
"semver": "bin/semver"
|
||||
@ -11497,9 +11529,9 @@
|
||||
"integrity": "sha512-86GgN2vzfUu7m9Wcj63iUkuDzFNYFVmjeDm2GzWpUk+opB0pEpMsw6ePCMrhYkumz2C1ihqtZzOMAg7FiXcNoQ=="
|
||||
},
|
||||
"node_modules/keyv": {
|
||||
"version": "4.5.2",
|
||||
"resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.2.tgz",
|
||||
"integrity": "sha512-5MHbFaKn8cNSmVW7BYnijeAVlE4cYA/SVkifVgrh7yotnfhKmjuXpDKjrABLnT0SfHWV21P8ow07OGfRrNDg8g==",
|
||||
"version": "4.5.3",
|
||||
"resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.3.tgz",
|
||||
"integrity": "sha512-QCiSav9WaX1PgETJ+SpNnx2PRRapJ/oRSXM4VO5OGYGSjrxbKPVFVhB3l2OCbLCk329N8qyAtsJjSjvVBWzEug==",
|
||||
"dependencies": {
|
||||
"json-buffer": "3.0.1"
|
||||
}
|
||||
@ -12152,9 +12184,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/make-dir/node_modules/semver": {
|
||||
"version": "6.3.0",
|
||||
"resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
|
||||
"integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
|
||||
"version": "6.3.1",
|
||||
"resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
|
||||
"integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
|
||||
"bin": {
|
||||
"semver": "bin/semver.js"
|
||||
}
|
||||
@ -13560,9 +13592,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/node-abi/node_modules/semver": {
|
||||
"version": "5.7.1",
|
||||
"resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
|
||||
"integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
|
||||
"version": "5.7.2",
|
||||
"resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz",
|
||||
"integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==",
|
||||
"bin": {
|
||||
"semver": "bin/semver"
|
||||
}
|
||||
@ -13671,9 +13703,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/normalize-package-data/node_modules/semver": {
|
||||
"version": "5.7.1",
|
||||
"resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
|
||||
"integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
|
||||
"version": "5.7.2",
|
||||
"resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz",
|
||||
"integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==",
|
||||
"bin": {
|
||||
"semver": "bin/semver"
|
||||
}
|
||||
@ -14430,6 +14462,17 @@
|
||||
"node": ">=8"
|
||||
}
|
||||
},
|
||||
"node_modules/p-throttle": {
|
||||
"version": "4.1.1",
|
||||
"resolved": "https://registry.npmjs.org/p-throttle/-/p-throttle-4.1.1.tgz",
|
||||
"integrity": "sha512-TuU8Ato+pRTPJoDzYD4s7ocJYcNSEZRvlxoq3hcPI2kZDZ49IQ1Wkj7/gDJc3X7XiEAAvRGtDzdXJI0tC3IL1g==",
|
||||
"engines": {
|
||||
"node": ">=10"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://github.com/sponsors/sindresorhus"
|
||||
}
|
||||
},
|
||||
"node_modules/p-timeout": {
|
||||
"version": "1.2.1",
|
||||
"resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-1.2.1.tgz",
|
||||
@ -14612,9 +14655,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/package-json/node_modules/semver": {
|
||||
"version": "6.3.0",
|
||||
"resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
|
||||
"integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
|
||||
"version": "6.3.1",
|
||||
"resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
|
||||
"integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
|
||||
"bin": {
|
||||
"semver": "bin/semver.js"
|
||||
}
|
||||
@ -14820,9 +14863,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/patch-package/node_modules/semver": {
|
||||
"version": "5.7.1",
|
||||
"resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
|
||||
"integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
|
||||
"version": "5.7.2",
|
||||
"resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz",
|
||||
"integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==",
|
||||
"bin": {
|
||||
"semver": "bin/semver"
|
||||
}
|
||||
@ -15196,9 +15239,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/pkg/node_modules/detect-libc": {
|
||||
"version": "2.0.1",
|
||||
"resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.1.tgz",
|
||||
"integrity": "sha512-463v3ZeIrcWtdgIg6vI6XUncguvr2TnGl4SzDXinkt9mSLpBJKXT3mW6xT3VQdDN11+WVs29pgvivTc4Lp8v+w==",
|
||||
"version": "2.0.2",
|
||||
"resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.2.tgz",
|
||||
"integrity": "sha512-UX6sGumvvqSaXgdKGUsgZWqcUyIXZ/vZTrlRT/iobiKhGL0zL4d3osHj3uqllWJK+i+sixDS/3COVEOFbupFyw==",
|
||||
"dev": true,
|
||||
"engines": {
|
||||
"node": ">=8"
|
||||
@ -16098,6 +16141,11 @@
|
||||
"lodash": "^4.17.21"
|
||||
}
|
||||
},
|
||||
"node_modules/queue-tick": {
|
||||
"version": "1.0.1",
|
||||
"resolved": "https://registry.npmjs.org/queue-tick/-/queue-tick-1.0.1.tgz",
|
||||
"integrity": "sha512-kJt5qhMxoszgU/62PLP1CJytzd2NKetjSRnyuj31fDd3Rlcz3fzlFdFLD1SItunPwyqEOkca6GbV612BWfaBag=="
|
||||
},
|
||||
"node_modules/quick-lru": {
|
||||
"version": "5.1.1",
|
||||
"resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz",
|
||||
@ -17202,9 +17250,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/semver": {
|
||||
"version": "7.5.3",
|
||||
"resolved": "https://registry.npmjs.org/semver/-/semver-7.5.3.tgz",
|
||||
"integrity": "sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ==",
|
||||
"version": "7.5.4",
|
||||
"resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz",
|
||||
"integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==",
|
||||
"dependencies": {
|
||||
"lru-cache": "^6.0.0"
|
||||
},
|
||||
@ -17232,9 +17280,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/semver-diff/node_modules/semver": {
|
||||
"version": "6.3.0",
|
||||
"resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
|
||||
"integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
|
||||
"version": "6.3.1",
|
||||
"resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
|
||||
"integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
|
||||
"bin": {
|
||||
"semver": "bin/semver.js"
|
||||
}
|
||||
@ -18172,6 +18220,15 @@
|
||||
"node": ">=0.8.0"
|
||||
}
|
||||
},
|
||||
"node_modules/streamx": {
|
||||
"version": "2.15.0",
|
||||
"resolved": "https://registry.npmjs.org/streamx/-/streamx-2.15.0.tgz",
|
||||
"integrity": "sha512-HcxY6ncGjjklGs1xsP1aR71INYcsXFJet5CU1CHqihQ2J5nOsbd4OjgjHO42w/4QNv9gZb3BueV+Vxok5pLEXg==",
|
||||
"dependencies": {
|
||||
"fast-fifo": "^1.1.0",
|
||||
"queue-tick": "^1.0.1"
|
||||
}
|
||||
},
|
||||
"node_modules/strict-event-emitter-types": {
|
||||
"version": "2.0.0",
|
||||
"resolved": "https://registry.npmjs.org/strict-event-emitter-types/-/strict-event-emitter-types-2.0.0.tgz",
|
||||
@ -18778,9 +18835,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/tar-utils": {
|
||||
"version": "2.1.2",
|
||||
"resolved": "https://registry.npmjs.org/tar-utils/-/tar-utils-2.1.2.tgz",
|
||||
"integrity": "sha512-NBnDhRG1KE/FDYgrAz3KfgDKGsqczeTj+ZVXZFNMq21iQjRzvu5/l405kgP9qRWVMysZRwkYnGat6EDlKmauzg==",
|
||||
"version": "2.1.3",
|
||||
"resolved": "https://registry.npmjs.org/tar-utils/-/tar-utils-2.1.3.tgz",
|
||||
"integrity": "sha512-qNT76v6A4kF3Ye9p0EpVTLIS3Dbr2amGbJRW3t7mOIYiuI7hHIZ6VHWyiMW5JgxoB4RmRfShVSCGZEHomO8hNw==",
|
||||
"dependencies": {
|
||||
"bluebird": "^3.7.2",
|
||||
"tar-stream": "^2.1.3"
|
||||
@ -19177,9 +19234,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/ts-node/node_modules/acorn": {
|
||||
"version": "8.9.0",
|
||||
"resolved": "https://registry.npmjs.org/acorn/-/acorn-8.9.0.tgz",
|
||||
"integrity": "sha512-jaVNAFBHNLXspO543WnNNPZFRtavh3skAkITqD0/2aeMkKZTN+254PyhwxFYrk3vQ1xfY+2wbesJMs/JC8/PwQ==",
|
||||
"version": "8.10.0",
|
||||
"resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz",
|
||||
"integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==",
|
||||
"dev": true,
|
||||
"bin": {
|
||||
"acorn": "bin/acorn"
|
||||
@ -19357,9 +19414,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/tslint/node_modules/semver": {
|
||||
"version": "5.7.1",
|
||||
"resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
|
||||
"integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
|
||||
"version": "5.7.2",
|
||||
"resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz",
|
||||
"integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==",
|
||||
"dev": true,
|
||||
"bin": {
|
||||
"semver": "bin/semver"
|
||||
@ -20321,9 +20378,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/winusb-driver-generator/node_modules/detect-libc": {
|
||||
"version": "2.0.1",
|
||||
"resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.1.tgz",
|
||||
"integrity": "sha512-463v3ZeIrcWtdgIg6vI6XUncguvr2TnGl4SzDXinkt9mSLpBJKXT3mW6xT3VQdDN11+WVs29pgvivTc4Lp8v+w==",
|
||||
"version": "2.0.2",
|
||||
"resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.2.tgz",
|
||||
"integrity": "sha512-UX6sGumvvqSaXgdKGUsgZWqcUyIXZ/vZTrlRT/iobiKhGL0zL4d3osHj3uqllWJK+i+sixDS/3COVEOFbupFyw==",
|
||||
"optional": true,
|
||||
"engines": {
|
||||
"node": ">=8"
|
||||
@ -21298,9 +21355,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/yeoman-environment/node_modules/yeoman-generator/node_modules/cross-spawn/node_modules/semver": {
|
||||
"version": "5.7.1",
|
||||
"resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
|
||||
"integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
|
||||
"version": "5.7.2",
|
||||
"resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz",
|
||||
"integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==",
|
||||
"bin": {
|
||||
"semver": "bin/semver"
|
||||
}
|
||||
@ -22991,9 +23048,9 @@
|
||||
}
|
||||
},
|
||||
"@babel/generator": {
|
||||
"version": "7.22.5",
|
||||
"resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.22.5.tgz",
|
||||
"integrity": "sha512-+lcUbnTRhd0jOewtFSedLyiPsD5tswKkbgcezOqqWFUVNEwoUTlpPOBmvhG7OXWLR4jMdv0czPGH5XbflnD1EA==",
|
||||
"version": "7.22.9",
|
||||
"resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.22.9.tgz",
|
||||
"integrity": "sha512-KtLMbmicyuK2Ak/FTCJVbDnkN1SlT8/kceFTiuDiiRUUSMnHMidxSCdG4ndkTOHHpoomWe/4xkvHkEOncwjYIw==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"@babel/types": "^7.22.5",
|
||||
@ -23142,9 +23199,9 @@
|
||||
},
|
||||
"dependencies": {
|
||||
"@babel/parser": {
|
||||
"version": "7.22.5",
|
||||
"resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.22.5.tgz",
|
||||
"integrity": "sha512-DFZMC9LJUG9PLOclRC32G63UXwzqS2koQC8dkx+PLdmt1xSePYpbT/NbsrJy8Q/muXz7o/h/d4A7Fuyixm559Q==",
|
||||
"version": "7.22.7",
|
||||
"resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.22.7.tgz",
|
||||
"integrity": "sha512-7NF8pOkHP5o2vpmGgNGcfAeCvOYhGLyA3Z4eBQkT1RJlWu47n63bCs93QfJ2hIAFCil7L5P2IWhs1oToVgrL0Q==",
|
||||
"dev": true
|
||||
},
|
||||
"@babel/types": {
|
||||
@ -23179,9 +23236,9 @@
|
||||
},
|
||||
"dependencies": {
|
||||
"@babel/parser": {
|
||||
"version": "7.22.5",
|
||||
"resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.22.5.tgz",
|
||||
"integrity": "sha512-DFZMC9LJUG9PLOclRC32G63UXwzqS2koQC8dkx+PLdmt1xSePYpbT/NbsrJy8Q/muXz7o/h/d4A7Fuyixm559Q==",
|
||||
"version": "7.22.7",
|
||||
"resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.22.7.tgz",
|
||||
"integrity": "sha512-7NF8pOkHP5o2vpmGgNGcfAeCvOYhGLyA3Z4eBQkT1RJlWu47n63bCs93QfJ2hIAFCil7L5P2IWhs1oToVgrL0Q==",
|
||||
"dev": true
|
||||
},
|
||||
"@babel/types": {
|
||||
@ -23217,9 +23274,9 @@
|
||||
}
|
||||
},
|
||||
"@balena/compose": {
|
||||
"version": "2.2.1",
|
||||
"resolved": "https://registry.npmjs.org/@balena/compose/-/compose-2.2.1.tgz",
|
||||
"integrity": "sha512-NxXXG6IN50fx5ZB6e41IsUKH/W1qCFPJeF1Tg0Tg2SqsPn7zq6o5LL0ENc0WkG+ytphxA8W+d4KjV2SQMe6ClA==",
|
||||
"version": "3.0.2",
|
||||
"resolved": "https://registry.npmjs.org/@balena/compose/-/compose-3.0.2.tgz",
|
||||
"integrity": "sha512-CZnGpAmt1g1ltm6f8UhnWX3/iglpOOgWtphAhh9wPirR5v3KkzjbRRnXbBNLWC5UIyxJNwXvmioByPVEaNE6mQ==",
|
||||
"requires": {
|
||||
"ajv": "^6.12.3",
|
||||
"bluebird": "^3.7.2",
|
||||
@ -23244,8 +23301,8 @@
|
||||
"request": "^2.88.2",
|
||||
"semver": "^7.3.5",
|
||||
"stream-to-promise": "^3.0.0",
|
||||
"tar-stream": "^2.1.3",
|
||||
"tar-utils": "^2.1.0",
|
||||
"tar-stream": "^3.1.6",
|
||||
"tar-utils": "^3.0.2",
|
||||
"typed-error": "^3.2.1"
|
||||
},
|
||||
"dependencies": {
|
||||
@ -23303,6 +23360,24 @@
|
||||
"end-of-stream": "~1.4.1",
|
||||
"stream-to-array": "~2.3.0"
|
||||
}
|
||||
},
|
||||
"tar-stream": {
|
||||
"version": "3.1.6",
|
||||
"resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-3.1.6.tgz",
|
||||
"integrity": "sha512-B/UyjYwPpMBv+PaFSWAmtYjwdrlEaZQEhMIBFNC5oEG8lpiW8XjcSdmEaClj28ArfKScKHs2nshz3k2le6crsg==",
|
||||
"requires": {
|
||||
"b4a": "^1.6.4",
|
||||
"fast-fifo": "^1.2.0",
|
||||
"streamx": "^2.15.0"
|
||||
}
|
||||
},
|
||||
"tar-utils": {
|
||||
"version": "3.0.2",
|
||||
"resolved": "https://registry.npmjs.org/tar-utils/-/tar-utils-3.0.2.tgz",
|
||||
"integrity": "sha512-UimIIz7AKMvSKPF09ma4QG++NKjeHL/IylmCXOWgCAaAikruR40PlbhfxDmWVM/JKwc4umHGSp65UFIeJ/5/Hw==",
|
||||
"requires": {
|
||||
"tar-stream": "^3.1.6"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
@ -23562,16 +23637,16 @@
|
||||
}
|
||||
},
|
||||
"@oclif/command": {
|
||||
"version": "1.8.29",
|
||||
"resolved": "https://registry.npmjs.org/@oclif/command/-/command-1.8.29.tgz",
|
||||
"integrity": "sha512-wupMygd4nZ5B4oCjkjGBMzZKY9tjNKGg8iZgqjLpWs9zz8WlwIf0DemDkdaYfIkZ7vUGbPAKSg0zbD/qSdhMRw==",
|
||||
"version": "1.8.33",
|
||||
"resolved": "https://registry.npmjs.org/@oclif/command/-/command-1.8.33.tgz",
|
||||
"integrity": "sha512-7ZPvThrZaICX1hoZ/S82DaGgjI3UGG2rveBfxCE9JlgvrDQQiHLA6a/N7Hf3jq6t51AkXbBMhaMOBzXtSd73QA==",
|
||||
"requires": {
|
||||
"@oclif/config": "^1.18.2",
|
||||
"@oclif/errors": "^1.3.6",
|
||||
"@oclif/help": "^1.0.1",
|
||||
"@oclif/parser": "^3.8.12",
|
||||
"@oclif/parser": "^3.8.14",
|
||||
"debug": "^4.1.1",
|
||||
"semver": "^7.5.3"
|
||||
"semver": "^7.5.4"
|
||||
}
|
||||
},
|
||||
"@oclif/config": {
|
||||
@ -23738,14 +23813,14 @@
|
||||
"integrity": "sha512-Ups2dShK52xXa8w6iBWLgcjPJWjais6KPJQq3gQ/88AY6BXoTX+MIGFPrWQO1KLMiQfoTpcLnUwloN4brrVUHw=="
|
||||
},
|
||||
"@oclif/parser": {
|
||||
"version": "3.8.12",
|
||||
"resolved": "https://registry.npmjs.org/@oclif/parser/-/parser-3.8.12.tgz",
|
||||
"integrity": "sha512-yGUrpddLHdPMJIS5jEd55cEPTIFRZRdx38zz0YdFp17Co4RdZvii2jnrnAoICHhumAoQ3EBxwjGpp88D7Bin4w==",
|
||||
"version": "3.8.14",
|
||||
"resolved": "https://registry.npmjs.org/@oclif/parser/-/parser-3.8.14.tgz",
|
||||
"integrity": "sha512-dGF3/Db+YZTxlR2f5cUbFcUXhrGxeVu9aT+Y/J7Wt6KMRiBJ6igIBChDHvRjjQVujR00OpdkS6fyLgBFI5meWQ==",
|
||||
"requires": {
|
||||
"@oclif/errors": "^1.3.6",
|
||||
"@oclif/linewrap": "^1.0.0",
|
||||
"chalk": "^4.1.0",
|
||||
"tslib": "^2.5.3"
|
||||
"tslib": "^2.6.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"chalk": {
|
||||
@ -24664,9 +24739,9 @@
|
||||
}
|
||||
},
|
||||
"@types/node": {
|
||||
"version": "16.18.37",
|
||||
"resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.37.tgz",
|
||||
"integrity": "sha512-ql+4dw4PlPFBP495k8JzUX/oMNRI2Ei4PrMHgj8oT4VhGlYUzF4EYr0qk2fW+XBVGIrq8Zzk13m4cvyXZuv4pA=="
|
||||
"version": "16.18.38",
|
||||
"resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.38.tgz",
|
||||
"integrity": "sha512-6sfo1qTulpVbkxECP+AVrHV9OoJqhzCsfTNp5NIG+enM4HyM3HvZCO798WShIXBN0+QtDIcutJCjsVYnQP5rIQ=="
|
||||
},
|
||||
"@types/node-cleanup": {
|
||||
"version": "2.1.2",
|
||||
@ -25377,15 +25452,20 @@
|
||||
"follow-redirects": "^1.14.0"
|
||||
}
|
||||
},
|
||||
"b4a": {
|
||||
"version": "1.6.4",
|
||||
"resolved": "https://registry.npmjs.org/b4a/-/b4a-1.6.4.tgz",
|
||||
"integrity": "sha512-fpWrvyVHEKyeEvbKZTVOeZF3VSKKWtJxFIxX/jaVPf+cLbGUSitjb49pHLqPV2BUNNZ0LcoeEGfE/YCpyDYHIw=="
|
||||
},
|
||||
"balanced-match": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
|
||||
"integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c="
|
||||
},
|
||||
"balena-auth": {
|
||||
"version": "4.1.2",
|
||||
"resolved": "https://registry.npmjs.org/balena-auth/-/balena-auth-4.1.2.tgz",
|
||||
"integrity": "sha512-F0cnqcm45X2aujClDePH3TOYj/ngz1IepFE9F5A6/QRqPgju1uLlMgplnUahgZK+wpPhuegn+ke3wvjzWU7vSQ==",
|
||||
"version": "4.2.1",
|
||||
"resolved": "https://registry.npmjs.org/balena-auth/-/balena-auth-4.2.1.tgz",
|
||||
"integrity": "sha512-crYf0gHp+hgP19HbjDmo3YoZqUBKB/5ziFjnvDxnnetW8yr0tpy38hlwQD1HkjPjjBqj5vRvnAQJgYnPv2oYCg==",
|
||||
"requires": {
|
||||
"@types/jwt-decode": "^2.2.1",
|
||||
"balena-errors": "^4.7.1",
|
||||
@ -25589,15 +25669,15 @@
|
||||
}
|
||||
},
|
||||
"balena-sdk": {
|
||||
"version": "17.0.0",
|
||||
"resolved": "https://registry.npmjs.org/balena-sdk/-/balena-sdk-17.0.0.tgz",
|
||||
"integrity": "sha512-CivFA2dGjV232nhPyc/1aA19EXLbZ5BAJ3EQ0TsA3xNx7M7fZr76Q9s47BDfAFgEO921dFxBZx30xqY1ifFI6g==",
|
||||
"version": "17.8.0",
|
||||
"resolved": "https://registry.npmjs.org/balena-sdk/-/balena-sdk-17.8.0.tgz",
|
||||
"integrity": "sha512-njbSVvmG3u5SNrnF0FojJXx6ELCCk98pzcjT5E5wd5Ig3dyKEKbmocgcW4YzarIvb8q1/f0FAYvwKNw4RM354A==",
|
||||
"requires": {
|
||||
"@balena/es-version": "^1.0.0",
|
||||
"@types/json-schema": "^7.0.9",
|
||||
"@types/node": "^14.0.0",
|
||||
"abortcontroller-polyfill": "^1.7.1",
|
||||
"balena-auth": "^4.1.0",
|
||||
"balena-auth": "^4.2.0",
|
||||
"balena-errors": "^4.7.3",
|
||||
"balena-hup-action-utils": "~5.0.0",
|
||||
"balena-register-device": "^8.0.0",
|
||||
@ -25609,14 +25689,15 @@
|
||||
"lodash": "^4.17.21",
|
||||
"memoizee": "^0.4.15",
|
||||
"ndjson": "^2.0.0",
|
||||
"p-throttle": "^4.1.1",
|
||||
"pinejs-client-core": "^6.12.0",
|
||||
"tslib": "^2.1.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"@types/node": {
|
||||
"version": "14.18.52",
|
||||
"resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.52.tgz",
|
||||
"integrity": "sha512-DGhiXKOHSFVVm+PJD+9Y0ObxXLeG6qwc0HoOn+ooQKeNNu+T2mEJCM5UBDUREKAggl9MHYjb5E71PAmx6MbzIg=="
|
||||
"version": "14.18.53",
|
||||
"resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.53.tgz",
|
||||
"integrity": "sha512-soGmOpVBUq+gaBMwom1M+krC/NNbWlosh4AtGA03SyWNDiqSKtwp7OulO1M6+mg8YkHMvJ/y0AkCeO8d1hNb7A=="
|
||||
},
|
||||
"date-fns": {
|
||||
"version": "2.30.0",
|
||||
@ -27153,9 +27234,9 @@
|
||||
},
|
||||
"dependencies": {
|
||||
"semver": {
|
||||
"version": "5.7.1",
|
||||
"resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
|
||||
"integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ=="
|
||||
"version": "5.7.2",
|
||||
"resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz",
|
||||
"integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g=="
|
||||
},
|
||||
"which": {
|
||||
"version": "1.3.1",
|
||||
@ -27870,9 +27951,9 @@
|
||||
},
|
||||
"dependencies": {
|
||||
"semver": {
|
||||
"version": "6.3.0",
|
||||
"resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
|
||||
"integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw=="
|
||||
"version": "6.3.1",
|
||||
"resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
|
||||
"integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="
|
||||
}
|
||||
}
|
||||
},
|
||||
@ -28208,9 +28289,9 @@
|
||||
}
|
||||
},
|
||||
"semver": {
|
||||
"version": "6.3.0",
|
||||
"resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
|
||||
"integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
|
||||
"version": "6.3.1",
|
||||
"resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
|
||||
"integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
|
||||
"dev": true
|
||||
},
|
||||
"strip-ansi": {
|
||||
@ -28458,9 +28539,9 @@
|
||||
}
|
||||
},
|
||||
"detect-libc": {
|
||||
"version": "2.0.1",
|
||||
"resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.1.tgz",
|
||||
"integrity": "sha512-463v3ZeIrcWtdgIg6vI6XUncguvr2TnGl4SzDXinkt9mSLpBJKXT3mW6xT3VQdDN11+WVs29pgvivTc4Lp8v+w=="
|
||||
"version": "2.0.2",
|
||||
"resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.2.tgz",
|
||||
"integrity": "sha512-UX6sGumvvqSaXgdKGUsgZWqcUyIXZ/vZTrlRT/iobiKhGL0zL4d3osHj3uqllWJK+i+sixDS/3COVEOFbupFyw=="
|
||||
},
|
||||
"drivelist": {
|
||||
"version": "11.1.0",
|
||||
@ -28878,6 +28959,11 @@
|
||||
"resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
|
||||
"integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q=="
|
||||
},
|
||||
"fast-fifo": {
|
||||
"version": "1.3.0",
|
||||
"resolved": "https://registry.npmjs.org/fast-fifo/-/fast-fifo-1.3.0.tgz",
|
||||
"integrity": "sha512-IgfweLvEpwyA4WgiQe9Nx6VV2QkML2NkvZnk1oKnIzXgXdWxuhF7zw4DvLTPZJn6PIUneiAXPF24QmoEqHTjyw=="
|
||||
},
|
||||
"fast-glob": {
|
||||
"version": "3.3.0",
|
||||
"resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.0.tgz",
|
||||
@ -31251,9 +31337,9 @@
|
||||
},
|
||||
"dependencies": {
|
||||
"semver": {
|
||||
"version": "5.7.1",
|
||||
"resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
|
||||
"integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
|
||||
"version": "5.7.2",
|
||||
"resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz",
|
||||
"integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==",
|
||||
"dev": true
|
||||
}
|
||||
}
|
||||
@ -31302,9 +31388,9 @@
|
||||
"integrity": "sha512-86GgN2vzfUu7m9Wcj63iUkuDzFNYFVmjeDm2GzWpUk+opB0pEpMsw6ePCMrhYkumz2C1ihqtZzOMAg7FiXcNoQ=="
|
||||
},
|
||||
"keyv": {
|
||||
"version": "4.5.2",
|
||||
"resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.2.tgz",
|
||||
"integrity": "sha512-5MHbFaKn8cNSmVW7BYnijeAVlE4cYA/SVkifVgrh7yotnfhKmjuXpDKjrABLnT0SfHWV21P8ow07OGfRrNDg8g==",
|
||||
"version": "4.5.3",
|
||||
"resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.3.tgz",
|
||||
"integrity": "sha512-QCiSav9WaX1PgETJ+SpNnx2PRRapJ/oRSXM4VO5OGYGSjrxbKPVFVhB3l2OCbLCk329N8qyAtsJjSjvVBWzEug==",
|
||||
"requires": {
|
||||
"json-buffer": "3.0.1"
|
||||
}
|
||||
@ -31867,9 +31953,9 @@
|
||||
},
|
||||
"dependencies": {
|
||||
"semver": {
|
||||
"version": "6.3.0",
|
||||
"resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
|
||||
"integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw=="
|
||||
"version": "6.3.1",
|
||||
"resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
|
||||
"integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="
|
||||
}
|
||||
}
|
||||
},
|
||||
@ -32988,9 +33074,9 @@
|
||||
},
|
||||
"dependencies": {
|
||||
"semver": {
|
||||
"version": "5.7.1",
|
||||
"resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
|
||||
"integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ=="
|
||||
"version": "5.7.2",
|
||||
"resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz",
|
||||
"integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g=="
|
||||
}
|
||||
}
|
||||
},
|
||||
@ -33084,9 +33170,9 @@
|
||||
},
|
||||
"dependencies": {
|
||||
"semver": {
|
||||
"version": "5.7.1",
|
||||
"resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
|
||||
"integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ=="
|
||||
"version": "5.7.2",
|
||||
"resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz",
|
||||
"integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g=="
|
||||
}
|
||||
}
|
||||
},
|
||||
@ -33658,6 +33744,11 @@
|
||||
"p-limit": "^2.2.0"
|
||||
}
|
||||
},
|
||||
"p-throttle": {
|
||||
"version": "4.1.1",
|
||||
"resolved": "https://registry.npmjs.org/p-throttle/-/p-throttle-4.1.1.tgz",
|
||||
"integrity": "sha512-TuU8Ato+pRTPJoDzYD4s7ocJYcNSEZRvlxoq3hcPI2kZDZ49IQ1Wkj7/gDJc3X7XiEAAvRGtDzdXJI0tC3IL1g=="
|
||||
},
|
||||
"p-timeout": {
|
||||
"version": "1.2.1",
|
||||
"resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-1.2.1.tgz",
|
||||
@ -33797,9 +33888,9 @@
|
||||
}
|
||||
},
|
||||
"semver": {
|
||||
"version": "6.3.0",
|
||||
"resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
|
||||
"integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw=="
|
||||
"version": "6.3.1",
|
||||
"resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
|
||||
"integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="
|
||||
},
|
||||
"url-parse-lax": {
|
||||
"version": "3.0.0",
|
||||
@ -33967,9 +34058,9 @@
|
||||
}
|
||||
},
|
||||
"semver": {
|
||||
"version": "5.7.1",
|
||||
"resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
|
||||
"integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ=="
|
||||
"version": "5.7.2",
|
||||
"resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz",
|
||||
"integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g=="
|
||||
},
|
||||
"slash": {
|
||||
"version": "2.0.0",
|
||||
@ -34169,9 +34260,9 @@
|
||||
}
|
||||
},
|
||||
"detect-libc": {
|
||||
"version": "2.0.1",
|
||||
"resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.1.tgz",
|
||||
"integrity": "sha512-463v3ZeIrcWtdgIg6vI6XUncguvr2TnGl4SzDXinkt9mSLpBJKXT3mW6xT3VQdDN11+WVs29pgvivTc4Lp8v+w==",
|
||||
"version": "2.0.2",
|
||||
"resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.2.tgz",
|
||||
"integrity": "sha512-UX6sGumvvqSaXgdKGUsgZWqcUyIXZ/vZTrlRT/iobiKhGL0zL4d3osHj3uqllWJK+i+sixDS/3COVEOFbupFyw==",
|
||||
"dev": true
|
||||
},
|
||||
"has-flag": {
|
||||
@ -34928,6 +35019,11 @@
|
||||
"lodash": "^4.17.21"
|
||||
}
|
||||
},
|
||||
"queue-tick": {
|
||||
"version": "1.0.1",
|
||||
"resolved": "https://registry.npmjs.org/queue-tick/-/queue-tick-1.0.1.tgz",
|
||||
"integrity": "sha512-kJt5qhMxoszgU/62PLP1CJytzd2NKetjSRnyuj31fDd3Rlcz3fzlFdFLD1SItunPwyqEOkca6GbV612BWfaBag=="
|
||||
},
|
||||
"quick-lru": {
|
||||
"version": "5.1.1",
|
||||
"resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz",
|
||||
@ -35827,9 +35923,9 @@
|
||||
}
|
||||
},
|
||||
"semver": {
|
||||
"version": "7.5.3",
|
||||
"resolved": "https://registry.npmjs.org/semver/-/semver-7.5.3.tgz",
|
||||
"integrity": "sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ==",
|
||||
"version": "7.5.4",
|
||||
"resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz",
|
||||
"integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==",
|
||||
"requires": {
|
||||
"lru-cache": "^6.0.0"
|
||||
}
|
||||
@ -35848,9 +35944,9 @@
|
||||
},
|
||||
"dependencies": {
|
||||
"semver": {
|
||||
"version": "6.3.0",
|
||||
"resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
|
||||
"integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw=="
|
||||
"version": "6.3.1",
|
||||
"resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
|
||||
"integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="
|
||||
}
|
||||
}
|
||||
},
|
||||
@ -36615,6 +36711,15 @@
|
||||
"resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-0.1.2.tgz",
|
||||
"integrity": "sha1-gIudDlb8Jz2Am6VzOOkpkZoanxo="
|
||||
},
|
||||
"streamx": {
|
||||
"version": "2.15.0",
|
||||
"resolved": "https://registry.npmjs.org/streamx/-/streamx-2.15.0.tgz",
|
||||
"integrity": "sha512-HcxY6ncGjjklGs1xsP1aR71INYcsXFJet5CU1CHqihQ2J5nOsbd4OjgjHO42w/4QNv9gZb3BueV+Vxok5pLEXg==",
|
||||
"requires": {
|
||||
"fast-fifo": "^1.1.0",
|
||||
"queue-tick": "^1.0.1"
|
||||
}
|
||||
},
|
||||
"strict-event-emitter-types": {
|
||||
"version": "2.0.0",
|
||||
"resolved": "https://registry.npmjs.org/strict-event-emitter-types/-/strict-event-emitter-types-2.0.0.tgz",
|
||||
@ -37097,9 +37202,9 @@
|
||||
}
|
||||
},
|
||||
"tar-utils": {
|
||||
"version": "2.1.2",
|
||||
"resolved": "https://registry.npmjs.org/tar-utils/-/tar-utils-2.1.2.tgz",
|
||||
"integrity": "sha512-NBnDhRG1KE/FDYgrAz3KfgDKGsqczeTj+ZVXZFNMq21iQjRzvu5/l405kgP9qRWVMysZRwkYnGat6EDlKmauzg==",
|
||||
"version": "2.1.3",
|
||||
"resolved": "https://registry.npmjs.org/tar-utils/-/tar-utils-2.1.3.tgz",
|
||||
"integrity": "sha512-qNT76v6A4kF3Ye9p0EpVTLIS3Dbr2amGbJRW3t7mOIYiuI7hHIZ6VHWyiMW5JgxoB4RmRfShVSCGZEHomO8hNw==",
|
||||
"requires": {
|
||||
"bluebird": "^3.7.2",
|
||||
"tar-stream": "^2.1.3"
|
||||
@ -37393,9 +37498,9 @@
|
||||
},
|
||||
"dependencies": {
|
||||
"acorn": {
|
||||
"version": "8.9.0",
|
||||
"resolved": "https://registry.npmjs.org/acorn/-/acorn-8.9.0.tgz",
|
||||
"integrity": "sha512-jaVNAFBHNLXspO543WnNNPZFRtavh3skAkITqD0/2aeMkKZTN+254PyhwxFYrk3vQ1xfY+2wbesJMs/JC8/PwQ==",
|
||||
"version": "8.10.0",
|
||||
"resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz",
|
||||
"integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==",
|
||||
"dev": true
|
||||
},
|
||||
"diff": {
|
||||
@ -37493,9 +37598,9 @@
|
||||
}
|
||||
},
|
||||
"semver": {
|
||||
"version": "5.7.1",
|
||||
"resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
|
||||
"integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
|
||||
"version": "5.7.2",
|
||||
"resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz",
|
||||
"integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==",
|
||||
"dev": true
|
||||
},
|
||||
"tslib": {
|
||||
@ -38283,9 +38388,9 @@
|
||||
}
|
||||
},
|
||||
"detect-libc": {
|
||||
"version": "2.0.1",
|
||||
"resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.1.tgz",
|
||||
"integrity": "sha512-463v3ZeIrcWtdgIg6vI6XUncguvr2TnGl4SzDXinkt9mSLpBJKXT3mW6xT3VQdDN11+WVs29pgvivTc4Lp8v+w==",
|
||||
"version": "2.0.2",
|
||||
"resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.2.tgz",
|
||||
"integrity": "sha512-UX6sGumvvqSaXgdKGUsgZWqcUyIXZ/vZTrlRT/iobiKhGL0zL4d3osHj3uqllWJK+i+sixDS/3COVEOFbupFyw==",
|
||||
"optional": true
|
||||
},
|
||||
"mimic-response": {
|
||||
@ -39030,9 +39135,9 @@
|
||||
},
|
||||
"dependencies": {
|
||||
"semver": {
|
||||
"version": "5.7.1",
|
||||
"resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
|
||||
"integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ=="
|
||||
"version": "5.7.2",
|
||||
"resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz",
|
||||
"integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g=="
|
||||
}
|
||||
}
|
||||
},
|
||||
|
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "balena-cli",
|
||||
"version": "16.6.3",
|
||||
"version": "16.7.5",
|
||||
"description": "The official balena Command Line Interface",
|
||||
"main": "./build/app.js",
|
||||
"homepage": "https://github.com/balena-io/balena-cli",
|
||||
@ -193,7 +193,7 @@
|
||||
"typescript": "^5.1.3"
|
||||
},
|
||||
"dependencies": {
|
||||
"@balena/compose": "^2.2.1",
|
||||
"@balena/compose": "^3.0.2",
|
||||
"@balena/dockerignore": "^1.0.2",
|
||||
"@balena/es-version": "^1.0.1",
|
||||
"@oclif/command": "^1.8.16",
|
||||
@ -207,7 +207,7 @@
|
||||
"balena-image-fs": "^7.0.6",
|
||||
"balena-image-manager": "^9.0.0",
|
||||
"balena-preload": "^14.0.0",
|
||||
"balena-sdk": "^17.0.0",
|
||||
"balena-sdk": "^17.8.0",
|
||||
"balena-semver": "^2.3.0",
|
||||
"balena-settings-client": "^5.0.2",
|
||||
"balena-settings-storage": "^7.0.0",
|
||||
@ -284,6 +284,6 @@
|
||||
"windosu": "^0.3.0"
|
||||
},
|
||||
"versionist": {
|
||||
"publishedAt": "2023-06-30T17:07:33.152Z"
|
||||
"publishedAt": "2023-07-21T06:59:21.487Z"
|
||||
}
|
||||
}
|
||||
|
7
typings/global.d.ts
vendored
7
typings/global.d.ts
vendored
@ -1,8 +1,11 @@
|
||||
import { Application, DeviceType, Device } from 'balena-sdk';
|
||||
|
||||
declare global {
|
||||
type ApplicationWithDeviceType = Application & {
|
||||
is_for__device_type: [DeviceType];
|
||||
type ApplicationWithDeviceTypeSlug = Omit<
|
||||
Application,
|
||||
'is_for__device_type'
|
||||
> & {
|
||||
is_for__device_type: [Pick<DeviceType, 'slug'>];
|
||||
};
|
||||
type DeviceWithDeviceType = Device & {
|
||||
is_of__device_type: [DeviceType];
|
||||
|
Reference in New Issue
Block a user