@seamapi/cli 0.0.1 → 0.5.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 (140) hide show
  1. package/README.md +54 -3
  2. package/bin/cli.d.ts +2 -0
  3. package/bin/cli.js +233 -0
  4. package/bin/cli.js.map +1 -0
  5. package/index.d.ts +2 -0
  6. package/index.js +5 -0
  7. package/index.js.map +1 -0
  8. package/lib/blueprint.d.ts +6 -0
  9. package/lib/blueprint.js +37 -0
  10. package/lib/blueprint.js.map +1 -0
  11. package/lib/get-api-blueprint.d.ts +3 -0
  12. package/lib/get-api-blueprint.js +19 -0
  13. package/lib/get-api-blueprint.js.map +1 -0
  14. package/lib/get-command-blueprint-def.d.ts +2 -0
  15. package/lib/get-command-blueprint-def.js +11 -0
  16. package/lib/get-command-blueprint-def.js.map +1 -0
  17. package/lib/get-config-store.d.ts +2 -0
  18. package/lib/get-config-store.js +5 -0
  19. package/lib/get-config-store.js.map +1 -0
  20. package/lib/get-current-workspace-id.d.ts +1 -0
  21. package/lib/get-current-workspace-id.js +10 -0
  22. package/lib/get-current-workspace-id.js.map +1 -0
  23. package/lib/get-seam.d.ts +3 -0
  24. package/lib/get-seam.js +26 -0
  25. package/lib/get-seam.js.map +1 -0
  26. package/lib/get-server.d.ts +1 -0
  27. package/lib/get-server.js +7 -0
  28. package/lib/get-server.js.map +1 -0
  29. package/lib/interact-for-access-code.d.ts +3 -0
  30. package/lib/interact-for-access-code.js +19 -0
  31. package/lib/interact-for-access-code.js.map +1 -0
  32. package/lib/interact-for-acs-entrance.d.ts +1 -0
  33. package/lib/interact-for-acs-entrance.js +15 -0
  34. package/lib/interact-for-acs-entrance.js.map +1 -0
  35. package/lib/interact-for-acs-system.d.ts +1 -0
  36. package/lib/interact-for-acs-system.js +16 -0
  37. package/lib/interact-for-acs-system.js.map +1 -0
  38. package/lib/interact-for-acs-user.d.ts +1 -0
  39. package/lib/interact-for-acs-user.js +17 -0
  40. package/lib/interact-for-acs-user.js.map +1 -0
  41. package/lib/interact-for-action-attempt-poll.d.ts +2 -0
  42. package/lib/interact-for-action-attempt-poll.js +22 -0
  43. package/lib/interact-for-action-attempt-poll.js.map +1 -0
  44. package/lib/interact-for-array.d.ts +1 -0
  45. package/lib/interact-for-array.js +53 -0
  46. package/lib/interact-for-array.js.map +1 -0
  47. package/lib/interact-for-blueprint-object.d.ts +9 -0
  48. package/lib/interact-for-blueprint-object.js +235 -0
  49. package/lib/interact-for-blueprint-object.js.map +1 -0
  50. package/lib/interact-for-command-params.d.ts +5 -0
  51. package/lib/interact-for-command-params.js +11 -0
  52. package/lib/interact-for-command-params.js.map +1 -0
  53. package/lib/interact-for-command-selection.d.ts +2 -0
  54. package/lib/interact-for-command-selection.js +76 -0
  55. package/lib/interact-for-command-selection.js.map +1 -0
  56. package/lib/interact-for-connected-account.d.ts +1 -0
  57. package/lib/interact-for-connected-account.js +20 -0
  58. package/lib/interact-for-connected-account.js.map +1 -0
  59. package/lib/interact-for-custom-metadata.d.ts +6 -0
  60. package/lib/interact-for-custom-metadata.js +71 -0
  61. package/lib/interact-for-custom-metadata.js.map +1 -0
  62. package/lib/interact-for-device.d.ts +1 -0
  63. package/lib/interact-for-device.js +15 -0
  64. package/lib/interact-for-device.js.map +1 -0
  65. package/lib/interact-for-login.d.ts +1 -0
  66. package/lib/interact-for-login.js +39 -0
  67. package/lib/interact-for-login.js.map +1 -0
  68. package/lib/interact-for-resource.d.ts +11 -0
  69. package/lib/interact-for-resource.js +13 -0
  70. package/lib/interact-for-resource.js.map +1 -0
  71. package/lib/interact-for-server-selection.d.ts +1 -0
  72. package/lib/interact-for-server-selection.js +41 -0
  73. package/lib/interact-for-server-selection.js.map +1 -0
  74. package/lib/interact-for-timestamp.d.ts +1 -0
  75. package/lib/interact-for-timestamp.js +10 -0
  76. package/lib/interact-for-timestamp.js.map +1 -0
  77. package/lib/interact-for-use-remote-api-defs.d.ts +1 -0
  78. package/lib/interact-for-use-remote-api-defs.js +25 -0
  79. package/lib/interact-for-use-remote-api-defs.js.map +1 -0
  80. package/lib/interact-for-user-identity.d.ts +1 -0
  81. package/lib/interact-for-user-identity.js +15 -0
  82. package/lib/interact-for-user-identity.js.map +1 -0
  83. package/lib/interact-for-workspace-id.d.ts +1 -0
  84. package/lib/interact-for-workspace-id.js +31 -0
  85. package/lib/interact-for-workspace-id.js.map +1 -0
  86. package/lib/types.d.ts +5 -0
  87. package/lib/types.js +2 -0
  88. package/lib/types.js.map +1 -0
  89. package/lib/util/ellipsis.d.ts +1 -0
  90. package/lib/util/ellipsis.js +6 -0
  91. package/lib/util/ellipsis.js.map +1 -0
  92. package/lib/util/request-seam-api.d.ts +4 -0
  93. package/lib/util/request-seam-api.js +28 -0
  94. package/lib/util/request-seam-api.js.map +1 -0
  95. package/lib/util/with-loading.d.ts +1 -0
  96. package/lib/util/with-loading.js +14 -0
  97. package/lib/util/with-loading.js.map +1 -0
  98. package/lib/validate-token.d.ts +1 -0
  99. package/lib/validate-token.js +19 -0
  100. package/lib/validate-token.js.map +1 -0
  101. package/lib/version.d.ts +2 -0
  102. package/lib/version.js +3 -0
  103. package/lib/version.js.map +1 -0
  104. package/package.json +44 -18
  105. package/src/bin/cli.ts +265 -0
  106. package/src/index.ts +4 -1
  107. package/src/lib/blueprint.ts +53 -0
  108. package/src/lib/get-api-blueprint.ts +27 -0
  109. package/src/lib/get-command-blueprint-def.ts +15 -0
  110. package/src/lib/get-config-store.ts +5 -0
  111. package/src/lib/get-current-workspace-id.ts +11 -0
  112. package/src/lib/get-seam.ts +43 -0
  113. package/src/lib/get-server.ts +9 -0
  114. package/src/lib/interact-for-access-code.ts +25 -0
  115. package/src/lib/interact-for-acs-entrance.ts +16 -0
  116. package/src/lib/interact-for-acs-system.ts +17 -0
  117. package/src/lib/interact-for-acs-user.ts +21 -0
  118. package/src/lib/interact-for-action-attempt-poll.ts +35 -0
  119. package/src/lib/interact-for-array.ts +61 -0
  120. package/src/lib/interact-for-blueprint-object.ts +274 -0
  121. package/src/lib/interact-for-command-params.ts +22 -0
  122. package/src/lib/interact-for-command-selection.ts +107 -0
  123. package/src/lib/interact-for-connected-account.ts +24 -0
  124. package/src/lib/interact-for-custom-metadata.ts +89 -0
  125. package/src/lib/interact-for-device.ts +15 -0
  126. package/src/lib/interact-for-login.ts +53 -0
  127. package/src/lib/interact-for-resource.ts +34 -0
  128. package/src/lib/interact-for-server-selection.ts +46 -0
  129. package/src/lib/interact-for-timestamp.ts +10 -0
  130. package/src/lib/interact-for-use-remote-api-defs.ts +27 -0
  131. package/src/lib/interact-for-user-identity.ts +16 -0
  132. package/src/lib/interact-for-workspace-id.ts +37 -0
  133. package/src/lib/types.ts +6 -0
  134. package/src/lib/util/ellipsis.ts +4 -0
  135. package/src/lib/util/request-seam-api.ts +43 -0
  136. package/src/lib/util/with-loading.ts +16 -0
  137. package/src/lib/validate-token.ts +28 -0
  138. package/src/lib/version.ts +3 -0
  139. package/src/lib/index.ts +0 -1
  140. package/src/lib/todo.ts +0 -1
