@flowscripter/dynamic-cli-framework-api 1.4.1 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  export type { default as Argument } from "./src/argument/Argument.ts";
2
- export type { SingleValueType, Values, ValueType, PopulatedSingleValueType, PopulatedValues, PopulatedValueType, } from "./src/Value.ts";
2
+ export type { SingleValueType, Values, ValueType, ValueNode, PopulatedSingleValueType, PopulatedValues, PopulatedValueType, } from "./src/Value.ts";
3
3
  export { ValueTypeName, ComplexValueTypeName } from "./src/Value.ts";
4
4
  export type { default as ComplexOption } from "./src/argument/ComplexOption.ts";
5
5
  export { MAXIMUM_COMPLEX_OPTION_NESTING_DEPTH } from "./src/argument/ComplexOption.ts";
@@ -22,7 +22,8 @@ export type { default as AsciiBannerGeneratorService } from "./src/service/core/
22
22
  export type { BannerColorEffects, BannerGenerateOptions, ColorEffect, ColorEffectDirection, FixedColorEffect, GradientColorEffect, RainbowColorEffect, } from "./src/service/core/AsciiBannerGeneratorService.ts";
23
23
  export { KEY_VALUE_SERVICE_ID } from "./src/service/core/KeyValueService.ts";
24
24
  export { SECRET_SENTINEL_PREFIX } from "./src/service/core/KeyValueService.ts";
25
- export type { default as KeyValueService } from "./src/service/core/KeyValueService.ts";
25
+ export { Secret } from "./src/service/core/KeyValueService.ts";
26
+ export type { default as KeyValueService, SettableValueNode, } from "./src/service/core/KeyValueService.ts";
26
27
  export type { default as SecretService } from "./src/service/core/SecretService.ts";
27
28
  export { FETCH_SERVICE_ID } from "./src/service/core/FetchService.ts";
28
29
  export type { default as FetchService } from "./src/service/core/FetchService.ts";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -5,6 +5,7 @@ export { MAXIMUM_ARGUMENT_ARRAY_SIZE } from "./src/argument/SubCommandArgument.j
5
5
  export { ASCII_BANNER_GENERATOR_SERVICE_ID } from "./src/service/core/AsciiBannerGeneratorService.js";
6
6
  export { KEY_VALUE_SERVICE_ID } from "./src/service/core/KeyValueService.js";
7
7
  export { SECRET_SENTINEL_PREFIX } from "./src/service/core/KeyValueService.js";
8
+ export { Secret } from "./src/service/core/KeyValueService.js";
8
9
  export { FETCH_SERVICE_ID } from "./src/service/core/FetchService.js";
9
10
  export { PRINTER_SERVICE_ID } from "./src/service/core/PrinterService.js";
10
11
  export { Icon, Level, ProgressStyle, SpinnerStyle } from "./src/service/core/PrinterService.js";
@@ -29,6 +29,11 @@ export type SingleValueType = number | string | boolean;
29
29
  * The type of a value can be: `boolean`, `number` or `string` or an array of these.
30
30
  */
31
31
  export type ValueType = SingleValueType | Array<SingleValueType>;
32
+ /**
33
+ * Any node that can appear within a {@link Values} tree: a primitive/array-of-primitives
34
+ * ({@link ValueType}), a nested keyed object ({@link Values}), or an array of such objects.
35
+ */
36
+ export type ValueNode = ValueType | Values | Array<Values>;
32
37
  /**
33
38
  * A container object for populated values.
34
39
  *
@@ -50,7 +55,7 @@ export type ValueType = SingleValueType | Array<SingleValueType>;
50
55
  * * `{ foo: [ [ 1, 2 ], [3, 4 ] ] }`
51
56
  */
52
57
  export type Values = {
53
- [name: string]: ValueType | Values | Array<Values>;
58
+ [name: string]: ValueNode;
54
59
  };
