@xfuel/verify 0.1.0 → 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +22 -4
- package/dist/base-payer.d.ts +58 -0
- package/dist/base-payer.d.ts.map +1 -0
- package/dist/base-payer.js +178 -0
- package/dist/base-payer.js.map +1 -0
- package/dist/cli.js +38 -3
- package/dist/cli.js.map +1 -1
- package/dist/index.d.ts +47 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +141 -15
- package/dist/index.js.map +1 -1
- package/dist/jws.d.ts +23 -0
- package/dist/jws.d.ts.map +1 -0
- package/dist/jws.js +59 -0
- package/dist/jws.js.map +1 -0
- package/dist/payer.d.ts +54 -0
- package/dist/payer.d.ts.map +1 -0
- package/dist/payer.js +136 -0
- package/dist/payer.js.map +1 -0
- package/dist/solana-payer.d.ts +99 -0
- package/dist/solana-payer.d.ts.map +1 -0
- package/dist/solana-payer.js +258 -0
- package/dist/solana-payer.js.map +1 -0
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -12,23 +12,46 @@
|
|
|
12
12
|
* See docs/specs/RECEIPT_V2_SEMANTICS.md for the verification algorithm.
|
|
13
13
|
*/
|
|
14
14
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
-
exports.canonicalSignedPayload = exports.BASE_SEPOLIA_RPC_URL = exports.BASE_RPC_URL = exports.
|
|
15
|
+
exports.verifyIssuerJws = exports.resolvePinnedIssuerJwk = exports.canonicalSignedPayload = exports.BASE_SEPOLIA_RPC_URL = exports.ZK_VERIFIER_ADDRESS = exports.decodeJwsPayload = exports.receiptPayerClaimsFromEnvelope = exports.verifyPayerBinding = exports.SOLANA_USDC_MINT_DEVNET = exports.SOLANA_USDC_MINT_MAINNET = exports.SOLANA_RPC_URL = exports.fetchSolanaTransaction = exports.inferUsdcOutflowFromBalances = exports.extractUsdcTransfersFromTx = exports.isSolanaBase58Pubkey = exports.parseSolanaPaymentRef = exports.verifySolanaPayer = exports.BASE_RPC_URL = exports.ERC20_TRANSFER_TOPIC = exports.USDC_ADDRESSES = exports.fetchBaseTransactionReceipt = exports.sumUsdcTransfersFromPayer = exports.isEvmAddress = exports.parseBasePaymentRef = exports.verifyBasePayer = exports.computeInferenceBinding = exports.computePaymentCommitment = void 0;
|
|
16
16
|
exports.canonicalIssuerPayload = canonicalIssuerPayload;
|
|
17
17
|
exports.verifyIssuerSignature = verifyIssuerSignature;
|
|
18
18
|
exports.verifyIssuerSignatureWithJwks = verifyIssuerSignatureWithJwks;
|
|
19
19
|
exports.verifyBinding = verifyBinding;
|
|
20
20
|
exports.verifyNullifier = verifyNullifier;
|
|
21
21
|
exports.hashCanonicalPayload = hashCanonicalPayload;
|
|
22
|
+
exports.receiptPayerClaims = receiptPayerClaims;
|
|
22
23
|
exports.verifyReceipt = verifyReceipt;
|
|
23
24
|
const ethers_1 = require("ethers");
|
|
24
25
|
const node_crypto_1 = require("node:crypto");
|
|
25
26
|
const binding_js_1 = require("./binding.js");
|
|
26
27
|
Object.defineProperty(exports, "computePaymentCommitment", { enumerable: true, get: function () { return binding_js_1.computePaymentCommitment; } });
|
|
27
28
|
Object.defineProperty(exports, "computeInferenceBinding", { enumerable: true, get: function () { return binding_js_1.computeInferenceBinding; } });
|
|
29
|
+
const base_payer_js_1 = require("./base-payer.js");
|
|
30
|
+
Object.defineProperty(exports, "verifyBasePayer", { enumerable: true, get: function () { return base_payer_js_1.verifyBasePayer; } });
|
|
31
|
+
Object.defineProperty(exports, "parseBasePaymentRef", { enumerable: true, get: function () { return base_payer_js_1.parseBasePaymentRef; } });
|
|
32
|
+
Object.defineProperty(exports, "isEvmAddress", { enumerable: true, get: function () { return base_payer_js_1.isEvmAddress; } });
|
|
33
|
+
Object.defineProperty(exports, "sumUsdcTransfersFromPayer", { enumerable: true, get: function () { return base_payer_js_1.sumUsdcTransfersFromPayer; } });
|
|
34
|
+
Object.defineProperty(exports, "fetchBaseTransactionReceipt", { enumerable: true, get: function () { return base_payer_js_1.fetchBaseTransactionReceipt; } });
|
|
35
|
+
Object.defineProperty(exports, "USDC_ADDRESSES", { enumerable: true, get: function () { return base_payer_js_1.USDC_ADDRESSES; } });
|
|
36
|
+
Object.defineProperty(exports, "ERC20_TRANSFER_TOPIC", { enumerable: true, get: function () { return base_payer_js_1.ERC20_TRANSFER_TOPIC; } });
|
|
37
|
+
Object.defineProperty(exports, "BASE_RPC_URL", { enumerable: true, get: function () { return base_payer_js_1.BASE_RPC_URL; } });
|
|
38
|
+
const solana_payer_js_1 = require("./solana-payer.js");
|
|
39
|
+
Object.defineProperty(exports, "verifySolanaPayer", { enumerable: true, get: function () { return solana_payer_js_1.verifySolanaPayer; } });
|
|
40
|
+
Object.defineProperty(exports, "parseSolanaPaymentRef", { enumerable: true, get: function () { return solana_payer_js_1.parseSolanaPaymentRef; } });
|
|
41
|
+
Object.defineProperty(exports, "isSolanaBase58Pubkey", { enumerable: true, get: function () { return solana_payer_js_1.isSolanaBase58Pubkey; } });
|
|
42
|
+
Object.defineProperty(exports, "extractUsdcTransfersFromTx", { enumerable: true, get: function () { return solana_payer_js_1.extractUsdcTransfersFromTx; } });
|
|
43
|
+
Object.defineProperty(exports, "inferUsdcOutflowFromBalances", { enumerable: true, get: function () { return solana_payer_js_1.inferUsdcOutflowFromBalances; } });
|
|
44
|
+
Object.defineProperty(exports, "fetchSolanaTransaction", { enumerable: true, get: function () { return solana_payer_js_1.fetchSolanaTransaction; } });
|
|
45
|
+
Object.defineProperty(exports, "SOLANA_RPC_URL", { enumerable: true, get: function () { return solana_payer_js_1.SOLANA_RPC_URL; } });
|
|
46
|
+
Object.defineProperty(exports, "SOLANA_USDC_MINT_MAINNET", { enumerable: true, get: function () { return solana_payer_js_1.SOLANA_USDC_MINT_MAINNET; } });
|
|
47
|
+
Object.defineProperty(exports, "SOLANA_USDC_MINT_DEVNET", { enumerable: true, get: function () { return solana_payer_js_1.SOLANA_USDC_MINT_DEVNET; } });
|
|
48
|
+
const payer_js_1 = require("./payer.js");
|
|
49
|
+
Object.defineProperty(exports, "verifyPayerBinding", { enumerable: true, get: function () { return payer_js_1.verifyPayerBinding; } });
|
|
50
|
+
Object.defineProperty(exports, "receiptPayerClaimsFromEnvelope", { enumerable: true, get: function () { return payer_js_1.receiptPayerClaimsFromEnvelope; } });
|
|
51
|
+
Object.defineProperty(exports, "decodeJwsPayload", { enumerable: true, get: function () { return payer_js_1.decodeJwsPayload; } });
|
|
52
|
+
const jws_js_1 = require("./jws.js");
|
|
28
53
|
/** ZKVerifierSP1 contract on Base mainnet. */
|
|
29
54
|
exports.ZK_VERIFIER_ADDRESS = '0x9373499645292715a2275A78eD65B14215C41c06';
|
|
30
|
-
/** Default Base mainnet RPC. */
|
|
31
|
-
exports.BASE_RPC_URL = 'https://mainnet.base.org';
|
|
32
55
|
/** Base Sepolia testnet RPC. */
|
|
33
56
|
exports.BASE_SEPOLIA_RPC_URL = 'https://sepolia.base.org';
|
|
34
57
|
/** Minimal ABI for nullifier check. */
|
|
@@ -125,7 +148,38 @@ function verifyIssuerSignature(receipt, jwk) {
|
|
|
125
148
|
*/
|
|
126
149
|
function verifyIssuerSignatureWithJwks(receipt, jwks) {
|
|
127
150
|
const sig = receipt.issuer_signature;
|
|
128
|
-
if (!sig
|
|
151
|
+
if (!sig) {
|
|
152
|
+
return { checked: false, valid: false, reason: 'no_issuer_signature' };
|
|
153
|
+
}
|
|
154
|
+
const pinned = (0, jws_js_1.resolvePinnedIssuerJwk)(receipt);
|
|
155
|
+
if (pinned && sig.jws) {
|
|
156
|
+
const jwsResult = (0, jws_js_1.verifyIssuerJws)(sig.jws, pinned);
|
|
157
|
+
return {
|
|
158
|
+
checked: true,
|
|
159
|
+
valid: jwsResult.valid,
|
|
160
|
+
kid: pinned.kid || sig.kid,
|
|
161
|
+
reason: jwsResult.reason,
|
|
162
|
+
};
|
|
163
|
+
}
|
|
164
|
+
if (sig.jws) {
|
|
165
|
+
if (!jwks || !Array.isArray(jwks.keys) || jwks.keys.length === 0) {
|
|
166
|
+
return { checked: false, valid: false, reason: 'empty_jwks' };
|
|
167
|
+
}
|
|
168
|
+
const candidates = sig.kid
|
|
169
|
+
? jwks.keys.filter(k => k.kid === sig.kid && k.alg === 'ES256')
|
|
170
|
+
: jwks.keys.filter(k => k.alg === 'ES256');
|
|
171
|
+
if (candidates.length === 0) {
|
|
172
|
+
return { checked: false, valid: false, reason: 'no_matching_key' };
|
|
173
|
+
}
|
|
174
|
+
for (const jwk of candidates) {
|
|
175
|
+
const jwsResult = (0, jws_js_1.verifyIssuerJws)(sig.jws, jwk);
|
|
176
|
+
if (jwsResult.valid) {
|
|
177
|
+
return { checked: true, valid: true, kid: jwk.kid || sig.kid };
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
return { checked: true, valid: false, reason: 'signature_invalid' };
|
|
181
|
+
}
|
|
182
|
+
if (!sig.value) {
|
|
129
183
|
return { checked: false, valid: false, reason: 'no_issuer_signature' };
|
|
130
184
|
}
|
|
131
185
|
if (!jwks || !Array.isArray(jwks.keys) || jwks.keys.length === 0) {
|
|
@@ -241,7 +295,7 @@ async function verifyNullifier(receipt, options = {}) {
|
|
|
241
295
|
reason: 'Invalid nullifier format',
|
|
242
296
|
};
|
|
243
297
|
}
|
|
244
|
-
const rpcUrl = options.rpcUrl ||
|
|
298
|
+
const rpcUrl = options.rpcUrl || base_payer_js_1.BASE_RPC_URL;
|
|
245
299
|
const verifierAddress = options.verifierAddress || exports.ZK_VERIFIER_ADDRESS;
|
|
246
300
|
try {
|
|
247
301
|
const provider = new ethers_1.JsonRpcProvider(rpcUrl);
|
|
@@ -282,6 +336,10 @@ function hashCanonicalPayload(receipt) {
|
|
|
282
336
|
* @param options.checkNullifier Whether to verify nullifier on-chain (requires network)
|
|
283
337
|
* @param options.rpcUrl RPC URL for on-chain checks
|
|
284
338
|
*/
|
|
339
|
+
/** Extract JWS claims for payer binding when present. */
|
|
340
|
+
function receiptPayerClaims(receipt) {
|
|
341
|
+
return (0, payer_js_1.receiptPayerClaimsFromEnvelope)(receipt);
|
|
342
|
+
}
|
|
285
343
|
async function verifyReceipt(receipt, options = {}) {
|
|
286
344
|
const errors = [];
|
|
287
345
|
// Verify binding locally
|
|
@@ -289,9 +347,22 @@ async function verifyReceipt(receipt, options = {}) {
|
|
|
289
347
|
if (!binding.matches && binding.expected) {
|
|
290
348
|
errors.push('Payment binding mismatch');
|
|
291
349
|
}
|
|
292
|
-
// Verify issuer signature
|
|
350
|
+
// Verify issuer signature — pinned JWK in receipt, optional JWKS file, or legacy detached sig
|
|
293
351
|
let issuer_signature;
|
|
294
|
-
|
|
352
|
+
const pinned = (0, jws_js_1.resolvePinnedIssuerJwk)(receipt);
|
|
353
|
+
if (pinned && receipt.issuer_signature?.jws) {
|
|
354
|
+
const jwsResult = (0, jws_js_1.verifyIssuerJws)(receipt.issuer_signature.jws, pinned);
|
|
355
|
+
issuer_signature = {
|
|
356
|
+
checked: true,
|
|
357
|
+
valid: jwsResult.valid,
|
|
358
|
+
kid: pinned.kid || receipt.issuer_signature.kid,
|
|
359
|
+
reason: jwsResult.reason,
|
|
360
|
+
};
|
|
361
|
+
if (!jwsResult.valid) {
|
|
362
|
+
errors.push(`Issuer signature invalid: ${jwsResult.reason}`);
|
|
363
|
+
}
|
|
364
|
+
}
|
|
365
|
+
else if (options.jwks) {
|
|
295
366
|
issuer_signature = verifyIssuerSignatureWithJwks(receipt, options.jwks);
|
|
296
367
|
if (issuer_signature.checked && !issuer_signature.valid) {
|
|
297
368
|
errors.push(`Issuer signature invalid: ${issuer_signature.reason}`);
|
|
@@ -302,7 +373,9 @@ async function verifyReceipt(receipt, options = {}) {
|
|
|
302
373
|
checked: false,
|
|
303
374
|
valid: false,
|
|
304
375
|
kid: receipt.issuer_signature.kid,
|
|
305
|
-
reason:
|
|
376
|
+
reason: receipt.issuer_signature.jws
|
|
377
|
+
? 'No pinned issuer_jwk and JWKS not provided — pass jwks option or use a receipt with issuer_signature.issuer_jwk'
|
|
378
|
+
: 'JWKS not provided — pass jwks option to verify issuer signature',
|
|
306
379
|
};
|
|
307
380
|
}
|
|
308
381
|
else {
|
|
@@ -312,6 +385,39 @@ async function verifyReceipt(receipt, options = {}) {
|
|
|
312
385
|
reason: 'No issuer signature present on receipt',
|
|
313
386
|
};
|
|
314
387
|
}
|
|
388
|
+
// Verify payer on-chain when requested (Base USDC or Solana USDC)
|
|
389
|
+
let payer;
|
|
390
|
+
if (options.checkPayer) {
|
|
391
|
+
const payerResult = await (0, payer_js_1.verifyPayerBinding)(receiptPayerClaims(receipt), {
|
|
392
|
+
rpcUrl: options.rpcUrl,
|
|
393
|
+
solanaRpcUrl: options.solanaRpcUrl,
|
|
394
|
+
fetchSolanaTransaction: options.fetchSolanaTransaction,
|
|
395
|
+
fetchBaseReceipt: options.fetchBaseReceipt,
|
|
396
|
+
});
|
|
397
|
+
payer = {
|
|
398
|
+
checked: payerResult.checked,
|
|
399
|
+
valid: payerResult.valid,
|
|
400
|
+
rail: payerResult.rail,
|
|
401
|
+
reason: payerResult.reason,
|
|
402
|
+
};
|
|
403
|
+
if (payerResult.checked && !payerResult.valid) {
|
|
404
|
+
errors.push(`Payer binding mismatch: ${payerResult.reason}`);
|
|
405
|
+
}
|
|
406
|
+
}
|
|
407
|
+
else if (receipt.caller_binding?.payer_wallet && receipt.payment?.ref) {
|
|
408
|
+
payer = {
|
|
409
|
+
checked: false,
|
|
410
|
+
valid: false,
|
|
411
|
+
reason: 'On-chain payer check not requested — pass checkPayer: true',
|
|
412
|
+
};
|
|
413
|
+
}
|
|
414
|
+
else {
|
|
415
|
+
payer = {
|
|
416
|
+
checked: false,
|
|
417
|
+
valid: false,
|
|
418
|
+
reason: 'No payer_wallet or payment.ref to verify',
|
|
419
|
+
};
|
|
420
|
+
}
|
|
315
421
|
// Verify nullifier on-chain if requested
|
|
316
422
|
let nullifier;
|
|
317
423
|
if (options.checkNullifier && receipt.proof?.nullifier) {
|
|
@@ -347,22 +453,29 @@ async function verifyReceipt(receipt, options = {}) {
|
|
|
347
453
|
// Check for signature verification failure (JWKS provided but signature invalid)
|
|
348
454
|
const jwksProvided = !!options.jwks;
|
|
349
455
|
const hasIssuerSig = !!receipt.issuer_signature;
|
|
350
|
-
const
|
|
456
|
+
const hasPinnedJwk = !!pinned && !!receipt.issuer_signature?.jws;
|
|
457
|
+
const issuerSigInvalid = (jwksProvided || hasPinnedJwk) && hasIssuerSig && !issuer_signature.valid;
|
|
351
458
|
// Binding failure
|
|
352
459
|
const bindingFailed = binding.expected && !binding.matches;
|
|
353
|
-
|
|
460
|
+
const payerFailed = options.checkPayer && payer.checked && !payer.valid;
|
|
461
|
+
if (issuerSigInvalid || bindingFailed || payerFailed) {
|
|
354
462
|
// JWKS provided but signature invalid, OR binding mismatch → failed
|
|
355
463
|
overall = 'failed';
|
|
356
464
|
}
|
|
357
|
-
else if (hasIssuerSig && !jwksProvided) {
|
|
358
|
-
// Receipt has signature but no
|
|
465
|
+
else if (hasIssuerSig && !jwksProvided && !hasPinnedJwk) {
|
|
466
|
+
// Receipt has signature but no offline key material → partial
|
|
359
467
|
overall = 'partial';
|
|
360
468
|
}
|
|
361
|
-
else if (binding.matches
|
|
469
|
+
else if (binding.matches
|
|
470
|
+
&& (!options.checkPayer || payer.valid)
|
|
471
|
+
&& (!options.checkNullifier || nullifier.anchored)) {
|
|
362
472
|
// Binding matches, signature OK (or no signature), nullifier OK → verified
|
|
363
473
|
overall = 'verified';
|
|
364
474
|
}
|
|
365
|
-
else if (binding.matches
|
|
475
|
+
else if (binding.matches
|
|
476
|
+
|| issuer_signature.valid
|
|
477
|
+
|| (options.checkPayer && payer.valid)
|
|
478
|
+
|| (nullifier.verified && nullifier.anchored)) {
|
|
366
479
|
// At least one check passed → partial
|
|
367
480
|
overall = 'partial';
|
|
368
481
|
}
|
|
@@ -377,6 +490,7 @@ async function verifyReceipt(receipt, options = {}) {
|
|
|
377
490
|
receipt_id: receipt.task_id,
|
|
378
491
|
binding,
|
|
379
492
|
issuer_signature,
|
|
493
|
+
payer,
|
|
380
494
|
nullifier,
|
|
381
495
|
output_hash,
|
|
382
496
|
hub,
|
|
@@ -387,19 +501,31 @@ async function verifyReceipt(receipt, options = {}) {
|
|
|
387
501
|
errors,
|
|
388
502
|
};
|
|
389
503
|
}
|
|
504
|
+
var jws_js_2 = require("./jws.js");
|
|
505
|
+
Object.defineProperty(exports, "resolvePinnedIssuerJwk", { enumerable: true, get: function () { return jws_js_2.resolvePinnedIssuerJwk; } });
|
|
506
|
+
Object.defineProperty(exports, "verifyIssuerJws", { enumerable: true, get: function () { return jws_js_2.verifyIssuerJws; } });
|
|
390
507
|
exports.default = {
|
|
391
508
|
verifyBinding,
|
|
392
509
|
verifyIssuerSignature,
|
|
393
510
|
verifyIssuerSignatureWithJwks,
|
|
511
|
+
verifyIssuerJws: jws_js_1.verifyIssuerJws,
|
|
512
|
+
resolvePinnedIssuerJwk: jws_js_1.resolvePinnedIssuerJwk,
|
|
394
513
|
verifyNullifier,
|
|
514
|
+
verifyPayerBinding: payer_js_1.verifyPayerBinding,
|
|
515
|
+
verifySolanaPayer: solana_payer_js_1.verifySolanaPayer,
|
|
516
|
+
verifyBasePayer: base_payer_js_1.verifyBasePayer,
|
|
395
517
|
verifyReceipt,
|
|
518
|
+
receiptPayerClaims,
|
|
519
|
+
receiptPayerClaimsFromEnvelope: payer_js_1.receiptPayerClaimsFromEnvelope,
|
|
520
|
+
decodeJwsPayload: payer_js_1.decodeJwsPayload,
|
|
396
521
|
computePaymentCommitment: binding_js_1.computePaymentCommitment,
|
|
397
522
|
computeInferenceBinding: binding_js_1.computeInferenceBinding,
|
|
398
523
|
canonicalIssuerPayload,
|
|
399
524
|
canonicalSignedPayload: exports.canonicalSignedPayload,
|
|
400
525
|
hashCanonicalPayload,
|
|
401
526
|
ZK_VERIFIER_ADDRESS: exports.ZK_VERIFIER_ADDRESS,
|
|
402
|
-
BASE_RPC_URL:
|
|
527
|
+
BASE_RPC_URL: base_payer_js_1.BASE_RPC_URL,
|
|
403
528
|
BASE_SEPOLIA_RPC_URL: exports.BASE_SEPOLIA_RPC_URL,
|
|
529
|
+
SOLANA_RPC_URL: solana_payer_js_1.SOLANA_RPC_URL,
|
|
404
530
|
};
|
|
405
531
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/jws.d.ts
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
export interface Es256Jwk {
|
|
2
|
+
kty: 'EC';
|
|
3
|
+
crv: 'P-256';
|
|
4
|
+
x: string;
|
|
5
|
+
y: string;
|
|
6
|
+
kid?: string;
|
|
7
|
+
alg?: string;
|
|
8
|
+
use?: string;
|
|
9
|
+
}
|
|
10
|
+
export interface ReceiptWithIssuerJwk {
|
|
11
|
+
issuer_signature?: {
|
|
12
|
+
kid?: string;
|
|
13
|
+
jws?: string;
|
|
14
|
+
issuer_jwk?: Es256Jwk;
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
export declare function resolvePinnedIssuerJwk(receipt: ReceiptWithIssuerJwk): Es256Jwk | null;
|
|
18
|
+
export declare function verifyIssuerJws(jws: string, jwk: Es256Jwk): {
|
|
19
|
+
valid: boolean;
|
|
20
|
+
payload?: Record<string, unknown>;
|
|
21
|
+
reason?: string;
|
|
22
|
+
};
|
|
23
|
+
//# sourceMappingURL=jws.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jws.d.ts","sourceRoot":"","sources":["../src/jws.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,QAAQ;IACvB,GAAG,EAAE,IAAI,CAAC;IACV,GAAG,EAAE,OAAO,CAAC;IACb,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,oBAAoB;IACnC,gBAAgB,CAAC,EAAE;QACjB,GAAG,CAAC,EAAE,MAAM,CAAC;QACb,GAAG,CAAC,EAAE,MAAM,CAAC;QACb,UAAU,CAAC,EAAE,QAAQ,CAAC;KACvB,CAAC;CACH;AAED,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,oBAAoB,GAAG,QAAQ,GAAG,IAAI,CAMrF;AAED,wBAAgB,eAAe,CAC7B,GAAG,EAAE,MAAM,EACX,GAAG,EAAE,QAAQ,GACZ;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,CAyCxE"}
|
package/dist/jws.js
ADDED
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.resolvePinnedIssuerJwk = resolvePinnedIssuerJwk;
|
|
4
|
+
exports.verifyIssuerJws = verifyIssuerJws;
|
|
5
|
+
/**
|
|
6
|
+
* Compact JWS (ES256) verification for Chit402 receipts.
|
|
7
|
+
*/
|
|
8
|
+
const node_crypto_1 = require("node:crypto");
|
|
9
|
+
function resolvePinnedIssuerJwk(receipt) {
|
|
10
|
+
const jwk = receipt.issuer_signature?.issuer_jwk;
|
|
11
|
+
if (!jwk || jwk.kty !== 'EC' || jwk.crv !== 'P-256')
|
|
12
|
+
return null;
|
|
13
|
+
const kid = receipt.issuer_signature?.kid;
|
|
14
|
+
if (kid && jwk.kid && kid !== jwk.kid)
|
|
15
|
+
return null;
|
|
16
|
+
return jwk;
|
|
17
|
+
}
|
|
18
|
+
function verifyIssuerJws(jws, jwk) {
|
|
19
|
+
if (!jws || typeof jws !== 'string') {
|
|
20
|
+
return { valid: false, reason: 'invalid_jws' };
|
|
21
|
+
}
|
|
22
|
+
const parts = jws.split('.');
|
|
23
|
+
if (parts.length !== 3) {
|
|
24
|
+
return { valid: false, reason: 'malformed_jws' };
|
|
25
|
+
}
|
|
26
|
+
const [headerB64, payloadB64, signatureB64] = parts;
|
|
27
|
+
let header;
|
|
28
|
+
let payload;
|
|
29
|
+
try {
|
|
30
|
+
header = JSON.parse(Buffer.from(headerB64, 'base64url').toString('utf8'));
|
|
31
|
+
payload = JSON.parse(Buffer.from(payloadB64, 'base64url').toString('utf8'));
|
|
32
|
+
}
|
|
33
|
+
catch {
|
|
34
|
+
return { valid: false, reason: 'json_parse_error' };
|
|
35
|
+
}
|
|
36
|
+
if (header.alg !== 'ES256') {
|
|
37
|
+
return { valid: false, reason: `unsupported_alg: ${header.alg}` };
|
|
38
|
+
}
|
|
39
|
+
if (header.kid && jwk.kid && header.kid !== jwk.kid) {
|
|
40
|
+
return { valid: false, reason: 'kid_mismatch' };
|
|
41
|
+
}
|
|
42
|
+
try {
|
|
43
|
+
const publicKey = (0, node_crypto_1.createPublicKey)({
|
|
44
|
+
key: { kty: jwk.kty, crv: jwk.crv, x: jwk.x, y: jwk.y },
|
|
45
|
+
format: 'jwk',
|
|
46
|
+
});
|
|
47
|
+
const signature = Buffer.from(signatureB64, 'base64url');
|
|
48
|
+
const signingInput = `${headerB64}.${payloadB64}`;
|
|
49
|
+
const valid = (0, node_crypto_1.verify)('sha256', Buffer.from(signingInput, 'utf8'), {
|
|
50
|
+
key: publicKey,
|
|
51
|
+
dsaEncoding: 'ieee-p1363',
|
|
52
|
+
}, signature);
|
|
53
|
+
return valid ? { valid: true, payload } : { valid: false, reason: 'signature_invalid' };
|
|
54
|
+
}
|
|
55
|
+
catch (err) {
|
|
56
|
+
return { valid: false, reason: `verification_error: ${err.message}` };
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=jws.js.map
|
package/dist/jws.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jws.js","sourceRoot":"","sources":["../src/jws.ts"],"names":[],"mappings":"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"}
|
package/dist/payer.d.ts
ADDED
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Unified offline payer binding verification (Base + Solana).
|
|
3
|
+
*/
|
|
4
|
+
import { type BasePayerVerification, type BaseReceiptFetcher } from './base-payer.js';
|
|
5
|
+
import { type SolanaPayerVerification, type SolanaRpcFetcher } from './solana-payer.js';
|
|
6
|
+
export type PayerRail = 'base' | 'solana' | 'unknown';
|
|
7
|
+
export interface PayerBindingVerification {
|
|
8
|
+
checked: boolean;
|
|
9
|
+
valid: boolean;
|
|
10
|
+
rail: PayerRail;
|
|
11
|
+
payerWallet?: string | null;
|
|
12
|
+
paymentRef?: string | null;
|
|
13
|
+
expectedAmount?: string | null;
|
|
14
|
+
base?: BasePayerVerification;
|
|
15
|
+
solana?: SolanaPayerVerification;
|
|
16
|
+
reason?: string;
|
|
17
|
+
}
|
|
18
|
+
export interface ReceiptPayerClaims {
|
|
19
|
+
payment?: {
|
|
20
|
+
ref?: string | null;
|
|
21
|
+
gross_amount?: string | null;
|
|
22
|
+
} | null;
|
|
23
|
+
caller_binding?: {
|
|
24
|
+
payer_wallet?: string | null;
|
|
25
|
+
} | null;
|
|
26
|
+
}
|
|
27
|
+
export interface VerifyPayerBindingOptions {
|
|
28
|
+
rpcUrl?: string;
|
|
29
|
+
solanaRpcUrl?: string;
|
|
30
|
+
fetchSolanaTransaction?: SolanaRpcFetcher;
|
|
31
|
+
fetchBaseReceipt?: BaseReceiptFetcher;
|
|
32
|
+
}
|
|
33
|
+
/** Decode the payload segment of a compact JWS (no signature check). */
|
|
34
|
+
export declare function decodeJwsPayload(jws: string): Record<string, unknown> | null;
|
|
35
|
+
/**
|
|
36
|
+
* Extract payer claims from a receipt envelope (top-level or JWS payload).
|
|
37
|
+
*/
|
|
38
|
+
export declare function receiptPayerClaimsFromEnvelope(receipt: {
|
|
39
|
+
payment?: {
|
|
40
|
+
ref?: string | null;
|
|
41
|
+
gross_amount?: string | null;
|
|
42
|
+
} | null;
|
|
43
|
+
caller_binding?: {
|
|
44
|
+
payer_wallet?: string | null;
|
|
45
|
+
} | null;
|
|
46
|
+
issuer_signature?: {
|
|
47
|
+
jws?: string;
|
|
48
|
+
} | null;
|
|
49
|
+
}): ReceiptPayerClaims;
|
|
50
|
+
/**
|
|
51
|
+
* Verify caller_binding.payer_wallet against on-chain settlement in payment.ref.
|
|
52
|
+
*/
|
|
53
|
+
export declare function verifyPayerBinding(claims: ReceiptPayerClaims, options?: VerifyPayerBindingOptions): Promise<PayerBindingVerification>;
|
|
54
|
+
//# sourceMappingURL=payer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"payer.d.ts","sourceRoot":"","sources":["../src/payer.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAmB,KAAK,qBAAqB,EAAE,KAAK,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACvG,OAAO,EAEL,KAAK,uBAAuB,EAC5B,KAAK,gBAAgB,EACtB,MAAM,mBAAmB,CAAC;AAE3B,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,QAAQ,GAAG,SAAS,CAAC;AAEtD,MAAM,WAAW,wBAAwB;IACvC,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,OAAO,CAAC;IACf,IAAI,EAAE,SAAS,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,IAAI,CAAC,EAAE,qBAAqB,CAAC;IAC7B,MAAM,CAAC,EAAE,uBAAuB,CAAC;IACjC,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,kBAAkB;IACjC,OAAO,CAAC,EAAE;QACR,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QACpB,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;KAC9B,GAAG,IAAI,CAAC;IACT,cAAc,CAAC,EAAE;QACf,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;KAC9B,GAAG,IAAI,CAAC;CACV;AAED,MAAM,WAAW,yBAAyB;IACxC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,sBAAsB,CAAC,EAAE,gBAAgB,CAAC;IAC1C,gBAAgB,CAAC,EAAE,kBAAkB,CAAC;CACvC;AAED,wEAAwE;AACxE,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAQ5E;AAED;;GAEG;AACH,wBAAgB,8BAA8B,CAAC,OAAO,EAAE;IACtD,OAAO,CAAC,EAAE;QAAE,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,GAAG,IAAI,CAAC;IACvE,cAAc,CAAC,EAAE;QAAE,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,GAAG,IAAI,CAAC;IACzD,gBAAgB,CAAC,EAAE;QAAE,GAAG,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;CAC5C,GAAG,kBAAkB,CAqCrB;AAYD;;GAEG;AACH,wBAAsB,kBAAkB,CACtC,MAAM,EAAE,kBAAkB,EAC1B,OAAO,GAAE,yBAA8B,GACtC,OAAO,CAAC,wBAAwB,CAAC,CAiEnC"}
|
package/dist/payer.js
ADDED
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Unified offline payer binding verification (Base + Solana).
|
|
4
|
+
*/
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.decodeJwsPayload = decodeJwsPayload;
|
|
7
|
+
exports.receiptPayerClaimsFromEnvelope = receiptPayerClaimsFromEnvelope;
|
|
8
|
+
exports.verifyPayerBinding = verifyPayerBinding;
|
|
9
|
+
const base_payer_js_1 = require("./base-payer.js");
|
|
10
|
+
const solana_payer_js_1 = require("./solana-payer.js");
|
|
11
|
+
/** Decode the payload segment of a compact JWS (no signature check). */
|
|
12
|
+
function decodeJwsPayload(jws) {
|
|
13
|
+
const parts = jws.split('.');
|
|
14
|
+
if (parts.length < 2)
|
|
15
|
+
return null;
|
|
16
|
+
try {
|
|
17
|
+
return JSON.parse(Buffer.from(parts[1], 'base64url').toString('utf8'));
|
|
18
|
+
}
|
|
19
|
+
catch {
|
|
20
|
+
return null;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Extract payer claims from a receipt envelope (top-level or JWS payload).
|
|
25
|
+
*/
|
|
26
|
+
function receiptPayerClaimsFromEnvelope(receipt) {
|
|
27
|
+
if (receipt.payment?.ref || receipt.caller_binding?.payer_wallet) {
|
|
28
|
+
return {
|
|
29
|
+
payment: {
|
|
30
|
+
ref: receipt.payment?.ref ?? null,
|
|
31
|
+
gross_amount: receipt.payment?.gross_amount ?? null,
|
|
32
|
+
},
|
|
33
|
+
caller_binding: receipt.caller_binding ?? null,
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
const jws = receipt.issuer_signature?.jws;
|
|
37
|
+
if (!jws) {
|
|
38
|
+
return {
|
|
39
|
+
payment: { ref: null, gross_amount: null },
|
|
40
|
+
caller_binding: null,
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
const claims = decodeJwsPayload(jws);
|
|
44
|
+
if (!claims) {
|
|
45
|
+
return {
|
|
46
|
+
payment: { ref: null, gross_amount: null },
|
|
47
|
+
caller_binding: null,
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
const payment = claims.payment;
|
|
51
|
+
const callerBinding = claims.caller_binding;
|
|
52
|
+
return {
|
|
53
|
+
payment: {
|
|
54
|
+
ref: payment?.ref ?? null,
|
|
55
|
+
gross_amount: payment?.gross_amount ?? null,
|
|
56
|
+
},
|
|
57
|
+
caller_binding: callerBinding ?? null,
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
function detectRail(paymentRef) {
|
|
61
|
+
if (!paymentRef)
|
|
62
|
+
return 'unknown';
|
|
63
|
+
const lower = paymentRef.toLowerCase();
|
|
64
|
+
if (lower.startsWith('solana:'))
|
|
65
|
+
return 'solana';
|
|
66
|
+
if (lower.startsWith('base:') || lower.startsWith('base-sepolia:') || lower.startsWith('eip155:')) {
|
|
67
|
+
return 'base';
|
|
68
|
+
}
|
|
69
|
+
return 'unknown';
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Verify caller_binding.payer_wallet against on-chain settlement in payment.ref.
|
|
73
|
+
*/
|
|
74
|
+
async function verifyPayerBinding(claims, options = {}) {
|
|
75
|
+
const paymentRef = claims.payment?.ref ?? null;
|
|
76
|
+
const payerWallet = claims.caller_binding?.payer_wallet ?? null;
|
|
77
|
+
const grossAmount = claims.payment?.gross_amount ?? null;
|
|
78
|
+
const rail = detectRail(paymentRef);
|
|
79
|
+
if (!paymentRef) {
|
|
80
|
+
return { checked: false, valid: false, rail, reason: 'no_payment_ref' };
|
|
81
|
+
}
|
|
82
|
+
if (!payerWallet) {
|
|
83
|
+
return { checked: false, valid: false, rail, paymentRef, reason: 'no_payer_wallet' };
|
|
84
|
+
}
|
|
85
|
+
if (grossAmount == null || grossAmount === '') {
|
|
86
|
+
return { checked: false, valid: false, rail, paymentRef, payerWallet, reason: 'no_gross_amount' };
|
|
87
|
+
}
|
|
88
|
+
if (rail === 'solana') {
|
|
89
|
+
const solana = await (0, solana_payer_js_1.verifySolanaPayer)({
|
|
90
|
+
paymentRef,
|
|
91
|
+
payerWallet,
|
|
92
|
+
grossAmount,
|
|
93
|
+
rpcUrl: options.solanaRpcUrl || options.rpcUrl,
|
|
94
|
+
fetchTransaction: options.fetchSolanaTransaction,
|
|
95
|
+
});
|
|
96
|
+
return {
|
|
97
|
+
checked: solana.checked,
|
|
98
|
+
valid: solana.valid,
|
|
99
|
+
rail: 'solana',
|
|
100
|
+
payerWallet,
|
|
101
|
+
paymentRef,
|
|
102
|
+
expectedAmount: grossAmount,
|
|
103
|
+
solana,
|
|
104
|
+
reason: solana.reason,
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
if (rail === 'base') {
|
|
108
|
+
const base = await (0, base_payer_js_1.verifyBasePayer)({
|
|
109
|
+
paymentRef,
|
|
110
|
+
payerWallet,
|
|
111
|
+
grossAmount,
|
|
112
|
+
rpcUrl: options.rpcUrl,
|
|
113
|
+
fetchReceipt: options.fetchBaseReceipt,
|
|
114
|
+
});
|
|
115
|
+
return {
|
|
116
|
+
checked: base.checked,
|
|
117
|
+
valid: base.valid,
|
|
118
|
+
rail: 'base',
|
|
119
|
+
payerWallet,
|
|
120
|
+
paymentRef,
|
|
121
|
+
expectedAmount: grossAmount,
|
|
122
|
+
base,
|
|
123
|
+
reason: base.reason,
|
|
124
|
+
};
|
|
125
|
+
}
|
|
126
|
+
return {
|
|
127
|
+
checked: false,
|
|
128
|
+
valid: false,
|
|
129
|
+
rail: 'unknown',
|
|
130
|
+
payerWallet,
|
|
131
|
+
paymentRef,
|
|
132
|
+
expectedAmount: grossAmount,
|
|
133
|
+
reason: `unsupported_payment_ref: ${paymentRef}`,
|
|
134
|
+
};
|
|
135
|
+
}
|
|
136
|
+
//# sourceMappingURL=payer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"payer.js","sourceRoot":"","sources":["../src/payer.ts"],"names":[],"mappings":"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"}
|