UNPKG

@coinbase/cdp-sdk

Version:

SDK for interacting with the Coinbase Developer Platform Wallet API

84 lines • 2.87 kB
"use strict"; /* * Normalization helpers used by the spend-control allow-lists. */ Object.defineProperty(exports, "__esModule", { value: true }); exports.normalizeNetwork = normalizeNetwork; exports.normalizePayee = normalizePayee; exports.normalizeAsset = normalizeAsset; const constants_js_1 = require("../constants.js"); const types_js_1 = require("./types.js"); const LEGACY_SVM_NETWORK_TO_CAIP = { solana: "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp", "solana-devnet": "solana:EtWTRABZaYq6iMfeYKouRu166VU2xqa1", "solana-testnet": "solana:testnet", }; const CAIP_PATTERN = /^[a-z0-9-]+:[a-zA-Z0-9-_]+$/; const isEvmNetwork = (network) => { if (network.startsWith("eip155:")) return true; return network in constants_js_1.CDP_NETWORK_TO_CAIP2; }; const isSvmNetwork = (network) => { if (network.startsWith("solana:")) return true; return network in LEGACY_SVM_NETWORK_TO_CAIP; }; /** * Converts a network identifier to its canonical CAIP-2 form. * * Accepts CAIP-2 strings (`"eip155:8453"`) and legacy short forms * (`"base"`, `"base-sepolia"`, `"solana-devnet"`, …). * * @param network - The network identifier to normalize. * @returns The canonical CAIP-2 network identifier. * @throws {SpendControlError} `"network_not_allowed"` if the input is not recognized. */ function normalizeNetwork(network) { const svmCanonical = LEGACY_SVM_NETWORK_TO_CAIP[network]; if (svmCanonical) return svmCanonical; const caip2 = constants_js_1.CDP_NETWORK_TO_CAIP2[network]; if (caip2) return caip2; if (CAIP_PATTERN.test(network)) { return network; } throw new types_js_1.SpendControlError("network_not_allowed", `Network ${JSON.stringify(network)} is not a recognized CAIP-2 string or legacy short form`, { network }); } /** * Normalizes a payee address for allow-list comparisons. * * EVM addresses are lower-cased; Solana addresses are returned unchanged. * * @param network - The network the payee is on. * @param payee - The payee address to normalize. * @returns The normalized payee address. */ function normalizePayee(network, payee) { const trimmed = payee.trim(); if (isEvmNetwork(network)) { return trimmed.toLowerCase(); } if (isSvmNetwork(network)) { return trimmed; } return trimmed; } /** * Normalizes an asset identifier for allow-list comparisons. * * EVM contract addresses (`0x` + 40 hex chars) are lower-cased. Everything * else (Solana mints, symbolic names) is returned unchanged. * * @param asset - The asset identifier to normalize. * @returns The normalized asset identifier. */ function normalizeAsset(asset) { const trimmed = asset.trim(); if (/^0x[0-9a-fA-F]{40}$/.test(trimmed)) { return trimmed.toLowerCase(); } return trimmed; } //# sourceMappingURL=normalize.js.map