@portel/photon-core 1.4.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.
Files changed (169) hide show
  1. package/README.md +123 -0
  2. package/dist/auto-ui.d.ts +103 -0
  3. package/dist/auto-ui.d.ts.map +1 -0
  4. package/dist/auto-ui.js +275 -0
  5. package/dist/auto-ui.js.map +1 -0
  6. package/dist/base.d.ts +9 -2
  7. package/dist/base.d.ts.map +1 -1
  8. package/dist/base.js +23 -10
  9. package/dist/base.js.map +1 -1
  10. package/dist/cli-ui-renderer.d.ts +31 -0
  11. package/dist/cli-ui-renderer.d.ts.map +1 -0
  12. package/dist/cli-ui-renderer.js +224 -0
  13. package/dist/cli-ui-renderer.js.map +1 -0
  14. package/dist/dependency-manager.d.ts.map +1 -1
  15. package/dist/dependency-manager.js +0 -1
  16. package/dist/dependency-manager.js.map +1 -1
  17. package/dist/design-system/index.d.ts +21 -0
  18. package/dist/design-system/index.d.ts.map +1 -0
  19. package/dist/design-system/index.js +27 -0
  20. package/dist/design-system/index.js.map +1 -0
  21. package/dist/design-system/tokens.d.ts +149 -0
  22. package/dist/design-system/tokens.d.ts.map +1 -0
  23. package/dist/design-system/tokens.js +413 -0
  24. package/dist/design-system/tokens.js.map +1 -0
  25. package/dist/design-system/transaction-ui.d.ts +70 -0
  26. package/dist/design-system/transaction-ui.d.ts.map +1 -0
  27. package/dist/design-system/transaction-ui.js +982 -0
  28. package/dist/design-system/transaction-ui.js.map +1 -0
  29. package/dist/generator.d.ts +58 -8
  30. package/dist/generator.d.ts.map +1 -1
  31. package/dist/generator.js +9 -4
  32. package/dist/generator.js.map +1 -1
  33. package/dist/index.d.ts +10 -7
  34. package/dist/index.d.ts.map +1 -1
  35. package/dist/index.js +48 -44
  36. package/dist/index.js.map +1 -1
  37. package/dist/io.d.ts +395 -0
  38. package/dist/io.d.ts.map +1 -0
  39. package/dist/io.js +304 -0
  40. package/dist/io.js.map +1 -0
  41. package/dist/path-resolver.d.ts.map +1 -1
  42. package/dist/path-resolver.js +2 -1
  43. package/dist/path-resolver.js.map +1 -1
  44. package/dist/rendering/components.d.ts +29 -0
  45. package/dist/rendering/components.d.ts.map +1 -0
  46. package/dist/rendering/components.js +773 -0
  47. package/dist/rendering/components.js.map +1 -0
  48. package/dist/rendering/field-analyzer.d.ts +48 -0
  49. package/dist/rendering/field-analyzer.d.ts.map +1 -0
  50. package/dist/rendering/field-analyzer.js +270 -0
  51. package/dist/rendering/field-analyzer.js.map +1 -0
  52. package/dist/rendering/field-renderers.d.ts +64 -0
  53. package/dist/rendering/field-renderers.d.ts.map +1 -0
  54. package/dist/rendering/field-renderers.js +317 -0
  55. package/dist/rendering/field-renderers.js.map +1 -0
  56. package/dist/rendering/index.d.ts +28 -0
  57. package/dist/rendering/index.d.ts.map +1 -0
  58. package/dist/rendering/index.js +60 -0
  59. package/dist/rendering/index.js.map +1 -0
  60. package/dist/rendering/layout-selector.d.ts +48 -0
  61. package/dist/rendering/layout-selector.d.ts.map +1 -0
  62. package/dist/rendering/layout-selector.js +347 -0
  63. package/dist/rendering/layout-selector.js.map +1 -0
  64. package/dist/rendering/template-engine.d.ts +41 -0
  65. package/dist/rendering/template-engine.d.ts.map +1 -0
  66. package/dist/rendering/template-engine.js +236 -0
  67. package/dist/rendering/template-engine.js.map +1 -0
  68. package/dist/schema-extractor.d.ts +30 -0
  69. package/dist/schema-extractor.d.ts.map +1 -1
  70. package/dist/schema-extractor.js +205 -12
  71. package/dist/schema-extractor.js.map +1 -1
  72. package/dist/stateful.d.ts +63 -0
  73. package/dist/stateful.d.ts.map +1 -1
  74. package/dist/stateful.js +222 -0
  75. package/dist/stateful.js.map +1 -1
  76. package/dist/types.d.ts +9 -1
  77. package/dist/types.d.ts.map +1 -1
  78. package/dist/types.js.map +1 -1
  79. package/dist/ucp/ap2/handlers.d.ts +242 -0
  80. package/dist/ucp/ap2/handlers.d.ts.map +1 -0
  81. package/dist/ucp/ap2/handlers.js +482 -0
  82. package/dist/ucp/ap2/handlers.js.map +1 -0
  83. package/dist/ucp/ap2/mandates.d.ts +95 -0
  84. package/dist/ucp/ap2/mandates.d.ts.map +1 -0
  85. package/dist/ucp/ap2/mandates.js +234 -0
  86. package/dist/ucp/ap2/mandates.js.map +1 -0
  87. package/dist/ucp/ap2/types.d.ts +305 -0
  88. package/dist/ucp/ap2/types.d.ts.map +1 -0
  89. package/dist/ucp/ap2/types.js +8 -0
  90. package/dist/ucp/ap2/types.js.map +1 -0
  91. package/dist/ucp/capabilities/checkout.d.ts +118 -0
  92. package/dist/ucp/capabilities/checkout.d.ts.map +1 -0
  93. package/dist/ucp/capabilities/checkout.js +344 -0
  94. package/dist/ucp/capabilities/checkout.js.map +1 -0
  95. package/dist/ucp/capabilities/identity.d.ts +130 -0
  96. package/dist/ucp/capabilities/identity.d.ts.map +1 -0
  97. package/dist/ucp/capabilities/identity.js +290 -0
  98. package/dist/ucp/capabilities/identity.js.map +1 -0
  99. package/dist/ucp/capabilities/order.d.ts +142 -0
  100. package/dist/ucp/capabilities/order.d.ts.map +1 -0
  101. package/dist/ucp/capabilities/order.js +383 -0
  102. package/dist/ucp/capabilities/order.js.map +1 -0
  103. package/dist/ucp/index.d.ts +18 -0
  104. package/dist/ucp/index.d.ts.map +1 -0
  105. package/dist/ucp/index.js +19 -0
  106. package/dist/ucp/index.js.map +1 -0
  107. package/dist/ucp/manifest.d.ts +62 -0
  108. package/dist/ucp/manifest.d.ts.map +1 -0
  109. package/dist/ucp/manifest.js +180 -0
  110. package/dist/ucp/manifest.js.map +1 -0
  111. package/dist/ucp/types.d.ts +327 -0
  112. package/dist/ucp/types.d.ts.map +1 -0
  113. package/dist/ucp/types.js +8 -0
  114. package/dist/ucp/types.js.map +1 -0
  115. package/package.json +3 -4
  116. package/src/auto-ui.ts +413 -0
  117. package/src/base.ts +22 -9
  118. package/src/cli-ui-renderer.ts +264 -0
  119. package/src/dependency-manager.ts +0 -1
  120. package/src/design-system/index.ts +30 -0
  121. package/src/design-system/tokens.ts +451 -0
  122. package/src/design-system/transaction-ui.ts +1038 -0
  123. package/src/generator.ts +68 -8
  124. package/src/index.ts +159 -101
  125. package/src/io.ts +493 -0
  126. package/src/path-resolver.ts +2 -1
  127. package/src/rendering/components.ts +785 -0
  128. package/src/rendering/field-analyzer.ts +299 -0
  129. package/src/rendering/field-renderers.ts +356 -0
  130. package/src/rendering/index.ts +63 -0
  131. package/src/rendering/layout-selector.ts +390 -0
  132. package/src/rendering/template-engine.ts +254 -0
  133. package/src/schema-extractor.ts +225 -12
  134. package/src/stateful.ts +301 -0
  135. package/src/types.ts +10 -1
  136. package/src/ucp/ap2/handlers.ts +779 -0
  137. package/src/ucp/ap2/mandates.ts +354 -0
  138. package/src/ucp/ap2/types.ts +441 -0
  139. package/src/ucp/capabilities/checkout.ts +497 -0
  140. package/src/ucp/capabilities/identity.ts +425 -0
  141. package/src/ucp/capabilities/order.ts +549 -0
  142. package/src/ucp/index.ts +27 -0
  143. package/src/ucp/manifest.ts +257 -0
  144. package/src/ucp/types.ts +454 -0
  145. package/dist/cli-formatter.d.ts +0 -92
  146. package/dist/cli-formatter.d.ts.map +0 -1
  147. package/dist/cli-formatter.js +0 -486
  148. package/dist/cli-formatter.js.map +0 -1
  149. package/dist/elicit.d.ts +0 -93
  150. package/dist/elicit.d.ts.map +0 -1
  151. package/dist/elicit.js +0 -373
  152. package/dist/elicit.js.map +0 -1
  153. package/dist/mcp-client.d.ts +0 -218
  154. package/dist/mcp-client.d.ts.map +0 -1
  155. package/dist/mcp-client.js +0 -424
  156. package/dist/mcp-client.js.map +0 -1
  157. package/dist/mcp-sdk-transport.d.ts +0 -88
  158. package/dist/mcp-sdk-transport.d.ts.map +0 -1
  159. package/dist/mcp-sdk-transport.js +0 -360
  160. package/dist/mcp-sdk-transport.js.map +0 -1
  161. package/dist/photon-config.d.ts +0 -86
  162. package/dist/photon-config.d.ts.map +0 -1
  163. package/dist/photon-config.js +0 -156
  164. package/dist/photon-config.js.map +0 -1
  165. package/src/cli-formatter.ts +0 -579
  166. package/src/elicit.ts +0 -438
  167. package/src/mcp-client.ts +0 -561
  168. package/src/mcp-sdk-transport.ts +0 -449
  169. package/src/photon-config.ts +0 -201
