@agenticprimitives/payments 0.0.0-alpha.42 → 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.
Files changed (67) hide show
  1. package/dist/entitlement/index.d.ts.map +1 -1
  2. package/dist/entitlement/index.js +10 -4
  3. package/dist/entitlement/index.js.map +1 -1
  4. package/dist/entitlement/voucher.d.ts +14 -1
  5. package/dist/entitlement/voucher.d.ts.map +1 -1
  6. package/dist/entitlement/voucher.js +20 -1
  7. package/dist/entitlement/voucher.js.map +1 -1
  8. package/dist/index.d.ts +7 -1
  9. package/dist/index.d.ts.map +1 -1
  10. package/dist/index.js +2 -0
  11. package/dist/index.js.map +1 -1
  12. package/dist/mandate-sign.d.ts +42 -3
  13. package/dist/mandate-sign.d.ts.map +1 -1
  14. package/dist/mandate-sign.js +33 -2
  15. package/dist/mandate-sign.js.map +1 -1
  16. package/dist/mandate.d.ts +10 -2
  17. package/dist/mandate.d.ts.map +1 -1
  18. package/dist/mandate.js +9 -2
  19. package/dist/mandate.js.map +1 -1
  20. package/dist/ops.d.ts +45 -4
  21. package/dist/ops.d.ts.map +1 -1
  22. package/dist/ops.js +59 -10
  23. package/dist/ops.js.map +1 -1
  24. package/dist/rails/escrow.d.ts +11 -3
  25. package/dist/rails/escrow.d.ts.map +1 -1
  26. package/dist/rails/escrow.js +11 -2
  27. package/dist/rails/escrow.js.map +1 -1
  28. package/dist/rails/invoice.d.ts +6 -4
  29. package/dist/rails/invoice.d.ts.map +1 -1
  30. package/dist/rails/invoice.js +6 -5
  31. package/dist/rails/invoice.js.map +1 -1
  32. package/dist/rails/recurring.d.ts +7 -3
  33. package/dist/rails/recurring.d.ts.map +1 -1
  34. package/dist/rails/recurring.js +8 -5
  35. package/dist/rails/recurring.js.map +1 -1
  36. package/dist/rails/wallet.d.ts +8 -6
  37. package/dist/rails/wallet.d.ts.map +1 -1
  38. package/dist/rails/wallet.js +12 -9
  39. package/dist/rails/wallet.js.map +1 -1
  40. package/dist/rails/x402/executor.d.ts +124 -9
  41. package/dist/rails/x402/executor.d.ts.map +1 -1
  42. package/dist/rails/x402/executor.js +107 -13
  43. package/dist/rails/x402/executor.js.map +1 -1
  44. package/dist/rails/x402/index.d.ts +2 -2
  45. package/dist/rails/x402/index.d.ts.map +1 -1
  46. package/dist/rails/x402/index.js +1 -1
  47. package/dist/rails/x402/index.js.map +1 -1
  48. package/dist/rails/x402/wire.d.ts.map +1 -1
  49. package/dist/rails/x402/wire.js +18 -1
  50. package/dist/rails/x402/wire.js.map +1 -1
  51. package/dist/refund.d.ts +9 -2
  52. package/dist/refund.d.ts.map +1 -1
  53. package/dist/refund.js +10 -3
  54. package/dist/refund.js.map +1 -1
  55. package/dist/split.d.ts +7 -2
  56. package/dist/split.d.ts.map +1 -1
  57. package/dist/split.js +8 -3
  58. package/dist/split.js.map +1 -1
  59. package/dist/transfer.d.ts +24 -5
  60. package/dist/transfer.d.ts.map +1 -1
  61. package/dist/transfer.js +21 -5
  62. package/dist/transfer.js.map +1 -1
  63. package/dist/treasury.d.ts +50 -0
  64. package/dist/treasury.d.ts.map +1 -0
  65. package/dist/treasury.js +68 -0
  66. package/dist/treasury.js.map +1 -0
  67. 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
