@armory-sh/base 0.2.30 → 0.2.31

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.d.ts CHANGED
@@ -12,7 +12,7 @@ export type { FacilitatorClientConfig, SupportedKind, SupportedResponse, } from
12
12
  export { decodePayloadHeader, extractPayerAddress, getSupported, settlePayment, verifyPayment, } from "./payment-client";
13
13
  export { clearFacilitatorCapabilityCache, filterExtensionsForFacilitator, filterExtensionsForFacilitators, filterExtensionsForRequirements, } from "./facilitator-capabilities";
14
14
  export type { PaymentConfig, ResolvedRequirementsConfig, } from "./payment-requirements";
15
- export { createPaymentRequirements, findRequirementByAccepted, findRequirementByNetwork, resolveFacilitatorUrlFromRequirement, } from "./payment-requirements";
15
+ export { createPaymentRequirements, enrichPaymentRequirement, enrichPaymentRequirements, findRequirementByAccepted, findRequirementByNetwork, resolveFacilitatorUrlFromRequirement, } from "./payment-requirements";
16
16
  export { calculateValidBefore, detectX402Version, generateNonce, getPaymentHeaderName, parseJsonOrBase64, } from "./protocol";
17
17
  export type { AcceptPaymentOptions, ArmoryPaymentResult, FacilitatorConfig, FacilitatorSettleResult, FacilitatorVerifyResult, NetworkId, PaymentError, PaymentErrorCode, PaymentResult, PayToAddress, PricingConfig, ResolvedFacilitator, ResolvedNetwork, ResolvedPaymentConfig, ResolvedToken, SettlementMode, TokenId, ValidationError, } from "./types/api";
18
18
  export type { BeforePaymentHook, ClientHook, ClientHookErrorContext, ExtensionHook, HookConfig, HookRegistry, HookResult, OnPaymentRequiredHook, PaymentPayloadContext, PaymentRequiredContext, } from "./types/hooks";
package/dist/index.js CHANGED
@@ -1380,6 +1380,50 @@ var DEFAULT_TOKENS = ["usdc"];
1380
1380
  var isValidationError2 = (value) => {
1381
1381
  return typeof value === "object" && value !== null && "code" in value;
1382
1382
  };
