@ftptech/x402-canton-client 0.1.3 → 0.1.5

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.
@@ -1 +1 @@
1
- {"version":3,"file":"fetch.d.ts","sourceRoot":"","sources":["../src/fetch.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,EAML,KAAK,mBAAmB,EACxB,KAAK,gBAAgB,EACrB,KAAK,aAAa,EACnB,MAAM,2BAA2B,CAAC;AACnC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAWhD,MAAM,WAAW,mBAAmB;IAClC,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,gBAAgB,CAAC;IAC3B,OAAO,EAAE,mBAAmB,EAAE,CAAC;IAC/B,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACtC;AAED,MAAM,WAAW,gBAAgB;IAC/B;mCAC+B;IAC/B,aAAa,CAAC,EAAE,CAAC,OAAO,EAAE,aAAa,KAAK,OAAO,CAAC;IACpD;0BACsB;IACtB,kBAAkB,CAAC,EAAE,CAAC,UAAU,EAAE,mBAAmB,EAAE,KAAK,mBAAmB,CAAC;IAChF;;;;;;;wDAOoD;IACpD,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,kFAAkF;IAClF,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,kDAAkD;IAClD,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,sDAAsD;IACtD,KAAK,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACvC;AAED,qBAAa,gBAAiB,SAAQ,KAAK;aACI,IAAI,EAAE,oBAAoB;gBAA3D,OAAO,EAAE,MAAM,EAAkB,IAAI,EAAE,oBAAoB;CAIxE;AAED,MAAM,MAAM,oBAAoB,GAC5B,iCAAiC,GACjC,4BAA4B,GAC5B,sBAAsB,GACtB,kBAAkB,CAAC;AAEvB,wBAAgB,0BAA0B,CACxC,KAAK,EAAE,OAAO,UAAU,CAAC,KAAK,EAC9B,MAAM,EAAE,YAAY,EACpB,OAAO,GAAE,gBAAqB,GAC7B,OAAO,UAAU,CAAC,KAAK,CA6IzB;AAqBD;;;;;GAKG;AACH,wBAAgB,yBAAyB,CAAC,CAAC,GAAG,OAAO,EACnD,QAAQ,EAAE,QAAQ,GACjB,CAAC,GAAG,IAAI,CAIV"}
1
+ {"version":3,"file":"fetch.d.ts","sourceRoot":"","sources":["../src/fetch.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,EAML,KAAK,mBAAmB,EACxB,KAAK,gBAAgB,EACrB,KAAK,aAAa,EACnB,MAAM,2BAA2B,CAAC;AACnC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAahD,MAAM,WAAW,mBAAmB;IAClC,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,gBAAgB,CAAC;IAC3B,OAAO,EAAE,mBAAmB,EAAE,CAAC;IAC/B,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACtC;AAED,MAAM,WAAW,gBAAgB;IAC/B;mCAC+B;IAC/B,aAAa,CAAC,EAAE,CAAC,OAAO,EAAE,aAAa,KAAK,OAAO,CAAC;IACpD;0BACsB;IACtB,kBAAkB,CAAC,EAAE,CAAC,UAAU,EAAE,mBAAmB,EAAE,KAAK,mBAAmB,CAAC;IAChF;;;;;;;wDAOoD;IACpD,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,kFAAkF;IAClF,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,kDAAkD;IAClD,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,sDAAsD;IACtD,KAAK,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACvC;AAED,qBAAa,gBAAiB,SAAQ,KAAK;aACI,IAAI,EAAE,oBAAoB;gBAA3D,OAAO,EAAE,MAAM,EAAkB,IAAI,EAAE,oBAAoB;CAIxE;AAED,MAAM,MAAM,oBAAoB,GAC5B,iCAAiC,GACjC,4BAA4B,GAC5B,sBAAsB,GACtB,kBAAkB,CAAC;AAEvB,wBAAgB,0BAA0B,CACxC,KAAK,EAAE,OAAO,UAAU,CAAC,KAAK,EAC9B,MAAM,EAAE,YAAY,EACpB,OAAO,GAAE,gBAAqB,GAC7B,OAAO,UAAU,CAAC,KAAK,CA0JzB;AAqDD;;;;;GAKG;AACH,wBAAgB,yBAAyB,CAAC,CAAC,GAAG,OAAO,EACnD,QAAQ,EAAE,QAAQ,GACjB,CAAC,GAAG,IAAI,CAIV"}
package/dist/fetch.js CHANGED
@@ -27,6 +27,10 @@ function signerMethods(signer) {
27
27
  m.add("external-party-amulet-rules");
28
28
  if (signer.signCip56Transfer)
29
29
  m.add("cip56-transfer-factory");
30
+ if (signer.signAllocation)
31
+ m.add("allocation-api");
32
+ if (signer.signAllocationDirect)
33
+ m.add("allocation-direct");
30
34
  return m;
31
35
  }
32
36
  export class X402PaymentError extends Error {
@@ -132,7 +136,22 @@ export function wrapFetchWithCantonPayment(fetch, signer, options = {}) {
132
136
  const STOP_IF_REPEATED = new Set(["unexpected_canton_ledger_error"]);
133
137
  let lastReason;
134
138
  for (let attempt = 0;; attempt++) {
135
- const envelope = await scheme.createPaymentPayload(chosen, required.resource);
139
+ // createPaymentPayload talks to the relay/ledger over the network; a
140
+ // dropped TLS read (ETIMEDOUT/ECONNRESET/undici "fetch failed") is
141
+ // TRANSIENT, not a payment rejection — surfacing it as a hard throw
142
+ // killed the whole pay on a single network blip. Retry it within the
143
+ // same bounded budget (with the same backoff) instead.
144
+ let envelope;
145
+ try {
146
+ envelope = await scheme.createPaymentPayload(chosen, required.resource);
147
+ }
148
+ catch (err) {
149
+ if (attempt >= maxRetries || !isTransientNetworkError(err))
150
+ throw err;
151
+ lastReason = undefined; // a network blip is not a settle reason
152
+ await sleep(Math.min(baseMs * 2 ** attempt, capMs));
153
+ continue;
154
+ }
136
155
  const retryHeaders = new Headers(init?.headers);
137
156
  retryHeaders.set(HEADER_PAYMENT_SIGNATURE_V2, encodeBase64Json(envelope));
138
157
  const resp = await fetch(input, { ...init, headers: retryHeaders });
@@ -154,6 +173,38 @@ export function wrapFetchWithCantonPayment(fetch, signer, options = {}) {
154
173
  }
155
174
  };
156
175
  }
176
+ /**
177
+ * Is this error a transient NETWORK failure (as opposed to a payment
178
+ * rejection)? Walks the `cause` chain looking for the classic socket/undici
179
+ * signatures: node `fetch` throws `TypeError: fetch failed` with the real
180
+ * `ETIMEDOUT`/`ECONNRESET`/… buried in `cause`.
181
+ */
182
+ function isTransientNetworkError(err) {
183
+ const TRANSIENT_CODES = new Set([
184
+ "ETIMEDOUT",
185
+ "ECONNRESET",
186
+ "ECONNREFUSED",
187
+ "EPIPE",
188
+ "EAI_AGAIN",
189
+ "ENETUNREACH",
190
+ "EHOSTUNREACH",
191
+ "UND_ERR_CONNECT_TIMEOUT",
192
+ "UND_ERR_SOCKET",
193
+ "UND_ERR_HEADERS_TIMEOUT",
194
+ "UND_ERR_BODY_TIMEOUT",
195
+ ]);
196
+ let cur = err;
197
+ for (let depth = 0; cur && depth < 5; depth++) {
198
+ const e = cur;
199
+ if (typeof e.code === "string" && TRANSIENT_CODES.has(e.code))
200
+ return true;
201
+ if (typeof e.message === "string" && /fetch failed/i.test(e.message) && !e.cause) {
202
+ return true; // bare undici wrapper with no further detail
203
+ }
204
+ cur = e.cause;
205
+ }
206
+ return false;
207
+ }
157
208
  /**
158
209
  * Best-effort read of the facilitator's failure reason from a 402 the resource
159
210
  * server returned after a settle attempt. The express integration responds
package/dist/fetch.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"fetch.js","sourceRoot":"","sources":["../src/fetch.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"fetch.js","sourceRoot":"","sources":["../src/fetch.ts"],"names":[],"mappings":"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"}
package/dist/scheme.d.ts CHANGED
@@ -17,10 +17,11 @@
17
17
  * // PAYMENT-SIGNATURE: <base64-encoded JSON payload>
18
18
  */
19
19
  import type { PaymentRequirements, X402ResourceInfo, CantonNetwork, CantonPaymentPayload } from "@ftptech/x402-canton-core";
20
+ import type { ExactScheme } from "@ftptech/x402-canton-core";
20
21
  import type { CantonSigner } from "./signer.js";
21
22
  export interface CantonPaymentEnvelope {
22
23
  x402Version: 2;
23
- scheme: "exact-canton";
24
+ scheme: ExactScheme;
24
25
  network: CantonNetwork;
25
26
  resource: X402ResourceInfo;
26
27
  accepted: PaymentRequirements;
@@ -1 +1 @@
1
- {"version":3,"file":"scheme.d.ts","sourceRoot":"","sources":["../src/scheme.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAGH,OAAO,KAAK,EACV,mBAAmB,EACnB,gBAAgB,EAChB,aAAa,EACb,oBAAoB,EACrB,MAAM,2BAA2B,CAAC;AACnC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhD,MAAM,WAAW,qBAAqB;IACpC,WAAW,EAAE,CAAC,CAAC;IACf,MAAM,EAAE,cAAc,CAAC;IACvB,OAAO,EAAE,aAAa,CAAC;IACvB,QAAQ,EAAE,gBAAgB,CAAC;IAC3B,QAAQ,EAAE,mBAAmB,CAAC;IAC9B,OAAO,EAAE,oBAAoB,CAAC;CAC/B;AAED;;;;;;;GAOG;AACH,qBAAa,yBAA0B,SAAQ,KAAK;IAEhD,wCAAwC;aACxB,QAAQ,EAAE,MAAM;IAChC,0CAA0C;aAC1B,SAAS,EAAE,MAAM;;IAHjC,wCAAwC;IACxB,QAAQ,EAAE,MAAM;IAChC,0CAA0C;IAC1B,SAAS,EAAE,MAAM;CAiBpC;AAED,qBAAa,iBAAiB;IAChB,OAAO,CAAC,QAAQ,CAAC,MAAM;gBAAN,MAAM,EAAE,YAAY;IAEjD;;;;;;;OAOG;IACG,oBAAoB,CACxB,YAAY,EAAE,mBAAmB,EACjC,QAAQ,EAAE,gBAAgB,GACzB,OAAO,CAAC,qBAAqB,CAAC;CAqHlC"}
1
+ {"version":3,"file":"scheme.d.ts","sourceRoot":"","sources":["../src/scheme.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAGH,OAAO,KAAK,EACV,mBAAmB,EACnB,gBAAgB,EAChB,aAAa,EACb,oBAAoB,EACrB,MAAM,2BAA2B,CAAC;AACnC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAE7D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhD,MAAM,WAAW,qBAAqB;IACpC,WAAW,EAAE,CAAC,CAAC;IAOf,MAAM,EAAE,WAAW,CAAC;IACpB,OAAO,EAAE,aAAa,CAAC;IACvB,QAAQ,EAAE,gBAAgB,CAAC;IAC3B,QAAQ,EAAE,mBAAmB,CAAC;IAC9B,OAAO,EAAE,oBAAoB,CAAC;CAC/B;AAED;;;;;;;GAOG;AACH,qBAAa,yBAA0B,SAAQ,KAAK;IAEhD,wCAAwC;aACxB,QAAQ,EAAE,MAAM;IAChC,0CAA0C;aAC1B,SAAS,EAAE,MAAM;;IAHjC,wCAAwC;IACxB,QAAQ,EAAE,MAAM;IAChC,0CAA0C;IAC1B,SAAS,EAAE,MAAM;CAiBpC;AAED,qBAAa,iBAAiB;IAChB,OAAO,CAAC,QAAQ,CAAC,MAAM;gBAAN,MAAM,EAAE,YAAY;IAEjD;;;;;;;OAOG;IACG,oBAAoB,CACxB,YAAY,EAAE,mBAAmB,EACjC,QAAQ,EAAE,gBAAgB,GACzB,OAAO,CAAC,qBAAqB,CAAC;CAiSlC"}
package/dist/scheme.js CHANGED
@@ -17,6 +17,7 @@
17
17
  * // PAYMENT-SIGNATURE: <base64-encoded JSON payload>
18
18
  */
19
19
  import { randomUUID } from "node:crypto";
20
+ import { wireAmountToLedgerDecimal } from "@ftptech/x402-canton-core";
20
21
  /**
21
22
  * Thrown when the resource advertises a transferMethod this signer cannot
22
23
  * service — e.g. a CIP-56-only wallet (the relay-backed agent wallet) facing a
@@ -64,6 +65,19 @@ export class ExactCantonScheme {
64
65
  async createPaymentPayload(requirements, resource) {
65
66
  const extra = requirements.extra;
66
67
  const paymentId = randomUUID();
68
+ // UNIT-BY-SCHEME seam: the on-ledger Daml Decimal the signer stamps into the
69
+ // TransferCommand / TransferFactory_Transfer / Allocation MUST be derived
70
+ // from the WIRE amount keyed by the requirements' scheme. Under the legacy
71
+ // scheme "exact-canton" (the only scheme deployed 402s use today) this is a
72
+ // passthrough no-op — the wire amount already IS the Decimal — so the live
73
+ // signed ledger value is byte-identical to before. Under the x402-ENVELOPE
74
+ // scheme "exact" (atomic integer units, post-deploy) it converts EXACTLY via
75
+ // atomicToDecimalCC. Computing it ONCE here keeps all three method arms
76
+ // consistent and is the client-side off-by-10^10 firewall. The emitted
77
+ // envelope scheme below stays "exact-canton" (the emit flip is held
78
+ // facilitator-first), so atomic only activates once an incoming 402 advertises
79
+ // scheme "exact".
80
+ const ledgerAmount = wireAmountToLedgerDecimal(requirements.scheme, requirements.amount);
67
81
  if (extra.transferMethod === "external-party-amulet-rules") {
68
82
  if (!this.signer.signTransferCommand) {
69
83
  // The signer advertised no v1 capability — most commonly the
@@ -73,6 +87,15 @@ export class ExactCantonScheme {
73
87
  ? "cip56-transfer-factory"
74
88
  : "(none)");
75
89
  }
90
+ // x402-ENVELOPE privacy (point 7): the TARGET is to stamp H(resourceUrl)
91
+ // on-ledger instead of the plaintext URL. The client emits PLAINTEXT FOR
92
+ // NOW; flipping to hashResourceUrl(resource.url) is GATED behind the
93
+ // accept-both facilitator being DEPLOYED (the MainNet facilitator still
94
+ // does strict plaintext equality, so emitting a hash before it ships would
95
+ // get v1 payments REJECTED after the on-ledger command is signed = traffic
96
+ // burn). The facilitator already accepts BOTH (resourceUrlMatchesStamp);
97
+ // the client flip is a one-line follow-up once it is live — symmetry with
98
+ // the held scheme/synchronizerId flips below.
76
99
  const description = JSON.stringify({
77
100
  paymentId,
78
101
  resourceUrl: resource.url,
@@ -84,7 +107,7 @@ export class ExactCantonScheme {
84
107
  const signed = await this.signer.signTransferCommand({
85
108
  receiver: requirements.payTo,
86
109
  delegate: extra.facilitatorParty,
87
- amount: requirements.amount,
110
+ amount: ledgerAmount,
88
111
  synchronizerId: extra.synchronizerId,
89
112
  description,
90
113
  expiresAtMs: Date.now() + requirements.maxTimeoutSeconds * 1000,
@@ -101,6 +124,11 @@ export class ExactCantonScheme {
101
124
  payload: {
102
125
  transferMethod: "external-party-amulet-rules",
103
126
  transferCommandCid: signed.transferCommandCid,
127
+ // PAYER FIELD (phdargen naming, accept-both): emit `payer` (primary,
128
+ // aligns with SettleResponse/VerifyResponse) AND legacy `payerParty`
129
+ // so the DEPLOYED v1 MainNet facilitator (reads `payerParty`) keeps
130
+ // working until accept-both is deployed everywhere. See payloadPayer.
131
+ payer: signed.payerParty,
104
132
  payerParty: signed.payerParty,
105
133
  nonce: signed.nonce,
106
134
  ...(signed.createUpdateId !== undefined
@@ -129,9 +157,22 @@ export class ExactCantonScheme {
129
157
  // §Facilitator Visibility for the full requirement.
130
158
  const transferMeta = {
131
159
  "x402.paymentId": paymentId,
160
+ // x402-ENVELOPE privacy (point 7): TARGET is H(resourceUrl). Client emits
161
+ // PLAINTEXT for now; the flip to hashResourceUrl(resource.url) is gated
162
+ // behind the accept-both facilitator being DEPLOYED (deployed MainNet
163
+ // facilitator still requires plaintext equality — emitting a hash early
164
+ // = rejected payments / traffic burn). Facilitator already accepts both.
132
165
  "x402.resourceUrl": resource.url,
133
166
  "x402.version": "2",
167
+ // NOTE: the on-ledger meta key x402.facilitatorParty is the registry's
168
+ // observer-add hook (separate from the 402 `extra` rename to feePayer);
169
+ // it stays as-is so the facilitator remains a stakeholder for the proof.
134
170
  "x402.facilitatorParty": extra.facilitatorParty,
171
+ // Optional reconciliation metadata (e.g. an invoice id), mirroring the
172
+ // optional x402.resourceUrl handling. Stamped only when the merchant set
173
+ // extra.memo, so the key is omitted otherwise (keeps the meta minimal and
174
+ // the "exactly these keys" guarantee when no memo is configured).
175
+ ...(extra.memo ? { "x402.memo": extra.memo } : {}),
135
176
  };
136
177
  const signed = await this.signer.signCip56Transfer({
137
178
  receiver: requirements.payTo,
@@ -139,7 +180,7 @@ export class ExactCantonScheme {
139
180
  transferFactoryTemplateId: extra.transferFactoryTemplateId,
140
181
  factoryAdmin: extra.instrumentId.admin,
141
182
  instrumentId: extra.instrumentId,
142
- amount: requirements.amount,
183
+ amount: ledgerAmount,
143
184
  synchronizerId: extra.synchronizerId,
144
185
  facilitatorParty: extra.facilitatorParty,
145
186
  transferMeta,
@@ -152,6 +193,9 @@ export class ExactCantonScheme {
152
193
  accepted: requirements,
153
194
  payload: {
154
195
  transferMethod: "cip56-transfer-factory",
196
+ // PAYER FIELD (phdargen naming, accept-both): emit both — see the v1
197
+ // arm above and payloadPayer.
198
+ payer: signed.payerParty,
155
199
  payerParty: signed.payerParty,
156
200
  ...(signed.transferInstructionCid !== null
157
201
  ? { transferInstructionCid: signed.transferInstructionCid }
@@ -159,7 +203,120 @@ export class ExactCantonScheme {
159
203
  },
160
204
  };
161
205
  }
162
- // Exhaustiveness cip56-transfer-factory is the only variant.
206
+ if (extra.transferMethod === "allocation-api") {
207
+ if (!this.signer.signAllocation) {
208
+ throw new SchemeMethodMismatchError("allocation-api", this.signer.signCip56Transfer
209
+ ? "cip56-transfer-factory"
210
+ : this.signer.signTransferCommand
211
+ ? "external-party-amulet-rules"
212
+ : "(none)");
213
+ }
214
+ // Stamp x402 metadata onto the on-ledger transferLeg.meta so the
215
+ // facilitator's /verify can bind paymentId / resourceUrl / memo. Mirrors
216
+ // the cip56 transferMeta. x402.facilitatorParty lets the registry add the
217
+ // facilitator as the allocation's settlement.executor / observer.
218
+ const transferMeta = {
219
+ "x402.paymentId": paymentId,
220
+ // x402-ENVELOPE privacy (point 7): TARGET is H(resourceUrl). Client emits
221
+ // PLAINTEXT for now; the flip to hashResourceUrl(resource.url) is gated
222
+ // behind the accept-both facilitator being DEPLOYED (deployed MainNet
223
+ // facilitator still requires plaintext equality — emitting a hash early
224
+ // = rejected payments / traffic burn). Facilitator already accepts both.
225
+ "x402.resourceUrl": resource.url,
226
+ "x402.version": "2",
227
+ "x402.facilitatorParty": extra.facilitatorParty,
228
+ ...(extra.memo ? { "x402.memo": extra.memo } : {}),
229
+ };
230
+ const signed = await this.signer.signAllocation({
231
+ receiver: requirements.payTo,
232
+ amount: ledgerAmount,
233
+ instrumentId: extra.instrumentId,
234
+ executor: extra.executor,
235
+ synchronizerId: extra.synchronizerId,
236
+ allocateBeforeSeconds: extra.allocateBeforeSeconds,
237
+ settleBeforeSeconds: extra.settleBeforeSeconds,
238
+ transferMeta,
239
+ });
240
+ return {
241
+ x402Version: 2,
242
+ scheme: "exact-canton",
243
+ network: requirements.network,
244
+ resource,
245
+ accepted: requirements,
246
+ payload: {
247
+ transferMethod: "allocation-api",
248
+ // PAYER FIELD (phdargen naming, accept-both): emit both — see the v1
249
+ // arm above and payloadPayer.
250
+ payer: signed.payerParty,
251
+ payerParty: signed.payerParty,
252
+ // Exactly one of allocationCid / allocationInstructionCid is set.
253
+ ...(signed.allocationCid !== null
254
+ ? { allocationCid: signed.allocationCid }
255
+ : { allocationInstructionCid: signed.allocationInstructionCid ?? "" }),
256
+ },
257
+ };
258
+ }
259
+ if (extra.transferMethod === "allocation-direct") {
260
+ if (!this.signer.signAllocationDirect) {
261
+ throw new SchemeMethodMismatchError("allocation-direct", this.signer.signCip56Transfer
262
+ ? "cip56-transfer-factory"
263
+ : this.signer.signTransferCommand
264
+ ? "external-party-amulet-rules"
265
+ : this.signer.signAllocation
266
+ ? "allocation-api"
267
+ : "(none)");
268
+ }
269
+ // The on-ledger lock is IDENTICAL to allocation-api (same
270
+ // AllocationFactory_Allocate, receiver = merchant, executor = facilitator);
271
+ // only the facilitator's settle path differs (DirectSettlementConsent_Execute
272
+ // in ONE tx). So build the SAME x402 transferMeta the allocation-api arm
273
+ // stamps onto transferLeg.meta — paymentId / resourceUrl / version /
274
+ // facilitatorParty (+ optional memo).
275
+ const transferMeta = {
276
+ "x402.paymentId": paymentId,
277
+ // x402-ENVELOPE privacy (point 7): TARGET is H(resourceUrl). Client emits
278
+ // PLAINTEXT for now; the flip to hashResourceUrl(resource.url) is gated
279
+ // behind the accept-both facilitator being DEPLOYED (deployed MainNet
280
+ // facilitator still requires plaintext equality — emitting a hash early
281
+ // = rejected payments / traffic burn). Facilitator already accepts both.
282
+ "x402.resourceUrl": resource.url,
283
+ "x402.version": "2",
284
+ "x402.facilitatorParty": extra.facilitatorParty,
285
+ ...(extra.memo ? { "x402.memo": extra.memo } : {}),
286
+ };
287
+ const signed = await this.signer.signAllocationDirect({
288
+ receiver: requirements.payTo,
289
+ amount: ledgerAmount,
290
+ instrumentId: extra.instrumentId,
291
+ executor: extra.executor,
292
+ synchronizerId: extra.synchronizerId,
293
+ allocateBeforeSeconds: extra.allocateBeforeSeconds,
294
+ settleBeforeSeconds: extra.settleBeforeSeconds,
295
+ transferMeta,
296
+ });
297
+ return {
298
+ x402Version: 2,
299
+ scheme: "exact-canton",
300
+ network: requirements.network,
301
+ resource,
302
+ accepted: requirements,
303
+ payload: {
304
+ transferMethod: "allocation-direct",
305
+ // PAYER FIELD (phdargen naming, accept-both): emit both — see the v1
306
+ // arm above and payloadPayer.
307
+ payer: signed.payerParty,
308
+ payerParty: signed.payerParty,
309
+ // The standing both-party consent cid — the facilitator's O(1) /settle
310
+ // fast-path (it RESOLVES/MINTS its own otherwise; the cid moves no funds).
311
+ directConsentCid: signed.directConsentCid,
312
+ // Exactly one of allocationCid / allocationInstructionCid is set.
313
+ ...(signed.allocationCid !== null
314
+ ? { allocationCid: signed.allocationCid }
315
+ : { allocationInstructionCid: signed.allocationInstructionCid ?? "" }),
316
+ },
317
+ };
318
+ }
319
+ // Exhaustiveness — all variants handled above.
163
320
  const exhaustive = extra;
164
321
  throw new Error(`unsupported transferMethod: ${exhaustive.transferMethod}`);
165
322
  }
@@ -1 +1 @@
1
- {"version":3,"file":"scheme.js","sourceRoot":"","sources":["../src/scheme.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"scheme.js","sourceRoot":"","sources":["../src/scheme.ts"],"names":[],"mappings":"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"}
package/dist/signer.d.ts CHANGED
@@ -17,7 +17,11 @@ export interface SignTransferCommandInput {
17
17
  receiver: string;
18
18
  /** Facilitator party id. Same as extra.facilitatorParty. */
19
19
  delegate: string;
20
- /** Atomic units of the asset (e.g. canton-coin). JSON string. */
20
+ /** Daml Decimal amount string (e.g. "0.0100000000"), passed VERBATIM into the
21
+ * on-ledger TransferCommand `amount : Decimal`. (Despite the x402-ENVELOPE
22
+ * convention of atomic units on the wire, the deployed v1 path signs this
23
+ * Decimal directly — there is no atomic→Decimal conversion on this path. An
24
+ * earlier "Atomic units" note here was stale; see core `amount.ts`.) */
21
25
  amount: string;
22
26
  /** Global Synchronizer id. Same as extra.synchronizerId. */
23
27
  synchronizerId: string;
@@ -65,7 +69,8 @@ export interface SignCip56TransferInput {
65
69
  admin: string;
66
70
  id: string;
67
71
  };
68
- /** Atomic units of the instrument. JSON string for precision. */
72
+ /** Daml Decimal string (matches the JSON Ledger API v2 / Token Standard
73
+ * wire form), e.g. "0.1000000000". Compared by string equality. */
69
74
  amount: string;
70
75
  /** Global Synchronizer id. */
71
76
  synchronizerId: string;
@@ -107,6 +112,59 @@ export interface SignedCip56Transfer {
107
112
  * Completed results. */
108
113
  transferInstructionCid: string | null;
109
114
  }
115
+ /** Input for the allocation-api (CIP-56 DVP) path: LOCK funds via
116
+ * AllocationFactory_Allocate naming the facilitator as settlement.executor. */
117
+ export interface SignAllocationInput {
118
+ /** Merchant party id. Same as PaymentRequirements.payTo. */
119
+ receiver: string;
120
+ /** Daml Decimal amount string, e.g. "0.1000000000". */
121
+ amount: string;
122
+ /** `{admin, id}` of the instrument the merchant advertised. */
123
+ instrumentId: {
124
+ admin: string;
125
+ id: string;
126
+ };
127
+ /** The facilitator party to name as settlement.executor (extra.executor =
128
+ * extra.facilitatorParty). */
129
+ executor: string;
130
+ /** Global Synchronizer id. */
131
+ synchronizerId: string;
132
+ /** Relative deadlines (seconds from now) for allocateBefore / settleBefore.
133
+ * settleBeforeSeconds MUST be strictly greater than allocateBeforeSeconds. */
134
+ allocateBeforeSeconds: number;
135
+ settleBeforeSeconds: number;
136
+ /** x402 metadata stamped into transferLeg.meta (paymentId, resourceUrl,
137
+ * version, memo?). */
138
+ transferMeta?: Record<string, string>;
139
+ }
140
+ export interface SignedAllocation {
141
+ payerParty: string;
142
+ /** ContractId of the live Allocation (the _Completed case — Amulet creates it
143
+ * synchronously). Null when the registry returned a pending instruction. */
144
+ allocationCid: string | null;
145
+ /** ContractId of a still-pending AllocationInstruction (the _Pending case).
146
+ * Null for Completed. */
147
+ allocationInstructionCid: string | null;
148
+ /** Canton ledger updateId of the AllocationFactory_Allocate exercise. */
149
+ updateId: string;
150
+ }
151
+ /** Input for the allocation-direct (CIP-56 DVP "2-tx DIRECT", Design B) path. The
152
+ * on-ledger lock is IDENTICAL to allocation-api — `AllocationFactory_Allocate`
153
+ * with transferLeg.receiver = the MERCHANT (payTo) and settlement.executor = the
154
+ * facilitator — so the `extra` shape (and hence this input) is identical to
155
+ * `SignAllocationInput`. The only difference is downstream: the facilitator
156
+ * settles in ONE tx via DirectSettlementConsent_Execute (a standing both-party
157
+ * consent) instead of a bare Allocation_ExecuteTransfer. (A type alias rather
158
+ * than an empty `extends` interface — same fields, lint-clean.) */
159
+ export type SignAllocationDirectInput = SignAllocationInput;
160
+ export interface SignedAllocationDirect extends SignedAllocation {
161
+ /** The standing both-party DirectSettlementConsent {sender, merchant} cid the
162
+ * facilitator can exercise DirectSettlementConsent_Execute on. Captured from
163
+ * the consent the signer ensured before locking; emitted into the payload as
164
+ * the O(1) /settle fast-path (the cid moves no funds on its own — the consent's
165
+ * on-ledger choice re-validates every term). */
166
+ directConsentCid: string;
167
+ }
110
168
  export interface CantonSigner {
111
169
  /** Party this signer signs as. Same value the facilitator sees
112
170
  * in `payload.payerParty`. */
@@ -128,5 +186,26 @@ export interface CantonSigner {
128
186
  * that only support TransferCommand may omit this method.
129
187
  */
130
188
  signCip56Transfer?(input: SignCip56TransferInput): Promise<SignedCip56Transfer>;
189
+ /**
190
+ * Exercise AllocationFactory_Allocate on the agent's participant for the
191
+ * allocation-api (CIP-56 DVP) path — LOCK funds into an Allocation naming the
192
+ * facilitator as settlement.executor. The facilitator later submits
193
+ * Allocation_ExecuteTransfer to settle (sponsored gas). Optional: signers that
194
+ * only support other methods may omit this.
195
+ */
196
+ signAllocation?(input: SignAllocationInput): Promise<SignedAllocation>;
197
+ /**
198
+ * Exercise AllocationFactory_Allocate on the agent's participant for the
199
+ * allocation-direct (CIP-56 DVP "2-tx DIRECT", Design B) path — LOCK funds into
200
+ * an Allocation with transferLeg.receiver = the MERCHANT (payTo) and
201
+ * settlement.executor = the facilitator, EXACTLY like `signAllocation`. The
202
+ * difference is the standing both-party DirectSettlementConsent the signer must
203
+ * ensure first (facilitator-alone onboarding): the facilitator then settles in
204
+ * ONE tx via DirectSettlementConsent_Execute (no escrow, no forward, no
205
+ * facilitator custody) instead of a bare Allocation_ExecuteTransfer. Returns the
206
+ * same allocation proof plus the consent cid for the /settle fast-path. Optional:
207
+ * signers that only support other methods may omit this.
208
+ */
209
+ signAllocationDirect?(input: SignAllocationDirectInput): Promise<SignedAllocationDirect>;
131
210
  }
132
211
  //# sourceMappingURL=signer.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"signer.d.ts","sourceRoot":"","sources":["../src/signer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAE/D,MAAM,WAAW,wBAAwB;IACvC,4DAA4D;IAC5D,QAAQ,EAAE,MAAM,CAAC;IACjB,4DAA4D;IAC5D,QAAQ,EAAE,MAAM,CAAC;IACjB,iEAAiE;IACjE,MAAM,EAAE,MAAM,CAAC;IACf,4DAA4D;IAC5D,cAAc,EAAE,MAAM,CAAC;IACvB,gFAAgF;IAChF,WAAW,EAAE,MAAM,CAAC;IACpB;0DACsD;IACtD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;oFAGgF;IAChF,OAAO,CAAC,EAAE,aAAa,CAAC;CACzB;AAED,MAAM,WAAW,qBAAqB;IACpC,gEAAgE;IAChE,kBAAkB,EAAE,MAAM,CAAC;IAC3B,6DAA6D;IAC7D,UAAU,EAAE,MAAM,CAAC;IACnB,wDAAwD;IACxD,KAAK,EAAE,MAAM,CAAC;IACd;;yEAEqE;IACrE,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,sBAAsB;IACrC,4DAA4D;IAC5D,QAAQ,EAAE,MAAM,CAAC;IACjB;sCACkC;IAClC,kBAAkB,EAAE,MAAM,CAAC;IAC3B;;8BAE0B;IAC1B,yBAAyB,EAAE,MAAM,CAAC;IAClC;;;uDAGmD;IACnD,YAAY,EAAE,MAAM,CAAC;IACrB;gCAC4B;IAC5B,YAAY,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC;IAC5C,iEAAiE;IACjE,MAAM,EAAE,MAAM,CAAC;IACf,8BAA8B;IAC9B,cAAc,EAAE,MAAM,CAAC;IACvB;wBACoB;IACpB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB;;;;oEAIgE;IAChE,SAAS,CAAC,EAAE;QACV,OAAO,EAAE;YAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;SAAE,CAAC;QAC5C,IAAI,EAAE;YAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;SAAE,CAAC;KAC1C,CAAC;IACF;;;;2DAIuD;IACvD,gBAAgB,EAAE,MAAM,CAAC;IACzB;;mEAE+D;IAC/D,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACvC;AAED,MAAM,WAAW,mBAAmB;IAClC,UAAU,EAAE,MAAM,CAAC;IACnB;;sDAEkD;IAClD,QAAQ,EAAE,MAAM,CAAC;IACjB;;6BAEyB;IACzB,sBAAsB,EAAE,MAAM,GAAG,IAAI,CAAC;CACvC;AAED,MAAM,WAAW,YAAY;IAC3B;mCAC+B;IAC/B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IAEvB;;;;;;OAMG;IACH,mBAAmB,CAAC,CAClB,KAAK,EAAE,wBAAwB,GAC9B,OAAO,CAAC,qBAAqB,CAAC,CAAC;IAElC;;;;;;;OAOG;IACH,iBAAiB,CAAC,CAChB,KAAK,EAAE,sBAAsB,GAC5B,OAAO,CAAC,mBAAmB,CAAC,CAAC;CACjC"}
1
+ {"version":3,"file":"signer.d.ts","sourceRoot":"","sources":["../src/signer.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ftptech/x402-canton-client",
3
- "version": "0.1.3",
3
+ "version": "0.1.5",
4
4
  "description": "Canton x402 client SDK — payer side. ExactCantonScheme + signer abstractions for autonomous agents.",
5
5
  "license": "Apache-2.0",
6
6
  "author": "FTP team",