@modainteract/moda-interact-shared 2.5.1 → 2.6.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.
@@ -1,11 +1,21 @@
1
+ import {
2
+ ContractVersionSchema,
3
+ CurrencySchema,
4
+ DateSchema,
5
+ HashSchema,
6
+ IdSchema,
7
+ MoneySchema,
8
+ SemverSchema,
9
+ boundedJson,
10
+ distinct
11
+ } from "./chunk-QVPEX7KY.js";
1
12
  import {
2
13
  canonicalJson,
3
14
  jsonBytes,
4
15
  responseContractCanonicalJson
5
16
  } from "./chunk-AUS3WQIW.js";
6
17
  import {
7
- canonicaliseLanguageTag,
8
- normalizeCurrencyCode
18
+ canonicaliseLanguageTag
9
19
  } from "./chunk-4KSODB2R.js";
10
20
 
11
21
  // src/commerce/subset.ts
@@ -145,73 +155,40 @@ function compileSubset(schema, mode) {
145
155
  });
146
156
  }
147
157
 
148
- // src/commerce/primitives.ts
149
- import { z as z2 } from "zod";
150
- var ContractVersionSchema = z2.literal("commerce.v1");
151
- var IdSchema = z2.string().min(1).max(128).refine(
152
- (v) => v.trim() === v && !["standalone", "product-only", "unknown-shop"].includes(v)
153
- );
154
- var SemverSchema = z2.string().max(64).regex(/^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)$/);
155
- var HashSchema = z2.string().regex(/^[a-f0-9]{64}$/);
156
- var DateSchema = z2.iso.datetime({ offset: false });
157
- var MoneySchema = z2.string().regex(/^[0-9]{1,18}(\.[0-9]{1,6})?$/);
158
- var CurrencySchema = z2.string().refine((v) => {
159
- try {
160
- return normalizeCurrencyCode(v) === v;
161
- } catch {
162
- return false;
163
- }
164
- });
165
- var LanguageSchema = z2.string().max(128).refine((v) => {
166
- try {
167
- return canonicaliseLanguageTag(v) === v;
168
- } catch {
169
- return false;
170
- }
171
- });
172
- var distinct = (values) => new Set(values).size === values.length;
173
- var boundedJson = (bytes) => z2.unknown().refine((v) => {
174
- try {
175
- return jsonBytes(v) <= bytes;
176
- } catch {
177
- return false;
178
- }
179
- });
180
-
181
158
  // src/commerce/external.ts
182
- import { z as z3 } from "zod";
159
+ import { z as z2 } from "zod";
183
160
  var utf8 = (value, maximum) => new TextEncoder().encode(value).length <= maximum;
184
- var scalar = z3.union([z3.string().refine((value) => utf8(value, 2048)), z3.number().finite(), z3.boolean()]);
161
+ var scalar = z2.union([z2.string().refine((value) => utf8(value, 2048)), z2.number().finite(), z2.boolean()]);
185
162
  var ExternalQueryValueSchema = scalar;