55
60
  /**
56
61
  * Populated single value type is very similar to {@link SingleValueType} but allows for an illegal
@@ -1 +1 @@
1
- {"version":3,"file":"Value.d.ts","sourceRoot":"","sources":["../../src/Value.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;GAEG;AACH,oBAAY,aAAa;IACvB,MAAM,IAAI;IACV,MAAM,IAAI;IACV,OAAO,IAAI;IACX,OAAO,IAAI;IACX,MAAM,IAAI;CACX;AAED;;GAEG;AACH,oBAAY,oBAAoB;IAC9B,OAAO,IAAI;CACZ;AAED;;;;;GAKG;AACH,MAAM,MAAM,eAAe,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;AAExD;;GAEG;AACH,MAAM,MAAM,SAAS,GAAG,eAAe,GAAG,KAAK,CAAC,eAAe,CAAC,CAAC;AAEjE;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,MAAM,MAAM,GAAG;IACnB,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC;CACpD,CAAC;AAEF;;;GAGG;AACH,MAAM,MAAM,wBAAwB,GAAG,eAAe,GAAG,SAAS,CAAC;AAEnE;;;GAGG;AACH,MAAM,MAAM,kBAAkB,GAAG,wBAAwB,GAAG,KAAK,CAAC,wBAAwB,CAAC,CAAC;AAE5F;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC9B,CAAC,IAAI,EAAE,MAAM,GACT,kBAAkB,GAClB,eAAe,GACf,KAAK,CAAC,eAAe,GAAG,SAAS,CAAC,GAClC,SAAS,CAAC;CACf"}
1
+ {"version":3,"file":"Value.d.ts","sourceRoot":"","sources":["../../src/Value.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;GAEG;AACH,oBAAY,aAAa;IACvB,MAAM,IAAI;IACV,MAAM,IAAI;IACV,OAAO,IAAI;IACX,OAAO,IAAI;IACX,MAAM,IAAI;CACX;AAED;;GAEG;AACH,oBAAY,oBAAoB;IAC9B,OAAO,IAAI;CACZ;AAED;;;;;GAKG;AACH,MAAM,MAAM,eAAe,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;AAExD;;GAEG;AACH,MAAM,MAAM,SAAS,GAAG,eAAe,GAAG,KAAK,CAAC,eAAe,CAAC,CAAC;AAEjE;;;GAGG;AACH,MAAM,MAAM,SAAS,GAAG,SAAS,GAAG,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC;AAE3D;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,MAAM,MAAM,GAAG;IACnB,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC;CAC3B,CAAC;AAEF;;;GAGG;AACH,MAAM,MAAM,wBAAwB,GAAG,eAAe,GAAG,SAAS,CAAC;AAEnE;;;GAGG;AACH,MAAM,MAAM,kBAAkB,GAAG,wBAAwB,GAAG,KAAK,CAAC,wBAAwB,CAAC,CAAC;AAE5F;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC9B,CAAC,IAAI,EAAE,MAAM,GACT,kBAAkB,GAClB,eAAe,GACf,KAAK,CAAC,eAAe,GAAG,SAAS,CAAC,GAClC,SAAS,CAAC;CACf"}
@@ -1,40 +1,74 @@
1
+ import type { ValueNode } from "../../Value.ts";
1
2
  export declare const KEY_VALUE_SERVICE_ID = "@flowscripter/dynamic-cli-framework/key-value-service";
2
3
  /**
3
4
  * The sentinel prefix used to indicate a value is stored as an OS-native secret.
4
- * Values starting with this prefix are resolved via the {@link SecretService}.
5
+ * String leaves starting with this prefix are resolved via the {@link SecretService}.
5
6
  * This prefix is reserved and must not be used for regular key-value data.
6
7
  */
7
8
  export declare const SECRET_SENTINEL_PREFIX = "__SECRET__:";
9
+ /**
10
+ * Wraps a value to mark it for storage as an OS-native secret via {@link SecretService}, when passed to
11
+ * {@link KeyValueService.set}. Can wrap the entire value passed to `set`, or be nested at any depth
12
+ * within a larger object/array passed to `set`.
13
+ */
14
+ export declare class Secret<T extends ValueNode = ValueNode> {
15
+ readonly value: T;
16
+ constructor(value: T);
17
+ }
18
+ /**
19
+ * The shape of a value passed to {@link KeyValueService.set}.
20
+ *
21
+ * Like {@link ValueNode} (primitives, arrays of primitives, nested keyed objects, or arrays of
22
+ * nested objects) but additionally allows a {@link Secret}-wrapped value at any depth - as a top
23
+ * level value, a property of a nested object, or an entry of a nested array. A {@link Secret}
24
+ * itself wraps a plain {@link ValueNode}, so secrets do not nest within secrets.
25
+ */
26
+ export type SettableValueNode = ValueNode | Secret | {
27
+ [name: string]: SettableValueNode;
28
+ } | Array<SettableValueNode>;
8
29
  /**
9
30
  * Service providing keystore functionality for the CLI. The keystore data is scoped to the
10
31
  * service or {@link Command} instances accessing this service via {@link Context.getServiceById}.
11
32
  *
12
- * Values can optionally be stored as OS-native secrets using the `isSecret` parameter on
13
- * {@link setKey}. Secret values are stored via {@link SecretService} and only a sentinel
14
- * reference is kept in the key-value Map. The sentinel prefix `__SECRET__:` is reserved.
33
+ * Values are arbitrary JSON-serializable data (see {@link ValueNode}) - not limited to
34
+ * strings - and may be deep objects or arrays.
35
+ *
36
+ * Any node within a value passed to {@link set} can be wrapped in {@link Secret} to have that
37
+ * node - and only that node - stored as an OS-native secret via {@link SecretService}, with a
38
+ * sentinel reference (prefixed with `__SECRET__:`) kept in its place in the stored structure.
39
+ * Everything else in the value is stored as plain (unencrypted) config data. This is symmetric
40
+ * with {@link get}, which resolves sentinel references found at any depth.
15
41
  */