- /** Net balance change for `account` across the receipt set (incoming as payee − outgoing as payer). */
37
- export function balanceDelta(receipts, account) {
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
- /** Payment detection: is `orderHash` paid (optionally to ≥ `expectedAmount`)? From receipts, not logs. */
48
- export function isOrderPaid(receipts, orderHash, expectedAmount) {
49
- const charges = receipts.filter((r) => eq(r.orderHash, orderHash) && !r.refunds);
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
- if (expectedAmount === undefined)
53
- return true;
54
- const total = charges.reduce((s, r) => s + r.amount, 0n);
55
- return total >= expectedAmount;
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":"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"}
1
+ {"version":3,"file":"ops.js","sourceRoot":"","sources":["../src/ops.ts"],"names":[],"mappings":"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"}
@@ -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 SA must `approve` the escrow for `asset` first). */
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;;;;;;;;GAQG;AAEH,OAAO,EAAsB,KAAK,OAAO,EAAE,MAAM,MAAM,CAAC;AACxD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACnD,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,KAAK,EAAE,OAAO,CAAC;IACf,0FAA0F;IAC1F,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,yEAAyE;IACzE,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;CAChB;AAID,mFAAmF;AACnF,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,kBAAkB,GAAG,YAAY,CAU1E;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"}
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"}
@@ -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 SA must `approve` the escrow for `asset` first). */
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,
@@ -1 +1 @@
1
- {"version":3,"file":"escrow.js","sourceRoot":"","sources":["../../src/rails/escrow.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"escrow.js","sourceRoot":"","sources":["../../src/rails/escrow.ts"],"names":[],"mappings":"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"}
@@ -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
- /** treasury that receives payment — MAY differ from the issuer */
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,kEAAkE;IAClE,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;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,OAAO,EAAE,cAAc,CAAC;IAAC,IAAI,EAAE,YAAY,CAAA;CAAE,CAiBzJ"}
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"}
@@ -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":"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"}
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
- export declare function buildRecurringTemplate(input: RecurringInput): RecurringTemplate;
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,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,cAAc,GAAG,iBAAiB,CAW/E;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,wBAAgB,qBAAqB,CAAC,CAAC,EAAE,iBAAiB,EAAE,MAAM,EAAE,MAAM,GAAG;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,CAiBnK"}
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"}
@@ -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
- export function buildRecurringTemplate(input) {
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":"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"}
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;AAEtD,OAAO,EAAE,qBAAqB,EAAqB,MAAM,gBAAgB,CAAC;AA0B1E,8FAA8F;AAC9F,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAAC,KAAqB,EAAE,IAAkB;IACpF,IAAI,KAAK,CAAC,eAAe,IAAI,EAAE;QAAE,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;IAC5F,IAAI,KAAK,CAAC,QAAQ,GAAG,KAAK,CAAC,eAAe;QAAE,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAC;IAC/G,IAAI,KAAK,CAAC,aAAa,IAAI,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;IACvF,MAAM,qBAAqB,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IACpF,MAAM,UAAU,GAAG,SAAS,CAC1B,mBAAmB,CACjB,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,EACzG,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,eAAe,EAAE,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,EAAE,KAAK,CAAC,UAAU,CAAC,CACjG,CACO,CAAC;IACX,OAAO,EAAE,GAAG,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,QAAQ,GAAG,KAAK,CAAC,eAAe,CAAC,EAAE,CAAC;AAC3F,CAAC;AAUD,0GAA0G;AAC1G,MAAM,UAAU,qBAAqB,CAAC,CAAoB;IACxD,OAAO;QACL,kBAAkB,EAAE,CAAC,CAAC,eAAe;QACrC,YAAY,EAAE,CAAC,CAAC,QAAQ;QACxB,uBAAuB,EAAE,CAAC,EAAE,wBAAwB;QACpD,aAAa,EAAE,CAAC,CAAC,aAAa;QAC9B,UAAU,EAAE,CAAC,CAAC,UAAU;KACzB,CAAC;AACJ,CAAC;AAED,kGAAkG;AAClG,MAAM,UAAU,YAAY,CAAC,CAAoB,EAAE,MAAc;IAC/D,MAAM,KAAK,GAAG,CAAC,CAAC,SAAS,GAAG,MAAM,GAAG,CAAC,CAAC,aAAa,CAAC;IACrD,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,GAAG,CAAC,CAAC,aAAa,EAAE,CAAC;AACjD,CAAC;AAED,wGAAwG;AACxG,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,CAAoB,EACpB,MAAc,EACd,IAAkB;IAElB,IAAI,MAAM,GAAG,CAAC,IAAI,MAAM,IAAI,CAAC,CAAC,OAAO;QAAE,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC;IAC5G,MAAM,MAAM,GAAG,YAAY,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;IACvC,MAAM,OAAO,GAAG,MAAM,kBAAkB,CAAC;QACvC,IAAI,EAAE,QAAQ;QACd,KAAK,EAAE,CAAC,CAAC,KAAK;QACd,KAAK,EAAE,CAAC,CAAC,KAAK;QACd,KAAK,EAAE,CAAC,CAAC,KAAK;QACd,MAAM,EAAE,CAAC,CAAC,eAAe;QACzB,KAAK,EAAE,CAAC,CAAC,KAAK;QACd,KAAK,EAAE,CAAC,CAAC,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC;QACpC,SAAS,EAAE,MAAM,CAAC,KAAK;QACvB,SAAS,EAAE,MAAM,CAAC,GAAG;QACrB,SAAS,EAAE,CAAC,CAAC,UAAU;QACvB,KAAK,EAAG,CAAC,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,EAAE,EAAE,GAAG,CAAC,CAAW;KACjE,EAAE,IAAI,CAAC,CAAC;IACT,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,uBAAuB,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;AACjF,CAAC"}
@@ -1,16 +1,18 @@
1
1
  /**
2
- * Wallet rail (spec 243 §5.3/§5.5) — direct SA→SA transfer of a CLOSED mandate.
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 SA executes a
5
- * single ERC-20 transfer to the payee. Nullifier + receipt are identical to x402 (EXC-D3
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'>): PaymentMandate;
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;;;;;;GAMG;AAIH,OAAO,EAAsB,KAAK,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAC5E,OAAO,EAAsB,KAAK,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACvE,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,GAAG,cAAc,CAE1F;AAED,wFAAwF;AACxF,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,cAAc,GAAG,YAAY,CAE7E"}
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"}
@@ -1,20 +1,23 @@
1
1
  /**
2
- * Wallet rail (spec 243 §5.3/§5.5) — direct SA→SA transfer of a CLOSED mandate.
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 SA executes a
5
- * single ERC-20 transfer to the payee. Nullifier + receipt are identical to x402 (EXC-D3
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 { buildErc20Transfer } from '../transfer.js';
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
- return buildErc20Transfer(mandate.amountPolicy.asset.id, mandate.payee, mandateAmount(mandate));
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
@@ -1 +1 @@
1
- {"version":3,"file":"wallet.js","sourceRoot":"","sources":["../../src/rails/wallet.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,kBAAkB,EAA2B,MAAM,eAAe,CAAC;AAC5E,OAAO,EAAE,kBAAkB,EAAqB,MAAM,gBAAgB,CAAC;AAGvE,MAAM,CAAC,MAAM,WAAW,GAAG,QAAiB,CAAC;AAE7C,qFAAqF;AACrF,MAAM,UAAU,kBAAkB,CAAC,KAAuC;IACxE,OAAO,kBAAkB,CAAC,EAAE,GAAG,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;AAC1D,CAAC;AAED,wFAAwF;AACxF,MAAM,UAAU,uBAAuB,CAAC,OAAuB;IAC7D,OAAO,kBAAkB,CAAC,OAAO,CAAC,YAAY,CAAC,KAAK,CAAC,EAAa,EAAE,OAAO,CAAC,KAAK,EAAE,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC;AAC7G,CAAC"}
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"}