@coinbase/cdp-sdk
Version:
SDK for interacting with the Coinbase Developer Platform Wallet API
84 lines • 2.87 kB
JavaScript
;
/*
* 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