@salesforce/b2c-tooling-sdk 2.2.0 → 2.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (148) hide show
  1. package/data/guides/enrichment.json +1081 -0
  2. package/data/guides/index.json +1571 -36
  3. package/data/schemas/dw.schema.json +576 -0
  4. package/data/tooling/index.json +27 -9
  5. package/dist/esm/auth/client-credentials.d.ts +43 -0
  6. package/dist/esm/auth/client-credentials.js +55 -0
  7. package/dist/esm/auth/client-credentials.js.map +1 -1
  8. package/dist/esm/auth/index.d.ts +2 -1
  9. package/dist/esm/auth/index.js +1 -1
  10. package/dist/esm/auth/index.js.map +1 -1
  11. package/dist/esm/auth/oauth.d.ts +3 -0
  12. package/dist/esm/auth/oauth.js +3 -3
  13. package/dist/esm/auth/oauth.js.map +1 -1
  14. package/dist/esm/auth/resolve.d.ts +2 -0
  15. package/dist/esm/auth/resolve.js +3 -2
  16. package/dist/esm/auth/resolve.js.map +1 -1
  17. package/dist/esm/auth/types.d.ts +5 -0
  18. package/dist/esm/auth/types.js +0 -5
  19. package/dist/esm/auth/types.js.map +1 -1
  20. package/dist/esm/cli/base-command.d.ts +20 -1
  21. package/dist/esm/cli/base-command.js +57 -8
  22. package/dist/esm/cli/base-command.js.map +1 -1
  23. package/dist/esm/cli/command-search.d.ts +85 -0
  24. package/dist/esm/cli/command-search.js +147 -0
  25. package/dist/esm/cli/command-search.js.map +1 -0
  26. package/dist/esm/cli/config.d.ts +10 -1
  27. package/dist/esm/cli/config.js +17 -9
  28. package/dist/esm/cli/config.js.map +1 -1
  29. package/dist/esm/cli/index.d.ts +2 -0
  30. package/dist/esm/cli/index.js +2 -0
  31. package/dist/esm/cli/index.js.map +1 -1
  32. package/dist/esm/cli/instance-command.d.ts +2 -0
  33. package/dist/esm/cli/mrt-command.d.ts +4 -2
  34. package/dist/esm/cli/mrt-command.js +4 -4
  35. package/dist/esm/cli/mrt-command.js.map +1 -1
  36. package/dist/esm/cli/oauth-command.d.ts +2 -0
  37. package/dist/esm/cli/oauth-command.js +8 -0
  38. package/dist/esm/cli/oauth-command.js.map +1 -1
  39. package/dist/esm/cli/ods-command.d.ts +2 -0
  40. package/dist/esm/cli/webdav-command.d.ts +2 -0
  41. package/dist/esm/clients/custom-apis.d.ts +36 -2
  42. package/dist/esm/clients/custom-apis.js +57 -4
  43. package/dist/esm/clients/custom-apis.js.map +1 -1
  44. package/dist/esm/clients/index.d.ts +1 -1
  45. package/dist/esm/clients/index.js +1 -1
  46. package/dist/esm/clients/index.js.map +1 -1
  47. package/dist/esm/clients/slas-shopper.generated.d.ts +2 -1
  48. package/dist/esm/config/dw-json-schema.d.ts +14 -0
  49. package/dist/esm/config/dw-json-schema.js +265 -0
  50. package/dist/esm/config/dw-json-schema.js.map +1 -0
  51. package/dist/esm/config/dw-json.d.ts +3 -0
  52. package/dist/esm/config/dw-json.js.map +1 -1
  53. package/dist/esm/config/index.d.ts +6 -2
  54. package/dist/esm/config/index.js +4 -2
  55. package/dist/esm/config/index.js.map +1 -1
  56. package/dist/esm/config/mapping.d.ts +5 -0
  57. package/dist/esm/config/mapping.js +21 -1
  58. package/dist/esm/config/mapping.js.map +1 -1
  59. package/dist/esm/config/project-environment.d.ts +62 -0
  60. package/dist/esm/config/project-environment.js +113 -0
  61. package/dist/esm/config/project-environment.js.map +1 -1
  62. package/dist/esm/config/resolved-config.js +1 -0
  63. package/dist/esm/config/resolved-config.js.map +1 -1
  64. package/dist/esm/config/resolver.js +52 -8
  65. package/dist/esm/config/resolver.js.map +1 -1
  66. package/dist/esm/config/sources/dw-json-source.js +25 -3
  67. package/dist/esm/config/sources/dw-json-source.js.map +1 -1
  68. package/dist/esm/config/sources/env-source.d.ts +42 -8
  69. package/dist/esm/config/sources/env-source.js +86 -50
  70. package/dist/esm/config/sources/env-source.js.map +1 -1
  71. package/dist/esm/config/sources/index.d.ts +1 -1
  72. package/dist/esm/config/sources/index.js +1 -1
  73. package/dist/esm/config/sources/index.js.map +1 -1
  74. package/dist/esm/config/types.d.ts +10 -3
  75. package/dist/esm/docs/search.js +4 -1
  76. package/dist/esm/docs/search.js.map +1 -1
  77. package/dist/esm/docs/types.d.ts +5 -1
  78. package/dist/esm/guidance/bundle.d.ts +33 -0
  79. package/dist/esm/guidance/bundle.js +268 -0
  80. package/dist/esm/guidance/bundle.js.map +1 -0
  81. package/dist/esm/guidance/catalog.d.ts +8 -1
  82. package/dist/esm/guidance/catalog.js +48 -6
  83. package/dist/esm/guidance/catalog.js.map +1 -1
  84. package/dist/esm/guidance/index.d.ts +1 -0
  85. package/dist/esm/guidance/index.js +1 -0
  86. package/dist/esm/guidance/index.js.map +1 -1
  87. package/dist/esm/guidance/types.d.ts +17 -1
  88. package/dist/esm/guidance/types.js.map +1 -1
  89. package/dist/esm/index.d.ts +1 -1
  90. package/dist/esm/index.js +1 -1
  91. package/dist/esm/index.js.map +1 -1
  92. package/dist/esm/instance/index.js +1 -0
  93. package/dist/esm/instance/index.js.map +1 -1
  94. package/dist/esm/openshell/apply.d.ts +90 -0
  95. package/dist/esm/openshell/apply.js +225 -0
  96. package/dist/esm/openshell/apply.js.map +1 -0
  97. package/dist/esm/openshell/index.d.ts +30 -0
  98. package/dist/esm/openshell/index.js +34 -0
  99. package/dist/esm/openshell/index.js.map +1 -0
  100. package/dist/esm/openshell/setup.d.ts +94 -0
  101. package/dist/esm/openshell/setup.js +307 -0
  102. package/dist/esm/openshell/setup.js.map +1 -0
  103. package/dist/esm/scapi/auth-primitives.js +1 -0
  104. package/dist/esm/scapi/auth-primitives.js.map +1 -1
  105. package/dist/esm/scapi/authentication.d.ts +19 -0
  106. package/dist/esm/scapi/authentication.js +65 -6
  107. package/dist/esm/scapi/authentication.js.map +1 -1
  108. package/dist/esm/scapi/catalog.d.ts +5 -0
  109. package/dist/esm/scapi/catalog.js.map +1 -1
  110. package/dist/esm/scapi/index.d.ts +8 -3
  111. package/dist/esm/scapi/index.js +5 -2
  112. package/dist/esm/scapi/index.js.map +1 -1
  113. package/dist/esm/scapi/live.d.ts +52 -0
  114. package/dist/esm/scapi/live.js +142 -0
  115. package/dist/esm/scapi/live.js.map +1 -0
  116. package/dist/esm/scapi/local.d.ts +9 -0
  117. package/dist/esm/scapi/local.js +91 -0
  118. package/dist/esm/scapi/local.js.map +1 -0
  119. package/dist/esm/scapi/request.d.ts +6 -0
  120. package/dist/esm/scapi/request.js +84 -61
  121. package/dist/esm/scapi/request.js.map +1 -1
  122. package/dist/esm/scapi/shopper.d.ts +31 -0
  123. package/dist/esm/scapi/shopper.js +79 -0
  124. package/dist/esm/scapi/shopper.js.map +1 -0
  125. package/dist/esm/scapi/worker-source.js +2 -2
  126. package/dist/esm/slas/index.d.ts +1 -1
  127. package/dist/esm/slas/index.js +1 -1
  128. package/dist/esm/slas/index.js.map +1 -1
  129. package/dist/esm/slas/token.d.ts +10 -0
  130. package/dist/esm/slas/token.js +27 -0
  131. package/dist/esm/slas/token.js.map +1 -1
  132. package/dist/esm/telemetry/telemetry.d.ts +1 -0
  133. package/dist/esm/telemetry/telemetry.js +18 -1
  134. package/dist/esm/telemetry/telemetry.js.map +1 -1
  135. package/dist/esm/telemetry/types.d.ts +9 -0
  136. package/dist/esm/test-utils/config-isolation.js +12 -13
  137. package/dist/esm/test-utils/config-isolation.js.map +1 -1
  138. package/dist/esm/ux/agent-context.d.ts +69 -0
  139. package/dist/esm/ux/agent-context.js +133 -0
  140. package/dist/esm/ux/agent-context.js.map +1 -0
  141. package/dist/esm/ux/confirm.d.ts +27 -0
  142. package/dist/esm/ux/confirm.js +32 -0
  143. package/dist/esm/ux/confirm.js.map +1 -1
  144. package/dist/esm/ux/index.d.ts +2 -1
  145. package/dist/esm/ux/index.js +2 -1
  146. package/dist/esm/ux/index.js.map +1 -1
  147. package/package.json +8 -1
  148. package/specs/slas-shopper-v1.yaml +2 -1
