@salesforce/b2c-tooling-sdk 2.0.0 → 2.2.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 (97) hide show
  1. package/data/content-schemas/databindingcontext.json +1 -1
  2. package/data/guides/enrichment.json +2030 -1413
  3. package/data/guides/index.json +2637 -1807
  4. package/data/help/index.json +1537 -1457
  5. package/data/help-kb/enrichment.json +6122 -0
  6. package/data/help-kb/index.json +8496 -0
  7. package/data/job-steps/index.json +1 -1
  8. package/data/job-steps/job-steps.json +1 -1
  9. package/data/script-api/index.json +137 -22
  10. package/data/tooling/index.json +19 -10
  11. package/data/xsd/channels.xsd +47 -0
  12. package/data/xsd/index.json +6 -2
  13. package/data/xsd/library.xsd +31 -0
  14. package/data/xsd/order.xsd +317 -0
  15. package/data/xsd/search2.xsd +1 -1
  16. package/data/xsd/sort.xsd +17 -0
  17. package/data/xsd/storefronts.xsd +34 -48
  18. package/dist/esm/cli/config.js +7 -1
  19. package/dist/esm/cli/config.js.map +1 -1
  20. package/dist/esm/cli/mrt-command.d.ts +20 -4
  21. package/dist/esm/cli/mrt-command.js +28 -6
  22. package/dist/esm/cli/mrt-command.js.map +1 -1
  23. package/dist/esm/cli/webdav-command.d.ts +1 -0
  24. package/dist/esm/cli/webdav-command.js +1 -0
  25. package/dist/esm/cli/webdav-command.js.map +1 -1
  26. package/dist/esm/clients/index.d.ts +2 -0
  27. package/dist/esm/clients/index.js +1 -0
  28. package/dist/esm/clients/index.js.map +1 -1
  29. package/dist/esm/clients/middleware-registry.d.ts +9 -37
  30. package/dist/esm/clients/middleware-registry.js +62 -1
  31. package/dist/esm/clients/middleware-registry.js.map +1 -1
  32. package/dist/esm/clients/storefront-deployments.d.ts +1 -0
  33. package/dist/esm/clients/storefront-deployments.js.map +1 -1
  34. package/dist/esm/clients/storefront-environments.d.ts +56 -0
  35. package/dist/esm/clients/storefront-environments.generated.d.ts +208 -0
  36. package/dist/esm/clients/storefront-environments.generated.js +6 -0
  37. package/dist/esm/clients/storefront-environments.generated.js.map +1 -0
  38. package/dist/esm/clients/storefront-environments.js +24 -0
  39. package/dist/esm/clients/storefront-environments.js.map +1 -0
  40. package/dist/esm/config/dw-json.d.ts +28 -0
  41. package/dist/esm/config/dw-json.js +47 -1
  42. package/dist/esm/config/dw-json.js.map +1 -1
  43. package/dist/esm/config/index.d.ts +2 -2
  44. package/dist/esm/config/index.js +1 -1
  45. package/dist/esm/config/index.js.map +1 -1
  46. package/dist/esm/config/resolver.js +12 -0
  47. package/dist/esm/config/resolver.js.map +1 -1
  48. package/dist/esm/config/sources/env-source.d.ts +10 -1
  49. package/dist/esm/config/sources/env-source.js +29 -1
  50. package/dist/esm/config/sources/env-source.js.map +1 -1
  51. package/dist/esm/config/types.d.ts +1 -1
  52. package/dist/esm/docs/search.js +3 -1
  53. package/dist/esm/docs/search.js.map +1 -1
  54. package/dist/esm/docs/types.d.ts +4 -1
  55. package/dist/esm/docs/types.js +1 -0
  56. package/dist/esm/docs/types.js.map +1 -1
  57. package/dist/esm/guidance/catalog.js +1 -1
  58. package/dist/esm/guidance/catalog.js.map +1 -1
  59. package/dist/esm/guidance/types.d.ts +6 -2
  60. package/dist/esm/guidance/types.js.map +1 -1
  61. package/dist/esm/operations/code/deploy.js +4 -0
  62. package/dist/esm/operations/code/deploy.js.map +1 -1
  63. package/dist/esm/operations/jobs/site-archive.d.ts +7 -0
  64. package/dist/esm/operations/jobs/site-archive.js.map +1 -1
  65. package/dist/esm/operations/mrt/deployment.d.ts +28 -1
  66. package/dist/esm/operations/mrt/deployment.js +17 -4
  67. package/dist/esm/operations/mrt/deployment.js.map +1 -1
  68. package/dist/esm/operations/mrt/env-var.d.ts +135 -0
  69. package/dist/esm/operations/mrt/env-var.js +203 -0
  70. package/dist/esm/operations/mrt/env-var.js.map +1 -1
  71. package/dist/esm/operations/mrt/index.d.ts +4 -4
  72. package/dist/esm/operations/mrt/index.js +2 -2
  73. package/dist/esm/operations/mrt/index.js.map +1 -1
  74. package/dist/esm/operations/mrt/push.d.ts +202 -0
  75. package/dist/esm/operations/mrt/push.js +280 -0
  76. package/dist/esm/operations/mrt/push.js.map +1 -1
  77. package/dist/esm/operations/mtls/index.d.ts +135 -0
  78. package/dist/esm/operations/mtls/index.js +270 -0
  79. package/dist/esm/operations/mtls/index.js.map +1 -0
  80. package/dist/esm/safety/safety-guard.d.ts +1 -0
  81. package/dist/esm/safety/safety-guard.js +2 -1
  82. package/dist/esm/safety/safety-guard.js.map +1 -1
  83. package/dist/esm/safety/types.d.ts +2 -2
  84. package/dist/esm/scapi/index.d.ts +2 -2
  85. package/dist/esm/scapi/request.d.ts +13 -0
  86. package/dist/esm/scapi/request.js +49 -15
  87. package/dist/esm/scapi/request.js.map +1 -1
  88. package/dist/esm/scapi/runtime.d.ts +7 -0
  89. package/dist/esm/scapi/runtime.js +31 -1
  90. package/dist/esm/scapi/runtime.js.map +1 -1
  91. package/dist/esm/skills/sources.js +8 -0
  92. package/dist/esm/skills/sources.js.map +1 -1
  93. package/dist/esm/skills/types.d.ts +1 -1
  94. package/dist/esm/test-utils/config-isolation.js +2 -2
  95. package/dist/esm/test-utils/config-isolation.js.map +1 -1
  96. package/package.json +8 -2
  97. package/specs/storefront-environments-v1.yaml +272 -0
