@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.
- package/README.md +222 -0
- package/bin/dev.cmd +3 -0
- package/bin/dev.js +17 -0
- package/bin/run.cmd +3 -0
- package/bin/run.js +17 -0
- package/dist/commands/_test/index.d.ts +6 -0
- package/dist/commands/_test/index.js +39 -0
- package/dist/commands/_test/index.js.map +1 -0
- package/dist/commands/auth/token.d.ts +16 -0
- package/dist/commands/auth/token.js +35 -0
- package/dist/commands/auth/token.js.map +1 -0
- package/dist/commands/code/activate.d.ts +33 -0
- package/dist/commands/code/activate.js +83 -0
- package/dist/commands/code/activate.js.map +1 -0
- package/dist/commands/code/delete.d.ts +33 -0
- package/dist/commands/code/delete.js +67 -0
- package/dist/commands/code/delete.js.map +1 -0
- package/dist/commands/code/deploy.d.ts +38 -0
- package/dist/commands/code/deploy.js +141 -0
- package/dist/commands/code/deploy.js.map +1 -0
- package/dist/commands/code/list.d.ts +8 -0
- package/dist/commands/code/list.js +64 -0
- package/dist/commands/code/list.js.map +1 -0
- package/dist/commands/code/watch.d.ts +34 -0
- package/dist/commands/code/watch.js +70 -0
- package/dist/commands/code/watch.js.map +1 -0
- package/dist/commands/docs/download.d.ts +35 -0
- package/dist/commands/docs/download.js +58 -0
- package/dist/commands/docs/download.js.map +1 -0
- package/dist/commands/docs/read.d.ts +29 -0
- package/dist/commands/docs/read.js +70 -0
- package/dist/commands/docs/read.js.map +1 -0
- package/dist/commands/docs/schema.d.ts +32 -0
- package/dist/commands/docs/schema.js +68 -0
- package/dist/commands/docs/schema.js.map +1 -0
- package/dist/commands/docs/search.d.ts +33 -0
- package/dist/commands/docs/search.js +102 -0
- package/dist/commands/docs/search.js.map +1 -0
- package/dist/commands/job/export.d.ts +50 -0
- package/dist/commands/job/export.js +270 -0
- package/dist/commands/job/export.js.map +1 -0
- package/dist/commands/job/import.d.ts +38 -0
- package/dist/commands/job/import.js +143 -0
- package/dist/commands/job/import.js.map +1 -0
- package/dist/commands/job/run.d.ts +45 -0
- package/dist/commands/job/run.js +205 -0
- package/dist/commands/job/run.js.map +1 -0
- package/dist/commands/job/search.d.ts +37 -0
- package/dist/commands/job/search.js +102 -0
- package/dist/commands/job/search.js.map +1 -0
- package/dist/commands/job/wait.d.ts +38 -0
- package/dist/commands/job/wait.js +85 -0
- package/dist/commands/job/wait.js.map +1 -0
- package/dist/commands/mrt/env/create.d.ts +41 -0
- package/dist/commands/mrt/env/create.js +226 -0
- package/dist/commands/mrt/env/create.js.map +1 -0
- package/dist/commands/mrt/env/delete.d.ts +34 -0
- package/dist/commands/mrt/env/delete.js +94 -0
- package/dist/commands/mrt/env/delete.js.map +1 -0
- package/dist/commands/mrt/env/var/delete.d.ts +34 -0
- package/dist/commands/mrt/env/var/delete.js +53 -0
- package/dist/commands/mrt/env/var/delete.js.map +1 -0
- package/dist/commands/mrt/env/var/list.d.ts +28 -0
- package/dist/commands/mrt/env/var/list.js +71 -0
- package/dist/commands/mrt/env/var/list.js.map +1 -0
- package/dist/commands/mrt/env/var/set.d.ts +35 -0
- package/dist/commands/mrt/env/var/set.js +84 -0
- package/dist/commands/mrt/env/var/set.js.map +1 -0
- package/dist/commands/mrt/push.d.ts +37 -0
- package/dist/commands/mrt/push.js +122 -0
- package/dist/commands/mrt/push.js.map +1 -0
- package/dist/commands/ods/create.d.ts +42 -0
- package/dist/commands/ods/create.js +255 -0
- package/dist/commands/ods/create.js.map +1 -0
- package/dist/commands/ods/delete.d.ts +15 -0
- package/dist/commands/ods/delete.js +86 -0
- package/dist/commands/ods/delete.js.map +1 -0
- package/dist/commands/ods/get.d.ts +17 -0
- package/dist/commands/ods/get.js +99 -0
- package/dist/commands/ods/get.js.map +1 -0
- package/dist/commands/ods/info.d.ts +27 -0
- package/dist/commands/ods/info.js +109 -0
- package/dist/commands/ods/info.js.map +1 -0
- package/dist/commands/ods/list.d.ts +31 -0
- package/dist/commands/ods/list.js +166 -0
- package/dist/commands/ods/list.js.map +1 -0
- package/dist/commands/ods/restart.d.ts +16 -0
- package/dist/commands/ods/restart.js +51 -0
- package/dist/commands/ods/restart.js.map +1 -0
- package/dist/commands/ods/start.d.ts +16 -0
- package/dist/commands/ods/start.js +51 -0
- package/dist/commands/ods/start.js.map +1 -0
- package/dist/commands/ods/stop.d.ts +16 -0
- package/dist/commands/ods/stop.js +51 -0
- package/dist/commands/ods/stop.js.map +1 -0
- package/dist/commands/scapi/custom/status.d.ts +81 -0
- package/dist/commands/scapi/custom/status.js +321 -0
- package/dist/commands/scapi/custom/status.js.map +1 -0
- package/dist/commands/scapi/schemas/get.d.ts +86 -0
- package/dist/commands/scapi/schemas/get.js +317 -0
- package/dist/commands/scapi/schemas/get.js.map +1 -0
- package/dist/commands/scapi/schemas/list.d.ts +48 -0
- package/dist/commands/scapi/schemas/list.js +148 -0
- package/dist/commands/scapi/schemas/list.js.map +1 -0
- package/dist/commands/sites/list.d.ts +10 -0
- package/dist/commands/sites/list.js +56 -0
- package/dist/commands/sites/list.js.map +1 -0
- package/dist/commands/slas/client/create.d.ts +38 -0
- package/dist/commands/slas/client/create.js +168 -0
- package/dist/commands/slas/client/create.js.map +1 -0
- package/dist/commands/slas/client/delete.d.ts +34 -0
- package/dist/commands/slas/client/delete.js +54 -0
- package/dist/commands/slas/client/delete.js.map +1 -0
- package/dist/commands/slas/client/get.d.ts +29 -0
- package/dist/commands/slas/client/get.js +51 -0
- package/dist/commands/slas/client/get.js.map +1 -0
- package/dist/commands/slas/client/list.d.ts +30 -0
- package/dist/commands/slas/client/list.js +64 -0
- package/dist/commands/slas/client/list.js.map +1 -0
- package/dist/commands/slas/client/open.d.ts +25 -0
- package/dist/commands/slas/client/open.js +56 -0
- package/dist/commands/slas/client/open.js.map +1 -0
- package/dist/commands/slas/client/update.d.ts +60 -0
- package/dist/commands/slas/client/update.js +183 -0
- package/dist/commands/slas/client/update.js.map +1 -0
- package/dist/commands/webdav/get.d.ts +41 -0
- package/dist/commands/webdav/get.js +61 -0
- package/dist/commands/webdav/get.js.map +1 -0
- package/dist/commands/webdav/ls.d.ts +17 -0
- package/dist/commands/webdav/ls.js +101 -0
- package/dist/commands/webdav/ls.js.map +1 -0
- package/dist/commands/webdav/mkdir.d.ts +19 -0
- package/dist/commands/webdav/mkdir.js +48 -0
- package/dist/commands/webdav/mkdir.js.map +1 -0
- package/dist/commands/webdav/put.d.ts +23 -0
- package/dist/commands/webdav/put.js +107 -0
- package/dist/commands/webdav/put.js.map +1 -0
- package/dist/commands/webdav/rm.d.ts +40 -0
- package/dist/commands/webdav/rm.js +67 -0
- package/dist/commands/webdav/rm.js.map +1 -0
- package/dist/commands/webdav/unzip.d.ts +15 -0
- package/dist/commands/webdav/unzip.js +48 -0
- package/dist/commands/webdav/unzip.js.map +1 -0
- package/dist/commands/webdav/zip.d.ts +15 -0
- package/dist/commands/webdav/zip.js +47 -0
- package/dist/commands/webdav/zip.js.map +1 -0
- package/dist/i18n/index.d.ts +29 -0
- package/dist/i18n/index.js +43 -0
- package/dist/i18n/index.js.map +1 -0
- package/dist/i18n/locales/de.d.ts +51 -0
- package/dist/i18n/locales/de.js +57 -0
- package/dist/i18n/locales/de.js.map +1 -0
- package/dist/i18n/locales/en.d.ts +118 -0
- package/dist/i18n/locales/en.js +124 -0
- package/dist/i18n/locales/en.js.map +1 -0
- package/dist/i18n/locales/index.d.ts +177 -0
- package/dist/i18n/locales/index.js +26 -0
- package/dist/i18n/locales/index.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.js +13 -0
- package/dist/index.js.map +1 -0
- package/dist/utils/scapi/schemas.d.ts +40 -0
- package/dist/utils/scapi/schemas.js +49 -0
- package/dist/utils/scapi/schemas.js.map +1 -0
- package/dist/utils/slas/client.d.ts +65 -0
- package/dist/utils/slas/client.js +146 -0
- package/dist/utils/slas/client.js.map +1 -0
- package/oclif.manifest.json +10942 -0
- 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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"}
|