@@ -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, replaced by live contracts, replaced by local contracts with the same id. */
34
+ export declare function mergeScapiSchemas(bundled: readonly ScapiSchemaDocument[], live: readonly ScapiSchemaDocument[], local?: readonly 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
+ }
@@ -0,0 +1,142 @@
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
+ const SCHEMAS_API = 'dx/scapi-schemas/v1';
7
+ const IDENTITY = /^[a-z0-9-]+$/i;
8
+ /** Identify a tenant's live contracts; schemas differ by custom attributes and custom APIs. */
9
+ export function scapiTenantKey(shortCode, organizationId) {
10
+ return `${shortCode.toLowerCase()}/${organizationId.toLowerCase()}`;
11
+ }
12
+ /** Validate a Schemas API response and describe it as a catalog document. */
13
+ export function createLiveScapiDocument(identity, schema) {
14
+ const { apiFamily, apiName, apiVersion } = identity;
15
+ if (![apiFamily, apiName, apiVersion].every((part) => typeof part === 'string' && IDENTITY.test(part)))
16
+ throw new Error('SCAPI_SCHEMA_INVALID: invalid schema identity.');
17
+ const document = schema;
18
+ if (!document ||
19
+ typeof document !== 'object' ||
20
+ !/^3\./.test(document.openapi) ||
21
+ !document.paths ||
22
+ typeof document.paths !== 'object' ||
23
+ Array.isArray(document.paths))
24
+ throw new Error('SCAPI_SCHEMA_INVALID: Expected an OpenAPI 3 contract with paths from the Schemas API.');
25
+ const id = `${apiFamily}/${apiName}/${apiVersion}`;
26
+ return {
27
+ entry: {
28
+ id,
29
+ apiFamily,
30
+ apiName,
31
+ apiVersion,
32
+ schemaVersion: document.info?.version ?? apiVersion,
33
+ status: identity.status ?? 'live',
34
+ file: '',
35
+ source: `https://{shortCode}.api.commercecloud.salesforce.com/${SCHEMAS_API}/organizations/{organizationId}/schemas/${id}`,
36
+ origin: 'live',
37
+ },
38
+ schema: document,
39
+ };
40
+ }
41
+ /** Bundled contracts, replaced by live contracts, replaced by local contracts with the same id. */
42
+ export function mergeScapiSchemas(bundled, live, local = []) {
43
+ const byId = new Map(bundled.map((document) => [document.entry.id, document]));
44
+ for (const document of [...live, ...local])
45
+ byId.set(document.entry.id, document);
46
+ return [...byId.values()];
47
+ }
48
+ /**
49
+ * Per-tenant cache of contracts from the SCAPI Schemas API, including tenant custom
50
+ * properties and custom APIs. Discovery loads it; execution reuses whatever it holds.
51
+ */
52
+ export class ScapiLiveSchemaCache {
53
+ concurrency;
54
+ documents = new Map();
55
+ listings = new Map();
56
+ ttlMs;
57
+ constructor(options = {}) {
58
+ this.ttlMs = options.ttlMs ?? 30 * 60_000;
59
+ this.concurrency = Math.max(1, options.concurrency ?? 4);
60
+ }
61
+ /** All cached live contracts for a tenant, regardless of age. Never fetches. */
62
+ get(tenant) {
63
+ return [...(this.documents.get(tenant)?.values() ?? [])].map((cached) => cached.value);
64
+ }
65
+ /** Fetch the tenant's listing and missing or expired contracts, then return the selected set. */
66
+ async load(tenant, client, organizationId, options = {}) {
67
+ const listing = await this.list(tenant, client, organizationId, options);
68
+ const selected = listing.filter((item) => !options.api || `${item.apiFamily}/${item.apiName}/${item.apiVersion}` === options.api);
69
+ const cached = this.documents.get(tenant) ?? new Map();
70
+ this.documents.set(tenant, cached);
71
+ const now = Date.now();
72
+ const documents = [];
73
+ const failures = [];
74
+ const pending = selected.filter((item) => {
75
+ const hit = cached.get(`${item.apiFamily}/${item.apiName}/${item.apiVersion}`);
76
+ if (!options.refresh && hit && now - hit.at < this.ttlMs) {
77
+ documents.push(hit.value);
78
+ return false;
79
+ }
80
+ return true;
81
+ });
82
+ const fetchOne = async (item) => {
83
+ const api = `${item.apiFamily}/${item.apiName}/${item.apiVersion}`;
84
+ try {
85
+ options.signal?.throwIfAborted();
86
+ const { data, error, response } = await client.GET('/organizations/{organizationId}/schemas/{apiFamily}/{apiName}/{apiVersion}', {
87
+ params: {
88
+ path: { organizationId, apiFamily: item.apiFamily, apiName: item.apiName, apiVersion: item.apiVersion },
89
+ query: { expand: 'custom_properties' },
90
+ },
91
+ signal: options.signal,
92
+ });
93
+ if (error)
94
+ throw new Error(`HTTP ${response.status}`);
95
+ const document = createLiveScapiDocument({ apiFamily: item.apiFamily, apiName: item.apiName, apiVersion: item.apiVersion, status: item.status }, data);
96
+ cached.set(api, { value: document, at: Date.now() });
97
+ documents.push(document);
98
+ }
99
+ catch (error) {
100
+ if (options.signal?.aborted)
101
+ throw error;
102
+ // A failed refetch keeps the previous contract available.
103
+ const previous = cached.get(api);
104
+ if (previous)
105
+ documents.push(previous.value);
106
+ failures.push({ api, error: error instanceof Error ? error.message : String(error) });
107
+ }
108
+ };
109
+ const queue = [...pending];
110
+ await Promise.all(Array.from({ length: Math.min(this.concurrency, queue.length) }, async () => {
111
+ while (queue.length)
112
+ await fetchOne(queue.shift());
113
+ }));
114
+ documents.sort((a, b) => a.entry.id.localeCompare(b.entry.id, 'en'));
115
+ return { documents, failures };
116
+ }
117
+ /** Record a contract fetched elsewhere (for example by scapi_schemas_list or inside an execution). */
118
+ put(tenant, document) {
119
+ const cached = this.documents.get(tenant) ?? new Map();
120
+ cached.set(document.entry.id, { value: document, at: Date.now() });
121
+ this.documents.set(tenant, cached);
122
+ }
123
+ async list(tenant, client, organizationId, options) {
124
+ const hit = this.listings.get(tenant);
125
+ if (!options.refresh && hit && Date.now() - hit.at < this.ttlMs)
126
+ return hit.value;
127
+ const { data, error, response } = await client.GET('/organizations/{organizationId}/schemas', {
128
+ params: { path: { organizationId } },
129
+ signal: options.signal,
130
+ });
131
+ if (error)
132
+ throw new Error(`SCAPI_LIVE_SCHEMAS_UNAVAILABLE: Schemas API listing failed (HTTP ${response.status}). ` +
133
+ 'The API client needs sfcc.scapi-schemas; omit schemas:"live" to search bundled contracts offline.');
134
+ const items = (data?.data ?? []).filter((item) => item.apiFamily &&
135
+ item.apiName &&
136
+ item.apiVersion &&
137
+ [item.apiFamily, item.apiName, item.apiVersion].every((part) => IDENTITY.test(part)));
138
+ this.listings.set(tenant, { value: items, at: Date.now() });
139
+ return items;
140
+ }
141
+ }
142
+ //# sourceMappingURL=live.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"live.js","sourceRoot":"","sources":["../../../src/scapi/live.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import type { ScapiSchemaDocument } from './catalog.js';
2
+ /**
3
+ * Load developer-supplied SCAPI contracts from OpenAPI 3 JSON files or directories of them.
4
+ * Each contract replaces the bundled or live contract with the same `family/name/version`,
5
+ * or adds a new API. Intended for beta and pre-release APIs.
6
+ *
7
+ * @throws When a file is not an identifiable OpenAPI 3 contract, or two files share an API id.
8
+ */
9
+ export declare function loadLocalScapiSchemas(paths: readonly string[]): ScapiSchemaDocument[];
@@ -0,0 +1,91 @@
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 { readdirSync, readFileSync, statSync } from 'node:fs';
7
+ import { join, resolve } from 'node:path';
8
+ const IDENTITY = /^[a-z0-9-]+$/i;
9
+ /** List `*.json` files under a directory, recursively, in a stable order. */
10
+ function jsonFiles(directory) {
11
+ return readdirSync(directory, { withFileTypes: true })
12
+ .sort((a, b) => a.name.localeCompare(b.name, 'en'))
13
+ .flatMap((entry) => {
14
+ const path = join(directory, entry.name);
15
+ if (entry.isDirectory())
16
+ return jsonFiles(path);
17
+ return entry.isFile() && entry.name.endsWith('.json') ? [path] : [];
18
+ });
19
+ }
20
+ /** Describe one local OpenAPI file; its identity comes from the `/<family>/<name>/<version>` server path. */
21
+ function localDocument(file) {
22
+ let document;
23
+ try {
24
+ document = JSON.parse(readFileSync(file, 'utf8'));
25
+ }
26
+ catch (error) {
27
+ throw new Error(`SCAPI_LOCAL_SCHEMA_INVALID: ${file}: ${error.message}`);
28
+ }
29
+ if (!document ||
30
+ typeof document !== 'object' ||
31
+ !/^3\./.test(document.openapi) ||
32
+ !document.paths ||
33
+ typeof document.paths !== 'object' ||
34
+ Array.isArray(document.paths))
35
+ throw new Error(`SCAPI_LOCAL_SCHEMA_INVALID: ${file}: expected an OpenAPI 3 contract with paths.`);
36
+ const server = document.servers?.[0]?.url;
37
+ let parts = [];
38
+ try {
39
+ parts = new URL(typeof server === 'string' ? server.replaceAll(/[{}]/g, '') : '').pathname
40
+ .split('/')
41
+ .filter(Boolean);
42
+ }
43
+ catch {
44
+ // Reported below.
45
+ }
46
+ if (parts.length !== 3 || !parts.every((part) => IDENTITY.test(part)))
47
+ throw new Error(`SCAPI_LOCAL_SCHEMA_INVALID: ${file}: servers[0].url must end in /<family>/<name>/<version> to identify the API.`);
48
+ const [apiFamily, apiName, apiVersion] = parts;
49
+ return {
50
+ entry: {
51
+ id: `${apiFamily}/${apiName}/${apiVersion}`,
52
+ apiFamily,
53
+ apiName,
54
+ apiVersion,
55
+ schemaVersion: document.info?.version ?? apiVersion,
56
+ status: 'local',
57
+ file,
58
+ source: file,
59
+ origin: 'local',
60
+ },
61
+ schema: document,
62
+ };
63
+ }
64
+ /**
65
+ * Load developer-supplied SCAPI contracts from OpenAPI 3 JSON files or directories of them.
66
+ * Each contract replaces the bundled or live contract with the same `family/name/version`,
67
+ * or adds a new API. Intended for beta and pre-release APIs.
68
+ *
69
+ * @throws When a file is not an identifiable OpenAPI 3 contract, or two files share an API id.
70
+ */
71
+ export function loadLocalScapiSchemas(paths) {
72
+ const byId = new Map();
73
+ for (const path of paths.map((value) => resolve(value))) {
74
+ let files;
75
+ try {
76
+ files = statSync(path).isDirectory() ? jsonFiles(path) : [path];
77
+ }
78
+ catch (error) {
79
+ throw new Error(`SCAPI_LOCAL_SCHEMA_INVALID: ${path}: ${error.message}`);
80
+ }
81
+ for (const file of files) {
82
+ const document = localDocument(file);
83
+ const previous = byId.get(document.entry.id);
84
+ if (previous)
85
+ throw new Error(`SCAPI_LOCAL_SCHEMA_INVALID: ${document.entry.id} is defined by both ${previous.entry.file} and ${file}.`);
86
+ byId.set(document.entry.id, document);
87
+ }
88
+ }
89
+ return [...byId.values()].sort((a, b) => a.entry.id.localeCompare(b.entry.id, 'en'));
90
+ }
91
+ //# sourceMappingURL=local.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"local.js","sourceRoot":"","sources":["../../../src/scapi/local.ts"],"names":[],"mappings":"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"}
@@ -2,6 +2,7 @@ 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
+ import type { ScapiShopperAuth } from './shopper.js';
5
6
  /** Exact, resolved request awaiting approval. Credentials are never included. */
