@flowscripter/dynamic-cli-framework 3.0.2 → 4.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.
Files changed (48) hide show
  1. package/dist/index.d.ts +2 -3
  2. package/dist/index.d.ts.map +1 -1
  3. package/dist/index.js +2 -3
  4. package/dist/src/cli/BaseCLI.d.ts +1 -0
  5. package/dist/src/cli/BaseCLI.d.ts.map +1 -1
  6. package/dist/src/cli/BaseCLI.js +8 -0
  7. package/dist/src/cli/BaseCLIFeatureOptions.d.ts +4 -0
  8. package/dist/src/cli/BaseCLIFeatureOptions.d.ts.map +1 -1
  9. package/dist/src/launcher.d.ts +0 -2
  10. package/dist/src/launcher.d.ts.map +1 -1
  11. package/dist/src/launcher.js +0 -20
  12. package/dist/src/service/completion/CompletionServiceProvider.js +4 -4
  13. package/dist/src/service/configuration/ConfigurationServiceProvider.d.ts +19 -8
  14. package/dist/src/service/configuration/ConfigurationServiceProvider.d.ts.map +1 -1
  15. package/dist/src/service/configuration/ConfigurationServiceProvider.js +26 -33
  16. package/dist/src/service/configuration/DefaultKeyValueService.d.ts +6 -6
  17. package/dist/src/service/configuration/DefaultKeyValueService.d.ts.map +1 -1
  18. package/dist/src/service/configuration/DefaultKeyValueService.js +60 -19
  19. package/dist/src/service/configuration/resolveSecrets.d.ts +11 -0
  20. package/dist/src/service/configuration/resolveSecrets.d.ts.map +1 -0
  21. package/dist/src/service/configuration/resolveSecrets.js +31 -0
  22. package/dist/src/service/plugin/DefaultPluginService.d.ts +5 -2
  23. package/dist/src/service/plugin/DefaultPluginService.d.ts.map +1 -1
  24. package/dist/src/service/plugin/DefaultPluginService.js +21 -2
  25. package/dist/src/service/plugin/PluginServiceProvider.d.ts +17 -0
  26. package/dist/src/service/plugin/PluginServiceProvider.d.ts.map +1 -0
  27. package/dist/src/service/plugin/PluginServiceProvider.js +95 -0
  28. package/dist/src/service/upgrade/UpgradeServiceProvider.js +4 -4
  29. package/index.ts +2 -7
  30. package/package.json +3 -3
  31. package/src/cli/BaseCLI.ts +17 -0
  32. package/src/cli/BaseCLIFeatureOptions.ts +7 -0
  33. package/src/launcher.ts +0 -35
  34. package/src/service/completion/CompletionServiceProvider.ts +4 -4
  35. package/src/service/configuration/ConfigurationServiceProvider.ts +36 -40
  36. package/src/service/configuration/DefaultKeyValueService.ts +76 -22
  37. package/src/service/configuration/resolveSecrets.ts +35 -0
  38. package/src/service/plugin/DefaultPluginService.ts +41 -3
  39. package/src/service/plugin/PluginServiceProvider.ts +142 -0
  40. package/src/service/upgrade/UpgradeServiceProvider.ts +4 -4
  41. package/dist/src/cli/DynamicPluginRuntimeCLI.d.ts +0 -20
  42. package/dist/src/cli/DynamicPluginRuntimeCLI.d.ts.map +0 -1
  43. package/dist/src/cli/DynamicPluginRuntimeCLI.js +0 -50
  44. package/dist/src/service/plugin/DefaultPluginServiceProvider.d.ts +0 -15
  45. package/dist/src/service/plugin/DefaultPluginServiceProvider.d.ts.map +0 -1
  46. package/dist/src/service/plugin/DefaultPluginServiceProvider.js +0 -56
  47. package/src/cli/DynamicPluginRuntimeCLI.ts +0 -77
  48. package/src/service/plugin/DefaultPluginServiceProvider.ts +0 -82
package/dist/index.d.ts CHANGED
@@ -111,14 +111,13 @@ export type { ServiceProviderFactory } from "@flowscripter/dynamic-cli-framework
111
111
  export { DYNAMIC_CLI_FRAMEWORK_SERVICE_PROVIDER_FACTORY_EXTENSION_POINT } from "@flowscripter/dynamic-cli-framework-api";
112
112
  export { PLUGIN_SERVICE_ID } from "@flowscripter/dynamic-cli-framework-api";
113
113
  export type { PluginService } from "@flowscripter/dynamic-cli-framework-api";
114
- export { default as DefaultPluginServiceProvider } from "./src/service/plugin/DefaultPluginServiceProvider.ts";
114
+ export { default as PluginServiceProvider } from "./src/service/plugin/PluginServiceProvider.ts";
115
115
  export { default as BaseCLI } from "./src/cli/BaseCLI.ts";
116
116
  export { default as DefaultRuntimeCLI } from "./src/cli/DefaultRuntimeCLI.ts";
117
- export { default as DynamicPluginRuntimeCLI } from "./src/cli/DynamicPluginRuntimeCLI.ts";
118
117
  export type { default as Terminal } from "./src/terminal/Terminal.ts";
119
118
  export type { default as Styler } from "./src/terminal/Styler.ts";
120
119
  export type { default as KeyReader, KeyEvent } from "./src/terminal/KeyReader.ts";
121
120
  export { SpecialKey } from "./src/terminal/KeyReader.ts";
122
121
  export { default as TtyKeyReader } from "./src/terminal/TtyKeyReader.ts";
123
- export { launchDynamicPluginMultiCommandCLI, launchMultiCommandCLI, launchSingleCommandCLI, } from "./src/launcher.ts";
122
+ export { launchMultiCommandCLI, launchSingleCommandCLI } from "./src/launcher.ts";
124
123
  //# sourceMappingURL=index.d.ts.map
@@ -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
@@ -66,12 +66,11 @@ export { MultiCommandCliHelpGlobalCommand, MultiCommandCliHelpSubCommand, } from
66
66
  export { DYNAMIC_CLI_FRAMEWORK_COMMAND_FACTORY_EXTENSION_POINT } from "@flowscripter/dynamic-cli-framework-api";
67
67
  export { DYNAMIC_CLI_FRAMEWORK_SERVICE_PROVIDER_FACTORY_EXTENSION_POINT } from "@flowscripter/dynamic-cli-framework-api";
68
68
  export { PLUGIN_SERVICE_ID } from "@flowscripter/dynamic-cli-framework-api";
69
- export { default as DefaultPluginServiceProvider } from "./src/service/plugin/DefaultPluginServiceProvider.js";
69
+ export { default as PluginServiceProvider } from "./src/service/plugin/PluginServiceProvider.js";
70
70
  // Core CLI
71
71
  export { default as BaseCLI } from "./src/cli/BaseCLI.js";
