@modainteract/moda-interact-shared 0.14.2 → 1.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1411 -0
- package/dist/{chunk-B6Y3QQLI.js → chunk-4KSODB2R.js} +58 -1
- package/dist/chunk-4KSODB2R.js.map +1 -0
- package/dist/{chunk-NCDOIVAC.js → chunk-B5NIYRWH.js} +72 -109
- package/dist/chunk-B5NIYRWH.js.map +1 -0
- package/dist/{chunk-77R2NUY3.js → chunk-I4WVQ6D7.js} +2 -2
- package/dist/{chunk-X7NKF3ZC.js → chunk-OU6ASX5V.js} +2 -2
- package/dist/commerce/index.d.ts +16 -28
- package/dist/commerce/index.js +12 -24
- package/dist/commerce/index.js.map +1 -1
- package/dist/commerce/runner/index.d.ts +3 -6
- package/dist/commerce/runner/index.js +8 -10
- package/dist/commerce/runner/index.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +49 -43
- package/dist/internationalization.d.ts +26 -1
- package/dist/internationalization.js +7 -1
- package/dist/merchant-communications.js +2 -2
- package/dist/merchant-knowledge/node.d.ts +6 -0
- package/dist/merchant-knowledge/node.js +22 -0
- package/dist/merchant-knowledge/node.js.map +1 -0
- package/dist/merchant-knowledge.d.ts +73 -0
- package/dist/merchant-knowledge.js +73 -0
- package/dist/merchant-knowledge.js.map +1 -0
- package/dist/{response-D3LgdEbH.d.ts → response-DyBuflfX.d.ts} +9 -30
- package/dist/shopify/index.js +2 -2
- package/package.json +11 -2
- package/dist/chunk-B6Y3QQLI.js.map +0 -1
- package/dist/chunk-NCDOIVAC.js.map +0 -1
- /package/dist/{chunk-77R2NUY3.js.map → chunk-I4WVQ6D7.js.map} +0 -0
- /package/dist/{chunk-X7NKF3ZC.js.map → chunk-OU6ASX5V.js.map} +0 -0
|
@@ -275,6 +275,60 @@ function canonicaliseLanguageTag(value) {
|
|
|
275
275
|
throw invalidValue("BCP-47 language tag", value);
|
|
276
276
|
}
|
|
277
277
|
}
|
|
278
|
+
var MODA_SUPPORTED_LANGUAGE_TAGS = [
|
|
279
|
+
"zh-Hans",
|
|
280
|
+
"zh-Hant",
|
|
281
|
+
"cs",
|
|
282
|
+
"da",
|
|
283
|
+
"nl",
|
|
284
|
+
"en",
|
|
285
|
+
"fi",
|
|
286
|
+
"fr",
|
|
287
|
+
"de",
|
|
288
|
+
"it",
|
|
289
|
+
"ja",
|
|
290
|
+
"ko",
|
|
291
|
+
"nb",
|
|
292
|
+
"pl",
|
|
293
|
+
"pt-BR",
|
|
294
|
+
"pt-PT",
|
|
295
|
+
"es",
|
|
296
|
+
"sv",
|
|
297
|
+
"th",
|
|
298
|
+
"tr"
|
|
299
|
+
];
|
|
300
|
+
var ModaSupportedLanguageTagSchema = z.enum(
|
|
301
|
+
MODA_SUPPORTED_LANGUAGE_TAGS
|
|
302
|
+
);
|
|
303
|
+
function resolveModaConfigurationLocale(input) {
|
|
304
|
+
if (input == null || !input.trim()) return "en";
|
|
305
|
+
let canonicalTag;
|
|
306
|
+
try {
|
|
307
|
+
canonicalTag = canonicaliseLanguageTag(input);
|
|
308
|
+
} catch {
|
|
309
|
+
return "en";
|
|
310
|
+
}
|
|
311
|
+
if (ModaSupportedLanguageTagSchema.safeParse(canonicalTag).success) {
|
|
312
|
+
return canonicalTag;
|
|
313
|
+
}
|
|
314
|
+
const locale = new Intl.Locale(canonicalTag);
|
|
315
|
+
if (locale.language === "pt") {
|
|
316
|
+
if (locale.region === "BR") return "pt-BR";
|
|
317
|
+
if (locale.region === "PT") return "pt-PT";
|
|
318
|
+
return "en";
|
|
319
|
+
}
|
|
320
|
+
if (locale.language === "zh") {
|
|
321
|
+
if (locale.script === "Hans") return "zh-Hans";
|
|
322
|
+
if (locale.script === "Hant") return "zh-Hant";
|
|
323
|
+
if (locale.region === "CN" || locale.region === "SG") return "zh-Hans";
|
|
324
|
+
if (["TW", "HK", "MO"].includes(locale.region ?? "")) return "zh-Hant";
|
|
325
|
+
return "en";
|
|
326
|
+
}
|
|
327
|
+
const primaryLanguageMatches = MODA_SUPPORTED_LANGUAGE_TAGS.filter(
|
|
328
|
+
(tag) => tag.split("-")[0] === locale.language
|
|
329
|
+
);
|
|
330
|
+
return primaryLanguageMatches.length === 1 ? primaryLanguageMatches[0] : "en";
|
|
331
|
+
}
|
|
278
332
|
function normalizeCountryCode(value) {
|
|
279
333
|
if (typeof value !== "string") throw invalidValue("ISO 3166-1 alpha-2 country code", value);
|
|
280
334
|
const code = value.trim().toUpperCase();
|
|
@@ -445,6 +499,9 @@ function createInternationalizationRuntime({
|
|
|
445
499
|
export {
|
|
446
500
|
LanguageSourceSchema,
|
|
447
501
|
canonicaliseLanguageTag,
|
|
502
|
+
MODA_SUPPORTED_LANGUAGE_TAGS,
|
|
503
|
+
ModaSupportedLanguageTagSchema,
|
|
504
|
+
resolveModaConfigurationLocale,
|
|
448
505
|
normalizeCountryCode,
|
|
449
506
|
normalizeCurrencyCode,
|
|
450
507
|
normalizeTimeZone,
|
|
@@ -458,4 +515,4 @@ export {
|
|
|
458
515
|
validateIcuCatalogue,
|
|
459
516
|
createInternationalizationRuntime
|
|
460
517
|
};
|
|
461
|
-
//# sourceMappingURL=chunk-
|
|
518
|
+
//# sourceMappingURL=chunk-4KSODB2R.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/internationalization.ts"],"sourcesContent":["import { z } from \"zod\";\nimport { IntlMessageFormat, type PrimitiveType } from \"intl-messageformat\";\n\nconst ISO_COUNTRY_CODE_PATTERN = /^[A-Z]{2}$/;\nconst ISO_CURRENCY_CODE_PATTERN = /^[A-Z]{3}$/;\nconst ISO_3166_ALPHA_2_CODES = new Set([\n \"AF\", \"AL\", \"DZ\", \"AS\", \"AD\", \"AO\", \"AI\", \"AQ\", \"AG\", \"AR\", \"AM\", \"AW\", \"AU\", \"AX\", \"AT\", \"AZ\",\n \"BS\", \"BH\", \"BD\", \"BB\", \"BY\", \"BE\", \"BZ\", \"BJ\", \"BM\", \"BT\", \"BO\", \"BQ\", \"BA\", \"BW\", \"BV\", \"BR\", \"IO\", \"BN\", \"BG\", \"BF\", \"BI\", \"CV\", \"KH\", \"CM\", \"CA\", \"KY\", \"CF\", \"TD\", \"CL\", \"CN\", \"CX\", \"CC\", \"CO\", \"KM\", \"CG\", \"CD\", \"CK\", \"CR\", \"CI\", \"HR\", \"CU\", \"CW\", \"CY\", \"CZ\", \"DK\", \"DJ\", \"DM\", \"DO\", \"EC\", \"EG\", \"SV\", \"GQ\", \"ER\", \"EE\", \"SZ\", \"ET\", \"FK\", \"FO\", \"FJ\", \"FI\", \"FR\", \"GF\", \"PF\", \"TF\", \"GA\", \"GM\", \"GE\", \"DE\", \"GH\", \"GI\", \"GR\", \"GL\", \"GD\", \"GP\", \"GU\", \"GT\", \"GG\", \"GN\", \"GW\", \"GY\", \"HT\", \"HM\", \"VA\", \"HN\", \"HK\", \"HU\", \"IS\", \"IN\", \"ID\", \"IR\", \"IQ\", \"IE\", \"IM\", \"IL\", \"IT\", \"JM\", \"JP\", \"JE\", \"JO\", \"KZ\", \"KE\", \"KI\", \"KP\", \"KR\", \"KW\", \"KG\", \"LA\", \"LV\", \"LB\", \"LS\", \"LR\", \"LY\", \"LI\", \"LT\", \"LU\", \"MO\", \"MG\", \"MW\", \"MY\", \"MV\", \"ML\", \"MT\", \"MH\", \"MQ\", \"MR\", \"MU\", \"YT\", \"MX\", \"FM\", \"MD\", \"MC\", \"MN\", \"ME\", \"MS\", \"MA\", \"MZ\", \"MM\", \"NA\", \"NR\", \"NP\", \"NL\", \"NC\", \"NZ\", \"NI\", \"NE\", \"NG\", \"NU\", \"NF\", \"MK\", \"MP\", \"NO\", \"OM\", \"PK\", \"PW\", \"PS\", \"PA\", \"PG\", \"PY\", \"PE\", \"PH\", \"PN\", \"PL\", \"PT\", \"PR\", \"QA\", \"RE\", \"RO\", \"RU\", \"RW\", \"BL\", \"SH\", \"KN\", \"LC\", \"MF\", \"PM\", \"VC\", \"WS\", \"SM\", \"ST\", \"SA\", \"SN\", \"RS\", \"SC\", \"SL\", \"SG\", \"SX\", \"SK\", \"SI\", \"SB\", \"SO\", \"ZA\", \"GS\", \"SS\", \"ES\", \"LK\", \"SD\", \"SR\", \"SJ\", \"SE\", \"CH\", \"SY\", \"TW\", \"TJ\", \"TZ\", \"TH\", \"TL\", \"TG\", \"TK\", \"TO\", \"TT\", \"TN\", \"TR\", \"TM\", \"TC\", \"TV\", \"UG\", \"UA\", \"AE\", \"GB\", \"US\", \"UM\", \"UY\", \"UZ\", \"VU\", \"VE\", \"VN\", \"VG\", \"VI\", \"WF\", \"EH\", \"YE\", \"ZM\", \"ZW\",\n]);\nconst supportedCurrencies = new Set(Intl.supportedValuesOf(\"currency\"));\n\nexport const LanguageSourceSchema = z.enum([\n \"customer-explicit\",\n \"detected\",\n \"shopify\",\n \"merchant-default\",\n \"platform-default\",\n]);\n\nexport type LanguageSource = z.infer<typeof LanguageSourceSchema>;\n\nfunction invalidValue(kind: string, value: string): TypeError {\n return new TypeError(`Invalid ${kind}: ${value}`);\n}\n\nexport function canonicaliseLanguageTag(value: string): string {\n if (typeof value !== \"string\" || !value.trim()) {\n throw invalidValue(\"BCP-47 language tag\", value);\n }\n\n try {\n return new Intl.Locale(value.trim()).toString();\n } catch {\n throw invalidValue(\"BCP-47 language tag\", value);\n }\n}\n\nexport const MODA_SUPPORTED_LANGUAGE_TAGS = [\n \"zh-Hans\",\n \"zh-Hant\",\n \"cs\",\n \"da\",\n \"nl\",\n \"en\",\n \"fi\",\n \"fr\",\n \"de\",\n \"it\",\n \"ja\",\n \"ko\",\n \"nb\",\n \"pl\",\n \"pt-BR\",\n \"pt-PT\",\n \"es\",\n \"sv\",\n \"th\",\n \"tr\",\n] as const;\n\nexport const ModaSupportedLanguageTagSchema = z.enum(\n MODA_SUPPORTED_LANGUAGE_TAGS,\n);\n\nexport type ModaSupportedLanguageTag =\n z.infer<typeof ModaSupportedLanguageTagSchema>;\n\nexport function resolveModaConfigurationLocale(\n input: string | null | undefined,\n): ModaSupportedLanguageTag {\n if (input == null || !input.trim()) return \"en\";\n\n let canonicalTag: string;\n try {\n canonicalTag = canonicaliseLanguageTag(input);\n } catch {\n return \"en\";\n }\n\n if (ModaSupportedLanguageTagSchema.safeParse(canonicalTag).success) {\n return canonicalTag as ModaSupportedLanguageTag;\n }\n\n const locale = new Intl.Locale(canonicalTag);\n if (locale.language === \"pt\") {\n if (locale.region === \"BR\") return \"pt-BR\";\n if (locale.region === \"PT\") return \"pt-PT\";\n return \"en\";\n }\n\n if (locale.language === \"zh\") {\n if (locale.script === \"Hans\") return \"zh-Hans\";\n if (locale.script === \"Hant\") return \"zh-Hant\";\n if (locale.region === \"CN\" || locale.region === \"SG\") return \"zh-Hans\";\n if ([\"TW\", \"HK\", \"MO\"].includes(locale.region ?? \"\")) return \"zh-Hant\";\n return \"en\";\n }\n\n const primaryLanguageMatches = MODA_SUPPORTED_LANGUAGE_TAGS.filter(\n (tag) => tag.split(\"-\")[0] === locale.language,\n );\n return primaryLanguageMatches.length === 1\n ? primaryLanguageMatches[0]\n : \"en\";\n}\n\nexport function normalizeCountryCode(value: string): string {\n if (typeof value !== \"string\") throw invalidValue(\"ISO 3166-1 alpha-2 country code\", value);\n const code = value.trim().toUpperCase();\n if (!ISO_COUNTRY_CODE_PATTERN.test(code)) {\n throw invalidValue(\"ISO 3166-1 alpha-2 country code\", value);\n }\n\n if (!ISO_3166_ALPHA_2_CODES.has(code)) {\n throw invalidValue(\"ISO 3166-1 alpha-2 country code\", value);\n }\n\n return code;\n}\n\nexport function normalizeCurrencyCode(value: string): string {\n if (typeof value !== \"string\") throw invalidValue(\"ISO 4217 currency code\", value);\n const code = value.trim().toUpperCase();\n if (!ISO_CURRENCY_CODE_PATTERN.test(code) || !supportedCurrencies.has(code)) {\n throw invalidValue(\"ISO 4217 currency code\", value);\n }\n return code;\n}\n\nexport function normalizeTimeZone(value: string): string {\n if (typeof value !== \"string\" || !value.trim()) {\n throw invalidValue(\"IANA time-zone identifier\", value);\n }\n\n try {\n return new Intl.DateTimeFormat(\"en\", { timeZone: value.trim() }).resolvedOptions().timeZone;\n } catch {\n throw invalidValue(\"IANA time-zone identifier\", value);\n }\n}\n\nexport const LanguageTagSchema = z.string().trim().transform(canonicaliseLanguageTag);\nexport const CountryCodeSchema = z.string().trim().transform(normalizeCountryCode);\nexport const CurrencyCodeSchema = z.string().trim().transform(normalizeCurrencyCode);\nexport const TimeZoneIdSchema = z.string().trim().transform(normalizeTimeZone);\n\nexport const InternationalContextSchema = z\n .object({\n languageTag: LanguageTagSchema.nullable(),\n languageSource: LanguageSourceSchema.nullable(),\n countryCode: CountryCodeSchema.nullable(),\n currencyCode: CurrencyCodeSchema.nullable(),\n timeZone: TimeZoneIdSchema.nullable(),\n })\n .strict();\n\nexport type LanguageTag = z.infer<typeof LanguageTagSchema>;\nexport type CountryCode = z.infer<typeof CountryCodeSchema>;\nexport type CurrencyCode = z.infer<typeof CurrencyCodeSchema>;\nexport type TimeZoneId = z.infer<typeof TimeZoneIdSchema>;\nexport type InternationalContext = z.infer<typeof InternationalContextSchema>;\n\nexport function mergeInternationalContext(\n base: InternationalContext,\n override: InternationalContext,\n): InternationalContext {\n return {\n languageTag: override.languageTag ?? base.languageTag,\n languageSource: override.languageSource ?? base.languageSource,\n countryCode: override.countryCode ?? base.countryCode,\n currencyCode: override.currencyCode ?? base.currencyCode,\n timeZone: override.timeZone ?? base.timeZone,\n };\n}\n\nexport type IcuMessageCatalogue = Readonly<Record<string, string>>;\nexport type IcuMessageValues = Record<string, PrimitiveType | Date | null | undefined>;\n\nexport interface CatalogueValidationOptions {\n locale?: string;\n}\n\nexport interface InternationalizationRuntimeOptions {\n locale: string;\n catalogue: IcuMessageCatalogue;\n fallbackCatalogue?: IcuMessageCatalogue;\n timeZone?: string;\n cacheSize?: number;\n}\n\nexport interface InternationalizationRuntime {\n locale: string;\n timeZone?: string;\n direction: \"ltr\" | \"rtl\";\n formatMessage(message: string, values?: IcuMessageValues): string;\n t(key: string, values?: IcuMessageValues): string;\n formatNumber(value: number, options?: Intl.NumberFormatOptions): string;\n formatPercent(value: number, options?: Intl.NumberFormatOptions): string;\n formatDateTime(value: Date | string | number, options?: Intl.DateTimeFormatOptions): string;\n formatMoney(value: number, currencyCode: string, options?: Intl.NumberFormatOptions): string;\n}\n\nconst DEFAULT_ICU_CACHE_SIZE = 256;\n\nfunction assertPositiveInteger(value: number, name: string): number {\n if (!Number.isInteger(value) || value < 1) {\n throw new RangeError(`${name} must be a positive integer`);\n }\n return value;\n}\n\nclass BoundedMessageCache extends Map<string, IntlMessageFormat> {\n constructor(private readonly maxSize: number) {\n super();\n }\n\n override get(key: string): IntlMessageFormat | undefined {\n const value = super.get(key);\n if (value) {\n super.delete(key);\n super.set(key, value);\n }\n return value;\n }\n\n override set(key: string, value: IntlMessageFormat): this {\n super.delete(key);\n super.set(key, value);\n while (this.size > this.maxSize) this.delete(this.keys().next().value as string);\n return this;\n }\n}\n\nfunction createMessageCache(maxSize: number): BoundedMessageCache {\n return new BoundedMessageCache(maxSize);\n}\n\nexport function resolveLocaleDirection(locale: string): \"ltr\" | \"rtl\" {\n const canonicalLocale = canonicaliseLanguageTag(locale);\n const localeWithTextInfo = new Intl.Locale(canonicalLocale) as Intl.Locale & {\n getTextInfo?: () => { direction?: \"ltr\" | \"rtl\" };\n textInfo?: { direction?: \"ltr\" | \"rtl\" };\n };\n const direction = localeWithTextInfo.getTextInfo?.()?.direction ?? localeWithTextInfo.textInfo?.direction;\n if (direction === \"rtl\") return \"rtl\";\n if (direction === \"ltr\") return \"ltr\";\n\n const rtlLanguageOrScript = /^(ar|fa|he|ur)(?:-|$)|-(?:Arab|Hebr|Nkoo|Adlm)(?:-|$)/i;\n return rtlLanguageOrScript.test(canonicalLocale) ? \"rtl\" : \"ltr\";\n}\n\nexport function validateIcuCatalogue(\n catalogue: IcuMessageCatalogue,\n requiredKeys: readonly string[],\n options: CatalogueValidationOptions = {},\n): void {\n const locale = options.locale ? canonicaliseLanguageTag(options.locale) : \"en\";\n const missingKeys = requiredKeys.filter((key) => typeof catalogue[key] !== \"string\");\n if (missingKeys.length > 0) {\n throw new Error(`Catalogue is missing required keys: ${missingKeys.join(\", \")}`);\n }\n\n for (const key of requiredKeys) {\n try {\n new IntlMessageFormat(catalogue[key], locale);\n } catch (error) {\n throw new Error(`Invalid ICU message for key ${key}: ${error instanceof Error ? error.message : String(error)}`);\n }\n }\n}\n\nexport function createInternationalizationRuntime({\n locale,\n catalogue,\n fallbackCatalogue,\n timeZone,\n cacheSize = DEFAULT_ICU_CACHE_SIZE,\n}: InternationalizationRuntimeOptions): InternationalizationRuntime {\n const resolvedLocale = canonicaliseLanguageTag(locale);\n const resolvedTimeZone = timeZone === undefined ? undefined : normalizeTimeZone(timeZone);\n const maxCacheSize = assertPositiveInteger(cacheSize, \"cacheSize\");\n const messageCache = createMessageCache(maxCacheSize);\n\n const compile = (message: string): IntlMessageFormat => {\n const cached = messageCache.get(message);\n if (cached) {\n messageCache.delete(message);\n messageCache.set(message, cached);\n return cached;\n }\n const compiled = new IntlMessageFormat(message, resolvedLocale);\n messageCache.set(message, compiled);\n return compiled;\n };\n\n const formatMessage = (message: string, values: IcuMessageValues = {}): string => {\n const formatted = compile(message).format(values);\n return Array.isArray(formatted) ? formatted.join(\"\") : String(formatted);\n };\n\n const t = (key: string, values: IcuMessageValues = {}): string => {\n const message = catalogue[key] ?? fallbackCatalogue?.[key];\n if (message === undefined) throw new Error(`Missing ICU catalogue key: ${key}`);\n return formatMessage(message, values);\n };\n\n const formatNumber = (value: number, options: Intl.NumberFormatOptions = {}): string =>\n new Intl.NumberFormat(resolvedLocale, options).format(value);\n\n const formatPercent = (value: number, options: Intl.NumberFormatOptions = {}): string => {\n const { style: _style, ...presentationOptions } = options;\n return formatNumber(value, { ...presentationOptions, style: \"percent\" });\n };\n\n const formatDateTime = (value: Date | string | number, options: Intl.DateTimeFormatOptions = {}): string => {\n const { timeZone: optionTimeZone, ...presentationOptions } = options;\n return new Intl.DateTimeFormat(resolvedLocale, {\n ...presentationOptions,\n timeZone: resolvedTimeZone ?? optionTimeZone,\n }).format(new Date(value));\n };\n\n const formatMoney = (value: number, currencyCode: string, options: Intl.NumberFormatOptions = {}): string => {\n const { style: _style, currency: _currency, ...presentationOptions } = options;\n return formatNumber(value, {\n ...presentationOptions,\n style: \"currency\",\n currency: normalizeCurrencyCode(currencyCode),\n });\n };\n\n return {\n locale: resolvedLocale,\n timeZone: resolvedTimeZone,\n direction: resolveLocaleDirection(resolvedLocale),\n formatMessage,\n t,\n formatNumber,\n formatPercent,\n formatDateTime,\n formatMoney,\n };\n}"],"mappings":";AAAA,SAAS,SAAS;AAClB,SAAS,yBAA6C;AAEtD,IAAM,2BAA2B;AACjC,IAAM,4BAA4B;AAClC,IAAM,yBAAyB,oBAAI,IAAI;AAAA,EACrC;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAC1F;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM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","names":[]}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import {
|
|
2
2
|
canonicaliseLanguageTag,
|
|
3
3
|
normalizeCurrencyCode
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-4KSODB2R.js";
|
|
5
5
|
|
|
6
6
|
// src/commerce/canonical-json.ts
|
|
7
7
|
function canonicalJson(value, order = "codepoint") {
|
|
@@ -318,11 +318,6 @@ var DEFINITION_SIZE_MESSAGE = "Definition exceeds the 65536-byte jsonb text limi
|
|
|
318
318
|
|
|
319
319
|
// src/commerce/definitions.ts
|
|
320
320
|
var ToolNameSchema = z4.string().regex(/^[a-z][a-z0-9_]{0,127}$/).refine((n) => n !== "finalResponse");
|
|
321
|
-
var ToolBindingSchema = z4.strictObject({
|
|
322
|
-
toolId: IdSchema,
|
|
323
|
-
toolRevisionId: IdSchema
|
|
324
|
-
});
|
|
325
|
-
var ToolBindingsSchema = z4.array(ToolBindingSchema).max(32).refine((v) => distinct(v.map((x) => x.toolId)));
|
|
326
321
|
var GrantedToolSchema = z4.strictObject({
|
|
327
322
|
toolId: IdSchema,
|
|
328
323
|
toolRevisionId: IdSchema,
|
|
@@ -546,18 +541,6 @@ var toolHashInput = (definition) => ({
|
|
|
546
541
|
contractVersion: ContractVersionSchema.value,
|
|
547
542
|
definition: CommerceToolDefinitionSchema.parse(definition)
|
|
548
543
|
});
|
|
549
|
-
function capabilityHashInput(promptTemplate, configuration, toolBindings) {
|
|
550
|
-
if (!promptTemplate.trim() || promptTemplate.length > 32e3)
|
|
551
|
-
throw new TypeError("Invalid capability prompt");
|
|
552
|
-
return {
|
|
553
|
-
contractVersion: ContractVersionSchema.value,
|
|
554
|
-
promptTemplate,
|
|
555
|
-
configuration,
|
|
556
|
-
toolBindings: ToolBindingsSchema.parse(toolBindings).sort(
|
|
557
|
-
(a, b) => a.toolId < b.toolId ? -1 : 1
|
|
558
|
-
)
|
|
559
|
-
};
|
|
560
|
-
}
|
|
561
544
|
function validateDefinitionVersion(proposed, highestPublished) {
|
|
562
545
|
SemverSchema.parse(proposed);
|
|
563
546
|
if (highestPublished === null) return proposed === "1.0.0";
|
|
@@ -735,7 +718,7 @@ var CommerceConversationGrantSchema = z6.strictObject({
|
|
|
735
718
|
conversationId: IdSchema,
|
|
736
719
|
initialInboundVersion: z6.number().int().positive(),
|
|
737
720
|
releaseId: IdSchema,
|
|
738
|
-
selectedCapabilityKeys: z6.array(IdSchema).
|
|
721
|
+
selectedCapabilityKeys: z6.array(IdSchema).max(32).refine(distinct),
|
|
739
722
|
grantedTools: GrantedToolsSchema,
|
|
740
723
|
runnerVersion: SemverSchema,
|
|
741
724
|
createdAt: DateSchema,
|
|
@@ -748,25 +731,26 @@ var CommerceConversationGrantSchema = z6.strictObject({
|
|
|
748
731
|
))
|
|
749
732
|
c.addIssue({ code: "custom", message: "Unselected grant provenance" });
|
|
750
733
|
});
|
|
751
|
-
var CommerceConfigurationSchema = z6.strictObject({
|
|
752
|
-
maxRecommendations: z6.number().int().min(1).max(3).optional(),
|
|
753
|
-
maxSearchResults: z6.number().int().min(1).max(20).optional()
|
|
754
|
-
});
|
|
755
734
|
var CommerceManifestSchema = z6.strictObject({
|
|
756
735
|
contractVersion: ContractVersionSchema,
|
|
757
736
|
releaseId: IdSchema,
|
|
758
737
|
runnerCompatibility: z6.string().min(1).max(128).refine((v) => !!validRange(v)),
|
|
759
738
|
capabilities: z6.array(
|
|
760
739
|
z6.strictObject({
|
|
740
|
+
capabilityId: IdSchema,
|
|
761
741
|
key: IdSchema,
|
|
762
|
-
|
|
742
|
+
featureId: IdSchema,
|
|
763
743
|
position: z6.number().int().nonnegative(),
|
|
764
|
-
|
|
765
|
-
|
|
766
|
-
|
|
744
|
+
toolDescriptor: ToolDescriptorSchema
|
|
745
|
+
})
|
|
746
|
+
).max(32),
|
|
747
|
+
featureBehaviours: z6.array(
|
|
748
|
+
z6.strictObject({
|
|
749
|
+
featureId: IdSchema,
|
|
750
|
+
behaviourPrompt: z6.string().max(32e3)
|
|
767
751
|
})
|
|
768
|
-
).
|
|
769
|
-
selectedCapabilityKeys: z6.array(IdSchema).
|
|
752
|
+
).max(32),
|
|
753
|
+
selectedCapabilityKeys: z6.array(IdSchema).max(32).refine(distinct),
|
|
770
754
|
grantedTools: GrantedToolsSchema,
|
|
771
755
|
responseContract: CommerceResponseContractSchema,
|
|
772
756
|
responseContractHash: HashSchema
|
|
@@ -774,39 +758,39 @@ var CommerceManifestSchema = z6.strictObject({
|
|
|
774
758
|
if (jsonBytes(v) > 262144)
|
|
775
759
|
c.addIssue({ code: "custom", message: "Manifest exceeds output limit" });
|
|
776
760
|
const keys = v.capabilities.map((x) => x.key);
|
|
777
|
-
|
|
761
|
+
const capabilityIds = v.capabilities.map((x) => x.capabilityId);
|
|
762
|
+
const representedFeatures = [...new Set(v.capabilities.map((x) => x.featureId))];
|
|
763
|
+
const behaviourFeatureIds = v.featureBehaviours.map((x) => x.featureId);
|
|
764
|
+
if (!distinct(keys) || !distinct(capabilityIds) || JSON.stringify(keys) !== JSON.stringify(v.selectedCapabilityKeys) || v.capabilities.some(
|
|
778
765
|
(x, i) => i > 0 && x.position <= v.capabilities[i - 1].position
|
|
779
|
-
))
|
|
766
|
+
) || !distinct(behaviourFeatureIds) || JSON.stringify(representedFeatures) !== JSON.stringify(behaviourFeatureIds))
|
|
780
767
|
c.addIssue({
|
|
781
768
|
code: "custom",
|
|
782
769
|
message: "Invalid capability ordering/selection"
|
|
783
770
|
});
|
|
784
771
|
const union = /* @__PURE__ */ new Map();
|
|
785
772
|
for (const cap of v.capabilities) {
|
|
786
|
-
|
|
787
|
-
|
|
788
|
-
|
|
789
|
-
|
|
790
|
-
|
|
791
|
-
|
|
792
|
-
|
|
793
|
-
|
|
794
|
-
code: "custom",
|
|
795
|
-
message: "Conflicting tool revisions/descriptors"
|
|
796
|
-
});
|
|
797
|
-
old.tool.capabilityKeys.push(cap.key);
|
|
798
|
-
} else
|
|
799
|
-
union.set(d.toolId, {
|
|
800
|
-
descriptor,
|
|
801
|
-
tool: {
|
|
802
|
-
toolId: d.toolId,
|
|
803
|
-
toolRevisionId: d.toolRevisionId,
|
|
804
|
-
toolName: d.name,
|
|
805
|
-
definitionVersion: d.definitionVersion,
|
|
806
|
-
capabilityKeys: [cap.key]
|
|
807
|
-
}
|
|
773
|
+
const d = cap.toolDescriptor;
|
|
774
|
+
const old = union.get(d.toolId);
|
|
775
|
+
const descriptor = canonicalJson(d);
|
|
776
|
+
if (old) {
|
|
777
|
+
if (old.descriptor !== descriptor)
|
|
778
|
+
c.addIssue({
|
|
779
|
+
code: "custom",
|
|
780
|
+
message: "Conflicting tool revisions/descriptors"
|
|
808
781
|
});
|
|
809
|
-
|
|
782
|
+
old.tool.capabilityKeys.push(cap.key);
|
|
783
|
+
} else
|
|
784
|
+
union.set(d.toolId, {
|
|
785
|
+
descriptor,
|
|
786
|
+
tool: {
|
|
787
|
+
toolId: d.toolId,
|
|
788
|
+
toolRevisionId: d.toolRevisionId,
|
|
789
|
+
toolName: d.name,
|
|
790
|
+
definitionVersion: d.definitionVersion,
|
|
791
|
+
capabilityKeys: [cap.key]
|
|
792
|
+
}
|
|
793
|
+
});
|
|
810
794
|
}
|
|
811
795
|
if (union.size !== v.grantedTools.length || v.grantedTools.some((t) => {
|
|
812
796
|
const expected = union.get(t.toolId)?.tool;
|
|
@@ -814,7 +798,7 @@ var CommerceManifestSchema = z6.strictObject({
|
|
|
814
798
|
}))
|
|
815
799
|
c.addIssue({
|
|
816
800
|
code: "custom",
|
|
817
|
-
message: "Grant must equal selected
|
|
801
|
+
message: "Grant must equal selected capability set"
|
|
818
802
|
});
|
|
819
803
|
});
|
|
820
804
|
var CommerceReleaseIdentitySchema = z6.strictObject({
|
|
@@ -1027,64 +1011,48 @@ function productBelongsToDomain(product, verifiedDomain) {
|
|
|
1027
1011
|
}
|
|
1028
1012
|
|
|
1029
1013
|
// src/commerce/selection.ts
|
|
1030
|
-
import { z as z7 } from "zod";
|
|
1031
|
-
var CommerceCapabilityBindingSchema = z7.discriminatedUnion("kind", [
|
|
1032
|
-
z7.strictObject({
|
|
1033
|
-
kind: z7.literal("BASE"),
|
|
1034
|
-
key: z7.literal("conversation_core")
|
|
1035
|
-
}),
|
|
1036
|
-
z7.strictObject({
|
|
1037
|
-
kind: z7.literal("FEATURE"),
|
|
1038
|
-
key: IdSchema,
|
|
1039
|
-
featureId: IdSchema
|
|
1040
|
-
}),
|
|
1041
|
-
z7.strictObject({
|
|
1042
|
-
kind: z7.literal("RECOVERY_POLICY"),
|
|
1043
|
-
key: z7.literal("discount_assistance")
|
|
1044
|
-
})
|
|
1045
|
-
]);
|
|
1046
1014
|
function selectCapabilities(candidates, facts) {
|
|
1015
|
+
for (const candidate of candidates) {
|
|
1016
|
+
IdSchema.parse(candidate.key);
|
|
1017
|
+
IdSchema.parse(candidate.featureId);
|
|
1018
|
+
if (!Number.isSafeInteger(candidate.position) || candidate.position < 0)
|
|
1019
|
+
throw new TypeError("Invalid capability position");
|
|
1020
|
+
}
|
|
1047
1021
|
const selected = candidates.filter((c) => {
|
|
1048
|
-
const b = CommerceCapabilityBindingSchema.parse(c.binding);
|
|
1049
1022
|
if (!c.enabled) return false;
|
|
1050
|
-
|
|
1051
|
-
if (b.kind === "RECOVERY_POLICY")
|
|
1052
|
-
return facts.offerMode === "FIXED" || facts.offerMode === "AI_BEST_APPLICABLE";
|
|
1053
|
-
const f = facts.features.find((f2) => f2.id === b.featureId);
|
|
1023
|
+
const f = facts.features.find((f2) => f2.id === c.featureId);
|
|
1054
1024
|
return !!f && f.active && f.planMappingEnabled && (f.mode === "ALWAYS_ENABLED" || f.preferenceEnabled === true);
|
|
1055
1025
|
}).sort((a, b) => a.position - b.position);
|
|
1056
|
-
if (
|
|
1057
|
-
throw new TypeError("Base capability unavailable");
|
|
1058
|
-
if (new Set(selected.map((c) => c.binding.key)).size !== selected.length || new Set(selected.map((c) => c.position)).size !== selected.length)
|
|
1026
|
+
if (new Set(selected.map((c) => c.key)).size !== selected.length || new Set(selected.map((c) => c.position)).size !== selected.length)
|
|
1059
1027
|
throw new TypeError("Duplicate release membership");
|
|
1060
|
-
return selected.map((c) => c.
|
|
1028
|
+
return selected.map((c) => c.key);
|
|
1061
1029
|
}
|
|
1062
1030
|
function deduplicateTools(capabilities) {
|
|
1063
1031
|
const byId = /* @__PURE__ */ new Map();
|
|
1064
1032
|
const names = /* @__PURE__ */ new Map();
|
|
1065
|
-
for (const cap of capabilities)
|
|
1066
|
-
|
|
1067
|
-
|
|
1068
|
-
|
|
1069
|
-
|
|
1070
|
-
|
|
1071
|
-
|
|
1072
|
-
|
|
1073
|
-
|
|
1074
|
-
|
|
1075
|
-
|
|
1076
|
-
|
|
1077
|
-
|
|
1078
|
-
|
|
1079
|
-
|
|
1080
|
-
|
|
1081
|
-
|
|
1082
|
-
|
|
1083
|
-
|
|
1084
|
-
|
|
1085
|
-
|
|
1086
|
-
|
|
1087
|
-
|
|
1033
|
+
for (const cap of capabilities) {
|
|
1034
|
+
const d = cap.toolDescriptor;
|
|
1035
|
+
const previous = byId.get(d.toolId);
|
|
1036
|
+
const descriptor = canonicalJson(d);
|
|
1037
|
+
if (previous && previous.descriptor !== descriptor || names.has(d.name) && names.get(d.name) !== d.toolId)
|
|
1038
|
+
throw new TypeError("Conflicting tool association");
|
|
1039
|
+
names.set(d.name, d.toolId);
|
|
1040
|
+
if (previous)
|
|
1041
|
+
previous.tool.capabilityKeys = [
|
|
1042
|
+
.../* @__PURE__ */ new Set([...previous.tool.capabilityKeys, cap.key])
|
|
1043
|
+
].sort();
|
|
1044
|
+
else
|
|
1045
|
+
byId.set(d.toolId, {
|
|
1046
|
+
descriptor,
|
|
1047
|
+
tool: {
|
|
1048
|
+
toolId: d.toolId,
|
|
1049
|
+
toolRevisionId: d.toolRevisionId,
|
|
1050
|
+
toolName: d.name,
|
|
1051
|
+
definitionVersion: d.definitionVersion,
|
|
1052
|
+
capabilityKeys: [cap.key]
|
|
1053
|
+
}
|
|
1054
|
+
});
|
|
1055
|
+
}
|
|
1088
1056
|
return [...byId.values()].map((v) => v.tool).sort((a, b) => a.toolName.localeCompare(b.toolName, "en"));
|
|
1089
1057
|
}
|
|
1090
1058
|
function manifestMatchesGrant(manifest, grant) {
|
|
@@ -1147,8 +1115,6 @@ export {
|
|
|
1147
1115
|
ConnectionIssueSchema,
|
|
1148
1116
|
ConnectionResultSchema,
|
|
1149
1117
|
ToolNameSchema,
|
|
1150
|
-
ToolBindingSchema,
|
|
1151
|
-
ToolBindingsSchema,
|
|
1152
1118
|
GrantedToolSchema,
|
|
1153
1119
|
GrantedToolsSchema,
|
|
1154
1120
|
ToolDescriptorSchema,
|
|
@@ -1162,7 +1128,6 @@ export {
|
|
|
1162
1128
|
definitionToMcpDescriptor,
|
|
1163
1129
|
mapToolArguments,
|
|
1164
1130
|
toolHashInput,
|
|
1165
|
-
capabilityHashInput,
|
|
1166
1131
|
validateDefinitionVersion,
|
|
1167
1132
|
CommerceToolIdentitySchema,
|
|
1168
1133
|
CommerceToolRevisionIdentitySchema,
|
|
@@ -1176,7 +1141,6 @@ export {
|
|
|
1176
1141
|
finalResponseToolSchema,
|
|
1177
1142
|
CommerceTurnIdentitySchema,
|
|
1178
1143
|
CommerceConversationGrantSchema,
|
|
1179
|
-
CommerceConfigurationSchema,
|
|
1180
1144
|
CommerceManifestSchema,
|
|
1181
1145
|
CommerceReleaseIdentitySchema,
|
|
1182
1146
|
CommerceResolveAssertionSchema,
|
|
@@ -1194,11 +1158,10 @@ export {
|
|
|
1194
1158
|
CommerceToolInputs,
|
|
1195
1159
|
CommerceToolOutputs,
|
|
1196
1160
|
productBelongsToDomain,
|
|
1197
|
-
CommerceCapabilityBindingSchema,
|
|
1198
1161
|
selectCapabilities,
|
|
1199
1162
|
deduplicateTools,
|
|
1200
1163
|
manifestMatchesGrant,
|
|
1201
1164
|
parseCommerceManifest,
|
|
1202
1165
|
currentlyGrantedTools
|
|
1203
1166
|
};
|
|
1204
|
-
//# sourceMappingURL=chunk-
|
|
1167
|
+
//# sourceMappingURL=chunk-B5NIYRWH.js.map
|