6
7
  export interface ScapiConfirmation {
7
8
  operationId: string;
@@ -15,7 +16,10 @@ export interface ScapiRequestOptions {
15
16
  shortCode: string;
16
17
  tenantId: string;
17
18
  siteId?: string;
19
+ /** Account Manager auth for operations declaring AmOAuth2. */
18
20
  auth: AuthStrategy | (() => AuthStrategy);
21
+ /** Guest shopper auth for operations declaring ShopperToken. Omit to reject Shopper operations. */
22
+ shopperAuth?: ScapiShopperAuth;
19
23
  safety: SafetyConfig;
20
24
  documents: ScapiSchemaDocument[];
21
25
  middlewareRegistry?: MiddlewareRegistry;
@@ -23,6 +27,8 @@ export interface ScapiRequestOptions {
23
27
  confirm?: (request: ScapiConfirmation, signal: AbortSignal) => Promise<void>;
24
28
  /** Called immediately before network dispatch, for tracking potentially applied writes. */
25
29
  onDispatch?: () => void;
30
+ /** Called with each contract fetched from the Schemas API; `customProperties` reports expand=custom_properties. */
31
+ onSchema?: (document: ScapiSchemaDocument, customProperties: boolean) => void;
26
32
  }
27
33
  /** Build one execution's SCAPI request helper. Auth, policy, and responses stay in the host. */
28
34
  export declare function createScapiRequest(options: ScapiRequestOptions): (input: unknown, signal: AbortSignal) => Promise<unknown>;
@@ -11,7 +11,8 @@ import { globalMiddlewareRegistry } from '../clients/middleware-registry.js';
11
11
  import { SafetyGuard, extractJobIdFromPath } from '../safety/index.js';
12
12
  import { getLogger } from '../logging/logger.js';
13
13
  import { findScapiOperation, resolveScapiReference } from './catalog.js';
14
- import { scapiAuthError, scapiAuthResponse, unsupportedScapiAuth, unsupportedScapiTransfer, isScapiTextMediaType, } from './authentication.js';
14
+ import { createLiveScapiDocument } from './live.js';
15
+ import { scapiAuthError, scapiAuthResponse, scapiShopperAuthError, selectScapiAuth, shopperTokenScopes, unsupportedScapiAuth, unsupportedScapiTransfer, isScapiTextMediaType, } from './authentication.js';
15
16
  /** Build one execution's SCAPI request helper. Auth, policy, and responses stay in the host. */
16
17
  export function createScapiRequest(options) {
17
18
  if (!/^[a-z0-9-]+$/i.test(options.shortCode))
@@ -44,18 +45,21 @@ export function createScapiRequest(options) {
44
45
  const [, , apiName, apiVersion] = path.split('/');
45
46
  const id = `custom/${apiName}/${apiVersion}`;
46
47
  if (!documents.some((document) => document.entry.id === id))
47
- throw new Error(`SCAPI_CUSTOM_SCHEMA_REQUIRED: Fetch /dx/scapi-schemas/v1/organizations/{organizationId}/schemas/${id} ` +
48
- 'with scapi.request in this execution before calling its endpoints. Inspect the contract and declared authentication.');
48
+ throw new Error(`SCAPI_CUSTOM_SCHEMA_REQUIRED: Search it with scapi_search schemas:"live", or fetch ` +
49
+ `/dx/scapi-schemas/v1/organizations/{organizationId}/schemas/${id} with scapi.request in this execution, ` +
50
+ 'before calling its endpoints. Inspect the contract and declared authentication.');
49
51
  }
50
52
  const matched = findScapiOperation(documents, method, path);
51
53
  if (matched.parameters.organizationId && matched.parameters.organizationId !== organizationId)
52
54
  throw new Error('SCAPI target differs from resolved organizationId.');
53
55
  const { schema } = matched.document;
54
56
  const { operation } = matched;
55
- const security = operation.security ?? schema.security ?? [];
56
- const admin = security.find((requirement) => Array.isArray(requirement.AmOAuth2) && Object.keys(requirement).length === 1);
57
- if (!admin)
57
+ const selected = selectScapiAuth(matched.document, operation);
58
+ if (!selected)
58
59
  throw unsupportedScapiAuth(matched.document, operation);
60
+ const shopper = selected.type === 'shopper';
61
+ if (shopper && !options.shopperAuth)
62
+ throw new Error(`SCAPI_SHOPPER_AUTH_UNAVAILABLE: ${operation.operationId} (${matched.document.entry.id}) is a Shopper API and this host provides Admin authentication only.`);
59
63
  const transferLimit = unsupportedScapiTransfer(matched.document, operation);
60
64
  if (transferLimit)
61
65
  throw new Error(`SCAPI_TRANSFER_UNSUPPORTED: ${operation.operationId}. ${transferLimit} Use a file-capable HTTP client.`);
@@ -87,17 +91,22 @@ export function createScapiRequest(options) {
87
91
  if (Buffer.byteLength(JSON.stringify(args.body)) > 1_048_576)
88
92
  throw new Error('SCAPI_REQUEST_TOO_LARGE');
89
93
  }
90
- const scopes = admin.AmOAuth2;
94
+ const { scopes } = selected;
91
95
  // SCAPI standard contracts list ro/rw domain alternatives together; reuse SDK scope negotiation.
92
- const alternatives = scopes.length === 2 && scopes.some((scope) => scopes.includes(`${scope}.rw`));
96
+ const alternatives = !shopper && scopes.length === 2 && scopes.some((scope) => scopes.includes(`${scope}.rw`));
93
97
  const candidates = alternatives
94
98
  ? [...scopes].sort((a, b) => Number(a.endsWith('.rw')) - Number(b.endsWith('.rw'))).map((scope) => [scope])
95
99
  : [scopes];
100
+ // A shopper token is issued for one site (SLAS channel).
101
+ const shopperSiteId = typeof queryValues.siteId === 'string' ? queryValues.siteId : options.siteId;
102
+ if (shopper && !shopperSiteId)
103
+ throw new Error(`SCAPI_ARGUMENT_INVALID: ${operation.operationId} is a Shopper API; set query.siteId or configure siteId for the selected project.`);
96
104
  const authContext = {
97
105
  operationId: operation.operationId,
98
106
  api: matched.document.entry.id,
99
107
  candidates,
100
108
  tenantScope: buildTenantScope(options.tenantId),
109
+ ...(shopper ? { shopper: { siteId: shopperSiteId } } : {}),
101
110
  };
102
111
  const querySerializer = (values) => Object.entries(values)
103
112
  .map(([name, value]) => {
@@ -140,31 +149,49 @@ export function createScapiRequest(options) {
140
149
  (request.method !== method || request.url !== approvedUrl || (await request.clone().text()) !== approvedBody))
141
150
  throw new Error('SCAPI_APPROVAL_MISMATCH: request changed after approval; no request sent.');
142
151
  };
143
- let baseAuth;
144
- try {
145
- baseAuth = withScopes(typeof options.auth === 'function' ? options.auth() : options.auth, [
146
- authContext.tenantScope,
147
- ]);
148
- }
149
- catch (error) {
150
- throw scapiAuthError(error, authContext);
151
- }
152
- const auth = {
153
- fetch: baseAuth.fetch.bind(baseAuth),
154
- getAuthorizationHeader: async () => {
155
- try {
156
- if (baseAuth.getAccessTokenForCascade)
157
- return `Bearer ${await baseAuth.getAccessTokenForCascade(candidates)}`;
158
- const scoped = withScopes(baseAuth, scopes);
159
- if (!scoped.getAuthorizationHeader)
160
- throw new Error('SCAPI_ADMIN_AUTH_UNSUPPORTED: The configured auth strategy cannot provide an authorization header. Use Account Manager OAuth credentials or a supported JWT strategy.');
161
- return await scoped.getAuthorizationHeader();
162
- }
163
- catch (error) {
164
- throw scapiAuthError(error, authContext);
165
- }
166
- },
152
+ const adminAuth = () => {
153
+ let baseAuth;
154
+ try {
155
+ baseAuth = withScopes(typeof options.auth === 'function' ? options.auth() : options.auth, [
156
+ authContext.tenantScope,
157
+ ]);
158
+ }
159
+ catch (error) {
160
+ throw scapiAuthError(error, authContext);
161
+ }
162
+ return {
163
+ fetch: baseAuth.fetch.bind(baseAuth),
164
+ getAuthorizationHeader: async () => {
165
+ try {
166
+ if (baseAuth.getAccessTokenForCascade)
167
+ return `Bearer ${await baseAuth.getAccessTokenForCascade(candidates)}`;
168
+ const scoped = withScopes(baseAuth, scopes);
169
+ if (!scoped.getAuthorizationHeader)
170
+ throw new Error('SCAPI_ADMIN_AUTH_UNSUPPORTED: The configured auth strategy cannot provide an authorization header. Use Account Manager OAuth credentials or a supported JWT strategy.');
171
+ return await scoped.getAuthorizationHeader();
172
+ }
173
+ catch (error) {
174
+ throw scapiAuthError(error, authContext);
175
+ }
176
+ },
177
+ };
167
178
  };
179
+ const auth = shopper
180
+ ? {
181
+ fetch,
182
+ getAuthorizationHeader: async () => {
183
+ try {
184
+ const token = await options.shopperAuth.getAccessToken(shopperSiteId, signal);
185
+ authContext.shopper.tokenScopes = shopperTokenScopes(token);
186
+ return `Bearer ${token}`;
187
+ }
188
+ catch (error) {
189
+ signal.throwIfAborted();
190
+ throw scapiShopperAuthError(error, authContext);
191
+ }
192
+ },
193
+ }
194
+ : adminAuth();
168
195
  const client = createClient({
169
196
  baseUrl: origin,
170
197
  headers: { Accept: 'application/json, text/*' },
@@ -234,38 +261,34 @@ export function createScapiRequest(options) {
234
261
  }
235
262
  }
236
263
  const diagnostic = scapiAuthResponse(result.response.status, authContext);
237
- // Only authenticated live schema responses extend this execution's custom API catalog.
264
+ if (shopper && result.response.status === 401)
265
+ options.shopperAuth?.invalidate(shopperSiteId);
266
+ // Authenticated live schema responses extend this execution's catalog, replacing bundled contracts.
238
267
  if (result.response.ok &&
239
268
  method === 'GET' &&
240
269
  matched.document.entry.id === 'dx/scapi-schemas/v1' &&
241
- matched.parameters.apiFamily === 'custom') {
242
- const schema = data;
243
- if (!schema ||
244
- !/^3\./.test(schema.openapi) ||
245
- !schema.paths ||
246
- typeof schema.paths !== 'object' ||
247
- Array.isArray(schema.paths))
248
- throw new Error('SCAPI_CUSTOM_SCHEMA_INVALID: Expected an OpenAPI 3 contract with paths from the Schemas API.');
249
- const { apiName, apiVersion } = matched.parameters;
250
- const id = `custom/${apiName}/${apiVersion}`;
251
- const document = {
252
- entry: {
253
- id,
254
- apiFamily: 'custom',
255
- apiName,
256
- apiVersion,
257
- schemaVersion: schema.info?.version ?? apiVersion,
258
- status: 'live',
259
- file: '',
260
- source: url,
261
- },
262
- schema,
263
- };
264
- const previous = documents.findIndex((item) => item.entry.id === id);
265
- if (previous < 0)
266
- documents.push(document);
267
- else
268
- documents[previous] = document;
270
+ matched.parameters.apiFamily &&
271
+ matched.parameters.apiName &&
272
+ matched.parameters.apiVersion) {
273
+ const { apiFamily, apiName, apiVersion } = matched.parameters;
274
+ let document;
275
+ try {
276
+ document = createLiveScapiDocument({ apiFamily, apiName, apiVersion }, data);
277
+ }
278
+ catch (error) {
279
+ // Custom endpoints are unreachable without their contract; standard reads remain plain data.
280
+ if (apiFamily === 'custom')
281
+ throw error;
282
+ }
283
+ if (document) {
284
+ const previous = documents.findIndex((item) => item.entry.id === document.entry.id);
285
+ if (previous < 0)
286
+ documents.push(document);
287
+ // Developer-supplied local contracts take precedence over the tenant's.
288
+ else if (documents[previous].entry.origin !== 'local')
289
+ documents[previous] = document;
290
+ options.onSchema?.(document, String(queryValues.expand ?? '').includes('custom_properties'));
291
+ }
269
292
  }
270
293
  return { status: result.response.status, ok: result.response.ok, data, ...(diagnostic ? { diagnostic } : {}) };
271
294
  };
@@ -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":"AAAA;;;;GAIG;AAEH,OAAO,YAAY,EAAE,EAAC,qBAAqB,EAAC,MAAM,eAAe,CAAC;AAGlE,OAAO,EAAC,gBAAgB,EAAE,gBAAgB,EAAC,MAAM,2BAA2B,CAAC;AAC7E,OAAO,EAAC,UAAU,EAAC,MAAM,mCAAmC,CAAC;AAC7D,OAAO,EAAC,oBAAoB,EAAE,sBAAsB,EAAC,MAAM,0BAA0B,CAAC;AACtF,OAAO,EAAC,wBAAwB,EAA0B,MAAM,mCAAmC,CAAC;AACpG,OAAO,EAAC,WAAW,EAAE,oBAAoB,EAAoB,MAAM,oBAAoB,CAAC;AACxF,OAAO,EAAC,SAAS,EAAC,MAAM,sBAAsB,CAAC;AAC/C,OAAO,EAAC,kBAAkB,EAAE,qBAAqB,EAA6C,MAAM,cAAc,CAAC;AACnH,OAAO,EAAC,uBAAuB,EAAC,MAAM,WAAW,CAAC;AAElD,OAAO,EACL,cAAc,EACd,iBAAiB,EACjB,qBAAqB,EACrB,eAAe,EACf,kBAAkB,EAClB,oBAAoB,EACpB,wBAAwB,EACxB,oBAAoB,GACrB,MAAM,qBAAqB,CAAC;AA+B7B,gGAAgG;AAChG,MAAM,UAAU,kBAAkB,CAChC,OAA4B;IAE5B,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;IAC1F,MAAM,MAAM,GAAG,WAAW,OAAO,CAAC,SAAS,mCAAmC,CAAC;IAC/E,MAAM,cAAc,GAAG,gBAAgB,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC1D,MAAM,SAAS,GAAG,CAAC,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;IACzC,IAAI,UAAU,GAAG,CAAC,CAAC;IACnB,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE;QAC7B,MAAM,CAAC,cAAc,EAAE,CAAC;QACxB,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;QAC/G,gFAAgF;QAChF,MAAM,IAAI,GAAG,eAAe,CAAC,KAAK,CAA4B,CAAC;QAC/D,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;YACrF,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAC;QACrE,MAAM,MAAM,GAAG,OAAO,IAAI,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAChF,IAAI,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC;YAChF,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;QAC/C,IACE,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ;YAC7B,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;YAC1B,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;YAC1B,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;YAExB,MAAM,IAAI,KAAK,CAAC,uDAAuD,CAAC,CAAC;QAC3E,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,kBAAkB,EAAE,kBAAkB,CAAC,cAAc,CAAC,CAAC,CAAC;QAC1F,MAAM,OAAO,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC;QACzC,IAAI,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,GAAG,IAAI,IAAI,KAAK,IAAI,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;YACjH,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAC;QACrE,IAAI,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YAChC,MAAM,CAAC,EAAE,AAAD,EAAG,OAAO,EAAE,UAAU,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAClD,MAAM,EAAE,GAAG,UAAU,OAAO,IAAI,UAAU,EAAE,CAAC;YAC7C,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,CAAC;gBACzD,MAAM,IAAI,KAAK,CACb,qFAAqF;oBACnF,+DAA+D,EAAE,yCAAyC;oBAC1G,iFAAiF,CACpF,CAAC;QACN,CAAC;QACD,MAAM,OAAO,GAAG,kBAAkB,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;QAC5D,IAAI,OAAO,CAAC,UAAU,CAAC,cAAc,IAAI,OAAO,CAAC,UAAU,CAAC,cAAc,KAAK,cAAc;YAC3F,MAAM,IAAI,KAAK,CAAC,oDAAoD,CAAC,CAAC;QACxE,MAAM,EAAC,MAAM,EAAC,GAAG,OAAO,CAAC,QAAQ,CAAC;QAClC,MAAM,EAAC,SAAS,EAAC,GAAG,OAAO,CAAC;QAC5B,MAAM,QAAQ,GAAG,eAAe,CAAC,OAAO,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;QAC9D,IAAI,CAAC,QAAQ;YAAE,MAAM,oBAAoB,CAAC,OAAO,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;QACvE,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,KAAK,SAAS,CAAC;QAC5C,IAAI,OAAO,IAAI,CAAC,OAAO,CAAC,WAAW;YACjC,MAAM,IAAI,KAAK,CACb,mCAAmC,SAAS,CAAC,WAAW,KAAK,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,sEAAsE,CAC7J,CAAC;QACJ,MAAM,aAAa,GAAG,wBAAwB,CAAC,OAAO,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;QAC5E,IAAI,aAAa;YACf,MAAM,IAAI,KAAK,CACb,+BAA+B,SAAS,CAAC,WAAW,KAAK,aAAa,kCAAkC,CACzG,CAAC;QACJ,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC;QACzD,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;QAC7G,MAAM,WAAW,GAAG,EAAC,GAAG,KAAK,EAA4B,CAAC;QAC1D,MAAM,UAAU,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,UAAU,IAAI,EAAE,CAAC,EAAE,GAAG,CAAC,SAAS,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CACzG,qBAAqB,CAAC,KAAK,EAAE,MAAM,CAAC,CACrC,CAAC;QACF,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;YACnC,IAAI,SAAS,CAAC,EAAE,KAAK,OAAO,IAAI,SAAS,CAAC,IAAI,KAAK,QAAQ,IAAI,WAAW,CAAC,MAAM,KAAK,SAAS,IAAI,OAAO,CAAC,MAAM;gBAC/G,WAAW,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;YACtC,MAAM,KAAK,GACT,SAAS,CAAC,EAAE,KAAK,MAAM;gBACrB,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC;gBACpC,CAAC,CAAC,SAAS,CAAC,EAAE,KAAK,OAAO;oBACxB,CAAC,CAAC,WAAW,CAAC,SAAS,CAAC,IAAI,CAAC;oBAC7B,CAAC,CAAC,SAAS,CAAC;YAClB,IAAI,SAAS,CAAC,QAAQ,IAAI,KAAK,KAAK,SAAS;gBAC3C,MAAM,IAAI,KAAK,CACb,2BAA2B,SAAS,CAAC,WAAW,aAAa,SAAS,CAAC,EAAE,IAAI,SAAS,CAAC,IAAI,GAAG;oBAC5F,CAAC,SAAS,CAAC,IAAI,KAAK,QAAQ;wBAC1B,CAAC,CAAC,iEAAiE;wBACnE,CAAC,CAAC,sDAAsD,CAAC,CAC9D,CAAC;QACN,CAAC;QACD,MAAM,IAAI,GAAG,SAAS,CAAC,WAAW,CAAC,CAAC,CAAC,qBAAqB,CAAC,SAAS,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QACtG,IAAI,IAAI,EAAE,QAAQ,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS;YAAE,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC,CAAC;QACpH,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YAC5B,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC,kBAAkB,CAAC;gBAAE,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;YACzG,IAAI,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,SAAS;gBAAE,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;QAC3G,CAAC;QACD,MAAM,EAAC,MAAM,EAAC,GAAG,QAAQ,CAAC;QAC1B,iGAAiG;QACjG,MAAM,YAAY,GAAG,CAAC,OAAO,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,KAAK,KAAK,CAAC,CAAC,CAAC;QAC/G,MAAM,UAAU,GAAG,YAAY;YAC7B,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC;YAC3G,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;QACb,yDAAyD;QACzD,MAAM,aAAa,GAAG,OAAO,WAAW,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC;QACnG,IAAI,OAAO,IAAI,CAAC,aAAa;YAC3B,MAAM,IAAI,KAAK,CACb,2BAA2B,SAAS,CAAC,WAAW,mFAAmF,CACpI,CAAC;QACJ,MAAM,WAAW,GAAyC;YACxD,WAAW,EAAE,SAAS,CAAC,WAAW;YAClC,GAAG,EAAE,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;YAC9B,UAAU;YACV,WAAW,EAAE,gBAAgB,CAAC,OAAO,CAAC,QAAQ,CAAC;YAC/C,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAC,OAAO,EAAE,EAAC,MAAM,EAAE,aAAc,EAAC,EAAC,CAAC,CAAC,CAAC,EAAE,CAAC;SACxD,CAAC;QACF,MAAM,eAAe,GAAG,CAAC,MAA+B,EAAE,EAAE,CAC1D,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC;aACnB,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,EAAE;YACrB,MAAM,SAAS,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,KAAK,OAAO,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;YACvF,OAAO,qBAAqB,CAAC;gBAC3B,KAAK,EAAE,EAAC,KAAK,EAAE,SAAS,EAAE,KAAK,IAAI,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,IAAI,IAAI,EAAC;gBAC/E,MAAM,EAAE,EAAC,KAAK,EAAE,SAAS,EAAE,KAAK,IAAI,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,IAAI,IAAI,EAAC;gBAChF,aAAa,EAAE,SAAS,EAAE,aAAa;aACxC,CAAC,CAAC,EAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAC,CAAC,CAAC;QACtB,CAAC,CAAC;aACD,MAAM,CAAC,OAAO,CAAC;aACf,IAAI,CAAC,GAAG,CAAC,CAAC;QACf,+EAA+E;QAC/E,MAAM,GAAG,GAAG,MAAM,GAAG,IAAI,CAAC;QAC1B,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC;QACvC,gFAAgF;QAChF,MAAM,KAAK,GAAG,IAAI,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAC9C,MAAM,eAAe,GAAG,EAAC,IAAI,EAAE,MAAe,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,oBAAoB,CAAC,QAAQ,CAAC,EAAC,CAAC;QACpH,MAAM,UAAU,GAAG,KAAK,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC;QACnD,IAAI,QAAQ,GAAG,KAAK,CAAC;QACrB,IAAI,UAAU,CAAC,MAAM,KAAK,SAAS,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;YACvD,MAAM,OAAO,CAAC,OAAO,CACnB,eAAe,CAAC;gBACd,WAAW,EAAE,SAAS,CAAC,WAAW;gBAClC,MAAM;gBACN,GAAG;gBACH,KAAK,EAAE,WAAW;gBAClB,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,MAAM,EAAE,UAAU,CAAC,MAAM;aAC1B,CAAC,EACF,MAAM,CACP,CAAC;YACF,MAAM,CAAC,cAAc,EAAE,CAAC;YACxB,KAAK,CAAC,gBAAgB,CAAC,eAAe,CAAC,CAAC;YACxC,QAAQ,GAAG,IAAI,CAAC;QAClB,CAAC;QACD,KAAK,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC;QAC9B,MAAM,WAAW,GAAG,eAAe,CAAC,WAAW,CAAC,CAAC;QACjD,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,GAAG,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;QAC/E,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC9E,MAAM,oBAAoB,GAAG,KAAK,EAAE,OAAgB,EAAE,EAAE;YACtD,IACE,QAAQ;gBACR,CAAC,OAAO,CAAC,MAAM,KAAK,MAAM,IAAI,OAAO,CAAC,GAAG,KAAK,WAAW,IAAI,CAAC,MAAM,OAAO,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,YAAY,CAAC;gBAE7G,MAAM,IAAI,KAAK,CAAC,2EAA2E,CAAC,CAAC;QACjG,CAAC,CAAC;QACF,MAAM,SAAS,GAAG,GAAiB,EAAE;YACnC,IAAI,QAAsB,CAAC;YAC3B,IAAI,CAAC;gBACH,QAAQ,GAAG,UAAU,CAAC,OAAO,OAAO,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE;oBACxF,WAAW,CAAC,WAAW;iBACxB,CAAC,CAAC;YACL,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,cAAc,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;YAC3C,CAAC;YACD,OAAO;gBACL,KAAK,EAAE,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC;gBACpC,sBAAsB,EAAE,KAAK,IAAI,EAAE;oBACjC,IAAI,CAAC;wBACH,IAAI,QAAQ,CAAC,wBAAwB;4BACnC,OAAO,UAAU,MAAM,QAAQ,CAAC,wBAAwB,CAAC,UAAU,CAAC,EAAE,CAAC;wBACzE,MAAM,MAAM,GAAG,UAAU,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;wBAC5C,IAAI,CAAC,MAAM,CAAC,sBAAsB;4BAChC,MAAM,IAAI,KAAK,CACb,uKAAuK,CACxK,CAAC;wBACJ,OAAO,MAAM,MAAM,CAAC,sBAAsB,EAAE,CAAC;oBAC/C,CAAC;oBAAC,OAAO,KAAK,EAAE,CAAC;wBACf,MAAM,cAAc,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;oBAC3C,CAAC;gBACH,CAAC;aACF,CAAC;QACJ,CAAC,CAAC;QACF,MAAM,IAAI,GAAiB,OAAO;YAChC,CAAC,CAAC;gBACE,KAAK;gBACL,sBAAsB,EAAE,KAAK,IAAI,EAAE;oBACjC,IAAI,CAAC;wBACH,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,WAAY,CAAC,cAAc,CAAC,aAAc,EAAE,MAAM,CAAC,CAAC;wBAChF,WAAW,CAAC,OAAQ,CAAC,WAAW,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAC;wBAC7D,OAAO,UAAU,KAAK,EAAE,CAAC;oBAC3B,CAAC;oBAAC,OAAO,KAAK,EAAE,CAAC;wBACf,MAAM,CAAC,cAAc,EAAE,CAAC;wBACxB,MAAM,qBAAqB,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;oBAClD,CAAC;gBACH,CAAC;aACF;YACH,CAAC,CAAC,SAAS,EAAE,CAAC;QAChB,MAAM,MAAM,GAAG,YAAY,CAAc;YACvC,OAAO,EAAE,MAAM;YACf,OAAO,EAAE,EAAC,MAAM,EAAE,0BAA0B,EAAC;YAC7C,KAAK,EAAE,KAAK,EAAE,OAAgB,EAAE,EAAE;gBAChC,MAAM,CAAC,cAAc,EAAE,CAAC;gBACxB,MAAM,oBAAoB,CAAC,OAAO,CAAC,CAAC;gBACpC,MAAM,CAAC,cAAc,EAAE,CAAC;gBACxB,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC;gBACvB,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,OAAO,EAAE,EAAC,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAC,CAAC,CAAC;gBACnE,MAAM,SAAS,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;gBACvD,IAAI,QAAQ,CAAC,EAAE,IAAI,SAAS,IAAI,CAAC,oBAAoB,CAAC,SAAS,CAAC,EAAE,CAAC;oBACjE,KAAK,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;oBAC7C,MAAM,IAAI,KAAK,CACb,gIAAgI,CACjI,CAAC;gBACJ,CAAC;gBACD,MAAM,MAAM,GAAiB,EAAE,CAAC;gBAChC,IAAI,KAAK,GAAG,CAAC,CAAC;gBACd,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,EAAE,SAAS,EAAE,CAAC;gBAC1C,IAAI,CAAC;oBACH,OAAO,MAAM,EAAE,CAAC;wBACd,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;wBAClC,IAAI,KAAK,CAAC,IAAI;4BAAE,MAAM;wBACtB,KAAK,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC;wBAC5B,UAAU,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC;wBACjC,IAAI,KAAK,GAAG,SAAS,IAAI,UAAU,GAAG,SAAS;4BAC7C,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC,CAAC;wBACvE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;oBAC3B,CAAC;gBACH,CAAC;wBAAS,CAAC;oBACT,wFAAwF;oBACxF,KAAK,MAAM,EAAE,MAAM,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;gBACxC,CAAC;gBACD,SAAS,EAAE,CAAC,KAAK,CAAC,EAAC,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,KAAK,EAAC,EAAE,oBAAoB,CAAC,CAAC;gBAC1G,OAAO,IAAI,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE;oBAChE,MAAM,EAAE,QAAQ,CAAC,MAAM;oBACvB,UAAU,EAAE,QAAQ,CAAC,UAAU;oBAC/B,OAAO,EAAE,QAAQ,CAAC,OAAO;iBAC1B,CAAC,CAAC;YACL,CAAC;SACF,CAAC,CAAC;QACH,KAAK,MAAM,UAAU,IAAI,CAAC,OAAO,CAAC,kBAAkB,IAAI,wBAAwB,CAAC,CAAC,aAAa,CAAC,OAAO,EAAE;YACvG,OAAO,EAAE,CAAC,kBAAkB,CAAC;SAC9B,CAAC;YACA,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QACzB,MAAM,CAAC,GAAG,CACR;YACE,SAAS,EAAE,KAAK,EAAE,EAAC,OAAO,EAAC,EAAE,EAAE;gBAC7B,MAAM,oBAAoB,CAAC,OAAO,CAAC,CAAC;YACtC,CAAC;SACF,EACD,sBAAsB,CAAC,KAAK,CAAC,EAC7B,oBAAoB,CAAC,IAAI,CAAC,CAC3B,CAAC;QACF,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,MAAoB,EAAE,IAAI,EAAE;YAC9D,MAAM,EAAE,EAAC,KAAK,EAAE,WAAW,EAAC;YAC5B,eAAe;YACf,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,MAAM;YACN,QAAQ,EAAE,OAAO;YACjB,OAAO,EAAE,MAAM;SAChB,CAAC,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,KAAK,CAAC;QACzC,IAAI,IAAI,GAAY,IAAI,IAAI,IAAI,CAAC;QACjC,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,EAAE,CAAC;YACrC,IAAI,CAAC;gBACH,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAC1B,CAAC;YAAC,MAAM,CAAC;gBACP,sCAAsC;YACxC,CAAC;QACH,CAAC;QACD,MAAM,UAAU,GAAG,iBAAiB,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;QAC1E,IAAI,OAAO,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,KAAK,GAAG;YAAE,OAAO,CAAC,WAAW,EAAE,UAAU,CAAC,aAAc,CAAC,CAAC;QAC/F,oGAAoG;QACpG,IACE,MAAM,CAAC,QAAQ,CAAC,EAAE;YAClB,MAAM,KAAK,KAAK;YAChB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,KAAK,qBAAqB;YACnD,OAAO,CAAC,UAAU,CAAC,SAAS;YAC5B,OAAO,CAAC,UAAU,CAAC,OAAO;YAC1B,OAAO,CAAC,UAAU,CAAC,UAAU,EAC7B,CAAC;YACD,MAAM,EAAC,SAAS,EAAE,OAAO,EAAE,UAAU,EAAC,GAAG,OAAO,CAAC,UAAU,CAAC;YAC5D,IAAI,QAAyC,CAAC;YAC9C,IAAI,CAAC;gBACH,QAAQ,GAAG,uBAAuB,CAAC,EAAC,SAAS,EAAE,OAAO,EAAE,UAAU,EAAC,EAAE,IAAI,CAAC,CAAC;YAC7E,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,6FAA6F;gBAC7F,IAAI,SAAS,KAAK,QAAQ;oBAAE,MAAM,KAAK,CAAC;YAC1C,CAAC;YACD,IAAI,QAAQ,EAAE,CAAC;gBACb,MAAM,QAAQ,GAAG,SAAS,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,KAAK,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;gBACpF,IAAI,QAAQ,GAAG,CAAC;oBAAE,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBAC3C,wEAAwE;qBACnE,IAAI,SAAS,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,MAAM,KAAK,OAAO;oBAAE,SAAS,CAAC,QAAQ,CAAC,GAAG,QAAQ,CAAC;gBACtF,OAAO,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,MAAM,CAAC,WAAW,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC,mBAAmB,CAAC,CAAC,CAAC;YAC/F,CAAC;QACH,CAAC;QACD,OAAO,EAAC,MAAM,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,EAAE,EAAE,MAAM,CAAC,QAAQ,CAAC,EAAE,EAAE,IAAI,EAAE,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,EAAC,UAAU,EAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAC,CAAC;IAC7G,CAAC,CAAC;AACJ,CAAC"}