@omnixhq/ucp-client 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
@@ -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-hlc4bOF9.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-s9k0IH2E.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-hlc4bOF9.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-s9k0IH2E.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-hlc4bOF9.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-s9k0IH2E.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-hlc4bOF9.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-s9k0IH2E.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-hlc4bOF9.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-s9k0IH2E.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
  /**
@@ -307,6 +315,8 @@ interface ToolDescriptor {
307
315
  interface ConnectedClient {
308
316
  /** The server's UCP discovery profile. */
309
317
  readonly profile: UCPProfile;
318
+ /** JWK signing keys from the discovery profile. Used for verifying incoming webhook signatures. */
319
+ readonly signingKeys: readonly JWK[];
310
320
  /** Checkout operations. Null if server does not support `dev.ucp.shopping.checkout`. */
311
321
  readonly checkout: CheckoutCapability | null;
312
322
  /** Order operations. Null if server does not support `dev.ucp.shopping.order`. */
@@ -431,5 +441,5 @@ type ToolErrorResult = {
431
441
  };
432
442
 
433
443
  //#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
444
+ 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 };
445
+ //# sourceMappingURL=catch-errors-hlc4bOF9.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"catch-errors-hlc4bOF9.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
  /**
@@ -307,6 +315,8 @@ interface ToolDescriptor {
307
315
  interface ConnectedClient {
308
316
  /** The server's UCP discovery profile. */
309
317
  readonly profile: UCPProfile;
318
+ /** JWK signing keys from the discovery profile. Used for verifying incoming webhook signatures. */
319
+ readonly signingKeys: readonly JWK[];
310
320
  /** Checkout operations. Null if server does not support `dev.ucp.shopping.checkout`. */
311
321
  readonly checkout: CheckoutCapability | null;
312
322
  /** Order operations. Null if server does not support `dev.ucp.shopping.order`. */
@@ -431,5 +441,5 @@ type ToolErrorResult = {
431
441
  };
432
442
 
433
443
  //#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
444
+ 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 };
445
+ //# sourceMappingURL=catch-errors-s9k0IH2E.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"catch-errors-s9k0IH2E.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,15 @@ 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 JWKSchema = zod.z.object({
37
+ kty: zod.z.string(),
38
+ kid: zod.z.string().optional(),
39
+ use: zod.z.string().optional(),
40
+ alg: zod.z.string().optional(),
41
+ crv: zod.z.string().optional(),
42
+ x: zod.z.string().optional(),
43
+ y: zod.z.string().optional()
44
+ }).passthrough();
36
45
 
37
46
  //#endregion
38
47
  //#region src/http.ts