@@ -0,0 +1,3 @@
1
+ import type { Blueprint } from '@seamapi/blueprint';
2
+ export type ApiBlueprint = Blueprint;
3
+ export declare const getApiBlueprint: (useRemoteDefinitions: boolean) => Promise<ApiBlueprint>;
@@ -0,0 +1,19 @@
1
+ import getBlueprint from './blueprint.js';
2
+ import { getServer } from './get-server.js';
3
+ export const getApiBlueprint = async (useRemoteDefinitions) => {
4
+ // Remote definitions describe whatever the server is currently running, so
5
+ // build them directly from the server's OpenAPI document. This runtime path
6
+ // does not load @seamapi/types.
7
+ if (useRemoteDefinitions)
8
+ return await createRemoteBlueprint();
9
+ return await getBlueprint();
10
+ };
11
+ const createRemoteBlueprint = async () => {
12
+ const [{ createBlueprint }, { getOpenapiSchema }] = await Promise.all([
13
+ import('@seamapi/blueprint'),
14
+ import('@seamapi/http/connect'),
15
+ ]);
16
+ const openapi = await getOpenapiSchema(getServer());
17
+ return await createBlueprint({ openapi }, { omitUndocumented: true });
18
+ };
19
+ //# sourceMappingURL=get-api-blueprint.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-api-blueprint.js","sourceRoot":"","sources":["../src/lib/get-api-blueprint.ts"],"names":[],"mappings":"AAEA,OAAO,YAAY,MAAM,gBAAgB,CAAA;AACzC,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAI3C,MAAM,CAAC,MAAM,eAAe,GAAG,KAAK,EAClC,oBAA6B,EACN,EAAE;IACzB,2EAA2E;IAC3E,4EAA4E;IAC5E,gCAAgC;IAChC,IAAI,oBAAoB;QAAE,OAAO,MAAM,qBAAqB,EAAE,CAAA;IAE9D,OAAO,MAAM,YAAY,EAAE,CAAA;AAC7B,CAAC,CAAA;AAED,MAAM,qBAAqB,GAAG,KAAK,IAAwB,EAAE;IAC3D,MAAM,CAAC,EAAE,eAAe,EAAE,EAAE,EAAE,gBAAgB,EAAE,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QACpE,MAAM,CAAC,oBAAoB,CAAC;QAC5B,MAAM,CAAC,uBAAuB,CAAC;KAChC,CAAC,CAAA;IACF,MAAM,OAAO,GAAG,MAAM,gBAAgB,CAAC,SAAS,EAAE,CAAC,CAAA;IAEnD,OAAO,MAAM,eAAe,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,gBAAgB,EAAE,IAAI,EAAE,CAAC,CAAA;AACvE,CAAC,CAAA"}
@@ -0,0 +1,2 @@
1
+ import type { ContextHelpers } from './types.js';
2
+ export declare const getCommandBlueprintDef: (cmd: string[], helpers: ContextHelpers) => import("@seamapi/blueprint").Endpoint;
@@ -0,0 +1,11 @@
1
+ export const getCommandBlueprintDef = (cmd, helpers) => {
2
+ const path = `/${cmd.join('/').replace(/-/g, '_')}`;
3
+ const def = helpers.blueprint.routes
4
+ .flatMap((route) => route.endpoints)
5
+ .find((endpoint) => endpoint.path === path);
6
+ if (!def) {
7
+ throw new Error(`No definition for path ${path}`);
8
+ }
9
+ return def;
10
+ };
11
+ //# sourceMappingURL=get-command-blueprint-def.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-command-blueprint-def.js","sourceRoot":"","sources":["../src/lib/get-command-blueprint-def.ts"],"names":[],"mappings":"AACA,MAAM,CAAC,MAAM,sBAAsB,GAAG,CACpC,GAAa,EACb,OAAuB,EACvB,EAAE;IACF,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,CAAA;IACnD,MAAM,GAAG,GAAG,OAAO,CAAC,SAAS,CAAC,MAAM;SACjC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC;SACnC,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,KAAK,IAAI,CAAC,CAAA;IAC7C,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,MAAM,IAAI,KAAK,CAAC,0BAA0B,IAAI,EAAE,CAAC,CAAA;IACnD,CAAC;IAED,OAAO,GAAG,CAAA;AACZ,CAAC,CAAA"}
@@ -0,0 +1,2 @@
1
+ import Configstore from 'configstore';
2
+ export declare const getConfigStore: () => Configstore;
@@ -0,0 +1,5 @@
1
+ import Configstore from 'configstore';
2
+ export const getConfigStore = () => {
3
+ return new Configstore('seam-cli', {});
4
+ };
5
+ //# sourceMappingURL=get-config-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-config-store.js","sourceRoot":"","sources":["../src/lib/get-config-store.ts"],"names":[],"mappings":"AAAA,OAAO,WAAW,MAAM,aAAa,CAAA;AAErC,MAAM,CAAC,MAAM,cAAc,GAAG,GAAG,EAAE;IACjC,OAAO,IAAI,WAAW,CAAC,UAAU,EAAE,EAAE,CAAC,CAAA;AACxC,CAAC,CAAA"}
@@ -0,0 +1 @@
1
+ export declare const getCurrentWorkspaceId: () => Promise<string>;
@@ -0,0 +1,10 @@
1
+ import { getConfigStore } from './get-config-store.js';
2
+ import { interactForWorkspaceId } from './interact-for-workspace-id.js';
3
+ export const getCurrentWorkspaceId = async () => {
4
+ const configStore = getConfigStore();
5
+ const currentWorkspaceId = configStore.get('current_workspace_id');
6
+ if (typeof currentWorkspaceId === 'string')
7
+ return currentWorkspaceId;
8
+ return await interactForWorkspaceId();
9
+ };
10
+ //# sourceMappingURL=get-current-workspace-id.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-current-workspace-id.js","sourceRoot":"","sources":["../src/lib/get-current-workspace-id.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAA;AACtD,OAAO,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAA;AAEvE,MAAM,CAAC,MAAM,qBAAqB,GAAG,KAAK,IAAqB,EAAE;IAC/D,MAAM,WAAW,GAAG,cAAc,EAAE,CAAA;IAEpC,MAAM,kBAAkB,GAAG,WAAW,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAA;IAClE,IAAI,OAAO,kBAAkB,KAAK,QAAQ;QAAE,OAAO,kBAAkB,CAAA;IAErE,OAAO,MAAM,sBAAsB,EAAE,CAAA;AACvC,CAAC,CAAA"}
@@ -0,0 +1,3 @@
1
+ import { SeamHttp, SeamHttpWithoutWorkspace } from '@seamapi/http/connect';
2
+ export declare const getSeam: () => Promise<SeamHttp>;
3
+ export declare const getSeamMultiWorkspace: () => Promise<SeamHttpWithoutWorkspace | SeamHttp>;
@@ -0,0 +1,26 @@
1
+ import { isConsoleSessionToken, isPersonalAccessToken, SeamHttp, SeamHttpWithoutWorkspace, } from '@seamapi/http/connect';
2
+ import { getConfigStore } from './get-config-store.js';
3
+ import { getServer } from './get-server.js';
4
+ export const getSeam = async () => {
5
+ const config = getConfigStore();
6
+ const token = config.get(`${getServer()}.pat`);
7
+ const workspaceId = config.get('current_workspace_id');
8
+ const options = { endpoint: getServer() };
9
+ if (isPersonalAccessToken(token)) {
10
+ return SeamHttp.fromPersonalAccessToken(token, workspaceId, options);
11
+ }
12
+ if (isConsoleSessionToken(token)) {
13
+ return SeamHttp.fromConsoleSessionToken(token, workspaceId, options);
14
+ }
15
+ return SeamHttp.fromApiKey(token, options);
16
+ };
17
+ export const getSeamMultiWorkspace = async () => {
18
+ const config = getConfigStore();
19
+ const token = config.get(`${getServer()}.pat`);
20
+ const options = { endpoint: getServer() };
21
+ if (isPersonalAccessToken(token)) {
22
+ return SeamHttpWithoutWorkspace.fromPersonalAccessToken(token, options);
23
+ }
24
+ return getSeam();
25
+ };
26
+ //# sourceMappingURL=get-seam.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-seam.js","sourceRoot":"","sources":["../src/lib/get-seam.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,qBAAqB,EACrB,qBAAqB,EACrB,QAAQ,EACR,wBAAwB,GACzB,MAAM,uBAAuB,CAAA;AAE9B,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAA;AACtD,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAE3C,MAAM,CAAC,MAAM,OAAO,GAAG,KAAK,IAAuB,EAAE;IACnD,MAAM,MAAM,GAAG,cAAc,EAAE,CAAA;IAE/B,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,SAAS,EAAE,MAAM,CAAW,CAAA;IAExD,MAAM,WAAW,GAAG,MAAM,CAAC,GAAG,CAAC,sBAAsB,CAAW,CAAA;IAEhE,MAAM,OAAO,GAAG,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,CAAA;IAEzC,IAAI,qBAAqB,CAAC,KAAK,CAAC,EAAE,CAAC;QACjC,OAAO,QAAQ,CAAC,uBAAuB,CAAC,KAAK,EAAE,WAAW,EAAE,OAAO,CAAC,CAAA;IACtE,CAAC;IAED,IAAI,qBAAqB,CAAC,KAAK,CAAC,EAAE,CAAC;QACjC,OAAO,QAAQ,CAAC,uBAAuB,CAAC,KAAK,EAAE,WAAW,EAAE,OAAO,CAAC,CAAA;IACtE,CAAC;IAED,OAAO,QAAQ,CAAC,UAAU,CAAC,KAAK,EAAE,OAAO,CAAC,CAAA;AAC5C,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,qBAAqB,GAAG,KAAK,IAExC,EAAE;IACF,MAAM,MAAM,GAAG,cAAc,EAAE,CAAA;IAC/B,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,SAAS,EAAE,MAAM,CAAW,CAAA;IACxD,MAAM,OAAO,GAAG,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,CAAA;IAEzC,IAAI,qBAAqB,CAAC,KAAK,CAAC,EAAE,CAAC;QACjC,OAAO,wBAAwB,CAAC,uBAAuB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAA;IACzE,CAAC;IAED,OAAO,OAAO,EAAE,CAAA;AAClB,CAAC,CAAA"}
@@ -0,0 +1 @@
1
+ export declare const getServer: () => string;
@@ -0,0 +1,7 @@
1
+ import { getConfigStore } from './get-config-store.js';
2
+ export const getServer = () => {
3
+ const config = getConfigStore();
4
+ const server = config.get('server');
5
+ return typeof server === 'string' ? server : 'https://connect.getseam.com';
6
+ };
7
+ //# sourceMappingURL=get-server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-server.js","sourceRoot":"","sources":["../src/lib/get-server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAA;AAEtD,MAAM,CAAC,MAAM,SAAS,GAAG,GAAW,EAAE;IACpC,MAAM,MAAM,GAAG,cAAc,EAAE,CAAA;IAE/B,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;IAEnC,OAAO,OAAO,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,6BAA6B,CAAA;AAC5E,CAAC,CAAA"}
@@ -0,0 +1,3 @@
1
+ export declare const interactForAccessCode: ({ device_id, }: {
2
+ device_id?: string;
3
+ }) => Promise<string>;
@@ -0,0 +1,19 @@
1
+ import { getSeam } from './get-seam.js';
2
+ import { interactForDevice } from './interact-for-device.js';
3
+ import { interactForResource } from './interact-for-resource.js';
4
+ export const interactForAccessCode = async ({ device_id, }) => {
5
+ const seam = await getSeam();
6
+ if (!device_id) {
7
+ device_id = await interactForDevice();
8
+ }
9
+ return interactForResource({
10
+ resourceName: 'access_code',
11
+ fetchResources: () => seam.accessCodes.list({ device_id }),
12
+ toChoice: (accessCode) => ({
13
+ title: accessCode.name ?? '<No Name>',
14
+ value: accessCode.access_code_id,
15
+ description: `${accessCode.type} ${accessCode.access_code_id}`,
16
+ }),
17
+ });
18
+ };
19
+ //# sourceMappingURL=interact-for-access-code.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interact-for-access-code.js","sourceRoot":"","sources":["../src/lib/interact-for-access-code.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA;AACvC,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAA;AAC5D,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAA;AAEhE,MAAM,CAAC,MAAM,qBAAqB,GAAG,KAAK,EAAE,EAC1C,SAAS,GAGV,EAAE,EAAE;IACH,MAAM,IAAI,GAAG,MAAM,OAAO,EAAE,CAAA;IAE5B,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,SAAS,GAAG,MAAM,iBAAiB,EAAE,CAAA;IACvC,CAAC;IAED,OAAO,mBAAmB,CAAC;QACzB,YAAY,EAAE,aAAa;QAC3B,cAAc,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,CAAC;QAC1D,QAAQ,EAAE,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;YACzB,KAAK,EAAE,UAAU,CAAC,IAAI,IAAI,WAAW;YACrC,KAAK,EAAE,UAAU,CAAC,cAAc;YAChC,WAAW,EAAE,GAAG,UAAU,CAAC,IAAI,IAAI,UAAU,CAAC,cAAc,EAAE;SAC/D,CAAC;KACH,CAAC,CAAA;AACJ,CAAC,CAAA"}
@@ -0,0 +1 @@
1
+ export declare const interactForAcsEntrance: () => Promise<string>;
@@ -0,0 +1,15 @@
1
+ import { getSeam } from './get-seam.js';
2
+ import { interactForResource } from './interact-for-resource.js';
3
+ export const interactForAcsEntrance = async () => {
4
+ const seam = await getSeam();
5
+ return interactForResource({
6
+ resourceName: 'ACS entrance',
7
+ fetchResources: () => seam.acs.entrances.list(),
8
+ toChoice: (entrance) => ({
9
+ title: entrance.display_name ?? '<No Name>',
10
+ value: entrance.acs_entrance_id,
11
+ description: entrance.acs_entrance_id,
12
+ }),
13
+ });
14
+ };
15
+ //# sourceMappingURL=interact-for-acs-entrance.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interact-for-acs-entrance.js","sourceRoot":"","sources":["../src/lib/interact-for-acs-entrance.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA;AACvC,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAA;AAEhE,MAAM,CAAC,MAAM,sBAAsB,GAAG,KAAK,IAAI,EAAE;IAC/C,MAAM,IAAI,GAAG,MAAM,OAAO,EAAE,CAAA;IAE5B,OAAO,mBAAmB,CAAC;QACzB,YAAY,EAAE,cAAc;QAC5B,cAAc,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,EAAE;QAC/C,QAAQ,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;YACvB,KAAK,EAAE,QAAQ,CAAC,YAAY,IAAI,WAAW;YAC3C,KAAK,EAAE,QAAQ,CAAC,eAAe;YAC/B,WAAW,EAAE,QAAQ,CAAC,eAAe;SACtC,CAAC;KACH,CAAC,CAAA;AACJ,CAAC,CAAA"}
@@ -0,0 +1 @@
1
+ export declare const interactForAcsSystem: (message?: string) => Promise<string>;
@@ -0,0 +1,16 @@
1
+ import { getSeam } from './get-seam.js';
2
+ import { interactForResource } from './interact-for-resource.js';
3
+ export const interactForAcsSystem = async (message) => {
4
+ const seam = await getSeam();
5
+ return interactForResource({
6
+ resourceName: 'ACS system',
7
+ fetchResources: () => seam.acs.systems.list(),
8
+ message,
9
+ toChoice: (system) => ({
10
+ title: `${system.name} ${system.external_type_display_name}`,
11
+ value: system.acs_system_id,
12
+ description: system.acs_system_id,
13
+ }),
14
+ });
15
+ };
16
+ //# sourceMappingURL=interact-for-acs-system.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interact-for-acs-system.js","sourceRoot":"","sources":["../src/lib/interact-for-acs-system.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA;AACvC,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAA;AAEhE,MAAM,CAAC,MAAM,oBAAoB,GAAG,KAAK,EAAE,OAAgB,EAAE,EAAE;IAC7D,MAAM,IAAI,GAAG,MAAM,OAAO,EAAE,CAAA;IAE5B,OAAO,mBAAmB,CAAC;QACzB,YAAY,EAAE,YAAY;QAC1B,cAAc,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE;QAC7C,OAAO;QACP,QAAQ,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;YACrB,KAAK,EAAE,GAAG,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,0BAA0B,EAAE;YAC5D,KAAK,EAAE,MAAM,CAAC,aAAa;YAC3B,WAAW,EAAE,MAAM,CAAC,aAAa;SAClC,CAAC;KACH,CAAC,CAAA;AACJ,CAAC,CAAA"}
@@ -0,0 +1 @@
1
+ export declare const interactForAcsUser: () => Promise<string>;
@@ -0,0 +1,17 @@
1
+ import { getSeam } from './get-seam.js';
2
+ import { interactForAcsSystem } from './interact-for-acs-system.js';
3
+ import { interactForResource } from './interact-for-resource.js';
4
+ export const interactForAcsUser = async () => {
5
+ const seam = await getSeam();
6
+ const acs_system_id = await interactForAcsSystem('What acs_system does the acs_user belong to?');
7
+ return interactForResource({
8
+ resourceName: 'ACS user',
9
+ fetchResources: () => seam.acs.users.list({ acs_system_id }),
10
+ toChoice: (user) => ({
11
+ title: `${user.display_name} ${user.email_address}`,
12
+ value: user.acs_user_id,
13
+ description: user.acs_user_id,
14
+ }),
15
+ });
16
+ };
17
+ //# sourceMappingURL=interact-for-acs-user.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interact-for-acs-user.js","sourceRoot":"","sources":["../src/lib/interact-for-acs-user.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA;AACvC,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAA;AACnE,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAA;AAEhE,MAAM,CAAC,MAAM,kBAAkB,GAAG,KAAK,IAAI,EAAE;IAC3C,MAAM,IAAI,GAAG,MAAM,OAAO,EAAE,CAAA;IAE5B,MAAM,aAAa,GAAG,MAAM,oBAAoB,CAC9C,8CAA8C,CAC/C,CAAA;IAED,OAAO,mBAAmB,CAAC;QACzB,YAAY,EAAE,UAAU;QACxB,cAAc,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,aAAa,EAAE,CAAC;QAC5D,QAAQ,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YACnB,KAAK,EAAE,GAAG,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,aAAa,EAAE;YACnD,KAAK,EAAE,IAAI,CAAC,WAAW;YACvB,WAAW,EAAE,IAAI,CAAC,WAAW;SAC9B,CAAC;KACH,CAAC,CAAA;AACJ,CAAC,CAAA"}
@@ -0,0 +1,2 @@
1
+ import type { ActionAttemptsGetResponse } from '@seamapi/http/connect';
2
+ export declare const interactForActionAttemptPoll: (action_attempt: ActionAttemptsGetResponse["action_attempt"]) => Promise<void>;
@@ -0,0 +1,22 @@
1
+ import prompts from 'prompts';
2
+ import { getSeam } from './get-seam.js';
3
+ import { withLoading } from './util/with-loading.js';
4
+ export const interactForActionAttemptPoll = async (action_attempt) => {
5
+ if (action_attempt.status === 'pending') {
6
+ const { poll_for_action_attempt } = await prompts({
7
+ name: 'poll_for_action_attempt',
8
+ message: "Would you like to poll the action attempt until it's ready?",
9
+ type: 'toggle',
10
+ initial: true,
11
+ active: 'yes',
12
+ inactive: 'no',
13
+ });
14
+ if (poll_for_action_attempt) {
15
+ const seam = await getSeam();
16
+ const { action_attempt_id } = action_attempt;
17
+ const updated_action_attempt = await withLoading('Polling action attempt...', () => seam.actionAttempts.get({ action_attempt_id }, { waitForActionAttempt: { pollingInterval: 240, timeout: 10_000 } }));
18
+ console.dir(updated_action_attempt, { depth: null });
19
+ }
20
+ }
21
+ };
22
+ //# sourceMappingURL=interact-for-action-attempt-poll.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interact-for-action-attempt-poll.js","sourceRoot":"","sources":["../src/lib/interact-for-action-attempt-poll.ts"],"names":[],"mappings":"AACA,OAAO,OAAO,MAAM,SAAS,CAAA;AAE7B,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA;AACvC,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAA;AAEpD,MAAM,CAAC,MAAM,4BAA4B,GAAG,KAAK,EAC/C,cAA2D,EAC3D,EAAE;IACF,IAAI,cAAc,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;QACxC,MAAM,EAAE,uBAAuB,EAAE,GAAG,MAAM,OAAO,CAAC;YAChD,IAAI,EAAE,yBAAyB;YAC/B,OAAO,EAAE,6DAA6D;YACtE,IAAI,EAAE,QAAQ;YACd,OAAO,EAAE,IAAI;YACb,MAAM,EAAE,KAAK;YACb,QAAQ,EAAE,IAAI;SACf,CAAC,CAAA;QAEF,IAAI,uBAAuB,EAAE,CAAC;YAC5B,MAAM,IAAI,GAAG,MAAM,OAAO,EAAE,CAAA;YAC5B,MAAM,EAAE,iBAAiB,EAAE,GAAG,cAAc,CAAA;YAE5C,MAAM,sBAAsB,GAAG,MAAM,WAAW,CAC9C,2BAA2B,EAC3B,GAAG,EAAE,CACH,IAAI,CAAC,cAAc,CAAC,GAAG,CACrB,EAAE,iBAAiB,EAAE,EACrB,EAAE,oBAAoB,EAAE,EAAE,eAAe,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,CACpE,CACJ,CAAA;YACD,OAAO,CAAC,GAAG,CAAC,sBAAsB,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAA;QACtD,CAAC;IACH,CAAC;AACH,CAAC,CAAA"}
@@ -0,0 +1 @@
1
+ export declare const interactForArray: (array: string[], message: string) => Promise<string[]>;
@@ -0,0 +1,53 @@
1
+ import prompts from 'prompts';
2
+ export const interactForArray = async (array, message) => {
3
+ const updatedArray = [...array];
4
+ const displayList = () => {
5
+ console.log(`${message} Current list:`);
6
+ if (updatedArray.length > 0) {
7
+ updatedArray.forEach((item, index) => {
8
+ console.log(`${index + 1}: ${item}`);
9
+ });
10
+ }
11
+ else {
12
+ console.log('The list is currently empty.');
13
+ }
14
+ };
15
+ let action;
16
+ do {
17
+ displayList();
18
+ const response = await prompts({
19
+ type: 'select',
20
+ name: 'action',
21
+ message: 'Choose an action:',
22
+ choices: [
23
+ { title: 'Add an item', value: 'add' },
24
+ { title: 'Remove an item', value: 'remove' },
25
+ { title: 'Finish editing', value: 'done' },
26
+ ],
27
+ });
28
+ action = response.action;
29
+ if (action === 'add') {
30
+ const { newItem } = await prompts({
31
+ type: 'text',
32
+ name: 'newItem',
33
+ message: 'Enter the new item:',
34
+ });
35
+ if (newItem) {
36
+ updatedArray.push(newItem);
37
+ }
38
+ }
39
+ else if (action === 'remove') {
40
+ const { index } = await prompts({
41
+ type: 'number',
42
+ name: 'index',
43
+ message: 'Enter the index of the item to remove:',
44
+ validate: (value) => value > 0 && value <= updatedArray.length ? true : 'Invalid index',
45
+ });
46
+ if (index) {
47
+ updatedArray.splice(index - 1, 1);
48
+ }
49
+ }
50
+ } while (action !== 'done');
51
+ return updatedArray;
52
+ };
53
+ //# sourceMappingURL=interact-for-array.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interact-for-array.js","sourceRoot":"","sources":["../src/lib/interact-for-array.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,SAAS,CAAA;AAE7B,MAAM,CAAC,MAAM,gBAAgB,GAAG,KAAK,EACnC,KAAe,EACf,OAAe,EACI,EAAE;IACrB,MAAM,YAAY,GAAG,CAAC,GAAG,KAAK,CAAC,CAAA;IAE/B,MAAM,WAAW,GAAG,GAAG,EAAE;QACvB,OAAO,CAAC,GAAG,CAAC,GAAG,OAAO,gBAAgB,CAAC,CAAA;QACvC,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC5B,YAAY,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;gBACnC,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC,CAAA;YACtC,CAAC,CAAC,CAAA;QACJ,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAA;QAC7C,CAAC;IACH,CAAC,CAAA;IAED,IAAI,MAAc,CAAA;IAClB,GAAG,CAAC;QACF,WAAW,EAAE,CAAA;QAEb,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC;YAC7B,IAAI,EAAE,QAAQ;YACd,IAAI,EAAE,QAAQ;YACd,OAAO,EAAE,mBAAmB;YAC5B,OAAO,EAAE;gBACP,EAAE,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,KAAK,EAAE;gBACtC,EAAE,KAAK,EAAE,gBAAgB,EAAE,KAAK,EAAE,QAAQ,EAAE;gBAC5C,EAAE,KAAK,EAAE,gBAAgB,EAAE,KAAK,EAAE,MAAM,EAAE;aAC3C;SACF,CAAC,CAAA;QAEF,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAA;QAExB,IAAI,MAAM,KAAK,KAAK,EAAE,CAAC;YACrB,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,OAAO,CAAC;gBAChC,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,SAAS;gBACf,OAAO,EAAE,qBAAqB;aAC/B,CAAC,CAAA;YACF,IAAI,OAAO,EAAE,CAAC;gBACZ,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;YAC5B,CAAC;QACH,CAAC;aAAM,IAAI,MAAM,KAAK,QAAQ,EAAE,CAAC;YAC/B,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,OAAO,CAAC;gBAC9B,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,OAAO;gBACb,OAAO,EAAE,wCAAwC;gBACjD,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE,CAClB,KAAK,GAAG,CAAC,IAAI,KAAK,IAAI,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,eAAe;aACrE,CAAC,CAAA;YACF,IAAI,KAAK,EAAE,CAAC;gBACV,YAAY,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC,CAAC,CAAA;YACnC,CAAC;QACH,CAAC;IACH,CAAC,QAAQ,MAAM,KAAK,MAAM,EAAC;IAE3B,OAAO,YAAY,CAAA;AACrB,CAAC,CAAA"}
@@ -0,0 +1,9 @@
1
+ import type { Parameter } from '@seamapi/blueprint';
2
+ import type { ContextHelpers } from './types.js';
3
+ export declare const interactForBlueprintObject: (args: {
4
+ command: string[];
5
+ parameters: Parameter[];
6
+ params: Record<string, any>;
7
+ isSubProperty?: boolean;
8
+ subPropertyPath?: string;
9
+ }, ctx: ContextHelpers) => Promise<any>;
@@ -0,0 +1,235 @@
1
+ import prompts from 'prompts';
2
+ import { interactForAccessCode } from './interact-for-access-code.js';
3
+ import { interactForAcsEntrance } from './interact-for-acs-entrance.js';
4
+ import { interactForAcsSystem } from './interact-for-acs-system.js';
5
+ import { interactForAcsUser } from './interact-for-acs-user.js';
6
+ import { interactForArray } from './interact-for-array.js';
7
+ import { interactForConnectedAccount } from './interact-for-connected-account.js';
8
+ import { interactForCustomMetadata } from './interact-for-custom-metadata.js';
9
+ import { interactForDevice } from './interact-for-device.js';
10
+ import { interactForTimestamp } from './interact-for-timestamp.js';
11
+ import { interactForUserIdentity } from './interact-for-user-identity.js';
12
+ import { ellipsis } from './util/ellipsis.js';
13
+ const ergonomicPropOrder = [
14
+ 'name',
15
+ 'connected_account_id',
16
+ 'device_id',
17
+ 'access_code_id',
18
+ 'user_identity_id',
19
+ 'code',
20
+ 'starts_at',
21
+ 'ends_at',
22
+ ];
23
+ export const interactForBlueprintObject = async (args, ctx) => {
24
+ // Clone args and args params so that we can mutate it
25
+ args = { ...args, params: { ...args.params } };
26
+ const properties = Object.fromEntries(args.parameters.map((parameter) => [parameter.name, parameter]));
27
+ const required = args.parameters
28
+ .filter((parameter) => parameter.isRequired)
29
+ .map((parameter) => parameter.name);
30
+ const haveAllRequiredParams = required.every((k) => args.params[k]);
31
+ const should_auto_submit = !ctx.is_interactive && haveAllRequiredParams && !args.isSubProperty;
32
+ if (should_auto_submit) {
33
+ return args.params;
34
+ }
35
+ const propSortScore = (prop) => {
36
+ if (required.includes(prop))
37
+ return 100 - ergonomicPropOrder.indexOf(prop);
38
+ if (args.params[prop] !== undefined) {
39
+ return 50 - Object.keys(args.params).indexOf(prop);
40
+ }
41
+ return ergonomicPropOrder.indexOf(prop);
42
+ };
43
+ const cmdPath = `/${args.command.join('/').replace(/-/g, '_')}`;
44
+ const parameterSelectionMessage = args.isSubProperty
45
+ ? `Editing "${args.subPropertyPath}"`
46
+ : `[${cmdPath}] Parameters`;
47
+ console.log('');
48
+ const { paramToEdit } = await prompts({
49
+ name: 'paramToEdit',
50
+ message: parameterSelectionMessage,
51
+ type: 'autocomplete',
52
+ choices: [
53
+ ...(haveAllRequiredParams && !args.isSubProperty
54
+ ? [
55
+ {
56
+ value: 'done',
57
+ title: `[Make API Call] ${cmdPath}`,
58
+ },
59
+ ]
60
+ : []),
61
+ ...(haveAllRequiredParams && args.isSubProperty
62
+ ? [
63
+ {
64
+ title: `[Save]`,
65
+ value: 'done',
66
+ },
67
+ ]
68
+ : []),
69
+ ...Object.keys(properties)
70
+ .map((k) => {
71
+ return {
72
+ title: k + (required.includes(k) ? '*' : ''),
73
+ value: k,
74
+ description: args.params[k] !== undefined
75
+ ? typeof args.params[k] === 'object'
76
+ ? ellipsis(JSON.stringify(args.params[k]), 60)
77
+ : `[${args.params[k]}]`
78
+ : undefined,
79
+ };
80
+ })
81
+ .sort((a, b) => propSortScore(b.value) - propSortScore(a.value)),
82
+ ...(args.isSubProperty
83
+ ? [
84
+ {
85
+ title: `[Leave Empty]`,
86
+ value: 'empty',
87
+ },
88
+ ]
89
+ : []),
90
+ {
91
+ title: `[Back]`,
92
+ value: 'back',
93
+ },
94
+ ],
95
+ });
96
+ if (paramToEdit === 'empty') {
97
+ return undefined;
98
+ }
99
+ if (paramToEdit === 'done') {
100
+ // TODO check for required
101
+ return args.params;
102
+ }
103
+ if (paramToEdit === 'back') {
104
+ if (args.subPropertyPath) {
105
+ return args.params;
106
+ }
107
+ return '[Back]';
108
+ }
109
+ const prop = properties[paramToEdit];
110
+ if (paramToEdit === 'device_id') {
111
+ args.params[paramToEdit] = await interactForDevice();
112
+ return interactForBlueprintObject(args, ctx);
113
+ }
114
+ else if (paramToEdit === 'access_code_id') {
115
+ args.params[paramToEdit] = await interactForAccessCode(args.params);
116
+ return interactForBlueprintObject(args, ctx);
117
+ }
118
+ else if (paramToEdit === 'connected_account_id') {
119
+ const connected_account_id = await interactForConnectedAccount();
120
+ args.params[paramToEdit] = connected_account_id;
121
+ return interactForBlueprintObject(args, ctx);
122
+ }
123
+ else if (paramToEdit === 'user_identity_id' ||
124
+ paramToEdit === 'user_identity_ids') {
125
+ const user_identity_id = await interactForUserIdentity();
126
+ args.params[paramToEdit] =
127
+ paramToEdit === 'user_identity_ids'
128
+ ? [user_identity_id]
129
+ : user_identity_id;
130
+ return interactForBlueprintObject(args, ctx);
131
+ }
132
+ else if (paramToEdit.endsWith('acs_system_id')) {
133
+ args.params[paramToEdit] = await interactForAcsSystem();
134
+ return interactForBlueprintObject(args, ctx);
135
+ }
136
+ else if (paramToEdit.endsWith('acs_user_id')) {
137
+ args.params[paramToEdit] = await interactForAcsUser();
138
+ return interactForBlueprintObject(args, ctx);
139
+ }
140
+ else if (paramToEdit.endsWith('acs_entrance_id')) {
141
+ args.params['acs_entrance_id'] = await interactForAcsEntrance();
142
+ return interactForBlueprintObject(args, ctx);
143
+ }
144
+ else if (paramToEdit.endsWith('_at') ||
145
+ paramToEdit === 'since' ||
146
+ paramToEdit.endsWith('_before') ||
147
+ paramToEdit.endsWith('_after')) {
148
+ args.params[paramToEdit] = await interactForTimestamp();
149
+ return interactForBlueprintObject(args, ctx);
150
+ }
151
+ else if (paramToEdit === 'custom_metadata') {
152
+ args.params[paramToEdit] = await interactForCustomMetadata(args.params[paramToEdit] || {});
153
+ return interactForBlueprintObject(args, ctx);
154
+ }
155
+ if (prop) {
156
+ if (['string', 'id', 'datetime'].includes(prop.format)) {
157
+ let value;
158
+ if (prop.format === 'datetime') {
159
+ value = await interactForTimestamp();
160
+ }
161
+ else {
162
+ value = (await prompts({
163
+ name: 'value',
164
+ message: `${paramToEdit}:`,
165
+ type: 'text',
166
+ })).value;
167
+ }
168
+ args.params[paramToEdit] = value;
169
+ return interactForBlueprintObject(args, ctx);
170
+ }
171
+ else if (prop.format === 'enum') {
172
+ const value = (await prompts({
173
+ name: 'value',
174
+ message: `${paramToEdit}:`,
175
+ type: 'select',
176
+ choices: prop.values.map((v) => ({
177
+ title: v.name,
178
+ value: v.name,
179
+ })),
180
+ })).value;
181
+ args.params[paramToEdit] = value;
182
+ return interactForBlueprintObject(args, ctx);
183
+ }
184
+ else if (prop.format === 'boolean') {
185
+ const { value } = await prompts({
186
+ name: 'value',
187
+ message: `${paramToEdit}:`,
188
+ type: 'toggle',
189
+ initial: true,
190
+ active: 'true',
191
+ inactive: 'false',
192
+ });
193
+ args.params[paramToEdit] = value;
194
+ return interactForBlueprintObject(args, ctx);
195
+ }
196
+ else if (prop.format === 'list' && prop.itemFormat === 'enum') {
197
+ const value = (await prompts({
198
+ name: 'value',
199
+ message: `${paramToEdit}:`,
200
+ type: 'autocompleteMultiselect',
201
+ choices: prop.itemEnumValues.map((v) => ({
202
+ title: v.name,
203
+ value: v.name,
204
+ })),
205
+ })).value;
206
+ args.params[paramToEdit] = value;
207
+ return interactForBlueprintObject(args, ctx);
208
+ }
209
+ else if (prop.format === 'list') {
210
+ args.params[paramToEdit] = await interactForArray(args.params[paramToEdit] || [], `Edit the list for ${paramToEdit}`);
211
+ return interactForBlueprintObject(args, ctx);
212
+ }
213
+ else if (prop.format === 'object') {
214
+ args.params[paramToEdit] = await interactForBlueprintObject({
215
+ command: args.command,
216
+ params: {},
217
+ parameters: prop.parameters,
218
+ isSubProperty: true,
219
+ subPropertyPath: paramToEdit,
220
+ }, ctx);
221
+ return interactForBlueprintObject(args, ctx);
222
+ }
223
+ else if (prop.format === 'number') {
224
+ const { value } = await prompts({
225
+ name: 'value',
226
+ message: `${paramToEdit}:`,
227
+ type: 'number',
228
+ });
229
+ args.params[paramToEdit] = value;
230
+ return interactForBlueprintObject(args, ctx);
231
+ }
232
+ }
233
+ throw new Error(`Didn't know how to handle Blueprint parameter for property: "${paramToEdit}"`);
234
+ };
235
+ //# sourceMappingURL=interact-for-blueprint-object.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interact-for-blueprint-object.js","sourceRoot":"","sources":["../src/lib/interact-for-blueprint-object.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import type { ContextHelpers } from './types.js';
2
+ export declare const interactForCommandParams: (args: {
3
+ command: string[];
4
+ params: Record<string, any>;
5
+ }, ctx: ContextHelpers) => Promise<any>;
@@ -0,0 +1,11 @@
1
+ import { getCommandBlueprintDef } from './get-command-blueprint-def.js';
2
+ import { interactForBlueprintObject } from './interact-for-blueprint-object.js';
3
+ export const interactForCommandParams = async (args, ctx) => {
4
+ const endpoint = getCommandBlueprintDef(args.command, ctx);
5
+ return interactForBlueprintObject({
6
+ command: args.command,
7
+ params: args.params,
8
+ parameters: endpoint.request.parameters,
9
+ }, ctx);
10
+ };
11
+ //# sourceMappingURL=interact-for-command-params.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interact-for-command-params.js","sourceRoot":"","sources":["../src/lib/interact-for-command-params.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAA;AACvE,OAAO,EAAE,0BAA0B,EAAE,MAAM,oCAAoC,CAAA;AAG/E,MAAM,CAAC,MAAM,wBAAwB,GAAG,KAAK,EAC3C,IAGC,EACD,GAAmB,EACL,EAAE;IAChB,MAAM,QAAQ,GAAG,sBAAsB,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,CAAA;IAE1D,OAAO,0BAA0B,CAC/B;QACE,OAAO,EAAE,IAAI,CAAC,OAAO;QACrB,MAAM,EAAE,IAAI,CAAC,MAAM;QACnB,UAAU,EAAE,QAAQ,CAAC,OAAO,CAAC,UAAU;KACxC,EACD,GAAG,CACJ,CAAA;AACH,CAAC,CAAA"}
@@ -0,0 +1,2 @@
1
+ import type { ContextHelpers } from './types.js';
2
+ export declare function interactForCommandSelection(commandPath: string[], helpers: ContextHelpers): Promise<string[]>;