@financedistrict/saleor-agentic-commerce-nextjs 2.0.0 → 2.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -57,6 +57,14 @@ src/app/api/ucp/
57
57
  ```
58
58
 
59
59
  ```ts
60
+ // src/app/.well-known/ucp/route.ts
61
+ import { ucpRoutes } from "@/lib/agentic-commerce"
62
+ export const { GET } = ucpRoutes.discovery
63
+
64
+ // src/app/.well-known/ucp/[version]/route.ts
65
+ import { ucpRoutes } from "@/lib/agentic-commerce"
66
+ export const { GET } = ucpRoutes.discoveryVersion
67
+
60
68
  // src/app/api/ucp/checkout-sessions/route.ts
61
69
  import { ucpRoutes } from "@/lib/agentic-commerce"
62
70
  export const { POST } = ucpRoutes.checkoutSessions
@@ -127,13 +135,36 @@ createAgenticCommerce({
127
135
  // Optional
128
136
  channel?: string, // Saleor channel slug (default: "default-channel")
129
137
  storeDescription?: string, // Store description for discovery
130
- ucpVersion?: string, // UCP version (default: UCP_VERSION, "2026-08-25")
138
+ ucpVersion?: string, // Current UCP version (default: UCP_VERSION, the latest, "2026-08-25")
139
+ ucpSupportedVersions?: string[], // Extra UCP versions (default: every other known version)
140
+ ucpVersionNegotiation?: "lenient" | "strict", // default: "lenient"
131
141
  acpVersion?: string, // ACP version (default: "2026-01-30")
132
142
  acpApiKey?: string, // API key for ACP Bearer token auth
133
143
  paymentHandlers?: PaymentHandlerAdapter[], // Payment handler adapters
134
144
  })