16
42
  export default interface KeyValueService {
17
43
  /**
18
- * Get a value for a specified key in the keystore.
19
- * If the stored value is a secret sentinel, the actual value is retrieved from the OS secret store.
44
+ * Get the value for a specified key in the keystore.
45
+ *
46
+ * Recursively resolves any string leaf - at any depth within the stored value - which is a
47
+ * secret sentinel, retrieving its actual value via {@link SecretService}. This covers both
48
+ * values written via {@link set} using a nested {@link Secret}, and secret references a user
49
+ * hand-embeds directly (nested arbitrarily deep) in the CLI's JSON config file.
20
50
  */
21
- getKey(key: string): Promise<string>;
51
+ get<T extends ValueNode = ValueNode>(key: string): Promise<T>;
22
52
  /**
23
53
  * Set a value for a specified key in the keystore.
24
54
  *
25
- * @param isSecret if true, the value is stored in the OS-native secret store and a sentinel
26
- * reference is kept in the key-value Map. Requires that the service was constructed with
27
- * secret support enabled.
55
+ * Any node within `value` wrapped in {@link Secret} - at any depth - is serialized as JSON and
56
+ * stored as an OS-native secret via {@link SecretService}, with a sentinel reference kept in
57
+ * its place in the stored structure. All other data is stored as plain (unencrypted) config
58
+ * data. Storing a secret requires that the service was constructed with secret support
59
+ * enabled.
28
60
  */
29
- setKey(key: string, value: string, isSecret?: boolean): Promise<void>;
61
+ set(key: string, value: SettableValueNode): Promise<void>;
30
62
  /**
31
63
  * Check if a value for a specified key exists in the keystore.
32
64
  */
33
- hasKey(key: string): Promise<boolean>;
65
+ has(key: string): Promise<boolean>;
34
66
  /**
35
67
  * Delete the value for a specified key in the keystore.
36
- * If the stored value is a secret sentinel, the secret is also deleted from the OS secret store.
68
+ *
69
+ * Recursively walks the stored (unresolved) structure for `key` and deletes every OS-native
70
+ * secret referenced - at any depth - via {@link SecretService}, before removing the key itself.
37
71
  */
38
- deleteKey(key: string): Promise<void>;
72
+ delete(key: string): Promise<void>;
39
73
  }
40
74
  //# sourceMappingURL=KeyValueService.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"KeyValueService.d.ts","sourceRoot":"","sources":["../../../../src/service/core/KeyValueService.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,oBAAoB,0DAA0D,CAAC;AAE5F;;;;GAIG;AACH,eAAO,MAAM,sBAAsB,gBAAgB,CAAC;AAEpD;;;;;;;GAOG;AACH,MAAM,CAAC,OAAO,WAAW,eAAe;IACtC;;;OAGG;IACH,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAErC;;;;;;OAMG;IACH,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEtE;;OAEG;IACH,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAEtC;;;OAGG;IACH,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACvC"}
