agentic-payments 0.1.14 → 0.1.16
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 +90 -116
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -3
- package/dist/index.js.map +1 -1
- package/dist/visa-tap/index.d.ts +9 -10
- package/dist/visa-tap/index.d.ts.map +1 -1
- package/dist/visa-tap/index.js +8 -9
- package/dist/visa-tap/index.js.map +1 -1
- package/dist/visa-tap/quic-transport.d.ts +70 -8
- package/dist/visa-tap/quic-transport.d.ts.map +1 -1
- package/dist/visa-tap/quic-transport.js +130 -22
- package/dist/visa-tap/quic-transport.js.map +1 -1
- package/dist/visa-tap/rfc9421-fields.d.ts +29 -0
- package/dist/visa-tap/rfc9421-fields.d.ts.map +1 -0
- package/dist/visa-tap/rfc9421-fields.js +207 -0
- package/dist/visa-tap/rfc9421-fields.js.map +1 -0
- package/dist/visa-tap/rfc9421.d.ts +26 -8
- package/dist/visa-tap/rfc9421.d.ts.map +1 -1
- package/dist/visa-tap/rfc9421.js +188 -81
- package/dist/visa-tap/rfc9421.js.map +1 -1
- package/dist/visa-tap/types.d.ts +52 -2
- package/dist/visa-tap/types.d.ts.map +1 -1
- package/package.json +4 -25
package/README.md
CHANGED
|
@@ -25,7 +25,7 @@
|
|
|
25
25
|
- **AP2 (Agent Payments Protocol)**: Cryptographic payment mandates with Ed25519 signatures
|
|
26
26
|
- **ACP (Agentic Commerce Protocol)**: REST API integration with Stripe-compatible checkout
|
|
27
27
|
- **Active Mandate**: Autonomous payment capsules with spend caps, time windows, and instant revocation
|
|
28
|
-
- **Visa TAP (Trusted Agent Protocol)**:
|
|
28
|
+
- **Visa TAP (Trusted Agent Protocol)**: RFC 9421 HTTP message signatures for agent payment requests. The QUIC transport is not functional yet and fails closed (see [Visa TAP transport](#visa-tap-quic-transport))
|
|
29
29
|
|
|
30
30
|
**Key Innovation**: Multi-agent Byzantine consensus allows fleets of specialized AI agents (purchasing, finance, compliance, audit) to collaboratively authorize transactions, ensuring no single compromised agent can approve fraudulent payments.
|
|
31
31
|
|
|
@@ -40,7 +40,6 @@ Built with TypeScript for Node.js, Deno, Bun, and browsers. Production-ready wit
|
|
|
40
40
|
- ✅ **Cart Mandates**: Pre-approve shopping carts with line-item verification
|
|
41
41
|
- ✅ **Payment Tracking**: Monitor payment status from authorization to capture
|
|
42
42
|
- ✅ **MCP Protocol**: Stdio and HTTP transports for AI assistant integration (Claude, Cline, etc.)
|
|
43
|
-
- ✅ **Visa TAP QUIC Transport**: Ultra-low latency payment authorization with 0-RTT connection resumption
|
|
44
43
|
- ✅ **RFC 9421 HTTP Signatures**: Cryptographic request signing for secure payment authentication
|
|
45
44
|
- ✅ **Production Ready**: 100% TypeScript, comprehensive error handling, <200KB
|
|
46
45
|
- ✅ **CLI Tools**: Command-line interface for mandate management and testing
|
|
@@ -631,72 +630,42 @@ console.log(`Authorized: ${vendorPayment.isComplete()}`);
|
|
|
631
630
|
|
|
632
631
|
**Use case**: Automated accounts payable, expense report processing, and vendor management where AI agents categorize, approve, and execute payments based on policy rules.
|
|
633
632
|
|
|
634
|
-
### Visa TAP:
|
|
633
|
+
### Visa TAP: Signed Payment Requests
|
|
635
634
|
|
|
636
|
-
|
|
635
|
+
Sign payment requests with RFC 9421 HTTP message signatures and submit them to
|
|
636
|
+
the merchant over HTTPS:
|
|
637
637
|
|
|
638
638
|
```typescript
|
|
639
|
-
import {
|
|
640
|
-
import { AgentIdentity } from 'agentic-payments';
|
|
641
|
-
|
|
642
|
-
// 1. Create QUIC transport connection
|
|
643
|
-
const transport = new VisaTapQuicTransport({
|
|
644
|
-
host: 'merchant.com',
|
|
645
|
-
port: 8443,
|
|
646
|
-
enable0RTT: true, // 0-RTT reconnection (<1ms)
|
|
647
|
-
maxConcurrentStreams: 100 // 100+ parallel payments
|
|
648
|
-
});
|
|
639
|
+
import { AgentIdentity, signHttpMessage, computeContentDigest } from 'agentic-payments';
|
|
649
640
|
|
|
650
|
-
await transport.connect();
|
|
651
|
-
console.log('✅ Connected via QUIC');
|
|
652
|
-
|
|
653
|
-
// 2. Sign payment request with RFC 9421
|
|
654
641
|
const agent = await AgentIdentity.generate();
|
|
655
642
|
const privateKeyHex = Buffer.from(agent.privateKey).toString('hex');
|
|
656
643
|
|
|
644
|
+
const body = new TextEncoder().encode(JSON.stringify(mandate));
|
|
657
645
|
const signed = await signHttpMessage(
|
|
658
646
|
{
|
|
659
647
|
method: 'POST',
|
|
660
648
|
authority: 'merchant.com',
|
|
661
649
|
path: '/api/payments',
|
|
662
|
-
contentDigest:
|
|
650
|
+
contentDigest: computeContentDigest(body),
|
|
663
651
|
},
|
|
664
652
|
privateKeyHex,
|
|
665
653
|
'did:agent:shopping-bot'
|
|
666
654
|
);
|
|
667
655
|
|
|
668
|
-
//
|
|
669
|
-
|
|
670
|
-
|
|
671
|
-
agent: 'shopping-bot@example.com',
|
|
672
|
-
holder: 'user@example.com',
|
|
673
|
-
amount: 5000,
|
|
674
|
-
currency: 'USD',
|
|
675
|
-
period: 'single',
|
|
676
|
-
kind: 'intent'
|
|
677
|
-
};
|
|
678
|
-
|
|
679
|
-
const response = await transport.sendPayment({
|
|
680
|
-
...mandate,
|
|
681
|
-
signature: signed.signature,
|
|
682
|
-
public_key: Buffer.from(agent.publicKey()).toString('hex')
|
|
683
|
-
});
|
|
684
|
-
|
|
685
|
-
console.log(`Transaction ID: ${response.transactionId}`);
|
|
686
|
-
console.log(`Status: ${response.status}`);
|
|
687
|
-
console.log(`Latency: ${response.processingTime}ms`);
|
|
688
|
-
|
|
689
|
-
await transport.close();
|
|
656
|
+
// Send with your HTTPS client, carrying the Content-Digest header plus
|
|
657
|
+
// Signature: signed.signature and Signature-Input: signed.signatureInput, and
|
|
658
|
+
// treat the payment as submitted only when the merchant confirms it.
|
|
690
659
|
```
|
|
691
660
|
|
|
692
|
-
|
|
693
|
-
|
|
694
|
-
|
|
695
|
-
|
|
696
|
-
-
|
|
697
|
-
|
|
661
|
+
`Signature-Input` lists every signed component in signing order (`@method`,
|
|
662
|
+
`@authority`, `@path`, then `content-digest` and any `headers`) with
|
|
663
|
+
`created`, `expires` (default 5 minutes), `nonce`, `keyid` and `alg="ed25519"`,
|
|
664
|
+
so any RFC 9421 verifier can check it. The package is tested against the
|
|
665
|
+
independent `http-message-signatures` implementation and the RFC 9421
|
|
666
|
+
Appendix B.2.6 Ed25519 test vector.
|
|
698
667
|
|
|
699
|
-
|
|
668
|
+
There is no working QUIC transport: see [Visa TAP transport](#visa-tap-quic-transport).
|
|
700
669
|
|
|
701
670
|
### Agent Fleet Management
|
|
702
671
|
|
|
@@ -908,66 +877,72 @@ console.log(`Complete: ${payment.isComplete()}`);
|
|
|
908
877
|
|
|
909
878
|
### Visa TAP QUIC Transport
|
|
910
879
|
|
|
911
|
-
|
|
880
|
+
**Status: not functional. `connect()` always rejects with the agentic-flow
|
|
881
|
+
releases published so far.**
|
|
882
|
+
|
|
883
|
+
`VisaTapQuicTransport` sends through the optional peer `agentic-flow`
|
|
884
|
+
(`agentic-flow/transport/quic`). No agentic-flow release ships a working QUIC
|
|
885
|
+
transport: its `QuicTransport.send()` is a placeholder that sends nothing, and
|
|
886
|
+
agentic-flow 3.4.4+ reports this through `getQuicStatus()`
|
|
887
|
+
(`{ available: false, fallback: 'websocket' }`).
|
|
888
|
+
|
|
889
|
+
What happens since 0.1.15:
|
|
890
|
+
|
|
891
|
+
- `connect()` (and `VisaTapQuicTransport.create()`) asks agentic-flow whether
|
|
892
|
+
QUIC is available and rejects with `QuicTransportUnavailableError`
|
|
893
|
+
(`code: 'QUIC_UNAVAILABLE'`, with agentic-flow's reason) when it is not.
|
|
894
|
+
agentic-flow versions without the probe count as unavailable.
|
|
895
|
+
- Without agentic-flow installed, `connect()` rejects with an install hint.
|
|
896
|
+
- `send()` and `sendPayment()` reject with `'Not connected'` before a
|
|
897
|
+
successful `connect()`, and with `PaymentNotDeliveredError`
|
|
898
|
+
(`code: 'PAYMENT_NOT_DELIVERED'`) unless the server returns a response;
|
|
899
|
+
`sendPayment()` additionally requires a `transactionId` and a status of
|
|
900
|
+
`approved`, `declined` or `pending`. A response is never synthesised.
|
|
901
|
+
|
|
902
|
+
agentic-payments 0.1.14 connected to the placeholder and `sendPayment()`
|
|
903
|
+
resolved with a made-up `transactionId` and `status: 'pending'` although
|
|
904
|
+
nothing was sent. Treat any `transactionId` from 0.1.14's `sendPayment()` as
|
|
905
|
+
not submitted.
|
|
906
|
+
|
|
907
|
+
The transport does not switch to agentic-flow's WebSocket fallback on its own.
|
|
908
|
+
No Visa TAP endpoint speaks that framing, its `send()` carries no
|
|
909
|
+
application-level acknowledgement, and plain `ws://` would send mandates in
|
|
910
|
+
cleartext, so a silent switch could not tell a delivered payment from a lost
|
|
911
|
+
one. Until a real transport exists, submit signed requests over HTTPS.
|
|
912
912
|
|
|
913
913
|
```typescript
|
|
914
914
|
import {
|
|
915
915
|
VisaTapQuicTransport,
|
|
916
|
-
|
|
917
|
-
|
|
918
|
-
computeContentDigest
|
|
916
|
+
QuicTransportUnavailableError,
|
|
917
|
+
getQuicTransportStatus,
|
|
919
918
|
} from 'agentic-payments/visa-tap';
|
|
920
919
|
|
|
921
|
-
//
|
|
922
|
-
const transport = new VisaTapQuicTransport({
|
|
923
|
-
host: 'payments.merchant.com',
|
|
924
|
-
port: 8443,
|
|
925
|
-
enable0RTT: true,
|
|
926
|
-
timeout: 5000
|
|
927
|
-
});
|
|
928
|
-
|
|
929
|
-
await transport.connect();
|
|
930
|
-
|
|
931
|
-
// Sign HTTP request per RFC 9421
|
|
932
|
-
const body = new TextEncoder().encode(JSON.stringify(mandate));
|
|
933
|
-
const contentDigest = computeContentDigest(body);
|
|
934
|
-
|
|
935
|
-
const signed = await signHttpMessage(
|
|
936
|
-
{
|
|
937
|
-
method: 'POST',
|
|
938
|
-
authority: 'payments.merchant.com',
|
|
939
|
-
path: '/v1/payments',
|
|
940
|
-
contentDigest,
|
|
941
|
-
headers: {
|
|
942
|
-
'Content-Type': 'application/json'
|
|
943
|
-
}
|
|
944
|
-
},
|
|
945
|
-
privateKeyHex,
|
|
946
|
-
'did:agent:payment-bot'
|
|
947
|
-
);
|
|
948
|
-
|
|
949
|
-
// Send payment
|
|
950
|
-
const response = await transport.sendPayment(signedMandate);
|
|
951
|
-
|
|
952
|
-
// Get connection statistics
|
|
953
|
-
const stats = transport.getStats();
|
|
954
|
-
console.log(`RTT: ${stats?.rtt}ms`);
|
|
955
|
-
console.log(`Bytes sent: ${stats?.bytesSent}`);
|
|
920
|
+
const status = await getQuicTransportStatus(); // { available: false, reason: '...' }
|
|
956
921
|
|
|
957
|
-
|
|
922
|
+
try {
|
|
923
|
+
const transport = await VisaTapQuicTransport.create({ host: 'payments.merchant.com', port: 8443 });
|
|
924
|
+
const response = await transport.sendPayment(signedMandate); // only a real server response
|
|
925
|
+
await transport.close();
|
|
926
|
+
} catch (err) {
|
|
927
|
+
if (err instanceof QuicTransportUnavailableError) {
|
|
928
|
+
// Nothing was sent. Use HTTPS with signHttpMessage() instead.
|
|
929
|
+
}
|
|
930
|
+
}
|
|
958
931
|
```
|
|
959
932
|
|
|
960
933
|
**API Reference:**
|
|
961
934
|
|
|
962
935
|
| Method | Description | Returns |
|
|
963
936
|
|--------|-------------|---------|
|
|
964
|
-
| `
|
|
965
|
-
| `
|
|
966
|
-
| `
|
|
967
|
-
| `
|
|
968
|
-
| `
|
|
937
|
+
| `VisaTapQuicTransport.create(config)` | Construct and `connect()` | `Promise<VisaTapQuicTransport>` |
|
|
938
|
+
| `constructor(config)` | Create transport (no I/O) | `VisaTapQuicTransport` |
|
|
939
|
+
| `connect()` | Rejects with `QuicTransportUnavailableError` unless agentic-flow reports QUIC available | `Promise<void>` |
|
|
940
|
+
| `sendPayment(mandate)` | Send signed mandate; rejects with `PaymentNotDeliveredError` without a confirmed response | `Promise<PaymentResponse>` |
|
|
941
|
+
| `send(data)` | Send raw data; rejects with `PaymentNotDeliveredError` without a response | `Promise<any>` |
|
|
942
|
+
| `getStats()` | Connection stats when connected | `QuicStats \| null` |
|
|
969
943
|
| `isConnected()` | Check connection status | `boolean` |
|
|
970
944
|
| `close()` | Close connection | `Promise<void>` |
|
|
945
|
+
| `getQuicTransportStatus()` | Whether agentic-flow has a working QUIC transport, and why not | `Promise<{ available, reason? }>` |
|
|
971
946
|
|
|
972
947
|
**RFC 9421 Functions:**
|
|
973
948
|
|
|
@@ -1018,9 +993,9 @@ agentic-payments/
|
|
|
1018
993
|
│ │ ├── signing.ts # Ed25519 signing
|
|
1019
994
|
│ │ ├── revocation.ts # Revocation store
|
|
1020
995
|
│ │ └── i18n.ts # Internationalization
|
|
1021
|
-
│ ├── visa-tap/ # Visa TAP
|
|
996
|
+
│ ├── visa-tap/ # Visa TAP integration
|
|
1022
997
|
│ │ ├── types.ts # Visa TAP TypeScript types
|
|
1023
|
-
│ │ ├── quic-transport.ts # QUIC transport bridge
|
|
998
|
+
│ │ ├── quic-transport.ts # QUIC transport bridge (fails closed, see above)
|
|
1024
999
|
│ │ ├── rfc9421.ts # RFC 9421 HTTP signatures
|
|
1025
1000
|
│ │ └── index.ts # Visa TAP exports
|
|
1026
1001
|
│ ├── cli/ # Command-line interface
|
|
@@ -1055,12 +1030,25 @@ Production deployment guidelines for secure payment authorization:
|
|
|
1055
1030
|
|
|
1056
1031
|
### Signature Validation
|
|
1057
1032
|
|
|
1058
|
-
**RFC 9421
|
|
1033
|
+
**RFC 9421 Verification**:
|
|
1059
1034
|
```typescript
|
|
1060
|
-
//
|
|
1061
|
-
|
|
1035
|
+
// components: your view of the received request. Every component you pass,
|
|
1036
|
+
// including contentDigest and each entry of headers, must be covered by the
|
|
1037
|
+
// received Signature-Input or verification fails.
|
|
1038
|
+
const isValid = await verifyHttpSignature(
|
|
1039
|
+
components,
|
|
1040
|
+
{ signatureInput: req.headers['signature-input'], signature: req.headers['signature'] },
|
|
1041
|
+
publicKeyHex,
|
|
1042
|
+
300, // max age of created, in seconds
|
|
1043
|
+
{ expectedKeyId: 'did:agent:shopping-bot' }
|
|
1044
|
+
);
|
|
1062
1045
|
```
|
|
1063
1046
|
|
|
1047
|
+
The signature base is rebuilt from the received `Signature-Input`, in its
|
|
1048
|
+
order. Verification fails when `created` is missing, older than the max age or
|
|
1049
|
+
in the future (30 s skew), when `expires` has passed, when `alg` is not
|
|
1050
|
+
`ed25519`, or when a covered component is unsupported or unavailable.
|
|
1051
|
+
|
|
1064
1052
|
**Replay Protection**:
|
|
1065
1053
|
- Nonce-based replay prevention (16-byte cryptographic nonces)
|
|
1066
1054
|
- Timestamp validation (configurable max age, default 300 seconds)
|
|
@@ -1082,10 +1070,10 @@ app.post('/verify', limiter, verifyHandler);
|
|
|
1082
1070
|
|
|
1083
1071
|
### Network Security
|
|
1084
1072
|
|
|
1085
|
-
**
|
|
1086
|
-
-
|
|
1087
|
-
-
|
|
1088
|
-
-
|
|
1073
|
+
**Payment transport**:
|
|
1074
|
+
- The Visa TAP QUIC transport is not functional and refuses to connect; submit payment requests over HTTPS (TLS 1.2+), signed with `signHttpMessage`
|
|
1075
|
+
- Pin certificates for merchant endpoints where your HTTPS client supports it
|
|
1076
|
+
- Record a payment as submitted only when the merchant confirms it
|
|
1089
1077
|
|
|
1090
1078
|
**MCP Server**:
|
|
1091
1079
|
- Use stdio transport for local development only
|
|
@@ -1127,23 +1115,9 @@ Optimized for low-latency payment authorization with minimal bundle impact:
|
|
|
1127
1115
|
| Ed25519 Verify | ~3ms | Single verification |
|
|
1128
1116
|
| Consensus (3 agents) | ~10ms | Byzantine fault tolerance |
|
|
1129
1117
|
| Mandate Validation | <1ms | Schema + business rules |
|
|
1130
|
-
| QUIC Connection | ~100ms | First connection (vs 300ms HTTP/2) |
|
|
1131
|
-
| QUIC Reconnection | <1ms | 0-RTT session resumption |
|
|
1132
1118
|
| RFC 9421 Signing | ~2ms | HTTP message signature |
|
|
1133
1119
|
| Bundle Size | <200KB | Gzipped, tree-shakeable |
|
|
1134
1120
|
|
|
1135
|
-
### QUIC Transport Performance
|
|
1136
|
-
|
|
1137
|
-
Comparison with HTTP/2 for payment authorization:
|
|
1138
|
-
|
|
1139
|
-
| Metric | QUIC (Visa TAP) | HTTP/2 | Improvement |
|
|
1140
|
-
|--------|-----------------|--------|-------------|
|
|
1141
|
-
| First connection | 100ms | 300ms | **66% faster** |
|
|
1142
|
-
| Reconnection | <1ms (0-RTT) | 200ms | **99.5% faster** |
|
|
1143
|
-
| Mobile handoff | Seamless | Connection drop | **Connection migration** |
|
|
1144
|
-
| Concurrent streams | 100+ | 100+ | Equal |
|
|
1145
|
-
| Head-of-line blocking | None | Present | **Better reliability** |
|
|
1146
|
-
|
|
1147
1121
|
## 📄 License
|
|
1148
1122
|
|
|
1149
1123
|
Licensed under either of:
|
package/dist/index.d.ts
CHANGED
|
@@ -49,8 +49,9 @@ export type { AgentVote, VerificationResult, VerificationConfig, SystemMetrics,
|
|
|
49
49
|
export { IntentMandate, CartMandate, PaymentMandate } from './mandate.js';
|
|
50
50
|
export type { IntentMandateData, CartMandateData, PaymentMandateData, CartItem, ValidationResult, } from './mandate.js';
|
|
51
51
|
export { PaymentError, PaymentErrorCode, isRecoverable, getErrorCode, formatError, AgenticPaymentError, CryptoError, ValidationError, ConsensusError, SystemError, WasmInitError, ErrorCode, } from './errors.js';
|
|
52
|
-
export { VisaTapQuicTransport, createQuicTransport } from './visa-tap/index.js';
|
|
52
|
+
export { VisaTapQuicTransport, createQuicTransport, getQuicTransportStatus, QuicTransportUnavailableError, PaymentNotDeliveredError, } from './visa-tap/index.js';
|
|
53
53
|
export { signHttpMessage, verifyHttpSignature, computeContentDigest } from './visa-tap/index.js';
|
|
54
|
+
export type { SignatureComponents, SignedHttpMessage, VerifiableHttpSignature, SignHttpMessageOptions, VerifyHttpSignatureOptions, } from './visa-tap/index.js';
|
|
54
55
|
export { TAP_VERSION, DEFAULT_QUIC_PORT, MAX_MANDATE_LIFETIME_SECS } from './visa-tap/index.js';
|
|
55
56
|
export declare const VERSION = "1.0.0";
|
|
56
57
|
/**
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2CG;AAGH,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC9C,YAAY,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAEvD,OAAO,EACL,kBAAkB,EAClB,yBAAyB,GAC1B,MAAM,mBAAmB,CAAC;AAC3B,YAAY,EACV,SAAS,EACT,kBAAkB,EAClB,kBAAkB,EAClB,aAAa,GACd,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC1E,YAAY,EACV,iBAAiB,EACjB,eAAe,EACf,kBAAkB,EAClB,QAAQ,EACR,gBAAgB,GACjB,MAAM,cAAc,CAAC;AAGtB,OAAO,EACL,YAAY,EACZ,gBAAgB,EAChB,aAAa,EACb,YAAY,EACZ,WAAW,EAEX,mBAAmB,EACnB,WAAW,EACX,eAAe,EACf,cAAc,EACd,WAAW,EACX,aAAa,EACb,SAAS,GACV,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2CG;AAGH,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC9C,YAAY,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAEvD,OAAO,EACL,kBAAkB,EAClB,yBAAyB,GAC1B,MAAM,mBAAmB,CAAC;AAC3B,YAAY,EACV,SAAS,EACT,kBAAkB,EAClB,kBAAkB,EAClB,aAAa,GACd,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC1E,YAAY,EACV,iBAAiB,EACjB,eAAe,EACf,kBAAkB,EAClB,QAAQ,EACR,gBAAgB,GACjB,MAAM,cAAc,CAAC;AAGtB,OAAO,EACL,YAAY,EACZ,gBAAgB,EAChB,aAAa,EACb,YAAY,EACZ,WAAW,EAEX,mBAAmB,EACnB,WAAW,EACX,eAAe,EACf,cAAc,EACd,WAAW,EACX,aAAa,EACb,SAAS,GACV,MAAM,aAAa,CAAC;AAIrB,OAAO,EACL,oBAAoB,EACpB,mBAAmB,EACnB,sBAAsB,EACtB,6BAA6B,EAC7B,wBAAwB,GACzB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,eAAe,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AACjG,YAAY,EACV,mBAAmB,EACnB,iBAAiB,EACjB,uBAAuB,EACvB,sBAAsB,EACtB,0BAA0B,GAC3B,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,yBAAyB,EAAE,MAAM,qBAAqB,CAAC;AAGhG,eAAO,MAAM,OAAO,UAAU,CAAC;AAE/B;;;;GAIG;AACH,wBAAgB,OAAO,IAAI;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,EAAE,MAAM,CAAC;IACvB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB,CAeA;;;;;AAGD,wBAGE"}
|
package/dist/index.js
CHANGED
|
@@ -50,8 +50,9 @@ export { IntentMandate, CartMandate, PaymentMandate } from './mandate.js';
|
|
|
50
50
|
export { PaymentError, PaymentErrorCode, isRecoverable, getErrorCode, formatError,
|
|
51
51
|
// Legacy aliases
|
|
52
52
|
AgenticPaymentError, CryptoError, ValidationError, ConsensusError, SystemError, WasmInitError, ErrorCode, } from './errors.js';
|
|
53
|
-
// Visa TAP (Trusted Agent Protocol)
|
|
54
|
-
|
|
53
|
+
// Visa TAP (Trusted Agent Protocol). The QUIC transport fails closed: agentic-flow
|
|
54
|
+
// ships no working QUIC, so connect() rejects with QuicTransportUnavailableError.
|
|
55
|
+
export { VisaTapQuicTransport, createQuicTransport, getQuicTransportStatus, QuicTransportUnavailableError, PaymentNotDeliveredError, } from './visa-tap/index.js';
|
|
55
56
|
export { signHttpMessage, verifyHttpSignature, computeContentDigest } from './visa-tap/index.js';
|
|
56
57
|
export { TAP_VERSION, DEFAULT_QUIC_PORT, MAX_MANDATE_LIFETIME_SECS } from './visa-tap/index.js';
|
|
57
58
|
// Version information
|
|
@@ -72,7 +73,6 @@ export function getInfo() {
|
|
|
72
73
|
'intent-mandates',
|
|
73
74
|
'cart-mandates',
|
|
74
75
|
'payment-mandates',
|
|
75
|
-
'visa-tap-quic-transport',
|
|
76
76
|
'rfc9421-http-signatures',
|
|
77
77
|
'active-mandates',
|
|
78
78
|
],
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2CG;AAEH,eAAe;AACf,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAG9C,OAAO,EACL,kBAAkB,EAClB,yBAAyB,GAC1B,MAAM,mBAAmB,CAAC;AAQ3B,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAS1E,gBAAgB;AAChB,OAAO,EACL,YAAY,EACZ,gBAAgB,EAChB,aAAa,EACb,YAAY,EACZ,WAAW;AACX,iBAAiB;AACjB,mBAAmB,EACnB,WAAW,EACX,eAAe,EACf,cAAc,EACd,WAAW,EACX,aAAa,EACb,SAAS,GACV,MAAM,aAAa,CAAC;AAErB,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2CG;AAEH,eAAe;AACf,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAG9C,OAAO,EACL,kBAAkB,EAClB,yBAAyB,GAC1B,MAAM,mBAAmB,CAAC;AAQ3B,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAS1E,gBAAgB;AAChB,OAAO,EACL,YAAY,EACZ,gBAAgB,EAChB,aAAa,EACb,YAAY,EACZ,WAAW;AACX,iBAAiB;AACjB,mBAAmB,EACnB,WAAW,EACX,eAAe,EACf,cAAc,EACd,WAAW,EACX,aAAa,EACb,SAAS,GACV,MAAM,aAAa,CAAC;AAErB,mFAAmF;AACnF,kFAAkF;AAClF,OAAO,EACL,oBAAoB,EACpB,mBAAmB,EACnB,sBAAsB,EACtB,6BAA6B,EAC7B,wBAAwB,GACzB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,eAAe,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAQjG,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,yBAAyB,EAAE,MAAM,qBAAqB,CAAC;AAEhG,sBAAsB;AACtB,MAAM,CAAC,MAAM,OAAO,GAAG,OAAO,CAAC;AAE/B;;;;GAIG;AACH,MAAM,UAAU,OAAO;IAKrB,OAAO;QACL,OAAO,EAAE,OAAO;QAChB,cAAc,EAAE,mBAAmB;QACnC,QAAQ,EAAE;YACR,oBAAoB;YACpB,uBAAuB;YACvB,2BAA2B;YAC3B,iBAAiB;YACjB,eAAe;YACf,kBAAkB;YAClB,yBAAyB;YACzB,iBAAiB;SAClB;KACF,CAAC;AACJ,CAAC;AAED,iBAAiB;AACjB,eAAe;IACb,OAAO;IACP,OAAO;CACR,CAAC"}
|
package/dist/visa-tap/index.d.ts
CHANGED
|
@@ -1,30 +1,29 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Visa TAP (Trusted Agent Protocol) Integration
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
4
|
+
* RFC 9421 HTTP message signatures, Active Mandates, and a QUIC transport
|
|
5
|
+
* bridge. No published agentic-flow release ships a working QUIC transport, so
|
|
6
|
+
* VisaTapQuicTransport.connect() rejects with QuicTransportUnavailableError.
|
|
6
7
|
*
|
|
7
8
|
* @example
|
|
8
9
|
* ```typescript
|
|
9
10
|
* import { VisaTapQuicTransport, signHttpMessage } from 'agentic-payments/visa-tap';
|
|
10
11
|
*
|
|
11
|
-
* //
|
|
12
|
-
* const transport =
|
|
12
|
+
* // Throws QuicTransportUnavailableError while agentic-flow has no working QUIC
|
|
13
|
+
* const transport = await VisaTapQuicTransport.create({
|
|
13
14
|
* host: 'merchant.com',
|
|
14
15
|
* port: 8443
|
|
15
16
|
* });
|
|
16
17
|
*
|
|
17
|
-
*
|
|
18
|
-
*
|
|
19
|
-
* // Send payment
|
|
18
|
+
* // Resolves only with a server response carrying a transactionId;
|
|
19
|
+
* // otherwise rejects with PaymentNotDeliveredError
|
|
20
20
|
* const response = await transport.sendPayment(signedMandate);
|
|
21
|
-
* console.log('Payment approved:', response.transactionId);
|
|
22
21
|
* ```
|
|
23
22
|
*/
|
|
24
23
|
export { validateAndVerify, guardExecution, revoke, isRevoked, getAllRevocations, type SignedMandate, type VerificationResult, type ExecutionGuard, type RevocationRecord, } from '../active-mandate/index.js';
|
|
25
|
-
export { VisaTapQuicTransport, createQuicTransport, loadQuicTransport, AGENTIC_FLOW_PEER_RANGE, } from './quic-transport.js';
|
|
24
|
+
export { VisaTapQuicTransport, createQuicTransport, loadQuicTransport, getQuicTransportStatus, QuicTransportUnavailableError, PaymentNotDeliveredError, QUIC_UNAVAILABLE, PAYMENT_NOT_DELIVERED, AGENTIC_FLOW_PEER_RANGE, type QuicTransportStatus, } from './quic-transport.js';
|
|
26
25
|
export { signHttpMessage, verifyHttpSignature, computeContentDigest, } from './rfc9421.js';
|
|
27
|
-
export type { Period, MandateKind, ActiveMandatePayload, SignedActiveMandate, SignatureComponents, SignedHttpMessage, QuicConfig, QuicStats, PaymentResponse, } from './types.js';
|
|
26
|
+
export type { Period, MandateKind, ActiveMandatePayload, SignedActiveMandate, SignatureComponents, SignedHttpMessage, VerifiableHttpSignature, SignHttpMessageOptions, VerifyHttpSignatureOptions, QuicConfig, QuicStats, PaymentResponse, } from './types.js';
|
|
28
27
|
/**
|
|
29
28
|
* Visa TAP protocol version
|
|
30
29
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/visa-tap/index.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/visa-tap/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAGH,OAAO,EACL,iBAAiB,EACjB,cAAc,EACd,MAAM,EACN,SAAS,EACT,iBAAiB,EACjB,KAAK,aAAa,EAClB,KAAK,kBAAkB,EACvB,KAAK,cAAc,EACnB,KAAK,gBAAgB,GACtB,MAAM,4BAA4B,CAAC;AAGpC,OAAO,EACL,oBAAoB,EACpB,mBAAmB,EACnB,iBAAiB,EACjB,sBAAsB,EACtB,6BAA6B,EAC7B,wBAAwB,EACxB,gBAAgB,EAChB,qBAAqB,EACrB,uBAAuB,EACvB,KAAK,mBAAmB,GACzB,MAAM,qBAAqB,CAAC;AAG7B,OAAO,EACL,eAAe,EACf,mBAAmB,EACnB,oBAAoB,GACrB,MAAM,cAAc,CAAC;AAGtB,YAAY,EACV,MAAM,EACN,WAAW,EACX,oBAAoB,EACpB,mBAAmB,EACnB,mBAAmB,EACnB,iBAAiB,EACjB,uBAAuB,EACvB,sBAAsB,EACtB,0BAA0B,EAC1B,UAAU,EACV,SAAS,EACT,eAAe,GAChB,MAAM,YAAY,CAAC;AAEpB;;GAEG;AACH,eAAO,MAAM,WAAW,QAAQ,CAAC;AAEjC;;GAEG;AACH,eAAO,MAAM,iBAAiB,OAAO,CAAC;AAEtC;;GAEG;AACH,eAAO,MAAM,yBAAyB,QAAmB,CAAC"}
|
package/dist/visa-tap/index.js
CHANGED
|
@@ -1,30 +1,29 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Visa TAP (Trusted Agent Protocol) Integration
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
4
|
+
* RFC 9421 HTTP message signatures, Active Mandates, and a QUIC transport
|
|
5
|
+
* bridge. No published agentic-flow release ships a working QUIC transport, so
|
|
6
|
+
* VisaTapQuicTransport.connect() rejects with QuicTransportUnavailableError.
|
|
6
7
|
*
|
|
7
8
|
* @example
|
|
8
9
|
* ```typescript
|
|
9
10
|
* import { VisaTapQuicTransport, signHttpMessage } from 'agentic-payments/visa-tap';
|
|
10
11
|
*
|
|
11
|
-
* //
|
|
12
|
-
* const transport =
|
|
12
|
+
* // Throws QuicTransportUnavailableError while agentic-flow has no working QUIC
|
|
13
|
+
* const transport = await VisaTapQuicTransport.create({
|
|
13
14
|
* host: 'merchant.com',
|
|
14
15
|
* port: 8443
|
|
15
16
|
* });
|
|
16
17
|
*
|
|
17
|
-
*
|
|
18
|
-
*
|
|
19
|
-
* // Send payment
|
|
18
|
+
* // Resolves only with a server response carrying a transactionId;
|
|
19
|
+
* // otherwise rejects with PaymentNotDeliveredError
|
|
20
20
|
* const response = await transport.sendPayment(signedMandate);
|
|
21
|
-
* console.log('Payment approved:', response.transactionId);
|
|
22
21
|
* ```
|
|
23
22
|
*/
|
|
24
23
|
// Re-export from active-mandate (already working)
|
|
25
24
|
export { validateAndVerify, guardExecution, revoke, isRevoked, getAllRevocations, } from '../active-mandate/index.js';
|
|
26
25
|
// Export QUIC transport
|
|
27
|
-
export { VisaTapQuicTransport, createQuicTransport, loadQuicTransport, AGENTIC_FLOW_PEER_RANGE, } from './quic-transport.js';
|
|
26
|
+
export { VisaTapQuicTransport, createQuicTransport, loadQuicTransport, getQuicTransportStatus, QuicTransportUnavailableError, PaymentNotDeliveredError, QUIC_UNAVAILABLE, PAYMENT_NOT_DELIVERED, AGENTIC_FLOW_PEER_RANGE, } from './quic-transport.js';
|
|
28
27
|
// Export RFC 9421
|
|
29
28
|
export { signHttpMessage, verifyHttpSignature, computeContentDigest, } from './rfc9421.js';
|
|
30
29
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/visa-tap/index.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/visa-tap/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,kDAAkD;AAClD,OAAO,EACL,iBAAiB,EACjB,cAAc,EACd,MAAM,EACN,SAAS,EACT,iBAAiB,GAKlB,MAAM,4BAA4B,CAAC;AAEpC,wBAAwB;AACxB,OAAO,EACL,oBAAoB,EACpB,mBAAmB,EACnB,iBAAiB,EACjB,sBAAsB,EACtB,6BAA6B,EAC7B,wBAAwB,EACxB,gBAAgB,EAChB,qBAAqB,EACrB,uBAAuB,GAExB,MAAM,qBAAqB,CAAC;AAE7B,kBAAkB;AAClB,OAAO,EACL,eAAe,EACf,mBAAmB,EACnB,oBAAoB,GACrB,MAAM,cAAc,CAAC;AAkBtB;;GAEG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,KAAK,CAAC;AAEjC;;GAEG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,IAAI,CAAC;AAEtC;;GAEG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC"}
|
|
@@ -1,7 +1,18 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* QUIC Transport Integration for Visa TAP
|
|
3
3
|
*
|
|
4
|
-
* Bridges agentic-payments with agentic-flow QUIC transport
|
|
4
|
+
* Bridges agentic-payments with the agentic-flow QUIC transport.
|
|
5
|
+
*
|
|
6
|
+
* No published agentic-flow release ships a working QUIC transport:
|
|
7
|
+
* `agentic-flow/transport/quic` is a placeholder whose `send()` discards the
|
|
8
|
+
* data. This transport therefore refuses to connect unless agentic-flow
|
|
9
|
+
* reports QUIC as available (`getQuicStatus()`), and never reports a payment
|
|
10
|
+
* as sent unless a real response comes back.
|
|
11
|
+
*
|
|
12
|
+
* It deliberately does not fall back to agentic-flow's WebSocket transport:
|
|
13
|
+
* no Visa TAP endpoint speaks that framing, its `send()` has no
|
|
14
|
+
* application-level acknowledgement, and plain `ws://` would carry mandates
|
|
15
|
+
* in cleartext. Failing closed is the only safe behaviour for payments.
|
|
5
16
|
*/
|
|
6
17
|
import type { QuicConfig, QuicStats, PaymentResponse, SignedActiveMandate } from './types.js';
|
|
7
18
|
/**
|
|
@@ -20,35 +31,83 @@ export declare const AGENTIC_FLOW_PEER_RANGE = "^2.0.14 || ^3.0.0";
|
|
|
20
31
|
* @throws Error with install instructions when agentic-flow is not installed
|
|
21
32
|
*/
|
|
22
33
|
export declare function loadQuicTransport(): Promise<any>;
|
|
34
|
+
/** Error code carried by {@link QuicTransportUnavailableError}. */
|
|
35
|
+
export declare const QUIC_UNAVAILABLE = "QUIC_UNAVAILABLE";
|
|
36
|
+
/** Error code carried by {@link PaymentNotDeliveredError}. */
|
|
37
|
+
export declare const PAYMENT_NOT_DELIVERED = "PAYMENT_NOT_DELIVERED";
|
|
38
|
+
/**
|
|
39
|
+
* Thrown by {@link VisaTapQuicTransport.connect} when no working QUIC
|
|
40
|
+
* transport is available, so nothing could be delivered.
|
|
41
|
+
*/
|
|
42
|
+
export declare class QuicTransportUnavailableError extends Error {
|
|
43
|
+
readonly reason: string;
|
|
44
|
+
readonly code = "QUIC_UNAVAILABLE";
|
|
45
|
+
constructor(reason: string);
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Thrown when a send did not produce a confirmed response, so the caller must
|
|
49
|
+
* treat the payment message as not delivered.
|
|
50
|
+
*/
|
|
51
|
+
export declare class PaymentNotDeliveredError extends Error {
|
|
52
|
+
readonly code = "PAYMENT_NOT_DELIVERED";
|
|
53
|
+
constructor(message: string);
|
|
54
|
+
}
|
|
55
|
+
/** Result of {@link getQuicTransportStatus}. */
|
|
56
|
+
export interface QuicTransportStatus {
|
|
57
|
+
available: boolean;
|
|
58
|
+
reason?: string;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Ask agentic-flow whether its QUIC transport can actually move data.
|
|
62
|
+
*
|
|
63
|
+
* Fails closed: QUIC counts as available only when agentic-flow exports a
|
|
64
|
+
* probe and that probe says so. Older agentic-flow releases have no probe,
|
|
65
|
+
* and their QuicTransport is the same placeholder, so they are unavailable.
|
|
66
|
+
*/
|
|
67
|
+
export declare function getQuicTransportStatus(mod?: any): Promise<QuicTransportStatus>;
|
|
23
68
|
/**
|
|
24
69
|
* Visa TAP QUIC Transport
|
|
25
70
|
*
|
|
26
|
-
*
|
|
27
|
-
*
|
|
71
|
+
* QUIC transport for Visa TAP payments, backed by agentic-flow.
|
|
72
|
+
*
|
|
73
|
+
* `connect()` rejects with {@link QuicTransportUnavailableError} unless
|
|
74
|
+
* agentic-flow reports a working QUIC transport. With every agentic-flow
|
|
75
|
+
* release published so far it rejects. Use {@link VisaTapQuicTransport.create}
|
|
76
|
+
* to construct and check in one step.
|
|
28
77
|
*/
|
|
29
78
|
export declare class VisaTapQuicTransport {
|
|
30
79
|
private quic;
|
|
31
80
|
private config;
|
|
32
81
|
private connected;
|
|
82
|
+
/**
|
|
83
|
+
* Construct a transport and connect it, failing fast when QUIC is
|
|
84
|
+
* unavailable.
|
|
85
|
+
*
|
|
86
|
+
* @throws QuicTransportUnavailableError when no working QUIC transport exists
|
|
87
|
+
*/
|
|
88
|
+
static create(config: QuicConfig): Promise<VisaTapQuicTransport>;
|
|
33
89
|
constructor(config: QuicConfig);
|
|
34
90
|
/**
|
|
35
|
-
* Connect to QUIC server
|
|
91
|
+
* Connect to the QUIC server.
|
|
36
92
|
*
|
|
37
|
-
*
|
|
93
|
+
* @throws Error with install instructions when agentic-flow is not installed
|
|
94
|
+
* @throws QuicTransportUnavailableError when agentic-flow has no working QUIC
|
|
38
95
|
*/
|
|
39
96
|
connect(): Promise<void>;
|
|
40
97
|
/**
|
|
41
98
|
* Send payment request over QUIC
|
|
42
99
|
*
|
|
43
100
|
* @param signedMandate - Cryptographically signed Active Mandate
|
|
44
|
-
* @returns Payment response
|
|
101
|
+
* @returns Payment response returned by the server
|
|
102
|
+
* @throws PaymentNotDeliveredError when no response with a transactionId came back
|
|
45
103
|
*/
|
|
46
104
|
sendPayment(signedMandate: SignedActiveMandate): Promise<PaymentResponse>;
|
|
47
105
|
/**
|
|
48
106
|
* Send raw payment data
|
|
49
107
|
*
|
|
50
108
|
* @param data - Payment data object
|
|
51
|
-
* @returns Response data
|
|
109
|
+
* @returns Response data returned by the server
|
|
110
|
+
* @throws PaymentNotDeliveredError when the transport returned no response
|
|
52
111
|
*/
|
|
53
112
|
send(data: any): Promise<any>;
|
|
54
113
|
/**
|
|
@@ -68,7 +127,10 @@ export declare class VisaTapQuicTransport {
|
|
|
68
127
|
*/
|
|
69
128
|
close(): Promise<void>;
|
|
70
129
|
/**
|
|
71
|
-
*
|
|
130
|
+
* Validate a payment response from the server.
|
|
131
|
+
*
|
|
132
|
+
* Never synthesises a response: a missing response, or one without a
|
|
133
|
+
* transactionId and a known status, means the payment was not confirmed.
|
|
72
134
|
*/
|
|
73
135
|
private parsePaymentResponse;
|
|
74
136
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"quic-transport.d.ts","sourceRoot":"","sources":["../../src/visa-tap/quic-transport.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"quic-transport.d.ts","sourceRoot":"","sources":["../../src/visa-tap/quic-transport.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAK9F;;;;;;GAMG;AACH,eAAO,MAAM,wBAAwB,gCAAgC,CAAC;AAEtE,wEAAwE;AACxE,eAAO,MAAM,uBAAuB,sBAAsB,CAAC;AAE3D;;;;GAIG;AACH,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,GAAG,CAAC,CAuBtD;AAED,mEAAmE;AACnE,eAAO,MAAM,gBAAgB,qBAAqB,CAAC;AAEnD,8DAA8D;AAC9D,eAAO,MAAM,qBAAqB,0BAA0B,CAAC;AAE7D;;;GAGG;AACH,qBAAa,6BAA8B,SAAQ,KAAK;IAE1C,QAAQ,CAAC,MAAM,EAAE,MAAM;IADnC,QAAQ,CAAC,IAAI,sBAAoB;gBACZ,MAAM,EAAE,MAAM;CAMpC;AAED;;;GAGG;AACH,qBAAa,wBAAyB,SAAQ,KAAK;IACjD,QAAQ,CAAC,IAAI,2BAAyB;gBAC1B,OAAO,EAAE,MAAM;CAI5B;AAED,gDAAgD;AAChD,MAAM,WAAW,mBAAmB;IAClC,SAAS,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAMD;;;;;;GAMG;AACH,wBAAsB,sBAAsB,CAAC,GAAG,CAAC,EAAE,GAAG,GAAG,OAAO,CAAC,mBAAmB,CAAC,CA6BpF;AAED;;;;;;;;;GASG;AACH,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,IAAI,CAAa;IACzB,OAAO,CAAC,MAAM,CAAa;IAC3B,OAAO,CAAC,SAAS,CAAkB;IAEnC;;;;;OAKG;WACU,MAAM,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,oBAAoB,CAAC;gBAM1D,MAAM,EAAE,UAAU;IAS9B;;;;;OAKG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAmB9B;;;;;;OAMG;IACG,WAAW,CAAC,aAAa,EAAE,mBAAmB,GAAG,OAAO,CAAC,eAAe,CAAC;IAc/E;;;;;;OAMG;IACG,IAAI,CAAC,IAAI,EAAE,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;IAenC;;OAEG;IACH,QAAQ,IAAI,SAAS,GAAG,IAAI;IAc5B;;OAEG;IACH,WAAW,IAAI,OAAO;IAItB;;OAEG;IACH,gBAAgB,IAAI,MAAM;IAI1B;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAO5B;;;;;OAKG;IACH,OAAO,CAAC,oBAAoB;CAe7B;AAED;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,MAAM,EACZ,IAAI,GAAE,MAAa,GAClB,oBAAoB,CAEtB"}
|