@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.
- package/README.md +123 -0
- package/dist/auto-ui.d.ts +103 -0
- package/dist/auto-ui.d.ts.map +1 -0
- package/dist/auto-ui.js +275 -0
- package/dist/auto-ui.js.map +1 -0
- package/dist/base.d.ts +9 -2
- package/dist/base.d.ts.map +1 -1
- package/dist/base.js +23 -10
- package/dist/base.js.map +1 -1
- package/dist/cli-ui-renderer.d.ts +31 -0
- package/dist/cli-ui-renderer.d.ts.map +1 -0
- package/dist/cli-ui-renderer.js +224 -0
- package/dist/cli-ui-renderer.js.map +1 -0
- package/dist/dependency-manager.d.ts.map +1 -1
- package/dist/dependency-manager.js +0 -1
- package/dist/dependency-manager.js.map +1 -1
- package/dist/design-system/index.d.ts +21 -0
- package/dist/design-system/index.d.ts.map +1 -0
- package/dist/design-system/index.js +27 -0
- package/dist/design-system/index.js.map +1 -0
- package/dist/design-system/tokens.d.ts +149 -0
- package/dist/design-system/tokens.d.ts.map +1 -0
- package/dist/design-system/tokens.js +413 -0
- package/dist/design-system/tokens.js.map +1 -0
- package/dist/design-system/transaction-ui.d.ts +70 -0
- package/dist/design-system/transaction-ui.d.ts.map +1 -0
- package/dist/design-system/transaction-ui.js +982 -0
- package/dist/design-system/transaction-ui.js.map +1 -0
- package/dist/generator.d.ts +58 -8
- package/dist/generator.d.ts.map +1 -1
- package/dist/generator.js +9 -4
- package/dist/generator.js.map +1 -1
- package/dist/index.d.ts +10 -7
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +48 -44
- package/dist/index.js.map +1 -1
- package/dist/io.d.ts +395 -0
- package/dist/io.d.ts.map +1 -0
- package/dist/io.js +304 -0
- package/dist/io.js.map +1 -0
- package/dist/path-resolver.d.ts.map +1 -1
- package/dist/path-resolver.js +2 -1
- package/dist/path-resolver.js.map +1 -1
- package/dist/rendering/components.d.ts +29 -0
- package/dist/rendering/components.d.ts.map +1 -0
- package/dist/rendering/components.js +773 -0
- package/dist/rendering/components.js.map +1 -0
- package/dist/rendering/field-analyzer.d.ts +48 -0
- package/dist/rendering/field-analyzer.d.ts.map +1 -0
- package/dist/rendering/field-analyzer.js +270 -0
- package/dist/rendering/field-analyzer.js.map +1 -0
- package/dist/rendering/field-renderers.d.ts +64 -0
- package/dist/rendering/field-renderers.d.ts.map +1 -0
- package/dist/rendering/field-renderers.js +317 -0
- package/dist/rendering/field-renderers.js.map +1 -0
- package/dist/rendering/index.d.ts +28 -0
- package/dist/rendering/index.d.ts.map +1 -0
- package/dist/rendering/index.js +60 -0
- package/dist/rendering/index.js.map +1 -0
- package/dist/rendering/layout-selector.d.ts +48 -0
- package/dist/rendering/layout-selector.d.ts.map +1 -0
- package/dist/rendering/layout-selector.js +347 -0
- package/dist/rendering/layout-selector.js.map +1 -0
- package/dist/rendering/template-engine.d.ts +41 -0
- package/dist/rendering/template-engine.d.ts.map +1 -0
- package/dist/rendering/template-engine.js +236 -0
- package/dist/rendering/template-engine.js.map +1 -0
- package/dist/schema-extractor.d.ts +30 -0
- package/dist/schema-extractor.d.ts.map +1 -1
- package/dist/schema-extractor.js +205 -12
- package/dist/schema-extractor.js.map +1 -1
- package/dist/stateful.d.ts +63 -0
- package/dist/stateful.d.ts.map +1 -1
- package/dist/stateful.js +222 -0
- package/dist/stateful.js.map +1 -1
- package/dist/types.d.ts +9 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/dist/ucp/ap2/handlers.d.ts +242 -0
- package/dist/ucp/ap2/handlers.d.ts.map +1 -0
- package/dist/ucp/ap2/handlers.js +482 -0
- package/dist/ucp/ap2/handlers.js.map +1 -0
- package/dist/ucp/ap2/mandates.d.ts +95 -0
- package/dist/ucp/ap2/mandates.d.ts.map +1 -0
- package/dist/ucp/ap2/mandates.js +234 -0
- package/dist/ucp/ap2/mandates.js.map +1 -0
- package/dist/ucp/ap2/types.d.ts +305 -0
- package/dist/ucp/ap2/types.d.ts.map +1 -0
- package/dist/ucp/ap2/types.js +8 -0
- package/dist/ucp/ap2/types.js.map +1 -0
- package/dist/ucp/capabilities/checkout.d.ts +118 -0
- package/dist/ucp/capabilities/checkout.d.ts.map +1 -0
- package/dist/ucp/capabilities/checkout.js +344 -0
- package/dist/ucp/capabilities/checkout.js.map +1 -0
- package/dist/ucp/capabilities/identity.d.ts +130 -0
- package/dist/ucp/capabilities/identity.d.ts.map +1 -0
- package/dist/ucp/capabilities/identity.js +290 -0
- package/dist/ucp/capabilities/identity.js.map +1 -0
- package/dist/ucp/capabilities/order.d.ts +142 -0
- package/dist/ucp/capabilities/order.d.ts.map +1 -0
- package/dist/ucp/capabilities/order.js +383 -0
- package/dist/ucp/capabilities/order.js.map +1 -0
- package/dist/ucp/index.d.ts +18 -0
- package/dist/ucp/index.d.ts.map +1 -0
- package/dist/ucp/index.js +19 -0
- package/dist/ucp/index.js.map +1 -0
- package/dist/ucp/manifest.d.ts +62 -0
- package/dist/ucp/manifest.d.ts.map +1 -0
- package/dist/ucp/manifest.js +180 -0
- package/dist/ucp/manifest.js.map +1 -0
- package/dist/ucp/types.d.ts +327 -0
- package/dist/ucp/types.d.ts.map +1 -0
- package/dist/ucp/types.js +8 -0
- package/dist/ucp/types.js.map +1 -0
- package/package.json +3 -4
- package/src/auto-ui.ts +413 -0
- package/src/base.ts +22 -9
- package/src/cli-ui-renderer.ts +264 -0
- package/src/dependency-manager.ts +0 -1
- package/src/design-system/index.ts +30 -0
- package/src/design-system/tokens.ts +451 -0
- package/src/design-system/transaction-ui.ts +1038 -0
- package/src/generator.ts +68 -8
- package/src/index.ts +159 -101
- package/src/io.ts +493 -0
- package/src/path-resolver.ts +2 -1
- package/src/rendering/components.ts +785 -0
- package/src/rendering/field-analyzer.ts +299 -0
- package/src/rendering/field-renderers.ts +356 -0
- package/src/rendering/index.ts +63 -0
- package/src/rendering/layout-selector.ts +390 -0
- package/src/rendering/template-engine.ts +254 -0
- package/src/schema-extractor.ts +225 -12
- package/src/stateful.ts +301 -0
- package/src/types.ts +10 -1
- package/src/ucp/ap2/handlers.ts +779 -0
- package/src/ucp/ap2/mandates.ts +354 -0
- package/src/ucp/ap2/types.ts +441 -0
- package/src/ucp/capabilities/checkout.ts +497 -0
- package/src/ucp/capabilities/identity.ts +425 -0
- package/src/ucp/capabilities/order.ts +549 -0
- package/src/ucp/index.ts +27 -0
- package/src/ucp/manifest.ts +257 -0
- package/src/ucp/types.ts +454 -0
- package/dist/cli-formatter.d.ts +0 -92
- package/dist/cli-formatter.d.ts.map +0 -1
- package/dist/cli-formatter.js +0 -486
- package/dist/cli-formatter.js.map +0 -1
- package/dist/elicit.d.ts +0 -93
- package/dist/elicit.d.ts.map +0 -1
- package/dist/elicit.js +0 -373
- package/dist/elicit.js.map +0 -1
- package/dist/mcp-client.d.ts +0 -218
- package/dist/mcp-client.d.ts.map +0 -1
- package/dist/mcp-client.js +0 -424
- package/dist/mcp-client.js.map +0 -1
- package/dist/mcp-sdk-transport.d.ts +0 -88
- package/dist/mcp-sdk-transport.d.ts.map +0 -1
- package/dist/mcp-sdk-transport.js +0 -360
- package/dist/mcp-sdk-transport.js.map +0 -1
- package/dist/photon-config.d.ts +0 -86
- package/dist/photon-config.d.ts.map +0 -1
- package/dist/photon-config.js +0 -156
- package/dist/photon-config.js.map +0 -1
- package/src/cli-formatter.ts +0 -579
- package/src/elicit.ts +0 -438
- package/src/mcp-client.ts +0 -561
- package/src/mcp-sdk-transport.ts +0 -449
- 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
|
+
}
|