@@ -867,8 +876,10 @@ async function connect(config, options) {
867
876
  const order = capabilityNames.has(UCP_CAPABILITIES.ORDER) ? new OrderCapability(http) : null;
868
877
  const identityLinking = await buildIdentityLinking(config, capabilityNames);
869
878
  const paymentHandlers = extractPaymentHandlers(profile);
879
+ const signingKeys = extractSigningKeys(profile);
870
880
  const client = {
871
881
  profile,
882
+ signingKeys,
872
883
  checkout,
873
884
  order,
874
885
  identityLinking,
@@ -919,6 +930,16 @@ function extractPaymentHandlers(profile) {
919
930
  if (!result.success) return {};
920
931
  return result.data;
921
932
  }
933
+ function extractSigningKeys(profile) {
934
+ const raw = profile["signing_keys"];
935
+ if (!Array.isArray(raw)) return [];
936
+ const keys = [];
937
+ for (const item of raw) {
938
+ const result = JWKSchema.safeParse(item);
939
+ if (result.success) keys.push(result.data);
940
+ }
941
+ return keys;
942
+ }
922
943
  function buildCheckoutCapability(http, capabilityNames) {
923
944
  if (!capabilityNames.has(UCP_CAPABILITIES.CHECKOUT)) return null;
924
945
  const extensions = {
@@ -1023,6 +1044,120 @@ function buildToolDescriptors(checkout, order, identityLinking) {
1023
1044
  return tools;
1024
1045
  }
1025
1046
 
1047
+ //#endregion
1048
+ //#region src/verify-signature.ts
1049
+ /**
1050
+ * Verifies a `Request-Signature` header (detached JWS per RFC 7797) over a raw request body.
1051
+ *
1052
+ * Per UCP spec, the JWT header MUST include a `kid` claim identifying the signing key.
1053
+ * Returns `false` if `kid` is absent — do not fall back to guessing.
1054
+ *
1055
+ * @returns `true` if the signature is valid, `false` for any verification failure.
1056
+ */
1057
+ async function verifyRequestSignature(body, signature, signingKeys) {
1058
+ const parts = signature.split(".");
1059
+ if (parts.length !== 3 || parts[1] !== "") return false;
1060
+ const [headerB64, , sigB64] = parts;
1061
+ let header;
1062
+ try {
1063
+ header = JSON.parse(new TextDecoder().decode(base64urlDecode(headerB64)));
1064
+ } catch {
1065
+ return false;
1066
+ }
1067
+ if (typeof header["alg"] !== "undefined" && header["alg"] !== "ES256") return false;
1068
+ if (typeof header["kid"] !== "string") return false;
1069
+ const kid = header["kid"];
1070
+ const key = signingKeys.find((k) => k.kid === kid);
1071
+ if (!key) return false;
1072
+ let cryptoKey;
1073
+ try {
1074
+ cryptoKey = await crypto.subtle.importKey("jwk", key, {
1075
+ name: "ECDSA",
1076
+ namedCurve: "P-256"
1077
+ }, false, ["verify"]);
1078
+ } catch {
1079
+ return false;
1080
+ }
1081
+ let sigBytes;
1082
+ try {
1083
+ sigBytes = base64urlDecode(sigB64);
1084
+ } catch {
1085
+ return false;
1086
+ }
1087
+ const signingInput = `${headerB64}.${Buffer.from(body).toString("base64url")}`;
1088
+ try {
1089
+ return await crypto.subtle.verify({
1090
+ name: "ECDSA",
1091
+ hash: "SHA-256"
1092
+ }, cryptoKey, sigBytes, new TextEncoder().encode(signingInput));
1093
+ } catch {
1094
+ return false;
1095
+ }
1096
+ }
1097
+ /**
1098
+ * Creates a {@link WebhookVerifier} bound to a specific business's UCP gateway.
1099
+ *
1100
+ * Signing keys are lazily loaded from `<gatewayUrl>/.well-known/ucp` on the first call
1101
+ * and cached by `kid`. A cache miss triggers a re-fetch to support key rotation.
1102
+ *
1103
+ * @example
1104
+ * ```typescript
1105
+ * import { createWebhookVerifier } from '@omnixhq/ucp-client';
1106
+ *
1107
+ * const verifier = createWebhookVerifier('https://store.example.com');
1108
+ *
1109
+ * // In your webhook handler:
1110
+ * const valid = await verifier.verify(rawBody, req.headers['request-signature']);
1111
+ * if (!valid) return res.status(401).send('Invalid signature');
1112
+ * ```
1113
+ */
1114
+ function createWebhookVerifier(gatewayUrl) {
1115
+ const baseUrl = gatewayUrl.replace(/\/+$/, "");
1116
+ const keyCache = new Map();
1117
+ let fetched = false;
1118
+ async function loadKeys() {
1119
+ const res = await fetch(`${baseUrl}/.well-known/ucp`);
1120
+ if (!res.ok) return;
1121
+ const profile = await res.json();
1122
+ const rawKeys = profile["signing_keys"];
1123
+ if (!Array.isArray(rawKeys)) return;
1124
+ keyCache.clear();
1125
+ for (const item of rawKeys) {
1126
+ const parsed = JWKSchema.safeParse(item);
1127
+ if (parsed.success && typeof parsed.data.kid === "string") keyCache.set(parsed.data.kid, parsed.data);
1128
+ }
1129
+ fetched = true;
1130
+ }
1131
+ return { async verify(body, signature) {
1132
+ const kid = extractKid(signature);
1133
+ if (kid === null) return false;
1134
+ if (!fetched) await loadKeys();
1135
+ if (!keyCache.has(kid)) await loadKeys();
1136
+ const key = keyCache.get(kid);
1137
+ if (!key) return false;
1138
+ return verifyRequestSignature(body, signature, [key]);
1139
+ } };
1140
+ }
1141
+ /** Extracts the `kid` from a detached JWS header without full verification. */
1142
+ function extractKid(signature) {
1143
+ const parts = signature.split(".");
1144
+ if (parts.length !== 3 || parts[1] !== "") return null;
1145
+ try {
1146
+ const header = JSON.parse(new TextDecoder().decode(base64urlDecode(parts[0])));
1147
+ return typeof header["kid"] === "string" ? header["kid"] : null;
1148
+ } catch {
1149
+ return null;
1150
+ }
1151
+ }
1152
+ function base64urlDecode(b64url) {
1153
+ const b64 = b64url.replace(/-/g, "+").replace(/_/g, "/");
1154
+ const padded = b64 + "=".repeat((4 - b64.length % 4) % 4);
1155
+ const binaryStr = atob(padded);
1156
+ const result = new Uint8Array(binaryStr.length);
1157
+ for (let i = 0; i < binaryStr.length; i++) result[i] = binaryStr.charCodeAt(i);
1158
+ return result;
1159
+ }
1160
+
1026
1161
  //#endregion
1027
1162
  exports.AccountInfoSchema = __omnixhq_ucp_js_sdk.AccountInfoSchema
1028
1163
  exports.AdjustmentSchema = __omnixhq_ucp_js_sdk.AdjustmentSchema
@@ -1080,6 +1215,7 @@ exports.FulfillmentSchema = __omnixhq_ucp_js_sdk.FulfillmentSchema
1080
1215
  exports.IdentityLinkingCapability = IdentityLinkingCapability
1081
1216
  exports.ItemResponseSchema = __omnixhq_ucp_js_sdk.ItemResponseSchema
1082
1217
  exports.ItemSchema = __omnixhq_ucp_js_sdk.ItemSchema
1218
+ exports.JWKSchema = JWKSchema
1083
1219
  exports.LineItemResponseSchema = __omnixhq_ucp_js_sdk.LineItemResponseSchema
1084
1220
  exports.LineItemSchema = __omnixhq_ucp_js_sdk.LineItemSchema
1085
1221
  exports.LineItemUpdateRequestSchema = __omnixhq_ucp_js_sdk.LineItemUpdateRequestSchema
@@ -1133,5 +1269,7 @@ exports.UcpReverseDomainNameSchema = __omnixhq_ucp_js_sdk.UcpReverseDomainNameSc
1133
1269
  exports.UcpVersionSchema = __omnixhq_ucp_js_sdk.UcpVersionSchema
1134
1270
  exports.UpdateCheckoutRequestSchema = UpdateCheckoutRequestSchema
1135
1271
  exports.connect = connect
1272
+ exports.createWebhookVerifier = createWebhookVerifier
1136
1273
  exports.getAgentTools = getAgentTools
1274
+ exports.verifyRequestSignature = verifyRequestSignature
1137
1275
  //# sourceMappingURL=index.cjs.map