135
145
  ```
136
146
 
147
+ ## UCP versions
148
+
149
+ The store serves `ucpVersion` (default: the latest, `2026-08-25`) and every version in `ucpSupportedVersions`. `/.well-known/ucp` lists the extra versions under `ucp.supported_versions`, each linking to `/.well-known/ucp/<version>` (wire the `discoveryVersion` route shown above).
150
+
151
+ Each request picks its version from the agent profile named in the `UCP-Agent` header (`ucp.version`). The profile is fetched over HTTPS only, from public addresses, with a 3 s timeout, a 64 KiB cap and a 10 minute cache.
152
+
153
+ | Agent profile | `lenient` (default) | `strict` |
154
+ |---|---|---|
155
+ | no `UCP-Agent` header | current version | current version |
156
+ | unreachable | current version + warning | 424 `agent_profile_unavailable` |
157
+ | no or malformed `ucp.version` | current version + warning | 422 `version_unsupported` |
158
+ | unknown version | current version + warning | 422 `version_unsupported` |
159
+ | known version that is not enabled | 422 `version_unsupported` | 422 `version_unsupported` |
160
+ | enabled version | that version | that version |
161
+
162
+ Lenient negotiation is a deliberate deviation from the UCP spec, which asks for a hard error: agents without a reachable profile keep working on the current version. A checkout session created by a matched agent keeps its version; another matched version on the same session answers 422, a fallback outcome serves the session version. Sessions created before this release are never pinned. Warnings are logged as one JSON line with the key `ucp_profile_resolution`.
163
+
164
+ An unknown value in `ucpVersion`, `ucpSupportedVersions` or `ucpVersionNegotiation` makes `createAgenticCommerce` throw at boot.
165
+
166
+ When `ucpSupportedVersions` is omitted, every known version other than `ucpVersion` stays enabled, so `ucpVersion: "2026-04-08"` alone keeps `2026-08-25` and `2026-01-23` available. Stores upgrading from releases that served `2026-04-08` set `ucpVersion: "2026-04-08"` to keep that root profile. The integration needs the Node.js runtime; the Edge runtime is not supported.
167
+
137
168
  ## Middleware
138
169
 
139
170
  UCP header parsing utilities for custom route handling:
package/dist/config.d.ts CHANGED
@@ -5,7 +5,8 @@
5
5
  * and middleware use. Merchants call createAgenticCommerce() once in their
6
6
  * storefront code and export the instance.
7
7
  */
8
- import { SaleorClient, PaymentHandlerRegistry, type PaymentHandlerAdapter, type FormatterContext, type AppPaymentHandlerConfig } from "@financedistrict/saleor-agentic-commerce-core";
8
+ import { SaleorClient, PaymentHandlerRegistry, type PaymentHandlerAdapter, type UcpVersionRegistry, type FormatterContext, type AppPaymentHandlerConfig } from "@financedistrict/saleor-agentic-commerce-core";
9
+ import { type AgentProfileFetcher } from "@financedistrict/saleor-agentic-commerce-core/agent-profile-fetcher";
9
10
  export type AgenticCommerceConfig = {
10
11
  /** Saleor GraphQL API URL (e.g., "https://api.store.com/graphql/") */
11
12
  saleorApiUrl: string;
@@ -55,8 +56,9 @@ export type AgenticCommerceConfig = {
55
56
  storeName?: string;
56
57
  /** Store description (overrides App config if both present) */
57
58
  storeDescription?: string;
58
- /** UCP protocol version (default: UCP_VERSION, "2026-08-25") */
59
59
  ucpVersion?: string;
60
+ ucpSupportedVersions?: string[];
61
+ ucpVersionNegotiation?: "lenient" | "strict";
60
62
  /** ACP protocol version (default: "2026-01-30") */
61
63
  acpVersion?: string;
62
64
  /** API key for ACP Bearer token authentication (overrides App config) */
@@ -88,6 +90,8 @@ export type AgenticCommerceInstance = {
88
90
  saleorClient: SaleorClient;
89
91
  paymentHandlers: PaymentHandlerRegistry;
90
92
  formatterContext: FormatterContext;
93
+ ucpRegistry?: UcpVersionRegistry;
94
+ agentProfileFetcher?: AgentProfileFetcher;
91
95
  config: Required<Pick<AgenticCommerceConfig, "storefrontUrl" | "ucpVersion" | "acpVersion">> & Pick<AgenticCommerceConfig, "storeDescription" | "acpApiKey"> & {
92
96
  storeName: string;
93
97
  /** Resolved enable flags — read by route handlers to short-circuit when off. */
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EACL,YAAY,EACZ,sBAAsB,EAGtB,KAAK,qBAAqB,EAC1B,KAAK,gBAAgB,EAGrB,KAAK,uBAAuB,EAC7B,MAAM,+CAA+C,CAAA;AAMtD,MAAM,MAAM,qBAAqB,GAAG;IAClC,sEAAsE;IACtE,YAAY,EAAE,MAAM,CAAA;IACpB,wEAAwE;IACxE,eAAe,EAAE,MAAM,CAAA;IACvB,kCAAkC;IAClC,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,wDAAwD;IACxD,aAAa,EAAE,MAAM,CAAA;IACrB;;;;;;OAMG;IACH,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB;;;;;;;;;;;;;;;OAeG;IACH,qBAAqB,CAAC,EAAE,MAAM,CAAA;IAC9B;;;OAGG;IACH,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB;;;;OAIG;IACH,qBAAqB,CAAC,EAAE,CAAC,MAAM,EAAE,uBAAuB,KAAK,qBAAqB,GAAG,IAAI,CAAA;IACzF,gEAAgE;IAChE,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,+DAA+D;IAC/D,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,gEAAgE;IAChE,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,mDAAmD;IACnD,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,yEAAyE;IACzE,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,kFAAkF;IAClF,eAAe,CAAC,EAAE,qBAAqB,EAAE,CAAA;IACzC;;;;;;;;OAQG;IACH,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB;;;OAGG;IACH,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB;;;OAGG;IACH,UAAU,CAAC,EAAE,OAAO,CAAA;CACrB,CAAA;AAMD,MAAM,MAAM,uBAAuB,GAAG;IACpC,YAAY,EAAE,YAAY,CAAA;IAC1B,eAAe,EAAE,sBAAsB,CAAA;IACvC,gBAAgB,EAAE,gBAAgB,CAAA;IAClC,MAAM,EAAE,QAAQ,CAAC,IAAI,CAAC,qBAAqB,EAAE,eAAe,GAAG,YAAY,GAAG,YAAY,CAAC,CAAC,GAC1F,IAAI,CAAC,qBAAqB,EAAE,kBAAkB,GAAG,WAAW,CAAC,GAC7D;QACE,SAAS,EAAE,MAAM,CAAA;QACjB,gFAAgF;QAChF,OAAO,EAAE,OAAO,CAAA;QAChB,UAAU,EAAE,OAAO,CAAA;QACnB,UAAU,EAAE,OAAO,CAAA;KACpB,CAAA;CACJ,CAAA;AAED;;;;;;;;;GASG;AACH,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,qBAAqB,GAAG;IAAE,aAAa,EAAE,IAAI,CAAA;CAAE,GACtD,OAAO,CAAC,uBAAuB,CAAC,CAAA;AACnC,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,qBAAqB,GAAG;IAAE,aAAa,CAAC,EAAE,KAAK,CAAA;CAAE,GACxD,uBAAuB,CAAA;AAC1B,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,qBAAqB,GAC5B,uBAAuB,GAAG,OAAO,CAAC,uBAAuB,CAAC,CAAA"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EACL,YAAY,EACZ,sBAAsB,EAGtB,KAAK,qBAAqB,EAC1B,KAAK,kBAAkB,EACvB,KAAK,gBAAgB,EAGrB,KAAK,uBAAuB,EAC7B,MAAM,+CAA+C,CAAA;AACtD,OAAO,EAEL,KAAK,mBAAmB,EACzB,MAAM,qEAAqE,CAAA;AAM5E,MAAM,MAAM,qBAAqB,GAAG;IAClC,sEAAsE;IACtE,YAAY,EAAE,MAAM,CAAA;IACpB,wEAAwE;IACxE,eAAe,EAAE,MAAM,CAAA;IACvB,kCAAkC;IAClC,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,wDAAwD;IACxD,aAAa,EAAE,MAAM,CAAA;IACrB;;;;;;OAMG;IACH,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB;;;;;;;;;;;;;;;OAeG;IACH,qBAAqB,CAAC,EAAE,MAAM,CAAA;IAC9B;;;OAGG;IACH,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB;;;;OAIG;IACH,qBAAqB,CAAC,EAAE,CAAC,MAAM,EAAE,uBAAuB,KAAK,qBAAqB,GAAG,IAAI,CAAA;IACzF,gEAAgE;IAChE,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,+DAA+D;IAC/D,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,oBAAoB,CAAC,EAAE,MAAM,EAAE,CAAA;IAC/B,qBAAqB,CAAC,EAAE,SAAS,GAAG,QAAQ,CAAA;IAC5C,mDAAmD;IACnD,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,yEAAyE;IACzE,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,kFAAkF;IAClF,eAAe,CAAC,EAAE,qBAAqB,EAAE,CAAA;IACzC;;;;;;;;OAQG;IACH,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB;;;OAGG;IACH,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB;;;OAGG;IACH,UAAU,CAAC,EAAE,OAAO,CAAA;CACrB,CAAA;AAMD,MAAM,MAAM,uBAAuB,GAAG;IACpC,YAAY,EAAE,YAAY,CAAA;IAC1B,eAAe,EAAE,sBAAsB,CAAA;IACvC,gBAAgB,EAAE,gBAAgB,CAAA;IAClC,WAAW,CAAC,EAAE,kBAAkB,CAAA;IAChC,mBAAmB,CAAC,EAAE,mBAAmB,CAAA;IACzC,MAAM,EAAE,QAAQ,CAAC,IAAI,CAAC,qBAAqB,EAAE,eAAe,GAAG,YAAY,GAAG,YAAY,CAAC,CAAC,GAC1F,IAAI,CAAC,qBAAqB,EAAE,kBAAkB,GAAG,WAAW,CAAC,GAC7D;QACE,SAAS,EAAE,MAAM,CAAA;QACjB,gFAAgF;QAChF,OAAO,EAAE,OAAO,CAAA;QAChB,UAAU,EAAE,OAAO,CAAA;QACnB,UAAU,EAAE,OAAO,CAAA;KACpB,CAAA;CACJ,CAAA;AAED;;;;;;;;;GASG;AACH,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,qBAAqB,GAAG;IAAE,aAAa,EAAE,IAAI,CAAA;CAAE,GACtD,OAAO,CAAC,uBAAuB,CAAC,CAAA;AACnC,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,qBAAqB,GAAG;IAAE,aAAa,CAAC,EAAE,KAAK,CAAA;CAAE,GACxD,uBAAuB,CAAA;AAC1B,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,qBAAqB,GAC5B,uBAAuB,GAAG,OAAO,CAAC,uBAAuB,CAAC,CAAA"}
package/dist/config.js CHANGED
@@ -5,7 +5,8 @@
5
5
  * and middleware use. Merchants call createAgenticCommerce() once in their
6
6
  * storefront code and export the instance.
7
7
  */
8
- import { SaleorClient, PaymentHandlerRegistry, UCP_VERSION, loadConfigFromAppCached, } from "@financedistrict/saleor-agentic-commerce-core";
8
+ import { SaleorClient, PaymentHandlerRegistry, loadConfigFromAppCached, createUcpVersionRegistry, } from "@financedistrict/saleor-agentic-commerce-core";
9
+ import { createAgentProfileFetcher, } from "@financedistrict/saleor-agentic-commerce-core/agent-profile-fetcher";
9
10
  export function createAgenticCommerce(config) {
10
11
  // Validate required config
11
12
  if (!config.saleorApiUrl)
@@ -62,7 +63,12 @@ async function createFromApp(config) {
62
63
  * Build the final instance from resolved config.
63
64
  */
64
65
  function buildInstance(config, storeName) {
65
- const ucpVersion = config.ucpVersion || UCP_VERSION;
66
+ const ucpRegistry = createUcpVersionRegistry({
67
+ ucpVersion: config.ucpVersion,
68
+ ucpSupportedVersions: config.ucpSupportedVersions,
69
+ ucpVersionNegotiation: config.ucpVersionNegotiation,
70
+ });
71
+ const ucpVersion = ucpRegistry.current;
66
72
  const acpVersion = config.acpVersion || "2026-01-30";
67
73
  // Create Saleor client
68
74
  const saleorClient = new SaleorClient({
@@ -87,6 +93,8 @@ function buildInstance(config, storeName) {
87
93
  saleorClient,
88
94
  paymentHandlers,
89
95
  formatterContext,
96
+ ucpRegistry,
97
+ agentProfileFetcher: createAgentProfileFetcher(),
90
98
  config: {
91
99
  storefrontUrl: config.storefrontUrl,
92
100
  storeName,
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ import type { UcpVersionRegistry, UcpWire } from "@financedistrict/saleor-agentic-commerce-core";
2
+ import type { AgentProfileFetcher } from "@financedistrict/saleor-agentic-commerce-core/agent-profile-fetcher";
3
+ export declare const UCP_VERSION_METADATA_KEY = "ucp_version";
4
+ export type UcpProfileOutcome = "none" | "matched" | "undeclared" | "unknown" | "unreachable" | "disabled";
5
+ export type UcpResolutionRejection = {
6
+ status: 422 | 424;
7
+ code: string;
8
+ content: string;
9
+ };
10
+ export type UcpResolution = {
11
+ version: string;
12
+ wire: UcpWire;
13
+ outcome: UcpProfileOutcome;
14
+ declared?: string;
15
+ host?: string;
16
+ rejection?: UcpResolutionRejection;
17
+ };
18
+ export declare function isFallbackOutcome(outcome: UcpProfileOutcome): boolean;
19
+ export declare function unsupportedVersionMessage(registry: UcpVersionRegistry, requested: string): string;
20
+ export declare function resolveUcpVersion(registry: UcpVersionRegistry, request: Request, fetcher: AgentProfileFetcher): Promise<UcpResolution>;
21
+ export declare function applyUcpSessionPin(registry: UcpVersionRegistry, resolution: UcpResolution, pinned: unknown): UcpResolution;
22
+ export declare function sessionPinFor(resolution: UcpResolution): string | undefined;
23
+ export declare function logUcpResolution(resolution: UcpResolution): void;
24
+ //# sourceMappingURL=ucp-version.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ucp-version.d.ts","sourceRoot":"","sources":["../../src/middleware/ucp-version.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,OAAO,EAAE,MAAM,+CAA+C,CAAA;AAChG,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,qEAAqE,CAAA;AAG9G,eAAO,MAAM,wBAAwB,gBAAgB,CAAA;AAErD,MAAM,MAAM,iBAAiB,GAAG,MAAM,GAAG,SAAS,GAAG,YAAY,GAAG,SAAS,GAAG,aAAa,GAAG,UAAU,CAAA;AAE1G,MAAM,MAAM,sBAAsB,GAAG;IACnC,MAAM,EAAE,GAAG,GAAG,GAAG,CAAA;IACjB,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,CAAA;CAChB,CAAA;AAED,MAAM,MAAM,aAAa,GAAG;IAC1B,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,EAAE,OAAO,CAAA;IACb,OAAO,EAAE,iBAAiB,CAAA;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,SAAS,CAAC,EAAE,sBAAsB,CAAA;CACnC,CAAA;AAID,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAErE;AAED,wBAAgB,yBAAyB,CAAC,QAAQ,EAAE,kBAAkB,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAEjG;AA8BD,wBAAsB,iBAAiB,CACrC,QAAQ,EAAE,kBAAkB,EAC5B,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,mBAAmB,GAC3B,OAAO,CAAC,aAAa,CAAC,CAiCxB;AAED,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,kBAAkB,EAC5B,UAAU,EAAE,aAAa,EACzB,MAAM,EAAE,OAAO,GACd,aAAa,CAcf;AAED,wBAAgB,aAAa,CAAC,UAAU,EAAE,aAAa,GAAG,MAAM,GAAG,SAAS,CAE3E;AAED,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,aAAa,GAAG,IAAI,CAOhE"}
@@ -0,0 +1,86 @@
1
+ import { parseUcpHeaders } from "./ucp-headers.js";
2
+ export const UCP_VERSION_METADATA_KEY = "ucp_version";
3
+ const FALLBACK_OUTCOMES = ["undeclared", "unknown", "unreachable"];
4
+ export function isFallbackOutcome(outcome) {
5
+ return FALLBACK_OUTCOMES.includes(outcome);
6
+ }
7
+ export function unsupportedVersionMessage(registry, requested) {
8
+ return `Version ${requested} is not supported. This business implements versions ${registry.enabled().join(", ")}.`;
9
+ }
10
+ function hostOf(url) {
11
+ try {
12
+ return new URL(url).hostname;
13
+ }
14
+ catch {
15
+ return "";
16
+ }
17
+ }
18
+ function served(registry, version, outcome, declared, host) {
19
+ return { version, wire: registry.wire(version), outcome, declared, host };
20
+ }
21
+ function rejected(registry, outcome, rejection, declared, host) {
22
+ return { ...served(registry, registry.current, outcome, declared, host), rejection };
23
+ }
24
+ export async function resolveUcpVersion(registry, request, fetcher) {
25
+ const url = parseUcpHeaders(request).agentProfile;
26
+ if (!url)
27
+ return served(registry, registry.current, "none");
28
+ const host = hostOf(url);
29
+ const profile = await fetcher.lookup(url);
30
+ const declared = profile.status === "ok" && profile.version ? profile.version : undefined;
31
+ let outcome;
32
+ if (profile.status !== "ok")
33
+ outcome = "unreachable";
34
+ else if (!declared)
35
+ outcome = "undeclared";
36
+ else if (!registry.isKnown(declared))
37
+ outcome = "unknown";
38
+ else if (!registry.isEnabled(declared))
39
+ outcome = "disabled";
40
+ else
41
+ outcome = "matched";
42
+ if (outcome === "matched")
43
+ return served(registry, declared, outcome, declared, host);
44
+ if (outcome === "disabled") {
45
+ return rejected(registry, outcome, {
46
+ status: 422,
47
+ code: "version_unsupported",
48
+ content: unsupportedVersionMessage(registry, declared),
49
+ }, declared, host);
50
+ }
51
+ if (registry.negotiation === "strict") {
52
+ return rejected(registry, outcome, outcome === "unreachable"
53
+ ? { status: 424, code: "agent_profile_unavailable", content: "Agent profile could not be retrieved." }
54
+ : { status: 422, code: "version_unsupported", content: unsupportedVersionMessage(registry, declared ?? "undeclared") }, declared, host);
55
+ }
56
+ return served(registry, registry.current, outcome, declared, host);
57
+ }
58
+ export function applyUcpSessionPin(registry, resolution, pinned) {
59
+ if (resolution.rejection)
60
+ return resolution;
61
+ if (typeof pinned !== "string" || !registry.isKnown(pinned))
62
+ return resolution;
63
+ if (resolution.outcome === "matched") {
64
+ if (resolution.declared === pinned)
65
+ return resolution;
66
+ return rejected(registry, resolution.outcome, {
67
+ status: 422,
68
+ code: "version_unsupported",
69
+ content: unsupportedVersionMessage(registry, resolution.declared),
70
+ }, resolution.declared, resolution.host);
71
+ }
72
+ return { ...resolution, version: pinned, wire: registry.wire(pinned) };
73
+ }
74
+ export function sessionPinFor(resolution) {
75
+ return resolution.outcome === "matched" ? resolution.version : undefined;
76
+ }
77
+ export function logUcpResolution(resolution) {
78
+ if (resolution.outcome === "none" || resolution.outcome === "matched")
79
+ return;
80
+ console.warn(JSON.stringify({
81
+ ucp_profile_resolution: resolution.outcome,
82
+ served: resolution.version,
83
+ host: resolution.host ?? "",
84
+ }));
85
+ }
86
+ //# sourceMappingURL=ucp-version.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ucp-version.js","sourceRoot":"","sources":["../../src/middleware/ucp-version.ts"],"names":[],"mappings":"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"}
@@ -2,8 +2,6 @@
2
2
  * UCP Route Handlers
3
3
  *
4
4
  * Creates Next.js App Router route handlers for all UCP endpoints.
5
- * Based on UCP spec version 2026-08-25.
6
- * https://ucp.dev/2026-08-25/specification/overview
7
5
  *
8
6
  * Endpoints:
9
7
  * - GET /.well-known/ucp — Discovery profile
@@ -30,6 +28,13 @@ export type UcpRouteHandlers = {
30
28
  discovery: {
31
29
  GET: (request: Request) => Promise<Response>;
32
30
  };
31
+ discoveryVersion: {
32
+ GET: (request: Request, context: {
33
+ params: Promise<{
34
+ version: string;
35
+ }>;
36
+ }) => Promise<Response>;
37
+ };
33
38
  /** POST /api/ucp/checkout-sessions */
34
39
  checkoutSessions: {
35
40
  POST: (request: Request) => Promise<Response>;
@@ -1 +1 @@
1
- {"version":3,"file":"ucp-routes.d.ts","sourceRoot":"","sources":["../../src/routes/ucp-routes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAqBH,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,cAAc,CAAA;AAS3D,MAAM,MAAM,gBAAgB,GAAG;IAC7B,2BAA2B;IAC3B,SAAS,EAAE;QACT,GAAG,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAA;KAC7C,CAAA;IACD,sCAAsC;IACtC,gBAAgB,EAAE;QAChB,IAAI,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAA;KAC9C,CAAA;IACD,+CAA+C;IAC/C,eAAe,EAAE;QACf,GAAG,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE;YAAE,MAAM,EAAE,OAAO,CAAC;gBAAE,EAAE,EAAE,MAAM,CAAA;aAAE,CAAC,CAAA;SAAE,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAA;QAC1F,GAAG,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE;YAAE,MAAM,EAAE,OAAO,CAAC;gBAAE,EAAE,EAAE,MAAM,CAAA;aAAE,CAAC,CAAA;SAAE,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAA;KAC3F,CAAA;IACD,oDAAoD;IACpD,uBAAuB,EAAE;QACvB,IAAI,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE;YAAE,MAAM,EAAE,OAAO,CAAC;gBAAE,EAAE,EAAE,MAAM,CAAA;aAAE,CAAC,CAAA;SAAE,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAA;KAC5F,CAAA;IACD,kDAAkD;IAClD,qBAAqB,EAAE;QACrB,IAAI,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE;YAAE,MAAM,EAAE,OAAO,CAAC;gBAAE,EAAE,EAAE,MAAM,CAAA;aAAE,CAAC,CAAA;SAAE,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAA;KAC5F,CAAA;IACD,+BAA+B;IAC/B,KAAK,EAAE;QACL,GAAG,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE;YAAE,MAAM,EAAE,OAAO,CAAC;gBAAE,EAAE,EAAE,MAAM,CAAA;aAAE,CAAC,CAAA;SAAE,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAA;KAC3F,CAAA;IACD,mCAAmC;IACnC,aAAa,EAAE;QACb,IAAI,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAA;KAC9C,CAAA;IACD,mCAAmC;IACnC,aAAa,EAAE;QACb,IAAI,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAA;KAC9C,CAAA;CACF,CAAA;AAED,wBAAgB,eAAe,CAAC,QAAQ,EAAE,uBAAuB,GAAG,gBAAgB,CAqoBnF"}
1
+ {"version":3,"file":"ucp-routes.d.ts","sourceRoot":"","sources":["../../src/routes/ucp-routes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAqBH,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,cAAc,CAAA;AA0B3D,MAAM,MAAM,gBAAgB,GAAG;IAC7B,2BAA2B;IAC3B,SAAS,EAAE;QACT,GAAG,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAA;KAC7C,CAAA;IACD,gBAAgB,EAAE;QAChB,GAAG,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE;YAAE,MAAM,EAAE,OAAO,CAAC;gBAAE,OAAO,EAAE,MAAM,CAAA;aAAE,CAAC,CAAA;SAAE,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAA;KAChG,CAAA;IACD,sCAAsC;IACtC,gBAAgB,EAAE;QAChB,IAAI,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAA;KAC9C,CAAA;IACD,+CAA+C;IAC/C,eAAe,EAAE;QACf,GAAG,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE;YAAE,MAAM,EAAE,OAAO,CAAC;gBAAE,EAAE,EAAE,MAAM,CAAA;aAAE,CAAC,CAAA;SAAE,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAA;QAC1F,GAAG,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE;YAAE,MAAM,EAAE,OAAO,CAAC;gBAAE,EAAE,EAAE,MAAM,CAAA;aAAE,CAAC,CAAA;SAAE,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAA;KAC3F,CAAA;IACD,oDAAoD;IACpD,uBAAuB,EAAE;QACvB,IAAI,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE;YAAE,MAAM,EAAE,OAAO,CAAC;gBAAE,EAAE,EAAE,MAAM,CAAA;aAAE,CAAC,CAAA;SAAE,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAA;KAC5F,CAAA;IACD,kDAAkD;IAClD,qBAAqB,EAAE;QACrB,IAAI,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE;YAAE,MAAM,EAAE,OAAO,CAAC;gBAAE,EAAE,EAAE,MAAM,CAAA;aAAE,CAAC,CAAA;SAAE,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAA;KAC5F,CAAA;IACD,+BAA+B;IAC/B,KAAK,EAAE;QACL,GAAG,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE;YAAE,MAAM,EAAE,OAAO,CAAC;gBAAE,EAAE,EAAE,MAAM,CAAA;aAAE,CAAC,CAAA;SAAE,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAA;KAC3F,CAAA;IACD,mCAAmC;IACnC,aAAa,EAAE;QACb,IAAI,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAA;KAC9C,CAAA;IACD,mCAAmC;IACnC,aAAa,EAAE;QACb,IAAI,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAA;KAC9C,CAAA;CACF,CAAA;AAED,wBAAgB,eAAe,CAAC,QAAQ,EAAE,uBAAuB,GAAG,gBAAgB,CAowBnF"}
@@ -2,8 +2,6 @@
2
2
  * UCP Route Handlers
3
3
  *
4
4
  * Creates Next.js App Router route handlers for all UCP endpoints.
5
- * Based on UCP spec version 2026-08-25.
6
- * https://ucp.dev/2026-08-25/specification/overview
7
5
  *
8
6
  * Endpoints:
9
7
  * - GET /.well-known/ucp — Discovery profile
@@ -24,7 +22,9 @@
24
22
  * export { GET } from '@/lib/agentic-commerce'
25
23
  * ```
