@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 +32 -1
- package/dist/config.d.ts +6 -2
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +10 -2
- package/dist/config.js.map +1 -1
- package/dist/middleware/ucp-version.d.ts +24 -0
- package/dist/middleware/ucp-version.d.ts.map +1 -0
- package/dist/middleware/ucp-version.js +86 -0
- package/dist/middleware/ucp-version.js.map +1 -0
- package/dist/routes/ucp-routes.d.ts +7 -2
- package/dist/routes/ucp-routes.d.ts.map +1 -1
- package/dist/routes/ucp-routes.js +179 -68
- package/dist/routes/ucp-routes.js.map +1 -1
- package/package.json +3 -3
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. */
|
package/dist/config.d.ts.map
CHANGED
|
@@ -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;
|
|
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,
|
|
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
|
|
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,
|
package/dist/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EACL,YAAY,EACZ,sBAAsB,EACtB,
|
|
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
|
|
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,
|
|
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
|
-
|
|
36
|
-
|
|
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(
|
|
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(
|
|
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(
|
|
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 =
|
|
261
|
+
const canceled = sessionMetadata.ucp_canceled === true;
|
|
195
262
|
if (canceled) {
|
|
196
|
-
const session = formatUcpCheckoutSession(
|
|
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(
|
|
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
|
-
|
|
220
|
-
|
|
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(
|
|
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(
|
|
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
|
|
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
|
|
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(
|
|
520
|
+
const handler = paymentHandlers.getAdapter(handlerId);
|
|
436
521
|
const txResult = await saleorClient.createCheckoutTransaction(id, {
|
|
437
|
-
name: handler?.name ??
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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.
|
|
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.
|
|
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.
|
|
75
|
+
"@financedistrict/saleor-agentic-commerce-core": "1.1.0"
|
|
76
76
|
},
|
|
77
77
|
"scripts": {
|
|
78
78
|
"build": "tsc",
|