x402check 0.0.1 → 0.1.0
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/index.cjs +94 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +42 -2
- package/dist/index.d.cts.map +1 -1
- package/dist/index.d.ts +42 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.iife.js +2 -2
- package/dist/index.js +94 -2
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.d.cts
CHANGED
|
@@ -458,8 +458,48 @@ interface ValidationOptions {
|
|
|
458
458
|
*/
|
|
459
459
|
declare function validate(input: string | object, options?: ValidationOptions | undefined): ValidationResult;
|
|
460
460
|
//#endregion
|
|
461
|
+
//#region src/extraction/extract.d.ts
|
|
462
|
+
/**
|
|
463
|
+
* HTTP config extraction
|
|
464
|
+
*
|
|
465
|
+
* Extracts x402 payment configs from HTTP 402 responses.
|
|
466
|
+
* Handles body-first extraction with PAYMENT-REQUIRED header fallback.
|
|
467
|
+
*/
|
|
468
|
+
/**
|
|
469
|
+
* Where the config was found
|
|
470
|
+
*/
|
|
471
|
+
type ExtractionSource = 'body' | 'header';
|
|
472
|
+
/**
|
|
473
|
+
* Result of extracting a config from an HTTP response
|
|
474
|
+
*/
|
|
475
|
+
interface ExtractionResult {
|
|
476
|
+
config: object | null;
|
|
477
|
+
source: ExtractionSource | null;
|
|
478
|
+
error: string | null;
|
|
479
|
+
}
|
|
480
|
+
/**
|
|
481
|
+
* Minimal response shape — works with fetch Response, plain objects, etc.
|
|
482
|
+
*/
|
|
483
|
+
interface ResponseLike {
|
|
484
|
+
body?: unknown;
|
|
485
|
+
headers?: Record<string, string> | Headers;
|
|
486
|
+
}
|
|
487
|
+
/**
|
|
488
|
+
* Extract an x402 config from an HTTP 402 response.
|
|
489
|
+
*
|
|
490
|
+
* Extraction priority:
|
|
491
|
+
* 1. JSON body — if it parses and has x402 fields (accepts, payTo, x402Version)
|
|
492
|
+
* 2. PAYMENT-REQUIRED header — base64-decoded JSON fallback
|
|
493
|
+
*
|
|
494
|
+
* Never throws. Returns structured result with error message on failure.
|
|
495
|
+
*
|
|
496
|
+
* @param response - Response-like object with body and/or headers
|
|
497
|
+
* @returns Extraction result with config, source, and error
|
|
498
|
+
*/
|
|
499
|
+
declare function extractConfig(response: ResponseLike): ExtractionResult;
|
|
500
|
+
//#endregion
|
|
461
501
|
//#region src/index.d.ts
|
|
462
|
-
declare const VERSION: "0.0
|
|
502
|
+
declare const VERSION: "0.1.0";
|
|
463
503
|
//#endregion
|
|
464
|
-
export { AcceptsEntry, AssetInfo, CAIP2_REGEX, ConfigFormat, ErrorCode, ErrorMessages, KNOWN_ASSETS, KNOWN_NETWORKS, NetworkInfo, NetworkType, NormalizedConfig, ParsedInput, Resource, SIMPLE_NAME_TO_CAIP2, Severity, V1AcceptsEntry, V1Config, V2Config, VERSION, ValidationIssue, type ValidationOptions, ValidationResult, decodeBase58, detect, getAssetInfo, getCanonicalNetwork, getNetworkInfo, getNetworkNamespace, isKnownAsset, isKnownNetwork, isValidCaip2, isValidChecksum, keccak256, normalize, parseInput, toChecksumAddress, validate, validateAddress, validateEvmAddress, validateSolanaAddress };
|
|
504
|
+
export { AcceptsEntry, AssetInfo, CAIP2_REGEX, ConfigFormat, ErrorCode, ErrorMessages, type ExtractionResult, type ExtractionSource, KNOWN_ASSETS, KNOWN_NETWORKS, NetworkInfo, NetworkType, NormalizedConfig, ParsedInput, Resource, type ResponseLike, SIMPLE_NAME_TO_CAIP2, Severity, V1AcceptsEntry, V1Config, V2Config, VERSION, ValidationIssue, type ValidationOptions, ValidationResult, decodeBase58, detect, extractConfig, getAssetInfo, getCanonicalNetwork, getNetworkInfo, getNetworkNamespace, isKnownAsset, isKnownNetwork, isValidCaip2, isValidChecksum, keccak256, normalize, parseInput, toChecksumAddress, validate, validateAddress, validateEvmAddress, validateSolanaAddress };
|
|
465
505
|
//# sourceMappingURL=index.d.cts.map
|
package/dist/index.d.cts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.cts","names":[],"sources":["../src/types/config.ts","../src/types/errors.ts","../src/types/validation.ts","../src/types/parse-input.ts","../src/registries/networks.ts","../src/registries/assets.ts","../src/registries/simple-names.ts","../src/detection/detect.ts","../src/detection/normalize.ts","../src/crypto/keccak256.ts","../src/crypto/base58.ts","../src/crypto/eip55.ts","../src/validation/evm-address.ts","../src/validation/solana-address.ts","../src/validation/address.ts","../src/validation/orchestrator.ts","../src/index.ts"],"mappings":"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
|
|
1
|
+
{"version":3,"file":"index.d.cts","names":[],"sources":["../src/types/config.ts","../src/types/errors.ts","../src/types/validation.ts","../src/types/parse-input.ts","../src/registries/networks.ts","../src/registries/assets.ts","../src/registries/simple-names.ts","../src/detection/detect.ts","../src/detection/normalize.ts","../src/crypto/keccak256.ts","../src/crypto/base58.ts","../src/crypto/eip55.ts","../src/validation/evm-address.ts","../src/validation/solana-address.ts","../src/validation/address.ts","../src/validation/orchestrator.ts","../src/extraction/extract.ts","../src/index.ts"],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -458,8 +458,48 @@ interface ValidationOptions {
|
|
|
458
458
|
*/
|
|
459
459
|
declare function validate(input: string | object, options?: ValidationOptions | undefined): ValidationResult;
|
|
460
460
|
//#endregion
|
|
461
|
+
//#region src/extraction/extract.d.ts
|
|
462
|
+
/**
|
|
463
|
+
* HTTP config extraction
|
|
464
|
+
*
|
|
465
|
+
* Extracts x402 payment configs from HTTP 402 responses.
|
|
466
|
+
* Handles body-first extraction with PAYMENT-REQUIRED header fallback.
|
|
467
|
+
*/
|
|
468
|
+
/**
|
|
469
|
+
* Where the config was found
|
|
470
|
+
*/
|
|
471
|
+
type ExtractionSource = 'body' | 'header';
|
|
472
|
+
/**
|
|
473
|
+
* Result of extracting a config from an HTTP response
|
|
474
|
+
*/
|
|
475
|
+
interface ExtractionResult {
|
|
476
|
+
config: object | null;
|
|
477
|
+
source: ExtractionSource | null;
|
|
478
|
+
error: string | null;
|
|
479
|
+
}
|
|
480
|
+
/**
|
|
481
|
+
* Minimal response shape — works with fetch Response, plain objects, etc.
|
|
482
|
+
*/
|
|
483
|
+
interface ResponseLike {
|
|
484
|
+
body?: unknown;
|
|
485
|
+
headers?: Record<string, string> | Headers;
|
|
486
|
+
}
|
|
487
|
+
/**
|
|
488
|
+
* Extract an x402 config from an HTTP 402 response.
|
|
489
|
+
*
|
|
490
|
+
* Extraction priority:
|
|
491
|
+
* 1. JSON body — if it parses and has x402 fields (accepts, payTo, x402Version)
|
|
492
|
+
* 2. PAYMENT-REQUIRED header — base64-decoded JSON fallback
|
|
493
|
+
*
|
|
494
|
+
* Never throws. Returns structured result with error message on failure.
|
|
495
|
+
*
|
|
496
|
+
* @param response - Response-like object with body and/or headers
|
|
497
|
+
* @returns Extraction result with config, source, and error
|
|
498
|
+
*/
|
|
499
|
+
declare function extractConfig(response: ResponseLike): ExtractionResult;
|
|
500
|
+
//#endregion
|
|
461
501
|
//#region src/index.d.ts
|
|
462
|
-
declare const VERSION: "0.0
|
|
502
|
+
declare const VERSION: "0.1.0";
|
|
463
503
|
//#endregion
|
|
464
|
-
export { AcceptsEntry, AssetInfo, CAIP2_REGEX, ConfigFormat, ErrorCode, ErrorMessages, KNOWN_ASSETS, KNOWN_NETWORKS, NetworkInfo, NetworkType, NormalizedConfig, ParsedInput, Resource, SIMPLE_NAME_TO_CAIP2, Severity, V1AcceptsEntry, V1Config, V2Config, VERSION, ValidationIssue, type ValidationOptions, ValidationResult, decodeBase58, detect, getAssetInfo, getCanonicalNetwork, getNetworkInfo, getNetworkNamespace, isKnownAsset, isKnownNetwork, isValidCaip2, isValidChecksum, keccak256, normalize, parseInput, toChecksumAddress, validate, validateAddress, validateEvmAddress, validateSolanaAddress };
|
|
504
|
+
export { AcceptsEntry, AssetInfo, CAIP2_REGEX, ConfigFormat, ErrorCode, ErrorMessages, type ExtractionResult, type ExtractionSource, KNOWN_ASSETS, KNOWN_NETWORKS, NetworkInfo, NetworkType, NormalizedConfig, ParsedInput, Resource, type ResponseLike, SIMPLE_NAME_TO_CAIP2, Severity, V1AcceptsEntry, V1Config, V2Config, VERSION, ValidationIssue, type ValidationOptions, ValidationResult, decodeBase58, detect, extractConfig, getAssetInfo, getCanonicalNetwork, getNetworkInfo, getNetworkNamespace, isKnownAsset, isKnownNetwork, isValidCaip2, isValidChecksum, keccak256, normalize, parseInput, toChecksumAddress, validate, validateAddress, validateEvmAddress, validateSolanaAddress };
|
|
465
505
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","names":[],"sources":["../src/types/config.ts","../src/types/errors.ts","../src/types/validation.ts","../src/types/parse-input.ts","../src/registries/networks.ts","../src/registries/assets.ts","../src/registries/simple-names.ts","../src/detection/detect.ts","../src/detection/normalize.ts","../src/crypto/keccak256.ts","../src/crypto/base58.ts","../src/crypto/eip55.ts","../src/validation/evm-address.ts","../src/validation/solana-address.ts","../src/validation/address.ts","../src/validation/orchestrator.ts","../src/index.ts"],"mappings":"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
|
|
1
|
+
{"version":3,"file":"index.d.ts","names":[],"sources":["../src/types/config.ts","../src/types/errors.ts","../src/types/validation.ts","../src/types/parse-input.ts","../src/registries/networks.ts","../src/registries/assets.ts","../src/registries/simple-names.ts","../src/detection/detect.ts","../src/detection/normalize.ts","../src/crypto/keccak256.ts","../src/crypto/base58.ts","../src/crypto/eip55.ts","../src/validation/evm-address.ts","../src/validation/solana-address.ts","../src/validation/address.ts","../src/validation/orchestrator.ts","../src/extraction/extract.ts","../src/index.ts"],"mappings":"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"}
|
package/dist/index.iife.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
var x402Validate=(function(e){let t={INVALID_JSON:`INVALID_JSON`,NOT_OBJECT:`NOT_OBJECT`,UNKNOWN_FORMAT:`UNKNOWN_FORMAT`,MISSING_VERSION:`MISSING_VERSION`,INVALID_VERSION:`INVALID_VERSION`,MISSING_ACCEPTS:`MISSING_ACCEPTS`,EMPTY_ACCEPTS:`EMPTY_ACCEPTS`,INVALID_ACCEPTS:`INVALID_ACCEPTS`,MISSING_SCHEME:`MISSING_SCHEME`,MISSING_NETWORK:`MISSING_NETWORK`,INVALID_NETWORK_FORMAT:`INVALID_NETWORK_FORMAT`,MISSING_AMOUNT:`MISSING_AMOUNT`,INVALID_AMOUNT:`INVALID_AMOUNT`,ZERO_AMOUNT:`ZERO_AMOUNT`,MISSING_ASSET:`MISSING_ASSET`,MISSING_PAY_TO:`MISSING_PAY_TO`,MISSING_RESOURCE:`MISSING_RESOURCE`,INVALID_URL:`INVALID_URL`,INVALID_TIMEOUT:`INVALID_TIMEOUT`,INVALID_EVM_ADDRESS:`INVALID_EVM_ADDRESS`,BAD_EVM_CHECKSUM:`BAD_EVM_CHECKSUM`,NO_EVM_CHECKSUM:`NO_EVM_CHECKSUM`,INVALID_SOLANA_ADDRESS:`INVALID_SOLANA_ADDRESS`,ADDRESS_NETWORK_MISMATCH:`ADDRESS_NETWORK_MISMATCH`,UNKNOWN_NETWORK:`UNKNOWN_NETWORK`,UNKNOWN_ASSET:`UNKNOWN_ASSET`,LEGACY_FORMAT:`LEGACY_FORMAT`,MISSING_MAX_TIMEOUT:`MISSING_MAX_TIMEOUT`},n={INVALID_JSON:`Input is not valid JSON`,NOT_OBJECT:`Input must be an object`,UNKNOWN_FORMAT:`Missing required x402Version field (must be 1 or 2)`,MISSING_VERSION:`Missing required field: x402Version`,INVALID_VERSION:`Invalid x402Version value (must be 1 or 2)`,MISSING_ACCEPTS:`Missing required field: accepts`,EMPTY_ACCEPTS:`accepts array cannot be empty`,INVALID_ACCEPTS:`accepts must be an array`,MISSING_SCHEME:`Missing required field: scheme`,MISSING_NETWORK:`Missing required field: network`,INVALID_NETWORK_FORMAT:`Network must use CAIP-2 format (namespace:reference), e.g. eip155:8453`,MISSING_AMOUNT:`Missing required field: amount`,INVALID_AMOUNT:`Amount must be a numeric string in atomic units`,ZERO_AMOUNT:`Amount must be greater than zero`,MISSING_ASSET:`Missing required field: asset`,MISSING_PAY_TO:`Missing required field: payTo`,MISSING_RESOURCE:`Missing required field: resource`,INVALID_URL:`resource.url is not a valid URL format`,INVALID_TIMEOUT:`maxTimeoutSeconds must be a positive integer`,INVALID_EVM_ADDRESS:`Invalid EVM address format`,BAD_EVM_CHECKSUM:`EVM address has invalid checksum`,NO_EVM_CHECKSUM:`EVM address is all-lowercase with no checksum protection`,INVALID_SOLANA_ADDRESS:`Invalid Solana address format`,ADDRESS_NETWORK_MISMATCH:`Address format does not match network type`,UNKNOWN_NETWORK:`Network is not in the known registry -- config may still work but cannot be fully validated`,UNKNOWN_ASSET:`Asset is not in the known registry -- config may still work but cannot be fully validated`,LEGACY_FORMAT:`Config uses legacy flat format -- consider upgrading to x402 v2`,MISSING_MAX_TIMEOUT:`Consider adding maxTimeoutSeconds for better security`};function r(e){if(typeof e==`string`)try{return{parsed:JSON.parse(e)}}catch{return{parsed:null,error:{code:t.INVALID_JSON,field:`$`,message:n.INVALID_JSON,severity:`error`}}}return{parsed:e}}let i=/^[-a-z0-9]{3,8}:[-_a-zA-Z0-9]{1,32}$/,a={"eip155:8453":{name:`Base`,type:`evm`,testnet:!1},"eip155:84532":{name:`Base Sepolia`,type:`evm`,testnet:!0},"eip155:43114":{name:`Avalanche C-Chain`,type:`evm`,testnet:!1},"eip155:43113":{name:`Avalanche Fuji`,type:`evm`,testnet:!0},"solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp":{name:`Solana Mainnet`,type:`solana`,testnet:!1},"solana:EtWTRABZaYq6iMfeYKouRu166VU2xqa1":{name:`Solana Devnet`,type:`solana`,testnet:!0},"solana:4uhcVJyU9pJkvQyS88uRDiswHXSCkY3z":{name:`Solana Testnet`,type:`solana`,testnet:!0},"stellar:pubnet":{name:`Stellar Mainnet`,type:`stellar`,testnet:!1},"stellar:testnet":{name:`Stellar Testnet`,type:`stellar`,testnet:!0},"aptos:1":{name:`Aptos Mainnet`,type:`aptos`,testnet:!1},"aptos:2":{name:`Aptos Testnet`,type:`aptos`,testnet:!0}};function o(e){return i.test(e)}function s(e){return e in a}function c(e){return a[e]}function l(e){if(!o(e))return;let t=e.indexOf(`:`);return t>0?e.substring(0,t):void 0}let u={"eip155:8453":{"0x833589fcd6edb6e08f4c7c32d4f71b54bda02913":{symbol:`USDC`,name:`USD Coin`,decimals:6}},"eip155:84532":{"0x036cbd53842c5426634e7929541ec2318f3dcf7e":{symbol:`USDC`,name:`USD Coin`,decimals:6}},"eip155:43114":{"0xb97ef9ef8734c71904d8002f8b6bc66dd9c48a6e":{symbol:`USDC`,name:`USD Coin`,decimals:6}},"solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp":{EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v:{symbol:`USDC`,name:`USD Coin`,decimals:6}}};function d(e,t){let n=u[e];return n?(l(e)===`eip155`?t.toLowerCase():t)in n:!1}function ee(e,t){let n=u[e];if(n)return n[l(e)===`eip155`?t.toLowerCase():t]}let f={base:`eip155:8453`,"base-sepolia":`eip155:84532`,base_sepolia:`eip155:84532`,avalanche:`eip155:43114`,"avalanche-fuji":`eip155:43113`,solana:`solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp`,"solana-devnet":`solana:EtWTRABZaYq6iMfeYKouRu166VU2xqa1`,"solana-testnet":`solana:4uhcVJyU9pJkvQyS88uRDiswHXSCkY3z`,stellar:`stellar:pubnet`,"stellar-testnet":`stellar:testnet`,aptos:`aptos:1`};function p(e){return f[e.toLowerCase()]}function m(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function h(e){return`accepts`in e&&Array.isArray(e.accepts)}function te(e){return!m(e)||!h(e)?!1:`x402Version`in e&&e.x402Version===2}function ne(e){return!m(e)||!h(e)?!1:`x402Version`in e&&e.x402Version===1}function g(e){let{parsed:t,error:n}=r(e);return n?`unknown`:te(t)?`v2`:ne(t)?`v1`:`unknown`}function _(e){let{parsed:t,error:n}=r(e);if(n)return null;let i=g(t);switch(i){case`v2`:return re(t);case`v1`:return ie(t);case`unknown`:return null;default:return i}}function re(e){let t={x402Version:2,accepts:[...e.accepts],resource:e.resource};return e.error!==void 0&&(t.error=e.error),e.extensions!==void 0&&(t.extensions=e.extensions),t}function ie(e){let t,n={x402Version:2,accepts:e.accepts.map(e=>{e.resource&&!t&&(t=e.resource);let n={scheme:e.scheme,network:e.network,amount:e.maxAmountRequired,asset:e.asset,payTo:e.payTo};return e.maxTimeoutSeconds!==void 0&&(n.maxTimeoutSeconds=e.maxTimeoutSeconds),e.extra!==void 0&&(n.extra=e.extra),n})};return t!==void 0&&(n.resource=t),e.error!==void 0&&(n.error=e.error),e.extensions!==void 0&&(n.extensions=e.extensions),n}let v=BigInt(2**32-1),y=BigInt(32);function ae(e,t=!1){return t?{h:Number(e&v),l:Number(e>>y&v)}:{h:Number(e>>y&v)|0,l:Number(e&v)|0}}function oe(e,t=!1){let n=e.length,r=new Uint32Array(n),i=new Uint32Array(n);for(let a=0;a<n;a++){let{h:n,l:o}=ae(e[a],t);[r[a],i[a]]=[n,o]}return[r,i]}let se=(e,t,n)=>e<<n|t>>>32-n,ce=(e,t,n)=>t<<n|e>>>32-n,le=(e,t,n)=>t<<n-32|e>>>64-n,ue=(e,t,n)=>e<<n-32|t>>>64-n;
|
|
2
2
|
/*! noble-hashes - MIT License (c) 2022 Paul Miller (paulmillr.com) */
|
|
3
|
-
function de(e){return e instanceof Uint8Array||ArrayBuffer.isView(e)&&e.constructor.name===`Uint8Array`}function fe(e,t=``){if(!Number.isSafeInteger(e)||e<0){let n=t&&`"${t}" `;throw Error(`${n}expected integer >= 0, got ${e}`)}}function b(e,t,n=``){let r=de(e),i=e?.length,a=t!==void 0;if(!r||a&&i!==t){let o=n&&`"${n}" `,s=a?` of length ${t}`:``,c=r?`length=${i}`:`type=${typeof e}`;throw Error(o+`expected Uint8Array`+s+`, got `+c)}return e}function pe(e,t=!0){if(e.destroyed)throw Error(`Hash instance has been destroyed`);if(t&&e.finished)throw Error(`Hash#digest() has already been called`)}function me(e,t){b(e,void 0,`digestInto() output`);let n=t.outputLen;if(e.length<n)throw Error(`"digestInto() output" expected to be of length >=`+n)}function he(e){return new Uint32Array(e.buffer,e.byteOffset,Math.floor(e.byteLength/4))}function
|
|
3
|
+
function de(e){return e instanceof Uint8Array||ArrayBuffer.isView(e)&&e.constructor.name===`Uint8Array`}function fe(e,t=``){if(!Number.isSafeInteger(e)||e<0){let n=t&&`"${t}" `;throw Error(`${n}expected integer >= 0, got ${e}`)}}function b(e,t,n=``){let r=de(e),i=e?.length,a=t!==void 0;if(!r||a&&i!==t){let o=n&&`"${n}" `,s=a?` of length ${t}`:``,c=r?`length=${i}`:`type=${typeof e}`;throw Error(o+`expected Uint8Array`+s+`, got `+c)}return e}function pe(e,t=!0){if(e.destroyed)throw Error(`Hash instance has been destroyed`);if(t&&e.finished)throw Error(`Hash#digest() has already been called`)}function me(e,t){b(e,void 0,`digestInto() output`);let n=t.outputLen;if(e.length<n)throw Error(`"digestInto() output" expected to be of length >=`+n)}function he(e){return new Uint32Array(e.buffer,e.byteOffset,Math.floor(e.byteLength/4))}function ge(...e){for(let t=0;t<e.length;t++)e[t].fill(0)}let _e=new Uint8Array(new Uint32Array([287454020]).buffer)[0]===68;function ve(e){return e<<24&4278190080|e<<8&16711680|e>>>8&65280|e>>>24&255}function ye(e){for(let t=0;t<e.length;t++)e[t]=ve(e[t]);return e}let x=_e?e=>e:ye;typeof Uint8Array.from([]).toHex==`function`&&Uint8Array.fromHex;function be(e,t={}){let n=(t,n)=>e(n).update(t).digest(),r=e(void 0);return n.outputLen=r.outputLen,n.blockLen=r.blockLen,n.create=t=>e(t),Object.assign(n,t),Object.freeze(n)}function S(e){"@babel/helpers - typeof";return S=typeof Symbol==`function`&&typeof Symbol.iterator==`symbol`?function(e){return typeof e}:function(e){return e&&typeof Symbol==`function`&&e.constructor===Symbol&&e!==Symbol.prototype?`symbol`:typeof e},S(e)}function xe(e,t){if(S(e)!=`object`||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t||`default`);if(S(r)!=`object`)return r;throw TypeError(`@@toPrimitive must return a primitive value.`)}return(t===`string`?String:Number)(e)}function Se(e){var t=xe(e,`string`);return S(t)==`symbol`?t:t+``}function C(e,t,n){return(t=Se(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}let Ce=BigInt(0),w=BigInt(1),we=BigInt(2),Te=BigInt(7),Ee=BigInt(256),De=BigInt(113),T=[],E=[],D=[];for(let e=0,t=w,n=1,r=0;e<24;e++){[n,r]=[r,(2*n+3*r)%5],T.push(2*(5*r+n)),E.push((e+1)*(e+2)/2%64);let i=Ce;for(let e=0;e<7;e++)t=(t<<w^(t>>Te)*De)%Ee,t&we&&(i^=w<<(w<<BigInt(e))-w);D.push(i)}let O=oe(D,!0),Oe=O[0],ke=O[1],k=(e,t,n)=>n>32?le(e,t,n):se(e,t,n),A=(e,t,n)=>n>32?ue(e,t,n):ce(e,t,n);function Ae(e,t=24){let n=new Uint32Array(10);for(let r=24-t;r<24;r++){for(let t=0;t<10;t++)n[t]=e[t]^e[t+10]^e[t+20]^e[t+30]^e[t+40];for(let t=0;t<10;t+=2){let r=(t+8)%10,i=(t+2)%10,a=n[i],o=n[i+1],s=k(a,o,1)^n[r],c=A(a,o,1)^n[r+1];for(let n=0;n<50;n+=10)e[t+n]^=s,e[t+n+1]^=c}let t=e[2],i=e[3];for(let n=0;n<24;n++){let r=E[n],a=k(t,i,r),o=A(t,i,r),s=T[n];t=e[s],i=e[s+1],e[s]=a,e[s+1]=o}for(let t=0;t<50;t+=10){for(let r=0;r<10;r++)n[r]=e[t+r];for(let r=0;r<10;r++)e[t+r]^=~n[(r+2)%10]&n[(r+4)%10]}e[0]^=Oe[r],e[1]^=ke[r]}ge(n)}var je=class e{constructor(e,t,n,r=!1,i=24){if(C(this,`state`,void 0),C(this,`pos`,0),C(this,`posOut`,0),C(this,`finished`,!1),C(this,`state32`,void 0),C(this,`destroyed`,!1),C(this,`blockLen`,void 0),C(this,`suffix`,void 0),C(this,`outputLen`,void 0),C(this,`enableXOF`,!1),C(this,`rounds`,void 0),this.blockLen=e,this.suffix=t,this.outputLen=n,this.enableXOF=r,this.rounds=i,fe(n,`outputLen`),!(0<e&&e<200))throw Error(`only keccak-f1600 function is supported`);this.state=new Uint8Array(200),this.state32=he(this.state)}clone(){return this._cloneInto()}keccak(){x(this.state32),Ae(this.state32,this.rounds),x(this.state32),this.posOut=0,this.pos=0}update(e){pe(this),b(e);let{blockLen:t,state:n}=this,r=e.length;for(let i=0;i<r;){let a=Math.min(t-this.pos,r-i);for(let t=0;t<a;t++)n[this.pos++]^=e[i++];this.pos===t&&this.keccak()}return this}finish(){if(this.finished)return;this.finished=!0;let{state:e,suffix:t,pos:n,blockLen:r}=this;e[n]^=t,t&128&&n===r-1&&this.keccak(),e[r-1]^=128,this.keccak()}writeInto(e){pe(this,!1),b(e),this.finish();let t=this.state,{blockLen:n}=this;for(let r=0,i=e.length;r<i;){this.posOut>=n&&this.keccak();let a=Math.min(n-this.posOut,i-r);e.set(t.subarray(this.posOut,this.posOut+a),r),this.posOut+=a,r+=a}return e}xofInto(e){if(!this.enableXOF)throw Error(`XOF is not possible for this instance`);return this.writeInto(e)}xof(e){return fe(e),this.xofInto(new Uint8Array(e))}digestInto(e){if(me(e,this),this.finished)throw Error(`digest() was already called`);return this.writeInto(e),this.destroy(),e}digest(){return this.digestInto(new Uint8Array(this.outputLen))}destroy(){this.destroyed=!0,ge(this.state)}_cloneInto(t){let{blockLen:n,suffix:r,outputLen:i,rounds:a,enableXOF:o}=this;return t||(t=new e(n,r,i,o,a)),t.state32.set(this.state32),t.pos=this.pos,t.posOut=this.posOut,t.finished=this.finished,t.rounds=a,t.suffix=r,t.outputLen=i,t.enableXOF=o,t.destroyed=this.destroyed,t}};let Me=((e,t,n,r={})=>be(()=>new je(t,e,n),r))(1,136,32);function j(e){let t=Me(typeof e==`string`?new TextEncoder().encode(e):e);return Array.from(t).map(e=>e.toString(16).padStart(2,`0`)).join(``)}
|
|
4
4
|
/*! scure-base - MIT License (c) 2022 Paul Miller (paulmillr.com) */
|
|
5
|
-
function N(e){return e instanceof Uint8Array||ArrayBuffer.isView(e)&&e.constructor.name===`Uint8Array`}function P(e,t){return Array.isArray(t)?t.length===0?!0:e?t.every(e=>typeof e==`string`):t.every(e=>Number.isSafeInteger(e)):!1}function F(e){if(typeof e!=`function`)throw Error(`function expected`);return!0}function I(e,t){if(typeof t!=`string`)throw Error(`${e}: string expected`);return!0}function L(e){if(!Number.isSafeInteger(e))throw Error(`invalid integer: ${e}`)}function R(e){if(!Array.isArray(e))throw Error(`array expected`)}function z(e,t){if(!P(!0,t))throw Error(`${e}: array of strings expected`)}function B(e,t){if(!P(!1,t))throw Error(`${e}: array of numbers expected`)}function V(...e){let t=e=>e,n=(e,t)=>n=>e(t(n));return{encode:e.map(e=>e.encode).reduceRight(n,t),decode:e.map(e=>e.decode).reduce(n,t)}}function H(e){let t=typeof e==`string`?e.split(``):e,n=t.length;z(`alphabet`,t);let r=new Map(t.map((e,t)=>[e,t]));return{encode:r=>(R(r),r.map(r=>{if(!Number.isSafeInteger(r)||r<0||r>=n)throw Error(`alphabet.encode: digit index outside alphabet "${r}". Allowed: ${e}`);return t[r]})),decode:t=>(R(t),t.map(t=>{I(`alphabet.decode`,t);let n=r.get(t);if(n===void 0)throw Error(`Unknown letter: "${t}". Allowed: ${e}`);return n}))}}function U(e=``){return I(`join`,e),{encode:t=>(z(`join.decode`,t),t.join(e)),decode:t=>(I(`join.decode`,t),t.split(e))}}function W(e,t=`=`){return L(e),I(`padding`,t),{encode(n){for(z(`padding.encode`,n);n.length*e%8;)n.push(t);return n},decode(n){z(`padding.decode`,n);let r=n.length;if(r*e%8)throw Error(`padding: invalid, string should have whole number of bytes`);for(;r>0&&n[r-1]===t;r--)if((r-1)*e%8==0)throw Error(`padding: invalid, string has too much padding`);return n.slice(0,r)}}}function G(e){return F(e),{encode:e=>e,decode:t=>e(t)}}function K(e,t,n){if(t<2)throw Error(`convertRadix: invalid from=${t}, base cannot be less than 2`);if(n<2)throw Error(`convertRadix: invalid to=${n}, base cannot be less than 2`);if(R(e),!e.length)return[];let r=0,i=[],a=Array.from(e,e=>{if(L(e),e<0||e>=t)throw Error(`invalid integer: ${e}`);return e}),o=a.length;for(;;){let e=0,s=!0;for(let i=r;i<o;i++){let o=a[i],c=t*e,l=c+o;if(!Number.isSafeInteger(l)||c/t!==e||l-o!==c)throw Error(`convertRadix: carry overflow`);let u=l/n;e=l%n;let d=Math.floor(u);if(a[i]=d,!Number.isSafeInteger(d)||d*n+e!==l)throw Error(`convertRadix: carry overflow`);if(s)d?s=!1:r=i;else continue}if(i.push(e),s)break}for(let t=0;t<e.length-1&&e[t]===0;t++)i.push(0);return i.reverse()}let Me=(e,t)=>t===0?e:Me(t,e%t),q=(e,t)=>e+(t-Me(e,t)),J=(()=>{let e=[];for(let t=0;t<40;t++)e.push(2**t);return e})();function Y(e,t,n,r){if(R(e),t<=0||t>32)throw Error(`convertRadix2: wrong from=${t}`);if(n<=0||n>32)throw Error(`convertRadix2: wrong to=${n}`);if(q(t,n)>32)throw Error(`convertRadix2: carry overflow from=${t} to=${n} carryBits=${q(t,n)}`);let i=0,a=0,o=J[t],s=J[n]-1,c=[];for(let r of e){if(L(r),r>=o)throw Error(`convertRadix2: invalid data word=${r} from=${t}`);if(i=i<<t|r,a+t>32)throw Error(`convertRadix2: carry overflow pos=${a} from=${t}`);for(a+=t;a>=n;a-=n)c.push((i>>a-n&s)>>>0);let e=J[a];if(e===void 0)throw Error(`invalid carry`);i&=e-1}if(i=i<<n-a&s,!r&&a>=t)throw Error(`Excess padding`);if(!r&&i>0)throw Error(`Non-zero padding: ${i}`);return r&&a>0&&c.push(i>>>0),c}function Ne(e){return L(e),{encode:t=>{if(!N(t))throw Error(`radix.encode input should be Uint8Array`);return K(Array.from(t),256,e)},decode:t=>(B(`radix.decode`,t),Uint8Array.from(K(t,e,256)))}}function X(e,t=!1){if(L(e),e<=0||e>32)throw Error(`radix2: bits should be in (0..32]`);if(q(8,e)>32||q(e,8)>32)throw Error(`radix2: carry overflow`);return{encode:n=>{if(!N(n))throw Error(`radix2.encode input should be Uint8Array`);return Y(Array.from(n),8,e,!t)},decode:n=>(B(`radix2.decode`,n),Uint8Array.from(Y(n,e,8,t)))}}function Pe(e){return F(e),function(...t){try{return e.apply(null,t)}catch{}}}V(X(4),H(`0123456789ABCDEF`),U(``)),V(X(5),H(`ABCDEFGHIJKLMNOPQRSTUVWXYZ234567`),W(5),U(``)),V(X(5),H(`ABCDEFGHIJKLMNOPQRSTUVWXYZ234567`),U(``)),V(X(5),H(`0123456789ABCDEFGHIJKLMNOPQRSTUV`),W(5),U(``)),V(X(5),H(`0123456789ABCDEFGHIJKLMNOPQRSTUV`),U(``)),V(X(5),H(`0123456789ABCDEFGHJKMNPQRSTVWXYZ`),U(``),G(e=>e.toUpperCase().replace(/O/g,`0`).replace(/[IL]/g,`1`)));let Fe=typeof Uint8Array.from([]).toBase64==`function`&&typeof Uint8Array.fromBase64==`function`;Fe||V(X(6),H(`ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/`),W(6),U(``)),V(X(6),H(`ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/`),U(``)),Fe||V(X(6),H(`ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_`),W(6),U(``)),V(X(6),H(`ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_`),U(``));let Ie=(e=>V(Ne(58),H(e),U(``)))(`123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz`),Z=V(H(`qpzry9x8gf2tvdw0s3jn54khce6mua7l`),U(``)),Le=[996825010,642813549,513874426,1027748829,705979059];function Q(e){let t=e>>25,n=(e&33554431)<<5;for(let e=0;e<Le.length;e++)(t>>e&1)==1&&(n^=Le[e]);return n}function Re(e,t,n=1){let r=e.length,i=1;for(let t=0;t<r;t++){let n=e.charCodeAt(t);if(n<33||n>126)throw Error(`Invalid prefix (${e})`);i=Q(i)^n>>5}i=Q(i);for(let t=0;t<r;t++)i=Q(i)^e.charCodeAt(t)&31;for(let e of t)i=Q(i)^e;for(let e=0;e<6;e++)i=Q(i);return i^=n,Z.encode(Y([i%J[30]],30,5,!1))}function ze(e){let t=e===`bech32`?1:734539939,n=X(5),r=n.decode,i=n.encode,a=Pe(r);function o(e,n,r=90){I(`bech32.encode prefix`,e),N(n)&&(n=Array.from(n)),B(`bech32.encode`,n);let i=e.length;if(i===0)throw TypeError(`Invalid prefix length ${i}`);let a=i+7+n.length;if(r!==!1&&a>r)throw TypeError(`Length ${a} exceeds limit ${r}`);let o=e.toLowerCase(),s=Re(o,n,t);return`${o}1${Z.encode(n)}${s}`}function s(e,n=90){I(`bech32.decode input`,e);let r=e.length;if(r<8||n!==!1&&r>n)throw TypeError(`invalid string length: ${r} (${e}). Expected (8..${n})`);let i=e.toLowerCase();if(e!==i&&e!==e.toUpperCase())throw Error(`String must be lowercase or uppercase`);let a=i.lastIndexOf(`1`);if(a===0||a===-1)throw Error(`Letter "1" must be present between prefix and data only`);let o=i.slice(0,a),s=i.slice(a+1);if(s.length<6)throw Error(`Data must be at least 6 characters long`);let c=Z.decode(s).slice(0,-6),l=Re(o,c,t);if(!s.endsWith(l))throw Error(`Invalid checksum in ${e}: expected "${l}"`);return{prefix:o,words:c}}let c=Pe(s);function l(e){let{prefix:t,words:n}=s(e,!1);return{prefix:t,words:n,bytes:r(n)}}function u(e,t){return o(e,i(t))}return{encode:o,decode:s,encodeFromBytes:u,decodeToBytes:l,decodeUnsafe:c,fromWords:r,fromWordsUnsafe:a,toWords:i}}ze(`bech32`),ze(`bech32m`),typeof Uint8Array.from([]).toHex==`function`&&typeof Uint8Array.fromHex==`function`||V(X(4),H(`0123456789abcdef`),U(``),G(e=>{if(typeof e!=`string`||e.length%2!=0)throw TypeError(`hex.decode: expected string, got ${typeof e} with length ${e.length}`);return e.toLowerCase()}));function Be(e){try{return Ie.decode(e)}catch(e){let t=e instanceof Error?e.message:String(e);throw Error(`Invalid Base58: ${t}`)}}function $(e){let t=e.slice(2).toLowerCase(),n=M(t),r=`0x`;for(let e=0;e<t.length;e++){let i=t[e],a=n[e];!i||!a||(i>=`a`&&i<=`f`?r+=parseInt(a,16)>=8?i.toUpperCase():i:r+=i)}return r}function Ve(e){return e===$(e)}let He=/^0x[0-9a-fA-F]{40}$/;function Ue(e,n){if(!He.test(e))return[{code:t.INVALID_EVM_ADDRESS,field:n,message:`EVM address must be 42 hex characters with 0x prefix`,severity:`error`,fix:`Format: 0x followed by 40 hex digits (0-9, a-f, A-F)`}];let r=e.slice(2);return e===e.toLowerCase()&&/[a-f]/.test(r)?[{code:t.NO_EVM_CHECKSUM,field:n,message:`EVM address is all-lowercase with no checksum protection`,severity:`warning`,fix:`Use checksummed address to detect typos: ${$(e)}`}]:/^[0-9A-F]{40}$/.test(r)&&/[A-F]/.test(r)||/^[0-9]{40}$/.test(r)||Ve(e)?[]:[{code:t.BAD_EVM_CHECKSUM,field:n,message:`EVM address has invalid checksum (EIP-55)`,severity:`warning`,fix:`Expected: ${$(e)}`}]}let We=/^[1-9A-HJ-NP-Za-km-z]{32,44}$/;function Ge(e,n){if(!We.test(e))return[{code:t.INVALID_SOLANA_ADDRESS,field:n,message:`Solana address must be 32-44 Base58 characters`,severity:`error`,fix:`Valid characters: 1-9, A-H, J-N, P-Z, a-k, m-z (no 0, O, I, l)`}];try{let r=Be(e);if(r.length!==32)return[{code:t.INVALID_SOLANA_ADDRESS,field:n,message:`Solana address must decode to 32 bytes, got ${r.length}`,severity:`error`,fix:`Verify address is a valid Solana public key`}]}catch(e){return[{code:t.INVALID_SOLANA_ADDRESS,field:n,message:`Invalid Base58 encoding`,severity:`error`,fix:e instanceof Error?e.message:`Check Base58 encoding`}]}return[]}function Ke(e,t,n){let r=l(t);if(r===void 0)return[];switch(r){case`eip155`:return Ue(e,n);case`solana`:return Ge(e,n);case`stellar`:case`aptos`:return[];default:return[]}}function qe(e){let i=[],{parsed:a,error:o}=r(e);if(o)return{parsed:null,format:`unknown`,issues:[o]};if(!m(a))return i.push({code:t.NOT_OBJECT,field:`$`,message:n.NOT_OBJECT,severity:`error`}),{parsed:null,format:`unknown`,issues:i};let s=g(a);return s===`unknown`&&i.push({code:t.UNKNOWN_FORMAT,field:`$`,message:n.UNKNOWN_FORMAT,severity:`error`}),{parsed:a,format:s,issues:i}}function Je(e,r){let i=[],a=e.x402Version;return a!==1&&a!==2&&i.push({code:t.INVALID_VERSION,field:`x402Version`,message:n.INVALID_VERSION,severity:`error`}),i}function Ye(e,r){let i=[];return e.scheme||i.push({code:t.MISSING_SCHEME,field:`${r}.scheme`,message:n.MISSING_SCHEME,severity:`error`}),e.network||i.push({code:t.MISSING_NETWORK,field:`${r}.network`,message:n.MISSING_NETWORK,severity:`error`}),e.amount||i.push({code:t.MISSING_AMOUNT,field:`${r}.amount`,message:n.MISSING_AMOUNT,severity:`error`}),e.asset||i.push({code:t.MISSING_ASSET,field:`${r}.asset`,message:n.MISSING_ASSET,severity:`error`}),e.payTo||i.push({code:t.MISSING_PAY_TO,field:`${r}.payTo`,message:n.MISSING_PAY_TO,severity:`error`}),i}function Xe(e){let r=[];return Array.isArray(e.accepts)?(e.accepts.length===0&&r.push({code:t.EMPTY_ACCEPTS,field:`accepts`,message:n.EMPTY_ACCEPTS,severity:`error`}),r):(r.push({code:t.INVALID_ACCEPTS,field:`accepts`,message:n.INVALID_ACCEPTS,severity:`error`}),r)}function Ze(e,r){let i=[];if(!e.resource)return r===`v2`&&i.push({code:t.MISSING_RESOURCE,field:`resource`,message:n.MISSING_RESOURCE,severity:`warning`}),i;if(!e.resource.url)return i.push({code:t.MISSING_RESOURCE,field:`resource.url`,message:n.MISSING_RESOURCE,severity:`warning`}),i;try{new URL(e.resource.url)}catch{i.push({code:t.INVALID_URL,field:`resource.url`,message:`resource.url is not a valid URL format`,severity:`warning`})}return i}function Qe(e,r){let i=[];if(!e.network)return i;if(!o(e.network)){let a=p(e.network);return a?i.push({code:t.INVALID_NETWORK_FORMAT,field:`${r}.network`,message:n.INVALID_NETWORK_FORMAT,severity:`error`,fix:`Use '${a}' instead of '${e.network}'`}):i.push({code:t.INVALID_NETWORK_FORMAT,field:`${r}.network`,message:n.INVALID_NETWORK_FORMAT,severity:`error`}),i}return s(e.network)||i.push({code:t.UNKNOWN_NETWORK,field:`${r}.network`,message:n.UNKNOWN_NETWORK,severity:`warning`}),i}function $e(e,r){let i=[];return e.asset&&e.network&&o(e.network)&&!d(e.network,e.asset)&&i.push({code:t.UNKNOWN_ASSET,field:`${r}.asset`,message:n.UNKNOWN_ASSET,severity:`warning`}),i}function et(e,r){let i=[];return e.amount?/^\d+$/.test(e.amount)?(e.amount===`0`&&i.push({code:t.ZERO_AMOUNT,field:`${r}.amount`,message:n.ZERO_AMOUNT,severity:`error`}),i):(i.push({code:t.INVALID_AMOUNT,field:`${r}.amount`,message:n.INVALID_AMOUNT,severity:`error`}),i):i}function tt(e,r,i){let a=[];return e.maxTimeoutSeconds===void 0?(i===`v2`&&a.push({code:t.MISSING_MAX_TIMEOUT,field:`${r}.maxTimeoutSeconds`,message:n.MISSING_MAX_TIMEOUT,severity:`warning`}),a):typeof e.maxTimeoutSeconds!=`number`||!Number.isInteger(e.maxTimeoutSeconds)?(a.push({code:t.INVALID_TIMEOUT,field:`${r}.maxTimeoutSeconds`,message:n.INVALID_TIMEOUT,severity:`error`}),a):(e.maxTimeoutSeconds<=0&&a.push({code:t.INVALID_TIMEOUT,field:`${r}.maxTimeoutSeconds`,message:n.INVALID_TIMEOUT,severity:`error`}),a)}function nt(e,r,i){let a=[];return r===`v1`&&a.push({code:t.LEGACY_FORMAT,field:`$`,message:n.LEGACY_FORMAT,severity:`warning`,fix:`Upgrade to x402 v2 -- use amount instead of maxAmountRequired, add resource object`}),a}function rt(e,n){try{return it(e,n)}catch{return{valid:!1,version:`unknown`,errors:[{code:t.UNKNOWN_FORMAT,field:`$`,message:`Unexpected validation error`,severity:`error`}],warnings:[],normalized:null}}}function it(e,r){let i=qe(e);if(i.issues.length>0)return{valid:!1,version:i.format||`unknown`,errors:i.issues,warnings:[],normalized:null};let a=i.parsed,o=i.format,s=_(a);if(s===null)return{valid:!1,version:o,errors:[{code:t.UNKNOWN_FORMAT,field:`$`,message:n.UNKNOWN_FORMAT,severity:`error`}],warnings:[],normalized:null};let c=[],l=[];if(c.push(...Je(s,o)),c.push(...Xe(s)),l.push(...Ze(s,o)),Array.isArray(s.accepts)&&s.accepts.length>0)for(let e=0;e<s.accepts.length;e++){let t=s.accepts[e],n=`accepts[${e}]`;c.push(...Ye(t,n));for(let e of Qe(t,n))e.severity===`error`?c.push(e):l.push(e);l.push(...$e(t,n)),c.push(...et(t,n));for(let e of tt(t,n,o))e.severity===`error`?c.push(e):l.push(e);if(t.payTo&&t.network)for(let e of Ke(t.payTo,t.network,`${n}.payTo`))e.severity===`error`?c.push(e):l.push(e)}if(l.push(...nt(s,o,a)),r?.strict===!0){for(let e of l)c.push({...e,severity:`error`});l.length=0}return{valid:c.length===0,version:o,errors:c,warnings:l,normalized:s}}return e.CAIP2_REGEX=i,e.ErrorCode=t,e.ErrorMessages=n,e.KNOWN_ASSETS=u,e.KNOWN_NETWORKS=a,e.SIMPLE_NAME_TO_CAIP2=f,e.VERSION=`0.0.1`,e.decodeBase58=Be,e.detect=g,e.getAssetInfo=ee,e.getCanonicalNetwork=p,e.getNetworkInfo=c,e.getNetworkNamespace=l,e.isKnownAsset=d,e.isKnownNetwork=s,e.isValidCaip2=o,e.isValidChecksum=Ve,e.keccak256=M,e.normalize=_,e.parseInput=r,e.toChecksumAddress=$,e.validate=rt,e.validateAddress=Ke,e.validateEvmAddress=Ue,e.validateSolanaAddress=Ge,e})({});
|
|
5
|
+
function M(e){return e instanceof Uint8Array||ArrayBuffer.isView(e)&&e.constructor.name===`Uint8Array`}function N(e,t){return Array.isArray(t)?t.length===0?!0:e?t.every(e=>typeof e==`string`):t.every(e=>Number.isSafeInteger(e)):!1}function P(e){if(typeof e!=`function`)throw Error(`function expected`);return!0}function F(e,t){if(typeof t!=`string`)throw Error(`${e}: string expected`);return!0}function I(e){if(!Number.isSafeInteger(e))throw Error(`invalid integer: ${e}`)}function L(e){if(!Array.isArray(e))throw Error(`array expected`)}function R(e,t){if(!N(!0,t))throw Error(`${e}: array of strings expected`)}function z(e,t){if(!N(!1,t))throw Error(`${e}: array of numbers expected`)}function B(...e){let t=e=>e,n=(e,t)=>n=>e(t(n));return{encode:e.map(e=>e.encode).reduceRight(n,t),decode:e.map(e=>e.decode).reduce(n,t)}}function V(e){let t=typeof e==`string`?e.split(``):e,n=t.length;R(`alphabet`,t);let r=new Map(t.map((e,t)=>[e,t]));return{encode:r=>(L(r),r.map(r=>{if(!Number.isSafeInteger(r)||r<0||r>=n)throw Error(`alphabet.encode: digit index outside alphabet "${r}". Allowed: ${e}`);return t[r]})),decode:t=>(L(t),t.map(t=>{F(`alphabet.decode`,t);let n=r.get(t);if(n===void 0)throw Error(`Unknown letter: "${t}". Allowed: ${e}`);return n}))}}function H(e=``){return F(`join`,e),{encode:t=>(R(`join.decode`,t),t.join(e)),decode:t=>(F(`join.decode`,t),t.split(e))}}function U(e,t=`=`){return I(e),F(`padding`,t),{encode(n){for(R(`padding.encode`,n);n.length*e%8;)n.push(t);return n},decode(n){R(`padding.decode`,n);let r=n.length;if(r*e%8)throw Error(`padding: invalid, string should have whole number of bytes`);for(;r>0&&n[r-1]===t;r--)if((r-1)*e%8==0)throw Error(`padding: invalid, string has too much padding`);return n.slice(0,r)}}}function W(e){return P(e),{encode:e=>e,decode:t=>e(t)}}function G(e,t,n){if(t<2)throw Error(`convertRadix: invalid from=${t}, base cannot be less than 2`);if(n<2)throw Error(`convertRadix: invalid to=${n}, base cannot be less than 2`);if(L(e),!e.length)return[];let r=0,i=[],a=Array.from(e,e=>{if(I(e),e<0||e>=t)throw Error(`invalid integer: ${e}`);return e}),o=a.length;for(;;){let e=0,s=!0;for(let i=r;i<o;i++){let o=a[i],c=t*e,l=c+o;if(!Number.isSafeInteger(l)||c/t!==e||l-o!==c)throw Error(`convertRadix: carry overflow`);let u=l/n;e=l%n;let d=Math.floor(u);if(a[i]=d,!Number.isSafeInteger(d)||d*n+e!==l)throw Error(`convertRadix: carry overflow`);if(s)d?s=!1:r=i;else continue}if(i.push(e),s)break}for(let t=0;t<e.length-1&&e[t]===0;t++)i.push(0);return i.reverse()}let Ne=(e,t)=>t===0?e:Ne(t,e%t),K=(e,t)=>e+(t-Ne(e,t)),q=(()=>{let e=[];for(let t=0;t<40;t++)e.push(2**t);return e})();function J(e,t,n,r){if(L(e),t<=0||t>32)throw Error(`convertRadix2: wrong from=${t}`);if(n<=0||n>32)throw Error(`convertRadix2: wrong to=${n}`);if(K(t,n)>32)throw Error(`convertRadix2: carry overflow from=${t} to=${n} carryBits=${K(t,n)}`);let i=0,a=0,o=q[t],s=q[n]-1,c=[];for(let r of e){if(I(r),r>=o)throw Error(`convertRadix2: invalid data word=${r} from=${t}`);if(i=i<<t|r,a+t>32)throw Error(`convertRadix2: carry overflow pos=${a} from=${t}`);for(a+=t;a>=n;a-=n)c.push((i>>a-n&s)>>>0);let e=q[a];if(e===void 0)throw Error(`invalid carry`);i&=e-1}if(i=i<<n-a&s,!r&&a>=t)throw Error(`Excess padding`);if(!r&&i>0)throw Error(`Non-zero padding: ${i}`);return r&&a>0&&c.push(i>>>0),c}function Pe(e){return I(e),{encode:t=>{if(!M(t))throw Error(`radix.encode input should be Uint8Array`);return G(Array.from(t),256,e)},decode:t=>(z(`radix.decode`,t),Uint8Array.from(G(t,e,256)))}}function Y(e,t=!1){if(I(e),e<=0||e>32)throw Error(`radix2: bits should be in (0..32]`);if(K(8,e)>32||K(e,8)>32)throw Error(`radix2: carry overflow`);return{encode:n=>{if(!M(n))throw Error(`radix2.encode input should be Uint8Array`);return J(Array.from(n),8,e,!t)},decode:n=>(z(`radix2.decode`,n),Uint8Array.from(J(n,e,8,t)))}}function Fe(e){return P(e),function(...t){try{return e.apply(null,t)}catch{}}}B(Y(4),V(`0123456789ABCDEF`),H(``)),B(Y(5),V(`ABCDEFGHIJKLMNOPQRSTUVWXYZ234567`),U(5),H(``)),B(Y(5),V(`ABCDEFGHIJKLMNOPQRSTUVWXYZ234567`),H(``)),B(Y(5),V(`0123456789ABCDEFGHIJKLMNOPQRSTUV`),U(5),H(``)),B(Y(5),V(`0123456789ABCDEFGHIJKLMNOPQRSTUV`),H(``)),B(Y(5),V(`0123456789ABCDEFGHJKMNPQRSTVWXYZ`),H(``),W(e=>e.toUpperCase().replace(/O/g,`0`).replace(/[IL]/g,`1`)));let Ie=typeof Uint8Array.from([]).toBase64==`function`&&typeof Uint8Array.fromBase64==`function`;Ie||B(Y(6),V(`ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/`),U(6),H(``)),B(Y(6),V(`ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/`),H(``)),Ie||B(Y(6),V(`ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_`),U(6),H(``)),B(Y(6),V(`ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_`),H(``));let Le=(e=>B(Pe(58),V(e),H(``)))(`123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz`),X=B(V(`qpzry9x8gf2tvdw0s3jn54khce6mua7l`),H(``)),Re=[996825010,642813549,513874426,1027748829,705979059];function Z(e){let t=e>>25,n=(e&33554431)<<5;for(let e=0;e<Re.length;e++)(t>>e&1)==1&&(n^=Re[e]);return n}function ze(e,t,n=1){let r=e.length,i=1;for(let t=0;t<r;t++){let n=e.charCodeAt(t);if(n<33||n>126)throw Error(`Invalid prefix (${e})`);i=Z(i)^n>>5}i=Z(i);for(let t=0;t<r;t++)i=Z(i)^e.charCodeAt(t)&31;for(let e of t)i=Z(i)^e;for(let e=0;e<6;e++)i=Z(i);return i^=n,X.encode(J([i%q[30]],30,5,!1))}function Be(e){let t=e===`bech32`?1:734539939,n=Y(5),r=n.decode,i=n.encode,a=Fe(r);function o(e,n,r=90){F(`bech32.encode prefix`,e),M(n)&&(n=Array.from(n)),z(`bech32.encode`,n);let i=e.length;if(i===0)throw TypeError(`Invalid prefix length ${i}`);let a=i+7+n.length;if(r!==!1&&a>r)throw TypeError(`Length ${a} exceeds limit ${r}`);let o=e.toLowerCase(),s=ze(o,n,t);return`${o}1${X.encode(n)}${s}`}function s(e,n=90){F(`bech32.decode input`,e);let r=e.length;if(r<8||n!==!1&&r>n)throw TypeError(`invalid string length: ${r} (${e}). Expected (8..${n})`);let i=e.toLowerCase();if(e!==i&&e!==e.toUpperCase())throw Error(`String must be lowercase or uppercase`);let a=i.lastIndexOf(`1`);if(a===0||a===-1)throw Error(`Letter "1" must be present between prefix and data only`);let o=i.slice(0,a),s=i.slice(a+1);if(s.length<6)throw Error(`Data must be at least 6 characters long`);let c=X.decode(s).slice(0,-6),l=ze(o,c,t);if(!s.endsWith(l))throw Error(`Invalid checksum in ${e}: expected "${l}"`);return{prefix:o,words:c}}let c=Fe(s);function l(e){let{prefix:t,words:n}=s(e,!1);return{prefix:t,words:n,bytes:r(n)}}function u(e,t){return o(e,i(t))}return{encode:o,decode:s,encodeFromBytes:u,decodeToBytes:l,decodeUnsafe:c,fromWords:r,fromWordsUnsafe:a,toWords:i}}Be(`bech32`),Be(`bech32m`),typeof Uint8Array.from([]).toHex==`function`&&typeof Uint8Array.fromHex==`function`||B(Y(4),V(`0123456789abcdef`),H(``),W(e=>{if(typeof e!=`string`||e.length%2!=0)throw TypeError(`hex.decode: expected string, got ${typeof e} with length ${e.length}`);return e.toLowerCase()}));function Ve(e){try{return Le.decode(e)}catch(e){let t=e instanceof Error?e.message:String(e);throw Error(`Invalid Base58: ${t}`)}}function Q(e){let t=e.slice(2).toLowerCase(),n=j(t),r=`0x`;for(let e=0;e<t.length;e++){let i=t[e],a=n[e];!i||!a||(i>=`a`&&i<=`f`?r+=parseInt(a,16)>=8?i.toUpperCase():i:r+=i)}return r}function He(e){return e===Q(e)}let Ue=/^0x[0-9a-fA-F]{40}$/;function We(e,n){if(!Ue.test(e))return[{code:t.INVALID_EVM_ADDRESS,field:n,message:`EVM address must be 42 hex characters with 0x prefix`,severity:`error`,fix:`Format: 0x followed by 40 hex digits (0-9, a-f, A-F)`}];let r=e.slice(2);return e===e.toLowerCase()&&/[a-f]/.test(r)?[{code:t.NO_EVM_CHECKSUM,field:n,message:`EVM address is all-lowercase with no checksum protection`,severity:`warning`,fix:`Use checksummed address to detect typos: ${Q(e)}`}]:/^[0-9A-F]{40}$/.test(r)&&/[A-F]/.test(r)||/^[0-9]{40}$/.test(r)||He(e)?[]:[{code:t.BAD_EVM_CHECKSUM,field:n,message:`EVM address has invalid checksum (EIP-55)`,severity:`warning`,fix:`Expected: ${Q(e)}`}]}let Ge=/^[1-9A-HJ-NP-Za-km-z]{32,44}$/;function Ke(e,n){if(!Ge.test(e))return[{code:t.INVALID_SOLANA_ADDRESS,field:n,message:`Solana address must be 32-44 Base58 characters`,severity:`error`,fix:`Valid characters: 1-9, A-H, J-N, P-Z, a-k, m-z (no 0, O, I, l)`}];try{let r=Ve(e);if(r.length!==32)return[{code:t.INVALID_SOLANA_ADDRESS,field:n,message:`Solana address must decode to 32 bytes, got ${r.length}`,severity:`error`,fix:`Verify address is a valid Solana public key`}]}catch(e){return[{code:t.INVALID_SOLANA_ADDRESS,field:n,message:`Invalid Base58 encoding`,severity:`error`,fix:e instanceof Error?e.message:`Check Base58 encoding`}]}return[]}function qe(e,t,n){let r=l(t);if(r===void 0)return[];switch(r){case`eip155`:return We(e,n);case`solana`:return Ke(e,n);case`stellar`:case`aptos`:return[];default:return[]}}function Je(e){let i=[],{parsed:a,error:o}=r(e);if(o)return{parsed:null,format:`unknown`,issues:[o]};if(!m(a))return i.push({code:t.NOT_OBJECT,field:`$`,message:n.NOT_OBJECT,severity:`error`}),{parsed:null,format:`unknown`,issues:i};let s=g(a);return s===`unknown`&&i.push({code:t.UNKNOWN_FORMAT,field:`$`,message:n.UNKNOWN_FORMAT,severity:`error`}),{parsed:a,format:s,issues:i}}function Ye(e,r){let i=[],a=e.x402Version;return a!==1&&a!==2&&i.push({code:t.INVALID_VERSION,field:`x402Version`,message:n.INVALID_VERSION,severity:`error`}),i}function Xe(e,r){let i=[];return e.scheme||i.push({code:t.MISSING_SCHEME,field:`${r}.scheme`,message:n.MISSING_SCHEME,severity:`error`}),e.network||i.push({code:t.MISSING_NETWORK,field:`${r}.network`,message:n.MISSING_NETWORK,severity:`error`}),e.amount||i.push({code:t.MISSING_AMOUNT,field:`${r}.amount`,message:n.MISSING_AMOUNT,severity:`error`}),e.asset||i.push({code:t.MISSING_ASSET,field:`${r}.asset`,message:n.MISSING_ASSET,severity:`error`}),e.payTo||i.push({code:t.MISSING_PAY_TO,field:`${r}.payTo`,message:n.MISSING_PAY_TO,severity:`error`}),i}function Ze(e){let r=[];return Array.isArray(e.accepts)?(e.accepts.length===0&&r.push({code:t.EMPTY_ACCEPTS,field:`accepts`,message:n.EMPTY_ACCEPTS,severity:`error`}),r):(r.push({code:t.INVALID_ACCEPTS,field:`accepts`,message:n.INVALID_ACCEPTS,severity:`error`}),r)}function Qe(e,r){let i=[];if(!e.resource)return r===`v2`&&i.push({code:t.MISSING_RESOURCE,field:`resource`,message:n.MISSING_RESOURCE,severity:`warning`}),i;if(!e.resource.url)return i.push({code:t.MISSING_RESOURCE,field:`resource.url`,message:n.MISSING_RESOURCE,severity:`warning`}),i;try{new URL(e.resource.url)}catch{i.push({code:t.INVALID_URL,field:`resource.url`,message:`resource.url is not a valid URL format`,severity:`warning`})}return i}function $e(e,r){let i=[];if(!e.network)return i;if(!o(e.network)){let a=p(e.network);return a?i.push({code:t.INVALID_NETWORK_FORMAT,field:`${r}.network`,message:n.INVALID_NETWORK_FORMAT,severity:`error`,fix:`Use '${a}' instead of '${e.network}'`}):i.push({code:t.INVALID_NETWORK_FORMAT,field:`${r}.network`,message:n.INVALID_NETWORK_FORMAT,severity:`error`}),i}return s(e.network)||i.push({code:t.UNKNOWN_NETWORK,field:`${r}.network`,message:n.UNKNOWN_NETWORK,severity:`warning`}),i}function et(e,r){let i=[];return e.asset&&e.network&&o(e.network)&&!d(e.network,e.asset)&&i.push({code:t.UNKNOWN_ASSET,field:`${r}.asset`,message:n.UNKNOWN_ASSET,severity:`warning`}),i}function tt(e,r){let i=[];return e.amount?/^\d+$/.test(e.amount)?(e.amount===`0`&&i.push({code:t.ZERO_AMOUNT,field:`${r}.amount`,message:n.ZERO_AMOUNT,severity:`error`}),i):(i.push({code:t.INVALID_AMOUNT,field:`${r}.amount`,message:n.INVALID_AMOUNT,severity:`error`}),i):i}function nt(e,r,i){let a=[];return e.maxTimeoutSeconds===void 0?(i===`v2`&&a.push({code:t.MISSING_MAX_TIMEOUT,field:`${r}.maxTimeoutSeconds`,message:n.MISSING_MAX_TIMEOUT,severity:`warning`}),a):typeof e.maxTimeoutSeconds!=`number`||!Number.isInteger(e.maxTimeoutSeconds)?(a.push({code:t.INVALID_TIMEOUT,field:`${r}.maxTimeoutSeconds`,message:n.INVALID_TIMEOUT,severity:`error`}),a):(e.maxTimeoutSeconds<=0&&a.push({code:t.INVALID_TIMEOUT,field:`${r}.maxTimeoutSeconds`,message:n.INVALID_TIMEOUT,severity:`error`}),a)}function rt(e,r,i){let a=[];return r===`v1`&&a.push({code:t.LEGACY_FORMAT,field:`$`,message:n.LEGACY_FORMAT,severity:`warning`,fix:`Upgrade to x402 v2 -- use amount instead of maxAmountRequired, add resource object`}),a}function it(e,n){try{return at(e,n)}catch{return{valid:!1,version:`unknown`,errors:[{code:t.UNKNOWN_FORMAT,field:`$`,message:`Unexpected validation error`,severity:`error`}],warnings:[],normalized:null}}}function at(e,r){let i=Je(e);if(i.issues.length>0)return{valid:!1,version:i.format||`unknown`,errors:i.issues,warnings:[],normalized:null};let a=i.parsed,o=i.format,s=_(a);if(s===null)return{valid:!1,version:o,errors:[{code:t.UNKNOWN_FORMAT,field:`$`,message:n.UNKNOWN_FORMAT,severity:`error`}],warnings:[],normalized:null};let c=[],l=[];if(c.push(...Ye(s,o)),c.push(...Ze(s)),l.push(...Qe(s,o)),Array.isArray(s.accepts)&&s.accepts.length>0)for(let e=0;e<s.accepts.length;e++){let t=s.accepts[e],n=`accepts[${e}]`;c.push(...Xe(t,n));for(let e of $e(t,n))e.severity===`error`?c.push(e):l.push(e);l.push(...et(t,n)),c.push(...tt(t,n));for(let e of nt(t,n,o))e.severity===`error`?c.push(e):l.push(e);if(t.payTo&&t.network)for(let e of qe(t.payTo,t.network,`${n}.payTo`))e.severity===`error`?c.push(e):l.push(e)}if(l.push(...rt(s,o,a)),r?.strict===!0){for(let e of l)c.push({...e,severity:`error`});l.length=0}return{valid:c.length===0,version:o,errors:c,warnings:l,normalized:s}}function ot(e,t){if(!e)return null;if(typeof e.get==`function`)return e.get(t);let n=t.toLowerCase();for(let t of Object.keys(e))if(t.toLowerCase()===n)return e[t];return null}function st(e){return typeof atob==`function`?atob(e):Buffer.from(e,`base64`).toString(`utf-8`)}function $(e){if(!e||typeof e!=`object`)return!1;let t=e;return!!(t.accepts||t.payTo||t.x402Version)}function ct(e){let t=ot(e,`payment-required`);if(!t)return null;try{let e=st(t),n=JSON.parse(e);if(n&&typeof n==`object`&&!Array.isArray(n))return{config:n,source:`header`}}catch{}try{let e=JSON.parse(t);if(e&&typeof e==`object`&&!Array.isArray(e))return{config:e,source:`header`}}catch{}return null}function lt(e){let t=e.body;if(t&&typeof t==`object`&&!Array.isArray(t)&&$(t))return{config:t,source:`body`,error:null};if(typeof t==`string`&&t.trim())try{let e=JSON.parse(t);if(e&&typeof e==`object`&&!Array.isArray(e)&&$(e))return{config:e,source:`body`,error:null}}catch{}let n=ct(e.headers);return n?{config:n.config,source:n.source,error:null}:{config:null,source:null,error:`No x402 config found in response body or PAYMENT-REQUIRED header`}}return e.CAIP2_REGEX=i,e.ErrorCode=t,e.ErrorMessages=n,e.KNOWN_ASSETS=u,e.KNOWN_NETWORKS=a,e.SIMPLE_NAME_TO_CAIP2=f,e.VERSION=`0.1.0`,e.decodeBase58=Ve,e.detect=g,e.extractConfig=lt,e.getAssetInfo=ee,e.getCanonicalNetwork=p,e.getNetworkInfo=c,e.getNetworkNamespace=l,e.isKnownAsset=d,e.isKnownNetwork=s,e.isValidCaip2=o,e.isValidChecksum=He,e.keccak256=j,e.normalize=_,e.parseInput=r,e.toChecksumAddress=Q,e.validate=it,e.validateAddress=qe,e.validateEvmAddress=We,e.validateSolanaAddress=Ke,e})({});
|
package/dist/index.js
CHANGED
|
@@ -1822,10 +1822,102 @@ function runPipeline(input, options) {
|
|
|
1822
1822
|
};
|
|
1823
1823
|
}
|
|
1824
1824
|
|
|
1825
|
+
//#endregion
|
|
1826
|
+
//#region src/extraction/extract.ts
|
|
1827
|
+
/**
|
|
1828
|
+
* Get a header value, case-insensitive.
|
|
1829
|
+
* Supports both Headers objects and plain Record<string, string>.
|
|
1830
|
+
*/
|
|
1831
|
+
function getHeader(headers, name) {
|
|
1832
|
+
if (!headers) return null;
|
|
1833
|
+
if (typeof headers.get === "function") return headers.get(name);
|
|
1834
|
+
const lower = name.toLowerCase();
|
|
1835
|
+
for (const key of Object.keys(headers)) if (key.toLowerCase() === lower) return headers[key];
|
|
1836
|
+
return null;
|
|
1837
|
+
}
|
|
1838
|
+
/**
|
|
1839
|
+
* Decode base64 string to UTF-8 text.
|
|
1840
|
+
* Works in both browser (atob) and Node (Buffer).
|
|
1841
|
+
*/
|
|
1842
|
+
function decodeBase64(encoded) {
|
|
1843
|
+
if (typeof atob === "function") return atob(encoded);
|
|
1844
|
+
return Buffer.from(encoded, "base64").toString("utf-8");
|
|
1845
|
+
}
|
|
1846
|
+
/**
|
|
1847
|
+
* Check if a parsed object looks like it contains x402 config fields.
|
|
1848
|
+
*/
|
|
1849
|
+
function hasX402Fields(obj) {
|
|
1850
|
+
if (!obj || typeof obj !== "object") return false;
|
|
1851
|
+
const rec = obj;
|
|
1852
|
+
return !!(rec.accepts || rec.payTo || rec.x402Version);
|
|
1853
|
+
}
|
|
1854
|
+
/**
|
|
1855
|
+
* Try to parse the PAYMENT-REQUIRED header value as a base64-encoded JSON config.
|
|
1856
|
+
*/
|
|
1857
|
+
function tryHeaderExtraction(headers) {
|
|
1858
|
+
const headerValue = getHeader(headers, "payment-required");
|
|
1859
|
+
if (!headerValue) return null;
|
|
1860
|
+
try {
|
|
1861
|
+
const decoded = decodeBase64(headerValue);
|
|
1862
|
+
const parsed = JSON.parse(decoded);
|
|
1863
|
+
if (parsed && typeof parsed === "object" && !Array.isArray(parsed)) return {
|
|
1864
|
+
config: parsed,
|
|
1865
|
+
source: "header"
|
|
1866
|
+
};
|
|
1867
|
+
} catch {}
|
|
1868
|
+
try {
|
|
1869
|
+
const parsed = JSON.parse(headerValue);
|
|
1870
|
+
if (parsed && typeof parsed === "object" && !Array.isArray(parsed)) return {
|
|
1871
|
+
config: parsed,
|
|
1872
|
+
source: "header"
|
|
1873
|
+
};
|
|
1874
|
+
} catch {}
|
|
1875
|
+
return null;
|
|
1876
|
+
}
|
|
1877
|
+
/**
|
|
1878
|
+
* Extract an x402 config from an HTTP 402 response.
|
|
1879
|
+
*
|
|
1880
|
+
* Extraction priority:
|
|
1881
|
+
* 1. JSON body — if it parses and has x402 fields (accepts, payTo, x402Version)
|
|
1882
|
+
* 2. PAYMENT-REQUIRED header — base64-decoded JSON fallback
|
|
1883
|
+
*
|
|
1884
|
+
* Never throws. Returns structured result with error message on failure.
|
|
1885
|
+
*
|
|
1886
|
+
* @param response - Response-like object with body and/or headers
|
|
1887
|
+
* @returns Extraction result with config, source, and error
|
|
1888
|
+
*/
|
|
1889
|
+
function extractConfig(response) {
|
|
1890
|
+
const body = response.body;
|
|
1891
|
+
if (body && typeof body === "object" && !Array.isArray(body) && hasX402Fields(body)) return {
|
|
1892
|
+
config: body,
|
|
1893
|
+
source: "body",
|
|
1894
|
+
error: null
|
|
1895
|
+
};
|
|
1896
|
+
if (typeof body === "string" && body.trim()) try {
|
|
1897
|
+
const parsed = JSON.parse(body);
|
|
1898
|
+
if (parsed && typeof parsed === "object" && !Array.isArray(parsed) && hasX402Fields(parsed)) return {
|
|
1899
|
+
config: parsed,
|
|
1900
|
+
source: "body",
|
|
1901
|
+
error: null
|
|
1902
|
+
};
|
|
1903
|
+
} catch {}
|
|
1904
|
+
const headerResult = tryHeaderExtraction(response.headers);
|
|
1905
|
+
if (headerResult) return {
|
|
1906
|
+
config: headerResult.config,
|
|
1907
|
+
source: headerResult.source,
|
|
1908
|
+
error: null
|
|
1909
|
+
};
|
|
1910
|
+
return {
|
|
1911
|
+
config: null,
|
|
1912
|
+
source: null,
|
|
1913
|
+
error: "No x402 config found in response body or PAYMENT-REQUIRED header"
|
|
1914
|
+
};
|
|
1915
|
+
}
|
|
1916
|
+
|
|
1825
1917
|
//#endregion
|
|
1826
1918
|
//#region src/index.ts
|
|
1827
|
-
const VERSION = "0.0
|
|
1919
|
+
const VERSION = "0.1.0";
|
|
1828
1920
|
|
|
1829
1921
|
//#endregion
|
|
1830
|
-
export { CAIP2_REGEX, ErrorCode, ErrorMessages, KNOWN_ASSETS, KNOWN_NETWORKS, SIMPLE_NAME_TO_CAIP2, VERSION, decodeBase58, detect, getAssetInfo, getCanonicalNetwork, getNetworkInfo, getNetworkNamespace, isKnownAsset, isKnownNetwork, isValidCaip2, isValidChecksum, keccak256, normalize, parseInput, toChecksumAddress, validate, validateAddress, validateEvmAddress, validateSolanaAddress };
|
|
1922
|
+
export { CAIP2_REGEX, ErrorCode, ErrorMessages, KNOWN_ASSETS, KNOWN_NETWORKS, SIMPLE_NAME_TO_CAIP2, VERSION, decodeBase58, detect, extractConfig, getAssetInfo, getCanonicalNetwork, getNetworkInfo, getNetworkNamespace, isKnownAsset, isKnownNetwork, isValidCaip2, isValidChecksum, keccak256, normalize, parseInput, toChecksumAddress, validate, validateAddress, validateEvmAddress, validateSolanaAddress };
|
|
1831
1923
|
//# sourceMappingURL=index.js.map
|