@seamapi/cli 0.0.1 → 0.4.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 (136) hide show
  1. package/README.md +59 -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/get-api-blueprint.d.ts +3 -0
  9. package/lib/get-api-blueprint.js +11 -0
  10. package/lib/get-api-blueprint.js.map +1 -0
  11. package/lib/get-command-blueprint-def.d.ts +2 -0
  12. package/lib/get-command-blueprint-def.js +11 -0
  13. package/lib/get-command-blueprint-def.js.map +1 -0
  14. package/lib/get-config-store.d.ts +2 -0
  15. package/lib/get-config-store.js +5 -0
  16. package/lib/get-config-store.js.map +1 -0
  17. package/lib/get-current-workspace-id.d.ts +1 -0
  18. package/lib/get-current-workspace-id.js +10 -0
  19. package/lib/get-current-workspace-id.js.map +1 -0
  20. package/lib/get-seam.d.ts +3 -0
  21. package/lib/get-seam.js +26 -0
  22. package/lib/get-seam.js.map +1 -0
  23. package/lib/get-server.d.ts +1 -0
  24. package/lib/get-server.js +7 -0
  25. package/lib/get-server.js.map +1 -0
  26. package/lib/interact-for-access-code.d.ts +3 -0
  27. package/lib/interact-for-access-code.js +19 -0
  28. package/lib/interact-for-access-code.js.map +1 -0
  29. package/lib/interact-for-acs-entrance.d.ts +1 -0
  30. package/lib/interact-for-acs-entrance.js +15 -0
  31. package/lib/interact-for-acs-entrance.js.map +1 -0
  32. package/lib/interact-for-acs-system.d.ts +1 -0
  33. package/lib/interact-for-acs-system.js +16 -0
  34. package/lib/interact-for-acs-system.js.map +1 -0
  35. package/lib/interact-for-acs-user.d.ts +1 -0
  36. package/lib/interact-for-acs-user.js +17 -0
  37. package/lib/interact-for-acs-user.js.map +1 -0
  38. package/lib/interact-for-action-attempt-poll.d.ts +2 -0
  39. package/lib/interact-for-action-attempt-poll.js +22 -0
  40. package/lib/interact-for-action-attempt-poll.js.map +1 -0
  41. package/lib/interact-for-array.d.ts +1 -0
  42. package/lib/interact-for-array.js +53 -0
  43. package/lib/interact-for-array.js.map +1 -0
  44. package/lib/interact-for-blueprint-object.d.ts +9 -0
  45. package/lib/interact-for-blueprint-object.js +235 -0
  46. package/lib/interact-for-blueprint-object.js.map +1 -0
  47. package/lib/interact-for-command-params.d.ts +5 -0
  48. package/lib/interact-for-command-params.js +11 -0
  49. package/lib/interact-for-command-params.js.map +1 -0
  50. package/lib/interact-for-command-selection.d.ts +2 -0
  51. package/lib/interact-for-command-selection.js +76 -0
  52. package/lib/interact-for-command-selection.js.map +1 -0
  53. package/lib/interact-for-connected-account.d.ts +1 -0
  54. package/lib/interact-for-connected-account.js +20 -0
  55. package/lib/interact-for-connected-account.js.map +1 -0
  56. package/lib/interact-for-custom-metadata.d.ts +6 -0
  57. package/lib/interact-for-custom-metadata.js +71 -0
  58. package/lib/interact-for-custom-metadata.js.map +1 -0
  59. package/lib/interact-for-device.d.ts +1 -0
  60. package/lib/interact-for-device.js +15 -0
  61. package/lib/interact-for-device.js.map +1 -0
  62. package/lib/interact-for-login.d.ts +1 -0
  63. package/lib/interact-for-login.js +39 -0
  64. package/lib/interact-for-login.js.map +1 -0
  65. package/lib/interact-for-resource.d.ts +11 -0
  66. package/lib/interact-for-resource.js +13 -0
  67. package/lib/interact-for-resource.js.map +1 -0
  68. package/lib/interact-for-server-selection.d.ts +1 -0
  69. package/lib/interact-for-server-selection.js +41 -0
  70. package/lib/interact-for-server-selection.js.map +1 -0
  71. package/lib/interact-for-timestamp.d.ts +1 -0
  72. package/lib/interact-for-timestamp.js +10 -0
  73. package/lib/interact-for-timestamp.js.map +1 -0
  74. package/lib/interact-for-use-remote-api-defs.d.ts +1 -0
  75. package/lib/interact-for-use-remote-api-defs.js +25 -0
  76. package/lib/interact-for-use-remote-api-defs.js.map +1 -0
  77. package/lib/interact-for-user-identity.d.ts +1 -0
  78. package/lib/interact-for-user-identity.js +15 -0
  79. package/lib/interact-for-user-identity.js.map +1 -0
  80. package/lib/interact-for-workspace-id.d.ts +1 -0
  81. package/lib/interact-for-workspace-id.js +31 -0
  82. package/lib/interact-for-workspace-id.js.map +1 -0
  83. package/lib/types.d.ts +5 -0
  84. package/lib/types.js +2 -0
  85. package/lib/types.js.map +1 -0
  86. package/lib/util/ellipsis.d.ts +1 -0
  87. package/lib/util/ellipsis.js +6 -0
  88. package/lib/util/ellipsis.js.map +1 -0
  89. package/lib/util/request-seam-api.d.ts +4 -0
  90. package/lib/util/request-seam-api.js +28 -0
  91. package/lib/util/request-seam-api.js.map +1 -0
  92. package/lib/util/with-loading.d.ts +1 -0
  93. package/lib/util/with-loading.js +14 -0
  94. package/lib/util/with-loading.js.map +1 -0
  95. package/lib/validate-token.d.ts +1 -0
  96. package/lib/validate-token.js +19 -0
  97. package/lib/validate-token.js.map +1 -0
  98. package/lib/version.d.ts +2 -0
  99. package/lib/version.js +3 -0
  100. package/lib/version.js.map +1 -0
  101. package/package.json +44 -18
  102. package/src/bin/cli.ts +265 -0
  103. package/src/index.ts +4 -1
  104. package/src/lib/get-api-blueprint.ts +17 -0
  105. package/src/lib/get-command-blueprint-def.ts +15 -0
  106. package/src/lib/get-config-store.ts +5 -0
  107. package/src/lib/get-current-workspace-id.ts +11 -0
  108. package/src/lib/get-seam.ts +43 -0
  109. package/src/lib/get-server.ts +9 -0
  110. package/src/lib/interact-for-access-code.ts +25 -0
  111. package/src/lib/interact-for-acs-entrance.ts +16 -0
  112. package/src/lib/interact-for-acs-system.ts +17 -0
  113. package/src/lib/interact-for-acs-user.ts +21 -0
  114. package/src/lib/interact-for-action-attempt-poll.ts +35 -0
  115. package/src/lib/interact-for-array.ts +61 -0
  116. package/src/lib/interact-for-blueprint-object.ts +274 -0
  117. package/src/lib/interact-for-command-params.ts +22 -0
  118. package/src/lib/interact-for-command-selection.ts +107 -0
  119. package/src/lib/interact-for-connected-account.ts +24 -0
  120. package/src/lib/interact-for-custom-metadata.ts +86 -0
  121. package/src/lib/interact-for-device.ts +15 -0
  122. package/src/lib/interact-for-login.ts +53 -0
  123. package/src/lib/interact-for-resource.ts +34 -0
  124. package/src/lib/interact-for-server-selection.ts +46 -0
  125. package/src/lib/interact-for-timestamp.ts +10 -0
  126. package/src/lib/interact-for-use-remote-api-defs.ts +27 -0
  127. package/src/lib/interact-for-user-identity.ts +16 -0
  128. package/src/lib/interact-for-workspace-id.ts +37 -0
  129. package/src/lib/types.ts +6 -0
  130. package/src/lib/util/ellipsis.ts +4 -0
  131. package/src/lib/util/request-seam-api.ts +43 -0
  132. package/src/lib/util/with-loading.ts +16 -0
  133. package/src/lib/validate-token.ts +28 -0
  134. package/src/lib/version.ts +3 -0
  135. package/src/lib/index.ts +0 -1
  136. package/src/lib/todo.ts +0 -1
