@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,441 @@
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
+
8
+ import { Money, Address, LineItem } from '../types.js';
9
+
10
+ // ============================================================================
11
+ // Core AP2 Types
12
+ // ============================================================================
13
+
14
+ export interface DeviceInfo {
15
+ model: string;
16
+ vendor: string;
17
+ platform?: string;
18
+ appPackage?: string;
19
+ appVersion?: string;
20
+ }
21
+
22
+ export interface AgentInfo {
23
+ id: string;
24
+ name: string;
25
+ version: string;
26
+ capabilities?: string[];
27
+ }
28
+
29
+ // ============================================================================
30
+ // Payment Method Types
31
+ // ============================================================================
32
+
33
+ export type PaymentMethodType =
34
+ | 'CARD'
35
+ | 'BANK_TRANSFER'
36
+ | 'WALLET'
37
+ | 'CRYPTO'
38
+ | 'STABLECOIN';
39
+
40
+ export interface PaymentMethodData {
41
+ supportedMethods: PaymentMethodType;
42
+ data?: {
43
+ paymentProcessorUrl?: string;
44
+ supportedNetworks?: string[]; // visa, mastercard, amex
45
+ supportedTypes?: string[]; // credit, debit, prepaid
46
+ };
47
+ }
48
+
49
+ export interface PaymentDetails {
50
+ id: string;
51
+ displayItems: {
52
+ label: string;
53
+ amount: Money;
54
+ pending?: boolean;
55
+ }[];
56
+ total: {
57
+ label: string;
58
+ amount: Money;
59
+ };
60
+ shippingOptions?: {
61
+ id: string;
62
+ label: string;
63
+ amount: Money;
64
+ selected?: boolean;
65
+ }[];
66
+ }
67
+
68
+ export interface PaymentResponse {
69
+ requestId: string;
70
+ methodName: PaymentMethodType;
71
+ details: {
72
+ token?: string;
73
+ cardNetwork?: string;
74
+ cardLastFour?: string;
75
+ billingAddress?: Address;
76
+ };
77
+ }
78
+
79
+ // ============================================================================
80
+ // Cart Mandate (Human Present)
81
+ // ============================================================================
82
+
83
+ /**
84
+ * Cart Mandate - Used when human is present for explicit approval
85
+ *
86
+ * Captures:
87
+ * - Exact items being purchased
88
+ * - Final pricing
89
+ * - Selected payment method
90
+ * - Merchant commitment via signature
91
+ */
92
+ export interface CartMandateContents {
93
+ id: string;
94
+ userSignatureRequired: boolean;
95
+
96
+ // Payment request details
97
+ paymentRequest: {
98
+ methodData: PaymentMethodData[];
99
+ details: PaymentDetails;
100
+ options?: {
101
+ requestPayerName?: boolean;
102
+ requestPayerEmail?: boolean;
103
+ requestPayerPhone?: boolean;
104
+ requestShipping?: boolean;
105
+ };
106
+ };
107
+
108
+ // Merchant info
109
+ merchant: {
110
+ id: string;
111
+ name: string;
112
+ url?: string;
113
+ };
114
+
115
+ // Fulfillment
116
+ fulfillment?: {
117
+ method: string;
118
+ destination: Address;
119
+ estimatedDelivery?: string;
120
+ };
121
+
122
+ // Refund policy
123
+ refundConditions?: {
124
+ period: number; // Days
125
+ policy: string;
126
+ };
127
+ }
128
+
129
+ export interface CartMandate {
130
+ contents: CartMandateContents;
131
+ merchantSignature: string;
132
+ timestamp: string;
133
+ userSignature?: string;
134
+ userSignatureTimestamp?: string;
135
+ }
136
+
137
+ // ============================================================================
138
+ // Intent Mandate (Human Not Present)
139
+ // ============================================================================
140
+
141
+ /**
142
+ * Intent Mandate - Used for delegated autonomous purchases
143
+ *
144
+ * Captures:
145
+ * - Shopping intent (what to buy)
146
+ * - Constraints (price limits, timing)
147
+ * - Pre-authorization for agent to act
148
+ */
149
+ export interface IntentMandateContents {
150
+ id: string;
151
+
152
+ // Shopping intent
153
+ intent: {
154
+ description: string; // Natural language description
155
+ productCategories?: string[];
156
+ specificSkus?: string[];
157
+ keywords?: string[];
158
+ };
159
+
160
+ // Constraints
161
+ constraints: {
162
+ maxPrice: Money;
163
+ minPrice?: Money;
164
+ quantity?: {
165
+ min?: number;
166
+ max?: number;
167
+ };
168
+ merchants?: string[]; // Allowed merchant IDs
169
+ excludeMerchants?: string[];
170
+ };
171
+
172
+ // Timing
173
+ timing: {
174
+ validFrom: string;
175
+ validUntil: string; // TTL
176
+ executeWhen?: 'immediately' | 'price_drop' | 'in_stock' | 'scheduled';
177
+ scheduledTime?: string;
178
+ };
179
+
180
+ // Payment authorization
181
+ paymentAuthorization: {
182
+ methodCategories: PaymentMethodType[]; // Not specific method
183
+ preAuthorizedAmount?: Money;
184
+ };
185
+
186
+ // Agent understanding (for audit)
187
+ promptPlayback?: string; // Agent's interpretation
188
+ }
189
+
190
+ export interface IntentMandate {
191
+ contents: IntentMandateContents;
192
+ userSignature: string;
193
+ userSignatureTimestamp: string;
194
+ deviceAttestation?: string;
195
+ }
196
+
197
+ // ============================================================================
198
+ // Payment Mandate
199
+ // ============================================================================
200
+
201
+ /**
202
+ * Payment Mandate - Links transaction to payment
203
+ *
204
+ * Provides:
205
+ * - Visibility into agentic transaction
206
+ * - Bound reference to Cart/Intent Mandate
207
+ * - Dispute evidence container
208
+ */
209
+ export interface PaymentMandateContents {
210
+ paymentMandateId: string;
211
+ paymentDetailsId: string; // From PaymentDetails
212
+
213
+ // Transaction details
214
+ paymentDetailsTotal: {
215
+ label: string;
216
+ amount: Money;
217
+ refundPeriod?: number;
218
+ };
219
+
220
+ // Payment response
221
+ paymentResponse: PaymentResponse;
222
+
223
+ // Agent info
224
+ agentInfo?: AgentInfo;
225
+ merchantAgent: string;
226
+
227
+ // Reference to source mandate
228
+ sourceMandateType: 'cart' | 'intent';
229
+ sourceMandateId: string;
230
+
231
+ timestamp: string;
232
+ }
233
+
234
+ export interface PaymentMandate {
235
+ paymentMandateContents: PaymentMandateContents;
236
+ userAuthorization: string; // Verifiable credential / signature
237
+ }
238
+
239
+ // ============================================================================
240
+ // Verifiable Credentials
241
+ // ============================================================================
242
+
243
+ export interface VerifiableCredential {
244
+ '@context': string[];
245
+ type: string[];
246
+ issuer: string;
247
+ issuanceDate: string;
248
+ expirationDate?: string;
249
+ credentialSubject: {
250
+ id: string;
251
+ [key: string]: any;
252
+ };
253
+ proof: {
254
+ type: string;
255
+ created: string;
256
+ verificationMethod: string;
257
+ proofPurpose: string;
258
+ proofValue: string;
259
+ };
260
+ }
261
+
262
+ // ============================================================================
263
+ // Risk & Fraud Signals
264
+ // ============================================================================
265
+
266
+ export interface RiskPayload {
267
+ // Device signals
268
+ deviceFingerprint?: string;
269
+ ipAddress?: string;
270
+ userAgent?: string;
271
+
272
+ // Behavioral signals
273
+ sessionDuration?: number;
274
+ interactionCount?: number;
275
+ previousPurchases?: number;
276
+
277
+ // Authentication level
278
+ authLevel: 'none' | 'basic' | 'mfa' | 'biometric';
279
+ authTimestamp?: string;
280
+
281
+ // Agent signals
282
+ agentTrustScore?: number;
283
+ agentVerified?: boolean;
284
+
285
+ // Custom signals
286
+ custom?: Record<string, any>;
287
+ }
288
+
289
+ // ============================================================================
290
+ // Dispute Evidence
291
+ // ============================================================================
292
+
293
+ export type DisputeReason =
294
+ | 'unauthorized'
295
+ | 'not_received'
296
+ | 'not_as_described'
297
+ | 'duplicate'
298
+ | 'cancelled'
299
+ | 'credit_not_processed'
300
+ | 'other';
301
+
302
+ export interface DisputeEvidence {
303
+ transactionId: string;
304
+ reason: DisputeReason;
305
+
306
+ // Mandate evidence
307
+ cartMandate?: CartMandate;
308
+ intentMandate?: IntentMandate;
309
+ paymentMandate?: PaymentMandate;
310
+
311
+ // Fulfillment evidence
312
+ fulfillmentProof?: {
313
+ carrier: string;
314
+ trackingNumber: string;
315
+ deliveryConfirmation?: string;
316
+ signatureImage?: string;
317
+ };
318
+
319
+ // Communication evidence
320
+ communications?: {
321
+ timestamp: string;
322
+ channel: string;
323
+ content: string;
324
+ }[];
325
+
326
+ // Additional documentation
327
+ additionalDocs?: {
328
+ type: string;
329
+ url: string;
330
+ description: string;
331
+ }[];
332
+ }
333
+
334
+ // ============================================================================
335
+ // Agent Cards (Discovery)
336
+ // ============================================================================
337
+
338
+ export interface AgentCapabilityExtension {
339
+ description: string;
340
+ required: boolean;
341
+ uri: string;
342
+ }
343
+
344
+ export interface AgentSkill {
345
+ id: string;
346
+ name: string;
347
+ description: string;
348
+ tags?: string[];
349
+ }
350
+
351
+ export interface AgentCard {
352
+ name: string;
353
+ description: string;
354
+ version: string;
355
+ url: string;
356
+
357
+ capabilities?: {
358
+ extensions?: AgentCapabilityExtension[];
359
+ };
360
+
361
+ skills?: AgentSkill[];
362
+
363
+ security?: {
364
+ oauth2?: string[];
365
+ }[];
366
+ }
367
+
368
+ // ============================================================================
369
+ // Transaction Flow Types
370
+ // ============================================================================
371
+
372
+ export type TransactionModality = 'human_present' | 'human_not_present';
373
+
374
+ export interface TransactionContext {
375
+ modality: TransactionModality;
376
+ agentPresent: boolean;
377
+ initiatedBy: 'user' | 'agent';
378
+
379
+ // Session info
380
+ sessionId: string;
381
+ startTime: string;
382
+
383
+ // Mandate chain
384
+ mandateChain: {
385
+ type: 'cart' | 'intent' | 'payment';
386
+ id: string;
387
+ timestamp: string;
388
+ }[];
389
+ }
390
+
391
+ // ============================================================================
392
+ // Payment Handler Interface
393
+ // ============================================================================
394
+
395
+ export interface PaymentHandler {
396
+ name: string;
397
+ supportedMethods: PaymentMethodType[];
398
+ supportedCurrencies: string[];
399
+
400
+ // Tokenization
401
+ tokenize(params: {
402
+ mandate: PaymentMandate;
403
+ paymentMethod: PaymentMethodData;
404
+ }): Promise<{ token: string; expiresAt: string }>;
405
+
406
+ // Authorization
407
+ authorize(params: {
408
+ token: string;
409
+ amount: Money;
410
+ mandate: PaymentMandate;
411
+ riskPayload?: RiskPayload;
412
+ }): Promise<{
413
+ authorizationId: string;
414
+ status: 'authorized' | 'declined' | 'pending';
415
+ declineReason?: string;
416
+ }>;
417
+
418
+ // Capture
419
+ capture(params: {
420
+ authorizationId: string;
421
+ amount?: Money; // Partial capture
422
+ }): Promise<{
423
+ captureId: string;
424
+ status: 'captured' | 'failed';
425
+ }>;
426
+
427
+ // Refund
428
+ refund(params: {
429
+ captureId: string;
430
+ amount?: Money; // Partial refund
431
+ reason?: string;
432
+ }): Promise<{
433
+ refundId: string;
434
+ status: 'refunded' | 'pending' | 'failed';
435
+ }>;
436
+
437
+ // Void (before capture)
438
+ void(authorizationId: string): Promise<{
439
+ status: 'voided' | 'failed';
440
+ }>;
441
+ }