@ftptech/x402-canton-client 0.1.4 → 0.1.6
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/fetch.d.ts +19 -0
- package/dist/fetch.d.ts.map +1 -1
- package/dist/fetch.js +51 -0
- package/dist/fetch.js.map +1 -1
- package/dist/scheme.d.ts +2 -1
- package/dist/scheme.d.ts.map +1 -1
- package/dist/scheme.js +167 -3
- package/dist/scheme.js.map +1 -1
- package/dist/signer.d.ts +81 -2
- package/dist/signer.d.ts.map +1 -1
- package/package.json +3 -3
package/dist/fetch.d.ts
CHANGED
|
@@ -63,4 +63,23 @@ export declare function wrapFetchWithCantonPayment(fetch: typeof globalThis.fetc
|
|
|
63
63
|
* x402).
|
|
64
64
|
*/
|
|
65
65
|
export declare function readPaymentResponseHeader<T = unknown>(response: Response): T | null;
|
|
66
|
+
/**
|
|
67
|
+
* Peek which on-ledger `transferMethod` `wrapFetchWithCantonPayment` WOULD choose
|
|
68
|
+
* for a given 402 response + signer, WITHOUT paying. Mirrors the exact selection
|
|
69
|
+
* `fetchWithPayment` runs (decode the PAYMENT-REQUIRED header → keep exact-canton
|
|
70
|
+
* entries the optional networkFilter allows → narrow to the methods THIS signer
|
|
71
|
+
* can produce → `selectRequirements ?? compatible[0]`). Returns the chosen
|
|
72
|
+
* `extra.transferMethod`, or `undefined` when it cannot tell (non-402, missing or
|
|
73
|
+
* malformed header, no compatible entry).
|
|
74
|
+
*
|
|
75
|
+
* The agent-wallet pay layer uses this to decide whether a pay needs the
|
|
76
|
+
* per-wallet serialization mutex: ONLY the v1 nonce path
|
|
77
|
+
* (`external-party-amulet-rules`) does; the no-nonce allocation/cip56 paths can
|
|
78
|
+
* run concurrently. `undefined` ("can't tell") must be treated as "serialize"
|
|
79
|
+
* (fail safe) by the caller, so an unparseable 402 never loses v1's protection.
|
|
80
|
+
*
|
|
81
|
+
* Kept in THIS module beside `fetchWithPayment` so the two selections cannot
|
|
82
|
+
* drift; a test pins that peek agrees with the method actually paid.
|
|
83
|
+
*/
|
|
84
|
+
export declare function peekChosenTransferMethod(response: Response, signer: CantonSigner, options?: WrapFetchOptions): string | undefined;
|
|
66
85
|
//# sourceMappingURL=fetch.d.ts.map
|
package/dist/fetch.d.ts.map
CHANGED
|
@@ -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;
|
|
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;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,wBAAwB,CACtC,QAAQ,EAAE,QAAQ,EAClB,MAAM,EAAE,YAAY,EACpB,OAAO,GAAE,gBAAqB,GAC7B,MAAM,GAAG,SAAS,CAsBpB"}
|
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 {
|
|
@@ -233,4 +237,51 @@ export function readPaymentResponseHeader(response) {
|
|
|
233
237
|
return null;
|
|
234
238
|
return decodeBase64Json(header);
|
|
235
239
|
}
|
|
240
|
+
/**
|
|
241
|
+
* Peek which on-ledger `transferMethod` `wrapFetchWithCantonPayment` WOULD choose
|
|
242
|
+
* for a given 402 response + signer, WITHOUT paying. Mirrors the exact selection
|
|
243
|
+
* `fetchWithPayment` runs (decode the PAYMENT-REQUIRED header → keep exact-canton
|
|
244
|
+
* entries the optional networkFilter allows → narrow to the methods THIS signer
|
|
245
|
+
* can produce → `selectRequirements ?? compatible[0]`). Returns the chosen
|
|
246
|
+
* `extra.transferMethod`, or `undefined` when it cannot tell (non-402, missing or
|
|
247
|
+
* malformed header, no compatible entry).
|
|
248
|
+
*
|
|
249
|
+
* The agent-wallet pay layer uses this to decide whether a pay needs the
|
|
250
|
+
* per-wallet serialization mutex: ONLY the v1 nonce path
|
|
251
|
+
* (`external-party-amulet-rules`) does; the no-nonce allocation/cip56 paths can
|
|
252
|
+
* run concurrently. `undefined` ("can't tell") must be treated as "serialize"
|
|
253
|
+
* (fail safe) by the caller, so an unparseable 402 never loses v1's protection.
|
|
254
|
+
*
|
|
255
|
+
* Kept in THIS module beside `fetchWithPayment` so the two selections cannot
|
|
256
|
+
* drift; a test pins that peek agrees with the method actually paid.
|
|
257
|
+
*/
|
|
258
|
+
export function peekChosenTransferMethod(response, signer, options = {}) {
|
|
259
|
+
if (response.status !== 402)
|
|
260
|
+
return undefined;
|
|
261
|
+
const header = response.headers.get(HEADER_PAYMENT_REQUIRED_V2);
|
|
262
|
+
if (!header)
|
|
263
|
+
return undefined;
|
|
264
|
+
let required;
|
|
265
|
+
try {
|
|
266
|
+
required = decodeBase64Json(header);
|
|
267
|
+
}
|
|
268
|
+
catch {
|
|
269
|
+
return undefined;
|
|
270
|
+
}
|
|
271
|
+
if (!required || !Array.isArray(required.accepts))
|
|
272
|
+
return undefined;
|
|
273
|
+
const candidates = required.accepts.filter((a) => {
|
|
274
|
+
if (a.scheme !== "exact-canton")
|
|
275
|
+
return false;
|
|
276
|
+
if (options.networkFilter && !options.networkFilter(a.network))
|
|
277
|
+
return false;
|
|
278
|
+
return true;
|
|
279
|
+
});
|
|
280
|
+
const methods = signerMethods(signer);
|
|
281
|
+
const compatible = candidates.filter((a) => methods.has(a.extra.transferMethod));
|
|
282
|
+
if (compatible.length === 0)
|
|
283
|
+
return undefined;
|
|
284
|
+
const chosen = options.selectRequirements?.(compatible) ?? compatible[0];
|
|
285
|
+
return chosen?.extra.transferMethod;
|
|
286
|
+
}
|
|
236
287
|
//# sourceMappingURL=fetch.js.map
|
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:
|
|
24
|
+
scheme: ExactScheme;
|
|
24
25
|
network: CantonNetwork;
|
|
25
26
|
resource: X402ResourceInfo;
|
|
26
27
|
accepted: PaymentRequirements;
|
package/dist/scheme.d.ts.map
CHANGED
|
@@ -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;
|
|
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;CAwSlC"}
|
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:
|
|
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:
|
|
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,127 @@ export class ExactCantonScheme {
|
|
|
159
203
|
},
|
|
160
204
|
};
|
|
161
205
|
}
|
|
162
|
-
|
|
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
|
+
// ATTRIBUTION (accept-both, forward-compatible): the ALLOCATE updateId is
|
|
313
|
+
// the create leg of this 2-tx DVP. Emit it as `createUpdateId` so the
|
|
314
|
+
// facilitator records the allocate's traffic burn alongside the settle's
|
|
315
|
+
// (mirrors the v1 arm above). Harmless to a facilitator that ignores it.
|
|
316
|
+
...(signed.updateId !== undefined
|
|
317
|
+
? { createUpdateId: signed.updateId }
|
|
318
|
+
: {}),
|
|
319
|
+
// Exactly one of allocationCid / allocationInstructionCid is set.
|
|
320
|
+
...(signed.allocationCid !== null
|
|
321
|
+
? { allocationCid: signed.allocationCid }
|
|
322
|
+
: { allocationInstructionCid: signed.allocationInstructionCid ?? "" }),
|
|
323
|
+
},
|
|
324
|
+
};
|
|
325
|
+
}
|
|
326
|
+
// Exhaustiveness — all variants handled above.
|
|
163
327
|
const exhaustive = extra;
|
|
164
328
|
throw new Error(`unsupported transferMethod: ${exhaustive.transferMethod}`);
|
|
165
329
|
}
|
package/dist/scheme.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scheme.js","sourceRoot":"","sources":["../src/scheme.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;
|
|
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
|
-
/**
|
|
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
|
-
/**
|
|
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
|
package/dist/signer.d.ts.map
CHANGED
|
@@ -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
|
|
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
|
+
"version": "0.1.6",
|
|
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",
|
|
@@ -37,8 +37,8 @@
|
|
|
37
37
|
"LICENSE"
|
|
38
38
|
],
|
|
39
39
|
"dependencies": {
|
|
40
|
-
"@ftptech/x402-canton-
|
|
41
|
-
"@ftptech/x402-canton-
|
|
40
|
+
"@ftptech/x402-canton-ledger": "^0.1.1",
|
|
41
|
+
"@ftptech/x402-canton-core": "^0.1.1"
|
|
42
42
|
},
|
|
43
43
|
"publishConfig": {
|
|
44
44
|
"access": "public"
|