@@ -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[]>;
@@ -0,0 +1,76 @@
1
+ import { isDeepStrictEqual as isEqual } from 'node:util';
2
+ import prompts from 'prompts';
3
+ const uniqBy = (items, keyOf) => {
4
+ const seen = new Set();
5
+ return items.filter((item) => {
6
+ const key = keyOf(item);
7
+ if (seen.has(key))
8
+ return false;
9
+ seen.add(key);
10
+ return true;
11
+ });
12
+ };
13
+ const ergonomicOrder = ['create', 'list', 'get', 'update', 'unlock_door'];
14
+ function ergonomicSort(aStr, bStr) {
15
+ let a = ergonomicOrder.indexOf(aStr);
16
+ if (a === -1)
17
+ a = ergonomicOrder.length;
18
+ let b = ergonomicOrder.indexOf(bStr);
19
+ if (b === -1)
20
+ b = ergonomicOrder.length;
21
+ return a > b ? 1 : a < b ? -1 : 0;
22
+ }
23
+ export async function interactForCommandSelection(commandPath, helpers) {
24
+ const commands = helpers.blueprint.routes
25
+ .flatMap((route) => route.endpoints)
26
+ .map((endpoint) => endpoint.path.replace(/_/g, '-').replace(/^\//, '').split('/'))
27
+ .concat([
28
+ ['login'],
29
+ ['logout'],
30
+ ['config', 'reveal-location'],
31
+ ['config', 'use-remote-api-defs'],
32
+ ['select', 'workspace'],
33
+ ['select', 'server'],
34
+ ['health', 'get-health'],
35
+ ]);
36
+ const possibleCommands = uniqBy(commandPath.length === 0
37
+ ? commands
38
+ : commands.filter((cmd) => isEqual(cmd.slice(0, commandPath.length), commandPath)), (v) => v[commandPath.length]);
39
+ if (possibleCommands.length === 0) {
40
+ throw new Error('No possible commands');
41
+ }
42
+ if (possibleCommands.length === 1 &&
43
+ possibleCommands[0]?.length === commandPath.length) {
44
+ return commandPath;
45
+ }
46
+ // Add dynamic 'back' command for sub-commands to allow returning
47
+ // to previous level.
48
+ if (commandPath.length > 0) {
49
+ possibleCommands.push([...commandPath, '[Back]']);
50
+ }
51
+ const commandPathStr = commandPath.join('/').replace(/-/g, '_');
52
+ const res = await prompts({
53
+ name: 'Command',
54
+ type: 'autocomplete',
55
+ choices: [
56
+ ...possibleCommands.map((cmd) => ({
57
+ title: cmd?.[commandPath.length] ?? `[Call /${commandPathStr} Directly]`,
58
+ value: cmd?.[commandPath.length] ?? '<none>',
59
+ })),
60
+ ].sort((a, b) => ergonomicSort(a.value, b.value)),
61
+ message: `Select a command: /${commandPathStr}`,
62
+ });
63
+ if (res?.Command === undefined) {
64
+ throw new Error('Bailed');
65
+ }
66
+ if (res?.Command === '<none>') {
67
+ return commandPath;
68
+ }
69
+ const newCommandPath = [...commandPath, res.Command];
70
+ const fullCommand = possibleCommands.find((cmd) => isEqual(newCommandPath, cmd));
71
+ if (!fullCommand) {
72
+ return interactForCommandSelection(newCommandPath, helpers);
73
+ }
74
+ return fullCommand;
75
+ }
76
+ //# sourceMappingURL=interact-for-command-selection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interact-for-command-selection.js","sourceRoot":"","sources":["../src/lib/interact-for-command-selection.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export declare const interactForConnectedAccount: () => Promise<string>;
@@ -0,0 +1,20 @@
1
+ import { getSeam } from './get-seam.js';
2
+ import { interactForResource } from './interact-for-resource.js';
3
+ export const interactForConnectedAccount = async () => {
4
+ const seam = await getSeam();
5
+ return interactForResource({
6
+ resourceName: 'connected_account',
7
+ fetchResources: () => seam.connectedAccounts.list(),
8
+ toChoice: (connectedAccount) => {
9
+ const identifiers = Object.values(connectedAccount.user_identifier ?? {}).filter((value) => typeof value === 'string');
10
+ return {
11
+ title: connectedAccount.user_identifier?.email ??
12
+ identifiers[0] ??
13
+ '<No Name>',
14
+ value: connectedAccount.connected_account_id,
15
+ description: `${connectedAccount.account_type} ${connectedAccount.connected_account_id}`,
16
+ };
17
+ },
18
+ });
19
+ };
20
+ //# sourceMappingURL=interact-for-connected-account.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interact-for-connected-account.js","sourceRoot":"","sources":["../src/lib/interact-for-connected-account.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA;AACvC,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAA;AAChE,MAAM,CAAC,MAAM,2BAA2B,GAAG,KAAK,IAAI,EAAE;IACpD,MAAM,IAAI,GAAG,MAAM,OAAO,EAAE,CAAA;IAE5B,OAAO,mBAAmB,CAAC;QACzB,YAAY,EAAE,mBAAmB;QACjC,cAAc,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,iBAAiB,CAAC,IAAI,EAAE;QACnD,QAAQ,EAAE,CAAC,gBAAgB,EAAE,EAAE;YAC7B,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,CAC/B,gBAAgB,CAAC,eAAe,IAAI,EAAE,CACvC,CAAC,MAAM,CAAC,CAAC,KAAK,EAAmB,EAAE,CAAC,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAA;YAE/D,OAAO;gBACL,KAAK,EACH,gBAAgB,CAAC,eAAe,EAAE,KAAK;oBACvC,WAAW,CAAC,CAAC,CAAC;oBACd,WAAW;gBACb,KAAK,EAAE,gBAAgB,CAAC,oBAAoB;gBAC5C,WAAW,EAAE,GAAG,gBAAgB,CAAC,YAAY,IAAI,gBAAgB,CAAC,oBAAoB,EAAE;aACzF,CAAA;QACH,CAAC;KACF,CAAC,CAAA;AACJ,CAAC,CAAA"}
@@ -0,0 +1,6 @@
1
+ import type { CustomMetadata } from '@seamapi/types/connect';
2
+ type UpdatedCustomMetadata = {
3
+ [x: string]: string | boolean | null;
4
+ };
5
+ export declare const interactForCustomMetadata: (custom_metadata: CustomMetadata) => Promise<UpdatedCustomMetadata>;
6
+ export {};
@@ -0,0 +1,71 @@
1
+ import prompts from 'prompts';
2
+ export const interactForCustomMetadata = async (custom_metadata) => {
3
+ const updated_custom_metadata = { ...custom_metadata };
4
+ const displayCurrentCustomMetadata = () => {
5
+ console.log('custom_metadata:');
6
+ if (Object.keys(updated_custom_metadata).length > 0) {
7
+ Object.keys(updated_custom_metadata).forEach((key, index) => {
8
+ console.log(`${index + 1}: ${key}: ${updated_custom_metadata[key]}`);
9
+ });
10
+ }
11
+ else {
12
+ console.log('The custom metadata param is empty.');
13
+ }
14
+ };
15
+ let action;
16
+ do {
17
+ displayCurrentCustomMetadata();
18
+ const response = await prompts({
19
+ type: 'select',
20
+ name: 'action',
21
+ message: 'Choose an action:',
22
+ choices: [
23
+ { title: 'Add an item to params', value: 'add' },
24
+ { title: 'Remove an item from params', value: 'remove' },
25
+ { title: 'Finish editing params', value: 'done' },
26
+ ],
27
+ });
28
+ action = response.action;
29
+ if (action === 'add') {
30
+ const { newKey } = await prompts({
31
+ type: 'text',
32
+ name: 'newKey',
33
+ message: 'Enter a key to add or edit:',
34
+ });
35
+ let { newValue } = await prompts({
36
+ type: 'text',
37
+ name: 'newValue',
38
+ message: 'Enter the new value to add or edit (or null to delete):',
39
+ });
40
+ if (newKey) {
41
+ if (newValue === 'false' || newValue === 'true') {
42
+ newValue = Boolean(newValue);
43
+ }
44
+ if (newValue === 'null') {
45
+ updated_custom_metadata[newKey] = null;
46
+ }
47
+ else {
48
+ updated_custom_metadata[newKey] = newValue;
49
+ }
50
+ }
51
+ }
52
+ else if (action === 'remove') {
53
+ const { custom_key_to_remove } = await prompts({
54
+ type: 'select',
55
+ name: 'custom_key_to_remove',
56
+ message: 'Choose a key-value pair to remove from params:',
57
+ choices: Object.keys(updated_custom_metadata).map((custom_metadata_key) => {
58
+ return {
59
+ title: `${custom_metadata_key}: ${updated_custom_metadata[custom_metadata_key]}`,
60
+ value: custom_metadata_key,
61
+ };
62
+ }),
63
+ });
64
+ if (custom_key_to_remove) {
65
+ delete custom_metadata[custom_key_to_remove];
66
+ }
67
+ }
68
+ } while (action !== 'done');
69
+ return updated_custom_metadata;
70
+ };
71
+ //# sourceMappingURL=interact-for-custom-metadata.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interact-for-custom-metadata.js","sourceRoot":"","sources":["../src/lib/interact-for-custom-metadata.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export declare const interactForDevice: () => Promise<string>;
@@ -0,0 +1,15 @@
1
+ import { getSeam } from './get-seam.js';
2
+ import { interactForResource } from './interact-for-resource.js';
3
+ export const interactForDevice = async () => {
4
+ const seam = await getSeam();
5
+ return interactForResource({
6
+ resourceName: 'device',
7
+ fetchResources: () => seam.devices.list(),
8
+ toChoice: (device) => ({
9
+ title: device.properties.name ?? '<No Name>',
10
+ value: device.device_id,
11
+ description: `${device.device_type} ${device.device_id}`,
12
+ }),
13
+ });
14
+ };
15
+ //# sourceMappingURL=interact-for-device.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interact-for-device.js","sourceRoot":"","sources":["../src/lib/interact-for-device.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA;AACvC,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAA;AAChE,MAAM,CAAC,MAAM,iBAAiB,GAAG,KAAK,IAAI,EAAE;IAC1C,MAAM,IAAI,GAAG,MAAM,OAAO,EAAE,CAAA;IAE5B,OAAO,mBAAmB,CAAC;QACzB,YAAY,EAAE,QAAQ;QACtB,cAAc,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE;QACzC,QAAQ,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;YACrB,KAAK,EAAE,MAAM,CAAC,UAAU,CAAC,IAAI,IAAI,WAAW;YAC5C,KAAK,EAAE,MAAM,CAAC,SAAS;YACvB,WAAW,EAAE,GAAG,MAAM,CAAC,WAAW,IAAI,MAAM,CAAC,SAAS,EAAE;SACzD,CAAC;KACH,CAAC,CAAA;AACJ,CAAC,CAAA"}
@@ -0,0 +1 @@
1
+ export declare const interactForLogin: () => Promise<void>;
@@ -0,0 +1,39 @@
1
+ import { isApiKey, isPersonalAccessToken } from '@seamapi/http/connect';
2
+ import chalk from 'chalk';
3
+ import prompts from 'prompts';
4
+ import { getConfigStore } from './get-config-store.js';
5
+ import { getServer } from './get-server.js';
6
+ import { interactForWorkspaceId } from './interact-for-workspace-id.js';
7
+ import { withLoading } from './util/with-loading.js';
8
+ import { validateToken } from './validate-token.js';
9
+ export const interactForLogin = async () => {
10
+ const config = await getConfigStore();
11
+ if (getServer().includes('localhost')) {
12
+ console.log(`You're using a local Seam Connect instance, you can enter the API Key to your local user, you can create a new user from:\n\n${getServer()}/admin/create_user_with_api_key`);
13
+ }
14
+ else {
15
+ console.log(`To login, navigate to the URL below and create a new Personal Access Token (PAT) and paste the PAT in the provided box:\n\nhttps://console.seam.co/settings/access-tokens\n\n`);
16
+ }
17
+ console.log(chalk.gray('> Note: You can enter an API Key here for single-workspace access'));
18
+ const { pat } = await prompts({
19
+ name: 'pat',
20
+ type: 'text',
21
+ message: 'Personal Access Token:',
22
+ });
23
+ const token = pat?.trim();
24
+ if (!token) {
25
+ throw new Error('No token provided');
26
+ }
27
+ if (isPersonalAccessToken(token)) {
28
+ await interactForWorkspaceId(token);
29
+ }
30
+ else if (isApiKey(token)) {
31
+ await withLoading('Validating API key...', () => validateToken(token));
32
+ }
33
+ else {
34
+ throw new Error('Invalid token: expected a Personal Access Token or API Key');
35
+ }
36
+ config.set(`${getServer()}.pat`, token);
37
+ console.log(`Token saved! You may begin using the CLI!`);
38
+ };
39
+ //# sourceMappingURL=interact-for-login.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interact-for-login.js","sourceRoot":"","sources":["../src/lib/interact-for-login.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAA;AACvE,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,OAAO,MAAM,SAAS,CAAA;AAE7B,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAA;AACtD,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAC3C,OAAO,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAA;AACvE,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAA;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AAEnD,MAAM,CAAC,MAAM,gBAAgB,GAAG,KAAK,IAAI,EAAE;IACzC,MAAM,MAAM,GAAG,MAAM,cAAc,EAAE,CAAA;IAErC,IAAI,SAAS,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;QACtC,OAAO,CAAC,GAAG,CACT,gIAAgI,SAAS,EAAE,iCAAiC,CAC7K,CAAA;IACH,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CACT,+KAA+K,CAChL,CAAA;IACH,CAAC;IAED,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,IAAI,CACR,mEAAmE,CACpE,CACF,CAAA;IAED,MAAM,EAAE,GAAG,EAAE,GAAG,MAAM,OAAO,CAAC;QAC5B,IAAI,EAAE,KAAK;QACX,IAAI,EAAE,MAAM;QACZ,OAAO,EAAE,wBAAwB;KAClC,CAAC,CAAA;IACF,MAAM,KAAK,GAAG,GAAG,EAAE,IAAI,EAAE,CAAA;IAEzB,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAA;IACtC,CAAC;IAED,IAAI,qBAAqB,CAAC,KAAK,CAAC,EAAE,CAAC;QACjC,MAAM,sBAAsB,CAAC,KAAK,CAAC,CAAA;IACrC,CAAC;SAAM,IAAI,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QAC3B,MAAM,WAAW,CAAC,uBAAuB,EAAE,GAAG,EAAE,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAA;IACxE,CAAC;SAAM,CAAC;QACN,MAAM,IAAI,KAAK,CACb,4DAA4D,CAC7D,CAAA;IACH,CAAC;IAED,MAAM,CAAC,GAAG,CAAC,GAAG,SAAS,EAAE,MAAM,EAAE,KAAK,CAAC,CAAA;IACvC,OAAO,CAAC,GAAG,CAAC,2CAA2C,CAAC,CAAA;AAC1D,CAAC,CAAA"}
@@ -0,0 +1,11 @@
1
+ export interface ResourceChoice {
2
+ title: string;
3
+ value: string;
4
+ description?: string;
5
+ }
6
+ export declare const interactForResource: <Resource>({ resourceName, fetchResources, toChoice, message, }: {
7
+ resourceName: string;
8
+ fetchResources: () => Promise<Resource[]>;
9
+ toChoice: (resource: Resource) => ResourceChoice;
10
+ message?: string | undefined;
11
+ }) => Promise<string>;