@@ -0,0 +1,270 @@
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
+ /**
7
+ * mTLS code upload certificate operations for B2C Commerce.
8
+ *
9
+ * Two-factor (mTLS) code upload to staging via eCDN works with a private
10
+ * certificate authority (CA):
11
+ *
12
+ * 1. Generate a CA certificate and key ({@link generateCaCertificate}).
13
+ * 2. Upload the CA to eCDN ({@link createCodeUploadCertificate}). The response
14
+ * includes the code upload hostname associated with the staging zone.
15
+ * 3. Issue one or more client certificates signed by the CA, bundled as PKCS12
16
+ * (`.p12`) files ({@link issueClientCertificate}). Each user (named after their
17
+ * Business Manager username) or CI pipeline (named after its API client ID)
18
+ * gets its own client certificate for WebDAV uploads; the CA itself is never
19
+ * used as a client certificate.
20
+ *
21
+ * The CA certificate may be valid for at most {@link MAX_CODE_UPLOAD_CA_VALIDITY_DAYS}
22
+ * days. To rotate, upload a new CA before the old one expires, re-issue client
23
+ * certificates from it, then delete the old CA.
24
+ *
25
+ * ## Usage
26
+ *
27
+ * ```typescript
28
+ * import {createCdnZonesClient} from '@salesforce/b2c-tooling-sdk/clients';
29
+ * import {
30
+ * createCodeUploadCertificate,
31
+ * generateCaCertificate,
32
+ * issueClientCertificate,
33
+ * } from '@salesforce/b2c-tooling-sdk/operations/mtls';
34
+ *
35
+ * const ca = generateCaCertificate({commonName: 'My Code Upload CA'});
36
+ * const client = createCdnZonesClient({shortCode, tenantId}, auth, {readWrite: true});
37
+ * const uploaded = await createCodeUploadCertificate(client, organizationId, {
38
+ * name: 'code-upload',
39
+ * certificatePem: ca.certificatePem,
40
+ * privateKeyPem: ca.privateKeyPem,
41
+ * });
42
+ *
43
+ * const clientCert = issueClientCertificate({ca, commonName: 'build-server'});
44
+ * await fs.writeFile('build-server.p12', clientCert.pkcs12);
45
+ * // clientCert.passphrase protects the .p12; uploaded.mtlsAssociatedCodeUploadHostname
46
+ * // is the WebDAV hostname to use with it.
47
+ * ```
48
+ *
49
+ * @module operations/mtls
50
+ */
51
+ import { generateKeyPairSync, randomBytes, X509Certificate } from 'node:crypto';
52
+ import forge from 'node-forge';
53
+ import { getApiErrorMessage } from '../../clients/error-utils.js';
54
+ import { getLogger } from '../../logging/logger.js';
55
+ /**
56
+ * Maximum validity eCDN accepts for an uploaded code upload CA certificate.
57
+ * Also the default validity for {@link generateCaCertificate}.
58
+ */
59
+ export const MAX_CODE_UPLOAD_CA_VALIDITY_DAYS = 365;
60
+ /** Default validity for a generated CA certificate. */
61
+ export const DEFAULT_CA_VALIDITY_DAYS = MAX_CODE_UPLOAD_CA_VALIDITY_DAYS;
62
+ /** Default validity for an issued client certificate (1 year). */
63
+ export const DEFAULT_CLIENT_VALIDITY_DAYS = 365;
64
+ /** Default RSA key size in bits. */
65
+ export const DEFAULT_KEY_SIZE = 2048;
66
+ const MS_PER_DAY = 24 * 60 * 60 * 1000;
67
+ /**
68
+ * Generates a random passphrase suitable for protecting a PKCS12 bundle.
69
+ *
70
+ * @returns A 32-character URL-safe random string
71
+ */
72
+ export function generatePassphrase() {
73
+ return randomBytes(24).toString('base64url');
74
+ }
75
+ // Backdate the start of validity slightly to tolerate clock skew between machines.
76
+ function backdatedNow() {
77
+ return new Date(Date.now() - 5 * 60 * 1000);
78
+ }
79
+ function assertPositiveInteger(value, name) {
80
+ if (!Number.isInteger(value) || value <= 0) {
81
+ throw new RangeError(`${name} must be a positive integer, got ${value}`);
82
+ }
83
+ }
84
+ // Node's native key generation is much faster than node-forge's pure JS implementation.
85
+ function generateRsaKeyPair(keySize) {
86
+ assertPositiveInteger(keySize, 'keySize');
87
+ const { privateKey } = generateKeyPairSync('rsa', {
88
+ modulusLength: keySize,
89
+ privateKeyEncoding: { type: 'pkcs1', format: 'pem' },
90
+ publicKeyEncoding: { type: 'spki', format: 'pem' },
91
+ });
92
+ const forgeKey = forge.pki.privateKeyFromPem(privateKey);
93
+ return { privateKey: forgeKey, publicKey: forge.pki.setRsaPublicKey(forgeKey.n, forgeKey.e) };
94
+ }
95
+ // Positive 128-bit serial (RFC 5280 requires a positive integer of at most 20 octets).
96
+ function randomSerialNumber() {
97
+ const bytes = randomBytes(16);
98
+ bytes[0] &= 0x7f;
99
+ bytes[0] |= 0x10;
100
+ return bytes.toString('hex');
101
+ }
102
+ function buildSubject(commonName, organization) {
103
+ const attrs = [{ name: 'commonName', value: commonName }];
104
+ if (organization) {
105
+ attrs.push({ name: 'organizationName', value: organization });
106
+ }
107
+ return attrs;
108
+ }
109
+ function formatSubject(cert) {
110
+ return cert.subject.attributes.map((a) => `${a.shortName ?? a.name}=${String(a.value)}`).join(', ');
111
+ }
112
+ function toGenerated(cert, privateKey) {
113
+ return {
114
+ certificatePem: forge.pki.certificateToPem(cert),
115
+ privateKeyPem: forge.pki.privateKeyToPem(privateKey),
116
+ serialNumber: cert.serialNumber,
117
+ subject: formatSubject(cert),
118
+ notBefore: cert.validity.notBefore,
119
+ notAfter: cert.validity.notAfter,
120
+ };
121
+ }
122
+ /**
123
+ * Generates a self-signed CA certificate for mTLS code upload.
124
+ *
125
+ * The CA is uploaded to eCDN with {@link createCodeUploadCertificate} and used
126
+ * to sign client certificates with {@link issueClientCertificate}. Keep the CA
127
+ * private key secret: anyone holding it can issue trusted client certificates.
128
+ *
129
+ * @param options - Subject, validity, and key size options
130
+ * @returns The CA certificate and private key as PEM strings
131
+ */
132
+ export function generateCaCertificate(options = {}) {
133
+ const validityDays = options.validityDays ?? DEFAULT_CA_VALIDITY_DAYS;
134
+ assertPositiveInteger(validityDays, 'validityDays');
135
+ if (validityDays > MAX_CODE_UPLOAD_CA_VALIDITY_DAYS) {
136
+ throw new RangeError(`validityDays must be at most ${MAX_CODE_UPLOAD_CA_VALIDITY_DAYS}; eCDN allows a maximum CA expiry of 1 year`);
137
+ }
138
+ const keys = generateRsaKeyPair(options.keySize ?? DEFAULT_KEY_SIZE);
139
+ const cert = forge.pki.createCertificate();
140
+ cert.publicKey = keys.publicKey;
141
+ cert.serialNumber = randomSerialNumber();
142
+ cert.validity.notBefore = backdatedNow();
143
+ cert.validity.notAfter = new Date(cert.validity.notBefore.getTime() + validityDays * MS_PER_DAY);
144
+ const subject = buildSubject(options.commonName ?? 'B2C Commerce Code Upload CA', options.organization);
145
+ cert.setSubject(subject);
146
+ cert.setIssuer(subject);
147
+ cert.setExtensions([
148
+ { name: 'basicConstraints', cA: true, critical: true },
149
+ { name: 'keyUsage', keyCertSign: true, cRLSign: true, critical: true },
150
+ { name: 'subjectKeyIdentifier' },
151
+ ]);
152
+ cert.sign(keys.privateKey, forge.md.sha256.create());
153
+ getLogger().debug({ subject: formatSubject(cert), notAfter: cert.validity.notAfter }, 'Generated mTLS CA certificate');
154
+ return toGenerated(cert, keys.privateKey);
155
+ }
156
+ /**
157
+ * Issues a client certificate signed by the given CA and bundles it as PKCS12.
158
+ *
159
+ * The resulting `.p12` is what the CLI, IDE extension, and other WebDAV clients
160
+ * use for two-factor code upload (`certificate` / `certificate-passphrase` in
161
+ * dw.json). This runs entirely locally; no API call is made.
162
+ *
163
+ * @param options - CA, subject, validity, and passphrase options
164
+ * @returns The client certificate, private key, and PKCS12 bundle
165
+ * @throws Error if the CA certificate/key are invalid, don't match, or the CA has expired
166
+ */
167
+ export function issueClientCertificate(options) {
168
+ const caCert = forge.pki.certificateFromPem(options.ca.certificatePem);
169
+ const caKey = forge.pki.privateKeyFromPem(options.ca.privateKeyPem);
170
+ const caPublicKey = caCert.publicKey;
171
+ if (caPublicKey.n.compareTo(caKey.n) !== 0) {
172
+ throw new Error('CA private key does not match the CA certificate');
173
+ }
174
+ const now = new Date();
175
+ if (caCert.validity.notAfter <= now) {
176
+ throw new Error(`CA certificate expired on ${caCert.validity.notAfter.toISOString()}`);
177
+ }
178
+ const validityDays = options.validityDays ?? DEFAULT_CLIENT_VALIDITY_DAYS;
179
+ assertPositiveInteger(validityDays, 'validityDays');
180
+ const keys = generateRsaKeyPair(options.keySize ?? DEFAULT_KEY_SIZE);
181
+ const cert = forge.pki.createCertificate();
182
+ cert.publicKey = keys.publicKey;
183
+ cert.serialNumber = randomSerialNumber();
184
+ cert.validity.notBefore = backdatedNow();
185
+ const requestedNotAfter = new Date(cert.validity.notBefore.getTime() + validityDays * MS_PER_DAY);
186
+ cert.validity.notAfter = requestedNotAfter < caCert.validity.notAfter ? requestedNotAfter : caCert.validity.notAfter;
187
+ cert.setSubject(buildSubject(options.commonName, options.organization));
188
+ cert.setIssuer(caCert.subject.attributes);
189
+ cert.setExtensions([
190
+ { name: 'basicConstraints', cA: false, critical: true },
191
+ { name: 'keyUsage', digitalSignature: true, keyEncipherment: true, critical: true },
192
+ { name: 'extKeyUsage', clientAuth: true },
193
+ { name: 'subjectKeyIdentifier' },
194
+ { name: 'authorityKeyIdentifier', keyIdentifier: caCert.generateSubjectKeyIdentifier().getBytes() },
195
+ ]);
196
+ cert.sign(caKey, forge.md.sha256.create());
197
+ const passphrase = options.passphrase ?? generatePassphrase();
198
+ // 3DES matches `openssl pkcs12 -export -legacy`, which Salesforce recommends so the
199
+ // bundle can be imported into macOS Keychain and other tools that lack AES PBES2 support.
200
+ const p12Asn1 = forge.pkcs12.toPkcs12Asn1(keys.privateKey, [cert, caCert], passphrase, {
201
+ algorithm: '3des',
202
+ friendlyName: options.commonName,
203
+ });
204
+ const pkcs12 = Buffer.from(forge.asn1.toDer(p12Asn1).getBytes(), 'binary');
205
+ getLogger().debug({ subject: formatSubject(cert), notAfter: cert.validity.notAfter }, 'Issued mTLS client certificate');
206
+ return { ...toGenerated(cert, keys.privateKey), pkcs12, passphrase };
207
+ }
208
+ /**
209
+ * Validates that a PEM certificate can be uploaded as a code upload CA.
210
+ *
211
+ * The CA certificate bundle is allowed a maximum expiry of 1 year
212
+ * ({@link MAX_CODE_UPLOAD_CA_VALIDITY_DAYS} days); before it expires it must be
213
+ * renewed to avoid disruption with code uploads.
214
+ *
215
+ * @param certificatePem - PEM-encoded CA certificate
216
+ * @throws Error if the certificate can't be parsed, isn't a CA, is expired, or is valid for more than 1 year
217
+ */
218
+ export function validateCodeUploadCaCertificate(certificatePem) {
219
+ let cert;
220
+ try {
221
+ cert = new X509Certificate(certificatePem);
222
+ }
223
+ catch (error) {
224
+ throw new Error(`Invalid CA certificate: ${error instanceof Error ? error.message : String(error)}`, {
225
+ cause: error,
226
+ });
227
+ }
228
+ if (!cert.ca) {
229
+ throw new Error('Certificate is not a CA certificate. Upload the CA that signs your client certificates, not a client certificate. ' +
230
+ 'If you generated it with OpenSSL, add -addext "basicConstraints=critical,CA:TRUE" -addext "keyUsage=critical,keyCertSign,cRLSign" ' +
231
+ '(the macOS default OpenSSL configuration omits them).');
232
+ }
233
+ const notBefore = new Date(cert.validFrom);
234
+ const notAfter = new Date(cert.validTo);
235
+ if (notAfter.getTime() <= Date.now()) {
236
+ throw new Error(`CA certificate expired on ${notAfter.toISOString()}`);
237
+ }
238
+ const validityDays = (notAfter.getTime() - notBefore.getTime()) / MS_PER_DAY;
239
+ if (validityDays > MAX_CODE_UPLOAD_CA_VALIDITY_DAYS) {
240
+ throw new Error(`CA certificate is valid for ${Math.floor(validityDays)} days; eCDN allows a maximum CA expiry of 1 year (${MAX_CODE_UPLOAD_CA_VALIDITY_DAYS} days).`);
241
+ }
242
+ }
243
+ /**
244
+ * Uploads a CA certificate to eCDN for two-factor (mTLS) code upload.
245
+ *
246
+ * Requires a read-write CDN Zones client (`sfcc.cdn-zones.rw` scope) for a
247
+ * staging organization. The certificate is checked locally first with
248
+ * {@link validateCodeUploadCaCertificate}.
249
+ *
250
+ * @param client - Read-write CDN Zones client
251
+ * @param organizationId - Organization ID (`f_ecom_<tenant>`)
252
+ * @param options - Certificate name and PEM contents
253
+ * @returns The created certificate, including `mtlsAssociatedCodeUploadHostname`
254
+ * @throws Error if the certificate is invalid or the API request fails
255
+ */
256
+ export async function createCodeUploadCertificate(client, organizationId, options) {
257
+ validateCodeUploadCaCertificate(options.certificatePem);
258
+ const { data, error, response } = await client.POST('/organizations/{organizationId}/mtls/code-upload-certificates', {
259
+ params: { path: { organizationId } },
260
+ body: { name: options.name, certificate: options.certificatePem, privateKey: options.privateKeyPem },
261
+ });
262
+ if (error) {
263
+ throw new Error(`Failed to create mTLS certificate: ${getApiErrorMessage(error, response)}`, { cause: error });
264
+ }
265
+ if (!data?.data) {
266
+ throw new Error('No certificate data returned from API');
267
+ }
268
+ return data.data;
269
+ }
270
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/operations/mtls/index.ts"],"names":[],"mappings":"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"}
@@ -4,6 +4,7 @@ import type { SafetyEvaluation, SafetyOperation, SafetyRule } from './types.js';
4
4
  * Extract a job ID from a URL path if it's a job execution endpoint.
