@omnixhq/ucp-client 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +193 -0
- package/dist/index.cjs +1053 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +8061 -0
- package/dist/index.d.cts.map +1 -0
- package/dist/index.d.ts +8061 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +996 -0
- package/dist/index.js.map +1 -0
- package/package.json +92 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.cjs","names":["code: string","message: string","type: MessageType","options: {\n readonly path?: string;\n readonly contentType?: ContentType;\n readonly messages?: readonly UCPMessage[];\n }","continue_url: string","statusCode: number","config: HttpClientConfig","token: string","method: HttpMethod","path: string","body?: unknown","headers: Record<string, string>","data: unknown","schema: ZodType<T>","statusCode: number","rawMessages: unknown[]","m: unknown","validTypes: readonly string[]","type: MessageType","http: HttpClient","extensions: CheckoutExtensions","payload: CreateCheckoutPayload","id: string","patch: UpdateCheckoutPayload","payload: CompleteCheckoutPayload","type: string","patch?: FulfillmentPatch","destinationId: string","optionId: string","destinationId?: string","codes: readonly string[]","data: unknown","http: HttpClient","id: string","UCPSpecOrderSchema","metadata: OAuthServerMetadata","params: AuthorizationParams","params: TokenExchangeParams","params: TokenRefreshParams","params: TokenRevokeParams","clientId: string","clientSecret: string","body: URLSearchParams","raw: unknown","username: string","password: string","http: HttpClient","query: string","filters: SearchFilters","filterEntries: ReadonlyArray<[string, unknown]>","id: string","client: ConnectedClient","tools: AgentTool[]","config: UCPClientConfig","options?: { readonly onValidationWarning?: LogFn }","client: ConnectedClient","profile: UCPProfile","c: { name?: string }","http: HttpClient","capabilityNames: Set<string>","extensions: CheckoutExtensions","raw: unknown","checkout: CheckoutCapability | null","order: OrderCapability | null","identityLinking: IdentityLinkingCapability | null","tools: ToolDescriptor[]"],"sources":["../src/errors.ts","../src/http.ts","../src/schemas.ts","../src/capabilities/checkout.ts","../src/capabilities/order.ts","../src/capabilities/identity-linking.ts","../src/capabilities/products.ts","../src/types/config.ts","../src/agent-tools.ts","../src/UCPClient.ts"],"sourcesContent":["export type MessageType = 'error' | 'warning' | 'info';\nexport type MessageSeverity = 'recoverable' | 'requires_buyer_input' | 'requires_buyer_review';\nexport type ContentType = 'plain' | 'markdown';\n\n/** A single message from the gateway's `messages[]` array. */\nexport interface UCPMessage {\n readonly type: MessageType;\n readonly code?: string;\n readonly content: string;\n readonly severity?: MessageSeverity;\n /** JSONPath to the field that caused the error (e.g., `$.buyer.email`). */\n readonly path?: string;\n readonly content_type?: ContentType;\n}\n\n/** Thrown when the gateway returns an error response with `messages[]`. */\nexport class UCPError extends Error {\n readonly code: string;\n readonly type: MessageType;\n readonly statusCode: number;\n /** JSONPath to the field that caused the error, from the first message. */\n readonly path: string | undefined;\n readonly contentType: ContentType | undefined;\n /** All messages from the gateway response. */\n readonly messages: readonly UCPMessage[];\n\n constructor(\n code: string,\n message: string,\n type: MessageType = 'error',\n statusCode = 400,\n options: {\n readonly path?: string;\n readonly contentType?: ContentType;\n readonly messages?: readonly UCPMessage[];\n } = {},\n ) {\n super(message);\n this.name = 'UCPError';\n this.code = code;\n this.type = type;\n this.statusCode = statusCode;\n this.path = options.path;\n this.contentType = options.contentType;\n this.messages = options.messages ?? [];\n }\n}\n\n/** Thrown on HTTP 409 when no `messages[]` body is present (idempotency key collision). */\nexport class UCPIdempotencyConflictError extends UCPError {\n constructor(message = 'Idempotency key reused with different request body') {\n super('IDEMPOTENCY_CONFLICT', message, 'error', 409);\n this.name = 'UCPIdempotencyConflictError';\n }\n}\n\n/** Thrown when a checkout response has `status: 'requires_escalation'` with a `continue_url`. */\nexport class UCPEscalationError extends Error {\n /** The URL to redirect the buyer to for merchant-hosted checkout UI. */\n readonly continue_url: string;\n\n constructor(continue_url: string, message = 'Payment requires escalation') {\n super(message);\n this.name = 'UCPEscalationError';\n this.continue_url = continue_url;\n }\n}\n\n/** Thrown when an OAuth token exchange, refresh, or revocation fails. */\nexport class UCPOAuthError extends Error {\n readonly statusCode: number;\n\n constructor(message: string, statusCode: number) {\n super(message);\n this.name = 'UCPOAuthError';\n this.statusCode = statusCode;\n }\n}\n","import { randomUUID } from 'node:crypto';\nimport type { ZodType } from 'zod';\nimport { UCPError, UCPIdempotencyConflictError } from './errors.js';\nimport type { UCPMessage, MessageType, MessageSeverity, ContentType } from './errors.js';\n\ntype HttpMethod = 'GET' | 'POST' | 'PUT' | 'DELETE';\n\nexport type LogFn = (message: string, detail?: string) => void;\n\nexport interface HttpClientConfig {\n readonly gatewayUrl: string;\n readonly agentProfileUrl: string;\n readonly ucpVersion: string;\n readonly requestSignature?: string;\n readonly accessToken?: string;\n readonly onValidationWarning?: LogFn;\n}\n\nexport class HttpClient {\n private readonly gatewayUrl: string;\n private readonly agentProfileUrl: string;\n private readonly ucpVersion: string;\n private readonly requestSignature: string | undefined;\n private readonly accessToken: string | undefined;\n private readonly onValidationWarning: LogFn;\n\n constructor(config: HttpClientConfig) {\n this.gatewayUrl = config.gatewayUrl;\n this.agentProfileUrl = config.agentProfileUrl;\n this.ucpVersion = config.ucpVersion;\n this.requestSignature = config.requestSignature;\n this.accessToken = config.accessToken;\n this.onValidationWarning =\n config.onValidationWarning ?? // eslint-disable-next-line no-console\n ((msg, detail) => console.warn(msg, detail));\n }\n\n withAccessToken(token: string): HttpClient {\n return new HttpClient({\n gatewayUrl: this.gatewayUrl,\n agentProfileUrl: this.agentProfileUrl,\n ucpVersion: this.ucpVersion,\n ...(this.requestSignature !== undefined ? { requestSignature: this.requestSignature } : {}),\n accessToken: token,\n onValidationWarning: this.onValidationWarning,\n });\n }\n\n async request(method: HttpMethod, path: string, body?: unknown): Promise<unknown> {\n const url = `${this.gatewayUrl}${path}`;\n const requestId = randomUUID();\n\n const headers: Record<string, string> = {\n 'UCP-Agent': `profile=\"${this.agentProfileUrl}\", version=\"${this.ucpVersion}\"`,\n 'request-id': requestId,\n };\n\n if (body !== undefined) {\n headers['Content-Type'] = 'application/json';\n }\n\n if (this.requestSignature !== undefined) {\n headers['request-signature'] = this.requestSignature;\n }\n\n if (this.accessToken !== undefined) {\n headers['Authorization'] = `Bearer ${this.accessToken}`;\n }\n\n if (method === 'POST' || method === 'PUT') {\n headers['idempotency-key'] = randomUUID();\n }\n\n const res = await fetch(url, {\n method,\n headers,\n ...(body !== undefined ? { body: JSON.stringify(body) } : {}),\n });\n\n const data: unknown = await res.json().catch(() => ({}));\n\n if (!res.ok) {\n this.throwFromResponse(data, res.status);\n }\n\n return data;\n }\n\n validate<T>(data: unknown, schema: ZodType<T>): T {\n const result = schema.safeParse(data);\n if (!result.success) {\n this.onValidationWarning('[UCPClient] Response validation failed:', result.error.message);\n return data as T;\n }\n return result.data;\n }\n\n private throwFromResponse(data: unknown, statusCode: number): never {\n if (typeof data !== 'object' || data === null) {\n if (statusCode === 409) throw new UCPIdempotencyConflictError();\n throw new UCPError('HTTP_ERROR', `Gateway returned ${statusCode}`, 'error', statusCode);\n }\n\n const body = data as Record<string, unknown>;\n const rawMessages = body['messages'];\n\n if (Array.isArray(rawMessages) && rawMessages.length > 0) {\n const allMessages = parseMessages(rawMessages);\n const first = allMessages[0]!;\n const code = first.code ?? 'UNKNOWN';\n\n throw new UCPError(code, first.content, first.type, statusCode, {\n ...(first.path !== undefined ? { path: first.path } : {}),\n ...(first.content_type !== undefined ? { contentType: first.content_type } : {}),\n messages: allMessages,\n });\n }\n\n if (statusCode === 409) throw new UCPIdempotencyConflictError();\n throw new UCPError('HTTP_ERROR', `Gateway returned ${statusCode}`, 'error', statusCode);\n }\n}\n\nfunction parseMessages(rawMessages: unknown[]): UCPMessage[] {\n return rawMessages.map((m: unknown) => {\n const record = m as Record<string, unknown>;\n const rawType = String(record['type'] ?? 'error');\n const validTypes: readonly string[] = ['error', 'warning', 'info'];\n const type: MessageType = validTypes.includes(rawType) ? (rawType as MessageType) : 'error';\n\n return {\n type,\n content: String(record['content'] ?? 'Unknown error'),\n ...(record['code'] !== undefined ? { code: String(record['code']) } : {}),\n ...(record['severity'] !== undefined\n ? { severity: String(record['severity']) as MessageSeverity }\n : {}),\n ...(record['path'] !== undefined ? { path: String(record['path']) } : {}),\n ...(record['content_type'] !== undefined\n ? { content_type: String(record['content_type']) as ContentType }\n : {}),\n };\n });\n}\n","import { z } from 'zod';\nimport {\n // Response schemas\n ExtendedCheckoutResponseSchema,\n UcpDiscoveryProfileSchema,\n CheckoutResponseStatusSchema,\n\n // Sub-entity schemas (checkout internals)\n BuyerSchema,\n TotalResponseSchema,\n LineItemResponseSchema,\n MessageSchema,\n MessageErrorSchema,\n PostalAddressSchema,\n PaymentResponseSchema,\n PaymentHandlerResponseSchema,\n PaymentInstrumentSchema,\n FulfillmentResponseSchema,\n FulfillmentMethodResponseSchema,\n ItemResponseSchema,\n\n // Request schemas\n ExtendedCheckoutCreateRequestSchema,\n ExtendedCheckoutUpdateRequestSchema,\n\n // Order\n OrderSchema,\n} from '@ucp-js/sdk';\n\n// ─── Response validation ────────────────────────────────────────────────────\n// Used internally by UCPClient to validate gateway responses.\n// `.passthrough()` allows extra fields the gateway may add beyond the spec.\n\nexport const CheckoutSessionSchema = ExtendedCheckoutResponseSchema.passthrough();\nexport const UCPProfileSchema = UcpDiscoveryProfileSchema.passthrough();\n\n// ─── Gateway-specific response schemas ──────────────────────────────────────\n// These types extend beyond the SDK spec (gateway adds fields like price_cents,\n// stock_quantity, variants for products; status, total_cents for orders).\n\nexport const UCPProductSchema = z\n .object({\n id: z.string(),\n title: z.string(),\n description: z.string().nullable(),\n price_cents: z.number().int(),\n currency: z.string().min(3).max(3),\n in_stock: z.boolean(),\n stock_quantity: z.number().int().min(0),\n images: z.array(z.string().url()),\n variants: z.array(\n z\n .object({\n id: z.string(),\n title: z.string(),\n price_cents: z.number().int(),\n in_stock: z.boolean(),\n attributes: z.record(z.string()),\n })\n .passthrough(),\n ),\n })\n .passthrough();\n\nexport const UCPOrderSchema = z\n .object({\n id: z.string(),\n status: z.enum(['pending', 'processing', 'shipped', 'delivered', 'canceled']),\n total_cents: z.number().int(),\n currency: z.string().min(3).max(3),\n created_at_iso: z.string().datetime({ offset: true }),\n })\n .passthrough();\n\n// ─── Request validation ─────────────────────────────────────────────────────\n// Used to validate outgoing payloads before sending to gateway.\n// `.passthrough()` allows extra fields the caller may include.\n\nexport const CreateCheckoutRequestSchema = ExtendedCheckoutCreateRequestSchema.passthrough();\nexport const UpdateCheckoutRequestSchema = ExtendedCheckoutUpdateRequestSchema.passthrough();\n\nexport const CompleteCheckoutRequestSchema = z.object({\n payment: z.object({\n instruments: z.array(\n z\n .object({\n id: z.string(),\n handler_id: z.string(),\n type: z.string(),\n selected: z.boolean().optional(),\n credential: z\n .object({\n type: z.string(),\n token: z.string().optional(),\n })\n .optional(),\n billing_address: z.unknown().optional(),\n })\n .passthrough(),\n ),\n }),\n});\n\n// ─── SDK re-exports ─────────────────────────────────────────────────────────\n// Re-export SDK schemas so consumers (AI Brain) can use them for tool\n// definitions, Zod-to-JSON-Schema conversion, etc.\n\nexport {\n // Enums\n CheckoutResponseStatusSchema,\n\n // Sub-entity schemas\n BuyerSchema,\n TotalResponseSchema,\n LineItemResponseSchema,\n MessageSchema,\n MessageErrorSchema,\n PostalAddressSchema,\n\n // Payment\n PaymentResponseSchema,\n PaymentHandlerResponseSchema,\n PaymentInstrumentSchema,\n\n // Fulfillment\n FulfillmentResponseSchema,\n FulfillmentMethodResponseSchema,\n\n // Items\n ItemResponseSchema,\n\n // Order (UCP spec order — different from gateway's UCPOrderSchema)\n OrderSchema as UCPSpecOrderSchema,\n};\n","import type { HttpClient } from '../http.js';\nimport { UCPEscalationError } from '../errors.js';\nimport { CheckoutSessionSchema } from '../schemas.js';\nimport type {\n CheckoutSession,\n CheckoutExtensions,\n CreateCheckoutPayload,\n UpdateCheckoutPayload,\n CompleteCheckoutPayload,\n} from '../types/checkout.js';\n\nconst DEFAULT_METHOD_ID = 'default';\nconst DEFAULT_GROUP_ID = 'default';\n\ntype FulfillmentPatch = Omit<UpdateCheckoutPayload, 'fulfillment' | 'discounts'>;\n\n/**\n * Checkout session operations. Available when the server declares `dev.ucp.shopping.checkout`.\n * Check `extensions` to see which optional features (fulfillment, discount, etc.) are supported.\n */\nexport class CheckoutCapability {\n /** Which checkout extensions the server supports. */\n readonly extensions: CheckoutExtensions;\n\n constructor(\n private readonly http: HttpClient,\n extensions: CheckoutExtensions,\n ) {\n this.extensions = extensions;\n }\n\n async create(payload: CreateCheckoutPayload): Promise<CheckoutSession> {\n const data = await this.http.request('POST', '/checkout-sessions', payload);\n return this.validateSession(data);\n }\n\n async get(id: string): Promise<CheckoutSession> {\n const data = await this.http.request('GET', `/checkout-sessions/${encodeURIComponent(id)}`);\n return this.validateSession(data);\n }\n\n async update(id: string, patch: UpdateCheckoutPayload): Promise<CheckoutSession> {\n const data = await this.http.request(\n 'PUT',\n `/checkout-sessions/${encodeURIComponent(id)}`,\n patch,\n );\n return this.validateSession(data);\n }\n\n async complete(id: string, payload: CompleteCheckoutPayload): Promise<CheckoutSession> {\n const data = await this.http.request(\n 'POST',\n `/checkout-sessions/${encodeURIComponent(id)}/complete`,\n payload,\n );\n return this.validateSession(data);\n }\n\n async cancel(id: string): Promise<CheckoutSession> {\n const data = await this.http.request(\n 'POST',\n `/checkout-sessions/${encodeURIComponent(id)}/cancel`,\n );\n return this.validateSession(data);\n }\n\n async setFulfillment(\n id: string,\n type: string,\n patch?: FulfillmentPatch,\n ): Promise<CheckoutSession> {\n return this.update(id, {\n ...patch,\n fulfillment: { methods: [{ id: DEFAULT_METHOD_ID, type }] },\n });\n }\n\n async selectDestination(\n id: string,\n destinationId: string,\n fulfillmentType = 'shipping',\n patch?: FulfillmentPatch,\n ): Promise<CheckoutSession> {\n return this.update(id, {\n ...patch,\n fulfillment: {\n methods: [\n {\n id: DEFAULT_METHOD_ID,\n type: fulfillmentType,\n selected_destination_id: destinationId,\n },\n ],\n },\n });\n }\n\n async selectFulfillmentOption(\n id: string,\n optionId: string,\n destinationId?: string,\n fulfillmentType = 'shipping',\n patch?: FulfillmentPatch,\n ): Promise<CheckoutSession> {\n return this.update(id, {\n ...patch,\n fulfillment: {\n methods: [\n {\n id: DEFAULT_METHOD_ID,\n type: fulfillmentType,\n ...(destinationId !== undefined ? { selected_destination_id: destinationId } : {}),\n groups: [{ id: DEFAULT_GROUP_ID, selected_option_id: optionId }],\n },\n ],\n },\n });\n }\n\n async applyDiscountCodes(\n id: string,\n codes: readonly string[],\n patch?: FulfillmentPatch,\n ): Promise<CheckoutSession> {\n return this.update(id, {\n ...patch,\n discounts: { codes: [...codes] },\n });\n }\n\n private validateSession(data: unknown): CheckoutSession {\n const session = this.http.validate(data, CheckoutSessionSchema);\n\n if (session.status === 'requires_escalation' && session.continue_url) {\n throw new UCPEscalationError(session.continue_url);\n }\n\n return session;\n }\n}\n","import type { HttpClient } from '../http.js';\nimport { UCPSpecOrderSchema } from '../schemas.js';\nimport type { UCPSpecOrder } from '../types/order.js';\n\n/** Order operations. Available when the server declares `dev.ucp.shopping.order`. */\nexport class OrderCapability {\n constructor(private readonly http: HttpClient) {}\n\n /** Retrieve an order by ID. Returns the UCP spec-compliant Order object. */\n async get(id: string): Promise<UCPSpecOrder> {\n const data = await this.http.request('GET', `/orders/${encodeURIComponent(id)}`);\n return this.http.validate(data, UCPSpecOrderSchema);\n }\n}\n","import { z } from 'zod';\nimport { UCPOAuthError } from '../errors.js';\nimport type {\n OAuthServerMetadata,\n AuthorizationParams,\n TokenResponse,\n TokenExchangeParams,\n TokenRefreshParams,\n TokenRevokeParams,\n} from '../types/identity-linking.js';\n\nconst TokenResponseSchema = z\n .object({\n access_token: z.string(),\n token_type: z.string(),\n expires_in: z.number().optional(),\n refresh_token: z.string().optional(),\n scope: z.string().optional(),\n })\n .passthrough();\n\n/**\n * OAuth 2.0 identity linking for account linking between platforms and merchants.\n * Available when the server declares `dev.ucp.common.identity_linking`.\n */\nexport class IdentityLinkingCapability {\n constructor(private readonly metadata: OAuthServerMetadata) {}\n\n /** Build the OAuth authorization URL to redirect the buyer to. */\n getAuthorizationUrl(params: AuthorizationParams): string {\n const url = new URL(this.metadata.authorization_endpoint);\n url.searchParams.set('response_type', 'code');\n url.searchParams.set('client_id', params.client_id);\n url.searchParams.set('redirect_uri', params.redirect_uri);\n url.searchParams.set('scope', params.scope ?? 'ucp:scopes:checkout_session');\n if (params.state !== undefined) {\n url.searchParams.set('state', params.state);\n }\n return url.toString();\n }\n\n async exchangeCode(params: TokenExchangeParams): Promise<TokenResponse> {\n const body = new URLSearchParams({\n grant_type: 'authorization_code',\n code: params.code,\n redirect_uri: params.redirect_uri,\n });\n\n return this.tokenRequest(params.client_id, params.client_secret, body);\n }\n\n async refreshToken(params: TokenRefreshParams): Promise<TokenResponse> {\n const body = new URLSearchParams({\n grant_type: 'refresh_token',\n refresh_token: params.refresh_token,\n });\n\n return this.tokenRequest(params.client_id, params.client_secret, body);\n }\n\n async revokeToken(params: TokenRevokeParams): Promise<void> {\n const body = new URLSearchParams({ token: params.token });\n if (params.token_type_hint !== undefined) {\n body.set('token_type_hint', params.token_type_hint);\n }\n\n const res = await fetch(this.metadata.revocation_endpoint, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/x-www-form-urlencoded',\n Authorization: encodeBasicAuth(params.client_id, params.client_secret),\n },\n body: body.toString(),\n });\n\n if (!res.ok) {\n throw new UCPOAuthError(`Token revocation failed: ${res.status}`, res.status);\n }\n }\n\n getMetadata(): Readonly<OAuthServerMetadata> {\n return this.metadata;\n }\n\n private async tokenRequest(\n clientId: string,\n clientSecret: string,\n body: URLSearchParams,\n ): Promise<TokenResponse> {\n const res = await fetch(this.metadata.token_endpoint, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/x-www-form-urlencoded',\n Authorization: encodeBasicAuth(clientId, clientSecret),\n },\n body: body.toString(),\n });\n\n if (!res.ok) {\n throw new UCPOAuthError(`Token exchange failed with status ${res.status}`, res.status);\n }\n\n const raw: unknown = await res.json();\n const parsed = TokenResponseSchema.safeParse(raw);\n if (!parsed.success) {\n throw new UCPOAuthError(`Invalid token response: ${parsed.error.message}`, res.status);\n }\n\n return parsed.data as TokenResponse;\n }\n}\n\nfunction encodeBasicAuth(username: string, password: string): string {\n return `Basic ${Buffer.from(`${username}:${password}`).toString('base64')}`;\n}\n","import type { HttpClient } from '../http.js';\nimport { UCPProductSchema } from '../schemas.js';\nimport type { UCPProduct } from '../types/product.js';\nimport type { SearchFilters } from '../types/common.js';\n\n/** Product catalog search and retrieval. Always available (gateway-specific, not part of UCP spec). */\nexport class ProductsCapability {\n constructor(private readonly http: HttpClient) {}\n\n /** Search products by query string with optional filters. */\n async search(query: string, filters: SearchFilters = {}): Promise<readonly UCPProduct[]> {\n const params = new URLSearchParams({ q: query });\n\n const filterEntries: ReadonlyArray<[string, unknown]> = [\n ['max_price_cents', filters.max_price_cents],\n ['min_price_cents', filters.min_price_cents],\n ['in_stock', filters.in_stock],\n ['category', filters.category],\n ['limit', filters.limit],\n ['page', filters.page],\n ];\n\n for (const [key, value] of filterEntries) {\n if (value != null) {\n params.set(key, String(value));\n }\n }\n\n const res = await this.http.request('GET', `/ucp/products?${params.toString()}`);\n const data = res as { products?: UCPProduct[] } | UCPProduct[];\n const products = Array.isArray(data) ? data : (data.products ?? []);\n return products.map((p) => this.http.validate(p, UCPProductSchema));\n }\n\n async get(id: string): Promise<UCPProduct> {\n const data = await this.http.request('GET', `/ucp/products/${encodeURIComponent(id)}`);\n return this.http.validate(data, UCPProductSchema);\n }\n}\n","export interface UCPClientConfig {\n readonly gatewayUrl: string;\n readonly agentProfileUrl: string;\n readonly ucpVersion?: string;\n readonly requestSignature?: string;\n}\n\nexport const DEFAULT_UCP_VERSION = '2026-01-23';\n\nexport const UCP_CAPABILITIES = {\n CHECKOUT: 'dev.ucp.shopping.checkout',\n FULFILLMENT: 'dev.ucp.shopping.fulfillment',\n DISCOUNT: 'dev.ucp.shopping.discount',\n BUYER_CONSENT: 'dev.ucp.shopping.buyer_consent',\n ORDER: 'dev.ucp.shopping.order',\n IDENTITY_LINKING: 'dev.ucp.common.identity_linking',\n AP2_MANDATE: 'dev.ucp.shopping.ap2_mandate',\n} as const;\n","import type { ConnectedClient } from './UCPClient.js';\n\n/** JSON Schema type subset used for tool parameter definitions. */\nexport interface JsonSchema {\n readonly type: string;\n readonly properties?: Readonly<Record<string, JsonSchema>>;\n readonly required?: readonly string[];\n readonly items?: JsonSchema;\n readonly enum?: readonly string[];\n readonly description?: string;\n readonly default?: unknown;\n}\n\n/**\n * A complete tool definition ready for any AI agent framework.\n * Contains everything an LLM needs: name, description, parameter schema, and executor.\n */\nexport interface AgentTool {\n readonly name: string;\n readonly description: string;\n readonly parameters: JsonSchema;\n readonly execute: (params: Record<string, unknown>) => Promise<unknown>;\n}\n\n/**\n * Returns ready-to-use tool definitions for agent registration.\n * Only tools supported by the connected server are included.\n *\n * Each tool has:\n * - `name` — unique tool identifier\n * - `description` — what the tool does (for the LLM)\n * - `parameters` — JSON Schema describing the expected input\n * - `execute(params)` — function that calls the right capability method\n *\n * @example\n * ```typescript\n * const client = await UCPClient.connect(config);\n * const tools = getAgentTools(client);\n *\n * // Register with Anthropic Claude API\n * const response = await anthropic.messages.create({\n * tools: tools.map(t => ({\n * name: t.name,\n * description: t.description,\n * input_schema: t.parameters,\n * })),\n * // ...\n * });\n *\n * // Execute tool calls\n * for (const block of response.content) {\n * if (block.type === 'tool_use') {\n * const tool = tools.find(t => t.name === block.name);\n * const result = await tool.execute(block.input);\n * }\n * }\n * ```\n */\nexport function getAgentTools(client: ConnectedClient): readonly AgentTool[] {\n const tools: AgentTool[] = [...productTools(client)];\n\n if (client.checkout) {\n tools.push(...checkoutTools(client));\n\n if (client.checkout.extensions.fulfillment) {\n tools.push(...fulfillmentTools(client));\n }\n\n if (client.checkout.extensions.discount) {\n tools.push(...discountTools(client));\n }\n }\n\n if (client.order) {\n tools.push(...orderTools(client));\n }\n\n return tools;\n}\n\nfunction productTools(client: ConnectedClient): AgentTool[] {\n return [\n {\n name: 'search_products',\n description:\n 'Search the product catalog by query string. Returns matching products with prices, availability, and images.',\n parameters: {\n type: 'object',\n properties: {\n query: { type: 'string', description: 'Search query (e.g., \"running shoes\")' },\n max_price_cents: { type: 'number', description: 'Maximum price in cents' },\n min_price_cents: { type: 'number', description: 'Minimum price in cents' },\n in_stock: { type: 'boolean', description: 'Filter to in-stock items only' },\n category: { type: 'string', description: 'Product category' },\n limit: { type: 'number', description: 'Max results to return' },\n },\n required: ['query'],\n },\n execute: async (params) => {\n const { query, ...filters } = params as { query: string; [key: string]: unknown };\n return client.products.search(query, filters);\n },\n },\n {\n name: 'get_product',\n description: 'Get detailed product information by ID, including variants, images, and stock.',\n parameters: {\n type: 'object',\n properties: {\n id: { type: 'string', description: 'Product ID' },\n },\n required: ['id'],\n },\n execute: async (params) => client.products.get(params['id'] as string),\n },\n ];\n}\n\nfunction checkoutTools(client: ConnectedClient): AgentTool[] {\n return [\n {\n name: 'create_checkout',\n description:\n 'Create a new checkout session with line items. Returns a session with an ID to use in subsequent calls.',\n parameters: {\n type: 'object',\n properties: {\n line_items: {\n type: 'array',\n description: 'Products to purchase',\n items: {\n type: 'object',\n properties: {\n item: {\n type: 'object',\n properties: { id: { type: 'string', description: 'Product ID' } },\n required: ['id'],\n },\n quantity: { type: 'number', description: 'Quantity to purchase' },\n },\n required: ['item', 'quantity'],\n },\n },\n currency: { type: 'string', description: 'ISO 4217 currency code (e.g., \"USD\")' },\n },\n required: ['line_items'],\n },\n execute: async (params) =>\n client.checkout!.create(\n params as unknown as Parameters<NonNullable<typeof client.checkout>['create']>[0],\n ),\n },\n {\n name: 'get_checkout',\n description:\n 'Get the current state of a checkout session, including status, totals, and available options.',\n parameters: {\n type: 'object',\n properties: {\n id: { type: 'string', description: 'Checkout session ID' },\n },\n required: ['id'],\n },\n execute: async (params) => client.checkout!.get(params['id'] as string),\n },\n {\n name: 'update_checkout',\n description:\n 'Update a checkout session with buyer information, shipping address, or payment details.',\n parameters: {\n type: 'object',\n properties: {\n id: { type: 'string', description: 'Checkout session ID' },\n buyer: {\n type: 'object',\n description: 'Buyer contact information',\n properties: {\n first_name: { type: 'string' },\n last_name: { type: 'string' },\n email: { type: 'string' },\n phone_number: { type: 'string' },\n },\n },\n context: {\n type: 'object',\n description: 'Localization context for pricing and availability',\n properties: {\n address_country: { type: 'string', description: 'ISO 3166-1 alpha-2 country code' },\n address_region: { type: 'string', description: 'State or province' },\n postal_code: { type: 'string' },\n },\n },\n },\n required: ['id'],\n },\n execute: async (params) => {\n const { id, ...patch } = params as { id: string; [key: string]: unknown };\n return client.checkout!.update(id, patch);\n },\n },\n {\n name: 'complete_checkout',\n description:\n 'Complete a checkout session with payment. Places the order. Returns the completed session with order ID.',\n parameters: {\n type: 'object',\n properties: {\n id: { type: 'string', description: 'Checkout session ID' },\n payment: {\n type: 'object',\n description: 'Payment information',\n properties: {\n instruments: {\n type: 'array',\n items: {\n type: 'object',\n properties: {\n id: { type: 'string', description: 'Instrument ID' },\n handler_id: {\n type: 'string',\n description: 'Payment handler ID from the server profile',\n },\n type: { type: 'string', description: 'Payment type (e.g., \"card\", \"offline\")' },\n credential: {\n type: 'object',\n properties: {\n type: { type: 'string', description: 'Credential type (e.g., \"token\")' },\n token: { type: 'string', description: 'Payment token' },\n },\n required: ['type'],\n },\n },\n required: ['id', 'handler_id', 'type'],\n },\n },\n },\n required: ['instruments'],\n },\n },\n required: ['id', 'payment'],\n },\n execute: async (params) => {\n const { id, ...payload } = params;\n return client.checkout!.complete(\n String(id),\n payload as unknown as Parameters<NonNullable<typeof client.checkout>['complete']>[1],\n );\n },\n },\n {\n name: 'cancel_checkout',\n description: 'Cancel a checkout session. The session cannot be used after cancellation.',\n parameters: {\n type: 'object',\n properties: {\n id: { type: 'string', description: 'Checkout session ID' },\n },\n required: ['id'],\n },\n execute: async (params) => client.checkout!.cancel(params['id'] as string),\n },\n ];\n}\n\nfunction fulfillmentTools(client: ConnectedClient): AgentTool[] {\n return [\n {\n name: 'set_fulfillment',\n description: 'Set the fulfillment method for a checkout (e.g., \"shipping\" or \"pickup\").',\n parameters: {\n type: 'object',\n properties: {\n id: { type: 'string', description: 'Checkout session ID' },\n type: { type: 'string', enum: ['shipping', 'pickup'], description: 'Fulfillment method' },\n },\n required: ['id', 'type'],\n },\n execute: async (params) =>\n client.checkout!.setFulfillment(params['id'] as string, params['type'] as string),\n },\n {\n name: 'select_destination',\n description: 'Select a shipping destination for a checkout session.',\n parameters: {\n type: 'object',\n properties: {\n id: { type: 'string', description: 'Checkout session ID' },\n destination_id: { type: 'string', description: 'Destination ID to select' },\n fulfillment_type: {\n type: 'string',\n default: 'shipping',\n description: 'Fulfillment type',\n },\n },\n required: ['id', 'destination_id'],\n },\n execute: async (params) =>\n client.checkout!.selectDestination(\n params['id'] as string,\n params['destination_id'] as string,\n (params['fulfillment_type'] as string) ?? 'shipping',\n ),\n },\n {\n name: 'select_fulfillment_option',\n description:\n 'Select a fulfillment option (e.g., standard shipping, express shipping) for a checkout session.',\n parameters: {\n type: 'object',\n properties: {\n id: { type: 'string', description: 'Checkout session ID' },\n option_id: { type: 'string', description: 'Fulfillment option ID to select' },\n destination_id: { type: 'string', description: 'Destination ID (if applicable)' },\n fulfillment_type: {\n type: 'string',\n default: 'shipping',\n description: 'Fulfillment type',\n },\n },\n required: ['id', 'option_id'],\n },\n execute: async (params) =>\n client.checkout!.selectFulfillmentOption(\n params['id'] as string,\n params['option_id'] as string,\n params['destination_id'] as string | undefined,\n (params['fulfillment_type'] as string) ?? 'shipping',\n ),\n },\n ];\n}\n\nfunction discountTools(client: ConnectedClient): AgentTool[] {\n return [\n {\n name: 'apply_discount_codes',\n description: 'Apply one or more discount codes to a checkout session.',\n parameters: {\n type: 'object',\n properties: {\n id: { type: 'string', description: 'Checkout session ID' },\n codes: {\n type: 'array',\n items: { type: 'string' },\n description: 'Discount codes to apply',\n },\n },\n required: ['id', 'codes'],\n },\n execute: async (params) =>\n client.checkout!.applyDiscountCodes(params['id'] as string, params['codes'] as string[]),\n },\n ];\n}\n\nfunction orderTools(client: ConnectedClient): AgentTool[] {\n return [\n {\n name: 'get_order',\n description:\n 'Get order details by ID, including line items, fulfillment status, and tracking information.',\n parameters: {\n type: 'object',\n properties: {\n id: { type: 'string', description: 'Order ID' },\n },\n required: ['id'],\n },\n execute: async (params) => client.order!.get(params['id'] as string),\n },\n ];\n}\n","import { z } from 'zod';\nimport type { UcpDiscoveryProfile } from '@ucp-js/sdk';\nimport { HttpClient } from './http.js';\nimport type { LogFn } from './http.js';\nimport { UCPProfileSchema } from './schemas.js';\nimport { CheckoutCapability } from './capabilities/checkout.js';\nimport { OrderCapability } from './capabilities/order.js';\nimport { IdentityLinkingCapability } from './capabilities/identity-linking.js';\nimport { ProductsCapability } from './capabilities/products.js';\nimport type { UCPClientConfig } from './types/config.js';\nimport { DEFAULT_UCP_VERSION, UCP_CAPABILITIES } from './types/config.js';\nimport type { CheckoutExtensions } from './types/checkout.js';\nimport type { OAuthServerMetadata } from './types/identity-linking.js';\nimport type { PaymentHandlerMap } from './types/payment.js';\nimport { getAgentTools } from './agent-tools.js';\nimport type { AgentTool } from './agent-tools.js';\n\n/** UCP discovery profile returned by `GET /.well-known/ucp`. */\nexport type UCPProfile = UcpDiscoveryProfile;\n\n/** Describes a single tool the agent can use with the connected server. */\nexport interface ToolDescriptor {\n readonly name: string;\n readonly capability: string;\n readonly description: string;\n}\n\n/**\n * A connected UCP client. Only capabilities the server declared are non-null.\n * Use `describeTools()` to get the list of available tools for agent registration.\n */\nexport interface ConnectedClient {\n /** The server's UCP discovery profile. */\n readonly profile: UCPProfile;\n /** Checkout operations. Null if server does not support `dev.ucp.shopping.checkout`. */\n readonly checkout: CheckoutCapability | null;\n /** Order operations. Null if server does not support `dev.ucp.shopping.order`. */\n readonly order: OrderCapability | null;\n /** OAuth 2.0 identity linking. Null if server does not support `dev.ucp.common.identity_linking`. */\n readonly identityLinking: IdentityLinkingCapability | null;\n /** Product search and retrieval. Always available (gateway-specific). */\n readonly products: ProductsCapability;\n /** Payment handlers declared by the server, keyed by namespace. */\n readonly paymentHandlers: PaymentHandlerMap;\n /** Returns only the tools this server supports (name + description only). */\n describeTools(): readonly ToolDescriptor[];\n /**\n * Returns complete tool definitions with JSON Schema parameters and execute functions.\n * Ready for direct use with any AI agent framework (Claude API, OpenAI, Vercel AI SDK, LangChain, MCP).\n */\n getAgentTools(): readonly AgentTool[];\n}\n\n/**\n * Connect to a UCP server, discover its capabilities, and return a {@link ConnectedClient}.\n *\n * @example\n * ```typescript\n * const client = await connect({\n * gatewayUrl: 'https://store.example.com/ucp',\n * agentProfileUrl: 'https://platform.example.com/.well-known/ucp',\n * });\n *\n * if (client.checkout) {\n * const session = await client.checkout.create({ line_items: [...] });\n * }\n * ```\n */\nexport async function connect(\n config: UCPClientConfig,\n options?: { readonly onValidationWarning?: LogFn },\n): Promise<ConnectedClient> {\n validateConfig(config);\n\n const http = new HttpClient({\n gatewayUrl: config.gatewayUrl.replace(/\\/+$/, ''),\n agentProfileUrl: config.agentProfileUrl,\n ucpVersion: config.ucpVersion ?? DEFAULT_UCP_VERSION,\n ...(config.requestSignature !== undefined ? { requestSignature: config.requestSignature } : {}),\n ...(options?.onValidationWarning !== undefined\n ? { onValidationWarning: options.onValidationWarning }\n : {}),\n });\n\n const rawProfile = await http.request('GET', '/.well-known/ucp');\n const profile = http.validate(rawProfile, UCPProfileSchema);\n const capabilityNames = extractCapabilityNames(profile);\n\n const checkout = buildCheckoutCapability(http, capabilityNames);\n const order = capabilityNames.has(UCP_CAPABILITIES.ORDER) ? new OrderCapability(http) : null;\n const identityLinking = await buildIdentityLinking(config, capabilityNames);\n const products = new ProductsCapability(http);\n const paymentHandlers = extractPaymentHandlers(profile);\n\n const client: ConnectedClient = {\n profile,\n checkout,\n order,\n identityLinking,\n products,\n paymentHandlers,\n describeTools: () => buildToolDescriptors(checkout, order, identityLinking),\n getAgentTools: () => getAgentTools(client),\n };\n\n return Object.freeze(client);\n}\n\n/**\n * UCP client entry point. Use `UCPClient.connect()` to discover server capabilities\n * and get a {@link ConnectedClient}.\n *\n * @example\n * ```typescript\n * const client = await UCPClient.connect({\n * gatewayUrl: 'https://store.example.com/ucp',\n * agentProfileUrl: 'https://platform.example.com/.well-known/ucp',\n * });\n * ```\n */\nexport class UCPClient {\n private constructor() {\n /* use UCPClient.connect() or the standalone connect() function */\n }\n\n static connect = connect;\n}\n\nfunction validateConfig(config: UCPClientConfig): void {\n new URL(config.gatewayUrl);\n if (config.agentProfileUrl.includes('\"') || config.agentProfileUrl.includes('\\n')) {\n throw new Error('agentProfileUrl must not contain double quotes or newlines');\n }\n new URL(config.agentProfileUrl);\n}\n\nfunction extractCapabilityNames(profile: UCPProfile): Set<string> {\n const capabilities = profile.ucp?.capabilities;\n if (!Array.isArray(capabilities)) return new Set();\n return new Set(\n capabilities.map((c: { name?: string }) => c.name).filter((n): n is string => n !== undefined),\n );\n}\n\nconst PaymentHandlerInstanceSchema = z\n .object({\n id: z.string(),\n version: z.string(),\n spec: z.string(),\n schema: z.string(),\n config: z.record(z.unknown()).optional(),\n })\n .passthrough();\n\nconst PaymentHandlerMapSchema = z.record(z.array(PaymentHandlerInstanceSchema));\n\nfunction extractPaymentHandlers(profile: UCPProfile): PaymentHandlerMap {\n const raw = (profile as Record<string, unknown>)['payment_handlers'];\n if (typeof raw !== 'object' || raw === null) return {};\n const result = PaymentHandlerMapSchema.safeParse(raw);\n if (!result.success) return {};\n return result.data as PaymentHandlerMap;\n}\n\nfunction buildCheckoutCapability(\n http: HttpClient,\n capabilityNames: Set<string>,\n): CheckoutCapability | null {\n if (!capabilityNames.has(UCP_CAPABILITIES.CHECKOUT)) return null;\n\n const extensions: CheckoutExtensions = {\n fulfillment: capabilityNames.has(UCP_CAPABILITIES.FULFILLMENT),\n discount: capabilityNames.has(UCP_CAPABILITIES.DISCOUNT),\n buyerConsent: capabilityNames.has(UCP_CAPABILITIES.BUYER_CONSENT),\n ap2Mandate: capabilityNames.has(UCP_CAPABILITIES.AP2_MANDATE),\n };\n\n return new CheckoutCapability(http, extensions);\n}\n\nconst OAuthServerMetadataSchema = z\n .object({\n issuer: z.string(),\n authorization_endpoint: z.string().url(),\n token_endpoint: z.string().url(),\n revocation_endpoint: z.string().url(),\n scopes_supported: z.array(z.string()),\n response_types_supported: z.array(z.string()),\n grant_types_supported: z.array(z.string()),\n token_endpoint_auth_methods_supported: z.array(z.string()),\n service_documentation: z.string().url().optional(),\n })\n .passthrough();\n\nasync function buildIdentityLinking(\n config: UCPClientConfig,\n capabilityNames: Set<string>,\n): Promise<IdentityLinkingCapability | null> {\n if (!capabilityNames.has(UCP_CAPABILITIES.IDENTITY_LINKING)) return null;\n\n const gatewayUrl = config.gatewayUrl.replace(/\\/+$/, '');\n const metadataUrl = `${gatewayUrl}/.well-known/oauth-authorization-server`;\n const res = await fetch(metadataUrl);\n\n if (!res.ok) {\n throw new Error(\n `Identity linking capability declared but OAuth metadata fetch failed: ${res.status} from ${metadataUrl}`,\n );\n }\n\n const raw: unknown = await res.json();\n const parsed = OAuthServerMetadataSchema.safeParse(raw);\n\n if (!parsed.success) {\n throw new Error(`Identity linking OAuth metadata validation failed: ${parsed.error.message}`);\n }\n\n return new IdentityLinkingCapability(parsed.data as OAuthServerMetadata);\n}\n\nfunction buildToolDescriptors(\n checkout: CheckoutCapability | null,\n order: OrderCapability | null,\n identityLinking: IdentityLinkingCapability | null,\n): readonly ToolDescriptor[] {\n const tools: ToolDescriptor[] = [\n { name: 'search_products', capability: 'products', description: 'Search product catalog' },\n { name: 'get_product', capability: 'products', description: 'Get product by ID' },\n ];\n\n if (checkout) {\n tools.push(\n {\n name: 'create_checkout',\n capability: 'checkout',\n description: 'Create a checkout session',\n },\n {\n name: 'get_checkout',\n capability: 'checkout',\n description: 'Get checkout session by ID',\n },\n {\n name: 'update_checkout',\n capability: 'checkout',\n description: 'Update a checkout session',\n },\n {\n name: 'complete_checkout',\n capability: 'checkout',\n description: 'Complete checkout with payment',\n },\n {\n name: 'cancel_checkout',\n capability: 'checkout',\n description: 'Cancel a checkout session',\n },\n );\n\n if (checkout.extensions.fulfillment) {\n tools.push(\n {\n name: 'set_fulfillment',\n capability: 'checkout.fulfillment',\n description: 'Set fulfillment method (shipping/pickup)',\n },\n {\n name: 'select_destination',\n capability: 'checkout.fulfillment',\n description: 'Select shipping destination',\n },\n {\n name: 'select_fulfillment_option',\n capability: 'checkout.fulfillment',\n description: 'Select fulfillment option (e.g., express shipping)',\n },\n );\n }\n\n if (checkout.extensions.discount) {\n tools.push({\n name: 'apply_discount_codes',\n capability: 'checkout.discount',\n description: 'Apply discount codes to checkout',\n });\n }\n }\n\n if (order) {\n tools.push({\n name: 'get_order',\n capability: 'order',\n description: 'Get order by ID',\n });\n }\n\n if (identityLinking) {\n tools.push(\n {\n name: 'get_authorization_url',\n capability: 'identity_linking',\n description: 'Get OAuth authorization URL for account linking',\n },\n {\n name: 'exchange_auth_code',\n capability: 'identity_linking',\n description: 'Exchange authorization code for access token',\n },\n {\n name: 'refresh_access_token',\n capability: 'identity_linking',\n description: 'Refresh an expired access token',\n },\n {\n name: 'revoke_token',\n capability: 'identity_linking',\n description: 'Revoke an access or refresh token',\n },\n );\n }\n\n return tools;\n}\n"],"mappings":"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"}
|