72
72
  export { default as DefaultRuntimeCLI } from "./src/cli/DefaultRuntimeCLI.js";
73
- export { default as DynamicPluginRuntimeCLI } from "./src/cli/DynamicPluginRuntimeCLI.js";
74
73
  export { SpecialKey } from "./src/terminal/KeyReader.js";
75
74
  export { default as TtyKeyReader } from "./src/terminal/TtyKeyReader.js";
76
75
  // Convenience functions
77
- export { launchDynamicPluginMultiCommandCLI, launchMultiCommandCLI, launchSingleCommandCLI, } from "./src/launcher.js";
76
+ export { launchMultiCommandCLI, launchSingleCommandCLI } from "./src/launcher.js";
@@ -28,6 +28,7 @@ import type BaseCLIFeatureOptions from "./BaseCLIFeatureOptions.ts";
28
28
  * * {@link FetchServiceProvider}
29
29
  * * {@link CompletionServiceProvider}
30
30
  * * {@link UpgradeServiceProvider}
31
+ * * {@link PluginServiceProvider}
31
32
  *
32
33
  * `keyReader` is optional. If omitted, or if the stderr {@link Terminal} is not a TTY, prompting is
33
34
  * unavailable: {@link PrompterServiceProvider} (and {@link ArgumentPrompterServiceProvider}, if
@@ -1 +1 @@
1
- {"version":3,"file":"BaseCLI.d.ts","sourceRoot":"","sources":["../../../src/cli/BaseCLI.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,yCAAyC,CAAC;AACnE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAIzE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,yCAAyC,CAAC;AAGvE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yCAAyC,CAAC;AAC/E,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AA4BzE,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,KAAK,QAAQ,MAAM,yBAAyB,CAAC;AAGpD,OAAO,KAAK,MAAM,MAAM,uBAAuB,CAAC;AAChD,OAAO,KAAK,SAAS,MAAM,0BAA0B,CAAC;AACtD,OAAO,KAAK,qBAAqB,MAAM,4BAA4B,CAAC;AAepE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,MAAM,CAAC,OAAO,OAAO,OAAQ,YAAW,GAAG;;gBAavC,SAAS,EAAE,SAAS,EACpB,oBAAoB,EAAE,cAAc,EACpC,oBAAoB,EAAE,cAAc,EACpC,aAAa,EAAE,OAAO,EACtB,aAAa,EAAE,OAAO,EACtB,cAAc,EAAE,QAAQ,EACxB,cAAc,EAAE,QAAQ,EACxB,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,SAAS,GAAG,SAAS,EAChC,OAAO,CAAC,EAAE,qBAAqB;IA+DjC;;;;;;;OAOG;IACI,kBAAkB,CAAC,eAAe,EAAE,eAAe;IAI1D;;;;;;;;OAQG;IACI,UAAU,CAAC,OAAO,EAAE,OAAO;IAU5B,GAAG,CAAC,IAAI,EAAE,aAAa,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,SAAS,CAAC;CA+L3D"}
1
+ {"version":3,"file":"BaseCLI.d.ts","sourceRoot":"","sources":["../../../src/cli/BaseCLI.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,yCAAyC,CAAC;AACnE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAIzE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,yCAAyC,CAAC;AAGvE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yCAAyC,CAAC;AAC/E,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AA4BzE,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,KAAK,QAAQ,MAAM,yBAAyB,CAAC;AAGpD,OAAO,KAAK,MAAM,MAAM,uBAAuB,CAAC;AAChD,OAAO,KAAK,SAAS,MAAM,0BAA0B,CAAC;AACtD,OAAO,KAAK,qBAAqB,MAAM,4BAA4B,CAAC;AAgBpE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,MAAM,CAAC,OAAO,OAAO,OAAQ,YAAW,GAAG;;gBAavC,SAAS,EAAE,SAAS,EACpB,oBAAoB,EAAE,cAAc,EACpC,oBAAoB,EAAE,cAAc,EACpC,aAAa,EAAE,OAAO,EACtB,aAAa,EAAE,OAAO,EACtB,cAAc,EAAE,QAAQ,EACxB,cAAc,EAAE,QAAQ,EACxB,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,SAAS,GAAG,SAAS,EAChC,OAAO,CAAC,EAAE,qBAAqB;IAkEjC;;;;;;;OAOG;IACI,kBAAkB,CAAC,eAAe,EAAE,eAAe;IAI1D;;;;;;;;OAQG;IACI,UAAU,CAAC,OAAO,EAAE,OAAO;IAU5B,GAAG,CAAC,IAAI,EAAE,aAAa,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,SAAS,CAAC;CA2M3D"}
@@ -28,6 +28,7 @@ import ImagePrinterServiceProvider from "../service/imagePrinter/ImagePrinterSer
28
28
  import SpawnServiceProvider from "../service/spawn/SpawnServiceProvider.js";
29
29
  import FetchServiceProvider from "../service/fetch/FetchServiceProvider.js";
30
30
  import UpgradeServiceProvider from "../service/upgrade/UpgradeServiceProvider.js";
31
+ import PluginServiceProvider from "../service/plugin/PluginServiceProvider.js";
31
32
  const logger = getLogger("BaseCLI");
32
33
  /**
33
34
  * Base implementation of a {@link CLI}.
@@ -49,6 +50,7 @@ const logger = getLogger("BaseCLI");
49
50
  * * {@link FetchServiceProvider}
50
51
  * * {@link CompletionServiceProvider}
51
52
  * * {@link UpgradeServiceProvider}
53
+ * * {@link PluginServiceProvider}
52
54
  *
53
55
  * `keyReader` is optional. If omitted, or if the stderr {@link Terminal} is not a TTY, prompting is
54
56
  * unavailable: {@link PrompterServiceProvider} (and {@link ArgumentPrompterServiceProvider}, if
@@ -100,6 +102,9 @@ export default class BaseCLI {
100
102
  fetchServiceEnabled: false,
101
103
  upgradeServiceEnabled: false,
102
104
  upgradeLocationsConfig: { supportedPlatforms: [] },
105
+ pluginServiceEnabled: false,
106
+ pluginServiceRemoteConfig: { name: "", registryUrl: "", packageJsonNamespace: "" },
107
+ pluginServiceLocalConfig: { nodeModulesPath: "", packageJsonNamespace: "" },
103
108
  validateAllCommands: false,
104
109
  promptingEnabled: true,
105
110
  ...options,
@@ -205,6 +210,9 @@ export default class BaseCLI {
205
210
  if (this.#options.upgradeServiceEnabled) {
206
211
  this.addServiceProvider(new UpgradeServiceProvider(6, this.#options.upgradeLocationsConfig));
207
212
  }
213
+ if (this.#options.pluginServiceEnabled) {
214
+ this.addServiceProvider(new PluginServiceProvider(50, this.#options.pluginServiceRemoteConfig, this.#options.pluginServiceLocalConfig, this.#commandRegistry, this.#serviceProviderRegistry));
215
+ }
208
216
  const configurationServiceProvider = new ConfigurationServiceProvider(90, this.#options.envVarsSupportEnabled, this.#options.configFileSupportEnabled, this.#options.keyValueServiceEnabled, this.#options.secretServiceEnabled);
209
217
  this.addServiceProvider(configurationServiceProvider);
210
218
  for (const serviceProvider of this.#serviceProviderRegistry.getServiceProviders()) {
@@ -1,4 +1,5 @@
1
1
  import type { UpgradeLocationsConfig } from "../service/upgrade/UpgradeLocationsConfig.ts";
2
+ import type { NpmjsPluginRepositoryConfig, NpmPluginRepositoryConfig } from "@flowscripter/dynamic-plugin-framework";
2
3
  export default interface BaseCLIFeatureOptions {
3
4
  readonly configFileSupportEnabled?: boolean;
4
5
  readonly envVarsSupportEnabled?: boolean;
@@ -11,6 +12,9 @@ export default interface BaseCLIFeatureOptions {
11
12
  readonly fetchServiceEnabled?: boolean;
12
13
  readonly upgradeServiceEnabled?: boolean;
13
14
  readonly upgradeLocationsConfig?: UpgradeLocationsConfig;
15
+ readonly pluginServiceEnabled?: boolean;
16
+ readonly pluginServiceRemoteConfig?: NpmjsPluginRepositoryConfig;
17
+ readonly pluginServiceLocalConfig?: NpmPluginRepositoryConfig;
14
18
  readonly validateAllCommands?: boolean;
15
19
  readonly promptingEnabled?: boolean;
16
20
  }
@@ -1 +1 @@
1
- {"version":3,"file":"BaseCLIFeatureOptions.d.ts","sourceRoot":"","sources":["../../../src/cli/BaseCLIFeatureOptions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,8CAA8C,CAAC;AAE3F,MAAM,CAAC,OAAO,WAAW,qBAAqB;IAC5C,QAAQ,CAAC,wBAAwB,CAAC,EAAE,OAAO,CAAC;IAC5C,QAAQ,CAAC,qBAAqB,CAAC,EAAE,OAAO,CAAC;IACzC,QAAQ,CAAC,sBAAsB,CAAC,EAAE,OAAO,CAAC;IAC1C,QAAQ,CAAC,oBAAoB,CAAC,EAAE,OAAO,CAAC;IACxC,QAAQ,CAAC,8BAA8B,CAAC,EAAE,OAAO,CAAC;IAClD,QAAQ,CAAC,wBAAwB,CAAC,EAAE,OAAO,CAAC;IAC5C,QAAQ,CAAC,0BAA0B,CAAC,EAAE,OAAO,CAAC;IAC9C,QAAQ,CAAC,mBAAmB,CAAC,EAAE,OAAO,CAAC;IACvC,QAAQ,CAAC,mBAAmB,CAAC,EAAE,OAAO,CAAC;IACvC,QAAQ,CAAC,qBAAqB,CAAC,EAAE,OAAO,CAAC;IACzC,QAAQ,CAAC,sBAAsB,CAAC,EAAE,sBAAsB,CAAC;IACzD,QAAQ,CAAC,mBAAmB,CAAC,EAAE,OAAO,CAAC;IACvC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,OAAO,CAAC;CACrC"}
1
+ {"version":3,"file":"BaseCLIFeatureOptions.d.ts","sourceRoot":"","sources":["../../../src/cli/BaseCLIFeatureOptions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,8CAA8C,CAAC;AAC3F,OAAO,KAAK,EACV,2BAA2B,EAC3B,yBAAyB,EAC1B,MAAM,wCAAwC,CAAC;AAEhD,MAAM,CAAC,OAAO,WAAW,qBAAqB;IAC5C,QAAQ,CAAC,wBAAwB,CAAC,EAAE,OAAO,CAAC;IAC5C,QAAQ,CAAC,qBAAqB,CAAC,EAAE,OAAO,CAAC;IACzC,QAAQ,CAAC,sBAAsB,CAAC,EAAE,OAAO,CAAC;IAC1C,QAAQ,CAAC,oBAAoB,CAAC,EAAE,OAAO,CAAC;IACxC,QAAQ,CAAC,8BAA8B,CAAC,EAAE,OAAO,CAAC;IAClD,QAAQ,CAAC,wBAAwB,CAAC,EAAE,OAAO,CAAC;IAC5C,QAAQ,CAAC,0BAA0B,CAAC,EAAE,OAAO,CAAC;IAC9C,QAAQ,CAAC,mBAAmB,CAAC,EAAE,OAAO,CAAC;IACvC,QAAQ,CAAC,mBAAmB,CAAC,EAAE,OAAO,CAAC;IACvC,QAAQ,CAAC,qBAAqB,CAAC,EAAE,OAAO,CAAC;IACzC,QAAQ,CAAC,sBAAsB,CAAC,EAAE,sBAAsB,CAAC;IACzD,QAAQ,CAAC,oBAAoB,CAAC,EAAE,OAAO,CAAC;IACxC,QAAQ,CAAC,yBAAyB,CAAC,EAAE,2BAA2B,CAAC;IACjE,QAAQ,CAAC,wBAAwB,CAAC,EAAE,yBAAyB,CAAC;IAC9D,QAAQ,CAAC,mBAAmB,CAAC,EAAE,OAAO,CAAC;IACvC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,OAAO,CAAC;CACrC"}
@@ -1,7 +1,5 @@
1
1
  import type { SubCommand, Command, RunResult, ServiceProvider } from "@flowscripter/dynamic-cli-framework-api";
2
2
  import type BaseCLIFeatureOptions from "./cli/BaseCLIFeatureOptions.ts";
3
- import type { MarketplacePluginManager } from "@flowscripter/dynamic-plugin-framework";
4
3
  export declare function launchSingleCommandCLI(command: SubCommand, description?: string, name?: string, version?: string, serviceProviders?: ReadonlyArray<ServiceProvider>, options?: BaseCLIFeatureOptions): Promise<RunResult>;
5
4
  export declare function launchMultiCommandCLI(commands: ReadonlyArray<Command>, description?: string, name?: string, version?: string, serviceProviders?: ReadonlyArray<ServiceProvider>, options?: BaseCLIFeatureOptions): Promise<RunResult>;
6
- export declare function launchDynamicPluginMultiCommandCLI(pluginManager: MarketplacePluginManager, commands: ReadonlyArray<Command>, description?: string, name?: string, version?: string, serviceProviders?: ReadonlyArray<ServiceProvider>, options?: BaseCLIFeatureOptions): Promise<RunResult>;
7
5
  //# sourceMappingURL=launcher.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"launcher.d.ts","sourceRoot":"","sources":["../../src/launcher.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAEV,UAAU,EACV,OAAO,EACP,SAAS,EACT,eAAe,EAChB,MAAM,yCAAyC,CAAC;AACjD,OAAO,KAAK,qBAAqB,MAAM,gCAAgC,CAAC;AAGxE,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,wCAAwC,CAAC;AAEvF,wBAAsB,sBAAsB,CAC1C,OAAO,EAAE,UAAU,EACnB,WAAW,CAAC,EAAE,MAAM,EACpB,IAAI,CAAC,EAAE,MAAM,EACb,OAAO,CAAC,EAAE,MAAM,EAChB,gBAAgB,CAAC,EAAE,aAAa,CAAC,eAAe,CAAC,EACjD,OAAO,CAAC,EAAE,qBAAqB,GAC9B,OAAO,CAAC,SAAS,CAAC,CAuBpB;AAED,wBAAsB,qBAAqB,CACzC,QAAQ,EAAE,aAAa,CAAC,OAAO,CAAC,EAChC,WAAW,CAAC,EAAE,MAAM,EACpB,IAAI,CAAC,EAAE,MAAM,EACb,OAAO,CAAC,EAAE,MAAM,EAChB,gBAAgB,CAAC,EAAE,aAAa,CAAC,eAAe,CAAC,EACjD,OAAO,CAAC,EAAE,qBAAqB,GAC9B,OAAO,CAAC,SAAS,CAAC,CAuBpB;AAED,wBAAsB,kCAAkC,CACtD,aAAa,EAAE,wBAAwB,EACvC,QAAQ,EAAE,aAAa,CAAC,OAAO,CAAC,EAChC,WAAW,CAAC,EAAE,MAAM,EACpB,IAAI,CAAC,EAAE,MAAM,EACb,OAAO,CAAC,EAAE,MAAM,EAChB,gBAAgB,CAAC,EAAE,aAAa,CAAC,eAAe,CAAC,EACjD,OAAO,CAAC,EAAE,qBAAqB,GAC9B,OAAO,CAAC,SAAS,CAAC,CAuBpB"}
1
+ {"version":3,"file":"launcher.d.ts","sourceRoot":"","sources":["../../src/launcher.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAEV,UAAU,EACV,OAAO,EACP,SAAS,EACT,eAAe,EAChB,MAAM,yCAAyC,CAAC;AACjD,OAAO,KAAK,qBAAqB,MAAM,gCAAgC,CAAC;AAGxE,wBAAsB,sBAAsB,CAC1C,OAAO,EAAE,UAAU,EACnB,WAAW,CAAC,EAAE,MAAM,EACpB,IAAI,CAAC,EAAE,MAAM,EACb,OAAO,CAAC,EAAE,MAAM,EAChB,gBAAgB,CAAC,EAAE,aAAa,CAAC,eAAe,CAAC,EACjD,OAAO,CAAC,EAAE,qBAAqB,GAC9B,OAAO,CAAC,SAAS,CAAC,CAuBpB;AAED,wBAAsB,qBAAqB,CACzC,QAAQ,EAAE,aAAa,CAAC,OAAO,CAAC,EAChC,WAAW,CAAC,EAAE,MAAM,EACpB,IAAI,CAAC,EAAE,MAAM,EACb,OAAO,CAAC,EAAE,MAAM,EAChB,gBAAgB,CAAC,EAAE,aAAa,CAAC,eAAe,CAAC,EACjD,OAAO,CAAC,EAAE,qBAAqB,GAC9B,OAAO,CAAC,SAAS,CAAC,CAuBpB"}
@@ -1,7 +1,6 @@
1
1
  import process from "node:process";
2
2
  import path from "node:path";
3
3
  import DefaultRuntimeCLI from "./cli/DefaultRuntimeCLI.js";
4
- import DynamicPluginRuntimeCLI from "./cli/DynamicPluginRuntimeCLI.js";
5
4
  export async function launchSingleCommandCLI(command, description, name, version, serviceProviders, options) {
6
5
  if (!name) {
7
6
  name = path.basename(process.execPath);
@@ -40,22 +39,3 @@ export async function launchMultiCommandCLI(commands, description, name, version
40
39
  serviceProviders?.forEach((service) => cli.addServiceProvider(service));
41
40
  return await cli.run();
42
41
  }
43
- export async function launchDynamicPluginMultiCommandCLI(pluginManager, commands, description, name, version, serviceProviders, options) {
44
- if (!name) {
45
- name = path.basename(process.execPath);
46
- }
47
- const cliConfig = {
48
- description,
49
- name,
50
- version: version || "N/A",
51
- };
52
- const mergedOptions = {
53
- ...options,
54
- validateAllCommands: (options?.validateAllCommands ?? false) ||
55
- process.env.DYNAMIC_CLI_FRAMEWORK_VALIDATE_ALL !== undefined,
56
- };
57
- const cli = new DynamicPluginRuntimeCLI(cliConfig, pluginManager, mergedOptions);
58
- commands.forEach((command) => cli.addCommand(command));
59
- serviceProviders?.forEach((service) => cli.addServiceProvider(service));
60
- return await cli.run();
61
- }
@@ -39,8 +39,8 @@ export default class CompletionServiceProvider {
39
39
  return;
40
40
  }
41
41
  const keyValueService = context.getServiceById(KEY_VALUE_SERVICE_ID);
42
- if (await keyValueService.hasKey("completion-status")) {
43
- const status = await keyValueService.getKey("completion-status");
42
+ if (await keyValueService.has("completion-status")) {
43
+ const status = await keyValueService.get("completion-status");
44
44
  if (status === "installed" || status === "declined") {
45
45
  logger.debug(() => `Completion status is '${status}', skipping auto-prompt`);
46
46
  return;
@@ -73,7 +73,7 @@ export default class CompletionServiceProvider {
73
73
  return;
74
74
  }
75
75
  if (enableResult.value !== true) {
76
- await keyValueService.setKey("completion-status", "declined");
76
+ await keyValueService.set("completion-status", "declined");
77
77
  return;
78
78
  }
79
79
  let shellType;
@@ -102,7 +102,7 @@ export default class CompletionServiceProvider {
102
102
  }
103
103
  try {
104
104
  await this.#installCompletion(context, shellType);
105
- await keyValueService.setKey("completion-status", "installed");
105
+ await keyValueService.set("completion-status", "installed");
106
106
  }
107
107
  catch (error) {
108
108
  if (context.doesServiceExist(PRINTER_SERVICE_ID)) {
@@ -98,13 +98,21 @@ import type { CLIConfig } from "@flowscripter/dynamic-cli-framework-api";
98
98
  *
99
99
  * The second and third level of properties is used to scope the key-values to specific command names
100
100
  * (via {@link Command.name} values) and specific service IDs (via {@link ServiceProvider.serviceId} values).
101
- * Both keys and values are string based.
102
- *
103
- * Values may be stored as OS-native secrets via {@link KeyValueService.setKey} with `isSecret=true`.
104
- * When a value is stored as a secret, a sentinel value of the format `__SECRET__:<bun_secret_name>`
105
- * is stored in the config file instead of the actual value. The actual value is stored in the OS
106
- * credential store via Bun.secrets. The sentinel prefix `__SECRET__:` is reserved and must not be
107
- * used for regular key-value data.
101
+ * Keys are strings, but values are arbitrary JSON (see {@link ValueNode}) - not limited to strings -
102
+ * and may be deep objects or arrays.
103
+ *
104
+ * Any node within a value passed to {@link KeyValueService.set} can be wrapped in {@link Secret} -
105
+ * at any depth - to have that node, and only that node, stored as an OS-native secret. When a node
106
+ * is wrapped in {@link Secret}, its value (of any shape) is JSON-serialized and stored as a single
107
+ * OS-native secret via Bun.secrets, with a sentinel value of the format `__SECRET__:<bun_secret_name>`
108
+ * substituted in its place in the structure that gets stored in the config file. Everything else in
109
+ * the value is stored as plain (unencrypted) config data. The sentinel prefix `__SECRET__:` is
110
+ * reserved and must not be used for regular key-value data.
111
+ *
112
+ * Independently of how a value was written, {@link KeyValueService.get} recursively resolves any
113
+ * string leaf - at any depth within the retrieved value - which starts with the sentinel prefix,
114
+ * via the OS secret store. This means a secret reference may also be hand-embedded (nested
115
+ * arbitrarily deep) directly within a plain, non-secret value in the config file.
108
116
  *
109
117
  * Secret support requires `secretServiceEnabled=true` in the constructor (which also requires
110
118
  * `configEnabled=true`).
@@ -119,7 +127,10 @@ import type { CLIConfig } from "@flowscripter/dynamic-cli-framework-api";
119
127
  * "commands": {
120
128
  * "command1": {
121
129
  * "foo1": "bar1",
122
- * "foo2": "__SECRET__:command_command1_foo2"
130
+ * "foo2": "__SECRET__:command_command1_foo2",
131
+ * "foo3": {
132
+ * "nested": ["a", "__SECRET__:command_command1_foo3_nested"]
133
+ * }
123
134
  * },
124
135
  * "command2": {
125
136
  * "foo1": "bar3"
@@ -1 +1 @@
1
- {"version":3,"file":"ConfigurationServiceProvider.d.ts","sourceRoot":"","sources":["../../../../src/service/configuration/ConfigurationServiceProvider.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,yCAAyC,CAAC;AAE5F,OAAO,KAAK,EACV,eAAe,EACf,MAAM,EACN,eAAe,EACf,kBAAkB,EACnB,MAAM,yCAAyC,CAAC;AAEjD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,yCAAyC,CAAC;AAQvE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,yCAAyC,CAAC;AAOvE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAQzE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkIG;AACH,MAAM,CAAC,OAAO,OAAO,4BAA6B,YAAW,eAAe;;IAC1E,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAwB;IAClD,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IAEjC,SAAgB,cAAc,EAAE,OAAO,CAAC;IACxC,SAAgB,aAAa,EAAE,OAAO,CAAC;IACvC,SAAgB,sBAAsB,EAAE,OAAO,CAAC;IAChD,SAAgB,oBAAoB,EAAE,OAAO,CAAC;IAGvC,cAAc,EAAE,MAAM,GAAG,SAAS,CAAC;IAKnC,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,GAAG,eAAe,CAAC,CAAa;IAmBvE;;;;;;;;OAQG;gBAED,eAAe,EAAE,MAAM,EACvB,cAAc,UAAQ,EACtB,aAAa,UAAQ,EACrB,sBAAsB,UAAQ,EAC9B,oBAAoB,UAAQ;IAevB,cAAc,CAAC,SAAS,EAAE,SAAS,GAAG,OAAO,CAAC,WAAW,CAAC;IAqB1D,iBAAiB,CAAC,cAAc,EAAE,MAAM;IAI/C;;;;;;;OAOG;IACU,wBAAwB,CACnC,SAAS,EAAE,SAAS,EACpB,OAAO,EAAE,OAAO,GACf,OAAO,CAAC,eAAe,GAAG,kBAAkB,GAAG,SAAS,CAAC;IAuE5D;;;;;;;OAOG;IACI,uBAAuB,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI;IA6BzD;;;;;;;OAOG;IACI,uBAAuB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IA6BvD;;;;;OAKG;IACU,kBAAkB,IAAI,OAAO,CAAC,IAAI,CAAC;IAqBnC,WAAW,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAsGlD,eAAe,IAAI,MAAM;CAiCjC"}
1
+ {"version":3,"file":"ConfigurationServiceProvider.d.ts","sourceRoot":"","sources":["../../../../src/service/configuration/ConfigurationServiceProvider.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,yCAAyC,CAAC;AAE5F,OAAO,KAAK,EACV,eAAe,EACf,MAAM,EAEN,eAAe,EACf,kBAAkB,EACnB,MAAM,yCAAyC,CAAC;AAEjD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,yCAAyC,CAAC;AASvE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,yCAAyC,CAAC;AAOvE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAQzE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6IG;AACH,MAAM,CAAC,OAAO,OAAO,4BAA6B,YAAW,eAAe;;IAC1E,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAwB;IAClD,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IAEjC,SAAgB,cAAc,EAAE,OAAO,CAAC;IACxC,SAAgB,aAAa,EAAE,OAAO,CAAC;IACvC,SAAgB,sBAAsB,EAAE,OAAO,CAAC;IAChD,SAAgB,oBAAoB,EAAE,OAAO,CAAC;IAGvC,cAAc,EAAE,MAAM,GAAG,SAAS,CAAC;IAKnC,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,GAAG,eAAe,CAAC,CAAa;IAmBvE;;;;;;;;OAQG;gBAED,eAAe,EAAE,MAAM,EACvB,cAAc,UAAQ,EACtB,aAAa,UAAQ,EACrB,sBAAsB,UAAQ,EAC9B,oBAAoB,UAAQ;IAevB,cAAc,CAAC,SAAS,EAAE,SAAS,GAAG,OAAO,CAAC,WAAW,CAAC;IAqB1D,iBAAiB,CAAC,cAAc,EAAE,MAAM;IAI/C;;;;;;;OAOG;IACU,wBAAwB,CACnC,SAAS,EAAE,SAAS,EACpB,OAAO,EAAE,OAAO,GACf,OAAO,CAAC,eAAe,GAAG,kBAAkB,GAAG,SAAS,CAAC;IAsD5D;;;;;;;OAOG;IACI,uBAAuB,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI;IA6BzD;;;;;;;OAOG;IACI,uBAAuB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IA6BvD;;;;;OAKG;IACU,kBAAkB,IAAI,OAAO,CAAC,IAAI,CAAC;IAqBnC,WAAW,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAsGlD,eAAe,IAAI,MAAM;CAiCjC"}
@@ -8,6 +8,7 @@ import DumpConfigCommand from "./command/DumpConfigCommand.js";
8
8
  import { KEY_VALUE_SERVICE_ID, SECRET_SENTINEL_PREFIX, } from "@flowscripter/dynamic-cli-framework-api";
9
9
  import DefaultKeyValueService from "./DefaultKeyValueService.js";
10
10
  import DefaultSecretService from "./DefaultSecretService.js";
11
+ import resolveSecrets from "./resolveSecrets.js";
11
12
  import argumentValueMerge from "../../runtime/values/argumentValueMerge.js";
12
13
  import { isGlobalCommand, isGlobalModifierCommand, isSubCommand, } from "../../runtime/command/CommandTypeGuards.js";
13
14
  import { getGlobalCommandValueFromEnvVars, getSubCommandValuesFromEnvVars, } from "../../util/envVarHelper.js";
@@ -107,13 +108,21 @@ const logger = getLogger("ConfigurationServiceProvider");
107
108
  *
108
109
  * The second and third level of properties is used to scope the key-values to specific command names
109
110
  * (via {@link Command.name} values) and specific service IDs (via {@link ServiceProvider.serviceId} values).
110
- * Both keys and values are string based.
111
+ * Keys are strings, but values are arbitrary JSON (see {@link ValueNode}) - not limited to strings -
112
+ * and may be deep objects or arrays.
111
113
  *
112
- * Values may be stored as OS-native secrets via {@link KeyValueService.setKey} with `isSecret=true`.
113
- * When a value is stored as a secret, a sentinel value of the format `__SECRET__:<bun_secret_name>`
114
- * is stored in the config file instead of the actual value. The actual value is stored in the OS
115
- * credential store via Bun.secrets. The sentinel prefix `__SECRET__:` is reserved and must not be
116
- * used for regular key-value data.
114
+ * Any node within a value passed to {@link KeyValueService.set} can be wrapped in {@link Secret} -
115
+ * at any depth - to have that node, and only that node, stored as an OS-native secret. When a node
116
+ * is wrapped in {@link Secret}, its value (of any shape) is JSON-serialized and stored as a single
117
+ * OS-native secret via Bun.secrets, with a sentinel value of the format `__SECRET__:<bun_secret_name>`
118
+ * substituted in its place in the structure that gets stored in the config file. Everything else in
119
+ * the value is stored as plain (unencrypted) config data. The sentinel prefix `__SECRET__:` is
120
+ * reserved and must not be used for regular key-value data.
121
+ *
122
+ * Independently of how a value was written, {@link KeyValueService.get} recursively resolves any
123
+ * string leaf - at any depth within the retrieved value - which starts with the sentinel prefix,
124
+ * via the OS secret store. This means a secret reference may also be hand-embedded (nested
125
+ * arbitrarily deep) directly within a plain, non-secret value in the config file.
117
126
  *
118
127
  * Secret support requires `secretServiceEnabled=true` in the constructor (which also requires
119
128
  * `configEnabled=true`).
@@ -128,7 +137,10 @@ const logger = getLogger("ConfigurationServiceProvider");
128
137
  * "commands": {
129
138
  * "command1": {
130
139
  * "foo1": "bar1",
131
- * "foo2": "__SECRET__:command_command1_foo2"
140
+ * "foo2": "__SECRET__:command_command1_foo2",
141
+ * "foo3": {
142
+ * "nested": ["a", "__SECRET__:command_command1_foo3_nested"]
143
+ * }
132
144
  * },
133
145
  * "command2": {
134
146
  * "foo1": "bar3"
@@ -255,34 +267,15 @@ export default class ConfigurationServiceProvider {
255
267
  }
256
268
  }
257
269
  if (result !== undefined && this.#defaultSecretService) {
258
- result = await this.#resolveSecrets(result);
259
- }
260
- return result;
261
- }
262
- async #resolveSecrets(value) {
263
- if (typeof value === "string" && value.startsWith(SECRET_SENTINEL_PREFIX)) {
264
- const bunSecretName = value.slice(SECRET_SENTINEL_PREFIX.length);
265
- const secretValue = await this.#defaultSecretService.getSecret(bunSecretName);
266
- if (secretValue === null) {
267
- throw new Error(`Secret not found in OS secret store for sentinel: '${value}'`);
268
- }
269
- return secretValue;
270
- }
271
- if (typeof value === "object" && value !== null) {
272
- if (Array.isArray(value)) {
273
- const resolved = [];
274
- for (const item of value) {
275
- resolved.push(await this.#resolveSecrets(item));
270
+ result = await resolveSecrets(result, async (bunSecretName) => {
271
+ const secretValue = await this.#defaultSecretService.getSecret(bunSecretName);
272
+ if (secretValue === null) {
273
+ throw new Error(`Secret not found in OS secret store for sentinel: '${SECRET_SENTINEL_PREFIX}${bunSecretName}'`);
276
274
  }
277
- return resolved;
278
- }
279
- const resolved = {};
280
- for (const [key, val] of Object.entries(value)) {
281
- resolved[key] = await this.#resolveSecrets(val);
282
- }
283
- return resolved;
275
+ return secretValue;
276
+ });
284
277
  }
285
- return value;
278
+ return result;
286
279
  }
287
280
  /**
288
281
  * Indicate that the contained {@link DefaultKeyValueService} should be set to have a scope of the provided
@@ -1,14 +1,14 @@
1
- import type { KeyValueService } from "@flowscripter/dynamic-cli-framework-api";
1
+ import type { ValueNode, KeyValueService, SettableValueNode } from "@flowscripter/dynamic-cli-framework-api";
2
2
  import type DefaultSecretService from "./DefaultSecretService.ts";
3
3
  export default class DefaultKeyValueService implements KeyValueService {
4
4
  #private;
5
5
  constructor(secretService?: DefaultSecretService);
6
- setKeyValueData(keyValueData: Map<string, string>): void;
6
+ setKeyValueData(keyValueData: Map<string, ValueNode>): void;
7
7
  clearKeyValueData(): void;
8
8
  isDirty(): boolean;
9
- getKey(key: string): Promise<string>;
10
- hasKey(key: string): Promise<boolean>;
11
- setKey(key: string, value: string, isSecret?: boolean): Promise<void>;
12
- deleteKey(key: string): Promise<void>;
9
+ get<T extends ValueNode = ValueNode>(key: string): Promise<T>;
10
+ has(key: string): Promise<boolean>;
11
+ set(key: string, value: SettableValueNode): Promise<void>;
12
+ delete(key: string): Promise<void>;
13
13
  }
14
14
  //# sourceMappingURL=DefaultKeyValueService.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"DefaultKeyValueService.d.ts","sourceRoot":"","sources":["../../../../src/service/configuration/DefaultKeyValueService.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yCAAyC,CAAC;AAE/E,OAAO,KAAK,oBAAoB,MAAM,2BAA2B,CAAC;AAElE,MAAM,CAAC,OAAO,OAAO,sBAAuB,YAAW,eAAe;;gBAKxD,aAAa,CAAC,EAAE,oBAAoB;IAIzC,eAAe,CAAC,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC;IAQjD,iBAAiB;IAKjB,OAAO,IAAI,OAAO;IAIZ,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAwB1C,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAO/B,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,UAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAgBnE,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAcnD"}
1
+ {"version":3,"file":"DefaultKeyValueService.d.ts","sourceRoot":"","sources":["../../../../src/service/configuration/DefaultKeyValueService.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,SAAS,EACT,eAAe,EACf,iBAAiB,EAClB,MAAM,yCAAyC,CAAC;AAEjD,OAAO,KAAK,oBAAoB,MAAM,2BAA2B,CAAC;AAGlE,MAAM,CAAC,OAAO,OAAO,sBAAuB,YAAW,eAAe;;gBAKxD,aAAa,CAAC,EAAE,oBAAoB;IAIzC,eAAe,CAAC,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC;IAQpD,iBAAiB;IAKjB,OAAO,IAAI,OAAO;IAIZ,GAAG,CAAC,CAAC,SAAS,SAAS,GAAG,SAAS,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC;IA2BnE,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAO5B,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC;IA4CzD,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAgChD"}
@@ -1,4 +1,5 @@
1
- import { SECRET_SENTINEL_PREFIX } from "@flowscripter/dynamic-cli-framework-api";
1
+ import { Secret, SECRET_SENTINEL_PREFIX } from "@flowscripter/dynamic-cli-framework-api";
2
+ import resolveSecrets from "./resolveSecrets.js";
2
3
  export default class DefaultKeyValueService {
3
4
  #keyValueData;
4
5
  #dirty = false;
@@ -20,7 +21,7 @@ export default class DefaultKeyValueService {
20
21
  isDirty() {
21
22
  return this.#dirty;
22
23
  }
23
- async getKey(key) {
24
+ async get(key) {
24
25
  if (this.#keyValueData === undefined) {
25
26
  throw new Error("Attempt to access undefined key-value data");
26
27
  }
@@ -28,53 +29,93 @@ export default class DefaultKeyValueService {
28
29
  if (value === undefined) {
29
30
  throw new Error("Attempt to access unknown key");
30
31
  }
31
- if (value.startsWith(SECRET_SENTINEL_PREFIX)) {
32
+ const resolveSecret = async (bunSecretName) => {
32
33
  if (!this.#secretService) {
33
34
  throw new Error("Secret sentinel found but no secret service is available");
34
35
  }
35
- const bunSecretName = value.slice(SECRET_SENTINEL_PREFIX.length);
36
36
  const secretValue = await this.#secretService.getSecret(bunSecretName);
37
37
  if (secretValue === null) {
38
38
  throw new Error(`Secret not found in OS secret store for key: '${key}'`);
39
39
  }
40
- return secretValue;
41
- }
42
- return value;
40
+ try {
41
+ return JSON.parse(secretValue);
42
+ }
43
+ catch {
44
+ return secretValue;
45
+ }
46
+ };
47
+ return resolveSecrets(value, resolveSecret);
43
48
  }
44
- hasKey(key) {
49
+ has(key) {
45
50
  if (this.#keyValueData === undefined) {
46
51
  return Promise.reject(new Error("Attempt to access undefined key-value data"));
47
52
  }
48
53
  return Promise.resolve(this.#keyValueData.has(key));
49
54
  }
50
- async setKey(key, value, isSecret = false) {
55
+ async set(key, value) {
51
56
  if (this.#keyValueData === undefined) {
52
57
  throw new Error("Attempt to access undefined key-value data");
53
58
  }
54
- if (isSecret) {
59
+ this.#keyValueData.set(key, await this.#storeSecrets(key, value, []));
60
+ this.#dirty = true;
61
+ }
62
+ async #storeSecrets(key, value, path) {
63
+ if (value instanceof Secret) {
55
64
  if (!this.#secretService) {
56
65
  throw new Error("Attempt to set a secret but no secret service is available");
57
66
  }
58
- const bunSecretName = await this.#secretService.setSecret(key, value);
59
- this.#keyValueData.set(key, SECRET_SENTINEL_PREFIX + bunSecretName);
67
+ const secretName = [key, ...path].join("_");
68
+ const bunSecretName = await this.#secretService.setSecret(secretName, JSON.stringify(value.value));
69
+ return SECRET_SENTINEL_PREFIX + bunSecretName;
60
70
  }
61
- else {
62
- this.#keyValueData.set(key, value);
71
+ if (Array.isArray(value)) {
72
+ const result = [];
73
+ for (let i = 0; i < value.length; i += 1) {
74
+ result.push(await this.#storeSecrets(key, value[i], [...path, String(i)]));
75
+ }
76
+ return result;
63
77
  }
64
- this.#dirty = true;
78
+ if (typeof value === "object" && value !== null) {
79
+ const result = {};
80
+ for (const [propertyName, propertyValue] of Object.entries(value)) {
81
+ result[propertyName] = await this.#storeSecrets(key, propertyValue, [
82
+ ...path,
83
+ propertyName,
84
+ ]);
85
+ }
86
+ return result;
87
+ }
88
+ return value;
65
89
  }
66
- async deleteKey(key) {
90
+ async delete(key) {
67
91
  if (this.#keyValueData === undefined) {
68
92
  throw new Error("Attempt to access undefined key-value data");
69
93
  }
70
94
  const value = this.#keyValueData.get(key);
71
- if (value !== undefined && value.startsWith(SECRET_SENTINEL_PREFIX)) {
95
+ if (value !== undefined) {
96
+ await this.#deleteSecrets(value);
97
+ }
98
+ this.#keyValueData.delete(key);
99
+ this.#dirty = true;
100
+ }
101
+ async #deleteSecrets(value) {
102
+ if (typeof value === "string" && value.startsWith(SECRET_SENTINEL_PREFIX)) {
72
103
  if (this.#secretService) {
73
104
  const bunSecretName = value.slice(SECRET_SENTINEL_PREFIX.length);
74
105
  await this.#secretService.deleteSecret(bunSecretName);
75
106
  }
107
+ return;
108
+ }
109
+ if (Array.isArray(value)) {
110
+ for (const item of value) {
111
+ await this.#deleteSecrets(item);
112
+ }
113
+ return;
114
+ }
115
+ if (typeof value === "object" && value !== null) {
116
+ for (const propertyValue of Object.values(value)) {
117
+ await this.#deleteSecrets(propertyValue);
118
+ }
76
119
  }
77
- this.#keyValueData.delete(key);
78
- this.#dirty = true;
79
120
  }
80
121
  }
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Recursively walk the provided value and resolve any string leaf - at any depth - which starts
3
+ * with {@link SECRET_SENTINEL_PREFIX}, via the provided resolver callback.
4
+ *
5
+ * @param value the value to walk (a JSON-serializable value or a `PopulatedValues` /
6
+ * `PopulatedValueType` tree).
7
+ * @param resolveSecret callback used to resolve a sentinel-prefixed string (with the prefix
8
+ * stripped) to its actual value. Should throw if the secret cannot be found.
9
+ */
10
+ export default function resolveSecrets<T>(value: T, resolveSecret: (sentinelValue: string) => Promise<unknown>): Promise<T>;
11
+ //# sourceMappingURL=resolveSecrets.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolveSecrets.d.ts","sourceRoot":"","sources":["../../../../src/service/configuration/resolveSecrets.ts"],"names":[],"mappings":"AAEA;;;;;;;;GAQG;AACH,wBAA8B,cAAc,CAAC,CAAC,EAC5C,KAAK,EAAE,CAAC,EACR,aAAa,EAAE,CAAC,aAAa,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,GACzD,OAAO,CAAC,CAAC,CAAC,CAoBZ"}
@@ -0,0 +1,31 @@
1
+ import { SECRET_SENTINEL_PREFIX } from "@flowscripter/dynamic-cli-framework-api";
2
+ /**
3
+ * Recursively walk the provided value and resolve any string leaf - at any depth - which starts
4
+ * with {@link SECRET_SENTINEL_PREFIX}, via the provided resolver callback.
5
+ *
6
+ * @param value the value to walk (a JSON-serializable value or a `PopulatedValues` /
7
+ * `PopulatedValueType` tree).
8
+ * @param resolveSecret callback used to resolve a sentinel-prefixed string (with the prefix
9
+ * stripped) to its actual value. Should throw if the secret cannot be found.
10
+ */
11
+ export default async function resolveSecrets(value, resolveSecret) {
12
+ if (typeof value === "string" && value.startsWith(SECRET_SENTINEL_PREFIX)) {
13
+ const bunSecretName = value.slice(SECRET_SENTINEL_PREFIX.length);
14
+ return (await resolveSecret(bunSecretName));
15
+ }
16
+ if (typeof value === "object" && value !== null) {
17
+ if (Array.isArray(value)) {
18
+ const resolved = [];
19
+ for (const item of value) {
20
+ resolved.push(await resolveSecrets(item, resolveSecret));
21
+ }
22
+ return resolved;
23
+ }
24
+ const resolved = {};
25
+ for (const [key, val] of Object.entries(value)) {
26
+ resolved[key] = await resolveSecrets(val, resolveSecret);
27
+ }
28
+ return resolved;
29
+ }
30
+ return value;
31
+ }
@@ -1,8 +1,11 @@
1
1
  import type { PluginService } from "@flowscripter/dynamic-cli-framework-api";
2
- import type { MarketplacePluginManager, SearchQuery, VersionedPluginDescriptor } from "@flowscripter/dynamic-plugin-framework";
2
+ import type { KeyValueService } from "@flowscripter/dynamic-cli-framework-api";
3
+ import type { MarketplacePluginManager, SearchQuery, VersionedPluginDescriptor, NpmjsPluginRepositoryConfig, NpmPluginRepositoryConfig } from "@flowscripter/dynamic-plugin-framework";
3
4
  export default class DefaultPluginService implements PluginService {
4
5
  #private;
5
- constructor(pluginManager: MarketplacePluginManager);
6
+ constructor(remoteConfig: NpmjsPluginRepositoryConfig, localConfig: NpmPluginRepositoryConfig);
7
+ get pluginManager(): MarketplacePluginManager;
8
+ applyKeyValueOverrides(keyValueService: KeyValueService): Promise<void>;
6
9
  search(query: Readonly<SearchQuery>): AsyncIterable<Readonly<VersionedPluginDescriptor>>;
7
10
  install(descriptor: Readonly<VersionedPluginDescriptor>): Promise<void>;
8
11
  uninstall(pluginId: string): Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"DefaultPluginService.d.ts","sourceRoot":"","sources":["../../../../src/service/plugin/DefaultPluginService.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yCAAyC,CAAC;AAC7E,OAAO,KAAK,EACV,wBAAwB,EACxB,WAAW,EACX,yBAAyB,EAC1B,MAAM,wCAAwC,CAAC;AAEhD,MAAM,CAAC,OAAO,OAAO,oBAAqB,YAAW,aAAa;;gBAGpD,aAAa,EAAE,wBAAwB;IAInD,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,WAAW,CAAC,GAAG,aAAa,CAAC,QAAQ,CAAC,yBAAyB,CAAC,CAAC;IAIlF,OAAO,CAAC,UAAU,EAAE,QAAQ,CAAC,yBAAyB,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAIvE,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIhD,aAAa,IAAI,aAAa,CAAC,QAAQ,CAAC,yBAAyB,CAAC,CAAC;IAInE,eAAe,IAAI,aAAa,CAAC;QAC/B,UAAU,EAAE,QAAQ,CAAC,yBAAyB,CAAC,CAAC;QAChD,gBAAgB,EAAE,MAAM,CAAC;KAC1B,CAAC;CAGH"}
1
+ {"version":3,"file":"DefaultPluginService.d.ts","sourceRoot":"","sources":["../../../../src/service/plugin/DefaultPluginService.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yCAAyC,CAAC;AAC7E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yCAAyC,CAAC;AAC/E,OAAO,KAAK,EACV,wBAAwB,EACxB,WAAW,EACX,yBAAyB,EACzB,2BAA2B,EAC3B,yBAAyB,EAC1B,MAAM,wCAAwC,CAAC;AAOhD,MAAM,CAAC,OAAO,OAAO,oBAAqB,YAAW,aAAa;;gBAKpD,YAAY,EAAE,2BAA2B,EAAE,WAAW,EAAE,yBAAyB;IAS7F,IAAI,aAAa,IAAI,wBAAwB,CAE5C;IAEK,sBAAsB,CAAC,eAAe,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC;IAmB7E,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,WAAW,CAAC,GAAG,aAAa,CAAC,QAAQ,CAAC,yBAAyB,CAAC,CAAC;IAIlF,OAAO,CAAC,UAAU,EAAE,QAAQ,CAAC,yBAAyB,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAIvE,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIhD,aAAa,IAAI,aAAa,CAAC,QAAQ,CAAC,yBAAyB,CAAC,CAAC;IAInE,eAAe,IAAI,aAAa,CAAC;QAC/B,UAAU,EAAE,QAAQ,CAAC,yBAAyB,CAAC,CAAC;QAChD,gBAAgB,EAAE,MAAM,CAAC;KAC1B,CAAC;CAGH"}