UNPKG

near-workspaces

Version:

Write tests in TypeScript/JavaScript to run in a controlled NEAR Sandbox local environment.

164 lines 6.32 kB
"use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); __setModuleDefault(result, mod); return result; }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.parseNEAR = exports.timeSuffix = exports.homeKeyStore = exports.getNetworkFromEnv = exports.EMPTY_CONTRACT_HASH = exports.hashContract = exports.urlConfigFromNetwork = exports.isTopLevelAccount = exports.captureError = exports.NO_DEPOSIT = exports.asId = exports.randomAccountId = exports.createKeyPair = exports.ONE_NEAR = void 0; const buffer_1 = require("buffer"); const process = __importStar(require("process")); const os = __importStar(require("os")); const path = __importStar(require("path")); const nearAPI = __importStar(require("near-api-js")); const js_sha256_1 = __importDefault(require("js-sha256")); const base_1 = require("@scure/base"); exports.ONE_NEAR = BigInt(parseNEAR('1')); function createKeyPair() { return nearAPI.utils.KeyPairEd25519.fromRandom(); } exports.createKeyPair = createKeyPair; // Create random account with at least 33 digits by default function randomAccountId(prefix = 'dev-', dateLength = 13, suffixLength = 15) { const suffix = Math.floor(Math.random() * (10 ** 22)) % (10 ** suffixLength); return `${timeSuffix(prefix, dateLength)}-${suffix}`; } exports.randomAccountId = randomAccountId; function asId(id) { return typeof id === 'string' ? id : id.accountId; } exports.asId = asId; exports.NO_DEPOSIT = 0n; async function captureError(function_) { try { await function_(); } catch (error) { if (error instanceof Error) { return error.message; } } throw new Error('fn succeeded when expected to throw an exception'); } exports.captureError = captureError; function isTopLevelAccount(accountId) { return !accountId.includes('.'); } exports.isTopLevelAccount = isTopLevelAccount; function configFromDomain(network) { let rpcAddr = `https://archival-rpc.${network}.near.org`; if (network === 'mainnet' && process.env.NEAR_CLI_MAINNET_RPC_SERVER_URL) { rpcAddr = process.env.NEAR_CLI_MAINNET_RPC_SERVER_URL; } else if (network === 'testnet' && process.env.NEAR_CLI_TESTNET_RPC_SERVER_URL) { rpcAddr = process.env.NEAR_CLI_TESTNET_RPC_SERVER_URL; } return { network, rpcAddr, walletUrl: `https://wallet.${network}.near.org`, helperUrl: `https://helper.${network}.near.org`, explorerUrl: `https://explorer.${network}.near.org`, archivalUrl: `https://archival-rpc.${network}.near.org`, }; } function urlConfigFromNetwork(network) { const networkName = typeof network === 'string' ? network : network.network; const rpcAddr = typeof network === 'string' ? undefined : network.rpcAddr; switch (networkName) { case 'sandbox': { return { network: 'sandbox', rpcAddr: 'http://127.0.0.1', }; } case 'custom': { return { network: 'custom', rpcAddr: rpcAddr, }; } case 'testnet': case 'mainnet': { return configFromDomain(networkName); } default: { throw new Error(`Got network ${networkName}, but only accept 'sandbox', 'testnet', 'mainnet' and 'custom'`); } } } exports.urlConfigFromNetwork = urlConfigFromNetwork; /** * * @param contract Base64 encoded binary or Buffer. * @returns sha256 hash of contract. */ function hashContract(contract) { const bytes = typeof contract === 'string' ? buffer_1.Buffer.from(contract, 'base64') : contract; const buffer = buffer_1.Buffer.from(js_sha256_1.default.sha256(new Uint8Array(bytes)), 'hex'); return base_1.base58.encode(new Uint8Array(buffer)); } exports.hashContract = hashContract; exports.EMPTY_CONTRACT_HASH = '11111111111111111111111111111111'; /** * * @returns network to connect to. Default 'sandbox' */ function getNetworkFromEnv() { const network = process.env.NEAR_WORKSPACES_NETWORK; switch (network) { case 'sandbox': case 'testnet': case 'custom': { return network; } case undefined: { return 'sandbox'; } default: { throw new Error(`environment variable NEAR_WORKSPACES_NETWORK=${network} invalid; ` + 'use \'testnet\', \'custom\', or \'sandbox\' (the default)'); } } } exports.getNetworkFromEnv = getNetworkFromEnv; function homeKeyStore() { return new nearAPI.keyStores.UnencryptedFileSystemKeyStore(path.join(os.homedir(), '.near-credentials')); } exports.homeKeyStore = homeKeyStore; function timeSuffix(prefix, length = 6) { return `${prefix}${Date.now() % (10 ** length)}`; } exports.timeSuffix = timeSuffix; const NOT_NUMBER_OR_UNDERLINE = /[^\d_]/; // Near-API func to parse NEAR into yoctoNEAR string with with check for not-null value. 1N = 10^24yocto function parseNEAR(s) { const parsedNear = nearAPI.utils.format.parseNearAmount(s); if (parsedNear === null) { throw new Error(`Invalid NEAR amount: ${s}`); } return parsedNear; } exports.parseNEAR = parseNEAR; //# sourceMappingURL=utils.js.map