@salesforce/b2c-tooling-sdk 2.1.0 → 2.3.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.
- package/data/content-schemas/databindingcontext.json +1 -1
- package/data/guides/enrichment.json +2887 -1480
- package/data/guides/index.json +3846 -1870
- package/data/help/index.json +1537 -1457
- package/data/help-kb/enrichment.json +6122 -0
- package/data/help-kb/index.json +8496 -0
- package/data/job-steps/index.json +1 -1
- package/data/job-steps/job-steps.json +1 -1
- package/data/script-api/index.json +137 -22
- package/data/tooling/index.json +22 -4
- package/data/xsd/channels.xsd +47 -0
- package/data/xsd/index.json +6 -2
- package/data/xsd/library.xsd +31 -0
- package/data/xsd/order.xsd +317 -0
- package/data/xsd/search2.xsd +1 -1
- package/data/xsd/sort.xsd +17 -0
- package/data/xsd/storefronts.xsd +34 -48
- package/dist/esm/auth/client-credentials.d.ts +43 -0
- package/dist/esm/auth/client-credentials.js +55 -0
- package/dist/esm/auth/client-credentials.js.map +1 -1
- package/dist/esm/auth/index.d.ts +2 -1
- package/dist/esm/auth/index.js +1 -1
- package/dist/esm/auth/index.js.map +1 -1
- package/dist/esm/auth/oauth.d.ts +3 -0
- package/dist/esm/auth/oauth.js +3 -3
- package/dist/esm/auth/oauth.js.map +1 -1
- package/dist/esm/auth/resolve.d.ts +2 -0
- package/dist/esm/auth/resolve.js +3 -2
- package/dist/esm/auth/resolve.js.map +1 -1
- package/dist/esm/auth/types.d.ts +5 -0
- package/dist/esm/auth/types.js +0 -5
- package/dist/esm/auth/types.js.map +1 -1
- package/dist/esm/cli/config.js +1 -0
- package/dist/esm/cli/config.js.map +1 -1
- package/dist/esm/cli/instance-command.d.ts +1 -0
- package/dist/esm/cli/mrt-command.d.ts +1 -0
- package/dist/esm/cli/oauth-command.d.ts +1 -0
- package/dist/esm/cli/oauth-command.js +8 -0
- package/dist/esm/cli/oauth-command.js.map +1 -1
- package/dist/esm/cli/ods-command.d.ts +1 -0
- package/dist/esm/cli/webdav-command.d.ts +1 -0
- package/dist/esm/clients/middleware-registry.d.ts +8 -36
- package/dist/esm/clients/middleware-registry.js +62 -1
- package/dist/esm/clients/middleware-registry.js.map +1 -1
- package/dist/esm/clients/slas-shopper.generated.d.ts +2 -1
- package/dist/esm/config/dw-json.d.ts +31 -0
- package/dist/esm/config/dw-json.js +47 -1
- package/dist/esm/config/dw-json.js.map +1 -1
- package/dist/esm/config/index.d.ts +2 -2
- package/dist/esm/config/index.js +1 -1
- package/dist/esm/config/index.js.map +1 -1
- package/dist/esm/config/mapping.js +7 -0
- package/dist/esm/config/mapping.js.map +1 -1
- package/dist/esm/config/resolved-config.js +1 -0
- package/dist/esm/config/resolved-config.js.map +1 -1
- package/dist/esm/config/sources/env-source.js +3 -0
- package/dist/esm/config/sources/env-source.js.map +1 -1
- package/dist/esm/config/types.d.ts +3 -0
- package/dist/esm/docs/search.js +4 -1
- package/dist/esm/docs/search.js.map +1 -1
- package/dist/esm/docs/types.d.ts +6 -1
- package/dist/esm/docs/types.js +1 -0
- package/dist/esm/docs/types.js.map +1 -1
- package/dist/esm/instance/index.js +1 -0
- package/dist/esm/instance/index.js.map +1 -1
- package/dist/esm/openshell/apply.d.ts +90 -0
- package/dist/esm/openshell/apply.js +225 -0
- package/dist/esm/openshell/apply.js.map +1 -0
- package/dist/esm/openshell/index.d.ts +30 -0
- package/dist/esm/openshell/index.js +34 -0
- package/dist/esm/openshell/index.js.map +1 -0
- package/dist/esm/openshell/setup.d.ts +94 -0
- package/dist/esm/openshell/setup.js +307 -0
- package/dist/esm/openshell/setup.js.map +1 -0
- package/dist/esm/operations/mtls/index.d.ts +135 -0
- package/dist/esm/operations/mtls/index.js +270 -0
- package/dist/esm/operations/mtls/index.js.map +1 -0
- package/dist/esm/scapi/auth-primitives.js +1 -0
- package/dist/esm/scapi/auth-primitives.js.map +1 -1
- package/dist/esm/scapi/authentication.d.ts +19 -0
- package/dist/esm/scapi/authentication.js +65 -6
- package/dist/esm/scapi/authentication.js.map +1 -1
- package/dist/esm/scapi/catalog.d.ts +2 -0
- package/dist/esm/scapi/catalog.js.map +1 -1
- package/dist/esm/scapi/index.d.ts +7 -3
- package/dist/esm/scapi/index.js +4 -2
- package/dist/esm/scapi/index.js.map +1 -1
- package/dist/esm/scapi/live.d.ts +52 -0
- package/dist/esm/scapi/live.js +142 -0
- package/dist/esm/scapi/live.js.map +1 -0
- package/dist/esm/scapi/request.d.ts +6 -0
- package/dist/esm/scapi/request.js +83 -61
- package/dist/esm/scapi/request.js.map +1 -1
- package/dist/esm/scapi/shopper.d.ts +31 -0
- package/dist/esm/scapi/shopper.js +79 -0
- package/dist/esm/scapi/shopper.js.map +1 -0
- package/dist/esm/scapi/worker-source.js +1 -1
- package/dist/esm/slas/index.d.ts +1 -1
- package/dist/esm/slas/index.js +1 -1
- package/dist/esm/slas/index.js.map +1 -1
- package/dist/esm/slas/token.d.ts +10 -0
- package/dist/esm/slas/token.js +27 -0
- package/dist/esm/slas/token.js.map +1 -1
- package/package.json +11 -1
- package/specs/slas-shopper-v1.yaml +2 -1
|
@@ -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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"}
|
|
@@ -50,6 +50,7 @@ export function createScapiAuth(config, cwd = process.cwd()) {
|
|
|
50
50
|
clientId: config.clientId,
|
|
51
51
|
clientSecret: config.clientSecret,
|
|
52
52
|
accountManagerHost: config.accountManagerHost,
|
|
53
|
+
clientAuthMethod: config.clientAuthMethod,
|
|
53
54
|
scopes,
|
|
54
55
|
}).getTokenResponse(signal);
|
|
55
56
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth-primitives.js","sourceRoot":"","sources":["../../../src/scapi/auth-primitives.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"auth-primitives.js","sourceRoot":"","sources":["../../../src/scapi/auth-primitives.ts"],"names":[],"mappings":"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"}
|
|
@@ -8,6 +8,16 @@ export interface ScapiAuthInfo {
|
|
|
8
8
|
export declare function isScapiTextMediaType(mediaType: string): boolean;
|
|
9
9
|
/** Shared discovery/execution limit: code mode transports JSON requests and text responses. */
|
|
10
10
|
export declare function unsupportedScapiTransfer(document: ScapiSchemaDocument, operation: ApiDocument): string | undefined;
|
|
11
|
+
export type ScapiRequestAuth = {
|
|
12
|
+
type: 'admin' | 'shopper';
|
|
13
|
+
scopes: string[];
|
|
14
|
+
};
|
|
15
|
+
/**
|
|
16
|
+
* Choose the executor's authentication from the operation's declared security,
|
|
17
|
+
* in declaration order: Account Manager (AmOAuth2) or a guest shopper token.
|
|
18
|
+
* Undefined when no declared requirement is supported.
|
|
19
|
+
*/
|
|
20
|
+
export declare function selectScapiAuth(document: ScapiSchemaDocument, operation: ApiDocument): ScapiRequestAuth | undefined;
|
|
11
21
|
/** Identify supported authentication per operation, including mixed Admin/Shopper contracts. */
|
|
12
22
|
export declare function getScapiAuthInfo(document: ScapiSchemaDocument, operation: ApiDocument): ScapiAuthInfo;
|
|
13
23
|
/** Add discovery metadata and filter operations without modifying the bundled source documents. */
|
|
@@ -21,7 +31,16 @@ interface AuthContext {
|
|
|
21
31
|
api: string;
|
|
22
32
|
tenantScope: string;
|
|
23
33
|
candidates: string[][];
|
|
34
|
+
/** Set for guest Shopper requests. */
|
|
35
|
+
shopper?: {
|
|
36
|
+
siteId: string;
|
|
37
|
+
tokenScopes?: string[];
|
|
38
|
+
};
|
|
24
39
|
}
|
|
40
|
+
/** Scopes granted to a SLAS access token (JWT `scp` claim), when readable. */
|
|
41
|
+
export declare function shopperTokenScopes(token: string): string[] | undefined;
|
|
42
|
+
/** Explain SLAS token failures; token requests carry no per-call scopes. */
|
|
43
|
+
export declare function scapiShopperAuthError(error: unknown, context: AuthContext): Error;
|
|
25
44
|
/** Enrich known OAuth failures; leave network and unrelated errors intact. */
|
|
26
45
|
export declare function scapiAuthError(error: unknown, context: AuthContext): unknown;
|
|
27
46
|
/** HTTP status alone cannot prove that a grant is missing. Keep the original status and body. */
|
|
@@ -5,6 +5,8 @@
|
|
|
5
5
|
*/
|
|
6
6
|
import { ScapiUserAuthUnsupportedError } from '../clients/scapi-backend-utils.js';
|
|
7
7
|
import { resolveScapiReference, SCAPI_METHODS } from './catalog.js';
|
|
8
|
+
/** SLAS aggregate scope; tokens carry it verbatim, so it only satisfies operations that list it. */
|
|
9
|
+
const SHOPPER_STANDARD_SCOPE = 'sfcc.shopper-standard';
|
|
8
10
|
export function isScapiTextMediaType(mediaType) {
|
|
9
11
|
const type = mediaType.split(';')[0].trim().toLowerCase();
|
|
10
12
|
return type.startsWith('text/') || type === 'application/json' || type.endsWith('+json');
|
|
@@ -20,6 +22,26 @@ export function unsupportedScapiTransfer(document, operation) {
|
|
|
20
22
|
if (mediaTypes.length && !mediaTypes.some(isScapiTextMediaType))
|
|
21
23
|
return 'This operation returns a binary file. File downloads are not supported.';
|
|
22
24
|
}
|
|
25
|
+
/**
|
|
26
|
+
* Choose the executor's authentication from the operation's declared security,
|
|
27
|
+
* in declaration order: Account Manager (AmOAuth2) or a guest shopper token.
|
|
28
|
+
* Undefined when no declared requirement is supported.
|
|
29
|
+
*/
|
|
30
|
+
export function selectScapiAuth(document, operation) {
|
|
31
|
+
// SLAS itself exchanges credentials and tokens; auth.slas() exports shopper tokens instead.
|
|
32
|
+
if (['shopper/auth/v1', 'shopper/auth-admin/v1'].includes(document.entry.id))
|
|
33
|
+
return undefined;
|
|
34
|
+
const security = operation.security ?? document.schema.security ?? [];
|
|
35
|
+
for (const requirement of security) {
|
|
36
|
+
const [scheme, ...rest] = Object.keys(requirement);
|
|
37
|
+
if (rest.length || !Array.isArray(requirement[scheme]))
|
|
38
|
+
continue;
|
|
39
|
+
if (scheme === 'AmOAuth2')
|
|
40
|
+
return { type: 'admin', scopes: requirement[scheme] };
|
|
41
|
+
if (scheme === 'ShopperToken' || scheme === 'ShopperClientContextToken')
|
|
42
|
+
return { type: 'shopper', scopes: requirement[scheme] };
|
|
43
|
+
}
|
|
44
|
+
}
|
|
23
45
|
/** Identify supported authentication per operation, including mixed Admin/Shopper contracts. */
|
|
24
46
|
export function getScapiAuthInfo(document, operation) {
|
|
25
47
|
const security = operation.security ?? document.schema.security ?? [];
|
|
@@ -36,11 +58,10 @@ export function getScapiAuthInfo(document, operation) {
|
|
|
36
58
|
// OAuth endpoints can declare credentials in grant parameters instead of security schemes.
|
|
37
59
|
if (!types.size)
|
|
38
60
|
types.add(document.entry.id === 'shopper/auth/v1' ? 'shopper' : 'unknown');
|
|
39
|
-
const admin = security.some((requirement) => Array.isArray(requirement.AmOAuth2) && Object.keys(requirement).length === 1);
|
|
40
61
|
return {
|
|
41
62
|
types: [...types].sort(),
|
|
42
63
|
schemes,
|
|
43
|
-
executable:
|
|
64
|
+
executable: Boolean(selectScapiAuth(document, operation)) && !unsupportedScapiTransfer(document, operation),
|
|
44
65
|
};
|
|
45
66
|
}
|
|
46
67
|
/** Add discovery metadata and filter operations without modifying the bundled source documents. */
|
|
@@ -78,7 +99,41 @@ export function describeScapiSchemas(documents, authType) {
|
|
|
78
99
|
: [];
|
|
79
100
|
});
|
|
80
101
|
}
|
|
102
|
+
/** Scopes granted to a SLAS access token (JWT `scp` claim), when readable. */
|
|
103
|
+
export function shopperTokenScopes(token) {
|
|
104
|
+
try {
|
|
105
|
+
const claims = JSON.parse(Buffer.from(token.split('.')[1] ?? '', 'base64url').toString('utf8'));
|
|
106
|
+
return typeof claims?.scp === 'string' ? claims.scp.split(/\s+/).filter(Boolean) : undefined;
|
|
107
|
+
}
|
|
108
|
+
catch {
|
|
109
|
+
return undefined;
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
/** Explain SLAS token failures; token requests carry no per-call scopes. */
|
|
113
|
+
export function scapiShopperAuthError(error, context) {
|
|
114
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
115
|
+
if (/^SCAPI_/.test(message))
|
|
116
|
+
return error;
|
|
117
|
+
return new Error(`SCAPI_SHOPPER_AUTH_FAILED: SLAS guest login failed for ${context.operationId} (${context.api}), site ${context.shopper?.siteId}: ${message}. ` +
|
|
118
|
+
"Check slasClientId, slasClientSecret (private clients), the client's allowed channels, and, for public clients, that its redirect URIs allow http://localhost:3000/callback. Inspect configuration with config_inspect.", { cause: error });
|
|
119
|
+
}
|
|
81
120
|
function scopeAdvice(context) {
|
|
121
|
+
if (context.shopper) {
|
|
122
|
+
const accepted = context.candidates[0] ?? [];
|
|
123
|
+
const granted = context.shopper.tokenScopes;
|
|
124
|
+
const channel = `Check that site ${context.shopper.siteId} is an allowed channel for the client.`;
|
|
125
|
+
const advice = `SLAS scopes are configured on the client (slasClientId), not requested per call; the operation accepts any of: ${accepted.join(', ')}.`;
|
|
126
|
+
if (!granted)
|
|
127
|
+
return `${advice} ${channel}`;
|
|
128
|
+
const matched = granted.filter((scope) => accepted.includes(scope));
|
|
129
|
+
if (matched.length)
|
|
130
|
+
return `${advice} The shopper token grants ${matched.join(', ')}, so scopes are likely not the cause. ${channel}`;
|
|
131
|
+
// The gateway matches the token's scopes literally; the standard scope covers only operations that accept it.
|
|
132
|
+
const standard = granted.includes(SHOPPER_STANDARD_SCOPE)
|
|
133
|
+
? `${SHOPPER_STANDARD_SCOPE} does not cover this operation; add one of the accepted scopes to the client alongside it.`
|
|
134
|
+
: `The shopper token grants: ${granted.join(' ')}; add one of the accepted scopes to the client.`;
|
|
135
|
+
return `${advice} ${standard} ${channel}`;
|
|
136
|
+
}
|
|
82
137
|
const choices = context.candidates.map((candidate) => candidate.join(' + ')).join(' OR ');
|
|
83
138
|
return (`Account Manager client grants: ${choices}; tenant scope: ${context.tenantScope}. ` +
|
|
84
139
|
'Operation scopes are requested automatically; also check any extra configured scopes and instance access.');
|
|
@@ -115,7 +170,7 @@ export function scapiAuthResponse(status, context) {
|
|
|
115
170
|
if (status === 401)
|
|
116
171
|
return {
|
|
117
172
|
code: 'SCAPI_UNAUTHORIZED',
|
|
118
|
-
message: `${context.operationId}: API rejected the Admin token. Check token validity and the resolved tenant. ${scopeAdvice(context)}`,
|
|
173
|
+
message: `${context.operationId}: API rejected the ${context.shopper ? 'Shopper' : 'Admin'} token. Check token validity and the resolved tenant. ${scopeAdvice(context)}`,
|
|
119
174
|
};
|
|
120
175
|
if (status === 403)
|
|
121
176
|
return {
|
|
@@ -128,9 +183,13 @@ export function unsupportedScapiAuth(document, operation) {
|
|
|
128
183
|
const target = `${operation.operationId} (${document.entry.id})`;
|
|
129
184
|
const schemes = auth.schemes.join(' OR ') || 'OAuth grant parameters';
|
|
130
185
|
if (document.entry.id === 'shopper/auth-admin/v1')
|
|
131
|
-
return new Error(`SCAPI_AUTH_UNSUPPORTED: ${target} requires SLAS administration authentication and its declared admin roles.
|
|
186
|
+
return new Error(`SCAPI_AUTH_UNSUPPORTED: ${target} requires SLAS administration authentication and its declared admin roles. Use the SLAS administration CLI/SDK. A SLAS Shopper client is not an admin credential.`);
|
|
187
|
+
if (document.entry.id === 'shopper/auth/v1')
|
|
188
|
+
return new Error(`SCAPI_AUTH_UNSUPPORTED: ${target} is a SLAS login/token endpoint. Shopper APIs authenticate automatically as a guest; use auth.slas() to export a shopper token for an external client.`);
|
|
189
|
+
if (auth.schemes.includes('RegisteredShopperToken'))
|
|
190
|
+
return new Error(`SCAPI_REGISTERED_SHOPPER_UNSUPPORTED: ${target} requires a registered shopper (${schemes}). This executor authenticates Shopper APIs as a guest only; use auth.slas({flow: 'registered', ...}) with an external client.`);
|
|
132
191
|
if (auth.types.includes('shopper'))
|
|
133
|
-
return new Error(`SCAPI_SHOPPER_AUTH_UNSUPPORTED: ${target} requires ${schemes}.
|
|
134
|
-
return new Error(`SCAPI_AUTH_UNSUPPORTED: ${target} declares ${schemes}; this executor supports AmOAuth2
|
|
192
|
+
return new Error(`SCAPI_SHOPPER_AUTH_UNSUPPORTED: ${target} requires ${schemes}. Trusted-system and trusted-agent on-behalf tokens are not supported by this executor; use a Shopper client/SDK with that flow.`);
|
|
193
|
+
return new Error(`SCAPI_AUTH_UNSUPPORTED: ${target} declares ${schemes}; this executor supports AmOAuth2 and guest Shopper tokens. Inspect the operation's security requirements before choosing a client.`);
|
|
135
194
|
}
|
|
136
195
|
//# sourceMappingURL=authentication.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"authentication.js","sourceRoot":"","sources":["../../../src/scapi/authentication.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAC,6BAA6B,EAAC,MAAM,mCAAmC,CAAC;AAChF,OAAO,EAAC,qBAAqB,EAAE,aAAa,EAA6C,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"authentication.js","sourceRoot":"","sources":["../../../src/scapi/authentication.ts"],"names":[],"mappings":"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"}
|
|
@@ -9,6 +9,8 @@ export interface ScapiSchemaEntry {
|
|
|
9
9
|
status: string;
|
|
10
10
|
file: string;
|
|
11
11
|
source: string;
|
|
12
|
+
/** Present on contracts fetched from the tenant's Schemas API; absent for the bundled corpus. */
|
|
13
|
+
origin?: 'live';
|
|
12
14
|
}
|
|
13
15
|
export interface ScapiSchemaDocument {
|
|
14
16
|
entry: ScapiSchemaEntry;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"catalog.js","sourceRoot":"","sources":["../../../src/scapi/catalog.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAC,YAAY,EAAC,MAAM,SAAS,CAAC;AACrC,OAAO,EAAC,aAAa,EAAC,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAC,OAAO,EAAE,OAAO,EAAE,GAAG,EAAC,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"catalog.js","sourceRoot":"","sources":["../../../src/scapi/catalog.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,10 @@
|
|
|
1
|
-
/** Bundled SCAPI contracts and local JavaScript execution with SDK-authenticated requests. @module scapi */
|
|
1
|
+
/** Bundled and live SCAPI contracts and local JavaScript execution with SDK-authenticated requests. @module scapi */
|
|
2
2
|
export { loadScapiSchemas, findScapiOperation, resolveScapiReference } from './catalog.js';
|
|
3
3
|
export type { ApiDocument, ScapiSchemaEntry, ScapiSchemaDocument } from './catalog.js';
|
|
4
|
+
export { ScapiLiveSchemaCache, createLiveScapiDocument, mergeScapiSchemas, scapiTenantKey } from './live.js';
|
|
5
|
+
export type { ScapiLiveSchemaCacheOptions, ScapiLiveSchemaLoadOptions, ScapiLiveSchemaLoadResult } from './live.js';
|
|
6
|
+
export { ScapiShopperSessions } from './shopper.js';
|
|
7
|
+
export type { ScapiShopperAuth, ScapiShopperConfig } from './shopper.js';
|
|
4
8
|
export { runScapiCode } from './runtime.js';
|
|
5
9
|
export { createScapiAuth } from './auth-primitives.js';
|
|
6
10
|
export type { ScapiCodeOptions, ScapiRuntimeControl } from './runtime.js';
|
|
@@ -8,5 +12,5 @@ export { loadBuiltinScapiSnippets, loadScapiSnippets, saveScapiSnippet, getScapi
|
|
|
8
12
|
export type { ScapiSnippet } from './snippets.js';
|
|
9
13
|
export { createScapiRequest } from './request.js';
|
|
10
14
|
export type { ScapiRequestOptions, ScapiConfirmation } from './request.js';
|
|
11
|
-
export { getScapiAuthInfo } from './authentication.js';
|
|
12
|
-
export type { ScapiAuthType, ScapiAuthInfo, ScapiAuthDiagnostic } from './authentication.js';
|
|
15
|
+
export { getScapiAuthInfo, selectScapiAuth } from './authentication.js';
|
|
16
|
+
export type { ScapiAuthType, ScapiAuthInfo, ScapiAuthDiagnostic, ScapiRequestAuth } from './authentication.js';
|
package/dist/esm/scapi/index.js
CHANGED
|
@@ -3,11 +3,13 @@
|
|
|
3
3
|
* SPDX-License-Identifier: Apache-2
|
|
4
4
|
* For full license text, see the license.txt file in the repo root or http://www.apache.org/licenses/LICENSE-2.0
|
|
5
5
|
*/
|
|
6
|
-
/** Bundled SCAPI contracts and local JavaScript execution with SDK-authenticated requests. @module scapi */
|
|
6
|
+
/** Bundled and live SCAPI contracts and local JavaScript execution with SDK-authenticated requests. @module scapi */
|
|
7
7
|
export { loadScapiSchemas, findScapiOperation, resolveScapiReference } from './catalog.js';
|
|
8
|
+
export { ScapiLiveSchemaCache, createLiveScapiDocument, mergeScapiSchemas, scapiTenantKey } from './live.js';
|
|
9
|
+
export { ScapiShopperSessions } from './shopper.js';
|
|
8
10
|
export { runScapiCode } from './runtime.js';
|
|
9
11
|
export { createScapiAuth } from './auth-primitives.js';
|
|
10
12
|
export { loadBuiltinScapiSnippets, loadScapiSnippets, saveScapiSnippet, getScapiSnippetDirectory, initializeScapiSnippetStore, } from './snippets.js';
|
|
11
13
|
export { createScapiRequest } from './request.js';
|
|
12
|
-
export { getScapiAuthInfo } from './authentication.js';
|
|
14
|
+
export { getScapiAuthInfo, selectScapiAuth } from './authentication.js';
|
|
13
15
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/scapi/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/scapi/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,qHAAqH;AACrH,OAAO,EAAC,gBAAgB,EAAE,kBAAkB,EAAE,qBAAqB,EAAC,MAAM,cAAc,CAAC;AAEzF,OAAO,EAAC,oBAAoB,EAAE,uBAAuB,EAAE,iBAAiB,EAAE,cAAc,EAAC,MAAM,WAAW,CAAC;AAE3G,OAAO,EAAC,oBAAoB,EAAC,MAAM,cAAc,CAAC;AAElD,OAAO,EAAC,YAAY,EAAC,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAC,eAAe,EAAC,MAAM,sBAAsB,CAAC;AAErD,OAAO,EACL,wBAAwB,EACxB,iBAAiB,EACjB,gBAAgB,EAChB,wBAAwB,EACxB,2BAA2B,GAC5B,MAAM,eAAe,CAAC;AAEvB,OAAO,EAAC,kBAAkB,EAAC,MAAM,cAAc,CAAC;AAEhD,OAAO,EAAC,gBAAgB,EAAE,eAAe,EAAC,MAAM,qBAAqB,CAAC"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import type { ScapiSchemasClient } from '../clients/scapi-schemas.js';
|
|
2
|
+
import type { ScapiSchemaDocument } from './catalog.js';
|
|
3
|
+
export interface ScapiLiveSchemaCacheOptions {
|
|
4
|
+
/** Age after which discovery refetches a contract; cached contracts never expire. Defaults to 30 minutes. */
|
|
5
|
+
ttlMs?: number;
|
|
6
|
+
/** Concurrent schema fetches per load. Defaults to 4. */
|
|
7
|
+
concurrency?: number;
|
|
8
|
+
}
|
|
9
|
+
export interface ScapiLiveSchemaLoadOptions {
|
|
10
|
+
/** Limit to one API id (family/name/version). */
|
|
11
|
+
api?: string;
|
|
12
|
+
/** Ignore cached listing and contracts. */
|
|
13
|
+
refresh?: boolean;
|
|
14
|
+
signal?: AbortSignal;
|
|
15
|
+
}
|
|
16
|
+
export interface ScapiLiveSchemaLoadResult {
|
|
17
|
+
documents: ScapiSchemaDocument[];
|
|
18
|
+
/** APIs listed by the tenant whose contract could not be fetched. */
|
|
19
|
+
failures: Array<{
|
|
20
|
+
api: string;
|
|
21
|
+
error: string;
|
|
22
|
+
}>;
|
|
23
|
+
}
|
|
24
|
+
/** Identify a tenant's live contracts; schemas differ by custom attributes and custom APIs. */
|
|
25
|
+
export declare function scapiTenantKey(shortCode: string, organizationId: string): string;
|
|
26
|
+
/** Validate a Schemas API response and describe it as a catalog document. */
|
|
27
|
+
export declare function createLiveScapiDocument(identity: {
|
|
28
|
+
apiFamily: string;
|
|
29
|
+
apiName: string;
|
|
30
|
+
apiVersion: string;
|
|
31
|
+
status?: string;
|
|
32
|
+
}, schema: unknown): ScapiSchemaDocument;
|
|
33
|
+
/** Bundled contracts with live contracts replacing any with the same id. */
|
|
34
|
+
export declare function mergeScapiSchemas(bundled: ScapiSchemaDocument[], live: ScapiSchemaDocument[]): ScapiSchemaDocument[];
|
|
35
|
+
/**
|
|
36
|
+
* Per-tenant cache of contracts from the SCAPI Schemas API, including tenant custom
|
|
37
|
+
* properties and custom APIs. Discovery loads it; execution reuses whatever it holds.
|
|
38
|
+
*/
|
|
39
|
+
export declare class ScapiLiveSchemaCache {
|
|
40
|
+
private readonly concurrency;
|
|
41
|
+
private readonly documents;
|
|
42
|
+
private readonly listings;
|
|
43
|
+
private readonly ttlMs;
|
|
44
|
+
constructor(options?: ScapiLiveSchemaCacheOptions);
|
|
45
|
+
/** All cached live contracts for a tenant, regardless of age. Never fetches. */
|
|
46
|
+
get(tenant: string): ScapiSchemaDocument[];
|
|
47
|
+
/** Fetch the tenant's listing and missing or expired contracts, then return the selected set. */
|
|
48
|
+
load(tenant: string, client: ScapiSchemasClient, organizationId: string, options?: ScapiLiveSchemaLoadOptions): Promise<ScapiLiveSchemaLoadResult>;
|
|
49
|
+
/** Record a contract fetched elsewhere (for example by scapi_schemas_list or inside an execution). */
|
|
50
|
+
put(tenant: string, document: ScapiSchemaDocument): void;
|
|
51
|
+
private list;
|
|
52
|
+
}
|