@@ -0,0 +1,234 @@
1
+ /**
2
+ * AP2 Mandate Creation and Validation Helpers
3
+ */
4
+ import * as crypto from 'crypto';
5
+ /**
6
+ * Create a new Cart Mandate for human-present transactions
7
+ */
8
+ export function createCartMandate(params, merchantPrivateKey) {
9
+ const contents = {
10
+ id: `cart_${crypto.randomUUID()}`,
11
+ userSignatureRequired: true,
12
+ paymentRequest: {
13
+ methodData: params.paymentMethods.map(method => ({
14
+ supportedMethods: method,
15
+ data: {}
16
+ })),
17
+ details: {
18
+ id: `order_${crypto.randomUUID()}`,
19
+ displayItems: params.items.map(item => ({
20
+ label: item.label,
21
+ amount: item.totalPrice
22
+ })),
23
+ total: {
24
+ label: 'Total',
25
+ amount: params.total
26
+ }
27
+ }
28
+ },
29
+ merchant: params.merchant,
30
+ fulfillment: params.fulfillment,
31
+ refundConditions: params.refundPeriodDays ? {
32
+ period: params.refundPeriodDays,
33
+ policy: `Full refund within ${params.refundPeriodDays} days of delivery`
34
+ } : undefined
35
+ };
36
+ const timestamp = new Date().toISOString();
37
+ const merchantSignature = merchantPrivateKey
38
+ ? signMandate(contents, merchantPrivateKey)
39
+ : `sig_merchant_${crypto.randomBytes(16).toString('hex')}`;
40
+ return {
41
+ contents,
42
+ merchantSignature,
43
+ timestamp
44
+ };
45
+ }
46
+ /**
47
+ * Add user signature to Cart Mandate
48
+ */
49
+ export function signCartMandate(mandate, userPrivateKey) {
50
+ const userSignature = userPrivateKey
51
+ ? signMandate(mandate.contents, userPrivateKey)
52
+ : `sig_user_${crypto.randomBytes(16).toString('hex')}`;
53
+ return {
54
+ ...mandate,
55
+ userSignature,
56
+ userSignatureTimestamp: new Date().toISOString()
57
+ };
58
+ }
59
+ /**
60
+ * Create a new Intent Mandate for autonomous agent purchases
61
+ */
62
+ export function createIntentMandate(params, userPrivateKey) {
63
+ const now = new Date();
64
+ const validUntil = new Date(now.getTime() + (params.validForHours || 24) * 60 * 60 * 1000);
65
+ const contents = {
66
+ id: `intent_${crypto.randomUUID()}`,
67
+ intent: {
68
+ description: params.description,
69
+ productCategories: params.productCategories,
70
+ specificSkus: params.specificSkus,
71
+ keywords: params.keywords
72
+ },
73
+ constraints: {
74
+ maxPrice: params.maxPrice,
75
+ minPrice: params.minPrice,
76
+ quantity: params.quantity,
77
+ merchants: params.allowedMerchants
78
+ },
79
+ timing: {
80
+ validFrom: now.toISOString(),
81
+ validUntil: validUntil.toISOString(),
82
+ executeWhen: params.executeWhen || 'immediately'
83
+ },
84
+ paymentAuthorization: {
85
+ methodCategories: params.paymentMethods,
86
+ preAuthorizedAmount: params.maxPrice
87
+ },
88
+ promptPlayback: params.promptPlayback
89
+ };
90
+ const userSignature = userPrivateKey
91
+ ? signMandate(contents, userPrivateKey)
92
+ : `sig_user_${crypto.randomBytes(16).toString('hex')}`;
93
+ return {
94
+ contents,
95
+ userSignature,
96
+ userSignatureTimestamp: now.toISOString()
97
+ };
98
+ }
99
+ /**
100
+ * Check if Intent Mandate is still valid
101
+ */
102
+ export function isIntentMandateValid(mandate) {
103
+ const now = new Date();
104
+ const validFrom = new Date(mandate.contents.timing.validFrom);
105
+ const validUntil = new Date(mandate.contents.timing.validUntil);
106
+ return now >= validFrom && now <= validUntil;
107
+ }
108
+ /**
109
+ * Check if a price satisfies Intent Mandate constraints
110
+ */
111
+ export function checkPriceConstraints(mandate, price) {
112
+ const { constraints } = mandate.contents;
113
+ if (price.currency !== constraints.maxPrice.currency) {
114
+ return { valid: false, reason: 'Currency mismatch' };
115
+ }
116
+ if (price.amount > constraints.maxPrice.amount) {
117
+ return { valid: false, reason: `Price ${price.amount} exceeds max ${constraints.maxPrice.amount}` };
118
+ }
119
+ if (constraints.minPrice && price.amount < constraints.minPrice.amount) {
120
+ return { valid: false, reason: `Price ${price.amount} below min ${constraints.minPrice.amount}` };
121
+ }
122
+ return { valid: true };
123
+ }
124
+ /**
125
+ * Create a Payment Mandate from Cart or Intent Mandate
126
+ */
127
+ export function createPaymentMandate(params, userPrivateKey) {
128
+ const { sourceMandate, paymentResponse, agentName } = params;
129
+ const isCartMandate = 'merchantSignature' in sourceMandate;
130
+ const sourceMandateType = isCartMandate ? 'cart' : 'intent';
131
+ const sourceMandateId = sourceMandate.contents.id;
132
+ // Get total from source mandate
133
+ let total;
134
+ if (isCartMandate) {
135
+ total = sourceMandate.contents.paymentRequest.details.total.amount;
136
+ }
137
+ else {
138
+ total = sourceMandate.contents.constraints.maxPrice;
139
+ }
140
+ const contents = {
141
+ paymentMandateId: `pm_${crypto.randomUUID()}`,
142
+ paymentDetailsId: paymentResponse.requestId,
143
+ paymentDetailsTotal: {
144
+ label: 'Total',
145
+ amount: total,
146
+ refundPeriod: isCartMandate
147
+ ? sourceMandate.contents.refundConditions?.period
148
+ : 30
149
+ },
150
+ paymentResponse,
151
+ merchantAgent: agentName || 'MerchantAgent',
152
+ sourceMandateType,
153
+ sourceMandateId,
154
+ timestamp: new Date().toISOString()
155
+ };
156
+ const userAuthorization = userPrivateKey
157
+ ? signMandate(contents, userPrivateKey)
158
+ : `auth_${crypto.randomBytes(32).toString('base64url')}`;
159
+ return {
160
+ paymentMandateContents: contents,
161
+ userAuthorization
162
+ };
163
+ }
164
+ // ============================================================================
165
+ // Signature Helpers
166
+ // ============================================================================
167
+ /**
168
+ * Sign mandate contents (simplified - production should use proper PKI)
169
+ */
170
+ function signMandate(contents, privateKey) {
171
+ const payload = JSON.stringify(contents);
172
+ const hmac = crypto.createHmac('sha256', privateKey);
173
+ hmac.update(payload);
174
+ return `sig_${hmac.digest('base64url')}`;
175
+ }
176
+ /**
177
+ * Verify mandate signature
178
+ */
179
+ export function verifyMandateSignature(contents, signature, publicKey) {
180
+ // Simplified verification - production should use proper PKI
181
+ const expectedSig = signMandate(contents, publicKey);
182
+ return signature === expectedSig;
183
+ }
184
+ // ============================================================================
185
+ // Transaction Context
186
+ // ============================================================================
187
+ /**
188
+ * Create transaction context for audit trail
189
+ */
190
+ export function createTransactionContext(params) {
191
+ return {
192
+ modality: params.modality,
193
+ agentPresent: true,
194
+ initiatedBy: params.initiatedBy,
195
+ sessionId: `session_${crypto.randomUUID()}`,
196
+ startTime: new Date().toISOString(),
197
+ mandateChain: params.mandates.map(mandate => {
198
+ if ('merchantSignature' in mandate) {
199
+ return {
200
+ type: 'cart',
201
+ id: mandate.contents.id,
202
+ timestamp: mandate.timestamp
203
+ };
204
+ }
205
+ else if ('paymentMandateContents' in mandate) {
206
+ return {
207
+ type: 'payment',
208
+ id: mandate.paymentMandateContents.paymentMandateId,
209
+ timestamp: mandate.paymentMandateContents.timestamp
210
+ };
211
+ }
212
+ else {
213
+ return {
214
+ type: 'intent',
215
+ id: mandate.contents.id,
216
+ timestamp: mandate.userSignatureTimestamp
217
+ };
218
+ }
219
+ })
220
+ };
221
+ }
222
+ // ============================================================================
223
+ // Risk Assessment
224
+ // ============================================================================
225
+ /**
226
+ * Create risk payload for payment authorization
227
+ */
228
+ export function createRiskPayload(params) {
229
+ return {
230
+ ...params,
231
+ authTimestamp: new Date().toISOString()
232
+ };
233
+ }
234
+ //# sourceMappingURL=mandates.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mandates.js","sourceRoot":"","sources":["../../../src/ucp/ap2/mandates.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,305 @@
1
+ /**
2
+ * Agent Payments Protocol (AP2) Type Definitions
3
+ *
4
+ * Based on AP2 specification from https://github.com/google-agentic-commerce/AP2
5
+ * Provides secure payment mandate handling for agentic commerce.
6
+ */
7
+ import { Money, Address } from '../types.js';
8
+ export interface DeviceInfo {
9
+ model: string;
10
+ vendor: string;
11
+ platform?: string;
12
+ appPackage?: string;
13
+ appVersion?: string;
14
+ }
15
+ export interface AgentInfo {
16
+ id: string;
17
+ name: string;
18
+ version: string;
19
+ capabilities?: string[];
20
+ }
21
+ export type PaymentMethodType = 'CARD' | 'BANK_TRANSFER' | 'WALLET' | 'CRYPTO' | 'STABLECOIN';
22
+ export interface PaymentMethodData {
23
+ supportedMethods: PaymentMethodType;
24
+ data?: {
25
+ paymentProcessorUrl?: string;
26
+ supportedNetworks?: string[];
27
+ supportedTypes?: string[];
28
+ };
29
+ }
30
+ export interface PaymentDetails {
31
+ id: string;
32
+ displayItems: {
33
+ label: string;
34
+ amount: Money;
35
+ pending?: boolean;
36
+ }[];
37
+ total: {
38
+ label: string;
39
+ amount: Money;
40
+ };
41
+ shippingOptions?: {
42
+ id: string;
43
+ label: string;
44
+ amount: Money;
45
+ selected?: boolean;
46
+ }[];
47
+ }
48
+ export interface PaymentResponse {
49
+ requestId: string;
50
+ methodName: PaymentMethodType;
51
+ details: {
52
+ token?: string;
53
+ cardNetwork?: string;
54
+ cardLastFour?: string;
55
+ billingAddress?: Address;
56
+ };
57
+ }
58
+ /**
59
+ * Cart Mandate - Used when human is present for explicit approval
60
+ *
61
+ * Captures:
62
+ * - Exact items being purchased
63
+ * - Final pricing
64
+ * - Selected payment method
65
+ * - Merchant commitment via signature
66
+ */
67
+ export interface CartMandateContents {
68
+ id: string;
69
+ userSignatureRequired: boolean;
70
+ paymentRequest: {
71
+ methodData: PaymentMethodData[];
72
+ details: PaymentDetails;
73
+ options?: {
74
+ requestPayerName?: boolean;
75
+ requestPayerEmail?: boolean;
76
+ requestPayerPhone?: boolean;
77
+ requestShipping?: boolean;
78
+ };
79
+ };
80
+ merchant: {
81
+ id: string;
82
+ name: string;
83
+ url?: string;
84
+ };
85
+ fulfillment?: {
86
+ method: string;
87
+ destination: Address;
88
+ estimatedDelivery?: string;
89
+ };
90
+ refundConditions?: {
91
+ period: number;
92
+ policy: string;
93
+ };
94
+ }
95
+ export interface CartMandate {
96
+ contents: CartMandateContents;
97
+ merchantSignature: string;
98
+ timestamp: string;
99
+ userSignature?: string;
100
+ userSignatureTimestamp?: string;
101
+ }
102
+ /**
103
+ * Intent Mandate - Used for delegated autonomous purchases
104
+ *
105
+ * Captures:
106
+ * - Shopping intent (what to buy)
107
+ * - Constraints (price limits, timing)
108
+ * - Pre-authorization for agent to act
109
+ */
110
+ export interface IntentMandateContents {
111
+ id: string;
112
+ intent: {
113
+ description: string;
114
+ productCategories?: string[];
115
+ specificSkus?: string[];
116
+ keywords?: string[];
117
+ };
118
+ constraints: {
119
+ maxPrice: Money;
120
+ minPrice?: Money;
121
+ quantity?: {
122
+ min?: number;
123
+ max?: number;
124
+ };
125
+ merchants?: string[];
126
+ excludeMerchants?: string[];
127
+ };
128
+ timing: {
129
+ validFrom: string;
130
+ validUntil: string;
131
+ executeWhen?: 'immediately' | 'price_drop' | 'in_stock' | 'scheduled';
132
+ scheduledTime?: string;
133
+ };
134
+ paymentAuthorization: {
135
+ methodCategories: PaymentMethodType[];
136
+ preAuthorizedAmount?: Money;
137
+ };
138
+ promptPlayback?: string;
139
+ }
140
+ export interface IntentMandate {
141
+ contents: IntentMandateContents;
142
+ userSignature: string;
143
+ userSignatureTimestamp: string;
144
+ deviceAttestation?: string;
145
+ }
146
+ /**
147
+ * Payment Mandate - Links transaction to payment
148
+ *
149
+ * Provides:
150
+ * - Visibility into agentic transaction
151
+ * - Bound reference to Cart/Intent Mandate
152
+ * - Dispute evidence container
153
+ */
154
+ export interface PaymentMandateContents {
155
+ paymentMandateId: string;
156
+ paymentDetailsId: string;
157
+ paymentDetailsTotal: {
158
+ label: string;
159
+ amount: Money;
160
+ refundPeriod?: number;
161
+ };
162
+ paymentResponse: PaymentResponse;
163
+ agentInfo?: AgentInfo;
164
+ merchantAgent: string;
165
+ sourceMandateType: 'cart' | 'intent';
166
+ sourceMandateId: string;
167
+ timestamp: string;
168
+ }
169
+ export interface PaymentMandate {
170
+ paymentMandateContents: PaymentMandateContents;
171
+ userAuthorization: string;
172
+ }
173
+ export interface VerifiableCredential {
174
+ '@context': string[];
175
+ type: string[];
176
+ issuer: string;
177
+ issuanceDate: string;
178
+ expirationDate?: string;
179
+ credentialSubject: {
180
+ id: string;
181
+ [key: string]: any;
182
+ };
183
+ proof: {
184
+ type: string;
185
+ created: string;
186
+ verificationMethod: string;
187
+ proofPurpose: string;
188
+ proofValue: string;
189
+ };
190
+ }
191
+ export interface RiskPayload {
192
+ deviceFingerprint?: string;
193
+ ipAddress?: string;
194
+ userAgent?: string;
195
+ sessionDuration?: number;
196
+ interactionCount?: number;
197
+ previousPurchases?: number;
198
+ authLevel: 'none' | 'basic' | 'mfa' | 'biometric';
199
+ authTimestamp?: string;
200
+ agentTrustScore?: number;
201
+ agentVerified?: boolean;
202
+ custom?: Record<string, any>;
203
+ }
204
+ export type DisputeReason = 'unauthorized' | 'not_received' | 'not_as_described' | 'duplicate' | 'cancelled' | 'credit_not_processed' | 'other';
205
+ export interface DisputeEvidence {
206
+ transactionId: string;
207
+ reason: DisputeReason;
208
+ cartMandate?: CartMandate;
209
+ intentMandate?: IntentMandate;
210
+ paymentMandate?: PaymentMandate;
211
+ fulfillmentProof?: {
212
+ carrier: string;
213
+ trackingNumber: string;
214
+ deliveryConfirmation?: string;
215
+ signatureImage?: string;
216
+ };
217
+ communications?: {
218
+ timestamp: string;
219
+ channel: string;
220
+ content: string;
221
+ }[];
222
+ additionalDocs?: {
223
+ type: string;
224
+ url: string;
225
+ description: string;
226
+ }[];
227
+ }
228
+ export interface AgentCapabilityExtension {
229
+ description: string;
230
+ required: boolean;
231
+ uri: string;
232
+ }
233
+ export interface AgentSkill {
234
+ id: string;
235
+ name: string;
236
+ description: string;
237
+ tags?: string[];
238
+ }
239
+ export interface AgentCard {
240
+ name: string;
241
+ description: string;
242
+ version: string;
243
+ url: string;
244
+ capabilities?: {
245
+ extensions?: AgentCapabilityExtension[];
246
+ };
247
+ skills?: AgentSkill[];
248
+ security?: {
249
+ oauth2?: string[];
250
+ }[];
251
+ }
252
+ export type TransactionModality = 'human_present' | 'human_not_present';
253
+ export interface TransactionContext {
254
+ modality: TransactionModality;
255
+ agentPresent: boolean;
256
+ initiatedBy: 'user' | 'agent';
257
+ sessionId: string;
258
+ startTime: string;
259
+ mandateChain: {
260
+ type: 'cart' | 'intent' | 'payment';
261
+ id: string;
262
+ timestamp: string;
263
+ }[];
264
+ }
265
+ export interface PaymentHandler {
266
+ name: string;
267
+ supportedMethods: PaymentMethodType[];
268
+ supportedCurrencies: string[];
269
+ tokenize(params: {
270
+ mandate: PaymentMandate;
271
+ paymentMethod: PaymentMethodData;
272
+ }): Promise<{
273
+ token: string;
274
+ expiresAt: string;
275
+ }>;
276
+ authorize(params: {
277
+ token: string;
278
+ amount: Money;
279
+ mandate: PaymentMandate;
280
+ riskPayload?: RiskPayload;
281
+ }): Promise<{
282
+ authorizationId: string;
283
+ status: 'authorized' | 'declined' | 'pending';
284
+ declineReason?: string;
285
+ }>;
286
+ capture(params: {
287
+ authorizationId: string;
288
+ amount?: Money;
289
+ }): Promise<{
290
+ captureId: string;
291
+ status: 'captured' | 'failed';
292
+ }>;
293
+ refund(params: {
294
+ captureId: string;
295
+ amount?: Money;
296
+ reason?: string;
297
+ }): Promise<{
298
+ refundId: string;
299
+ status: 'refunded' | 'pending' | 'failed';
300
+ }>;
301
+ void(authorizationId: string): Promise<{
302
+ status: 'voided' | 'failed';
303
+ }>;
304
+ }
305
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/ucp/ap2/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Agent Payments Protocol (AP2) Type Definitions
3
+ *
4
+ * Based on AP2 specification from https://github.com/google-agentic-commerce/AP2
5
+ * Provides secure payment mandate handling for agentic commerce.
6
+ */
7
+ export {};
8
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/ucp/ap2/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG"}
@@ -0,0 +1,118 @@
1
+ /**
2
+ * UCP Checkout Capability Implementation
3
+ *
4
+ * Provides cart management, pricing, and checkout session handling.
5
+ */
6
+ import { CheckoutSession, LineItem, DiscountAllocation, FulfillmentOption, FulfillmentDestination, BuyerInfo, PaymentMethodInfo, Order, Money } from '../types.js';
7
+ import { PaymentMandate, CartMandate } from '../ap2/types.js';
8
+ export interface SessionStorage {
9
+ get(sessionId: string): Promise<CheckoutSession | null>;
10
+ set(session: CheckoutSession): Promise<void>;
11
+ delete(sessionId: string): Promise<void>;
12
+ cleanup(): Promise<void>;
13
+ }
14
+ /**
15
+ * In-memory session storage (for development/testing)
16
+ */
17
+ export declare class MemorySessionStorage implements SessionStorage {
18
+ private sessions;
19
+ get(sessionId: string): Promise<CheckoutSession | null>;
20
+ set(session: CheckoutSession): Promise<void>;
21
+ delete(sessionId: string): Promise<void>;
22
+ cleanup(): Promise<void>;
23
+ }
24
+ export interface CheckoutConfig {
25
+ merchantId: string;
26
+ merchantName: string;
27
+ defaultCurrency: string;
28
+ sessionTTLMinutes: number;
29
+ taxCalculator?: TaxCalculator;
30
+ discountValidator?: DiscountValidator;
31
+ fulfillmentProvider?: FulfillmentProvider;
32
+ paymentMethods: PaymentMethodInfo[];
33
+ }
34
+ export interface TaxCalculator {
35
+ calculate(items: LineItem[], destination?: FulfillmentDestination): Promise<{
36
+ taxAmount: Money;
37
+ taxLines: {
38
+ label: string;
39
+ rate: number;
40
+ amount: Money;
41
+ }[];
42
+ }>;
43
+ }
44
+ export interface DiscountValidator {
45
+ validate(code: string, session: CheckoutSession): Promise<{
46
+ valid: boolean;
47
+ discount?: DiscountAllocation;
48
+ error?: string;
49
+ }>;
50
+ }
51
+ export interface FulfillmentProvider {
52
+ getOptions(items: LineItem[], destination?: FulfillmentDestination): Promise<FulfillmentOption[]>;
53
+ }
54
+ export declare class CheckoutService {
55
+ private storage;
56
+ private config;
57
+ constructor(config: CheckoutConfig, storage?: SessionStorage);
58
+ /**
59
+ * Create a new checkout session
60
+ */
61
+ createSession(params?: {
62
+ currency?: string;
63
+ locale?: string;
64
+ metadata?: Record<string, any>;
65
+ }): Promise<CheckoutSession>;
66
+ /**
67
+ * Get checkout session by ID
68
+ */
69
+ getSession(sessionId: string): Promise<CheckoutSession>;
70
+ /**
71
+ * Update cart items
72
+ */
73
+ updateCart(sessionId: string, updates: {
74
+ add?: Omit<LineItem, 'id' | 'totalPrice'>[];
75
+ remove?: string[];
76
+ update?: {
77
+ id: string;
78
+ quantity: number;
79
+ }[];
80
+ }): Promise<CheckoutSession>;
81
+ /**
82
+ * Set buyer information
83
+ */
84
+ setBuyer(sessionId: string, buyer: BuyerInfo): Promise<CheckoutSession>;
85
+ /**
86
+ * Set fulfillment option
87
+ */
88
+ setFulfillment(sessionId: string, params: {
89
+ optionId: string;
90
+ destination: FulfillmentDestination;
91
+ }): Promise<CheckoutSession>;
92
+ /**
93
+ * Apply discount code
94
+ */
95
+ applyDiscount(sessionId: string, code: string): Promise<{
96
+ success: boolean;
97
+ session: CheckoutSession;
98
+ error?: string;
99
+ }>;
100
+ /**
101
+ * Remove discount code
102
+ */
103
+ removeDiscount(sessionId: string, code: string): Promise<CheckoutSession>;
104
+ /**
105
+ * Complete checkout with payment
106
+ */
107
+ complete(sessionId: string, payment: {
108
+ methodId?: string;
109
+ mandate?: PaymentMandate;
110
+ }): Promise<Order>;
111
+ /**
112
+ * Generate Cart Mandate for the session
113
+ */
114
+ generateCartMandate(session: CheckoutSession): CartMandate;
115
+ private assertSessionOpen;
116
+ private calculateTotals;
117
+ }
118
+ //# sourceMappingURL=checkout.d.ts.map