1
+ {"version":3,"file":"KeyValueService.d.ts","sourceRoot":"","sources":["../../../../src/service/core/KeyValueService.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAEhD,eAAO,MAAM,oBAAoB,0DAA0D,CAAC;AAE5F;;;;GAIG;AACH,eAAO,MAAM,sBAAsB,gBAAgB,CAAC;AAEpD;;;;GAIG;AACH,qBAAa,MAAM,CAAC,CAAC,SAAS,SAAS,GAAG,SAAS;aACrB,KAAK,EAAE,CAAC;IAApC,YAA4B,KAAK,EAAE,CAAC,EAAI;CACzC;AAED;;;;;;;GAOG;AACH,MAAM,MAAM,iBAAiB,GACzB,SAAS,GACT,MAAM,GACN;IAAE,CAAC,IAAI,EAAE,MAAM,GAAG,iBAAiB,CAAA;CAAE,GACrC,KAAK,CAAC,iBAAiB,CAAC,CAAC;AAE7B;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,OAAO,WAAW,eAAe;IACtC;;;;;;;OAOG;IACH,GAAG,CAAC,CAAC,SAAS,SAAS,GAAG,SAAS,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IAE9D;;;;;;;;OAQG;IACH,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE1D;;OAEG;IACH,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAEnC;;;;;OAKG;IACH,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACpC"}
@@ -1,7 +1,18 @@
1
1
  export const KEY_VALUE_SERVICE_ID = "@flowscripter/dynamic-cli-framework/key-value-service";
2
2
  /**
3
3
  * The sentinel prefix used to indicate a value is stored as an OS-native secret.
4
- * Values starting with this prefix are resolved via the {@link SecretService}.
4
+ * String leaves starting with this prefix are resolved via the {@link SecretService}.
5
5
  * This prefix is reserved and must not be used for regular key-value data.
6
6
  */
7
7
  export const SECRET_SENTINEL_PREFIX = "__SECRET__:";
8
+ /**
9
+ * Wraps a value to mark it for storage as an OS-native secret via {@link SecretService}, when passed to
10
+ * {@link KeyValueService.set}. Can wrap the entire value passed to `set`, or be nested at any depth
11
+ * within a larger object/array passed to `set`.
12
+ */
13
+ export class Secret {
14
+ value;
15
+ constructor(value) {
16
+ this.value = value;
17
+ }
18
+ }
@@ -24,16 +24,30 @@ export declare enum InstallMethod {
24
24
  GITHUB_RELEASE = "github-release"
25
25
  }
26
26
  /**
27
- * Outcome of an {@link UpgradeService.checkForUpgrade} call.
27
+ * Outcome of an {@link UpgradeService.checkForUpgrade} or {@link UpgradeService.getUpgradeCheckResult}
28
+ * call. The `"pending"` status can only be produced by {@link UpgradeService.getUpgradeCheckResult}'s
29
+ * non-blocking bounded wait - `checkForUpgrade()` and a `getUpgradeCheckResult(true)` call always
30
+ * run to completion and so never resolve to it.
28
31
  */
29
- export interface UpgradeCheckResult {
32
+ export type UpgradeCheckResult = {
33
+ readonly status: "checked";
30
34
  readonly currentVersion: string;
31
35
  readonly latestVersion: string;
32
36
  readonly updateAvailable: boolean;
33
37
  readonly os: SupportedOs;
34
38
  readonly arch: SupportedArch;
35
39
  readonly installMethod: InstallMethod;
36
- }
40
+ } | {
41
+ /** The resolved (or overridden) os/arch/installMethod combination is not supported or not configured. */
42
+ readonly status: "unsupported";
43
+ } | {
44
+ /** A supported/configured combination was found, but determining the latest version failed. */
45
+ readonly status: "failed";
46
+ readonly error: Error;
47
+ } | {
48
+ /** The non-blocking bounded wait elapsed before the check completed. */
49
+ readonly status: "pending";
50
+ };
37
51
  /**
38
52
  * Outcome of an {@link UpgradeService.upgrade} call.
39
53
  */
@@ -74,10 +88,10 @@ export default interface UpgradeService {
74
88
  * @param arch optional {@link SupportedArch} override, defaults to the detected value.
75
89
  * @param installMethod optional {@link InstallMethod} override, defaults to the detected value.
76
90
  *
77
- * @return the {@link UpgradeCheckResult}, or `undefined` if the resolved os/arch/installMethod
78
- * combination is not supported or not configured. Never rejects.
91
+ * @return the {@link UpgradeCheckResult}. Runs to completion, so never resolves to the
92
+ * `"pending"` status. Never rejects.
79
93
  */
80
- checkForUpgrade(os?: SupportedOs, arch?: SupportedArch, installMethod?: InstallMethod): Promise<UpgradeCheckResult | undefined>;
94
+ checkForUpgrade(os?: SupportedOs, arch?: SupportedArch, installMethod?: InstallMethod): Promise<UpgradeCheckResult>;
81
95
  /**
82
96
  * Upgrade the CLI to the latest available version.
83
97
  *
@@ -93,13 +107,13 @@ export default interface UpgradeService {
93
107
  * dependencies were set (or starts one now, with default/no-override detection, if none has
94
108
  * started yet). Every call is backed by the same cached promise.
95
109
  *
96
- * @param waitForResult if `true`, waits for the check to fully resolve. If `false` (default),
97
- * gives up and resolves to `undefined` after an internal bounded delay, so callers on a
98
- * startup/opportunistic path are never blocked by a slow network/spawn call.
110
+ * @param waitForResult if `true`, waits for the check to fully resolve, so the result never has
111
+ * status `"pending"`. If `false` (default), gives up and resolves to a `"pending"` result after
112
+ * an internal bounded delay, so callers on a startup/opportunistic path are never blocked by a
113
+ * slow network/spawn call.
99
114
  *
100
- * @return the {@link UpgradeCheckResult}, or `undefined` if unsupported/unconfigured or the
101
- * bounded wait elapsed. Never rejects.
115
+ * @return the {@link UpgradeCheckResult}. Never rejects.
102
116
  */
103
- getUpgradeCheckResult(waitForResult?: boolean): Promise<UpgradeCheckResult | undefined>;
117
+ getUpgradeCheckResult(waitForResult?: boolean): Promise<UpgradeCheckResult>;
104
118
  }
105
119
  //# sourceMappingURL=UpgradeService.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"UpgradeService.d.ts","sourceRoot":"","sources":["../../../../src/service/core/UpgradeService.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,kBAAkB,wDAAwD,CAAC;AAExF;;GAEG;AACH,oBAAY,WAAW;IACrB,KAAK,UAAU;IACf,KAAK,UAAU;IACf,OAAO,YAAY;CACpB;AAED;;GAEG;AACH,oBAAY,aAAa;IACvB,GAAG,QAAQ;IACX,KAAK,UAAU;CAChB;AAED;;GAEG;AACH,oBAAY,aAAa;IACvB,YAAY,iBAAiB;IAC7B,QAAQ,aAAa;IACrB,MAAM,WAAW;IACjB,cAAc,mBAAmB;CAClC;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,eAAe,EAAE,OAAO,CAAC;IAClC,QAAQ,CAAC,EAAE,EAAE,WAAW,CAAC;IACzB,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAC;IAC7B,QAAQ,CAAC,aAAa,EAAE,aAAa,CAAC;CACvC;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,EAAE,EAAE,OAAO,CAAC;IACrB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,CAAC,OAAO,WAAW,cAAc;IACrC;;;;OAIG;IACH,QAAQ,IAAI,WAAW,GAAG,SAAS,CAAC;IAEpC;;;;OAIG;IACH,UAAU,IAAI,aAAa,GAAG,SAAS,CAAC;IAExC;;;;;;OAMG;IACH,mBAAmB,CAAC,EAAE,EAAE,WAAW,GAAG,OAAO,CAAC,aAAa,GAAG,SAAS,CAAC,CAAC;IAEzE;;;;;;;;;OASG;IACH,eAAe,CACb,EAAE,CAAC,EAAE,WAAW,EAChB,IAAI,CAAC,EAAE,aAAa,EACpB,aAAa,CAAC,EAAE,aAAa,GAC5B,OAAO,CAAC,kBAAkB,GAAG,SAAS,CAAC,CAAC;IAE3C;;;;;;;;OAQG;IACH,OAAO,CACL,EAAE,CAAC,EAAE,WAAW,EAChB,IAAI,CAAC,EAAE,aAAa,EACpB,aAAa,CAAC,EAAE,aAAa,GAC5B,OAAO,CAAC,aAAa,CAAC,CAAC;IAE1B;;;;;;;;;;;OAWG;IACH,qBAAqB,CAAC,aAAa,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,kBAAkB,GAAG,SAAS,CAAC,CAAC;CACzF"}
1
+ {"version":3,"file":"UpgradeService.d.ts","sourceRoot":"","sources":["../../../../src/service/core/UpgradeService.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,kBAAkB,wDAAwD,CAAC;AAExF;;GAEG;AACH,oBAAY,WAAW;IACrB,KAAK,UAAU;IACf,KAAK,UAAU;IACf,OAAO,YAAY;CACpB;AAED;;GAEG;AACH,oBAAY,aAAa;IACvB,GAAG,QAAQ;IACX,KAAK,UAAU;CAChB;AAED;;GAEG;AACH,oBAAY,aAAa;IACvB,YAAY,iBAAiB;IAC7B,QAAQ,aAAa;IACrB,MAAM,WAAW;IACjB,cAAc,mBAAmB;CAClC;AAED;;;;;GAKG;AACH,MAAM,MAAM,kBAAkB,GAC1B;IACE,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC;IAC3B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,eAAe,EAAE,OAAO,CAAC;IAClC,QAAQ,CAAC,EAAE,EAAE,WAAW,CAAC;IACzB,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAC;IAC7B,QAAQ,CAAC,aAAa,EAAE,aAAa,CAAC;CACvC,GACD;IACE,yGAAyG;IACzG,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC;CAChC,GACD;IACE,+FAA+F;IAC/F,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC;IAC1B,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;CACvB,GACD;IACE,wEAAwE;IACxE,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC;CAC5B,CAAC;AAEN;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,EAAE,EAAE,OAAO,CAAC;IACrB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,CAAC,OAAO,WAAW,cAAc;IACrC;;;;OAIG;IACH,QAAQ,IAAI,WAAW,GAAG,SAAS,CAAC;IAEpC;;;;OAIG;IACH,UAAU,IAAI,aAAa,GAAG,SAAS,CAAC;IAExC;;;;;;OAMG;IACH,mBAAmB,CAAC,EAAE,EAAE,WAAW,GAAG,OAAO,CAAC,aAAa,GAAG,SAAS,CAAC,CAAC;IAEzE;;;;;;;;;OASG;IACH,eAAe,CACb,EAAE,CAAC,EAAE,WAAW,EAChB,IAAI,CAAC,EAAE,aAAa,EACpB,aAAa,CAAC,EAAE,aAAa,GAC5B,OAAO,CAAC,kBAAkB,CAAC,CAAC;IAE/B;;;;;;;;OAQG;IACH,OAAO,CACL,EAAE,CAAC,EAAE,WAAW,EAChB,IAAI,CAAC,EAAE,aAAa,EACpB,aAAa,CAAC,EAAE,aAAa,GAC5B,OAAO,CAAC,aAAa,CAAC,CAAC;IAE1B;;;;;;;;;;;OAWG;IACH,qBAAqB,CAAC,aAAa,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAAC;CAC7E"}
package/index.ts CHANGED
@@ -4,6 +4,7 @@ export type {
4
4
  SingleValueType,
5
5
  Values,
6
6
  ValueType,
7
+ ValueNode,
7
8
  PopulatedSingleValueType,
8
9
  PopulatedValues,
9
10
  PopulatedValueType,
@@ -47,7 +48,11 @@ export type {
47
48
 
48
49
  export { KEY_VALUE_SERVICE_ID } from "./src/service/core/KeyValueService.ts";
49
50
  export { SECRET_SENTINEL_PREFIX } from "./src/service/core/KeyValueService.ts";
50
- export type { default as KeyValueService } from "./src/service/core/KeyValueService.ts";
51
+ export { Secret } from "./src/service/core/KeyValueService.ts";
52
+ export type {
53
+ default as KeyValueService,
54
+ SettableValueNode,
55
+ } from "./src/service/core/KeyValueService.ts";
51
56
  export type { default as SecretService } from "./src/service/core/SecretService.ts";
52
57
 
53
58
  export { FETCH_SERVICE_ID } from "./src/service/core/FetchService.ts";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@flowscripter/dynamic-cli-framework-api",
3
- "version": "1.4.1",
3
+ "version": "2.0.0",
4
4
  "description": "API for https://github.com/flowscripter/dynamic-cli-framework",
5
5
  "keywords": [
6
6
  "bun",
package/src/Value.ts CHANGED
@@ -34,6 +34,12 @@ export type SingleValueType = number | string | boolean;
34
34
  */
35
35
  export type ValueType = SingleValueType | Array<SingleValueType>;
36
36
 
37
+ /**
38
+ * Any node that can appear within a {@link Values} tree: a primitive/array-of-primitives
39
+ * ({@link ValueType}), a nested keyed object ({@link Values}), or an array of such objects.
40
+ */
41
+ export type ValueNode = ValueType | Values | Array<Values>;
42
+
37
43
  /**
38
44
  * A container object for populated values.
39
45
  *
@@ -55,7 +61,7 @@ export type ValueType = SingleValueType | Array<SingleValueType>;
55
61
  * * `{ foo: [ [ 1, 2 ], [3, 4 ] ] }`
56
62
  */
57
63
  export type Values = {
58
- [name: string]: ValueType | Values | Array<Values>;
64
+ [name: string]: ValueNode;
59
65
  };
60
66
 
61
67
  /**
@@ -1,44 +1,82 @@
1
+ import type { ValueNode } from "../../Value.ts";
2
+
1
3
  export const KEY_VALUE_SERVICE_ID = "@flowscripter/dynamic-cli-framework/key-value-service";
2
4
 
3
5
  /**
4
6
  * The sentinel prefix used to indicate a value is stored as an OS-native secret.
5
- * Values starting with this prefix are resolved via the {@link SecretService}.
7
+ * String leaves starting with this prefix are resolved via the {@link SecretService}.
6
8
  * This prefix is reserved and must not be used for regular key-value data.
7
9
  */
8
10
  export const SECRET_SENTINEL_PREFIX = "__SECRET__:";
9
11
 
12
+ /**
13
+ * Wraps a value to mark it for storage as an OS-native secret via {@link SecretService}, when passed to
14
+ * {@link KeyValueService.set}. Can wrap the entire value passed to `set`, or be nested at any depth
15
+ * within a larger object/array passed to `set`.
16
+ */
17
+ export class Secret<T extends ValueNode = ValueNode> {
18
+ constructor(public readonly value: T) {}
19
+ }
20
+
21
+ /**
22
+ * The shape of a value passed to {@link KeyValueService.set}.
23
+ *
24
+ * Like {@link ValueNode} (primitives, arrays of primitives, nested keyed objects, or arrays of
25
+ * nested objects) but additionally allows a {@link Secret}-wrapped value at any depth - as a top
26
+ * level value, a property of a nested object, or an entry of a nested array. A {@link Secret}
27
+ * itself wraps a plain {@link ValueNode}, so secrets do not nest within secrets.
28
+ */
29
+ export type SettableValueNode =
30
+ | ValueNode
31
+ | Secret
32
+ | { [name: string]: SettableValueNode }
33
+ | Array<SettableValueNode>;
34
+
10
35
  /**
11
36
  * Service providing keystore functionality for the CLI. The keystore data is scoped to the
12
37
  * service or {@link Command} instances accessing this service via {@link Context.getServiceById}.
13
38
  *
14
- * Values can optionally be stored as OS-native secrets using the `isSecret` parameter on
15
- * {@link setKey}. Secret values are stored via {@link SecretService} and only a sentinel
16
- * reference is kept in the key-value Map. The sentinel prefix `__SECRET__:` is reserved.
39
+ * Values are arbitrary JSON-serializable data (see {@link ValueNode}) - not limited to
40
+ * strings - and may be deep objects or arrays.
41
+ *
42
+ * Any node within a value passed to {@link set} can be wrapped in {@link Secret} to have that
43
+ * node - and only that node - stored as an OS-native secret via {@link SecretService}, with a
44
+ * sentinel reference (prefixed with `__SECRET__:`) kept in its place in the stored structure.
45
+ * Everything else in the value is stored as plain (unencrypted) config data. This is symmetric
46
+ * with {@link get}, which resolves sentinel references found at any depth.
17
47
  */
18
48
  export default interface KeyValueService {
19
49
  /**
20
- * Get a value for a specified key in the keystore.
21
- * If the stored value is a secret sentinel, the actual value is retrieved from the OS secret store.
50
+ * Get the value for a specified key in the keystore.
51
+ *
52
+ * Recursively resolves any string leaf - at any depth within the stored value - which is a
53
+ * secret sentinel, retrieving its actual value via {@link SecretService}. This covers both
54
+ * values written via {@link set} using a nested {@link Secret}, and secret references a user
55
+ * hand-embeds directly (nested arbitrarily deep) in the CLI's JSON config file.
22
56
  */
23
- getKey(key: string): Promise<string>;
57
+ get<T extends ValueNode = ValueNode>(key: string): Promise<T>;
24
58
 
25
59
  /**
26
60
  * Set a value for a specified key in the keystore.
27
61
  *
28
- * @param isSecret if true, the value is stored in the OS-native secret store and a sentinel
29
- * reference is kept in the key-value Map. Requires that the service was constructed with
30
- * secret support enabled.
62
+ * Any node within `value` wrapped in {@link Secret} - at any depth - is serialized as JSON and
63
+ * stored as an OS-native secret via {@link SecretService}, with a sentinel reference kept in
64
+ * its place in the stored structure. All other data is stored as plain (unencrypted) config
65
+ * data. Storing a secret requires that the service was constructed with secret support
66
+ * enabled.
31
67
  */
32
- setKey(key: string, value: string, isSecret?: boolean): Promise<void>;
68
+ set(key: string, value: SettableValueNode): Promise<void>;
33
69
 
34
70
  /**
35
71
  * Check if a value for a specified key exists in the keystore.
36
72
  */
37
- hasKey(key: string): Promise<boolean>;
73
+ has(key: string): Promise<boolean>;
38
74
 
39
75
  /**
40
76
  * Delete the value for a specified key in the keystore.
41
- * If the stored value is a secret sentinel, the secret is also deleted from the OS secret store.
77
+ *
78
+ * Recursively walks the stored (unresolved) structure for `key` and deletes every OS-native
79
+ * secret referenced - at any depth - via {@link SecretService}, before removing the key itself.
42
80
  */
43
- deleteKey(key: string): Promise<void>;
81
+ delete(key: string): Promise<void>;
44
82
  }
@@ -28,16 +28,34 @@ export enum InstallMethod {
28
28
  }
29
29
 
30
30
  /**
31
- * Outcome of an {@link UpgradeService.checkForUpgrade} call.
31
+ * Outcome of an {@link UpgradeService.checkForUpgrade} or {@link UpgradeService.getUpgradeCheckResult}
32
+ * call. The `"pending"` status can only be produced by {@link UpgradeService.getUpgradeCheckResult}'s
33
+ * non-blocking bounded wait - `checkForUpgrade()` and a `getUpgradeCheckResult(true)` call always
34
+ * run to completion and so never resolve to it.
32
35
  */
33
- export interface UpgradeCheckResult {
34
- readonly currentVersion: string;
35
- readonly latestVersion: string;
36
- readonly updateAvailable: boolean;
37
- readonly os: SupportedOs;
38
- readonly arch: SupportedArch;
39
- readonly installMethod: InstallMethod;
40
- }
36
+ export type UpgradeCheckResult =
37
+ | {
38
+ readonly status: "checked";
39
+ readonly currentVersion: string;
40
+ readonly latestVersion: string;
41
+ readonly updateAvailable: boolean;
42
+ readonly os: SupportedOs;
43
+ readonly arch: SupportedArch;
44
+ readonly installMethod: InstallMethod;
45
+ }
46
+ | {
47
+ /** The resolved (or overridden) os/arch/installMethod combination is not supported or not configured. */
48
+ readonly status: "unsupported";
49
+ }
50
+ | {
51
+ /** A supported/configured combination was found, but determining the latest version failed. */
52
+ readonly status: "failed";
53
+ readonly error: Error;
54
+ }
55
+ | {
56
+ /** The non-blocking bounded wait elapsed before the check completed. */
57
+ readonly status: "pending";
58
+ };
41
59
 
42
60
  /**
43
61
  * Outcome of an {@link UpgradeService.upgrade} call.
@@ -83,14 +101,14 @@ export default interface UpgradeService {
83
101
  * @param arch optional {@link SupportedArch} override, defaults to the detected value.
84
102
  * @param installMethod optional {@link InstallMethod} override, defaults to the detected value.
85
103
  *
86
- * @return the {@link UpgradeCheckResult}, or `undefined` if the resolved os/arch/installMethod
87
- * combination is not supported or not configured. Never rejects.
104
+ * @return the {@link UpgradeCheckResult}. Runs to completion, so never resolves to the
105
+ * `"pending"` status. Never rejects.
88
106
  */
89
107
  checkForUpgrade(
90
108
  os?: SupportedOs,
91
109
  arch?: SupportedArch,
92
110
  installMethod?: InstallMethod,
93
- ): Promise<UpgradeCheckResult | undefined>;
111
+ ): Promise<UpgradeCheckResult>;
94
112
 
95
113
  /**
96
114
  * Upgrade the CLI to the latest available version.
@@ -112,12 +130,12 @@ export default interface UpgradeService {
112
130
  * dependencies were set (or starts one now, with default/no-override detection, if none has
113
131
  * started yet). Every call is backed by the same cached promise.
114
132
  *
115
- * @param waitForResult if `true`, waits for the check to fully resolve. If `false` (default),
116
- * gives up and resolves to `undefined` after an internal bounded delay, so callers on a
117
- * startup/opportunistic path are never blocked by a slow network/spawn call.
133
+ * @param waitForResult if `true`, waits for the check to fully resolve, so the result never has
134
+ * status `"pending"`. If `false` (default), gives up and resolves to a `"pending"` result after
135
+ * an internal bounded delay, so callers on a startup/opportunistic path are never blocked by a
136
+ * slow network/spawn call.
118
137
  *
119
- * @return the {@link UpgradeCheckResult}, or `undefined` if unsupported/unconfigured or the
120
- * bounded wait elapsed. Never rejects.
138
+ * @return the {@link UpgradeCheckResult}. Never rejects.
121
139
  */
122
- getUpgradeCheckResult(waitForResult?: boolean): Promise<UpgradeCheckResult | undefined>;
140
+ getUpgradeCheckResult(waitForResult?: boolean): Promise<UpgradeCheckResult>;
123
141
  }