26
24
  */
27
- import { formatUcpProfile, formatUcpCheckoutSession, formatUcpCompleteResponse, formatUcpOrder, formatUcpCatalogSearch, formatUcpCatalogLookup, formatUcpError, ucpToSaleorAddress, metadataToRecord, recordToMetadataInput, extractSignedSummary, readStoredPrismAccepts, validateSignedAgainstStored, planCartReplacement, saleorErrorsToUcpMessages, evaluateReadiness, isWellFormedInstrument, } from "@financedistrict/saleor-agentic-commerce-core";
25
+ import { formatUcpProfile, formatUcpCheckoutSession, formatUcpCompleteResponse, formatUcpOrder, formatUcpCatalogSearch, formatUcpCatalogLookup, createUcpVersionRegistry, ucpToSaleorAddress, metadataToRecord, recordToMetadataInput, extractSignedSummary, readStoredPrismAccepts, validateSignedAgainstStored, planCartReplacement, saleorErrorsToUcpMessages, evaluateReadiness, isWellFormedInstrument, } from "@financedistrict/saleor-agentic-commerce-core";
26
+ import { createAgentProfileFetcher } from "@financedistrict/saleor-agentic-commerce-core/agent-profile-fetcher";
27
+ import { UCP_VERSION_METADATA_KEY, applyUcpSessionPin, logUcpResolution, resolveUcpVersion, sessionPinFor, unsupportedVersionMessage, } from "../middleware/ucp-version.js";
28
28
  // Checkout privateMetadata key holding the settlement record (SAC-2): the tx