186
- var scalarOrNull = z3.union([scalar, z3.null()]);
187
- var record = (item, max) => z3.record(z3.string().refine(safeName), item).refine((value) => Object.keys(value).length <= max);
188
- var ExternalQueryMappingSchema = z3.union([
189
- z3.strictObject({ input: z3.string().refine(safeName), omitIfMissing: z3.literal(true).optional() }),
190
- z3.strictObject({ literal: scalar })
163
+ var scalarOrNull = z2.union([scalar, z2.null()]);
164
+ var record = (item, max) => z2.record(z2.string().refine(safeName), item).refine((value) => Object.keys(value).length <= max);
165
+ var ExternalQueryMappingSchema = z2.union([
166
+ z2.strictObject({ input: z2.string().refine(safeName), omitIfMissing: z2.literal(true).optional() }),
167
+ z2.strictObject({ literal: scalar })
191
168
  ]);
192
169
  var ExternalQueryMappingsSchema = record(ExternalQueryMappingSchema, 32).superRefine((value, ctx) => {
193
170
  const reserved = /^(authorization|cookie|set-cookie|host|x-api-key|api_key|apikey|access_token|token|secret|password)$/i;
194
171
  for (const key of Object.keys(value)) if (reserved.test(key)) ctx.addIssue({ code: "custom", path: [key], message: "Reserved query key" });
195
172
  });
196
- var ExternalPathSchema = z3.string().max(1024).refine(
173
+ var ExternalPathSchema = z2.string().max(1024).refine(
197
174
  (value) => utf8(value, 1024) && /^\/(?:[A-Za-z0-9._~-]+\/)*[A-Za-z0-9._~-]*\/?$/.test(value) && !value.includes("//") && !value.includes("%") && !value.includes("\\") && !value.includes("?") && !value.includes("#") && !value.includes("{") && !value.includes("}") && value.split("/").every((segment) => segment !== "." && segment !== "..")
198
175
  );
199
- var mediaType = z3.string().min(1).max(128).refine((value) => value === value.toLowerCase() && /^[a-z0-9!#$&^_.+-]+\/[a-z0-9!#$&^_.+-]+$/.test(value));
176
+ var mediaType = z2.string().min(1).max(128).refine((value) => value === value.toLowerCase() && /^[a-z0-9!#$&^_.+-]+\/[a-z0-9!#$&^_.+-]+$/.test(value));
200
177
  var jsonMime = (value) => value === "application/json" || /^application\/[a-z0-9!#$&^_.+-]+\+json$/.test(value);
201
178
  var textMime = (value) => /^text\/[a-z0-9!#$&^_.+-]+$/.test(value) || value === "application/xml" || /^application\/[a-z0-9!#$&^_.+-]+\+xml$/.test(value) || jsonMime(value);
202
- var ExternalResponseFormatSchema = z3.strictObject({ mode: z3.enum(["JSON", "TEXT"]), mediaTypes: z3.array(mediaType).min(1).max(8).refine((values) => new Set(values).size === values.length) }).refine((value) => value.mediaTypes.every(value.mode === "JSON" ? jsonMime : textMime));
203
- var FieldProjectionSchema = record(z3.strictObject({ path: z3.string().refine(safePath), omitIfMissing: z3.literal(true).optional() }), 32).refine((value) => Object.keys(value).length >= 1);
204
- var ResponseFilterSchema = z3.discriminatedUnion("op", [
205
- z3.strictObject({ path: z3.string().refine(safePath), op: z3.enum(["EQ", "NE", "GT", "GTE", "LT", "LTE", "CONTAINS", "STARTS_WITH"]), value: scalarOrNull }),
206
- z3.strictObject({ path: z3.string().refine(safePath), op: z3.literal("IN"), values: z3.array(scalarOrNull).min(1).max(20) })
179
+ var ExternalResponseFormatSchema = z2.strictObject({ mode: z2.enum(["JSON", "TEXT"]), mediaTypes: z2.array(mediaType).min(1).max(8).refine((values) => new Set(values).size === values.length) }).refine((value) => value.mediaTypes.every(value.mode === "JSON" ? jsonMime : textMime));
180
+ var FieldProjectionSchema = record(z2.strictObject({ path: z2.string().refine(safePath), omitIfMissing: z2.literal(true).optional() }), 32).refine((value) => Object.keys(value).length >= 1);
181
+ var ResponseFilterSchema = z2.discriminatedUnion("op", [
182
+ z2.strictObject({ path: z2.string().refine(safePath), op: z2.enum(["EQ", "NE", "GT", "GTE", "LT", "LTE", "CONTAINS", "STARTS_WITH"]), value: scalarOrNull }),
183
+ z2.strictObject({ path: z2.string().refine(safePath), op: z2.literal("IN"), values: z2.array(scalarOrNull).min(1).max(20) })
207
184
  ]);
208
- var visualObject = z3.strictObject({ kind: z3.literal("OBJECT"), fields: FieldProjectionSchema });
209
- var visualList = z3.strictObject({ kind: z3.literal("LIST"), fields: FieldProjectionSchema, filters: z3.array(ResponseFilterSchema).max(8), sort: z3.union([z3.null(), z3.strictObject({ path: z3.string().refine(safePath), direction: z3.enum(["ASC", "DESC"]) })]), limit: z3.int().min(1).max(20) });
210
- var VisualResponseProcessingSchema = z3.union([visualObject, visualList]);
211
- var ResponseProcessingSchema = z3.union([VisualResponseProcessingSchema, z3.strictObject({ kind: z3.literal("JAVASCRIPT"), runtimeVersion: z3.literal("quickjs-sync.v1"), source: z3.string().min(1).refine((value) => utf8(value, 16384)) })]);
212
- var TransformResponseSchema = z3.strictObject({ status: z3.int().min(200).max(299), contentType: z3.string().min(1).max(128), bodyText: z3.string().refine((value) => utf8(value, 262144)), json: z3.union([z3.null(), z3.json()]) });
213
- var TransformSampleSchema = z3.strictObject({ status: z3.int().min(200).max(299), contentType: z3.string().min(1).max(128), bodyText: z3.string().refine((value) => utf8(value, 262144)) }).refine((value) => jsonBytes(value) <= 524288);
214
- var boundedValues = z3.custom((value) => {
185
+ var visualObject = z2.strictObject({ kind: z2.literal("OBJECT"), fields: FieldProjectionSchema });
186
+ var visualList = z2.strictObject({ kind: z2.literal("LIST"), fields: FieldProjectionSchema, filters: z2.array(ResponseFilterSchema).max(8), sort: z2.union([z2.null(), z2.strictObject({ path: z2.string().refine(safePath), direction: z2.enum(["ASC", "DESC"]) })]), limit: z2.int().min(1).max(20) });
187
+ var VisualResponseProcessingSchema = z2.union([visualObject, visualList]);
188
+ var ResponseProcessingSchema = z2.union([VisualResponseProcessingSchema, z2.strictObject({ kind: z2.literal("JAVASCRIPT"), runtimeVersion: z2.literal("quickjs-sync.v1"), source: z2.string().min(1).refine((value) => utf8(value, 16384)) })]);
189
+ var TransformResponseSchema = z2.strictObject({ status: z2.int().min(200).max(299), contentType: z2.string().min(1).max(128), bodyText: z2.string().refine((value) => utf8(value, 262144)), json: z2.union([z2.null(), z2.json()]) });
190
+ var TransformSampleSchema = z2.strictObject({ status: z2.int().min(200).max(299), contentType: z2.string().min(1).max(128), bodyText: z2.string().refine((value) => utf8(value, 262144)) }).refine((value) => jsonBytes(value) <= 524288);
191
+ var boundedValues = z2.custom((value) => {
215
192
  const visit = (node, depth) => depth <= 20 && (node === null || typeof node === "string" || typeof node === "boolean" || typeof node === "number" && Number.isFinite(node) || Array.isArray(node) && node.every((child) => visit(child, depth + 1)) || !!node && typeof node === "object" && !Array.isArray(node) && Object.getPrototypeOf(node) === Object.prototype && Object.entries(node).every(([key, child]) => !["__proto__", "prototype", "constructor"].includes(key) && visit(child, depth + 1)));
216
193
  try {
217
194
  return !!value && typeof value === "object" && !Array.isArray(value) && visit(value, 1) && jsonBytes(value) <= 49152;
@@ -219,24 +196,24 @@ var boundedValues = z3.custom((value) => {
219
196
  return false;
220
197
  }
221
198
  });
222
- var ExternalHttpResultDataSchema = z3.strictObject({ source: z3.literal("EXTERNAL_HTTP"), connectionRevisionId: IdSchema, observedAt: DateSchema, values: boundedValues });
223
- var ConnectionRevisionViewSchema = z3.strictObject({ id: IdSchema, connectionId: IdSchema, revisionNumber: z3.int().positive(), origin: z3.string().min(1).max(2048), scope: z3.enum(["PLATFORM", "PER_SHOP"]), authMode: z3.enum(["NONE", "BEARER", "API_KEY"]), authHeader: z3.string().min(1).max(128).nullable(), documentation: z3.string().max(16e3), createdAt: z3.iso.datetime({ offset: false }) });
224
- var ConnectionViewSchema = z3.strictObject({ id: IdSchema, key: z3.string().regex(/^[a-z][a-z0-9_]{0,127}$/), displayName: z3.string().min(1).max(255), description: z3.string().max(4096), enabled: z3.boolean(), editVersion: z3.int().positive(), revisions: z3.array(ConnectionRevisionViewSchema) });
225
- var CredentialStatusSchema = z3.strictObject({ connectionRevisionId: IdSchema, shopId: IdSchema.nullable(), configured: z3.boolean(), editVersion: z3.int().positive().nullable(), updatedAt: z3.iso.datetime({ offset: false }).nullable() });
226
- var ConnectionCommandSchema = z3.strictObject({ operationId: IdSchema, reason: z3.string().trim().min(1).max(1e3) });
227
- var RevisionInputSchema = z3.strictObject({ origin: z3.string().min(1).max(2048), scope: z3.enum(["PLATFORM", "PER_SHOP"]), authMode: z3.enum(["NONE", "BEARER", "API_KEY"]), authHeader: z3.string().min(1).max(128).nullable(), documentation: z3.string().max(16e3) });
228
- var ConnectionIssueSchema = z3.strictObject({ path: z3.string().max(256), message: z3.string().min(1).max(512) });
229
- var ConnectionResultSchema = (value) => z3.discriminatedUnion("kind", [
230
- z3.strictObject({ kind: z3.literal("ok"), value }),
231
- z3.strictObject({ kind: z3.literal("not-found") }),
232
- z3.strictObject({ kind: z3.literal("forbidden") }),
233
- z3.strictObject({ kind: z3.literal("unavailable") }),
234
- z3.strictObject({ kind: z3.literal("invalid"), issues: z3.array(ConnectionIssueSchema).max(32) }),
235
- z3.strictObject({ kind: z3.literal("conflict"), code: z3.enum(["STALE_CAS", "CONFLICTING_REPLAY"]) })
199
+ var ExternalHttpResultDataSchema = z2.strictObject({ source: z2.literal("EXTERNAL_HTTP"), connectionRevisionId: IdSchema, observedAt: DateSchema, values: boundedValues });
200
+ var ConnectionRevisionViewSchema = z2.strictObject({ id: IdSchema, connectionId: IdSchema, revisionNumber: z2.int().positive(), origin: z2.string().min(1).max(2048), scope: z2.enum(["PLATFORM", "PER_SHOP"]), authMode: z2.enum(["NONE", "BEARER", "API_KEY"]), authHeader: z2.string().min(1).max(128).nullable(), documentation: z2.string().max(16e3), createdAt: z2.iso.datetime({ offset: false }) });
201
+ var ConnectionViewSchema = z2.strictObject({ id: IdSchema, key: z2.string().regex(/^[a-z][a-z0-9_]{0,127}$/), displayName: z2.string().min(1).max(255), description: z2.string().max(4096), enabled: z2.boolean(), editVersion: z2.int().positive(), revisions: z2.array(ConnectionRevisionViewSchema) });
202
+ var CredentialStatusSchema = z2.strictObject({ connectionRevisionId: IdSchema, shopId: IdSchema.nullable(), configured: z2.boolean(), editVersion: z2.int().positive().nullable(), updatedAt: z2.iso.datetime({ offset: false }).nullable() });
203
+ var ConnectionCommandSchema = z2.strictObject({ operationId: IdSchema, reason: z2.string().trim().min(1).max(1e3) });
204
+ var RevisionInputSchema = z2.strictObject({ origin: z2.string().min(1).max(2048), scope: z2.enum(["PLATFORM", "PER_SHOP"]), authMode: z2.enum(["NONE", "BEARER", "API_KEY"]), authHeader: z2.string().min(1).max(128).nullable(), documentation: z2.string().max(16e3) });
205
+ var ConnectionIssueSchema = z2.strictObject({ path: z2.string().max(256), message: z2.string().min(1).max(512) });
206
+ var ConnectionResultSchema = (value) => z2.discriminatedUnion("kind", [
207
+ z2.strictObject({ kind: z2.literal("ok"), value }),
208
+ z2.strictObject({ kind: z2.literal("not-found") }),
209
+ z2.strictObject({ kind: z2.literal("forbidden") }),
210
+ z2.strictObject({ kind: z2.literal("unavailable") }),
211
+ z2.strictObject({ kind: z2.literal("invalid"), issues: z2.array(ConnectionIssueSchema).max(32) }),
212
+ z2.strictObject({ kind: z2.literal("conflict"), code: z2.enum(["STALE_CAS", "CONFLICTING_REPLAY"]) })
236
213
  ]);
237
214
 
238
215
  // src/commerce/definitions.ts
239
- import { z as z4 } from "zod";
216
+ import { z as z3 } from "zod";
240
217
  import { gt } from "semver";
241
218
 
242
219
  // src/commerce/definition-size.ts
@@ -277,33 +254,33 @@ var definitionFitsStorage = (value) => {
277
254
  var DEFINITION_SIZE_MESSAGE = "Definition exceeds the 65536-byte jsonb text limit";
278
255
 
279
256
  // src/commerce/definitions.ts
280
- var ToolNameSchema = z4.string().regex(/^[a-z][a-z0-9_]{0,127}$/).refine((n) => n !== "finalResponse");
281
- var GrantedToolSchema = z4.strictObject({
257
+ var ToolNameSchema = z3.string().regex(/^[a-z][a-z0-9_]{0,127}$/).refine((n) => n !== "finalResponse");
258
+ var GrantedToolSchema = z3.strictObject({
282
259
  toolId: IdSchema,
283
260
  toolRevisionId: IdSchema,
284
261
  toolName: ToolNameSchema,
285
262
  definitionVersion: SemverSchema,
286
- capabilityKeys: z4.array(IdSchema).min(1).max(32).refine((v) => distinct(v) && v.join("\0") === [...v].sort().join("\0"))
263
+ capabilityKeys: z3.array(IdSchema).min(1).max(32).refine((v) => distinct(v) && v.join("\0") === [...v].sort().join("\0"))
287
264
  });
288
- var GrantedToolsSchema = z4.array(GrantedToolSchema).max(32).refine(
265
+ var GrantedToolsSchema = z3.array(GrantedToolSchema).max(32).refine(
289
266
  (v) => distinct(v.map((x) => x.toolId)) && distinct(v.map((x) => x.toolName))
290
267
  );
291
- var ToolDescriptorSchema = z4.strictObject({
268
+ var ToolDescriptorSchema = z3.strictObject({
292
269
  toolId: IdSchema,
293
270
  toolRevisionId: IdSchema,
294
271
  name: ToolNameSchema,
295
272
  definitionVersion: SemverSchema,
296
- description: z4.string().min(1).max(4096),
273
+ description: z3.string().min(1).max(4096),
297
274
  inputSchema: InputSchemaSchema
298
275
  });
299
- var MappingSchema = z4.union([
300
- z4.strictObject({
301
- input: z4.string().refine(safeName),
302
- omitIfMissing: z4.literal(true).optional()
276
+ var MappingSchema = z3.union([
277
+ z3.strictObject({
278
+ input: z3.string().refine(safeName),
279
+ omitIfMissing: z3.literal(true).optional()
303
280
  }),
304
- z4.strictObject({ literal: boundedJson(8192) })
281
+ z3.strictObject({ literal: boundedJson(8192) })
305
282
  ]);
306
- var MappingsSchema = z4.record(z4.string().refine(safeName), MappingSchema).refine((v) => Object.keys(v).length <= 32);
283
+ var MappingsSchema = z3.record(z3.string().refine(safeName), MappingSchema).refine((v) => Object.keys(v).length <= 32);
307
284
  var POLICY_OPERATIONS = [
308
285
  "recovery.getBasket",
309
286
  "shopify.searchProducts",
@@ -312,15 +289,15 @@ var POLICY_OPERATIONS = [
312
289
  "products.findQualifying",
313
290
  "products.findSimilar"
314
291
  ];
315
- var ExternalHttpExecutionSchema = z4.strictObject({
316
- kind: z4.literal("EXTERNAL_HTTP"),
317
- executorVersion: z4.literal("1.0.0"),
292
+ var ExternalHttpExecutionSchema = z3.strictObject({
293
+ kind: z3.literal("EXTERNAL_HTTP"),
294
+ executorVersion: z3.literal("1.0.0"),
318
295
  connectionRevisionId: IdSchema,
319
- method: z4.literal("GET"),
296
+ method: z3.literal("GET"),
320
297
  path: ExternalPathSchema,
321
298
  query: ExternalQueryMappingsSchema,
322
299
  responseFormat: ExternalResponseFormatSchema,
323
- resultPath: z4.string().refine((value) => value === "" || safePath(value)),
300
+ resultPath: z3.string().refine((value) => value === "" || safePath(value)),
324
301
  responseProcessing: ResponseProcessingSchema,
325
302
  resultSchema: DetailsSchemaSchema
326
303
  }).superRefine((value, ctx) => {
@@ -329,21 +306,21 @@ var ExternalHttpExecutionSchema = z4.strictObject({
329
306
  if (value.responseProcessing.kind !== "JAVASCRIPT" && value.responseFormat.mode !== "JSON")
330
307
  ctx.addIssue({ code: "custom", path: ["responseFormat", "mode"], message: "Visual processing requires JSON" });
331
308
  });
332
- var CommerceExecutionSchema = z4.discriminatedUnion("kind", [
333
- z4.strictObject({
334
- kind: z4.literal("SHOPIFY_STOREFRONT_QUERY"),
335
- executorVersion: z4.literal("1.0.0"),
336
- apiVersion: z4.literal("2026-07"),
309
+ var CommerceExecutionSchema = z3.discriminatedUnion("kind", [
310
+ z3.strictObject({
311
+ kind: z3.literal("SHOPIFY_STOREFRONT_QUERY"),
312
+ executorVersion: z3.literal("1.0.0"),
313
+ apiVersion: z3.literal("2026-07"),
337
314
  schemaHash: HashSchema,
338
- document: z4.string().min(1).refine((v) => new TextEncoder().encode(v).length <= 16384),
339
- operationName: z4.string().refine(safeName),
315
+ document: z3.string().min(1).refine((v) => new TextEncoder().encode(v).length <= 16384),
316
+ operationName: z3.string().refine(safeName),
340
317
  variables: MappingsSchema,
341
- resultPath: z4.string().refine(safePath)
318
+ resultPath: z3.string().refine(safePath)
342
319
  }),
343
- z4.strictObject({
344
- kind: z4.literal("POLICY_OPERATION"),
345
- operation: z4.enum(POLICY_OPERATIONS),
346
- operationVersion: z4.literal("1.0.0"),
320
+ z3.strictObject({
321
+ kind: z3.literal("POLICY_OPERATION"),
322
+ operation: z3.enum(POLICY_OPERATIONS),
323
+ operationVersion: z3.literal("1.0.0"),
347
324
  arguments: MappingsSchema
348
325
  }),
349
326
  ExternalHttpExecutionSchema
@@ -356,17 +333,17 @@ function tokensValid(text, root) {
356
333
  );
357
334
  return !residue.includes("{{") && !residue.includes("}}");
358
335
  }
359
- var fixed = z4.string().max(4096).refine((v) => !/[<>]|\{\{|\}\}/.test(v));
360
- var ResponseTemplateSchema = z4.discriminatedUnion("kind", [
361
- z4.strictObject({
362
- kind: z4.literal("text"),
363
- text: z4.string().max(4096).refine((v) => tokensValid(v, "result")),
336
+ var fixed = z3.string().max(4096).refine((v) => !/[<>]|\{\{|\}\}/.test(v));
337
+ var ResponseTemplateSchema = z3.discriminatedUnion("kind", [
338
+ z3.strictObject({
339
+ kind: z3.literal("text"),
340
+ text: z3.string().max(4096).refine((v) => tokensValid(v, "result")),
364
341
  unavailable: fixed
365
342
  }),
366
- z4.strictObject({
367
- kind: z4.literal("items"),
368
- itemsPath: z4.string().refine(safePath),
369
- item: z4.string().max(4096).refine((v) => tokensValid(v, "item")),
343
+ z3.strictObject({
344
+ kind: z3.literal("items"),
345
+ itemsPath: z3.string().refine(safePath),
346
+ item: z3.string().max(4096).refine((v) => tokensValid(v, "item")),
370
347
  empty: fixed,
371
348
  unavailable: fixed
372
349
  })
@@ -374,11 +351,11 @@ var ResponseTemplateSchema = z4.discriminatedUnion("kind", [
374
351
  var identity = {
375
352
  name: ToolNameSchema,
376
353
  definitionVersion: SemverSchema,
377
- description: z4.string().min(1).max(4096)
354
+ description: z3.string().min(1).max(4096)
378
355
  };
379
356
  var forbiddenInput = /^(shopid|customerid|checkoutrecoveryid|conversationid|grantid|releaseid|token|accesstoken|domain|headers|url|graphql|document|authorization)$/i;
380
357
  var forbiddenExternalInput = /^(authorization|cookie|set-cookie|host|x-api-key|api_key|apikey|access_token|token|secret|password)$/i;
381
- var CommerceToolDefinitionSchema = z4.strictObject({
358
+ var CommerceToolDefinitionSchema = z3.strictObject({
382
359
  ...identity,
383
360
  inputSchema: InputSchemaSchema,
384
361
  execution: CommerceExecutionSchema,
@@ -414,7 +391,7 @@ var CommerceToolDefinitionSchema = z4.strictObject({
414
391
  var draftObject = boundedJson(65536).refine(
415
392
  (v) => !!v && typeof v === "object" && !Array.isArray(v)
416
393
  );
417
- var CommerceToolDraftDefinitionSchema = z4.strictObject({
394
+ var CommerceToolDraftDefinitionSchema = z3.strictObject({
418
395
  ...identity,
419
396
  inputSchema: draftObject,
420
397
  execution: draftObject,
@@ -507,12 +484,12 @@ function validateDefinitionVersion(proposed, highestPublished) {
507
484
  SemverSchema.parse(highestPublished);
508
485
  return gt(proposed, highestPublished);
509
486
  }
510
- var CommerceToolIdentitySchema = z4.strictObject({
487
+ var CommerceToolIdentitySchema = z3.strictObject({
511
488
  id: IdSchema,
512
489
  name: ToolNameSchema,
513
- enabled: z4.boolean()
490
+ enabled: z3.boolean()
514
491
  });
515
- var CommerceToolRevisionIdentitySchema = z4.strictObject({
492
+ var CommerceToolRevisionIdentitySchema = z3.strictObject({
516
493
  toolId: IdSchema,
517
494
  toolRevisionId: IdSchema,
518
495
  definitionVersion: SemverSchema,
@@ -523,10 +500,10 @@ var POLICY_OPERATION_DESCRIPTORS = POLICY_OPERATIONS.map(
523
500
  );
524
501
 
525
502
  // src/commerce/response.ts
526
- import { z as z5 } from "zod";
527
- var CommerceResponseContractSchema = z5.strictObject({
528
- version: z5.literal("response.v1"),
529
- instructions: z5.string().min(1).max(8e3),
503
+ import { z as z4 } from "zod";
504
+ var CommerceResponseContractSchema = z4.strictObject({
505
+ version: z4.literal("response.v1"),
506
+ instructions: z4.string().min(1).max(8e3),
530
507
  detailsSchema: DetailsSchemaSchema
531
508
  }).refine((v) => jsonBytes(v) <= 32768);
532
509
  var EMPTY_RESPONSE_CONTRACT = {
@@ -539,31 +516,31 @@ var EMPTY_RESPONSE_CONTRACT = {
539
516
  additionalProperties: false
540
517
  }
541
518
  };
542
- var ReferralReasonSchema = z5.enum([
519
+ var ReferralReasonSchema = z4.enum([
543
520
  "INSUFFICIENT_TOOLS",
544
521
  "UNVERIFIABLE_FACTS",
545
522
  "TOOL_UNAVAILABLE",
546
523
  "TOOL_REVOKED"
547
524
  ]);
548
- var DetectedLanguageTagSchema = z5.string().min(1).max(128).transform((value, ctx) => {
525
+ var DetectedLanguageTagSchema = z4.string().min(1).max(128).transform((value, ctx) => {
549
526
  const canonical = canonicaliseLanguageTag(value);
550
527
  if (!canonical) {
551
528
  ctx.addIssue({
552
529
  code: "custom",
553
530
  message: "Invalid detected language tag"
554
531
  });
555
- return z5.NEVER;
532
+ return z4.NEVER;
556
533
  }
557
534
  return canonical;
558
535
  });
559
- var CommerceFinalResponseSchema = z5.strictObject({
560
- answerKind: z5.enum(["ANSWER", "REFER_TO_STORE"]),
561
- replyText: z5.string().min(1).max(4096),
536
+ var CommerceFinalResponseSchema = z4.strictObject({
537
+ answerKind: z4.enum(["ANSWER", "REFER_TO_STORE"]),
538
+ replyText: z4.string().min(1).max(4096),
562
539
  referralReason: ReferralReasonSchema.nullable(),
563
540
  detectedLanguageTag: DetectedLanguageTagSchema.nullable(),
564
- detectedLanguageConfidence: z5.number().min(0).max(1).nullable(),
565
- evidenceIds: z5.array(IdSchema).max(3).refine((v) => new Set(v).size === v.length),
566
- details: z5.record(z5.string(), z5.unknown()).refine((v) => {
541
+ detectedLanguageConfidence: z4.number().min(0).max(1).nullable(),
542
+ evidenceIds: z4.array(IdSchema).max(3).refine((v) => new Set(v).size === v.length),
543
+ details: z4.record(z4.string(), z4.unknown()).refine((v) => {
567
544
  try {
568
545
  return jsonBytes(v) <= 16384;
569
546
  } catch {
@@ -699,22 +676,22 @@ function finalResponseToolSchema(definition) {
699
676
  }
700
677
 
701
678
  // src/commerce/schemas.ts
702
- import { z as z6 } from "zod";
679
+ import { z as z5 } from "zod";
703
680
  import { validRange } from "semver";
704
- var CommerceTurnIdentitySchema = z6.strictObject({
681
+ var CommerceTurnIdentitySchema = z5.strictObject({
705
682
  contractVersion: ContractVersionSchema,
706
683
  shopId: IdSchema,
707
684
  checkoutRecoveryId: IdSchema,
708
685
  conversationId: IdSchema,
709
- inboundVersion: z6.number().int().positive()
686
+ inboundVersion: z5.number().int().positive()
710
687
  });
711
- var CommerceConversationGrantSchema = z6.strictObject({
688
+ var CommerceConversationGrantSchema = z5.strictObject({
712
689
  id: IdSchema,
713
690
  shopId: IdSchema,
714
691
  conversationId: IdSchema,
715
- initialInboundVersion: z6.number().int().positive(),
692
+ initialInboundVersion: z5.number().int().positive(),
716
693
  releaseId: IdSchema,
717
- selectedCapabilityKeys: z6.array(IdSchema).max(32).refine(distinct),
694
+ selectedCapabilityKeys: z5.array(IdSchema).max(32).refine(distinct),
718
695
  grantedTools: GrantedToolsSchema,
719
696
  runnerVersion: SemverSchema,
720
697
  createdAt: DateSchema,
@@ -727,26 +704,26 @@ var CommerceConversationGrantSchema = z6.strictObject({
727
704
  ))
728
705
  c.addIssue({ code: "custom", message: "Unselected grant provenance" });
729
706
  });
730
- var CommerceManifestSchema = z6.strictObject({
707
+ var CommerceManifestSchema = z5.strictObject({
731
708
  contractVersion: ContractVersionSchema,
732
709
  releaseId: IdSchema,
733
- runnerCompatibility: z6.string().min(1).max(128).refine((v) => !!validRange(v)),
734
- capabilities: z6.array(
735
- z6.strictObject({
710
+ runnerCompatibility: z5.string().min(1).max(128).refine((v) => !!validRange(v)),
711
+ capabilities: z5.array(
712
+ z5.strictObject({
736
713
  capabilityId: IdSchema,
737
714
  key: IdSchema,
738
715
  featureId: IdSchema,
739
- position: z6.number().int().nonnegative(),
716
+ position: z5.number().int().nonnegative(),
740
717
  toolDescriptor: ToolDescriptorSchema
741
718
  })
742
719
  ).max(32),
743
- featureBehaviours: z6.array(
744
- z6.strictObject({
720
+ featureBehaviours: z5.array(
721
+ z5.strictObject({
745
722
  featureId: IdSchema,
746
- behaviourPrompt: z6.string().max(32e3)
723
+ behaviourPrompt: z5.string().max(32e3)
747
724
  })
748
725
  ).max(32),
749
- selectedCapabilityKeys: z6.array(IdSchema).max(32).refine(distinct),
726
+ selectedCapabilityKeys: z5.array(IdSchema).max(32).refine(distinct),
750
727
  grantedTools: GrantedToolsSchema,
751
728
  responseContract: CommerceResponseContractSchema,
752
729
  responseContractHash: HashSchema
@@ -797,32 +774,32 @@ var CommerceManifestSchema = z6.strictObject({
797
774
  message: "Grant must equal selected capability set"
798
775
  });
799
776
  });
800
- var CommerceReleaseIdentitySchema = z6.strictObject({
777
+ var CommerceReleaseIdentitySchema = z5.strictObject({
801
778
  contractVersion: ContractVersionSchema,
802
779
  releaseId: IdSchema,
803
- runnerCompatibility: z6.string().min(1).max(128).refine((v) => !!validRange(v))
780
+ runnerCompatibility: z5.string().min(1).max(128).refine((v) => !!validRange(v))
804
781
  });
805
782
  var CommerceResolveAssertionSchema = CommerceTurnIdentitySchema.extend(
806
- { purpose: z6.literal("resolve") }
783
+ { purpose: z5.literal("resolve") }
807
784
  );
808
785
  var CommerceExecuteAssertionSchema = CommerceTurnIdentitySchema.extend(
809
- { purpose: z6.literal("execute"), grantId: IdSchema, releaseId: IdSchema }
786
+ { purpose: z5.literal("execute"), grantId: IdSchema, releaseId: IdSchema }
810
787
  );
811
- var CommerceAssertionSchema = z6.discriminatedUnion("purpose", [
788
+ var CommerceAssertionSchema = z5.discriminatedUnion("purpose", [
812
789
  CommerceResolveAssertionSchema,
813
790
  CommerceExecuteAssertionSchema
814
791
  ]);
815
- var qty = z6.number().int().min(1).max(999);
816
- var CommerceProposalSchema = z6.strictObject({
817
- operations: z6.array(
818
- z6.discriminatedUnion("kind", [
819
- z6.strictObject({
820
- kind: z6.literal("ADD"),
792
+ var qty = z5.number().int().min(1).max(999);
793
+ var CommerceProposalSchema = z5.strictObject({
794
+ operations: z5.array(
795
+ z5.discriminatedUnion("kind", [
796
+ z5.strictObject({
797
+ kind: z5.literal("ADD"),
821
798
  variantId: IdSchema,
822
799
  quantity: qty
823
800
  }),
824
- z6.strictObject({
825
- kind: z6.literal("REPLACE"),
801
+ z5.strictObject({
802
+ kind: z5.literal("REPLACE"),
826
803
  lineId: IdSchema,
827
804
  variantId: IdSchema,
828
805
  quantity: qty
@@ -834,13 +811,13 @@ var CommerceProposalSchema = z6.strictObject({
834
811
  v.operations.flatMap((o) => o.kind === "REPLACE" ? [o.lineId] : [])
835
812
  )
836
813
  );
837
- var CommerceBasketSchema = z6.strictObject({
814
+ var CommerceBasketSchema = z5.strictObject({
838
815
  basketId: IdSchema,
839
- source: z6.enum(["RECOVERY_SNAPSHOT", "PROPOSED"]),
816
+ source: z5.enum(["RECOVERY_SNAPSHOT", "PROPOSED"]),
840
817
  observedAt: DateSchema,
841
818
  currency: CurrencySchema.nullable(),
842
- lines: z6.array(
843
- z6.strictObject({
819
+ lines: z5.array(
820
+ z5.strictObject({
844
821
  lineId: IdSchema,
845
822
  productId: IdSchema.nullable(),
846
823
  variantId: IdSchema.nullable(),
@@ -849,40 +826,48 @@ var CommerceBasketSchema = z6.strictObject({
849
826
  })
850
827
  ).max(100),
851
828
  fingerprint: HashSchema,
852
- unknownFields: z6.array(z6.string().min(1).max(256)).max(128)
829
+ unknownFields: z5.array(z5.string().min(1).max(256)).max(128)
853
830
  }).refine((v) => distinct(v.lines.map((line) => line.lineId)));
854
- var CommerceProductSchema = z6.strictObject({
831
+ var CommerceProductSaleEvidenceSchema = z5.strictObject({
832
+ regularPrice: MoneySchema.nullable(),
833
+ salePrice: MoneySchema.nullable(),
834
+ observedAt: DateSchema
835
+ });
836
+ var CommerceProductSchema = z5.strictObject({
855
837
  productId: IdSchema,
856
838
  variantId: IdSchema,
857
- title: z6.string().min(1).max(512),
858
- url: z6.url({ protocol: /^https$/ }).refine((v) => {
839
+ title: z5.string().min(1).max(512),
840
+ url: z5.url({ protocol: /^https$/ }).refine((v) => {
859
841
  const u = new URL(v);
860
842
  return !u.username && !u.password && !u.port;
861
843
  }).nullable(),
862
- available: z6.boolean().nullable(),
844
+ available: z5.boolean().nullable(),
863
845
  unitPrice: MoneySchema.nullable(),
864
846
  currency: CurrencySchema.nullable(),
865
- productType: z6.string().max(512).nullable(),
866
- vendor: z6.string().max(512).nullable(),
847
+ productType: z5.string().max(512).nullable(),
848
+ vendor: z5.string().max(512).nullable(),
849
+ categories: z5.array(z5.string()).optional(),
850
+ imageUrl: z5.string().nullable().optional(),
851
+ saleEvidence: CommerceProductSaleEvidenceSchema.nullable().optional(),
867
852
  observedAt: DateSchema
868
853
  });
869
- var CommerceOfferSchema = z6.strictObject({
854
+ var CommerceOfferSchema = z5.strictObject({
870
855
  offerId: IdSchema,
871
- title: z6.string().min(1).max(512),
872
- method: z6.enum(["AUTOMATIC", "CODE"]),
873
- code: z6.string().min(1).max(128).nullable(),
856
+ title: z5.string().min(1).max(512),
857
+ method: z5.enum(["AUTOMATIC", "CODE"]),
858
+ code: z5.string().min(1).max(128).nullable(),
874
859
  startsAt: DateSchema.nullable(),
875
860
  endsAt: DateSchema.nullable(),
876
- support: z6.enum(["SUPPORTED", "UNSUPPORTED", "UNKNOWN"]),
877
- reasonCodes: z6.array(z6.string().min(1).max(64)).max(16)
861
+ support: z5.enum(["SUPPORTED", "UNSUPPORTED", "UNKNOWN"]),
862
+ reasonCodes: z5.array(z5.string().min(1).max(64)).max(16)
878
863
  }).refine(
879
864
  (v) => (v.startsAt === null || v.endsAt === null || Date.parse(v.startsAt) < Date.parse(v.endsAt)) && (v.method !== "AUTOMATIC" || v.code === null)
880
865
  );
881
- var condition = z6.strictObject({
882
- code: z6.string().min(1).max(64),
883
- description: z6.string().max(256)
866
+ var condition = z5.strictObject({
867
+ code: z5.string().min(1).max(64),
868
+ description: z5.string().max(256)
884
869
  });
885
- var CommerceEvidenceSchema = z6.strictObject({
870
+ var CommerceEvidenceSchema = z5.strictObject({
886
871
  evidenceId: HashSchema,
887
872
  turn: CommerceTurnIdentitySchema,
888
873
  grantId: IdSchema,
@@ -893,7 +878,7 @@ var CommerceEvidenceSchema = z6.strictObject({
893
878
  ruleFingerprint: HashSchema,
894
879
  evaluatedAt: DateSchema,
895
880
  expiresAt: DateSchema,
896
- outcome: z6.enum([
881
+ outcome: z5.enum([
897
882
  "QUALIFIES_FOR_KNOWN_RULES",
898
883
  "DOES_NOT_QUALIFY",
899
884
  "UNKNOWN",
@@ -902,8 +887,8 @@ var CommerceEvidenceSchema = z6.strictObject({
902
887
  currency: CurrencySchema.nullable(),
903
888
  savings: MoneySchema.nullable(),
904
889
  resultingTotal: MoneySchema.nullable(),
905
- evaluatedConditions: z6.array(condition).max(32),
906
- unresolvedConditions: z6.array(condition).max(32)
890
+ evaluatedConditions: z5.array(condition).max(32),
891
+ unresolvedConditions: z5.array(condition).max(32)
907
892
  }).superRefine((v, c) => {
908
893
  if (Date.parse(v.expiresAt) - Date.parse(v.evaluatedAt) > 6e4)
909
894
  c.addIssue({
@@ -913,16 +898,16 @@ var CommerceEvidenceSchema = z6.strictObject({
913
898
  if (v.outcome === "QUALIFIES_FOR_KNOWN_RULES" && (v.unresolvedConditions.length || Date.parse(v.expiresAt) <= Date.parse(v.evaluatedAt) || v.currency === null || v.savings === null || v.resultingTotal === null))
914
899
  c.addIssue({ code: "custom", message: "Unsupported qualifying claim" });
915
900
  });
916
- var CommerceAlternativeSchema = z6.strictObject({
901
+ var CommerceAlternativeSchema = z5.strictObject({
917
902
  product: CommerceProductSchema,
918
903
  proposal: CommerceProposalSchema,
919
904
  extraSpend: MoneySchema.nullable(),
920
905
  resultingTotal: MoneySchema.nullable(),
921
906
  currency: CurrencySchema.nullable(),
922
907
  evidence: CommerceEvidenceSchema.nullable(),
923
- similarityReasons: z6.array(z6.string().max(256)).max(3)
908
+ similarityReasons: z5.array(z5.string().max(256)).max(3)
924
909
  }).refine((v) => v.product.available === true);
925
- var CommerceErrorCodeSchema = z6.enum([
910
+ var CommerceErrorCodeSchema = z5.enum([
926
911
  "INVALID_INPUT",
927
912
  "DENIED",
928
913
  "STALE_TURN",
@@ -933,66 +918,73 @@ var CommerceErrorCodeSchema = z6.enum([
933
918
  "INCOMPATIBLE_VERSION"
934
919
  ]);
935
920
  function commerceToolResultSchema(data) {
936
- return z6.union([
937
- z6.strictObject({
921
+ return z5.union([
922
+ z5.strictObject({
938
923
  contractVersion: ContractVersionSchema,
939
- status: z6.literal("OK"),
924
+ status: z5.literal("OK"),
940
925
  data,
941
- renderedText: z6.string().max(4096)
926
+ renderedText: z5.string().max(4096)
942
927
  }),
943
- z6.strictObject({
928
+ z5.strictObject({
944
929
  contractVersion: ContractVersionSchema,
945
- status: z6.literal("ERROR"),
930
+ status: z5.literal("ERROR"),
946
931
  code: CommerceErrorCodeSchema,
947
- retryable: z6.boolean(),
948
- renderedText: z6.string().max(4096).optional()
932
+ retryable: z5.boolean(),
933
+ renderedText: z5.string().max(4096).optional()
949
934
  })
950
935
  ]);
951
936
  }
952
937
  var CommerceToolResultSchema = commerceToolResultSchema(
953
938
  boundedJson(262144)
954
939
  );
955
- var limit = z6.number().int().min(1).max(3).default(3);
940
+ var limit = z5.number().int().min(1).max(3).default(3);
956
941
  var CommerceToolInputs = {
957
- commerce_get_basket: z6.strictObject({}),
958
- commerce_search_products: z6.strictObject({
959
- query: z6.string().min(1).max(200),
942
+ commerce_get_basket: z5.strictObject({}),
943
+ commerce_search_products: z5.strictObject({
944
+ query: z5.string().min(1).max(200),
960
945
  maximumPrice: MoneySchema.optional(),
961
- availableOnly: z6.boolean().default(true),
962
- limit: z6.number().int().min(1).max(20).default(10),
963
- cursor: z6.string().max(2048).nullable().default(null)
946
+ availableOnly: z5.boolean().default(true),
947
+ limit: z5.number().int().min(1).max(20).default(10),
948
+ cursor: z5.string().max(2048).nullable().default(null)
949
+ }),
950
+ commerce_get_product: z5.strictObject({
951
+ productId: IdSchema,
952
+ variantId: IdSchema.nullable()
964
953
  }),
965
- commerce_get_discount_options: z6.strictObject({}),
966
- commerce_evaluate_discount: z6.strictObject({
954
+ commerce_get_discount_options: z5.strictObject({}),
955
+ commerce_evaluate_discount: z5.strictObject({
967
956
  offerId: IdSchema,
968
957
  proposal: CommerceProposalSchema.nullable()
969
958
  }),
970
- commerce_find_qualifying_products: z6.strictObject({
959
+ commerce_find_qualifying_products: z5.strictObject({
971
960
  offerId: IdSchema,
972
- query: z6.string().min(1).max(200).nullable(),
961
+ query: z5.string().min(1).max(200).nullable(),
973
962
  limit
974
963
  }),
975
- commerce_find_similar_products: z6.strictObject({
964
+ commerce_find_similar_products: z5.strictObject({
976
965
  variantId: IdSchema,
977
966
  offerId: IdSchema.nullable(),
978
967
  limit
979
968
  })
980
969
  };
981
- var alternatives = z6.strictObject({
982
- alternatives: z6.array(CommerceAlternativeSchema).max(3),
983
- truncated: z6.boolean()
970
+ var alternatives = z5.strictObject({
971
+ alternatives: z5.array(CommerceAlternativeSchema).max(3),
972
+ truncated: z5.boolean()
984
973
  });
985
974
  var CommerceToolOutputs = {
986
975
  commerce_get_basket: CommerceBasketSchema,
987
- commerce_search_products: z6.strictObject({
988
- products: z6.array(CommerceProductSchema).max(20),
989
- cursor: z6.string().max(2048).nullable(),
990
- truncated: z6.boolean()
976
+ commerce_search_products: z5.strictObject({
977
+ products: z5.array(CommerceProductSchema).max(20),
978
+ cursor: z5.string().max(2048).nullable(),
979
+ truncated: z5.boolean()
980
+ }),
981
+ commerce_get_product: z5.strictObject({
982
+ product: CommerceProductSchema.nullable()
991
983
  }),
992
- commerce_get_discount_options: z6.strictObject({
993
- mode: z6.enum(["NONE", "FIXED", "AI_BEST_APPLICABLE"]),
994
- offers: z6.array(CommerceOfferSchema).max(50),
995
- truncated: z6.boolean()
984
+ commerce_get_discount_options: z5.strictObject({
985
+ mode: z5.enum(["NONE", "FIXED", "AI_BEST_APPLICABLE"]),
986
+ offers: z5.array(CommerceOfferSchema).max(50),
987
+ truncated: z5.boolean()
996
988
  }),
997
989
  commerce_evaluate_discount: CommerceEvidenceSchema,
998
990
  commerce_find_qualifying_products: alternatives,
@@ -1015,16 +1007,6 @@ export {
1015
1007
  DetailsSchemaSchema,
1016
1008
  matchesSubset,
1017
1009
  compileSubset,
1018
- ContractVersionSchema,
1019
- IdSchema,
1020
- SemverSchema,
1021
- HashSchema,
1022
- DateSchema,
1023
- MoneySchema,
1024
- CurrencySchema,
1025
- LanguageSchema,
1026
- distinct,
1027
- boundedJson,
1028
1010
  ExternalQueryValueSchema,
1029
1011
  ExternalQueryMappingSchema,
1030
1012
  ExternalQueryMappingsSchema,
@@ -1078,6 +1060,7 @@ export {
1078
1060
  CommerceAssertionSchema,
1079
1061
  CommerceProposalSchema,
1080
1062
  CommerceBasketSchema,
1063
+ CommerceProductSaleEvidenceSchema,
1081
1064
  CommerceProductSchema,
1082
1065
  CommerceOfferSchema,
1083
1066
  CommerceEvidenceSchema,
@@ -1089,4 +1072,4 @@ export {
1089
1072
  CommerceToolOutputs,
1090
1073
  productBelongsToDomain
1091
1074
  };
1092
- //# sourceMappingURL=chunk-QJNZJACH.js.map
1075
+ //# sourceMappingURL=chunk-GFAARCMY.js.map