1383
+ var coerceMetadata = (requirement) => {
1384
+ if (typeof requirement.name === "string" && typeof requirement.version === "string") {
1385
+ return { name: requirement.name, version: requirement.version };
1386
+ }
1387
+ const extraName = requirement.extra && typeof requirement.extra === "object" && typeof requirement.extra.name === "string" ? requirement.extra.name : void 0;
1388
+ const extraVersion = requirement.extra && typeof requirement.extra === "object" && typeof requirement.extra.version === "string" ? requirement.extra.version : void 0;
1389
+ return { name: extraName, version: extraVersion };
1390
+ };
1391
+ var resolveTokenMetadata = (requirement) => {
1392
+ const chainId = parseInt(requirement.network.split(":")[1] || "0", 10);
1393
+ if (!Number.isFinite(chainId) || chainId <= 0) {
1394
+ return {};
1395
+ }
1396
+ const token = getToken(chainId, requirement.asset);
1397
+ if (!token) {
1398
+ return {};
1399
+ }
1400
+ return {
1401
+ name: token.name,
1402
+ version: token.version
1403
+ };
1404
+ };
1405
+ function enrichPaymentRequirement(requirement) {
1406
+ const metadata = coerceMetadata(requirement);
1407
+ const fallback = resolveTokenMetadata(requirement);
1408
+ const name = metadata.name ?? fallback.name;
1409
+ const version = metadata.version ?? fallback.version;
1410
+ if (!name || !version) {
1411
+ return requirement;
1412
+ }
1413
+ return {
1414
+ ...requirement,
1415
+ name,
1416
+ version,
1417
+ extra: {
1418
+ ...requirement.extra ?? {},
1419
+ name,
1420
+ version
1421
+ }
1422
+ };
1423
+ }
1424
+ function enrichPaymentRequirements(requirements) {
1425
+ return requirements.map(enrichPaymentRequirement);
1426
+ }
1383
1427
  function resolvePayTo(config, network, token) {
1384
1428
  const chainId = network.config.chainId;
1385
1429
  if (config.payToByToken) {
@@ -1527,6 +1571,8 @@ function createPaymentRequirements(config) {
1527
1571
  asset: tokenConfig.contractAddress,
1528
1572
  payTo: resolvedPayTo,
1529
1573
  maxTimeoutSeconds,
1574
+ name: tokenConfig.name,
1575
+ version: tokenConfig.version,
1530
1576
  extra: {
1531
1577
  name: tokenConfig.name,
1532
1578
  version: tokenConfig.version
@@ -1869,4 +1915,4 @@ function validateRouteConfig(config) {
1869
1915
  return null;
1870
1916
  }
1871
1917
 
1872
- export { EIP712_TYPES, ERC20_ABI, EURC_BASE, NETWORKS, PAYMENT_REQUIRED_HEADER, PAYMENT_RESPONSE_HEADER, PAYMENT_SIGNATURE_HEADER, PaymentException, SCHEMES, SKL_SKALE_BASE, SKL_SKALE_BASE_SEPOLIA, SigningError, TOKENS, USDC_BASE, USDC_BASE_SEPOLIA, USDC_DOMAIN, USDC_SKALE_BASE, USDC_SKALE_BASE_SEPOLIA, USDT_SKALE_BASE, USDT_SKALE_BASE_SEPOLIA, V2_HEADERS, WBTC_SKALE_BASE, WBTC_SKALE_BASE_SEPOLIA, WETH_SKALE_BASE, WETH_SKALE_BASE_SEPOLIA, X402ClientError, X402_VERSION, addressToAssetId, assetIdToAddress, caip2ToNetwork, calculateValidBefore, checkFacilitatorSupport, clearFacilitatorCapabilityCache, combineSignature as combineSignatureV2, createEIP712Domain, createError, createNonce, createPaymentRequiredHeaders, createPaymentRequirements, createSettlementHeaders, createTransferWithAuthorization, decodeBase64ToUtf8, decodePayloadHeader, decodePayment, decodePaymentV2, decodeSettlementResponse, decodeSettlementV2, decodeX402Response, detectPaymentVersion, detectX402Version, encodePayment, encodePaymentV2, encodeSettlementResponse, encodeSettlementV2, encodeUtf8ToBase64, encodeX402Response, extractPayerAddress, extractPaymentFromHeaders, filterExtensionsForFacilitator, filterExtensionsForFacilitators, filterExtensionsForRequirements, findMatchingRoute, findRequirementByAccepted, findRequirementByNetwork, fromAtomicUnits, generateNonce, getAllCustomTokens, getAllTokens, getAvailableNetworks, getAvailableTokens, getCurrentTimestamp, getCustomToken, getEURCTokens, getMainnets, getNetworkByChainId, getNetworkConfig, getPaymentHeaderName, getSKLTokens, getSupported, getTestnets, getToken, getTokensByChain, getTokensBySymbol, getTxHash, getUSDCTokens, getUSDTTokens, getWBTCTokens, getWETHTokens, isAddress2 as isAddress, isCAIP2ChainId, isCAIPAssetId, isCustomToken, isExactEvmPayload, isPaymentPayload, isPaymentPayloadV2, isPaymentRequiredV2, isPaymentV2, isResolvedNetwork, isResolvedToken, isSettlementSuccessful, isSettlementV2, isValidAddress, isValidationError, isX402V2Payload, isX402V2PaymentRequired, isX402V2Requirements, isX402V2Settlement, matchRoute, networkToCaip2, normalizeAddress, normalizeBase64Url, normalizeNetworkName, parseJsonOrBase64, parseRoutePattern, parseSignature as parseSignatureV2, registerToken, resolveFacilitator, resolveFacilitatorUrlFromRequirement, resolveNetwork, resolveToken, runAfterPaymentResponseHooks, runBeforeSignPaymentHooks, runOnPaymentRequiredHooks, safeBase64Decode2 as safeBase64Decode, safeBase64Encode2 as safeBase64Encode, selectRequirementWithHooks, settlePayment, toAtomicUnits, toBase64Url, unregisterToken, validateAcceptConfig, validatePaymentConfig, validateRouteConfig, validateTransferWithAuthorization, verifyPayment };
1918
+ export { EIP712_TYPES, ERC20_ABI, EURC_BASE, NETWORKS, PAYMENT_REQUIRED_HEADER, PAYMENT_RESPONSE_HEADER, PAYMENT_SIGNATURE_HEADER, PaymentException, SCHEMES, SKL_SKALE_BASE, SKL_SKALE_BASE_SEPOLIA, SigningError, TOKENS, USDC_BASE, USDC_BASE_SEPOLIA, USDC_DOMAIN, USDC_SKALE_BASE, USDC_SKALE_BASE_SEPOLIA, USDT_SKALE_BASE, USDT_SKALE_BASE_SEPOLIA, V2_HEADERS, WBTC_SKALE_BASE, WBTC_SKALE_BASE_SEPOLIA, WETH_SKALE_BASE, WETH_SKALE_BASE_SEPOLIA, X402ClientError, X402_VERSION, addressToAssetId, assetIdToAddress, caip2ToNetwork, calculateValidBefore, checkFacilitatorSupport, clearFacilitatorCapabilityCache, combineSignature as combineSignatureV2, createEIP712Domain, createError, createNonce, createPaymentRequiredHeaders, createPaymentRequirements, createSettlementHeaders, createTransferWithAuthorization, decodeBase64ToUtf8, decodePayloadHeader, decodePayment, decodePaymentV2, decodeSettlementResponse, decodeSettlementV2, decodeX402Response, detectPaymentVersion, detectX402Version, encodePayment, encodePaymentV2, encodeSettlementResponse, encodeSettlementV2, encodeUtf8ToBase64, encodeX402Response, enrichPaymentRequirement, enrichPaymentRequirements, extractPayerAddress, extractPaymentFromHeaders, filterExtensionsForFacilitator, filterExtensionsForFacilitators, filterExtensionsForRequirements, findMatchingRoute, findRequirementByAccepted, findRequirementByNetwork, fromAtomicUnits, generateNonce, getAllCustomTokens, getAllTokens, getAvailableNetworks, getAvailableTokens, getCurrentTimestamp, getCustomToken, getEURCTokens, getMainnets, getNetworkByChainId, getNetworkConfig, getPaymentHeaderName, getSKLTokens, getSupported, getTestnets, getToken, getTokensByChain, getTokensBySymbol, getTxHash, getUSDCTokens, getUSDTTokens, getWBTCTokens, getWETHTokens, isAddress2 as isAddress, isCAIP2ChainId, isCAIPAssetId, isCustomToken, isExactEvmPayload, isPaymentPayload, isPaymentPayloadV2, isPaymentRequiredV2, isPaymentV2, isResolvedNetwork, isResolvedToken, isSettlementSuccessful, isSettlementV2, isValidAddress, isValidationError, isX402V2Payload, isX402V2PaymentRequired, isX402V2Requirements, isX402V2Settlement, matchRoute, networkToCaip2, normalizeAddress, normalizeBase64Url, normalizeNetworkName, parseJsonOrBase64, parseRoutePattern, parseSignature as parseSignatureV2, registerToken, resolveFacilitator, resolveFacilitatorUrlFromRequirement, resolveNetwork, resolveToken, runAfterPaymentResponseHooks, runBeforeSignPaymentHooks, runOnPaymentRequiredHooks, safeBase64Decode2 as safeBase64Decode, safeBase64Encode2 as safeBase64Encode, selectRequirementWithHooks, settlePayment, toAtomicUnits, toBase64Url, unregisterToken, validateAcceptConfig, validatePaymentConfig, validateRouteConfig, validateTransferWithAuthorization, verifyPayment };
@@ -23,6 +23,8 @@ export interface FacilitatorRoutingConfig {
23
23
  facilitatorUrlByChain?: Record<string, string>;
24
24
  facilitatorUrlByToken?: Record<string, Record<string, string>>;
25
25
  }
26
+ export declare function enrichPaymentRequirement(requirement: PaymentRequirementsV2): PaymentRequirementsV2;
27
+ export declare function enrichPaymentRequirements(requirements: PaymentRequirementsV2[]): PaymentRequirementsV2[];
26
28
  export declare function resolveFacilitatorUrlFromRequirement(config: FacilitatorRoutingConfig, requirement: Pick<PaymentRequirementsV2, "network" | "asset">): string | undefined;
27
29
  export declare function createPaymentRequirements(config: PaymentConfig): ResolvedRequirementsConfig;
28
30
  export declare function findRequirementByNetwork(requirements: PaymentRequirementsV2[], network: string): PaymentRequirementsV2 | undefined;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@armory-sh/base",
3
- "version": "0.2.30",
3
+ "version": "0.2.31",
4
4
  "license": "MIT",
5
5
  "author": "Sawyer Cutler <sawyer@dirtroad.dev>",
6
6
  "keywords": [
package/src/index.ts CHANGED
@@ -128,6 +128,8 @@ export type {
128
128
  } from "./payment-requirements";
129
129
  export {
130
130
  createPaymentRequirements,
131
+ enrichPaymentRequirement,
132
+ enrichPaymentRequirements,
131
133
  findRequirementByAccepted,
132
134
  findRequirementByNetwork,
133
135
  resolveFacilitatorUrlFromRequirement,
@@ -6,6 +6,7 @@ import type {
6
6
  ValidationError,
7
7
  } from "./types/api";
8
8
  import { getNetworkConfig } from "./types/networks";
9
+ import { getToken } from "./data/tokens";
9
10
  import type { Address, PaymentRequirementsV2 } from "./types/v2";
10
11
  import { toAtomicUnits } from "./utils/x402";
11
12
  import {
@@ -57,6 +58,78 @@ const isValidationError = (value: unknown): value is ValidationError => {
57
58
  return typeof value === "object" && value !== null && "code" in value;
58
59
  };
59
60
 
61
+ const coerceMetadata = (
62
+ requirement: PaymentRequirementsV2,
63
+ ): { name?: string; version?: string } => {
64
+ if (typeof requirement.name === "string" && typeof requirement.version === "string") {
65
+ return { name: requirement.name, version: requirement.version };
66
+ }
67
+
68
+ const extraName =
69
+ requirement.extra &&
70
+ typeof requirement.extra === "object" &&
71
+ typeof requirement.extra.name === "string"
72
+ ? requirement.extra.name
73
+ : undefined;
74
+ const extraVersion =
75
+ requirement.extra &&
76
+ typeof requirement.extra === "object" &&
77
+ typeof requirement.extra.version === "string"
78
+ ? requirement.extra.version
79
+ : undefined;
80
+
81
+ return { name: extraName, version: extraVersion };
82
+ };
83
+
84
+ const resolveTokenMetadata = (
85
+ requirement: PaymentRequirementsV2,
86
+ ): { name?: string; version?: string } => {
87
+ const chainId = parseInt(requirement.network.split(":")[1] || "0", 10);
88
+ if (!Number.isFinite(chainId) || chainId <= 0) {
89
+ return {};
90
+ }
91
+
92
+ const token = getToken(chainId, requirement.asset);
93
+ if (!token) {
94
+ return {};
95
+ }
96
+
97
+ return {
98
+ name: token.name,
99
+ version: token.version,
100
+ };
101
+ };
102
+
103
+ export function enrichPaymentRequirement(
104
+ requirement: PaymentRequirementsV2,
105
+ ): PaymentRequirementsV2 {
106
+ const metadata = coerceMetadata(requirement);
107
+ const fallback = resolveTokenMetadata(requirement);
108
+ const name = metadata.name ?? fallback.name;
109
+ const version = metadata.version ?? fallback.version;
110
+
111
+ if (!name || !version) {
112
+ return requirement;
113
+ }
114
+
115
+ return {
116
+ ...requirement,
117
+ name,
118
+ version,
119
+ extra: {
120
+ ...(requirement.extra ?? {}),
121
+ name,
122
+ version,
123
+ },
124
+ };
125
+ }
126
+
127
+ export function enrichPaymentRequirements(
128
+ requirements: PaymentRequirementsV2[],
129
+ ): PaymentRequirementsV2[] {
130
+ return requirements.map(enrichPaymentRequirement);
131
+ }
132
+
60
133
  function resolvePayTo(
61
134
  config: PaymentConfig,
62
135
  network: ResolvedNetwork,
@@ -275,6 +348,8 @@ export function createPaymentRequirements(
275
348
  asset: tokenConfig.contractAddress,
276
349
  payTo: resolvedPayTo as `0x${string}`,
277
350
  maxTimeoutSeconds,
351
+ name: tokenConfig.name,
352
+ version: tokenConfig.version,
278
353
  extra: {
279
354
  name: tokenConfig.name,
280
355
  version: tokenConfig.version,