29
29
  // reference + amount, written the moment a payment settles — BEFORE the Saleor
30
30
  // writes that can fail. Turns a settle-then-fail into a recoverable, auditable
@@ -32,19 +32,52 @@ import { formatUcpProfile, formatUcpCheckoutSession, formatUcpCompleteResponse,
32
32
  const SETTLEMENT_METADATA_KEY = "agentic_commerce__settlement";
33
33
  export function createUcpRoutes(instance) {
34
34
  const { saleorClient, paymentHandlers, formatterContext, config } = instance;
35
- function ucpError(code, content, status, severity) {
36
- return Response.json(formatUcpError({ ucpVersion: config.ucpVersion, code, content, severity }), { status });
35
+ const ucpRegistry = instance.ucpRegistry ?? createUcpVersionRegistry({ ucpVersion: config.ucpVersion });
36
+ const agentProfileFetcher = instance.agentProfileFetcher ?? createAgentProfileFetcher();
37
+ function ucpError(wire, code, content, status, severity) {
38
+ return Response.json(wire.error({ code, content, severity }), { status });
39
+ }
40
+ function scopeOf(resolution) {
41
+ return {
42
+ resolution,
43
+ version: resolution.version,
44
+ wire: resolution.wire,
45
+ ctx: { ...formatterContext, ucpVersion: resolution.version },
46
+ };
47
+ }
48
+ function rejectionResponse(resolution) {
49
+ if (!resolution.rejection)
50
+ return null;
51
+ const { status, code, content } = resolution.rejection;
52
+ return ucpError(resolution.wire, code, content, status);
53
+ }
54
+ async function resolveScope(request) {
55
+ const resolution = await resolveUcpVersion(ucpRegistry, request, agentProfileFetcher);
56
+ logUcpResolution(resolution);
57
+ return rejectionResponse(resolution) ?? scopeOf(resolution);
58
+ }
59
+ function pinScope(scope, metadata) {
60
+ const pinned = applyUcpSessionPin(ucpRegistry, scope.resolution, metadata[UCP_VERSION_METADATA_KEY]);
61
+ if (pinned === scope.resolution)
62
+ return scope;
63
+ if (pinned.version !== scope.version)
64
+ logUcpResolution(pinned);
65
+ return rejectionResponse(pinned) ?? scopeOf(pinned);
66
+ }
67
+ function supportedVersionLinks() {
68
+ const base = config.storefrontUrl.replace(/\/$/, "");
69
+ return Object.fromEntries(ucpRegistry.supported.map((v) => [v, `${base}/.well-known/ucp/${v}`]));
37
70
  }
38
71
  // Surface a failed Saleor mutation with its structured field errors — one UCP
39
72
  // message per error, field preserved — instead of collapsing to errors[0]
40
73
  // (SAC-5). Defaults to recoverable: validation errors are fixable input.
41
- function ucpSaleorError(code, status, result, severity = "recoverable") {
74
+ function ucpSaleorError(wire, code, status, result, severity = "recoverable") {
42
75
  const messages = saleorErrorsToUcpMessages(result.errors, {
43
76
  code,
44
77
  severity,
45
78
  fallbackContent: result.error,
46
79
  });
47
- return Response.json(formatUcpError({ ucpVersion: config.ucpVersion, messages }), { status });
80
+ return Response.json(wire.error({ messages }), { status });
48
81
  }
49
82
  /**
50
83
  * Enforce master + per-protocol enable flags. When agentic commerce is
@@ -74,7 +107,7 @@ export function createUcpRoutes(instance) {
74
107
  * Shared helper: prepare payment handlers and store metadata on checkout.
75
108
  * Returns the final checkout with updated metadata.
76
109
  */
77
- async function preparePaymentAndRefetch(checkoutId, checkout, baseUrl) {
110
+ async function preparePaymentAndRefetch(checkoutId, checkout, baseUrl, pin) {
78
111
  const totalAmount = Math.round(checkout.totalPrice.gross.amount * 100);
79
112
  const metadata = metadataToRecord(checkout.privateMetadata);
80
113
  const prepareResults = await paymentHandlers.prepareCheckoutPayment({
@@ -85,7 +118,10 @@ export function createUcpRoutes(instance) {
85
118
  storeName: config.storeName,
86
119
  checkoutMetadata: metadata,
87
120
  });
88
- const metadataUpdates = recordToMetadataInput(prepareResults);
121
+ const metadataUpdates = recordToMetadataInput({
122
+ ...prepareResults,
123
+ ...(pin ? { [UCP_VERSION_METADATA_KEY]: pin } : {}),
124
+ });
89
125
  if (metadataUpdates.length > 0) {
90
126
  // Best-effort persist of the prepared payment config. If this write
91
127
  // fails the next request will re-prepare (idempotent on Prism's side
@@ -112,7 +148,25 @@ export function createUcpRoutes(instance) {
112
148
  if (blocked)
113
149
  return blocked;
114
150
  const baseUrl = endpointBaseUrl(request);
115
- const profile = await formatUcpProfile(formatterContext, baseUrl);
151
+ const profile = await formatUcpProfile({ ...formatterContext, ucpVersion: ucpRegistry.current }, baseUrl, supportedVersionLinks());
152
+ return Response.json(profile, {
153
+ headers: {
154
+ "Cache-Control": "public, max-age=300",
155
+ "Content-Type": "application/json",
156
+ },
157
+ });
158
+ },
159
+ },
160
+ discoveryVersion: {
161
+ async GET(request, context) {
162
+ const blocked = checkUcpEnabled();
163
+ if (blocked)
164
+ return blocked;
165
+ const { version } = await context.params;
166
+ if (!ucpRegistry.isEnabled(version)) {
167
+ return ucpError(ucpRegistry.currentWire(), "version_unsupported", unsupportedVersionMessage(ucpRegistry, version), 404);
168
+ }
169
+ const profile = await formatUcpProfile({ ...formatterContext, ucpVersion: version }, endpointBaseUrl(request));
116
170
  return Response.json(profile, {
117
171
  headers: {
118
172
  "Cache-Control": "public, max-age=300",
@@ -129,16 +183,20 @@ export function createUcpRoutes(instance) {
129
183
  const blocked = checkUcpEnabled();
130
184
  if (blocked)
131
185
  return blocked;
186
+ const resolved = await resolveScope(request);
187
+ if (resolved instanceof Response)
188
+ return resolved;
189
+ const scope = resolved;
132
190
  let body;
133
191
  try {
134
192
  body = await request.json();
135
193
  }
136
194
  catch {
137
- return ucpError("invalid_body", "Request body must be valid JSON", 400);
195
+ return ucpError(scope.wire, "invalid_body", "Request body must be valid JSON", 400);
138
196
  }
139
197
  const lineItems = body.line_items;
140
198
  if (!Array.isArray(lineItems) || lineItems.length === 0) {
141
- return ucpError("missing_line_items", "line_items array is required", 400, "recoverable");
199
+ return ucpError(scope.wire, "missing_line_items", "line_items array is required", 400, "recoverable");
142
200
  }
143
201
  // Map UCP line items to Saleor checkout lines
144
202
  const lines = lineItems.map((item) => ({
@@ -162,18 +220,18 @@ export function createUcpRoutes(instance) {
162
220
  billingAddress: shippingAddress,
163
221
  });
164
222
  if (!checkoutResult.ok) {
165
- return ucpSaleorError("checkout_create_failed", 422, checkoutResult);
223
+ return ucpSaleorError(scope.wire, "checkout_create_failed", 422, checkoutResult);
166
224
  }
167
225
  // If a shipping address was supplied but Saleor returns no usable
168
226
  // shipping methods for it, fail loudly here rather than silently
169
227
  // accepting an unfulfillable order that would later die at complete.
170
228
  if (shippingAddress && checkoutResult.data.shippingMethods.length === 0) {
171
- return ucpError("unsupported_shipping_destination", `No shipping methods available for destination country '${shippingAddress.country ?? "unknown"}'`, 422, "requires_buyer_input");
229
+ return ucpError(scope.wire, "unsupported_shipping_destination", `No shipping methods available for destination country '${shippingAddress.country ?? "unknown"}'`, 422, "requires_buyer_input");
172
230
  }
173
231
  const baseUrl = endpointBaseUrl(request);
174
- const finalCheckout = await preparePaymentAndRefetch(checkoutResult.data.id, checkoutResult.data, baseUrl);
232
+ const finalCheckout = await preparePaymentAndRefetch(checkoutResult.data.id, checkoutResult.data, baseUrl, sessionPinFor(scope.resolution));
175
233
  const readiness = await evaluateReadiness(saleorClient, finalCheckout);
176
- const session = formatUcpCheckoutSession(formatterContext, finalCheckout, readiness);
234
+ const session = formatUcpCheckoutSession(scope.ctx, finalCheckout, readiness);
177
235
  return Response.json(session, { status: 201 });
178
236
  },
179
237
  },
@@ -185,45 +243,63 @@ export function createUcpRoutes(instance) {
185
243
  const blocked = checkUcpEnabled();
186
244
  if (blocked)
187
245
  return blocked;
246
+ const resolved = await resolveScope(request);
247
+ if (resolved instanceof Response)
248
+ return resolved;
249
+ let scope = resolved;
188
250
  const { id } = await context.params;
189
251
  const result = await saleorClient.getCheckout(id);
190
252
  if (!result.ok)
191
- return ucpError("checkout_not_found", result.error, 404);
253
+ return ucpError(scope.wire, "checkout_not_found", result.error, 404);
254
+ const sessionMetadata = metadataToRecord(result.data.privateMetadata);
255
+ const pinned = pinScope(scope, sessionMetadata);
256
+ if (pinned instanceof Response)
257
+ return pinned;
258
+ scope = pinned;
192
259
  // metadataToRecord JSON.parses values, so the literal "true" written by
193
260
  // the cancel route comes back as boolean true (not the string "true").
194
- const canceled = metadataToRecord(result.data.privateMetadata).ucp_canceled === true;
261
+ const canceled = sessionMetadata.ucp_canceled === true;
195
262
  if (canceled) {
196
- const session = formatUcpCheckoutSession(formatterContext, result.data);
263
+ const session = formatUcpCheckoutSession(scope.ctx, result.data);
197
264
  return Response.json({ ...session, status: "canceled" });
198
265
  }
199
266
  const readiness = await evaluateReadiness(saleorClient, result.data);
200
- const session = formatUcpCheckoutSession(formatterContext, result.data, readiness);
267
+ const session = formatUcpCheckoutSession(scope.ctx, result.data, readiness);
201
268
  return Response.json(session);
202
269
  },
203
270
  async PUT(request, context) {
204
271
  const blocked = checkUcpEnabled();
205
272
  if (blocked)
206
273
  return blocked;
274
+ const resolved = await resolveScope(request);
275
+ if (resolved instanceof Response)
276
+ return resolved;
277
+ let scope = resolved;
207
278
  const { id } = await context.params;
208
279
  let body;
209
280
  try {
210
281
  body = await request.json();
211
282
  }
212
283
  catch {
213
- return ucpError("invalid_body", "Request body must be valid JSON", 400);
284
+ return ucpError(scope.wire, "invalid_body", "Request body must be valid JSON", 400);
214
285
  }
215
286
  // Refuse updates on a session the agent has already cancelled.
216
287
  const cancelGuard = await saleorClient.getCheckout(id);
217
288
  if (!cancelGuard.ok)
218
- return ucpError("checkout_not_found", cancelGuard.error, 404);
219
- if (metadataToRecord(cancelGuard.data.privateMetadata).ucp_canceled === true) {
220
- return ucpError("session_canceled", "Checkout session has been canceled", 409);
289
+ return ucpError(scope.wire, "checkout_not_found", cancelGuard.error, 404);
290
+ const sessionMetadata = metadataToRecord(cancelGuard.data.privateMetadata);
291
+ const pinned = pinScope(scope, sessionMetadata);
292
+ if (pinned instanceof Response)
293
+ return pinned;
294
+ scope = pinned;
295
+ if (sessionMetadata.ucp_canceled === true) {
296
+ return ucpError(scope.wire, "session_canceled", "Checkout session has been canceled", 409);
221
297
  }
222
298
  // Update buyer email
223
299
  if (body.buyer?.email) {
224
300
  const result = await saleorClient.updateCheckoutEmail(id, body.buyer.email);
225
301
  if (!result.ok)
226
- return ucpSaleorError("email_update_failed", 422, result);
302
+ return ucpSaleorError(scope.wire, "email_update_failed", 422, result);
227
303
  }
228
304
  // Update fulfillment: extract destination address and selected option
229
305
  if (body.fulfillment?.methods) {
@@ -235,9 +311,9 @@ export function createUcpRoutes(instance) {
235
311
  const addr = ucpToSaleorAddress(dest);
236
312
  const result = await saleorClient.updateCheckoutShippingAddress(id, addr);
237
313
  if (!result.ok)
238
- return ucpSaleorError("shipping_address_update_failed", 422, result);
314
+ return ucpSaleorError(scope.wire, "shipping_address_update_failed", 422, result);
239
315
  if (result.data.shippingMethods.length === 0) {
240
- return ucpError("unsupported_shipping_destination", `No shipping methods available for destination country '${addr.country ?? "unknown"}'`, 422, "requires_buyer_input");
316
+ return ucpError(scope.wire, "unsupported_shipping_destination", `No shipping methods available for destination country '${addr.country ?? "unknown"}'`, 422, "requires_buyer_input");
241
317
  }
242
318
  // Mirror billing if it hasn't been set yet (UCP has no
243
319
  // first-class billing block), so checkoutComplete doesn't
@@ -245,7 +321,7 @@ export function createUcpRoutes(instance) {
245
321
  if (!result.data.billingAddress) {
246
322
  const billingResult = await saleorClient.updateCheckoutBillingAddress(id, addr);
247
323
  if (!billingResult.ok) {
248
- return ucpSaleorError("billing_address_update_failed", 422, billingResult);
324
+ return ucpSaleorError(scope.wire, "billing_address_update_failed", 422, billingResult);
249
325
  }
250
326
  }
251
327
  }
@@ -254,7 +330,7 @@ export function createUcpRoutes(instance) {
254
330
  if (selectedOptionId) {
255
331
  const result = await saleorClient.updateCheckoutDeliveryMethod(id, selectedOptionId);
256
332
  if (!result.ok)
257
- return ucpSaleorError("delivery_method_update_failed", 422, result);
333
+ return ucpSaleorError(scope.wire, "delivery_method_update_failed", 422, result);
258
334
  }
259
335
  }
260
336
  }
@@ -278,27 +354,27 @@ export function createUcpRoutes(instance) {
278
354
  if (plan.toDelete.length > 0) {
279
355
  const del = await saleorClient.deleteCheckoutLines(id, plan.toDelete);
280
356
  if (!del.ok)
281
- return ucpSaleorError("items_update_failed", 422, del);
357
+ return ucpSaleorError(scope.wire, "items_update_failed", 422, del);
282
358
  }
283
359
  if (plan.toAdd.length > 0) {
284
360
  const add = await saleorClient.addCheckoutLines(id, plan.toAdd);
285
361
  if (!add.ok)
286
- return ucpSaleorError("items_update_failed", 422, add);
362
+ return ucpSaleorError(scope.wire, "items_update_failed", 422, add);
287
363
  }
288
364
  if (plan.toUpdate.length > 0) {
289
365
  const upd = await saleorClient.updateCheckoutLines(id, plan.toUpdate);
290
366
  if (!upd.ok)
291
- return ucpSaleorError("items_update_failed", 422, upd);
367
+ return ucpSaleorError(scope.wire, "items_update_failed", 422, upd);
292
368
  }
293
369
  }
294
370
  // Re-fetch and prepare payment
295
371
  const checkoutResult = await saleorClient.getCheckout(id);
296
372
  if (!checkoutResult.ok)
297
- return ucpError("checkout_not_found", checkoutResult.error, 404);
373
+ return ucpError(scope.wire, "checkout_not_found", checkoutResult.error, 404);
298
374
  const baseUrl = endpointBaseUrl(request);
299
375
  const finalCheckout = await preparePaymentAndRefetch(id, checkoutResult.data, baseUrl);
300
376
  const readiness = await evaluateReadiness(saleorClient, finalCheckout);
301
- const session = formatUcpCheckoutSession(formatterContext, finalCheckout, readiness);
377
+ const session = formatUcpCheckoutSession(scope.ctx, finalCheckout, readiness);
302
378
  return Response.json(session);
303
379
  },
304
380
  },
@@ -310,37 +386,46 @@ export function createUcpRoutes(instance) {
310
386
  const blocked = checkUcpEnabled();
311
387
  if (blocked)
312
388
  return blocked;
389
+ const resolved = await resolveScope(request);
390
+ if (resolved instanceof Response)
391
+ return resolved;
392
+ let scope = resolved;
313
393
  const { id } = await context.params;
314
394
  let body;
315
395
  try {
316
396
  body = await request.json();
317
397
  }
318
398
  catch {
319
- return ucpError("invalid_body", "Request body must be valid JSON", 400);
399
+ return ucpError(scope.wire, "invalid_body", "Request body must be valid JSON", 400);
320
400
  }
321
401
  // Extract payment instrument
322
402
  const payment = body.payment;
323
403
  if (!payment?.instruments || !Array.isArray(payment.instruments)) {
324
- return ucpError("missing_payment", "payment.instruments array is required", 400, "recoverable");
404
+ return ucpError(scope.wire, "missing_payment", "payment.instruments array is required", 400, "recoverable");
325
405
  }
326
406
  const selectedInstrument = payment.instruments.find((i) => i.selected) || payment.instruments[0];
327
407
  if (!selectedInstrument) {
328
- return ucpError("no_instrument_selected", "At least one payment instrument must be provided", 400, "recoverable");
329
- }
330
- if (!isWellFormedInstrument(selectedInstrument)) {
331
- return ucpError("invalid_instrument", "Payment instrument requires string id, handler_id, type and credential.type", 400, "recoverable");
408
+ return ucpError(scope.wire, "no_instrument_selected", "At least one payment instrument must be provided", 400, "recoverable");
332
409
  }
333
410
  // Fetch checkout for metadata
334
411
  const checkoutResult = await saleorClient.getCheckout(id);
335
412
  if (!checkoutResult.ok)
336
- return ucpError("checkout_not_found", checkoutResult.error, 404);
413
+ return ucpError(scope.wire, "checkout_not_found", checkoutResult.error, 404);
337
414
  const checkout = checkoutResult.data;
338
415
  const metadata = metadataToRecord(checkout.privateMetadata);
416
+ const pinned = pinScope(scope, metadata);
417
+ if (pinned instanceof Response)
418
+ return pinned;
419
+ scope = pinned;
420
+ if (!isWellFormedInstrument(selectedInstrument)) {
421
+ return ucpError(scope.wire, "invalid_instrument", "Payment instrument requires handler_id", 400, "recoverable");
422
+ }
423
+ const handlerId = paymentHandlers.getAdapter(selectedInstrument.handler_id)?.id ?? selectedInstrument.handler_id;
339
424
  // Refuse to settle on a session the agent has already cancelled.
340
425
  // Without this, an agent that aborts and retries can still sign
341
426
  // and settle against a session it thought was dead.
342
427
  if (metadata.ucp_canceled === true) {
343
- return ucpError("session_canceled", "Checkout session has been canceled", 409);
428
+ return ucpError(scope.wire, "session_canceled", "Checkout session has been canceled", 409);
344
429
  }
345
430
  // Update billing address if provided on instrument. Mirror the
346
431
  // PUT route's error-check pattern (~ line 284): the same SDK call
@@ -351,7 +436,7 @@ export function createUcpRoutes(instance) {
351
436
  const addr = ucpToSaleorAddress(selectedInstrument.billing_address);
352
437
  const billingResult = await saleorClient.updateCheckoutBillingAddress(id, addr);
353
438
  if (!billingResult.ok) {
354
- return ucpSaleorError("billing_address_update_failed", 422, billingResult);
439
+ return ucpSaleorError(scope.wire, "billing_address_update_failed", 422, billingResult);
355
440
  }
356
441
  }
357
442
  // Validate the agent's signed payload against the checkout's
@@ -366,7 +451,7 @@ export function createUcpRoutes(instance) {
366
451
  if (storedAccepts) {
367
452
  const validation = validateSignedAgainstStored(signedSummary, storedAccepts);
368
453
  if (!validation.ok) {
369
- return ucpError(validation.code, validation.message, 422);
454
+ return ucpError(scope.wire, validation.code, validation.message, 422);
370
455
  }
371
456
  }
372
457
  }
@@ -388,18 +473,18 @@ export function createUcpRoutes(instance) {
388
473
  // payment; otherwise surface its status + messages and move no funds.
389
474
  const readiness = await evaluateReadiness(saleorClient, checkout);
390
475
  if (!readiness.ready) {
391
- return Response.json(formatUcpCheckoutSession(formatterContext, checkout, readiness));
476
+ return Response.json(formatUcpCheckoutSession(scope.ctx, checkout, readiness));
392
477
  }
393
478
  const settleResult = await paymentHandlers.settlePayment({
394
479
  checkoutId: id,
395
480
  protocol: "ucp",
396
- handlerId: selectedInstrument.handler_id,
481
+ handlerId,
397
482
  instrumentType: selectedInstrument.type,
398
483
  credential: selectedInstrument.credential,
399
484
  checkoutMetadata: metadata,
400
485
  });
401
486
  if (!settleResult.success) {
402
- return ucpError("payment_failed", settleResult.error || "Payment settlement failed", 422, "recoverable");
487
+ return ucpError(scope.wire, "payment_failed", settleResult.error || "Payment settlement failed", 422, "recoverable");
403
488
  }
404
489
  reference = settleResult.transactionReference;
405
490
  // Record the settlement BEFORE createCheckoutTransaction/completeCheckout
@@ -407,7 +492,7 @@ export function createUcpRoutes(instance) {
407
492
  // analog of Shopware's settlement table; the response is stored opaquely.
408
493
  if (reference) {
409
494
  const record = {
410
- handlerId: selectedInstrument.handler_id,
495
+ handlerId,
411
496
  reference,
412
497
  amount: checkout.totalPrice.gross.amount,
413
498
  currency: checkout.totalPrice.gross.currency,
@@ -422,7 +507,7 @@ export function createUcpRoutes(instance) {
422
507
  // settled payment; a retry re-persists (the nonce blocks any
423
508
  // double-charge).
424
509
  console.error(`[ucp-routes] settled ${reference} but failed to record settlement on ${id}: ${recResult.error}`);
425
- return ucpError("settlement_not_recorded", `Payment settled on-chain (reference ${reference}) but recording it failed — the order was not created. Retry to reconcile.`, 422, "recoverable");
510
+ return ucpError(scope.wire, "settlement_not_recorded", `Payment settled on-chain (reference ${reference}) but recording it failed — the order was not created. Retry to reconcile.`, 422, "recoverable");
426
511
  }
427
512
  }
428
513
  }
@@ -432,9 +517,9 @@ export function createUcpRoutes(instance) {
432
517
  if (reference) {
433
518
  const alreadyRecorded = (checkout.transactions ?? []).some((t) => t.pspReference === reference);
434
519
  if (!alreadyRecorded) {
435
- const handler = paymentHandlers.getAdapter(selectedInstrument.handler_id);
520
+ const handler = paymentHandlers.getAdapter(handlerId);
436
521
  const txResult = await saleorClient.createCheckoutTransaction(id, {
437
- name: handler?.name ?? selectedInstrument.handler_id,
522
+ name: handler?.name ?? handlerId,
438
523
  pspReference: reference,
439
524
  amountCharged: {
440
525
  amount: checkout.totalPrice.gross.amount,
@@ -445,7 +530,7 @@ export function createUcpRoutes(instance) {
445
530
  // Honest reporting (SAC-2): the PAYMENT succeeded; recording the
446
531
  // order failed — not payment_failed. Settlement is recorded, so a
447
532
  // retry resumes here.
448
- return ucpError("order_not_recorded_after_settlement", `Payment settled (reference ${reference}) but recording the order failed: ${txResult.error}. Retry to complete the order.`, 422, "recoverable");
533
+ return ucpError(scope.wire, "order_not_recorded_after_settlement", `Payment settled (reference ${reference}) but recording the order failed: ${txResult.error}. Retry to complete the order.`, 422, "recoverable");
449
534
  }
450
535
  }
451
536
  }
@@ -456,9 +541,9 @@ export function createUcpRoutes(instance) {
456
541
  // succeeded and only order placement failed (e.g. stock/voucher at
457
542
  // commit) — say so, and let a retry resume without re-charging.
458
543
  if (reference) {
459
- return ucpError("order_not_completed_after_settlement", `Payment settled (reference ${reference}) but completing the order failed: ${orderResult.error}. Retry to complete the order.`, 422, "recoverable");
544
+ return ucpError(scope.wire, "order_not_completed_after_settlement", `Payment settled (reference ${reference}) but completing the order failed: ${orderResult.error}. Retry to complete the order.`, 422, "recoverable");
460
545
  }
461
- return ucpSaleorError("checkout_complete_failed", 422, orderResult);
546
+ return ucpSaleorError(scope.wire, "checkout_complete_failed", 422, orderResult);
462
547
  }
463
548
  // Return checkout session with completed status and order confirmation
464
549
  const orderConfirmation = {
@@ -466,7 +551,7 @@ export function createUcpRoutes(instance) {
466
551
  label: orderResult.data.number ?? undefined,
467
552
  permalink_url: `${config.storefrontUrl}/orders/${orderResult.data.id}`,
468
553
  };
469
- const response = formatUcpCompleteResponse(formatterContext, checkout, orderConfirmation);
554
+ const response = formatUcpCompleteResponse(scope.ctx, checkout, orderConfirmation);
470
555
  return Response.json(response);
471
556
  },
472
557
  },
@@ -474,15 +559,23 @@ export function createUcpRoutes(instance) {
474
559
  // Cancel Checkout Session
475
560
  // =====================================================
476
561
  checkoutSessionCancel: {
477
- async POST(_request, context) {
562
+ async POST(request, context) {
478
563
  const blocked = checkUcpEnabled();
479
564
  if (blocked)
480
565
  return blocked;
566
+ const resolved = await resolveScope(request);
567
+ if (resolved instanceof Response)
568
+ return resolved;
569
+ let scope = resolved;
481
570
  const { id } = await context.params;
482
571
  // Verify checkout exists
483
572
  const result = await saleorClient.getCheckout(id);
484
573
  if (!result.ok)
485
- return ucpError("checkout_not_found", result.error, 404);
574
+ return ucpError(scope.wire, "checkout_not_found", result.error, 404);
575
+ const pinned = pinScope(scope, metadataToRecord(result.data.privateMetadata));
576
+ if (pinned instanceof Response)
577
+ return pinned;
578
+ scope = pinned;
486
579
  // Mark as canceled via metadata. We MUST check this write succeeded
487
580
  // before telling the agent the session is cancelled — the cancel
488
581
  // guards on GET/PUT/complete (PR #40, fixed in PR #42) read this
@@ -499,10 +592,10 @@ export function createUcpRoutes(instance) {
499
592
  { key: "ucp_canceled_at", value: new Date().toISOString() },
500
593
  ]);
501
594
  if (!persistResult.ok) {
502
- return ucpError("cancel_persist_failed", persistResult.error, 422);
595
+ return ucpError(scope.wire, "cancel_persist_failed", persistResult.error, 422);
503
596
  }
504
597
  // Return full checkout session with canceled status
505
- const session = formatUcpCheckoutSession(formatterContext, result.data);
598
+ const session = formatUcpCheckoutSession(scope.ctx, result.data);
506
599
  return Response.json({
507
600
  ...session,
508
601
  status: "canceled",
@@ -517,11 +610,15 @@ export function createUcpRoutes(instance) {
517
610
  const blocked = checkUcpEnabled();
518
611
  if (blocked)
519
612
  return blocked;
613
+ const resolved = await resolveScope(request);
614
+ if (resolved instanceof Response)
615
+ return resolved;
616
+ const scope = resolved;
520
617
  const { id } = await context.params;
521
618
  const result = await saleorClient.getOrder(id);
522
619
  if (!result.ok)
523
- return ucpError("order_not_found", result.error, 404);
524
- const order = formatUcpOrder(formatterContext, result.data);
620
+ return ucpError(scope.wire, "order_not_found", result.error, 404);
621
+ const order = formatUcpOrder(scope.ctx, result.data);
525
622
  return Response.json(order);
526
623
  },
527
624
  },
@@ -533,12 +630,19 @@ export function createUcpRoutes(instance) {
533
630
  const blocked = checkUcpEnabled();
534
631
  if (blocked)
535
632
  return blocked;
633
+ const resolved = await resolveScope(request);
634
+ if (resolved instanceof Response)
635
+ return resolved;
636
+ const scope = resolved;
637
+ if (!scope.wire.supports("catalog")) {
638
+ return ucpError(scope.wire, "capabilities_incompatible", `Catalog is not available in UCP version ${scope.version}.`, 404);
639
+ }
536
640
  let body;
537
641
  try {
538
642
  body = await request.json();
539
643
  }
540
644
  catch {
541
- return ucpError("invalid_body", "Request body must be valid JSON", 400);
645
+ return ucpError(scope.wire, "invalid_body", "Request body must be valid JSON", 400);
542
646
  }
543
647
  const query = body.query ?? "";
544
648
  const limit = Math.min(body.pagination?.limit ?? 20, 100);
@@ -552,8 +656,8 @@ export function createUcpRoutes(instance) {
552
656
  cursor,
553
657
  });
554
658
  if (!result.ok)
555
- return ucpError("catalog_search_failed", result.error, 422);
556
- const response = formatUcpCatalogSearch(config.ucpVersion, result.data);
659
+ return ucpError(scope.wire, "catalog_search_failed", result.error, 422);
660
+ const response = formatUcpCatalogSearch(scope.version, result.data);
557
661
  return Response.json(response);
558
662
  },
559
663
  },
@@ -565,21 +669,28 @@ export function createUcpRoutes(instance) {
565
669
  const blocked = checkUcpEnabled();
566
670
  if (blocked)
567
671
  return blocked;
672
+ const resolved = await resolveScope(request);
673
+ if (resolved instanceof Response)
674
+ return resolved;
675
+ const scope = resolved;
676
+ if (!scope.wire.supports("catalog")) {
677
+ return ucpError(scope.wire, "capabilities_incompatible", `Catalog is not available in UCP version ${scope.version}.`, 404);
678
+ }
568
679
  let body;
569
680
  try {
570
681
  body = await request.json();
571
682
  }
572
683
  catch {
573
- return ucpError("invalid_body", "Request body must be valid JSON", 400);
684
+ return ucpError(scope.wire, "invalid_body", "Request body must be valid JSON", 400);
574
685
  }
575
686
  const ids = Array.isArray(body.ids) ? body.ids : [];
576
687
  if (ids.length === 0) {
577
- return ucpError("missing_ids", "ids array is required and must not be empty", 400);
688
+ return ucpError(scope.wire, "missing_ids", "ids array is required and must not be empty", 400);
578
689
  }
579
690
  const result = await saleorClient.lookupProductsAndVariants({ ids });
580
691
  if (!result.ok)
581
- return ucpError("catalog_lookup_failed", result.error, 422);
582
- const response = formatUcpCatalogLookup(config.ucpVersion, result.data);
692
+ return ucpError(scope.wire, "catalog_lookup_failed", result.error, 422);
693
+ const response = formatUcpCatalogLookup(scope.version, result.data);
583
694
  return Response.json(response);
584
695
  },
585
696
  },
@@ -1 +1 @@
1
- {"version":3,"file":"ucp-routes.js","sourceRoot":"","sources":["../../src/routes/ucp-routes.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ucp-routes.js","sourceRoot":"","sources":["../../src/routes/ucp-routes.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@financedistrict/saleor-agentic-commerce-nextjs",
3
- "version": "2.0.0",
3
+ "version": "2.1.0",
4
4
  "description": "Drop-in Next.js route handlers that expose your Saleor storefront to AI shopping agents via UCP and ACP protocols.",
5
5
  "author": "Finance District <developers@fd.xyz>",
6
6
  "license": "MIT",
@@ -62,7 +62,7 @@
62
62
  },
63
63
  "dependencies": {},
64
64
  "peerDependencies": {
65
- "@financedistrict/saleor-agentic-commerce-core": "^1.0.0",
65
+ "@financedistrict/saleor-agentic-commerce-core": "^1.1.0",
66
66
  "next": ">=14.0.0"
67
67
  },
68
68
  "peerDependenciesMeta": {
@@ -72,7 +72,7 @@
72
72
  },
73
73
  "devDependencies": {
74
74
  "typescript": "^5.3.0",
75
- "@financedistrict/saleor-agentic-commerce-core": "1.0.0"
75
+ "@financedistrict/saleor-agentic-commerce-core": "1.1.0"
76
76
  },
77
77
  "scripts": {
78
78
  "build": "tsc",