5
5
  *
6
6
  * Matches patterns like:
7
+ * - `/operation/jobs/v1/organizations/org/jobs/catalog-import/executions`
7
8
  * - `/s/-/dw/data/v24_5/jobs/sfcc-site-archive-import/executions`
8
9
  * - `/jobs/sfcc-site-archive-export/executions`
9
10
  */
@@ -15,12 +15,13 @@
15
15
  import { Minimatch } from 'minimatch';
16
16
  import { getLogger } from '../logging/index.js';
17
17
  import { SafetyBlockedError, SafetyConfirmationRequired, checkLevelViolation, describeSafetyLevel, } from './safety-middleware.js';
18
- /** Regex to extract job ID from OCAPI job execution URLs. */
18
+ /** Regex to extract job ID from SCAPI and OCAPI job execution URLs. */
19
19
  const JOB_EXECUTION_PATTERN = /\/jobs\/([^/]+)\/executions/;
20
20
  /**
21
21
  * Extract a job ID from a URL path if it's a job execution endpoint.
22
22
  *
23
23
  * Matches patterns like:
24
+ * - `/operation/jobs/v1/organizations/org/jobs/catalog-import/executions`
24
25
  * - `/s/-/dw/data/v24_5/jobs/sfcc-site-archive-import/executions`
25
26
  * - `/jobs/sfcc-site-archive-export/executions`
26
27
  */
