@agenticprimitives/payments 0.0.0-alpha.41 → 0.0.0-alpha.43
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/dist/entitlement/index.d.ts.map +1 -1
- package/dist/entitlement/index.js +10 -4
- package/dist/entitlement/index.js.map +1 -1
- package/dist/entitlement/voucher.d.ts +14 -1
- package/dist/entitlement/voucher.d.ts.map +1 -1
- package/dist/entitlement/voucher.js +20 -1
- package/dist/entitlement/voucher.js.map +1 -1
- package/dist/index.d.ts +7 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/mandate-sign.d.ts +42 -3
- package/dist/mandate-sign.d.ts.map +1 -1
- package/dist/mandate-sign.js +33 -2
- package/dist/mandate-sign.js.map +1 -1
- package/dist/mandate.d.ts +10 -2
- package/dist/mandate.d.ts.map +1 -1
- package/dist/mandate.js +9 -2
- package/dist/mandate.js.map +1 -1
- package/dist/ops.d.ts +45 -4
- package/dist/ops.d.ts.map +1 -1
- package/dist/ops.js +59 -10
- package/dist/ops.js.map +1 -1
- package/dist/rails/escrow.d.ts +11 -3
- package/dist/rails/escrow.d.ts.map +1 -1
- package/dist/rails/escrow.js +11 -2
- package/dist/rails/escrow.js.map +1 -1
- package/dist/rails/invoice.d.ts +6 -4
- package/dist/rails/invoice.d.ts.map +1 -1
- package/dist/rails/invoice.js +6 -5
- package/dist/rails/invoice.js.map +1 -1
- package/dist/rails/recurring.d.ts +7 -3
- package/dist/rails/recurring.d.ts.map +1 -1
- package/dist/rails/recurring.js +8 -5
- package/dist/rails/recurring.js.map +1 -1
- package/dist/rails/wallet.d.ts +8 -6
- package/dist/rails/wallet.d.ts.map +1 -1
- package/dist/rails/wallet.js +12 -9
- package/dist/rails/wallet.js.map +1 -1
- package/dist/rails/x402/executor.d.ts +124 -9
- package/dist/rails/x402/executor.d.ts.map +1 -1
- package/dist/rails/x402/executor.js +107 -13
- package/dist/rails/x402/executor.js.map +1 -1
- package/dist/rails/x402/index.d.ts +2 -2
- package/dist/rails/x402/index.d.ts.map +1 -1
- package/dist/rails/x402/index.js +1 -1
- package/dist/rails/x402/index.js.map +1 -1
- package/dist/rails/x402/wire.d.ts.map +1 -1
- package/dist/rails/x402/wire.js +18 -1
- package/dist/rails/x402/wire.js.map +1 -1
- package/dist/refund.d.ts +9 -2
- package/dist/refund.d.ts.map +1 -1
- package/dist/refund.js +10 -3
- package/dist/refund.js.map +1 -1
- package/dist/split.d.ts +7 -2
- package/dist/split.d.ts.map +1 -1
- package/dist/split.js +8 -3
- package/dist/split.js.map +1 -1
- package/dist/transfer.d.ts +24 -5
- package/dist/transfer.d.ts.map +1 -1
- package/dist/transfer.js +21 -5
- package/dist/transfer.js.map +1 -1
- package/dist/treasury.d.ts +50 -0
- package/dist/treasury.d.ts.map +1 -0
- package/dist/treasury.js +68 -0
- package/dist/treasury.js.map +1 -0
- package/package.json +5 -5
package/dist/ops.js
CHANGED
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
* an idempotent event model + webhook-style subscribers, reconciliation/payment-detection,
|
|
4
4
|
* and receipt export. In-process for W1 (the app delivers webhooks later). Pure — no I/O.
|
|
5
5
|
*/
|
|
6
|
+
import { checkTreasuryParties, NotATreasuryError } from './treasury.js';
|
|
6
7
|
export function createPaymentEventLog() {
|
|
7
8
|
const events = [];
|
|
8
9
|
const seen = new Set();
|
|
@@ -33,8 +34,15 @@ export function listReceiptsBy(receipts, filter) {
|
|
|
33
34
|
(filter.asset === undefined || eq(r.asset, filter.asset)) &&
|
|
34
35
|
(filter.orderHash === undefined || eq(r.orderHash, filter.orderHash)));
|
|
35
36
|
}
|
|
36
|
-
/**
|
|
37
|
-
|
|
37
|
+
/**
|
|
38
|
+
* Net balance change for `account` across the receipt set (incoming as payee − outgoing as payer).
|
|
39
|
+
* Spec 445 / ONT-4: only a treasury holds value — a person or organization account is refused
|
|
40
|
+
* (`NotATreasuryError` `PAYEE_NOT_TREASURY`), never reported as a balance. `isTreasury` is REQUIRED.
|
|
41
|
+
*/
|
|
42
|
+
export async function balanceDelta(receipts, account, deps) {
|
|
43
|
+
const c = await checkTreasuryParties(deps, { payees: [account] });
|
|
44
|
+
if (!c.ok)
|
|
45
|
+
throw new NotATreasuryError(c.code, c.address);
|
|
38
46
|
let delta = 0n;
|
|
39
47
|
for (const r of receipts) {
|
|
40
48
|
if (eq(r.payee, account))
|
|
@@ -44,15 +52,56 @@ export function balanceDelta(receipts, account) {
|
|
|
44
52
|
}
|
|
45
53
|
return delta;
|
|
46
54
|
}
|
|
47
|
-
/**
|
|
48
|
-
|
|
49
|
-
|
|
55
|
+
/**
|
|
56
|
+
* Payment detection: is `orderHash` paid (optionally to ≥ an expected NET amount, in an expected asset, to an
|
|
57
|
+
* expected payee)? From receipts, not logs. Returns the reason when it is not.
|
|
58
|
+
*
|
|
59
|
+
* Spec 445 / audit DATA-14. Three things this used to get wrong, each fail-open:
|
|
60
|
+
* - a refund leg was FILTERED OUT instead of subtracted, so a fully refunded order read as paid;
|
|
61
|
+
* - receipts in another asset were summed as if they were the same unit;
|
|
62
|
+
* - receipts to another payee counted toward "paid to me".
|
|
63
|
+
* A refund leg belongs to the order when it carries the order's `orderHash` or its `refunds` names the
|
|
64
|
+
* `mandateId` of one of the order's charges. Amounts in two assets are never added: with no `asset` named, an
|
|
65
|
+
* order whose legs span assets (or whose charges span payees, with no `payee` named) is NOT paid — the caller
|
|
66
|
+
* has to say which it means. The third argument still accepts a bare bigint (the expected amount).
|
|
67
|
+
*
|
|
68
|
+
* Spec 445 / ontology ONT-4: every leg of the order (charge and refund) must move value treasury → treasury.
|
|
69
|
+
* A leg whose payer or payee is a person or organization makes the order NOT paid, with reason
|
|
70
|
+
* `PAYER_NOT_TREASURY` / `PAYEE_NOT_TREASURY` — such a leg is not a payment this package recognises.
|
|
71
|
+
* `isTreasury` is REQUIRED (absent → `TREASURY_PORT_MISSING`).
|
|
72
|
+
*/
|
|
73
|
+
export async function orderPaymentStatus(receipts, orderHash, expected, deps) {
|
|
74
|
+
const want = typeof expected === 'bigint' ? { amount: expected } : (expected ?? {});
|
|
75
|
+
const ofOrder = receipts.filter((r) => eq(r.orderHash, orderHash) && !r.refunds);
|
|
76
|
+
const charges = ofOrder.filter((r) => (want.asset === undefined || eq(r.asset, want.asset)) && (want.payee === undefined || eq(r.payee, want.payee)));
|
|
50
77
|
if (charges.length === 0)
|
|
51
|
-
return false;
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
78
|
+
return { paid: false, reason: 'NO_CHARGES' };
|
|
79
|
+
const lower = (x) => x.toLowerCase();
|
|
80
|
+
if (want.asset === undefined && new Set(ofOrder.map((r) => lower(r.asset))).size > 1)
|
|
81
|
+
return { paid: false, reason: 'MIXED_ASSETS' };
|
|
82
|
+
if (want.payee === undefined && new Set(ofOrder.map((r) => lower(r.payee))).size > 1)
|
|
83
|
+
return { paid: false, reason: 'MIXED_PAYEES' };
|
|
84
|
+
const asset = lower(charges[0].asset);
|
|
85
|
+
const chargeIds = new Set(charges.map((r) => lower(r.mandateId)));
|
|
86
|
+
const refunds = receipts.filter((r) => r.refunds && (eq(r.orderHash, orderHash) || chargeIds.has(lower(r.refunds))));
|
|
87
|
+
// ONT-4: every leg that would count — the order's charges and its refunds — is treasury → treasury.
|
|
88
|
+
const legs = [...ofOrder, ...refunds];
|
|
89
|
+
const t = await checkTreasuryParties(deps, { payers: legs.map((r) => r.payer), payees: legs.map((r) => r.payee) });
|
|
90
|
+
if (!t.ok)
|
|
91
|
+
return { paid: false, reason: t.code, ...(t.address ? { address: t.address } : {}) };
|
|
92
|
+
// A refund in another asset cannot be netted against these charges; refuse rather than ignore it.
|
|
93
|
+
if (refunds.some((r) => lower(r.asset) !== asset))
|
|
94
|
+
return { paid: false, reason: 'REFUND_IN_OTHER_ASSET' };
|
|
95
|
+
const net = charges.reduce((s, r) => s + r.amount, 0n) - refunds.reduce((s, r) => s + r.amount, 0n);
|
|
96
|
+
if (net <= 0n)
|
|
97
|
+
return { paid: false, reason: 'NOT_POSITIVE' };
|
|
98
|
+
if (want.amount !== undefined && net < want.amount)
|
|
99
|
+
return { paid: false, reason: 'BELOW_EXPECTED' };
|
|
100
|
+
return { paid: true, net };
|
|
101
|
+
}
|
|
102
|
+
/** `orderPaymentStatus(...).paid`. `isTreasury` is REQUIRED (spec 445 / ONT-4). */
|
|
103
|
+
export async function isOrderPaid(receipts, orderHash, expected, deps) {
|
|
104
|
+
return (await orderPaymentStatus(receipts, orderHash, expected, deps)).paid;
|
|
56
105
|
}
|
|
57
106
|
// ── export ──────────────────────────────────────────────────────────
|
|
58
107
|
export function exportReceiptsJSON(receipts) {
|
package/dist/ops.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ops.js","sourceRoot":"","sources":["../src/ops.ts"],"names":[],"mappings":"AAAA;;;;GAIG;
|
|
1
|
+
{"version":3,"file":"ops.js","sourceRoot":"","sources":["../src/ops.ts"],"names":[],"mappings":"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"}
|
package/dist/rails/escrow.d.ts
CHANGED
|
@@ -6,9 +6,14 @@
|
|
|
6
6
|
* fulfillment) → on failure/expiry `refund`/`reclaim` returns the funds. Builders emit the
|
|
7
7
|
* `{to: escrow, value, data}` calls an SA executes; deposit needs a prior `approve`
|
|
8
8
|
* (`buildErc20Approve`). App reads hold state via `getHold` (readContract), not log scans.
|
|
9
|
+
*
|
|
10
|
+
* Spec 445 / ontology ONT-4: the deposit is where the hold's parties are fixed, so it is where they are checked —
|
|
11
|
+
* the depositing payer, the payee and any `refundTo` must be TREASURIES (`isTreasury`, REQUIRED). Release / refund /
|
|
12
|
+
* reclaim only move a hold to the parties fixed at deposit.
|
|
9
13
|
*/
|
|
10
14
|
import { type Address } from 'viem';
|
|
11
15
|
import type { TransferPlan } from '../transfer.js';
|
|
16
|
+
import { type TreasuryPort } from '../treasury.js';
|
|
12
17
|
import type { Hex32 } from '../index.js';
|
|
13
18
|
/** Mirrors PaymentEscrow.Status. */
|
|
14
19
|
export declare enum EscrowStatus {
|
|
@@ -137,15 +142,18 @@ export interface EscrowDepositInput {
|
|
|
137
142
|
orderHash: Hex32;
|
|
138
143
|
asset: Address;
|
|
139
144
|
amount: bigint;
|
|
145
|
+
/** the depositing TREASURY — the SA that executes the deposit (msg.sender on-chain). Checked, not encoded. */
|
|
146
|
+
payer: Address;
|
|
147
|
+
/** the receiving TREASURY */
|
|
140
148
|
payee: Address;
|
|
141
|
-
/** where refund/reclaim returns; defaults on-chain to the payer (msg.sender) when zero */
|
|
149
|
+
/** where refund/reclaim returns (a TREASURY); defaults on-chain to the payer (msg.sender) when zero */
|
|
142
150
|
refundTo?: Address;
|
|
143
151
|
/** extra address allowed to release besides the payee; 0 = payee-only */
|
|
144
152
|
releaser?: Address;
|
|
145
153
|
expiry: number;
|
|
146
154
|
}
|
|
147
|
-
/** The deposit call (the payer
|
|
148
|
-
export declare function buildEscrowDeposit(input: EscrowDepositInput): TransferPlan
|
|
155
|
+
/** The deposit call (the payer treasury must `approve` the escrow for `asset` first). */
|
|
156
|
+
export declare function buildEscrowDeposit(input: EscrowDepositInput, deps: TreasuryPort): Promise<TransferPlan>;
|
|
149
157
|
/** Capture the hold to the payee (payee or configured releaser executes). EXT-PMT-3: holds are keyed by
|
|
150
158
|
* (payer, orderHash), so the releasing party must pass the payer. Cannot release at/after expiry. */
|
|
151
159
|
export declare function buildEscrowRelease(escrow: Address, payer: Address, orderHash: Hex32): TransferPlan;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"escrow.d.ts","sourceRoot":"","sources":["../../src/rails/escrow.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"escrow.d.ts","sourceRoot":"","sources":["../../src/rails/escrow.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAsB,KAAK,OAAO,EAAE,MAAM,MAAM,CAAC;AACxD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,EAAyB,KAAK,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC1E,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAEzC,oCAAoC;AACpC,oBAAY,YAAY;IACtB,IAAI,IAAI;IACR,IAAI,IAAI;IACR,QAAQ,IAAI;IACZ,QAAQ,IAAI;IACZ,SAAS,IAAI;CACd;AAED,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAyCb,CAAC;AAEX,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,OAAO,CAAC;IAChB,SAAS,EAAE,KAAK,CAAC;IACjB,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,8GAA8G;IAC9G,KAAK,EAAE,OAAO,CAAC;IACf,6BAA6B;IAC7B,KAAK,EAAE,OAAO,CAAC;IACf,uGAAuG;IACvG,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,yEAAyE;IACzE,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;CAChB;AAID,yFAAyF;AACzF,wBAAsB,kBAAkB,CAAC,KAAK,EAAE,kBAAkB,EAAE,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC,CAc7G;AAED;sGACsG;AACtG,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,KAAK,GAAG,YAAY,CAElG;AACD,2DAA2D;AAC3D,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,KAAK,GAAG,YAAY,CAEjG;AACD,qGAAqG;AACrG,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,KAAK,GAAG,YAAY,CAElF"}
|
package/dist/rails/escrow.js
CHANGED
|
@@ -6,8 +6,13 @@
|
|
|
6
6
|
* fulfillment) → on failure/expiry `refund`/`reclaim` returns the funds. Builders emit the
|
|
7
7
|
* `{to: escrow, value, data}` calls an SA executes; deposit needs a prior `approve`
|
|
8
8
|
* (`buildErc20Approve`). App reads hold state via `getHold` (readContract), not log scans.
|
|
9
|
+
*
|
|
10
|
+
* Spec 445 / ontology ONT-4: the deposit is where the hold's parties are fixed, so it is where they are checked —
|
|
11
|
+
* the depositing payer, the payee and any `refundTo` must be TREASURIES (`isTreasury`, REQUIRED). Release / refund /
|
|
12
|
+
* reclaim only move a hold to the parties fixed at deposit.
|
|
9
13
|
*/
|
|
10
14
|
import { encodeFunctionData } from 'viem';
|
|
15
|
+
import { assertTreasuryParties } from '../treasury.js';
|
|
11
16
|
/** Mirrors PaymentEscrow.Status. */
|
|
12
17
|
export var EscrowStatus;
|
|
13
18
|
(function (EscrowStatus) {
|
|
@@ -60,8 +65,12 @@ export const ESCROW_ABI = [
|
|
|
60
65
|
{ type: 'function', name: 'statusOf', stateMutability: 'view', inputs: [{ name: 'payer', type: 'address' }, { name: 'orderHash', type: 'bytes32' }], outputs: [{ type: 'uint8' }] },
|
|
61
66
|
];
|
|
62
67
|
const ZERO = '0x0000000000000000000000000000000000000000';
|
|
63
|
-
/** The deposit call (the payer
|
|
64
|
-
export function buildEscrowDeposit(input) {
|
|
68
|
+
/** The deposit call (the payer treasury must `approve` the escrow for `asset` first). */
|
|
69
|
+
export async function buildEscrowDeposit(input, deps) {
|
|
70
|
+
await assertTreasuryParties(deps, {
|
|
71
|
+
payers: [input.payer],
|
|
72
|
+
payees: input.refundTo && input.refundTo !== ZERO ? [input.payee, input.refundTo] : [input.payee],
|
|
73
|
+
});
|
|
65
74
|
return {
|
|
66
75
|
to: input.escrow,
|
|
67
76
|
value: 0n,
|
package/dist/rails/escrow.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"escrow.js","sourceRoot":"","sources":["../../src/rails/escrow.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"escrow.js","sourceRoot":"","sources":["../../src/rails/escrow.ts"],"names":[],"mappings":"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"}
|
package/dist/rails/invoice.d.ts
CHANGED
|
@@ -8,6 +8,7 @@
|
|
|
8
8
|
*/
|
|
9
9
|
import { type Address } from 'viem';
|
|
10
10
|
import type { TransferPlan } from '../transfer.js';
|
|
11
|
+
import type { TreasuryPort } from '../treasury.js';
|
|
11
12
|
import type { PaymentMandate, AssetRef, Hex32 } from '../index.js';
|
|
12
13
|
export interface InvoiceLineItem {
|
|
13
14
|
description: string;
|
|
@@ -16,7 +17,7 @@ export interface InvoiceLineItem {
|
|
|
16
17
|
export interface Invoice {
|
|
17
18
|
invoiceId: Hex32;
|
|
18
19
|
issuer: Address;
|
|
19
|
-
/**
|
|
20
|
+
/** the TREASURY that receives payment — MAY differ from the issuer; a non-treasury is refused at pay time */
|
|
20
21
|
payTo: Address;
|
|
21
22
|
lineItems: InvoiceLineItem[];
|
|
22
23
|
amount: bigint;
|
|
@@ -53,13 +54,14 @@ export declare function buildInvoice(input: InvoiceInput): Invoice;
|
|
|
53
54
|
/**
|
|
54
55
|
* Pay an invoice via the wallet rail. Derives a closed mandate bound to the invoice
|
|
55
56
|
* (`orderHash = invoice.orderHash ?? invoiceId`) + the transfer plan. Sign the returned
|
|
56
|
-
* mandate with `signPaymentMandate`, then submit `plan`.
|
|
57
|
+
* mandate with `signPaymentMandate`, then submit `plan`. `payer` and `invoice.payTo` must be treasuries
|
|
58
|
+
* (`deps.isTreasury`, REQUIRED — spec 445 / ONT-4).
|
|
57
59
|
*/
|
|
58
60
|
export declare function payInvoice(invoice: Invoice, payer: Address, opts: {
|
|
59
61
|
nonce: bigint;
|
|
60
62
|
validFrom?: number;
|
|
61
|
-
}): {
|
|
63
|
+
}, deps: TreasuryPort): Promise<{
|
|
62
64
|
mandate: PaymentMandate;
|
|
63
65
|
plan: TransferPlan;
|
|
64
|
-
}
|
|
66
|
+
}>;
|
|
65
67
|
//# sourceMappingURL=invoice.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"invoice.d.ts","sourceRoot":"","sources":["../../src/rails/invoice.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAA2C,KAAK,OAAO,EAAE,MAAM,MAAM,CAAC;AAG7E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,KAAK,EAAE,cAAc,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAInE,MAAM,WAAW,eAAe;IAC9B,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,OAAO;IACtB,SAAS,EAAE,KAAK,CAAC;IACjB,MAAM,EAAE,OAAO,CAAC;IAChB,
|
|
1
|
+
{"version":3,"file":"invoice.d.ts","sourceRoot":"","sources":["../../src/rails/invoice.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAA2C,KAAK,OAAO,EAAE,MAAM,MAAM,CAAC;AAG7E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,KAAK,EAAE,cAAc,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAInE,MAAM,WAAW,eAAe;IAC9B,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,OAAO;IACtB,SAAS,EAAE,KAAK,CAAC;IACjB,MAAM,EAAE,OAAO,CAAC;IAChB,6GAA6G;IAC7G,KAAK,EAAE,OAAO,CAAC;IACf,SAAS,EAAE,eAAe,EAAE,CAAC;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,QAAQ,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,yEAAyE;IACzE,KAAK,EAAE,MAAM,CAAC;IACd,iEAAiE;IACjE,QAAQ,EAAE,KAAK,CAAC;IAChB,oFAAoF;IACpF,SAAS,CAAC,EAAE,KAAK,CAAC;CACnB;AAED,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,OAAO,CAAC;IAChB,KAAK,EAAE,OAAO,CAAC;IACf,SAAS,EAAE,eAAe,EAAE,CAAC;IAC7B,KAAK,EAAE,QAAQ,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,KAAK,CAAC;CACnB;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE;IAAE,MAAM,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAAG,KAAK,CAO/I;AAED,sDAAsD;AACtD,wBAAgB,YAAY,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,CAezD;AAED;;;;;GAKG;AACH,wBAAsB,UAAU,CAC9B,OAAO,EAAE,OAAO,EAChB,KAAK,EAAE,OAAO,EACd,IAAI,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,EAC3C,IAAI,EAAE,YAAY,GACjB,OAAO,CAAC;IAAE,OAAO,EAAE,cAAc,CAAC;IAAC,IAAI,EAAE,YAAY,CAAA;CAAE,CAAC,CAiB1D"}
|
package/dist/rails/invoice.js
CHANGED
|
@@ -34,11 +34,12 @@ export function buildInvoice(input) {
|
|
|
34
34
|
/**
|
|
35
35
|
* Pay an invoice via the wallet rail. Derives a closed mandate bound to the invoice
|
|
36
36
|
* (`orderHash = invoice.orderHash ?? invoiceId`) + the transfer plan. Sign the returned
|
|
37
|
-
* mandate with `signPaymentMandate`, then submit `plan`.
|
|
37
|
+
* mandate with `signPaymentMandate`, then submit `plan`. `payer` and `invoice.payTo` must be treasuries
|
|
38
|
+
* (`deps.isTreasury`, REQUIRED — spec 445 / ONT-4).
|
|
38
39
|
*/
|
|
39
|
-
export function payInvoice(invoice, payer, opts) {
|
|
40
|
+
export async function payInvoice(invoice, payer, opts, deps) {
|
|
40
41
|
const orderHash = invoice.orderHash ?? invoice.invoiceId;
|
|
41
|
-
const mandate = buildClosedMandate({
|
|
42
|
+
const mandate = await buildClosedMandate({
|
|
42
43
|
rail: 'wallet',
|
|
43
44
|
payer,
|
|
44
45
|
payee: invoice.payTo,
|
|
@@ -51,7 +52,7 @@ export function payInvoice(invoice, payer, opts) {
|
|
|
51
52
|
orderHash,
|
|
52
53
|
legId: invoice.invoiceId,
|
|
53
54
|
reasonHash: invoice.memoHash,
|
|
54
|
-
});
|
|
55
|
-
return { mandate, plan: buildWalletTransferPlan(mandate) };
|
|
55
|
+
}, deps);
|
|
56
|
+
return { mandate, plan: await buildWalletTransferPlan(mandate, deps) };
|
|
56
57
|
}
|
|
57
58
|
//# sourceMappingURL=invoice.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"invoice.js","sourceRoot":"","sources":["../../src/rails/invoice.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,SAAS,EAAE,mBAAmB,EAAE,OAAO,EAAgB,MAAM,MAAM,CAAC;AAC7E,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"invoice.js","sourceRoot":"","sources":["../../src/rails/invoice.ts"],"names":[],"mappings":"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"}
|
|
@@ -9,9 +9,12 @@
|
|
|
9
9
|
*/
|
|
10
10
|
import type { Address } from '@agenticprimitives/types';
|
|
11
11
|
import type { TransferPlan } from '../transfer.js';
|
|
12
|
+
import { type TreasuryPort } from '../treasury.js';
|
|
12
13
|
import type { PaymentMandate, AssetRef, Hex32 } from '../index.js';
|
|
13
14
|
export interface RecurringInput {
|
|
15
|
+
/** the paying TREASURY (spec 445 / ONT-4) */
|
|
14
16
|
payer: Address;
|
|
17
|
+
/** the receiving TREASURY */
|
|
15
18
|
payee: Address;
|
|
16
19
|
asset: AssetRef;
|
|
17
20
|
chain: number;
|
|
@@ -29,7 +32,8 @@ export interface RecurringTemplate extends RecurringInput {
|
|
|
29
32
|
/** number of periods the totalCap covers at amountPerPeriod */
|
|
30
33
|
periods: number;
|
|
31
34
|
}
|
|
32
|
-
|
|
35
|
+
/** Refuses a non-treasury payer or payee (`deps.isTreasury`, REQUIRED — spec 445 / ONT-4). */
|
|
36
|
+
export declare function buildRecurringTemplate(input: RecurringInput, deps: TreasuryPort): Promise<RecurringTemplate>;
|
|
33
37
|
export interface RecurringCaveatParams {
|
|
34
38
|
maxAmountPerCharge: bigint;
|
|
35
39
|
maxAggregate: bigint;
|
|
@@ -45,12 +49,12 @@ export declare function periodWindow(t: RecurringTemplate, period: number): {
|
|
|
45
49
|
end: number;
|
|
46
50
|
};
|
|
47
51
|
/** Derive the closed per-charge mandate + transfer plan for period N. Sign the mandate, then settle. */
|
|
48
|
-
export declare function deriveScheduledCharge(t: RecurringTemplate, period: number): {
|
|
52
|
+
export declare function deriveScheduledCharge(t: RecurringTemplate, period: number, deps: TreasuryPort): Promise<{
|
|
49
53
|
mandate: PaymentMandate;
|
|
50
54
|
plan: TransferPlan;
|
|
51
55
|
window: {
|
|
52
56
|
start: number;
|
|
53
57
|
end: number;
|
|
54
58
|
};
|
|
55
|
-
}
|
|
59
|
+
}>;
|
|
56
60
|
//# sourceMappingURL=recurring.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"recurring.d.ts","sourceRoot":"","sources":["../../src/rails/recurring.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AAIxD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,KAAK,EAAE,cAAc,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAEnE,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,OAAO,CAAC;IACf,KAAK,EAAE,OAAO,CAAC;IACf,KAAK,EAAE,QAAQ,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,eAAe,EAAE,MAAM,CAAC;IACxB,aAAa,EAAE,MAAM,CAAC;IACtB,6DAA6D;IAC7D,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,0DAA0D;IAC1D,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,iBAAkB,SAAQ,cAAc;IACvD,UAAU,EAAE,KAAK,CAAC;IAClB,+DAA+D;IAC/D,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,
|
|
1
|
+
{"version":3,"file":"recurring.d.ts","sourceRoot":"","sources":["../../src/rails/recurring.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AAIxD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,EAAyB,KAAK,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC1E,OAAO,KAAK,EAAE,cAAc,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAEnE,MAAM,WAAW,cAAc;IAC7B,6CAA6C;IAC7C,KAAK,EAAE,OAAO,CAAC;IACf,6BAA6B;IAC7B,KAAK,EAAE,OAAO,CAAC;IACf,KAAK,EAAE,QAAQ,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,eAAe,EAAE,MAAM,CAAC;IACxB,aAAa,EAAE,MAAM,CAAC;IACtB,6DAA6D;IAC7D,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,0DAA0D;IAC1D,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,iBAAkB,SAAQ,cAAc;IACvD,UAAU,EAAE,KAAK,CAAC;IAClB,+DAA+D;IAC/D,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,8FAA8F;AAC9F,wBAAsB,sBAAsB,CAAC,KAAK,EAAE,cAAc,EAAE,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAYlH;AAED,MAAM,WAAW,qBAAqB;IACpC,kBAAkB,EAAE,MAAM,CAAC;IAC3B,YAAY,EAAE,MAAM,CAAC;IACrB,uBAAuB,EAAE,MAAM,CAAC;IAChC,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,0GAA0G;AAC1G,wBAAgB,qBAAqB,CAAC,CAAC,EAAE,iBAAiB,GAAG,qBAAqB,CAQjF;AAED,kGAAkG;AAClG,wBAAgB,YAAY,CAAC,CAAC,EAAE,iBAAiB,EAAE,MAAM,EAAE,MAAM,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CAGjG;AAED,wGAAwG;AACxG,wBAAsB,qBAAqB,CACzC,CAAC,EAAE,iBAAiB,EACpB,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,YAAY,GACjB,OAAO,CAAC;IAAE,OAAO,EAAE,cAAc,CAAC;IAAC,IAAI,EAAE,YAAY,CAAC;IAAC,MAAM,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,CAAC,CAiBlG"}
|
package/dist/rails/recurring.js
CHANGED
|
@@ -10,13 +10,16 @@
|
|
|
10
10
|
import { keccak256, encodeAbiParameters } from 'viem';
|
|
11
11
|
import { buildClosedMandate } from '../mandate.js';
|
|
12
12
|
import { buildWalletTransferPlan } from './wallet.js';
|
|
13
|
-
|
|
13
|
+
import { assertTreasuryParties } from '../treasury.js';
|
|
14
|
+
/** Refuses a non-treasury payer or payee (`deps.isTreasury`, REQUIRED — spec 445 / ONT-4). */
|
|
15
|
+
export async function buildRecurringTemplate(input, deps) {
|
|
14
16
|
if (input.amountPerPeriod <= 0n)
|
|
15
17
|
throw new Error('[recurring] amountPerPeriod must be > 0');
|
|
16
18
|
if (input.totalCap < input.amountPerPeriod)
|
|
17
19
|
throw new Error('[recurring] totalCap must be >= amountPerPeriod');
|
|
18
20
|
if (input.windowSeconds <= 0)
|
|
19
21
|
throw new Error('[recurring] windowSeconds must be > 0');
|
|
22
|
+
await assertTreasuryParties(deps, { payers: [input.payer], payees: [input.payee] });
|
|
20
23
|
const templateId = keccak256(encodeAbiParameters([{ type: 'address' }, { type: 'address' }, { type: 'uint256' }, { type: 'uint256' }, { type: 'uint256' }], [input.payer, input.payee, input.amountPerPeriod, BigInt(input.windowSeconds), input.startNonce]));
|
|
21
24
|
return { ...input, templateId, periods: Number(input.totalCap / input.amountPerPeriod) };
|
|
22
25
|
}
|
|
@@ -36,11 +39,11 @@ export function periodWindow(t, period) {
|
|
|
36
39
|
return { start, end: start + t.windowSeconds };
|
|
37
40
|
}
|
|
38
41
|
/** Derive the closed per-charge mandate + transfer plan for period N. Sign the mandate, then settle. */
|
|
39
|
-
export function deriveScheduledCharge(t, period) {
|
|
42
|
+
export async function deriveScheduledCharge(t, period, deps) {
|
|
40
43
|
if (period < 0 || period >= t.periods)
|
|
41
44
|
throw new Error(`[recurring] period out of range [0, ${t.periods})`);
|
|
42
45
|
const window = periodWindow(t, period);
|
|
43
|
-
const mandate = buildClosedMandate({
|
|
46
|
+
const mandate = await buildClosedMandate({
|
|
44
47
|
rail: 'wallet',
|
|
45
48
|
payer: t.payer,
|
|
46
49
|
payee: t.payee,
|
|
@@ -52,7 +55,7 @@ export function deriveScheduledCharge(t, period) {
|
|
|
52
55
|
expiresAt: window.end,
|
|
53
56
|
orderHash: t.templateId,
|
|
54
57
|
legId: ('0x' + period.toString(16).padStart(64, '0')),
|
|
55
|
-
});
|
|
56
|
-
return { mandate, plan: buildWalletTransferPlan(mandate), window };
|
|
58
|
+
}, deps);
|
|
59
|
+
return { mandate, plan: await buildWalletTransferPlan(mandate, deps), window };
|
|
57
60
|
}
|
|
58
61
|
//# sourceMappingURL=recurring.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"recurring.js","sourceRoot":"","sources":["../../src/rails/recurring.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,EAAE,SAAS,EAAE,mBAAmB,EAAE,MAAM,MAAM,CAAC;AACtD,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"recurring.js","sourceRoot":"","sources":["../../src/rails/recurring.ts"],"names":[],"mappings":"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"}
|
package/dist/rails/wallet.d.ts
CHANGED
|
@@ -1,16 +1,18 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Wallet rail (spec 243 §5.3/§5.5) — direct
|
|
2
|
+
* Wallet rail (spec 243 §5.3/§5.5) — direct treasury → treasury transfer of a CLOSED mandate.
|
|
3
3
|
*
|
|
4
|
-
* Plain "checkout" pay: no budget delegation, no 402 round-trip. The payer
|
|
5
|
-
* single ERC-20 transfer to the payee
|
|
4
|
+
* Plain "checkout" pay: no budget delegation, no 402 round-trip. The payer TREASURY executes a
|
|
5
|
+
* single ERC-20 transfer to the payee TREASURY (spec 445 / ONT-4 — `isTreasury` REQUIRED; a person or
|
|
6
|
+
* organization on either side is refused). Nullifier + receipt are identical to x402 (EXC-D3
|
|
6
7
|
* evidence symmetry). Ports the smart-agent `PledgeRegistry` cryptographic-rail pattern.
|
|
7
8
|
*/
|
|
8
9
|
import { type ClosedMandateInput } from '../mandate.js';
|
|
9
10
|
import { type TransferPlan } from '../transfer.js';
|
|
11
|
+
import { type TreasuryPort } from '../treasury.js';
|
|
10
12
|
import type { PaymentMandate } from '../index.js';
|
|
11
13
|
export declare const WALLET_RAIL: "wallet";
|
|
12
14
|
/** Build an unsigned closed wallet-rail mandate (sign with `signPaymentMandate`). */
|
|
13
|
-
export declare function buildWalletMandate(input: Omit<ClosedMandateInput, 'rail'
|
|
14
|
-
/** The settlement plan for a closed wallet mandate: a direct transfer payer → payee. */
|
|
15
|
-
export declare function buildWalletTransferPlan(mandate: PaymentMandate): TransferPlan
|
|
15
|
+
export declare function buildWalletMandate(input: Omit<ClosedMandateInput, 'rail'>, deps: TreasuryPort): Promise<PaymentMandate>;
|
|
16
|
+
/** The settlement plan for a closed wallet mandate: a direct transfer payer treasury → payee treasury. */
|
|
17
|
+
export declare function buildWalletTransferPlan(mandate: PaymentMandate, deps: TreasuryPort): Promise<TransferPlan>;
|
|
16
18
|
//# sourceMappingURL=wallet.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wallet.d.ts","sourceRoot":"","sources":["../../src/rails/wallet.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"wallet.d.ts","sourceRoot":"","sources":["../../src/rails/wallet.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,OAAO,EAAsB,KAAK,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAC5E,OAAO,EAAuB,KAAK,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACxE,OAAO,EAAyB,KAAK,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC1E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAElD,eAAO,MAAM,WAAW,EAAG,QAAiB,CAAC;AAE7C,qFAAqF;AACrF,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,IAAI,CAAC,kBAAkB,EAAE,MAAM,CAAC,EAAE,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,cAAc,CAAC,CAEvH;AAED,0GAA0G;AAC1G,wBAAsB,uBAAuB,CAAC,OAAO,EAAE,cAAc,EAAE,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC,CAGhH"}
|
package/dist/rails/wallet.js
CHANGED
|
@@ -1,20 +1,23 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Wallet rail (spec 243 §5.3/§5.5) — direct
|
|
2
|
+
* Wallet rail (spec 243 §5.3/§5.5) — direct treasury → treasury transfer of a CLOSED mandate.
|
|
3
3
|
*
|
|
4
|
-
* Plain "checkout" pay: no budget delegation, no 402 round-trip. The payer
|
|
5
|
-
* single ERC-20 transfer to the payee
|
|
4
|
+
* Plain "checkout" pay: no budget delegation, no 402 round-trip. The payer TREASURY executes a
|
|
5
|
+
* single ERC-20 transfer to the payee TREASURY (spec 445 / ONT-4 — `isTreasury` REQUIRED; a person or
|
|
6
|
+
* organization on either side is refused). Nullifier + receipt are identical to x402 (EXC-D3
|
|
6
7
|
* evidence symmetry). Ports the smart-agent `PledgeRegistry` cryptographic-rail pattern.
|
|
7
8
|
*/
|
|
8
9
|
import { mandateAmount } from '../mandate-sign.js';
|
|
9
10
|
import { buildClosedMandate } from '../mandate.js';
|
|
10
|
-
import {
|
|
11
|
+
import { encodeErc20Transfer } from '../transfer.js';
|
|
12
|
+
import { assertTreasuryParties } from '../treasury.js';
|
|
11
13
|
export const WALLET_RAIL = 'wallet';
|
|
12
14
|
/** Build an unsigned closed wallet-rail mandate (sign with `signPaymentMandate`). */
|
|
13
|
-
export function buildWalletMandate(input) {
|
|
14
|
-
return buildClosedMandate({ ...input, rail: 'wallet' });
|
|
15
|
+
export function buildWalletMandate(input, deps) {
|
|
16
|
+
return buildClosedMandate({ ...input, rail: 'wallet' }, deps);
|
|
15
17
|
}
|
|
16
|
-
/** The settlement plan for a closed wallet mandate: a direct transfer payer → payee. */
|
|
17
|
-
export function buildWalletTransferPlan(mandate) {
|
|
18
|
-
|
|
18
|
+
/** The settlement plan for a closed wallet mandate: a direct transfer payer treasury → payee treasury. */
|
|
19
|
+
export async function buildWalletTransferPlan(mandate, deps) {
|
|
20
|
+
await assertTreasuryParties(deps, { payers: [mandate.payer], payees: [mandate.payee] });
|
|
21
|
+
return encodeErc20Transfer(mandate.amountPolicy.asset.id, mandate.payee, mandateAmount(mandate));
|
|
19
22
|
}
|
|
20
23
|
//# sourceMappingURL=wallet.js.map
|
package/dist/rails/wallet.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wallet.js","sourceRoot":"","sources":["../../src/rails/wallet.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"wallet.js","sourceRoot":"","sources":["../../src/rails/wallet.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,kBAAkB,EAA2B,MAAM,eAAe,CAAC;AAC5E,OAAO,EAAE,mBAAmB,EAAqB,MAAM,gBAAgB,CAAC;AACxE,OAAO,EAAE,qBAAqB,EAAqB,MAAM,gBAAgB,CAAC;AAG1E,MAAM,CAAC,MAAM,WAAW,GAAG,QAAiB,CAAC;AAE7C,qFAAqF;AACrF,MAAM,UAAU,kBAAkB,CAAC,KAAuC,EAAE,IAAkB;IAC5F,OAAO,kBAAkB,CAAC,EAAE,GAAG,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,IAAI,CAAC,CAAC;AAChE,CAAC;AAED,0GAA0G;AAC1G,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAAC,OAAuB,EAAE,IAAkB;IACvF,MAAM,qBAAqB,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IACxF,OAAO,mBAAmB,CAAC,OAAO,CAAC,YAAY,CAAC,KAAK,CAAC,EAAa,EAAE,OAAO,CAAC,KAAK,EAAE,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC;AAC9G,CAAC"}
|