@salesforce/b2c-cli 0.0.0-nightly.20260119053920

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 (169) hide show
  1. package/README.md +222 -0
  2. package/bin/dev.cmd +3 -0
  3. package/bin/dev.js +17 -0
  4. package/bin/run.cmd +3 -0
  5. package/bin/run.js +17 -0
  6. package/dist/commands/_test/index.d.ts +6 -0
  7. package/dist/commands/_test/index.js +39 -0
  8. package/dist/commands/_test/index.js.map +1 -0
  9. package/dist/commands/auth/token.d.ts +16 -0
  10. package/dist/commands/auth/token.js +35 -0
  11. package/dist/commands/auth/token.js.map +1 -0
  12. package/dist/commands/code/activate.d.ts +33 -0
  13. package/dist/commands/code/activate.js +83 -0
  14. package/dist/commands/code/activate.js.map +1 -0
  15. package/dist/commands/code/delete.d.ts +33 -0
  16. package/dist/commands/code/delete.js +67 -0
  17. package/dist/commands/code/delete.js.map +1 -0
  18. package/dist/commands/code/deploy.d.ts +38 -0
  19. package/dist/commands/code/deploy.js +141 -0
  20. package/dist/commands/code/deploy.js.map +1 -0
  21. package/dist/commands/code/list.d.ts +8 -0
  22. package/dist/commands/code/list.js +64 -0
  23. package/dist/commands/code/list.js.map +1 -0
  24. package/dist/commands/code/watch.d.ts +34 -0
  25. package/dist/commands/code/watch.js +70 -0
  26. package/dist/commands/code/watch.js.map +1 -0
  27. package/dist/commands/docs/download.d.ts +35 -0
  28. package/dist/commands/docs/download.js +58 -0
  29. package/dist/commands/docs/download.js.map +1 -0
  30. package/dist/commands/docs/read.d.ts +29 -0
  31. package/dist/commands/docs/read.js +70 -0
  32. package/dist/commands/docs/read.js.map +1 -0
  33. package/dist/commands/docs/schema.d.ts +32 -0
  34. package/dist/commands/docs/schema.js +68 -0
  35. package/dist/commands/docs/schema.js.map +1 -0
  36. package/dist/commands/docs/search.d.ts +33 -0
  37. package/dist/commands/docs/search.js +102 -0
  38. package/dist/commands/docs/search.js.map +1 -0
  39. package/dist/commands/job/export.d.ts +50 -0
  40. package/dist/commands/job/export.js +270 -0
  41. package/dist/commands/job/export.js.map +1 -0
  42. package/dist/commands/job/import.d.ts +38 -0
  43. package/dist/commands/job/import.js +143 -0
  44. package/dist/commands/job/import.js.map +1 -0
  45. package/dist/commands/job/run.d.ts +45 -0
  46. package/dist/commands/job/run.js +205 -0
  47. package/dist/commands/job/run.js.map +1 -0
  48. package/dist/commands/job/search.d.ts +37 -0
  49. package/dist/commands/job/search.js +102 -0
  50. package/dist/commands/job/search.js.map +1 -0
  51. package/dist/commands/job/wait.d.ts +38 -0
  52. package/dist/commands/job/wait.js +85 -0
  53. package/dist/commands/job/wait.js.map +1 -0
  54. package/dist/commands/mrt/env/create.d.ts +41 -0
  55. package/dist/commands/mrt/env/create.js +226 -0
  56. package/dist/commands/mrt/env/create.js.map +1 -0
  57. package/dist/commands/mrt/env/delete.d.ts +34 -0
  58. package/dist/commands/mrt/env/delete.js +94 -0
  59. package/dist/commands/mrt/env/delete.js.map +1 -0
  60. package/dist/commands/mrt/env/var/delete.d.ts +34 -0
  61. package/dist/commands/mrt/env/var/delete.js +53 -0
  62. package/dist/commands/mrt/env/var/delete.js.map +1 -0
  63. package/dist/commands/mrt/env/var/list.d.ts +28 -0
  64. package/dist/commands/mrt/env/var/list.js +71 -0
  65. package/dist/commands/mrt/env/var/list.js.map +1 -0
  66. package/dist/commands/mrt/env/var/set.d.ts +35 -0
  67. package/dist/commands/mrt/env/var/set.js +84 -0
  68. package/dist/commands/mrt/env/var/set.js.map +1 -0
  69. package/dist/commands/mrt/push.d.ts +37 -0
  70. package/dist/commands/mrt/push.js +122 -0
  71. package/dist/commands/mrt/push.js.map +1 -0
  72. package/dist/commands/ods/create.d.ts +42 -0
  73. package/dist/commands/ods/create.js +255 -0
  74. package/dist/commands/ods/create.js.map +1 -0
  75. package/dist/commands/ods/delete.d.ts +15 -0
  76. package/dist/commands/ods/delete.js +86 -0
  77. package/dist/commands/ods/delete.js.map +1 -0
  78. package/dist/commands/ods/get.d.ts +17 -0
  79. package/dist/commands/ods/get.js +99 -0
  80. package/dist/commands/ods/get.js.map +1 -0
  81. package/dist/commands/ods/info.d.ts +27 -0
  82. package/dist/commands/ods/info.js +109 -0
  83. package/dist/commands/ods/info.js.map +1 -0
  84. package/dist/commands/ods/list.d.ts +31 -0
  85. package/dist/commands/ods/list.js +166 -0
  86. package/dist/commands/ods/list.js.map +1 -0
  87. package/dist/commands/ods/restart.d.ts +16 -0
  88. package/dist/commands/ods/restart.js +51 -0
  89. package/dist/commands/ods/restart.js.map +1 -0
  90. package/dist/commands/ods/start.d.ts +16 -0
  91. package/dist/commands/ods/start.js +51 -0
  92. package/dist/commands/ods/start.js.map +1 -0
  93. package/dist/commands/ods/stop.d.ts +16 -0
  94. package/dist/commands/ods/stop.js +51 -0
  95. package/dist/commands/ods/stop.js.map +1 -0
  96. package/dist/commands/scapi/custom/status.d.ts +81 -0
  97. package/dist/commands/scapi/custom/status.js +321 -0
  98. package/dist/commands/scapi/custom/status.js.map +1 -0
  99. package/dist/commands/scapi/schemas/get.d.ts +86 -0
  100. package/dist/commands/scapi/schemas/get.js +317 -0
  101. package/dist/commands/scapi/schemas/get.js.map +1 -0
  102. package/dist/commands/scapi/schemas/list.d.ts +48 -0
  103. package/dist/commands/scapi/schemas/list.js +148 -0
  104. package/dist/commands/scapi/schemas/list.js.map +1 -0
  105. package/dist/commands/sites/list.d.ts +10 -0
  106. package/dist/commands/sites/list.js +56 -0
  107. package/dist/commands/sites/list.js.map +1 -0
  108. package/dist/commands/slas/client/create.d.ts +38 -0
  109. package/dist/commands/slas/client/create.js +168 -0
  110. package/dist/commands/slas/client/create.js.map +1 -0
  111. package/dist/commands/slas/client/delete.d.ts +34 -0
  112. package/dist/commands/slas/client/delete.js +54 -0
  113. package/dist/commands/slas/client/delete.js.map +1 -0
  114. package/dist/commands/slas/client/get.d.ts +29 -0
  115. package/dist/commands/slas/client/get.js +51 -0
  116. package/dist/commands/slas/client/get.js.map +1 -0
  117. package/dist/commands/slas/client/list.d.ts +30 -0
  118. package/dist/commands/slas/client/list.js +64 -0
  119. package/dist/commands/slas/client/list.js.map +1 -0
  120. package/dist/commands/slas/client/open.d.ts +25 -0
  121. package/dist/commands/slas/client/open.js +56 -0
  122. package/dist/commands/slas/client/open.js.map +1 -0
  123. package/dist/commands/slas/client/update.d.ts +60 -0
  124. package/dist/commands/slas/client/update.js +183 -0
  125. package/dist/commands/slas/client/update.js.map +1 -0
  126. package/dist/commands/webdav/get.d.ts +41 -0
  127. package/dist/commands/webdav/get.js +61 -0
  128. package/dist/commands/webdav/get.js.map +1 -0
  129. package/dist/commands/webdav/ls.d.ts +17 -0
  130. package/dist/commands/webdav/ls.js +101 -0
  131. package/dist/commands/webdav/ls.js.map +1 -0
  132. package/dist/commands/webdav/mkdir.d.ts +19 -0
  133. package/dist/commands/webdav/mkdir.js +48 -0
  134. package/dist/commands/webdav/mkdir.js.map +1 -0
  135. package/dist/commands/webdav/put.d.ts +23 -0
  136. package/dist/commands/webdav/put.js +107 -0
  137. package/dist/commands/webdav/put.js.map +1 -0
  138. package/dist/commands/webdav/rm.d.ts +40 -0
  139. package/dist/commands/webdav/rm.js +67 -0
  140. package/dist/commands/webdav/rm.js.map +1 -0
  141. package/dist/commands/webdav/unzip.d.ts +15 -0
  142. package/dist/commands/webdav/unzip.js +48 -0
  143. package/dist/commands/webdav/unzip.js.map +1 -0
  144. package/dist/commands/webdav/zip.d.ts +15 -0
  145. package/dist/commands/webdav/zip.js +47 -0
  146. package/dist/commands/webdav/zip.js.map +1 -0
  147. package/dist/i18n/index.d.ts +29 -0
  148. package/dist/i18n/index.js +43 -0
  149. package/dist/i18n/index.js.map +1 -0
  150. package/dist/i18n/locales/de.d.ts +51 -0
  151. package/dist/i18n/locales/de.js +57 -0
  152. package/dist/i18n/locales/de.js.map +1 -0
  153. package/dist/i18n/locales/en.d.ts +118 -0
  154. package/dist/i18n/locales/en.js +124 -0
  155. package/dist/i18n/locales/en.js.map +1 -0
  156. package/dist/i18n/locales/index.d.ts +177 -0
  157. package/dist/i18n/locales/index.js +26 -0
  158. package/dist/i18n/locales/index.js.map +1 -0
  159. package/dist/index.d.ts +3 -0
  160. package/dist/index.js +13 -0
  161. package/dist/index.js.map +1 -0
  162. package/dist/utils/scapi/schemas.d.ts +40 -0
  163. package/dist/utils/scapi/schemas.js +49 -0
  164. package/dist/utils/scapi/schemas.js.map +1 -0
  165. package/dist/utils/slas/client.d.ts +65 -0
  166. package/dist/utils/slas/client.js +146 -0
  167. package/dist/utils/slas/client.js.map +1 -0
  168. package/oclif.manifest.json +10942 -0
  169. package/package.json +154 -0
