@omnixhq/ucp-client 2.0.0 → 2.2.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
@@ -167,8 +167,41 @@ if (client.checkout) {
167
167
 
168
168
  console.log(Object.keys(client.paymentHandlers));
169
169
  // e.g., ['com.google.pay', 'dev.shopify.shop_pay']
170
+
171
+ client.signingKeys; // JWK[] — EC P-256 keys for webhook verification
172
+ ```
173
+
174
+ ## Webhook signature verification
175
+
176
+ UCP businesses sign webhook POST requests with a detached JWS in the `Request-Signature` header (RFC 7797). The JWT header MUST include a `kid` claim identifying the signing key.
177
+
178
+ Use `createWebhookVerifier` to get a stateful verifier that fetches and caches signing keys from the business's discovery profile. It automatically re-fetches on a `kid` cache miss to support zero-downtime key rotation.
179
+
180
+ ```typescript
181
+ import { createWebhookVerifier } from '@omnixhq/ucp-client';
182
+
183
+ const verifier = createWebhookVerifier('https://store.example.com');
184
+
185
+ // In your webhook handler — MUST respond quickly with 2xx, process async:
186
+ const valid = await verifier.verify(rawBody, req.headers['request-signature']);
187
+ if (!valid) return res.status(401).send('Invalid signature');
188
+
189
+ // Safe to process
170
190
  ```
171
191
 
192
+ Keys are loaded lazily on the first `verify()` call from `<gatewayUrl>/.well-known/ucp` and cached by `kid`. A `kid` not found in cache triggers one re-fetch (key rotation support).
193
+
194
+ If you already have signing keys loaded (e.g. from `client.signingKeys`), use `verifyRequestSignature` directly:
195
+
196
+ ```typescript
197
+ import { UCPClient, verifyRequestSignature } from '@omnixhq/ucp-client';
198
+
199
+ const client = await UCPClient.connect(config);
200
+ const valid = await verifyRequestSignature(rawBody, signature, client.signingKeys);
201
+ ```
202
+
203
+ See [examples/webhook-verification.ts](./examples/webhook-verification.ts) for a complete HTTP server example.
204
+
172
205
  ## Framework adapters
173
206
 
174
207
  Ready-made adapters convert `getAgentTools()` output to each framework's native format — no manual mapping.
@@ -1,4 +1,4 @@
1
- import { AdapterOptions, AgentTool, JsonSchema } from "../catch-errors-jyrE4r9F.cjs";
1
+ import { AdapterOptions, AgentTool, JsonSchema } from "../catch-errors-BoytVKBJ.cjs";
2
2
 
3
3
  //#region src/adapters/anthropic.d.ts
4
4
  interface AnthropicInputSchema {
@@ -1,4 +1,4 @@
1
- import { AdapterOptions, AgentTool, JsonSchema } from "../catch-errors-BW8p9Abt.js";
1
+ import { AdapterOptions, AgentTool, JsonSchema } from "../catch-errors-lijeGf45.js";
2
2
 
3
3
  //#region src/adapters/anthropic.d.ts
4
4
  interface AnthropicInputSchema {
@@ -1,4 +1,4 @@
1
- import { AdapterOptions, AgentTool, JsonSchema } from "../catch-errors-jyrE4r9F.cjs";
1
+ import { AdapterOptions, AgentTool, JsonSchema } from "../catch-errors-BoytVKBJ.cjs";
2
2
 
3
3
  //#region src/adapters/langchain.d.ts
4
4
  interface LangChainTool {
@@ -1,4 +1,4 @@
1
- import { AdapterOptions, AgentTool, JsonSchema } from "../catch-errors-BW8p9Abt.js";
1
+ import { AdapterOptions, AgentTool, JsonSchema } from "../catch-errors-lijeGf45.js";
2
2
 
3
3
  //#region src/adapters/langchain.d.ts
4
4
  interface LangChainTool {
@@ -1,4 +1,4 @@
1
- import { AdapterOptions, AgentTool, JsonSchema } from "../catch-errors-jyrE4r9F.cjs";
1
+ import { AdapterOptions, AgentTool, JsonSchema } from "../catch-errors-BoytVKBJ.cjs";
2
2
 
3
3
  //#region src/adapters/mcp.d.ts
4
4
  interface MCPInputSchema {
@@ -1,4 +1,4 @@
1
- import { AdapterOptions, AgentTool, JsonSchema } from "../catch-errors-BW8p9Abt.js";
1
+ import { AdapterOptions, AgentTool, JsonSchema } from "../catch-errors-lijeGf45.js";
2
2
 
3
3
  //#region src/adapters/mcp.d.ts
4
4
  interface MCPInputSchema {
@@ -1,4 +1,4 @@
1
- import { AdapterOptions, AgentTool, JsonSchema } from "../catch-errors-jyrE4r9F.cjs";
1
+ import { AdapterOptions, AgentTool, JsonSchema } from "../catch-errors-BoytVKBJ.cjs";
2
2
 
3
3
  //#region src/adapters/openai.d.ts
4
4
  interface OpenAIFunction {
@@ -1,4 +1,4 @@
1
- import { AdapterOptions, AgentTool, JsonSchema } from "../catch-errors-BW8p9Abt.js";
1
+ import { AdapterOptions, AgentTool, JsonSchema } from "../catch-errors-lijeGf45.js";
2
2
 
3
3
  //#region src/adapters/openai.d.ts
4
4
  interface OpenAIFunction {
@@ -1,4 +1,4 @@
1
- import { AdapterOptions, AgentTool, JsonSchema } from "../catch-errors-jyrE4r9F.cjs";
1
+ import { AdapterOptions, AgentTool, JsonSchema } from "../catch-errors-BoytVKBJ.cjs";
2
2
 
3
3
  //#region src/adapters/vercel-ai.d.ts
4
4
  interface VercelAISchema {
@@ -1,4 +1,4 @@
1
- import { AdapterOptions, AgentTool, JsonSchema } from "../catch-errors-BW8p9Abt.js";
1
+ import { AdapterOptions, AgentTool, JsonSchema } from "../catch-errors-lijeGf45.js";
2
2
 
3
3
  //#region src/adapters/vercel-ai.d.ts
4
4
  interface VercelAISchema {
@@ -48,7 +48,14 @@ interface LocalizationContext {
48
48
  readonly address_region?: string;
49
49
  readonly postal_code?: string;
50
50
  }
51
-
51
+ /**
52
+ * A JSON Web Key (RFC 7517).
53
+ * Extends the TypeScript stdlib `JsonWebKey` with the `kid` claim required by UCP for webhook
54
+ * signature verification (the stdlib definition omits `kid`).
55
+ */
56
+ type JWK = JsonWebKey & {
57
+ readonly kid?: string;
58
+ };
52
59
  //#endregion
53
60
  //#region src/types/payment.d.ts
54
61
  //# sourceMappingURL=common.d.ts.map
@@ -157,9 +164,10 @@ interface CompleteCheckoutPayload {
157
164
  readonly ap2?: {
158
165
  readonly checkout_mandate?: string;
159
166
  };
160
- } //#endregion
161
- //#region src/capabilities/checkout.d.ts
167
+ }
162
168
 
169
+ //#endregion
170
+ //#region src/capabilities/checkout.d.ts
163
171
  //# sourceMappingURL=checkout.d.ts.map
164
172
  type FulfillmentPatch = Omit<UpdateCheckoutPayload, 'fulfillment' | 'discounts'>;
165
173
  /**
@@ -189,6 +197,7 @@ type UCPSpecOrder = Order;
189
197
  interface WebhookEvent {
190
198
  readonly event_id: string;
191
199
  readonly created_time: string;
200
+ readonly order: UCPSpecOrder;
192
201
  readonly [key: string]: unknown;
193
202
  }
194
203
 
@@ -307,6 +316,8 @@ interface ToolDescriptor {
307
316
  interface ConnectedClient {
308
317
  /** The server's UCP discovery profile. */
309
318
  readonly profile: UCPProfile;
319
+ /** JWK signing keys from the discovery profile. Used for verifying incoming webhook signatures. */
320
+ readonly signingKeys: readonly JWK[];
310
321
  /** Checkout operations. Null if server does not support `dev.ucp.shopping.checkout`. */
311
322
  readonly checkout: CheckoutCapability | null;
312
323
  /** Order operations. Null if server does not support `dev.ucp.shopping.order`. */
@@ -431,5 +442,5 @@ type ToolErrorResult = {
431
442
  };
432
443
 
433
444
  //#endregion
434
- export { AdapterOptions, AgentTool, AuthorizationParams, BuyerConsent, CardCredential$1 as CardCredential, CheckoutCapability, CheckoutExtensions, CheckoutSession, CheckoutSessionStatus, CompleteCheckoutPayload, ConnectedClient, CreateCheckoutPayload, DEFAULT_UCP_VERSION, IdentityLinkingCapability, JsonSchema, LocalizationContext, OAuthServerMetadata, OrderCapability, PaymentCredential, PaymentHandlerInstance, PaymentHandlerMap, PaymentInstrument, PostalAddress, TokenCredential$1 as TokenCredential, TokenExchangeParams, TokenRefreshParams, TokenResponse, TokenRevokeParams, ToolDescriptor, ToolErrorResult, UCPClient, UCPClientConfig, UCPProfile, UCPSpecOrder, UCP_CAPABILITIES, UpdateCheckoutPayload, WebhookEvent, connect, getAgentTools };
435
- //# sourceMappingURL=catch-errors-jyrE4r9F.d.cts.map
445
+ export { AdapterOptions, AgentTool, AuthorizationParams, BuyerConsent, CardCredential$1 as CardCredential, CheckoutCapability, CheckoutExtensions, CheckoutSession, CheckoutSessionStatus, CompleteCheckoutPayload, ConnectedClient, CreateCheckoutPayload, DEFAULT_UCP_VERSION, IdentityLinkingCapability, JWK, JsonSchema, LocalizationContext, OAuthServerMetadata, OrderCapability, PaymentCredential, PaymentHandlerInstance, PaymentHandlerMap, PaymentInstrument, PostalAddress, TokenCredential$1 as TokenCredential, TokenExchangeParams, TokenRefreshParams, TokenResponse, TokenRevokeParams, ToolDescriptor, ToolErrorResult, UCPClient, UCPClientConfig, UCPProfile, UCPSpecOrder, UCP_CAPABILITIES, UpdateCheckoutPayload, WebhookEvent, connect, getAgentTools };
446
+ //# sourceMappingURL=catch-errors-BoytVKBJ.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"catch-errors-BoytVKBJ.d.cts","names":[],"sources":["../src/http.ts","../src/types/common.ts","../src/types/payment.ts","../src/types/checkout.ts","../src/capabilities/checkout.ts","../src/types/order.ts","../src/capabilities/order.ts","../src/types/identity-linking.ts","../src/capabilities/identity-linking.ts","../src/types/config.ts","../src/UCPClient.ts","../src/agent-tools.ts","../src/adapters/catch-errors.ts"],"sourcesContent":null,"mappings":"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"}
@@ -48,7 +48,14 @@ interface LocalizationContext {
48
48
  readonly address_region?: string;
49
49
  readonly postal_code?: string;
50
50
  }
51
-
51
+ /**
52
+ * A JSON Web Key (RFC 7517).
53
+ * Extends the TypeScript stdlib `JsonWebKey` with the `kid` claim required by UCP for webhook
54
+ * signature verification (the stdlib definition omits `kid`).
55
+ */
56
+ type JWK = JsonWebKey & {
57
+ readonly kid?: string;
58
+ };
52
59
  //#endregion
53
60
  //#region src/types/payment.d.ts
54
61
  //# sourceMappingURL=common.d.ts.map
@@ -157,9 +164,10 @@ interface CompleteCheckoutPayload {
157
164
  readonly ap2?: {
158
165
  readonly checkout_mandate?: string;
159
166
  };
160
- } //#endregion
161
- //#region src/capabilities/checkout.d.ts
167
+ }
162
168
 
169
+ //#endregion
170
+ //#region src/capabilities/checkout.d.ts
163
171
  //# sourceMappingURL=checkout.d.ts.map
164
172
  type FulfillmentPatch = Omit<UpdateCheckoutPayload, 'fulfillment' | 'discounts'>;
165
173
  /**
@@ -189,6 +197,7 @@ type UCPSpecOrder = Order;
189
197
  interface WebhookEvent {
190
198
  readonly event_id: string;
191
199
  readonly created_time: string;
200
+ readonly order: UCPSpecOrder;
192
201
  readonly [key: string]: unknown;
193
202
  }
194
203
 
@@ -307,6 +316,8 @@ interface ToolDescriptor {
307
316
  interface ConnectedClient {
308
317
  /** The server's UCP discovery profile. */
309
318
  readonly profile: UCPProfile;
319
+ /** JWK signing keys from the discovery profile. Used for verifying incoming webhook signatures. */
320
+ readonly signingKeys: readonly JWK[];
310
321
  /** Checkout operations. Null if server does not support `dev.ucp.shopping.checkout`. */
311
322
  readonly checkout: CheckoutCapability | null;
312
323
  /** Order operations. Null if server does not support `dev.ucp.shopping.order`. */
@@ -431,5 +442,5 @@ type ToolErrorResult = {
431
442
  };
432
443
 
433
444
  //#endregion
434
- export { AdapterOptions, AgentTool, AuthorizationParams, BuyerConsent, CardCredential$1 as CardCredential, CheckoutCapability, CheckoutExtensions, CheckoutSession, CheckoutSessionStatus, CompleteCheckoutPayload, ConnectedClient, CreateCheckoutPayload, DEFAULT_UCP_VERSION, IdentityLinkingCapability, JsonSchema, LocalizationContext, OAuthServerMetadata, OrderCapability, PaymentCredential, PaymentHandlerInstance, PaymentHandlerMap, PaymentInstrument, PostalAddress, TokenCredential$1 as TokenCredential, TokenExchangeParams, TokenRefreshParams, TokenResponse, TokenRevokeParams, ToolDescriptor, ToolErrorResult, UCPClient, UCPClientConfig, UCPProfile, UCPSpecOrder, UCP_CAPABILITIES, UpdateCheckoutPayload, WebhookEvent, connect, getAgentTools };
435
- //# sourceMappingURL=catch-errors-BW8p9Abt.d.ts.map
445
+ export { AdapterOptions, AgentTool, AuthorizationParams, BuyerConsent, CardCredential$1 as CardCredential, CheckoutCapability, CheckoutExtensions, CheckoutSession, CheckoutSessionStatus, CompleteCheckoutPayload, ConnectedClient, CreateCheckoutPayload, DEFAULT_UCP_VERSION, IdentityLinkingCapability, JWK, JsonSchema, LocalizationContext, OAuthServerMetadata, OrderCapability, PaymentCredential, PaymentHandlerInstance, PaymentHandlerMap, PaymentInstrument, PostalAddress, TokenCredential$1 as TokenCredential, TokenExchangeParams, TokenRefreshParams, TokenResponse, TokenRevokeParams, ToolDescriptor, ToolErrorResult, UCPClient, UCPClientConfig, UCPProfile, UCPSpecOrder, UCP_CAPABILITIES, UpdateCheckoutPayload, WebhookEvent, connect, getAgentTools };
446
+ //# sourceMappingURL=catch-errors-lijeGf45.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"catch-errors-lijeGf45.d.ts","names":[],"sources":["../src/http.ts","../src/types/common.ts","../src/types/payment.ts","../src/types/checkout.ts","../src/capabilities/checkout.ts","../src/types/order.ts","../src/capabilities/order.ts","../src/types/identity-linking.ts","../src/capabilities/identity-linking.ts","../src/types/config.ts","../src/UCPClient.ts","../src/agent-tools.ts","../src/adapters/catch-errors.ts"],"sourcesContent":null,"mappings":"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"}
package/dist/index.cjs CHANGED
@@ -33,6 +33,20 @@ const UCPProfileSchema = __omnixhq_ucp_js_sdk.UcpDiscoveryProfileSchema.passthro
33
33
  const CreateCheckoutRequestSchema = __omnixhq_ucp_js_sdk.ExtendedCheckoutCreateRequestSchema.passthrough();
34
34
  const UpdateCheckoutRequestSchema = __omnixhq_ucp_js_sdk.ExtendedCheckoutUpdateRequestSchema.passthrough();
35
35
  const CompleteCheckoutRequestSchema = __omnixhq_ucp_js_sdk.CheckoutCompleteRequestSchema.passthrough();
36
+ const WebhookEventSchema = zod.z.object({
37
+ event_id: zod.z.string(),
38
+ created_time: zod.z.string(),
39
+ order: __omnixhq_ucp_js_sdk.OrderSchema.passthrough()
40
+ }).passthrough();
41
+ const JWKSchema = zod.z.object({
42
+ kty: zod.z.string(),
43
+ kid: zod.z.string().optional(),
44
+ use: zod.z.string().optional(),
45
+ alg: zod.z.string().optional(),
46
+ crv: zod.z.string().optional(),
47
+ x: zod.z.string().optional(),
48
+ y: zod.z.string().optional()
49
+ }).passthrough();
36
50
 
37
51
  //#endregion
38
52
  //#region src/http.ts
@@ -867,8 +881,10 @@ async function connect(config, options) {
867
881
  const order = capabilityNames.has(UCP_CAPABILITIES.ORDER) ? new OrderCapability(http) : null;
868
882
  const identityLinking = await buildIdentityLinking(config, capabilityNames);
869
883
  const paymentHandlers = extractPaymentHandlers(profile);
884
+ const signingKeys = extractSigningKeys(profile);
870
885
  const client = {
871
886
  profile,
887
+ signingKeys,
872
888
  checkout,
873
889
  order,
874
890
  identityLinking,
@@ -919,6 +935,16 @@ function extractPaymentHandlers(profile) {
919
935
  if (!result.success) return {};
920
936
  return result.data;
921
937
  }
938
+ function extractSigningKeys(profile) {
939
+ const raw = profile["signing_keys"];
940
+ if (!Array.isArray(raw)) return [];
941
+ const keys = [];
942
+ for (const item of raw) {
943
+ const result = JWKSchema.safeParse(item);
944
+ if (result.success) keys.push(result.data);
945
+ }
946
+ return keys;
947
+ }
922
948
  function buildCheckoutCapability(http, capabilityNames) {
923
949
  if (!capabilityNames.has(UCP_CAPABILITIES.CHECKOUT)) return null;
924
950
  const extensions = {
@@ -1023,6 +1049,157 @@ function buildToolDescriptors(checkout, order, identityLinking) {
1023
1049
  return tools;
1024
1050
  }
1025
1051
 
1052
+ //#endregion
1053
+ //#region src/verify-signature.ts
1054
+ /**
1055
+ * Verifies a `Request-Signature` header (detached JWS per RFC 7797) over a raw request body.
1056
+ *
1057
+ * Per UCP spec, the JWT header MUST include a `kid` claim identifying the signing key.
1058
+ * Returns `false` if `kid` is absent — do not fall back to guessing.
1059
+ *
1060
+ * @returns `true` if the signature is valid, `false` for any verification failure.
1061
+ */
1062
+ async function verifyRequestSignature(body, signature, signingKeys) {
1063
+ const parts = signature.split(".");
1064
+ if (parts.length !== 3 || parts[1] !== "") return false;
1065
+ const [headerB64, , sigB64] = parts;
1066
+ let header;
1067
+ try {
1068
+ header = JSON.parse(new TextDecoder().decode(base64urlDecode(headerB64)));
1069
+ } catch {
1070
+ return false;
1071
+ }
1072
+ if (typeof header["alg"] !== "undefined" && header["alg"] !== "ES256") return false;
1073
+ if (typeof header["kid"] !== "string") return false;
1074
+ const kid = header["kid"];
1075
+ const key = signingKeys.find((k) => k.kid === kid);
1076
+ if (!key) return false;
1077
+ let cryptoKey;
1078
+ try {
1079
+ cryptoKey = await crypto.subtle.importKey("jwk", key, {
1080
+ name: "ECDSA",
1081
+ namedCurve: "P-256"
1082
+ }, false, ["verify"]);
1083
+ } catch {
1084
+ return false;
1085
+ }
1086
+ let sigBytes;
1087
+ try {
1088
+ sigBytes = base64urlDecode(sigB64);
1089
+ } catch {
1090
+ return false;
1091
+ }
1092
+ const signingInput = `${headerB64}.${Buffer.from(body).toString("base64url")}`;
1093
+ try {
1094
+ return await crypto.subtle.verify({
1095
+ name: "ECDSA",
1096
+ hash: "SHA-256"
1097
+ }, cryptoKey, sigBytes, new TextEncoder().encode(signingInput));
1098
+ } catch {
1099
+ return false;
1100
+ }
1101
+ }
1102
+ /**
1103
+ * Creates a {@link WebhookVerifier} bound to a specific business's UCP gateway.
1104
+ *
1105
+ * Signing keys are lazily loaded from `<gatewayUrl>/.well-known/ucp` on the first call
1106
+ * and cached by `kid`. A cache miss triggers a re-fetch to support key rotation.
1107
+ *
1108
+ * @example
1109
+ * ```typescript
1110
+ * import { createWebhookVerifier } from '@omnixhq/ucp-client';
1111
+ *
1112
+ * const verifier = createWebhookVerifier('https://store.example.com');
1113
+ *
1114
+ * // In your webhook handler:
1115
+ * const valid = await verifier.verify(rawBody, req.headers['request-signature']);
1116
+ * if (!valid) return res.status(401).send('Invalid signature');
1117
+ * ```
1118
+ */
1119
+ function createWebhookVerifier(gatewayUrl) {
1120
+ const baseUrl = gatewayUrl.replace(/\/+$/, "");
1121
+ const keyCache = new Map();
1122
+ let fetched = false;
1123
+ async function loadKeys() {
1124
+ const res = await fetch(`${baseUrl}/.well-known/ucp`);
1125
+ if (!res.ok) return;
1126
+ const profile = await res.json();
1127
+ const rawKeys = profile["signing_keys"];
1128
+ if (!Array.isArray(rawKeys)) return;
1129
+ keyCache.clear();
1130
+ for (const item of rawKeys) {
1131
+ const parsed = JWKSchema.safeParse(item);
1132
+ if (parsed.success && typeof parsed.data.kid === "string") keyCache.set(parsed.data.kid, parsed.data);
1133
+ }
1134
+ fetched = true;
1135
+ }
1136
+ return { async verify(body, signature) {
1137
+ const kid = extractKid(signature);
1138
+ if (kid === null) return false;
1139
+ if (!fetched) await loadKeys();
1140
+ if (!keyCache.has(kid)) await loadKeys();
1141
+ const key = keyCache.get(kid);
1142
+ if (!key) return false;
1143
+ return verifyRequestSignature(body, signature, [key]);
1144
+ } };
1145
+ }
1146
+ /** Extracts the `kid` from a detached JWS header without full verification. */
1147
+ function extractKid(signature) {
1148
+ const parts = signature.split(".");
1149
+ if (parts.length !== 3 || parts[1] !== "") return null;
1150
+ try {
1151
+ const header = JSON.parse(new TextDecoder().decode(base64urlDecode(parts[0])));
1152
+ return typeof header["kid"] === "string" ? header["kid"] : null;
1153
+ } catch {
1154
+ return null;
1155
+ }
1156
+ }
1157
+ function base64urlDecode(b64url) {
1158
+ const b64 = b64url.replace(/-/g, "+").replace(/_/g, "/");
1159
+ const padded = b64 + "=".repeat((4 - b64.length % 4) % 4);
1160
+ const binaryStr = atob(padded);
1161
+ const result = new Uint8Array(binaryStr.length);
1162
+ for (let i = 0; i < binaryStr.length; i++) result[i] = binaryStr.charCodeAt(i);
1163
+ return result;
1164
+ }
1165
+
1166
+ //#endregion
1167
+ //#region src/parse-webhook-event.ts
1168
+ /**
1169
+ * Parses and validates a raw webhook request body as a UCP order event.
1170
+ *
1171
+ * Call this after verifying the `Request-Signature` header with
1172
+ * {@link createWebhookVerifier} or {@link verifyRequestSignature}.
1173
+ *
1174
+ * Throws {@link UCPError} with code `INVALID_WEBHOOK_PAYLOAD` if the body is
1175
+ * not valid JSON or does not conform to the UCP webhook event schema.
1176
+ *
1177
+ * @example
1178
+ * ```typescript
1179
+ * import { createWebhookVerifier, parseWebhookEvent } from '@omnixhq/ucp-client';
1180
+ *
1181
+ * const verifier = createWebhookVerifier('https://store.example.com');
1182
+ *
1183
+ * // In your webhook handler:
1184
+ * const valid = await verifier.verify(rawBody, req.headers['request-signature']);
1185
+ * if (!valid) return res.status(401).send('Invalid signature');
1186
+ *
1187
+ * const event = parseWebhookEvent(rawBody);
1188
+ * console.log(event.event_id, event.order.id);
1189
+ * ```
1190
+ */
1191
+ function parseWebhookEvent(body) {
1192
+ let raw;
1193
+ try {
1194
+ raw = JSON.parse(body);
1195
+ } catch {
1196
+ throw new require_errors.UCPError("INVALID_WEBHOOK_PAYLOAD", "Webhook body is not valid JSON");
1197
+ }
1198
+ const result = WebhookEventSchema.safeParse(raw);
1199
+ if (!result.success) throw new require_errors.UCPError("INVALID_WEBHOOK_PAYLOAD", `Webhook payload validation failed: ${result.error.message}`);
1200
+ return result.data;
1201
+ }
1202
+
1026
1203
  //#endregion
1027
1204
  exports.AccountInfoSchema = __omnixhq_ucp_js_sdk.AccountInfoSchema
1028
1205
  exports.AdjustmentSchema = __omnixhq_ucp_js_sdk.AdjustmentSchema
@@ -1080,6 +1257,7 @@ exports.FulfillmentSchema = __omnixhq_ucp_js_sdk.FulfillmentSchema
1080
1257
  exports.IdentityLinkingCapability = IdentityLinkingCapability
1081
1258
  exports.ItemResponseSchema = __omnixhq_ucp_js_sdk.ItemResponseSchema
1082
1259
  exports.ItemSchema = __omnixhq_ucp_js_sdk.ItemSchema
1260
+ exports.JWKSchema = JWKSchema
1083
1261
  exports.LineItemResponseSchema = __omnixhq_ucp_js_sdk.LineItemResponseSchema
1084
1262
  exports.LineItemSchema = __omnixhq_ucp_js_sdk.LineItemSchema
1085
1263
  exports.LineItemUpdateRequestSchema = __omnixhq_ucp_js_sdk.LineItemUpdateRequestSchema
@@ -1132,6 +1310,10 @@ exports.UcpResponseOrderSchema = __omnixhq_ucp_js_sdk.UcpResponseOrderSchema
1132
1310
  exports.UcpReverseDomainNameSchema = __omnixhq_ucp_js_sdk.UcpReverseDomainNameSchema
1133
1311
  exports.UcpVersionSchema = __omnixhq_ucp_js_sdk.UcpVersionSchema
1134
1312
  exports.UpdateCheckoutRequestSchema = UpdateCheckoutRequestSchema
1313
+ exports.WebhookEventSchema = WebhookEventSchema
1135
1314
  exports.connect = connect
1315
+ exports.createWebhookVerifier = createWebhookVerifier
1136
1316
  exports.getAgentTools = getAgentTools
1317
+ exports.parseWebhookEvent = parseWebhookEvent
1318
+ exports.verifyRequestSignature = verifyRequestSignature
1137
1319
  //# sourceMappingURL=index.cjs.map