@@ -1 +1 @@
1
- {"version":3,"file":"safety-guard.js","sourceRoot":"","sources":["../../../src/safety/safety-guard.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;;;;;;;GAQG;AAEH,OAAO,EAAC,SAAS,EAAC,MAAM,WAAW,CAAC;AACpC,OAAO,EAAC,SAAS,EAAc,MAAM,qBAAqB,CAAC;AAE3D,OAAO,EACL,kBAAkB,EAClB,0BAA0B,EAC1B,mBAAmB,EACnB,mBAAmB,GACpB,MAAM,wBAAwB,CAAC;AAGhC,6DAA6D;AAC7D,MAAM,qBAAqB,GAAG,6BAA6B,CAAC;AAE5D;;;;;;GAMG;AACH,MAAM,UAAU,oBAAoB,CAAC,IAAY;IAC/C,MAAM,KAAK,GAAG,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC/C,OAAO,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;AACpB,CAAC;AAED;;;GAGG;AACH,SAAS,SAAS,CAAC,KAAa,EAAE,OAAe;IAC/C,MAAM,OAAO,GAAG,IAAI,SAAS,CAAC,OAAO,EAAE,EAAC,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAC,CAAC,CAAC;IAClE,OAAO,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AAC9B,CAAC;AAED;;GAEG;AACH,SAAS,oBAAoB,CAAC,IAAgB,EAAE,SAA0B;IACxE,kBAAkB;IAClB,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;QAC/B,IAAI,CAAC,SAAS,CAAC,SAAS;YAAE,OAAO,KAAK,CAAC;QACvC,OAAO,SAAS,CAAC,SAAS,CAAC,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;IACtD,CAAC;IAED,cAAc;IACd,IAAI,IAAI,CAAC,GAAG,KAAK,SAAS,EAAE,CAAC;QAC3B,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,oBAAoB,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;QACrG,IAAI,CAAC,KAAK;YAAE,OAAO,KAAK,CAAC;QACzB,OAAO,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;IACpC,CAAC;IAED,6BAA6B;IAC7B,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QAC5B,IAAI,CAAC,SAAS,CAAC,IAAI;YAAE,OAAO,KAAK,CAAC;QAClC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC;YAAE,OAAO,KAAK,CAAC;QACxD,6CAA6C;QAC7C,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YAC9B,IAAI,CAAC,SAAS,CAAC,MAAM;gBAAE,OAAO,KAAK,CAAC;YACpC,OAAO,SAAS,CAAC,SAAS,CAAC,MAAM,CAAC,WAAW,EAAE,EAAE,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC;QAC9E,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,gCAAgC;IAChC,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;QAC9B,IAAI,CAAC,SAAS,CAAC,MAAM;YAAE,OAAO,KAAK,CAAC;QACpC,OAAO,SAAS,CAAC,SAAS,CAAC,MAAM,CAAC,WAAW,EAAE,EAAE,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC;IAC9E,CAAC;IAED,iDAAiD;IACjD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,MAAM,OAAO,WAAW;IAIM;IAHpB,eAAe,GAAiB,EAAE,CAAC;IAC1B,MAAM,CAAS;IAEhC,YAA4B,MAAoB;QAApB,WAAM,GAAN,MAAM,CAAc;QAC9C,IAAI,CAAC,MAAM,GAAG,SAAS,EAAE,CAAC;IAC5B,CAAC;IAED;;;;;;;;;OASG;IACH,QAAQ,CAAC,SAA0B;QACjC,mDAAmD;QACnD,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;YACxC,IAAI,oBAAoB,CAAC,IAAI,EAAE,SAAS,CAAC,EAAE,CAAC;gBAC1C,MAAM,UAAU,GAAqB;oBACnC,MAAM,EAAE,OAAO;oBACf,MAAM,EAAE,wCAAwC;oBAChD,SAAS;oBACT,IAAI;iBACL,CAAC;gBACF,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAC,SAAS,EAAE,UAAU,EAAC,EAAE,8CAA8C,CAAC,CAAC;gBAC3F,OAAO,UAAU,CAAC;YACpB,CAAC;QACH,CAAC;QAED,2CAA2C;QAC3C,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;YACtB,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;gBACrC,IAAI,oBAAoB,CAAC,IAAI,EAAE,SAAS,CAAC,EAAE,CAAC;oBAC1C,MAAM,UAAU,GAAqB;wBACnC,MAAM,EAAE,IAAI,CAAC,MAAM;wBACnB,MAAM,EAAE,IAAI,CAAC,iBAAiB,CAAC,IAAI,EAAE,SAAS,CAAC;wBAC/C,SAAS;wBACT,IAAI;qBACL,CAAC;oBACF,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAC,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAC,EAAE,4BAA4B,CAAC,CAAC;oBACxF,OAAO,UAAU,CAAC;gBACpB,CAAC;YACH,CAAC;QACH,CAAC;QAED,yCAAyC;QACzC,OAAO,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC;IACzC,CAAC;IAED;;;;;OAKG;IACH,MAAM,CAAC,SAA0B;QAC/B,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;QAC5C,QAAQ,UAAU,CAAC,MAAM,EAAE,CAAC;YAC1B,KAAK,OAAO;gBACV,OAAO;YACT,KAAK,OAAO;gBACV,MAAM,IAAI,kBAAkB,CAAC,UAAU,CAAC,MAAM,EAAE,SAAS,CAAC,MAAM,IAAI,EAAE,EAAE,SAAS,CAAC,GAAG,IAAI,EAAE,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAClH,KAAK,SAAS;gBACZ,MAAM,IAAI,0BAA0B,CAAC,UAAU,CAAC,CAAC;QACrD,CAAC;IACH,CAAC;IAED;;;;;OAKG;IACH,gBAAgB,CAAC,SAA0B;QACzC,MAAM,IAAI,GAAG,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC;QAC7C,OAAO,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;IACvC,CAAC;IAED;;;;;;;;OAQG;IACH,kBAAkB,CAAC,IAAgB;QACjC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAChC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAC,IAAI,EAAC,EAAE,oCAAoC,CAAC,CAAC;QAEhE,OAAO,GAAG,EAAE;YACV,MAAM,GAAG,GAAG,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAC/C,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC;gBACb,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;gBACpC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAC,IAAI,EAAC,EAAE,sCAAsC,CAAC,CAAC;YACpE,CAAC;QACH,CAAC,CAAC;IACJ,CAAC;IAED;;OAEG;IACK,eAAe,CAAC,SAA0B;QAChD,uCAAuC;QACvC,IAAI,SAAS,CAAC,MAAM,IAAI,SAAS,CAAC,IAAI,EAAE,CAAC;YACvC,MAAM,SAAS,GAAG,mBAAmB,CAAC,SAAS,CAAC,MAAM,EAAE,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAC3F,IAAI,SAAS,EAAE,CAAC;gBACd,MAAM,MAAM,GAAiB,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC;gBACvE,MAAM,UAAU,GAAqB;oBACnC,MAAM;oBACN,MAAM,EAAE,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC;oBAC1C,SAAS;iBACV,CAAC;gBACF,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK,EAAC,EAAE,gCAAgC,CAAC,CAAC;gBACnG,OAAO,UAAU,CAAC;YACpB,CAAC;QACH,CAAC;QAED,0EAA0E;QAC1E,4EAA4E;QAC5E,MAAM,UAAU,GAAqB;YACnC,MAAM,EAAE,OAAO;YACf,MAAM,EAAE,kDAAkD;YAC1D,SAAS;SACV,CAAC;QACF,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAC,SAAS,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK,EAAC,EAAE,gCAAgC,CAAC,CAAC;QAC3F,OAAO,UAAU,CAAC;IACpB,CAAC;IAED;;OAEG;IACK,eAAe,CAAC,SAA0B;QAChD,IAAI,SAAS,CAAC,SAAS,EAAE,CAAC;YACxB,OAAO,EAAC,OAAO,EAAE,SAAS,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAC,CAAC;QACzD,CAAC;QACD,IAAI,SAAS,CAAC,KAAK,EAAE,CAAC;YACpB,OAAO,EAAC,GAAG,EAAE,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAC,CAAC;QACjD,CAAC;QACD,6CAA6C;QAC7C,OAAO;YACL,MAAM,EAAE,SAAS,CAAC,MAAM;YACxB,IAAI,EAAE,SAAS,CAAC,IAAI;YACpB,MAAM,EAAE,OAAO;SAChB,CAAC;IACJ,CAAC;IAED;;OAEG;IACK,iBAAiB,CAAC,IAAgB,EAAE,SAA0B;QACpE,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,OAAO,YAAY,SAAS,CAAC,SAAS,oCAAoC,IAAI,CAAC,OAAO,cAAc,IAAI,CAAC,MAAM,GAAG,CAAC;QACrH,CAAC;QACD,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;YACb,OAAO,QAAQ,SAAS,CAAC,KAAK,gCAAgC,IAAI,CAAC,GAAG,cAAc,IAAI,CAAC,MAAM,GAAG,CAAC;QACrG,CAAC;QACD,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,IAAI,SAAS,CAAC;QAC7C,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,IAAI,SAAS,CAAC;QACzC,OAAO,GAAG,MAAM,IAAI,IAAI,iCAAiC,IAAI,CAAC,MAAM,GAAG,CAAC;IAC1E,CAAC;IAED;;OAEG;IACK,kBAAkB,CAAC,SAA0B;QACnD,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,IAAI,SAAS,CAAC;QAC7C,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,IAAI,SAAS,CAAC;QACzC,MAAM,SAAS,GAAG,mBAAmB,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACzD,OAAO,GAAG,MAAM,IAAI,IAAI,4BAA4B,IAAI,CAAC,MAAM,CAAC,KAAK,MAAM,SAAS,EAAE,CAAC;IACzF,CAAC;CACF"}
1
+ {"version":3,"file":"safety-guard.js","sourceRoot":"","sources":["../../../src/safety/safety-guard.ts"],"names":[],"mappings":"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"}
@@ -16,7 +16,7 @@ export type SafetyAction = 'allow' | 'block' | 'confirm';
16
16
  *
17
17
  * Rules support three matcher types, all using glob patterns (via minimatch):
18
18
  * - `method` + `path`: Matches HTTP requests by method and URL path
19
- * - `job`: Matches job execution by job ID (extracted from OCAPI URLs)
19
+ * - `job`: Matches job execution by job ID (extracted from SCAPI or OCAPI URLs)
20
20
  * - `command`: Matches CLI commands by oclif command ID (e.g., "sandbox:delete")
21
21
  *
22
22
  * @example
@@ -31,7 +31,7 @@ export interface SafetyRule {
31
31
  method?: string;
32
32
  /** URL path glob pattern (e.g., "/jobs/&#42;/executions"). Matched with minimatch. */
33
33
  path?: string;
34
- /** Job ID glob pattern. Matches OCAPI job execution URLs by job ID. */
34
+ /** Job ID glob pattern. Matches SCAPI and OCAPI job execution URLs by job ID. */
35
35
  job?: string;
36
36
  /** CLI command ID glob pattern (e.g., "sandbox:*", "ecdn:cache:purge"). */
37
37
  command?: string;
@@ -3,10 +3,10 @@ export { loadScapiSchemas, findScapiOperation, resolveScapiReference } from './c
3
3
  export type { ApiDocument, ScapiSchemaEntry, ScapiSchemaDocument } from './catalog.js';
4
4
  export { runScapiCode } from './runtime.js';
5
5
  export { createScapiAuth } from './auth-primitives.js';
6
- export type { ScapiCodeOptions } from './runtime.js';
6
+ export type { ScapiCodeOptions, ScapiRuntimeControl } from './runtime.js';
7
7
  export { loadBuiltinScapiSnippets, loadScapiSnippets, saveScapiSnippet, getScapiSnippetDirectory, initializeScapiSnippetStore, } from './snippets.js';
8
8
  export type { ScapiSnippet } from './snippets.js';
9
9
  export { createScapiRequest } from './request.js';
10
- export type { ScapiRequestOptions } from './request.js';
10
+ export type { ScapiRequestOptions, ScapiConfirmation } from './request.js';
11
11
  export { getScapiAuthInfo } from './authentication.js';
12
12
  export type { ScapiAuthType, ScapiAuthInfo, ScapiAuthDiagnostic } from './authentication.js';
@@ -2,6 +2,15 @@ import type { AuthStrategy } from '../auth/types.js';
2
2
  import { type MiddlewareRegistry } from '../clients/middleware-registry.js';
3
3
  import { type SafetyConfig } from '../safety/index.js';
4
4
  import { type ScapiSchemaDocument } from './catalog.js';
5
+ /** Exact, resolved request awaiting approval. Credentials are never included. */
6
+ export interface ScapiConfirmation {
7
+ operationId: string;
8
+ method: string;
9
+ url: string;
10
+ query: Record<string, unknown>;
11
+ body?: unknown;
12
+ reason: string;
13
+ }
5
14
  export interface ScapiRequestOptions {
6
15
  shortCode: string;
7
16
  tenantId: string;
@@ -10,6 +19,10 @@ export interface ScapiRequestOptions {
10
19
  safety: SafetyConfig;
11
20
  documents: ScapiSchemaDocument[];
12
21
  middlewareRegistry?: MiddlewareRegistry;
22
+ /** Resolve only after user approval; reject on decline/cancellation. Omit to block confirmations. */
23
+ confirm?: (request: ScapiConfirmation, signal: AbortSignal) => Promise<void>;
24
+ /** Called immediately before network dispatch, for tracking potentially applied writes. */
25
+ onDispatch?: () => void;
13
26
  }
14
27
  /** Build one execution's SCAPI request helper. Auth, policy, and responses stay in the host. */
15
28
  export declare function createScapiRequest(options: ScapiRequestOptions): (input: unknown, signal: AbortSignal) => Promise<unknown>;
@@ -18,14 +18,14 @@ export function createScapiRequest(options) {
18
18
  throw new Error('Invalid SCAPI shortCode.');
19
19
  const origin = `https://${options.shortCode}.api.commercecloud.salesforce.com`;
20
20
  const organizationId = toOrganizationId(options.tenantId);
21
- const guard = new SafetyGuard(options.safety);
22
21
  const documents = [...options.documents];
23
22
  let totalBytes = 0;
24
23
  return async (input, signal) => {
25
24
  signal.throwIfAborted();
26
25
  if (!input || typeof input !== 'object' || Array.isArray(input))
27
26
  throw new Error('Request must be an object.');
28
- const args = input;
27
+ // Detach the request from caller mutations while a confirmation is outstanding.
28
+ const args = structuredClone(input);
29
29
  if (Object.keys(args).some((key) => !['method', 'path', 'query', 'body'].includes(key)))
30
30
  throw new Error('Request accepts method, path, query, body only.');
31
31
  const method = typeof args.method === 'string' ? args.method.toUpperCase() : '';
@@ -99,10 +99,47 @@ export function createScapiRequest(options) {
99
99
  candidates,
100
100
  tenantScope: buildTenantScope(options.tenantId),
101
101
  };
102
+ const querySerializer = (values) => Object.entries(values)
103
+ .map(([name, value]) => {
104
+ const parameter = parameters.find((item) => item.in === 'query' && item.name === name);
105
+ return createQuerySerializer({
106
+ array: { style: parameter?.style ?? 'form', explode: parameter?.explode ?? true },
107
+ object: { style: parameter?.style ?? 'form', explode: parameter?.explode ?? true },
108
+ allowReserved: parameter?.allowReserved,
109
+ })({ [name]: value });
110
+ })
111
+ .filter(Boolean)
112
+ .join('&');
102
113
  // Use per-execution policy instead of the CLI's startup-bound safety provider.
103
114
  const url = origin + path;
104
115
  const pathname = new URL(url).pathname;
105
- guard.assert({ type: 'http', method, url, path: pathname, jobId: extractJobIdFromPath(pathname) });
116
+ // Each request owns its guard: an approval must not exempt concurrent requests.
117
+ const guard = new SafetyGuard(options.safety);
118
+ const safetyOperation = { type: 'http', method, url, path: pathname, jobId: extractJobIdFromPath(pathname) };
119
+ const evaluation = guard.evaluate(safetyOperation);
120
+ let approved = false;
121
+ if (evaluation.action === 'confirm' && options.confirm) {
122
+ await options.confirm(structuredClone({
123
+ operationId: operation.operationId,
124
+ method,
125
+ url,
126
+ query: queryValues,
127
+ body: args.body,
128
+ reason: evaluation.reason,
129
+ }), signal);
130
+ signal.throwIfAborted();
131
+ guard.temporarilyAllow(safetyOperation);
132
+ approved = true;
133
+ }
134
+ guard.assert(safetyOperation);
135
+ const queryString = querySerializer(queryValues);
136
+ const approvedUrl = new URL(url + (queryString ? `?${queryString}` : '')).href;
137
+ const approvedBody = args.body === undefined ? '' : JSON.stringify(args.body);
138
+ const checkApprovedRequest = async (request) => {
139
+ if (approved &&
140
+ (request.method !== method || request.url !== approvedUrl || (await request.clone().text()) !== approvedBody))
141
+ throw new Error('SCAPI_APPROVAL_MISMATCH: request changed after approval; no request sent.');
142
+ };
106
143
  let baseAuth;
107
144
  try {
108
145
  baseAuth = withScopes(typeof options.auth === 'function' ? options.auth() : options.auth, [
@@ -133,6 +170,9 @@ export function createScapiRequest(options) {
133
170
  headers: { Accept: 'application/json, text/*' },
134
171
  fetch: async (request) => {
135
172
  signal.throwIfAborted();
173
+ await checkApprovedRequest(request);
174
+ signal.throwIfAborted();
175
+ options.onDispatch?.();
136
176
  const response = await fetch(request, { signal, redirect: 'error' });
137
177
  const mediaType = response.headers.get('content-type');
138
178
  if (response.ok && mediaType && !isScapiTextMediaType(mediaType)) {
@@ -170,20 +210,14 @@ export function createScapiRequest(options) {
170
210
  exclude: ['cli-safety-guard'],
171
211
  }))
172
212
  client.use(middleware);
173
- client.use(createSafetyMiddleware(guard), createAuthMiddleware(auth));
213
+ client.use({
214
+ onRequest: async ({ request }) => {
215
+ await checkApprovedRequest(request);
216
+ },
217
+ }, createSafetyMiddleware(guard), createAuthMiddleware(auth));
174
218
  const result = await client.request(method, path, {
175
219
  params: { query: queryValues },
176
- querySerializer: (values) => Object.entries(values)
177
- .map(([name, value]) => {
178
- const parameter = parameters.find((item) => item.in === 'query' && item.name === name);
179
- return createQuerySerializer({
180
- array: { style: parameter?.style ?? 'form', explode: parameter?.explode ?? true },
181
- object: { style: parameter?.style ?? 'form', explode: parameter?.explode ?? true },
182
- allowReserved: parameter?.allowReserved,
183
- })({ [name]: value });
184
- })
185
- .filter(Boolean)
186
- .join('&'),
220
+ querySerializer,
187
221
  body: args.body,
188
222
  signal,
189
223
  redirect: 'error',
@@ -1 +1 @@
1
- {"version":3,"file":"request.js","sourceRoot":"","sources":["../../../src/scapi/request.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"request.js","sourceRoot":"","sources":["../../../src/scapi/request.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,11 @@
1
1
  import type { ScapiSchemaDocument } from './catalog.js';
2
2
  import { type ScapiAuthType } from './authentication.js';
3
3
  import { type ScapiSnippet } from './snippets.js';
4
+ /** Host-only controls for an execution retained while awaiting user input. */
5
+ export interface ScapiRuntimeControl {
6
+ pauseTimeout(): void;
7
+ resumeTimeout(): void;
8
+ }
4
9
  export interface ScapiCodeOptions {
5
10
  code: string;
6
11
  input?: unknown;
@@ -15,6 +20,8 @@ export interface ScapiCodeOptions {
15
20
  signal?: AbortSignal;
16
21
  timeoutMs?: number;
17
22
  maxOutputBytes?: number;
23
+ /** The host owns cancellation and cleanup while paused; approval may wait indefinitely. Never exposed to the child. */
24
+ onControl?: (control: ScapiRuntimeControl) => void;
18
25
  }
19
26
  /** Execute one JavaScript async function in a disposable Node process. */
20
27
  export declare function runScapiCode(options: ScapiCodeOptions): Promise<unknown>;
@@ -45,7 +45,25 @@ export async function runScapiCode(options) {
45
45
  child.kill('SIGKILL');
46
46
  };
47
47
  const cancel = () => finish(undefined, new Error('SCAPI_EXECUTION_CANCELLED: check any in-flight write before retrying.'));
48
- const timer = setTimeout(() => finish(undefined, new Error('SCAPI_EXECUTION_TIMEOUT: check any in-flight write before retrying.')), timeoutMs);
48
+ let remainingMs = timeoutMs;
49
+ let startedAt = performance.now();
50
+ const timedOut = () => finish(undefined, new Error('SCAPI_EXECUTION_TIMEOUT: check any in-flight write before retrying.'));
51
+ let timer = setTimeout(timedOut, remainingMs);
52
+ const control = {
53
+ pauseTimeout() {
54
+ if (settled || !timer)
55
+ return;
56
+ remainingMs = Math.max(0, remainingMs - (performance.now() - startedAt));
57
+ clearTimeout(timer);
58
+ timer = undefined;
59
+ },
60
+ resumeTimeout() {
61
+ if (settled || timer)
62
+ return;
63
+ startedAt = performance.now();
64
+ timer = setTimeout(timedOut, remainingMs);
65
+ },
66
+ };
49
67
  options.signal?.addEventListener('abort', cancel, { once: true });
50
68
  const drain = (chunk) => {
51
69
  outputBytes += chunk.length;
@@ -113,6 +131,17 @@ export async function runScapiCode(options) {
113
131
  active--;
114
132
  }
115
133
  });
134
+ try {
135
+ options.onControl?.(control);
136
+ }
137
+ catch (error) {
138
+ finish(undefined, error instanceof Error ? error : new Error(String(error)));
139
+ return;
140
+ }
141
+ if (options.signal?.aborted) {
142
+ cancel();
143
+ return;
144
+ }
116
145
  child.send({
117
146
  type: 'run',
118
147
  ...options,
@@ -121,6 +150,7 @@ export async function runScapiCode(options) {
121
150
  auth: undefined,
122
151
  snippets: undefined,
123
152
  signal: undefined,
153
+ onControl: undefined,
124
154
  maxOutputBytes: Math.min(options.maxOutputBytes ?? 24_000, 65_536),
125
155
  }, (error) => {
126
156
  if (error)