@@ -0,0 +1,255 @@
1
+ /*
2
+ * Copyright (c) 2025, Salesforce, Inc.
3
+ * SPDX-License-Identifier: Apache-2
4
+ * For full license text, see the license.txt file in the repo root or http://www.apache.org/licenses/LICENSE-2.0
5
+ */
6
+ import { Flags, ux } from '@oclif/core';
7
+ import cliui from 'cliui';
8
+ import { OdsCommand } from '@salesforce/b2c-tooling-sdk/cli';
9
+ import { t } from '../../i18n/index.js';
10
+ /** States that indicate sandbox creation has completed (success or failure) */
11
+ const TERMINAL_STATES = new Set(['deleted', 'failed', 'started']);
12
+ /**
13
+ * Default OCAPI resources to grant the client ID access to.
14
+ * These enable common CI/CD operations like code deployment and job execution.
15
+ */
16
+ const DEFAULT_OCAPI_RESOURCES = [
17
+ { resource_id: '/code_versions', methods: ['get'], read_attributes: '(**)', write_attributes: '(**)' },
18
+ { resource_id: '/code_versions/*', methods: ['patch', 'delete'], read_attributes: '(**)', write_attributes: '(**)' },
19
+ { resource_id: '/jobs/*/executions', methods: ['post'], read_attributes: '(**)', write_attributes: '(**)' },
20
+ { resource_id: '/jobs/*/executions/*', methods: ['get'], read_attributes: '(**)', write_attributes: '(**)' },
21
+ { resource_id: '/sites/*/cartridges', methods: ['post'], read_attributes: '(**)', write_attributes: '(**)' },
22
+ ];
23
+ /**
24
+ * Default WebDAV permissions to grant the client ID.
25
+ * These enable common operations like code upload and data import/export.
26
+ */
27
+ const DEFAULT_WEBDAV_PERMISSIONS = [
28
+ { path: '/impex', operations: ['read_write'] },
29
+ { path: '/cartridges', operations: ['read_write'] },
30
+ { path: '/static', operations: ['read_write'] },
31
+ ];
32
+ /**
33
+ * Command to create a new on-demand sandbox.
34
+ */
35
+ export default class OdsCreate extends OdsCommand {
36
+ static description = t('commands.ods.create.description', 'Create a new on-demand sandbox');
37
+ static enableJsonFlag = true;
38
+ static examples = [
39
+ '<%= config.bin %> <%= command.id %> --realm abcd',
40
+ '<%= config.bin %> <%= command.id %> --realm abcd --ttl 48',
41
+ '<%= config.bin %> <%= command.id %> --realm abcd --profile large',
42
+ '<%= config.bin %> <%= command.id %> --realm abcd --auto-scheduled',
43
+ '<%= config.bin %> <%= command.id %> --realm abcd --wait',
44
+ '<%= config.bin %> <%= command.id %> --realm abcd --wait --poll-interval 15',
45
+ '<%= config.bin %> <%= command.id %> --realm abcd --json',
46
+ ];
47
+ static flags = {
48
+ realm: Flags.string({
49
+ char: 'r',
50
+ description: 'Realm ID (four-letter ID)',
51
+ required: true,
52
+ }),
53
+ ttl: Flags.integer({
54
+ description: 'Time to live in hours (0 for infinite)',
55
+ default: 24,
56
+ }),
57
+ profile: Flags.string({
58
+ description: 'Resource profile (medium, large, xlarge, xxlarge)',
59
+ default: 'medium',
60
+ options: ['medium', 'large', 'xlarge', 'xxlarge'],
61
+ }),
62
+ 'auto-scheduled': Flags.boolean({
63
+ description: 'Enable automatic start/stop scheduling',
64
+ default: false,
65
+ }),
66
+ wait: Flags.boolean({
67
+ char: 'w',
68
+ description: 'Wait for the sandbox to reach started or failed state before returning',
69
+ default: false,
70
+ }),
71
+ 'poll-interval': Flags.integer({
72
+ description: 'Polling interval in seconds when using --wait',
73
+ default: 10,
74
+ dependsOn: ['wait'],
75
+ }),
76
+ timeout: Flags.integer({
77
+ description: 'Maximum time to wait in seconds when using --wait (0 for no timeout)',
78
+ default: 600,
79
+ dependsOn: ['wait'],
80
+ }),
81
+ 'set-permissions': Flags.boolean({
82
+ description: 'Automatically set OCAPI and WebDAV permissions for the client ID used to create the sandbox',
83
+ default: true,
84
+ allowNo: true,
85
+ }),
86
+ };
87
+ async run() {
88
+ const realm = this.flags.realm;
89
+ const profile = this.flags.profile;
90
+ const ttl = this.flags.ttl;
91
+ const autoScheduled = this.flags['auto-scheduled'];
92
+ const wait = this.flags.wait;
93
+ const pollInterval = this.flags['poll-interval'];
94
+ const timeout = this.flags.timeout;
95
+ const setPermissions = this.flags['set-permissions'];
96
+ this.log(t('commands.ods.create.creating', 'Creating sandbox in realm {{realm}}...', { realm }));
97
+ this.log(t('commands.ods.create.profile', 'Profile: {{profile}}', { profile }));
98
+ this.log(t('commands.ods.create.ttl', 'TTL: {{ttl}} hours', { ttl: ttl === 0 ? 'infinite' : String(ttl) }));
99
+ // Build settings with OCAPI and WebDAV permissions if enabled
100
+ const settings = this.buildSettings(setPermissions);
101
+ if (settings) {
102
+ this.log(t('commands.ods.create.settingPermissions', 'Setting OCAPI and WebDAV permissions for client ID: {{clientId}}', { clientId: this.resolvedConfig.values.clientId }));
103
+ }
104
+ const result = await this.odsClient.POST('/sandboxes', {
105
+ body: {
106
+ realm,
107
+ ttl,
108
+ resourceProfile: profile,
109
+ autoScheduled,
110
+ analyticsEnabled: false,
111
+ settings,
112
+ },
113
+ });
114
+ if (!result.data?.data) {
115
+ const errorResponse = result.error;
116
+ const errorMessage = errorResponse?.error?.message || result.response?.statusText || 'Unknown error';
117
+ this.error(t('commands.ods.create.error', 'Failed to create sandbox: {{message}}', {
118
+ message: errorMessage,
119
+ }));
120
+ }
121
+ let sandbox = result.data.data;
122
+ this.log('');
123
+ this.logger.info({ sandboxId: sandbox.id }, t('commands.ods.create.success', 'Sandbox created successfully'));
124
+ if (wait && sandbox.id) {
125
+ this.log('');
126
+ sandbox = await this.waitForSandbox(sandbox.id, pollInterval, timeout);
127
+ }
128
+ if (this.jsonEnabled()) {
129
+ return sandbox;
130
+ }
131
+ this.printSandboxSummary(sandbox);
132
+ return sandbox;
133
+ }
134
+ /**
135
+ * Builds the sandbox settings object with OCAPI and WebDAV permissions.
136
+ * @param setPermissions - Whether to set permissions for the client ID
137
+ * @returns Settings object or undefined if permissions should not be set
138
+ */
139
+ buildSettings(setPermissions) {
140
+ if (!setPermissions) {
141
+ return undefined;
142
+ }
143
+ const clientId = this.resolvedConfig.values.clientId;
144
+ if (!clientId) {
145
+ return undefined;
146
+ }
147
+ return {
148
+ ocapi: [
149
+ {
150
+ client_id: clientId,
151
+ resources: DEFAULT_OCAPI_RESOURCES,
152
+ },
153
+ ],
154
+ webdav: [
155
+ {
156
+ client_id: clientId,
157
+ permissions: DEFAULT_WEBDAV_PERMISSIONS,
158
+ },
159
+ ],
160
+ };
161
+ }
162
+ printSandboxSummary(sandbox) {
163
+ const ui = cliui({ width: process.stdout.columns || 80 });
164
+ ui.div({ text: '', padding: [0, 0, 0, 0] });
165
+ const fields = [
166
+ ['ID', sandbox.id],
167
+ ['Realm', sandbox.realm],
168
+ ['Instance', sandbox.instance],
169
+ ['State', sandbox.state],
170
+ ['Profile', sandbox.resourceProfile],
171
+ ['Hostname', sandbox.hostName],
172
+ ];
173
+ for (const [label, value] of fields) {
174
+ if (value !== undefined) {
175
+ ui.div({ text: `${label}:`, width: 15, padding: [0, 2, 0, 0] }, { text: value, padding: [0, 0, 0, 0] });
176
+ }
177
+ }
178
+ if (sandbox.links?.bm) {
179
+ ui.div({ text: '', padding: [0, 0, 0, 0] });
180
+ ui.div({ text: 'BM URL:', width: 15, padding: [0, 2, 0, 0] }, { text: sandbox.links.bm, padding: [0, 0, 0, 0] });
181
+ }
182
+ ux.stdout(ui.toString());
183
+ }
184
+ /**
185
+ * Sleep for a given number of milliseconds.
186
+ */
187
+ async sleep(ms) {
188
+ await new Promise((resolve) => {
189
+ setTimeout(resolve, ms);
190
+ });
191
+ }
192
+ /**
193
+ * Polls for sandbox status until it reaches a terminal state.
194
+ * @param sandboxId - The sandbox ID to poll
195
+ * @param pollIntervalSeconds - Interval between polls in seconds
196
+ * @param timeoutSeconds - Maximum time to wait (0 for no timeout)
197
+ * @returns The final sandbox state
198
+ */
199
+ async waitForSandbox(sandboxId, pollIntervalSeconds, timeoutSeconds) {
200
+ const startTime = Date.now();
201
+ const pollIntervalMs = pollIntervalSeconds * 1000;
202
+ const timeoutMs = timeoutSeconds * 1000;
203
+ this.log(t('commands.ods.create.waiting', 'Waiting for sandbox to be ready...'));
204
+ // Initial delay before first poll to allow the sandbox to be registered in the API
205
+ await this.sleep(pollIntervalMs);
206
+ while (true) {
207
+ // Check for timeout
208
+ if (timeoutSeconds > 0 && Date.now() - startTime > timeoutMs) {
209
+ this.error(t('commands.ods.create.timeout', 'Timeout waiting for sandbox after {{seconds}} seconds', {
210
+ seconds: String(timeoutSeconds),
211
+ }));
212
+ }
213
+ // eslint-disable-next-line no-await-in-loop
214
+ const result = await this.odsClient.GET('/sandboxes/{sandboxId}', {
215
+ params: {
216
+ path: { sandboxId },
217
+ },
218
+ });
219
+ if (!result.data?.data) {
220
+ this.error(t('commands.ods.create.pollError', 'Failed to fetch sandbox status: {{message}}', {
221
+ message: result.response?.statusText || 'Unknown error',
222
+ }));
223
+ }
224
+ const sandbox = result.data.data;
225
+ const currentState = sandbox.state;
226
+ // Log current state on each poll
227
+ const elapsed = Math.round((Date.now() - startTime) / 1000);
228
+ const state = currentState || 'unknown';
229
+ this.logger.info({ sandboxId, elapsed, state }, `[${elapsed}s] State: ${state}`);
230
+ // Check for terminal states
231
+ if (currentState && TERMINAL_STATES.has(currentState)) {
232
+ switch (currentState) {
233
+ case 'deleted': {
234
+ this.error(t('commands.ods.create.deleted', 'Sandbox was deleted'));
235
+ break;
236
+ }
237
+ case 'failed': {
238
+ this.error(t('commands.ods.create.failed', 'Sandbox creation failed'));
239
+ break;
240
+ }
241
+ case 'started': {
242
+ this.log('');
243
+ this.logger.info({ sandboxId }, t('commands.ods.create.ready', 'Sandbox is now ready'));
244
+ break;
245
+ }
246
+ }
247
+ return sandbox;
248
+ }
249
+ // Wait before next poll
250
+ // eslint-disable-next-line no-await-in-loop
251
+ await this.sleep(pollIntervalMs);
252
+ }
253
+ }
254
+ }
255
+ //# sourceMappingURL=create.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create.js","sourceRoot":"","sources":["../../../src/commands/ods/create.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import { OdsCommand } from '@salesforce/b2c-tooling-sdk/cli';
2
+ /**
3
+ * Command to delete an on-demand sandbox.
4
+ */
5
+ export default class OdsDelete extends OdsCommand<typeof OdsDelete> {
6
+ static args: {
7
+ sandboxId: import("@oclif/core/interfaces").Arg<string, Record<string, unknown>>;
8
+ };
9
+ static description: string;
10
+ static examples: string[];
11
+ static flags: {
12
+ force: import("@oclif/core/interfaces").BooleanFlag<boolean>;
13
+ };
14
+ run(): Promise<void>;
15
+ }
@@ -0,0 +1,86 @@
1
+ /*
2
+ * Copyright (c) 2025, Salesforce, Inc.
3
+ * SPDX-License-Identifier: Apache-2
4
+ * For full license text, see the license.txt file in the repo root or http://www.apache.org/licenses/LICENSE-2.0
5
+ */
6
+ import * as readline from 'node:readline';
7
+ import { Args, Flags } from '@oclif/core';
8
+ import { OdsCommand } from '@salesforce/b2c-tooling-sdk/cli';
9
+ import { t } from '../../i18n/index.js';
10
+ /**
11
+ * Simple confirmation prompt.
12
+ */
13
+ async function confirm(message) {
14
+ const rl = readline.createInterface({
15
+ input: process.stdin,
16
+ output: process.stderr,
17
+ });
18
+ return new Promise((resolve) => {
19
+ rl.question(`${message} `, (answer) => {
20
+ rl.close();
21
+ resolve(answer.toLowerCase() === 'y' || answer.toLowerCase() === 'yes');
22
+ });
23
+ });
24
+ }
25
+ /**
26
+ * Command to delete an on-demand sandbox.
27
+ */
28
+ export default class OdsDelete extends OdsCommand {
29
+ static args = {
30
+ sandboxId: Args.string({
31
+ description: 'Sandbox ID (UUID)',
32
+ required: true,
33
+ }),
34
+ };
35
+ static description = t('commands.ods.delete.description', 'Delete an on-demand sandbox');
36
+ static examples = [
37
+ '<%= config.bin %> <%= command.id %> abc12345-1234-1234-1234-abc123456789',
38
+ '<%= config.bin %> <%= command.id %> abc12345-1234-1234-1234-abc123456789 --force',
39
+ ];
40
+ static flags = {
41
+ force: Flags.boolean({
42
+ char: 'f',
43
+ description: 'Skip confirmation prompt',
44
+ default: false,
45
+ }),
46
+ };
47
+ async run() {
48
+ const sandboxId = this.args.sandboxId;
49
+ // Get sandbox details first to show in confirmation
50
+ const getResult = await this.odsClient.GET('/sandboxes/{sandboxId}', {
51
+ params: {
52
+ path: { sandboxId },
53
+ },
54
+ });
55
+ if (!getResult.data?.data) {
56
+ this.error(t('commands.ods.delete.notFound', 'Sandbox not found: {{sandboxId}}', { sandboxId }));
57
+ }
58
+ const sandbox = getResult.data.data;
59
+ const sandboxInfo = `${sandbox.realm}/${sandbox.instance || sandboxId}`;
60
+ // Confirm deletion unless --force is used
61
+ if (!this.flags.force) {
62
+ const confirmed = await confirm(t('commands.ods.delete.confirm', 'Are you sure you want to delete sandbox "{{sandboxInfo}}"? (y/n)', {
63
+ sandboxInfo,
64
+ }));
65
+ if (!confirmed) {
66
+ this.log(t('commands.ods.delete.cancelled', 'Deletion cancelled'));
67
+ return;
68
+ }
69
+ }
70
+ this.log(t('commands.ods.delete.deleting', 'Deleting sandbox {{sandboxInfo}}...', { sandboxInfo }));
71
+ const result = await this.odsClient.DELETE('/sandboxes/{sandboxId}', {
72
+ params: {
73
+ path: { sandboxId },
74
+ },
75
+ });
76
+ if (result.response.status !== 202) {
77
+ const errorResponse = result.error;
78
+ const errorMessage = errorResponse?.error?.message || result.response?.statusText || 'Unknown error';
79
+ this.error(t('commands.ods.delete.error', 'Failed to delete sandbox: {{message}}', {
80
+ message: errorMessage,
81
+ }));
82
+ }
83
+ this.log(t('commands.ods.delete.success', 'Sandbox deletion initiated. The sandbox will be removed shortly.'));
84
+ }
85
+ }
86
+ //# sourceMappingURL=delete.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"delete.js","sourceRoot":"","sources":["../../../src/commands/ods/delete.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ import { OdsCommand } from '@salesforce/b2c-tooling-sdk/cli';
2
+ import type { OdsComponents } from '@salesforce/b2c-tooling-sdk';
3
+ type SandboxModel = OdsComponents['schemas']['SandboxModel'];
4
+ /**
5
+ * Command to get details of a specific sandbox.
6
+ */
7
+ export default class OdsGet extends OdsCommand<typeof OdsGet> {
8
+ static args: {
9
+ sandboxId: import("@oclif/core/interfaces").Arg<string, Record<string, unknown>>;
10
+ };
11
+ static description: string;
12
+ static enableJsonFlag: boolean;
13
+ static examples: string[];
14
+ run(): Promise<SandboxModel>;
15
+ private printSandboxDetails;
16
+ }
17
+ export {};
@@ -0,0 +1,99 @@
1
+ /*
2
+ * Copyright (c) 2025, Salesforce, Inc.
3
+ * SPDX-License-Identifier: Apache-2
4
+ * For full license text, see the license.txt file in the repo root or http://www.apache.org/licenses/LICENSE-2.0
5
+ */
6
+ import { Args, ux } from '@oclif/core';
7
+ import cliui from 'cliui';
8
+ import { OdsCommand } from '@salesforce/b2c-tooling-sdk/cli';
9
+ import { t } from '../../i18n/index.js';
10
+ /**
11
+ * Command to get details of a specific sandbox.
12
+ */
13
+ export default class OdsGet extends OdsCommand {
14
+ static args = {
15
+ sandboxId: Args.string({
16
+ description: 'Sandbox ID (UUID)',
17
+ required: true,
18
+ }),
19
+ };
20
+ static description = t('commands.ods.get.description', 'Get details of a specific sandbox');
21
+ static enableJsonFlag = true;
22
+ static examples = [
23
+ '<%= config.bin %> <%= command.id %> abc12345-1234-1234-1234-abc123456789',
24
+ '<%= config.bin %> <%= command.id %> abc12345-1234-1234-1234-abc123456789 --json',
25
+ ];
26
+ async run() {
27
+ const sandboxId = this.args.sandboxId;
28
+ this.log(t('commands.ods.get.fetching', 'Fetching sandbox {{sandboxId}}...', { sandboxId }));
29
+ const result = await this.odsClient.GET('/sandboxes/{sandboxId}', {
30
+ params: {
31
+ path: { sandboxId },
32
+ },
33
+ });
34
+ if (!result.data?.data) {
35
+ this.error(t('commands.ods.get.error', 'Failed to fetch sandbox: {{message}}', {
36
+ message: result.response?.statusText || 'Sandbox not found',
37
+ }));
38
+ }
39
+ const sandbox = result.data.data;
40
+ if (this.jsonEnabled()) {
41
+ return sandbox;
42
+ }
43
+ this.printSandboxDetails(sandbox);
44
+ return sandbox;
45
+ }
46
+ printSandboxDetails(sandbox) {
47
+ const ui = cliui({ width: process.stdout.columns || 80 });
48
+ ui.div({ text: 'Sandbox Details', padding: [1, 0, 0, 0] });
49
+ ui.div({ text: '─'.repeat(50), padding: [0, 0, 0, 0] });
50
+ const fields = [
51
+ ['ID', sandbox.id],
52
+ ['Realm', sandbox.realm],
53
+ ['Instance', sandbox.instance],
54
+ ['State', sandbox.state],
55
+ ['Resource Profile', sandbox.resourceProfile],
56
+ ['Enabled', sandbox.enabled?.toString()],
57
+ ['Auto Scheduled', sandbox.autoScheduled?.toString()],
58
+ ['Hostname', sandbox.hostName],
59
+ ['Created At', sandbox.createdAt ? new Date(sandbox.createdAt).toLocaleString() : undefined],
60
+ ['Created By', sandbox.createdBy],
61
+ ['EOL', sandbox.eol ? new Date(sandbox.eol).toLocaleString() : undefined],
62
+ ['App Version', sandbox.versions?.app],
63
+ ['Web Version', sandbox.versions?.web],
64
+ ];
65
+ for (const [label, value] of fields) {
66
+ if (value !== undefined) {
67
+ ui.div({ text: `${label}:`, width: 20, padding: [0, 2, 0, 0] }, { text: value, padding: [0, 0, 0, 0] });
68
+ }
69
+ }
70
+ // Tags
71
+ if (sandbox.tags && sandbox.tags.length > 0) {
72
+ ui.div({ text: 'Tags:', width: 20, padding: [0, 2, 0, 0] }, { text: sandbox.tags.join(', '), padding: [0, 0, 0, 0] });
73
+ }
74
+ // Emails
75
+ if (sandbox.emails && sandbox.emails.length > 0) {
76
+ ui.div({ text: 'Emails:', width: 20, padding: [0, 2, 0, 0] }, { text: sandbox.emails.join(', '), padding: [0, 0, 0, 0] });
77
+ }
78
+ // Links
79
+ if (sandbox.links) {
80
+ ui.div({ text: '', padding: [0, 0, 0, 0] });
81
+ ui.div({ text: 'Links', padding: [1, 0, 0, 0] });
82
+ ui.div({ text: '─'.repeat(50), padding: [0, 0, 0, 0] });
83
+ const links = [
84
+ ['Business Manager', sandbox.links.bm],
85
+ ['OCAPI', sandbox.links.ocapi],
86
+ ['Impex', sandbox.links.impex],
87
+ ['Code', sandbox.links.code],
88
+ ['Logs', sandbox.links.logs],
89
+ ];
90
+ for (const [label, value] of links) {
91
+ if (value) {
92
+ ui.div({ text: `${label}:`, width: 20, padding: [0, 2, 0, 0] }, { text: value, padding: [0, 0, 0, 0] });
93
+ }
94
+ }
95
+ }
96
+ ux.stdout(ui.toString());
97
+ }
98
+ }
99
+ //# sourceMappingURL=get.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get.js","sourceRoot":"","sources":["../../../src/commands/ods/get.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ import { OdsCommand } from '@salesforce/b2c-tooling-sdk/cli';
2
+ import type { OdsComponents } from '@salesforce/b2c-tooling-sdk';
3
+ type UserInfoSpec = OdsComponents['schemas']['UserInfoSpec'];
4
+ type SystemInfoSpec = OdsComponents['schemas']['SystemInfoSpec'];
5
+ /**
6
+ * Combined response type for the info command.
7
+ */
8
+ interface OdsInfoResponse {
9
+ user: undefined | UserInfoSpec;
10
+ system: SystemInfoSpec | undefined;
11
+ }
12
+ /**
13
+ * Command to display ODS user and system information.
14
+ * Combines data from getUserInfo and getSystemInfo API endpoints.
15
+ */
16
+ export default class OdsInfo extends OdsCommand<typeof OdsInfo> {
17
+ static description: string;
18
+ static enableJsonFlag: boolean;
19
+ static examples: string[];
20
+ run(): Promise<OdsInfoResponse>;
21
+ private printInfo;
22
+ private renderArrayField;
23
+ private renderField;
24
+ private renderSystemInfo;
25
+ private renderUserInfo;
26
+ }
27
+ export {};
@@ -0,0 +1,109 @@
1
+ /*
2
+ * Copyright (c) 2025, Salesforce, Inc.
3
+ * SPDX-License-Identifier: Apache-2
4
+ * For full license text, see the license.txt file in the repo root or http://www.apache.org/licenses/LICENSE-2.0
5
+ */
6
+ import { ux } from '@oclif/core';
7
+ import cliui from 'cliui';
8
+ import { OdsCommand } from '@salesforce/b2c-tooling-sdk/cli';
9
+ import { t } from '../../i18n/index.js';
10
+ /**
11
+ * Command to display ODS user and system information.
12
+ * Combines data from getUserInfo and getSystemInfo API endpoints.
13
+ */
14
+ export default class OdsInfo extends OdsCommand {
15
+ static description = t('commands.ods.info.description', 'Display ODS user and system information');
16
+ static enableJsonFlag = true;
17
+ static examples = [
18
+ '<%= config.bin %> <%= command.id %>',
19
+ '<%= config.bin %> <%= command.id %> --json',
20
+ '<%= config.bin %> <%= command.id %> --host admin.eu01.dx.commercecloud.salesforce.com',
21
+ ];
22
+ async run() {
23
+ const host = this.odsHost;
24
+ this.log(t('commands.ods.info.fetching', 'Fetching ODS information from {{host}}...', { host }));
25
+ // Fetch user info and system info in parallel
26
+ const [userResult, systemResult] = await Promise.all([
27
+ this.odsClient.GET('/me', {}),
28
+ this.odsClient.GET('/system', {}),
29
+ ]);
30
+ if (!userResult.data) {
31
+ this.error(t('commands.ods.info.userError', 'Failed to fetch user info: {{message}}', {
32
+ message: userResult.response?.statusText || 'Unknown error',
33
+ }));
34
+ }
35
+ if (!systemResult.data) {
36
+ this.error(t('commands.ods.info.systemError', 'Failed to fetch system info: {{message}}', {
37
+ message: systemResult.response?.statusText || 'Unknown error',
38
+ }));
39
+ }
40
+ const response = {
41
+ user: userResult.data.data,
42
+ system: systemResult.data.data,
43
+ };
44
+ // In JSON mode, just return the data
45
+ if (this.jsonEnabled()) {
46
+ return response;
47
+ }
48
+ // Human-readable output
49
+ this.printInfo(response);
50
+ return response;
51
+ }
52
+ printInfo(info) {
53
+ const ui = cliui({ width: process.stdout.columns || 80 });
54
+ // User Info Section
55
+ ui.div({ text: 'User Information', padding: [1, 0, 0, 0] });
56
+ ui.div({ text: '─'.repeat(40), padding: [0, 0, 0, 0] });
57
+ this.renderUserInfo(ui, info.user);
58
+ // System Info Section
59
+ ui.div({ text: '', padding: [0, 0, 0, 0] });
60
+ ui.div({ text: 'System Information', padding: [1, 0, 0, 0] });
61
+ ui.div({ text: '─'.repeat(40), padding: [0, 0, 0, 0] });
62
+ this.renderSystemInfo(ui, info.system);
63
+ ux.stdout(ui.toString());
64
+ }
65
+ renderArrayField(ui, label, values) {
66
+ if (values && values.length > 0) {
67
+ this.renderField(ui, label, values.join(', '));
68
+ }
69
+ }
70
+ renderField(ui, label, value) {
71
+ ui.div({ text: label, width: 20, padding: [0, 2, 0, 0] }, { text: value, padding: [0, 0, 0, 0] });
72
+ }
73
+ renderSystemInfo(ui, system) {
74
+ if (!system)
75
+ return;
76
+ if (system.region) {
77
+ this.renderField(ui, 'Region:', system.region);
78
+ }
79
+ this.renderArrayField(ui, 'Inbound IPs:', system.inboundIps);
80
+ this.renderArrayField(ui, 'Outbound IPs:', system.outboundIps);
81
+ // Sandbox IPs with truncation
82
+ if (system.sandboxIps && system.sandboxIps.length > 0) {
83
+ const truncated = system.sandboxIps.length > 5;
84
+ const displayValue = system.sandboxIps.slice(0, 5).join(', ') + (truncated ? '...' : '');
85
+ this.renderField(ui, 'Sandbox IPs:', displayValue);
86
+ }
87
+ }
88
+ renderUserInfo(ui, user) {
89
+ if (!user)
90
+ return;
91
+ // User details
92
+ if (user.user) {
93
+ this.renderField(ui, 'Name:', user.user.name || '-');
94
+ this.renderField(ui, 'Email:', user.user.email || '-');
95
+ this.renderField(ui, 'User ID:', user.user.id || '-');
96
+ }
97
+ // Client info
98
+ if (user.client) {
99
+ this.renderField(ui, 'Client ID:', user.client.id || '-');
100
+ }
101
+ // Arrays with length checks
102
+ this.renderArrayField(ui, 'Roles:', user.roles);
103
+ this.renderArrayField(ui, 'Realms:', user.realms);
104
+ if (user.sandboxes && user.sandboxes.length > 0) {
105
+ this.renderField(ui, 'Sandboxes:', user.sandboxes.length.toString());
106
+ }
107
+ }
108
+ }
109
+ //# sourceMappingURL=info.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"info.js","sourceRoot":"","sources":["../../../src/commands/ods/info.ts"],"names":[],"mappings":"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"}