{"version":3,"sources":["../src/index.ts","../src/crypto/constants.ts","../src/crypto/key_pair_base.ts","../src/crypto/key_pair_ed25519.ts","../src/utils/format.ts","../src/utils/provider.ts","../src/utils/utils.ts","../src/utils/validators.ts","../src/crypto/public_key.ts","../src/crypto/key_pair_ml_dsa_65.ts","../src/crypto/key_pair_secp256k1.ts","../src/crypto/key_pair.ts","../src/providers/errors/parse.ts","../src/providers/exponential-backoff.ts","../src/providers/failover-rpc-provider.ts","../src/types/assignable.ts","../src/types/enum.ts","../src/types/errors.ts","../src/types/provider/light_client.ts","../src/types/provider/response.ts","../src/providers/json-rpc-provider.ts","../src/transactions/actions.ts","../src/transactions/action_creators.ts","../src/transactions/schema.ts","../src/transactions/prefix.ts","../src/transactions/create_transaction.ts","../src/transactions/delegate.ts","../src/transactions/signature.ts","../src/providers/fetch_json.ts","../src/accounts/account.ts","../src/signers/signer.ts","../src/nep413/schema.ts","../src/signers/key_pair_signer.ts","../src/signers/multikey_signer.ts","../src/units/utils.ts","../src/units/gas.ts","../src/tokens/ft/format.ts","../src/tokens/ft/index.ts","../src/accounts/nonce-manager.ts","../src/accounts/errors.ts","../src/accounts/typed_contract.ts","../src/units/near.ts"],"sourcesContent":["// ============================================================================\n// Core Types\n// ============================================================================\n\n// ============================================================================\n// Accounts\n// ============================================================================\nexport * from './accounts/index.js';\nexport type {\n    CurveType,\n    KeyPairString,\n    Signature as CryptoSignature,\n} from './crypto/index.js';\n\n// ============================================================================\n// Cryptography\n// ============================================================================\nexport {\n    KeyPair,\n    KeyPairEd25519,\n    KeyPairMLDSA65,\n    KeyPairSecp256k1,\n    KeyType,\n    keyToImplicitAddress,\n    PublicKey,\n} from './crypto/index.js';\n// ============================================================================\n// Providers\n// ============================================================================\nexport * from './providers/index.js';\n// ============================================================================\n// Signers\n// ============================================================================\nexport * from './signers/index.js';\n// ============================================================================\n// Transactions\n// ============================================================================\nexport * from './transactions/index.js';\nexport * from './types/index.js';\nexport { gigaToGas, nearToYocto, teraToGas, yoctoToNear } from './units/index.js';\n// ============================================================================\n// Utilities\n// ============================================================================\nexport * from './utils/index.js';\n","/** All supported key types */\nexport enum KeyType {\n    ED25519 = 0,\n    SECP256K1 = 1,\n    MLDSA65 = 2,\n}\n\nexport const KeySize = {\n    SECRET_KEY: 32,\n    ED25519_PUBLIC_KEY: 32,\n    SECP256k1_PUBLIC_KEY: 64,\n    MLDSA65_PUBLIC_KEY: 1952,\n    MLDSA65_SIGNATURE: 3309,\n};\n\nexport type CurveType = 'ed25519' | 'ED25519' | 'secp256k1' | 'SECP256K1' | 'ml-dsa-65' | 'ML-DSA-65';\n\nexport type KeyPairString = `ed25519:${string}` | `secp256k1:${string}` | `ml-dsa-65:${string}`;\n","import type { KeyPairString } from './constants.js';\nimport type { PublicKey } from './public_key.js';\n\nexport interface Signature {\n    signature: Uint8Array;\n    publicKey: PublicKey;\n}\n\nexport abstract class KeyPairBase {\n    abstract sign(message: Uint8Array): Signature;\n    abstract verify(message: Uint8Array, signature: Uint8Array): boolean;\n    abstract toString(): KeyPairString;\n    abstract getPublicKey(): PublicKey;\n}\n","import { ed25519 } from '@noble/curves/ed25519.js';\nimport { baseDecode, baseEncode } from '../utils/index.js';\n\nimport { type KeyPairString, KeySize, KeyType } from './constants.js';\nimport { KeyPairBase, type Signature } from './key_pair_base.js';\nimport { PublicKey } from './public_key.js';\n\n/**\n * This class provides key pair functionality for Ed25519 curve:\n * generating key pairs, encoding key pairs, signing and verifying.\n */\nexport class KeyPairEd25519 extends KeyPairBase {\n    readonly publicKey: PublicKey;\n    readonly secretKey: string;\n    readonly extendedSecretKey: string;\n\n    /**\n     * Construct an instance of key pair given a secret key.\n     * It's generally assumed that these are encoded in base58.\n     * @param extendedSecretKey\n     */\n    constructor(extendedSecretKey: string) {\n        super();\n        const decoded = baseDecode(extendedSecretKey);\n        const secretKey = new Uint8Array(decoded.slice(0, KeySize.SECRET_KEY));\n        const publicKey = ed25519.getPublicKey(new Uint8Array(secretKey));\n        this.publicKey = new PublicKey({ keyType: KeyType.ED25519, data: publicKey });\n        this.secretKey = baseEncode(secretKey);\n        this.extendedSecretKey = extendedSecretKey;\n    }\n\n    /**\n     * Generate a new random keypair.\n     * @example\n     * const keyRandom = KeyPair.fromRandom();\n     * keyRandom.publicKey\n     * // returns [PUBLIC_KEY]\n     *\n     * keyRandom.secretKey\n     * // returns [SECRET_KEY]\n     */\n    static fromRandom() {\n        const secretKey = crypto.getRandomValues(new Uint8Array(KeySize.SECRET_KEY));\n        const publicKey = ed25519.getPublicKey(new Uint8Array(secretKey));\n        const extendedSecretKey = new Uint8Array([...secretKey, ...publicKey]);\n        return new KeyPairEd25519(baseEncode(extendedSecretKey));\n    }\n\n    /**\n     * Signs a message using the key pair's secret key.\n     * @param message The message to be signed.\n     * @returns {Signature} The signature object containing the signature and the public key.\n     */\n    sign(message: Uint8Array): Signature {\n        const signature = ed25519.sign(message, baseDecode(this.secretKey));\n        return { signature, publicKey: this.publicKey };\n    }\n\n    /**\n     * Verifies the signature of a message using the key pair's public key.\n     * @param message The message to be verified.\n     * @param signature The signature to be verified.\n     * @returns {boolean} `true` if the signature is valid, otherwise `false`.\n     */\n    verify(message: Uint8Array, signature: Uint8Array): boolean {\n        return this.publicKey.verify(message, signature);\n    }\n\n    /**\n     * Returns a string representation of the key pair in the format 'ed25519:[extendedSecretKey]'.\n     * @returns {string} The string representation of the key pair.\n     */\n    toString(): KeyPairString {\n        return `ed25519:${this.extendedSecretKey}`;\n    }\n\n    /**\n     * Retrieves the public key associated with the key pair.\n     * @returns {PublicKey} The public key.\n     */\n    getPublicKey(): PublicKey {\n        return this.publicKey;\n    }\n}\n","import { base58, base64 } from '@scure/base';\n\ntype NumericString = `${number}`;\n\n/**\n * Exponent for calculating how many indivisible units are there in one NEAR. See {@link NEAR_NOMINATION}.\n */\nexport const NEAR_NOMINATION_EXP = 24;\n\n/**\n * Number of indivisible units in one NEAR. Derived from {@link NEAR_NOMINATION_EXP}.\n */\nexport const NEAR_NOMINATION = 10n ** BigInt(NEAR_NOMINATION_EXP);\n\n// Pre-calculate offsets used for rounding to different number of digits\nconst ROUNDING_OFFSETS: bigint[] = [];\nconst BN10 = 10n;\nfor (let i = 0, offset = 5n; i < NEAR_NOMINATION_EXP; i++, offset = offset * BN10) {\n    ROUNDING_OFFSETS[i] = offset;\n}\n\n/**\n * @deprecated use {@link units!yoctoToNear} from 'near-api-js' instead.\n *\n * Convert account balance value from internal indivisible units to NEAR. 1 NEAR is defined by {@link NEAR_NOMINATION}.\n * Effectively this divides given amount by {@link NEAR_NOMINATION}.\n *\n * @param balance decimal string representing balance in smallest non-divisible NEAR units (as specified by {@link NEAR_NOMINATION})\n * @param fracDigits number of fractional digits to preserve in formatted string. Balance is rounded to match given number of digits.\n * @returns Value in Ⓝ\n */\nexport function formatNearAmount(balance: string | number | bigint, fracDigits: number = NEAR_NOMINATION_EXP): string {\n    let balanceBN = BigInt(balance);\n    if (fracDigits !== NEAR_NOMINATION_EXP) {\n        // Adjust balance for rounding at given number of digits\n        const roundingExp = NEAR_NOMINATION_EXP - fracDigits - 1;\n        if (roundingExp > 0) {\n            balanceBN += ROUNDING_OFFSETS[roundingExp]!;\n        }\n    }\n\n    balance = balanceBN.toString();\n    const wholeStr = balance.substring(0, balance.length - NEAR_NOMINATION_EXP) || '0';\n    const fractionStr = balance\n        .substring(balance.length - NEAR_NOMINATION_EXP)\n        .padStart(NEAR_NOMINATION_EXP, '0')\n        .substring(0, fracDigits);\n\n    return trimTrailingZeroes(`${formatWithCommas(wholeStr)}.${fractionStr}`);\n}\n\n/**\n * @deprecated use {@link units!nearToYocto} from 'near-api-js' instead.\n *\n * Convert human readable NEAR amount to internal indivisible units.\n * Effectively this multiplies given amount by {@link NEAR_NOMINATION}.\n *\n * @param amount decimal string (potentially fractional) denominated in NEAR.\n * @returns The parsed yoctoⓃ amount\n * @throws {Error} if the amount is empty or invalid\n */\nexport function parseNearAmount(amount: NumericString | number): string {\n    const cleanedAmount = cleanupAmount(amount.toString());\n    if (!cleanedAmount) {\n        throw new Error('Amount cannot be empty');\n    }\n    const split = cleanedAmount.split('.');\n    const wholePart = split[0];\n    const fracPart = split[1] || '';\n    if (split.length > 2 || fracPart.length > NEAR_NOMINATION_EXP) {\n        throw new Error(`Cannot parse '${amount}' as NEAR amount`);\n    }\n    return trimLeadingZeroes(wholePart + fracPart.padEnd(NEAR_NOMINATION_EXP, '0'));\n}\n\n/**\n * Removes commas from the input\n * @param amount A value or amount that may contain commas\n * @returns string The cleaned value\n */\nfunction cleanupAmount(amount: string): string {\n    return amount.replace(/,/g, '').trim();\n}\n\n/**\n * Removes .000… from an input\n * @param value A value that may contain trailing zeroes in the decimals place\n * @returns string The value without the trailing zeros\n */\nfunction trimTrailingZeroes(value: string): string {\n    return value.replace(/\\.?0*$/, '');\n}\n\n/**\n * Removes leading zeroes from an input\n * @param value A value that may contain leading zeroes\n * @returns string The value without the leading zeroes\n */\nfunction trimLeadingZeroes(value: string): string {\n    value = value.replace(/^0+/, '');\n    if (value === '') {\n        return '0';\n    }\n    return value;\n}\n\n/**\n * Returns a human-readable value with commas\n * @param value A value that may not contain commas\n * @returns string A value with commas\n */\nfunction formatWithCommas(value: string): string {\n    const pattern = /(-?\\d+)(\\d{3})/;\n    while (pattern.test(value)) {\n        value = value.replace(pattern, '$1,$2');\n    }\n    return value;\n}\n\n/**\n * Encodes a Uint8Array or string into base58\n * @param value Uint8Array or string representing a borsh encoded object\n * @returns string base58 encoding of the value\n */\nexport function baseEncode(value: Uint8Array | string): string {\n    if (typeof value === 'string') {\n        const bytes: number[] = [];\n        for (let c = 0; c < value.length; c++) {\n            bytes.push(value.charCodeAt(c));\n        }\n        value = new Uint8Array(bytes);\n    }\n    return base58.encode(value);\n}\n\n/**\n * Decodes a base58 string into a Uint8Array\n * @param value base58 encoded string\n * @returns Uint8Array representing the decoded value\n */\nexport function baseDecode(value: string): Uint8Array {\n    return base58.decode(value);\n}\n\n/**\n * Encodes a Uint8Array into a base64 string\n * @param bytes Uint8Array to encode\n * @returns base64 encoded string\n */\nexport function base64Encode(bytes: Uint8Array): string {\n    return base64.encode(bytes);\n}\n\n/**\n * Decodes a base64 string into a Uint8Array\n * @param str base64 encoded string\n * @returns Uint8Array representing the decoded value\n */\nexport function base64Decode(str: string): Uint8Array {\n    return base64.decode(str);\n}\n\nconst encoder = new TextEncoder();\nconst decoder = new TextDecoder();\n\n/**\n * Encodes a string into a Uint8Array using UTF-8\n * @param str string to encode\n * @returns Uint8Array representing the UTF-8 bytes\n */\nexport function stringToBytes(str: string): Uint8Array {\n    return encoder.encode(str);\n}\n\n/**\n * Decodes a Uint8Array into a string using UTF-8\n * @param bytes Uint8Array to decode\n * @returns decoded string\n */\nexport function bytesToString(bytes: Uint8Array): string {\n    return decoder.decode(bytes);\n}\n","import type { RpcTransactionResponse } from '../rpc/types.gen.js';\nimport type { FinalExecutionOutcome } from '../types/index.js';\nimport { base64Decode, bytesToString } from './format.js';\n\n/** @hidden */\n// eslint-disable-next-line @typescript-eslint/ban-types\nexport function getTransactionLastResult(\n    txResult: FinalExecutionOutcome | RpcTransactionResponse\n): Exclude<object | string | number | null, Function> {\n    if (\n        typeof txResult.status === 'object' &&\n        txResult.status !== null &&\n        'SuccessValue' in txResult.status &&\n        typeof txResult.status.SuccessValue === 'string'\n    ) {\n        const value = bytesToString(base64Decode(txResult.status.SuccessValue));\n        try {\n            return JSON.parse(value);\n        } catch (e) {\n            return value;\n        }\n    }\n    return null;\n}\n","export function sortBigIntAsc(a: bigint, b: bigint) {\n    return a < b ? -1 : a > b ? 1 : 0;\n}\n","import type { CurrentEpochValidatorInfo, NextEpochValidatorInfo } from '../types/index.js';\nimport { sortBigIntAsc } from './utils.js';\n\n/** Finds seat price given validators stakes and number of seats.\n *  Calculation follow the spec: https://nomicon.io/Economics/README.html#validator-selection\n * @param validators current or next epoch validators.\n * @param maxNumberOfSeats maximum number of seats in the network.\n * @param minimumStakeRatio minimum stake ratio\n * @param protocolVersion version of the protocol from genesis config\n */\nexport function findSeatPrice(\n    validators: (CurrentEpochValidatorInfo | NextEpochValidatorInfo)[],\n    maxNumberOfSeats: number,\n    minimumStakeRatio: number[],\n    protocolVersion?: number\n): bigint {\n    if (protocolVersion && protocolVersion < 49) {\n        return findSeatPriceForProtocolBefore49(validators, maxNumberOfSeats);\n    }\n    if (!minimumStakeRatio) {\n        console.warn(\n            'DeprecationWarning: findSeatPrice(validators, maxNumberOfSeats) is deprecated. ' +\n                'Use findSeatPrice(validators, maxNumberOfSeats, minimumStakeRatio) instead.'\n        );\n        minimumStakeRatio = [1, 6250]; // hardcoded minimumStakeRation from 12/7/21\n    }\n    return findSeatPriceForProtocolAfter49(validators, maxNumberOfSeats, minimumStakeRatio);\n}\n\nfunction findSeatPriceForProtocolBefore49(\n    validators: (CurrentEpochValidatorInfo | NextEpochValidatorInfo)[],\n    numSeats: number\n): bigint {\n    const stakes = validators.map((v) => BigInt(v.stake)).sort(sortBigIntAsc);\n    const num = BigInt(numSeats);\n    const stakesSum = stakes.reduce((a, b) => a + b);\n    if (stakesSum < num) {\n        throw new Error('Stakes are below seats');\n    }\n    // assert stakesSum >= numSeats\n    let left = 1n,\n        right = stakesSum + 1n;\n    while (left !== right - 1n) {\n        const mid = (left + right) / 2n;\n        let found = false;\n        let currentSum = 0n;\n        for (let i = 0; i < stakes.length; ++i) {\n            currentSum = currentSum + stakes[i]! / mid;\n            if (currentSum >= num) {\n                left = mid;\n                found = true;\n                break;\n            }\n        }\n        if (!found) {\n            right = mid;\n        }\n    }\n    return left;\n}\n\n// nearcore reference: https://github.com/near/nearcore/blob/5a8ae263ec07930cd34d0dcf5bcee250c67c02aa/chain/epoch_manager/src/validator_selection.rs#L308;L315\nfunction findSeatPriceForProtocolAfter49(\n    validators: (CurrentEpochValidatorInfo | NextEpochValidatorInfo)[],\n    maxNumberOfSeats: number,\n    minimumStakeRatio: number[]\n): bigint {\n    if (minimumStakeRatio.length != 2) {\n        throw Error('minimumStakeRatio should have 2 elements');\n    }\n    const stakes = validators.map((v) => BigInt(v.stake)).sort(sortBigIntAsc);\n    const stakesSum = stakes.reduce((a, b) => a + b);\n    if (validators.length < maxNumberOfSeats) {\n        return (stakesSum * BigInt(minimumStakeRatio[0]!)) / BigInt(minimumStakeRatio[1]!);\n    } else if (stakes.length > 0) {\n        return stakes[0]! + 1n;\n    } else {\n        throw new Error(`Unreachable`);\n    }\n}\n\nexport interface ChangedValidatorInfo {\n    current: CurrentEpochValidatorInfo;\n    next: NextEpochValidatorInfo;\n}\n\nexport interface EpochValidatorsDiff {\n    newValidators: NextEpochValidatorInfo[];\n    removedValidators: CurrentEpochValidatorInfo[];\n    changedValidators: ChangedValidatorInfo[];\n}\n\n/** Diff validators between current and next epoch.\n * Returns additions, subtractions and changes to validator set.\n * @param currentValidators list of current validators.\n * @param nextValidators list of next validators.\n */\nexport function diffEpochValidators(\n    currentValidators: CurrentEpochValidatorInfo[],\n    nextValidators: NextEpochValidatorInfo[]\n): EpochValidatorsDiff {\n    const validatorsMap = new Map<string, CurrentEpochValidatorInfo>();\n    currentValidators.forEach((v) => {\n        validatorsMap.set(v.account_id, v);\n    });\n    const nextValidatorsSet = new Set(nextValidators.map((v) => v.account_id));\n    return {\n        newValidators: nextValidators.filter((v) => !validatorsMap.has(v.account_id)),\n        removedValidators: currentValidators.filter((v) => !nextValidatorsSet.has(v.account_id)),\n        changedValidators: nextValidators\n            .filter((v) => validatorsMap.has(v.account_id) && validatorsMap.get(v.account_id)!.stake != v.stake)\n            .map((v) => ({ current: validatorsMap.get(v.account_id)!, next: v })),\n    };\n}\n","import { ed25519 } from '@noble/curves/ed25519.js';\nimport { secp256k1 } from '@noble/curves/secp256k1.js';\nimport { ml_dsa65 } from '@noble/post-quantum/ml-dsa.js';\nimport { baseDecode, baseEncode } from '../utils/index.js';\n\nimport { KeySize, KeyType } from './constants.js';\n\nfunction key_type_to_str(keyType: KeyType): string {\n    switch (keyType) {\n        case KeyType.ED25519:\n            return 'ed25519';\n        case KeyType.SECP256K1:\n            return 'secp256k1';\n        case KeyType.MLDSA65:\n            return 'ml-dsa-65';\n        default:\n            throw new Error(`Unknown key type ${keyType}`);\n    }\n}\n\nfunction str_to_key_type(keyType: string): KeyType {\n    switch (keyType.toLowerCase()) {\n        case 'ed25519':\n            return KeyType.ED25519;\n        case 'secp256k1':\n            return KeyType.SECP256K1;\n        case 'ml-dsa-65':\n            return KeyType.MLDSA65;\n        default:\n            throw new Error(`Unknown key type ${keyType}`);\n    }\n}\n\nclass ED25519PublicKey {\n    keyType: KeyType = KeyType.ED25519;\n    data!: Uint8Array;\n}\nclass SECP256K1PublicKey {\n    keyType: KeyType = KeyType.SECP256K1;\n    data!: Uint8Array;\n}\nclass MLDSA65PublicKey {\n    keyType: KeyType = KeyType.MLDSA65;\n    data!: Uint8Array;\n}\n\nfunction resolveEnumKeyName(keyType: KeyType) {\n    switch (keyType) {\n        case KeyType.ED25519: {\n            return 'ed25519Key';\n        }\n        case KeyType.SECP256K1: {\n            return 'secp256k1Key';\n        }\n        case KeyType.MLDSA65: {\n            return 'mlDsa65Key';\n        }\n        default: {\n            throw Error(`unknown type ${keyType}`);\n        }\n    }\n}\n\n/**\n * DUPLICATED FROM @near-js/types - REPLACE WITH IMPORTED REFERENCE AND DELETE\n * This ends up being necessary for Wallet Selector dependencies with\n * outdated peer dependencies and should only be temporary\n */\nabstract class Enum {\n    abstract enum: string;\n\n    constructor(properties: any) {\n        if (Object.keys(properties).length !== 1) {\n            throw new Error('Enum can only take single value');\n        }\n        Object.keys(properties).forEach((key: string) => {\n            (this as any)[key] = properties[key];\n        });\n    }\n}\n\n/**\n * PublicKey representation that has type and bytes of the key.\n */\n\nexport class PublicKey extends Enum {\n    enum: string;\n    ed25519Key?: ED25519PublicKey;\n    secp256k1Key?: SECP256K1PublicKey;\n    mlDsa65Key?: MLDSA65PublicKey;\n\n    constructor(publicKey: { keyType: KeyType; data: Uint8Array }) {\n        const keyName = resolveEnumKeyName(publicKey.keyType);\n        super({ [keyName]: publicKey });\n        this[keyName] = publicKey;\n        this.enum = keyName;\n    }\n\n    /**\n     * Creates a PublicKey instance from a string or an existing PublicKey instance.\n     * @param value The string or PublicKey instance to create a PublicKey from.\n     * @returns {PublicKey} The PublicKey instance.\n     */\n    static from(value: string | PublicKey): PublicKey;\n    static from(value: string | PublicKey | Record<string, unknown>): PublicKey {\n        if (typeof value === 'string') {\n            return PublicKey.fromString(value);\n        }\n\n        if (value instanceof PublicKey) {\n            return value;\n        }\n\n        if (typeof value === 'object' && value !== null) {\n            const maybeEd25519 = value['ed25519Key'];\n            if (typeof maybeEd25519 === 'object' && maybeEd25519 !== null && 'data' in maybeEd25519) {\n                return new PublicKey({\n                    keyType: KeyType.ED25519,\n                    data: Uint8Array.from((maybeEd25519 as { data: Uint8Array | number[] }).data),\n                });\n            }\n\n            const maybeSecp256k1 = value['secp256k1Key'];\n            if (typeof maybeSecp256k1 === 'object' && maybeSecp256k1 !== null && 'data' in maybeSecp256k1) {\n                return new PublicKey({\n                    keyType: KeyType.SECP256K1,\n                    data: Uint8Array.from((maybeSecp256k1 as { data: Uint8Array | number[] }).data),\n                });\n            }\n\n            const maybeMlDsa65 = value['mlDsa65Key'];\n            if (typeof maybeMlDsa65 === 'object' && maybeMlDsa65 !== null && 'data' in maybeMlDsa65) {\n                return new PublicKey({\n                    keyType: KeyType.MLDSA65,\n                    data: Uint8Array.from((maybeMlDsa65 as { data: Uint8Array | number[] }).data),\n                });\n            }\n        }\n\n        throw new Error('Unsupported public key format');\n    }\n\n    /**\n     * Creates a PublicKey instance from an encoded key string.\n     * @param encodedKey The encoded key string.\n     * @returns {PublicKey} The PublicKey instance created from the encoded key string.\n     */\n    static fromString(encodedKey: string): PublicKey {\n        const parts = encodedKey.split(':');\n        let publicKey: string;\n        let keyType;\n        if (parts.length === 1) {\n            publicKey = parts[0]!;\n        } else if (parts.length === 2) {\n            publicKey = parts[1]!;\n            keyType = str_to_key_type(parts[0]!);\n        } else {\n            throw new Error('Invalid encoded key format, must be <curve>:<encoded key>');\n        }\n        const decodedPublicKey = baseDecode(publicKey);\n        if (!keyType) {\n            keyType = decodedPublicKey.length === KeySize.SECP256k1_PUBLIC_KEY ? KeyType.SECP256K1 : KeyType.ED25519;\n        }\n        const keySize =\n            keyType === KeyType.ED25519\n                ? KeySize.ED25519_PUBLIC_KEY\n                : keyType === KeyType.SECP256K1\n                  ? KeySize.SECP256k1_PUBLIC_KEY\n                  : KeySize.MLDSA65_PUBLIC_KEY;\n        if (decodedPublicKey.length !== keySize) {\n            throw new Error(`Invalid public key size (${decodedPublicKey.length}), must be ${keySize}`);\n        }\n        return new PublicKey({ keyType, data: decodedPublicKey });\n    }\n\n    /**\n     * Returns a string representation of the public key.\n     * @returns {string} The string representation of the public key.\n     */\n    override toString(): string {\n        const encodedKey = baseEncode(this.data);\n        return `${key_type_to_str(this.keyType)}:${encodedKey}`;\n    }\n\n    /**\n     * Verifies a message signature using the public key.\n     * @param message The message to be verified.\n     * @param signature The signature to be verified.\n     * @returns {boolean} `true` if the signature is valid, otherwise `false`.\n     */\n    verify(message: Uint8Array, signature: Uint8Array): boolean {\n        const keyType = this.keyType;\n        const data = this.data;\n        switch (keyType) {\n            case KeyType.ED25519:\n                return ed25519.verify(signature, message, data);\n            case KeyType.SECP256K1:\n                return secp256k1.verify(signature.subarray(0, 64), message, new Uint8Array([0x04, ...data]), {\n                    prehash: false,\n                });\n            case KeyType.MLDSA65:\n                return ml_dsa65.verify(signature, message, data);\n            default:\n                throw new Error(`Unknown key type: ${keyType}`);\n        }\n    }\n\n    get keyPair() {\n        return this.ed25519Key || this.secp256k1Key || this.mlDsa65Key;\n    }\n\n    get keyType(): KeyType {\n        if (typeof this.keyPair === 'undefined') throw new Error(`Property 'keyPair' of PublicKey is undefined`);\n\n        return this.keyPair.keyType;\n    }\n\n    get data(): Uint8Array {\n        if (typeof this.keyPair === 'undefined') throw new Error(`Property 'keyPair' of PublicKey is undefined`);\n\n        return this.keyPair.data;\n    }\n}\n\nexport function keyToImplicitAddress(publicKey: string | PublicKey): string {\n    const pk = PublicKey.from(publicKey);\n\n    const publicKeyWithoutPrefix = pk.toString().replace(/^ed25519:/, '');\n\n    const decoded = baseDecode(publicKeyWithoutPrefix);\n    // Converting to hex string is implemented manually\n    // to avoid issues with environments that do not support Buffer\n    let result = '';\n    for (let i = 0; i < decoded.length; i++) {\n        const hex = decoded[i]!.toString(16);\n        result += hex.length === 1 ? `0${hex}` : hex;\n    }\n    return result;\n}\n","import { ml_dsa65 } from '@noble/post-quantum/ml-dsa.js';\nimport { baseDecode, baseEncode } from '../utils/index.js';\n\nimport { type KeyPairString, KeyType } from './constants.js';\nimport { KeyPairBase, type Signature } from './key_pair_base.js';\nimport { PublicKey } from './public_key.js';\n\n/** ML-DSA-65 key pair for post-quantum transaction signing. */\nexport class KeyPairMLDSA65 extends KeyPairBase {\n    readonly publicKey: PublicKey;\n    readonly secretKey: string;\n\n    constructor(secretKey: string) {\n        super();\n        const secretKeyBytes = baseDecode(secretKey);\n        this.publicKey = new PublicKey({ keyType: KeyType.MLDSA65, data: ml_dsa65.getPublicKey(secretKeyBytes) });\n        this.secretKey = secretKey;\n    }\n\n    static fromRandom(): KeyPairMLDSA65 {\n        const { secretKey } = ml_dsa65.keygen();\n        return new KeyPairMLDSA65(baseEncode(secretKey));\n    }\n\n    sign(message: Uint8Array): Signature {\n        return { signature: ml_dsa65.sign(message, baseDecode(this.secretKey)), publicKey: this.publicKey };\n    }\n\n    verify(message: Uint8Array, signature: Uint8Array): boolean {\n        return this.publicKey.verify(message, signature);\n    }\n\n    toString(): KeyPairString {\n        return `ml-dsa-65:${this.secretKey}`;\n    }\n\n    getPublicKey(): PublicKey {\n        return this.publicKey;\n    }\n}\n","import { secp256k1 } from '@noble/curves/secp256k1.js';\nimport { baseDecode, baseEncode } from '../utils/index.js';\n\nimport { type KeyPairString, KeySize, KeyType } from './constants.js';\nimport { KeyPairBase, type Signature } from './key_pair_base.js';\nimport { PublicKey } from './public_key.js';\n\n/**\n * This class provides key pair functionality for secp256k1 curve:\n * generating key pairs, encoding key pairs, signing and verifying.\n * nearcore expects secp256k1 public keys to be 64 bytes at all times,\n * even when string encoded the secp256k1 library returns 65 byte keys\n * (including a 1 byte header that indicates how the pubkey was encoded).\n * We'll force the secp256k1 library to always encode uncompressed\n * keys with the corresponding 0x04 header byte, then manually\n * insert/remove that byte as needed.\n */\nexport class KeyPairSecp256k1 extends KeyPairBase {\n    readonly publicKey: PublicKey;\n    readonly secretKey: string;\n    readonly extendedSecretKey: string;\n\n    /**\n     * Construct an instance of key pair given a secret key.\n     * It's generally assumed that these are encoded in base58.\n     * @param {string} extendedSecretKey\n     */\n    constructor(extendedSecretKey: string) {\n        super();\n        const decoded = baseDecode(extendedSecretKey);\n        const secretKey = new Uint8Array(decoded.slice(0, KeySize.SECRET_KEY));\n        const withHeader = secp256k1.getPublicKey(new Uint8Array(secretKey), false);\n        const data = withHeader.subarray(1); // remove the 0x04 header byte\n        this.publicKey = new PublicKey({\n            keyType: KeyType.SECP256K1,\n            data,\n        });\n        this.secretKey = baseEncode(secretKey);\n        this.extendedSecretKey = extendedSecretKey;\n    }\n\n    /**\n     * Generate a new random keypair.\n     * @example\n     * const keyRandom = KeyPair.fromRandom();\n     * keyRandom.publicKey\n     * // returns [PUBLIC_KEY]\n     *\n     * keyRandom.secretKey\n     * // returns [SECRET_KEY]\n     */\n    static fromRandom() {\n        const secretKey = crypto.getRandomValues(new Uint8Array(KeySize.SECRET_KEY));\n        const withHeader = secp256k1.getPublicKey(secretKey, false);\n        const publicKey = withHeader.subarray(1);\n        const extendedSecretKey = new Uint8Array([...secretKey, ...publicKey]);\n        return new KeyPairSecp256k1(baseEncode(extendedSecretKey));\n    }\n\n    sign(message: Uint8Array): Signature {\n        // nearcore expects 65 byte signatures formed by appending the recovery id to the 64 byte signature\n        // noble v2 'recovered' format is [recovery, r, s] but NEAR expects [r, s, recovery]\n        // prehash: false because NEAR already provides a sha256-hashed message\n        const raw = secp256k1.sign(message, baseDecode(this.secretKey), { prehash: false, format: 'recovered' });\n        const signature = new Uint8Array(65);\n        signature.set(raw.subarray(1), 0); // r, s (64 bytes)\n        signature[64] = raw[0]!; // recovery byte\n        return { signature, publicKey: this.publicKey };\n    }\n\n    verify(message: Uint8Array, signature: Uint8Array): boolean {\n        return this.publicKey.verify(message, signature);\n    }\n\n    toString(): KeyPairString {\n        return `secp256k1:${this.extendedSecretKey}`;\n    }\n\n    getPublicKey(): PublicKey {\n        return this.publicKey;\n    }\n}\n","import type { CurveType, KeyPairString } from './constants.js';\nimport { KeyPairBase } from './key_pair_base.js';\nimport { KeyPairEd25519 } from './key_pair_ed25519.js';\nimport { KeyPairMLDSA65 } from './key_pair_ml_dsa_65.js';\nimport { KeyPairSecp256k1 } from './key_pair_secp256k1.js';\n\nexport abstract class KeyPair extends KeyPairBase {\n    /**\n     * @param curve Name of elliptical curve, case-insensitive\n     * @returns Random KeyPair based on the curve\n     */\n    static fromRandom(curve: CurveType): KeyPair {\n        switch (curve.toUpperCase()) {\n            case 'ED25519':\n                return KeyPairEd25519.fromRandom();\n            case 'SECP256K1':\n                return KeyPairSecp256k1.fromRandom();\n            case 'ML-DSA-65':\n                return KeyPairMLDSA65.fromRandom();\n            default:\n                throw new Error(`Unknown curve ${curve}`);\n        }\n    }\n\n    /**\n     * Creates a key pair from an encoded key string.\n     * @param encodedKey The encoded key string.\n     * @returns {KeyPair} The key pair created from the encoded key string.\n     */\n    static fromString(encodedKey: KeyPairString): KeyPair {\n        const parts = encodedKey.split(':');\n        if (parts.length === 2) {\n            switch (parts[0]!.toUpperCase()) {\n                case 'ED25519':\n                    return new KeyPairEd25519(parts[1]!);\n                case 'SECP256K1':\n                    return new KeyPairSecp256k1(parts[1]!);\n                case 'ML-DSA-65':\n                    return new KeyPairMLDSA65(parts[1]!);\n                default:\n                    throw new Error(`Unknown curve: ${parts[0]}`);\n            }\n        } else {\n            throw new Error('Invalid encoded key format, must be <curve>:<encoded key>');\n        }\n    }\n}\n","import { PublicKey } from '../../crypto/public_key.js';\nimport type {\n    ActionError,\n    ActionsValidationError,\n    BlockReference,\n    CryptoHash,\n    FunctionCallError,\n    HostError,\n    InvalidAccessKeyError,\n    InvalidTxError,\n    ReceiptValidationError,\n    RpcTransactionResponse,\n    TxExecutionError,\n} from '../../rpc/types.gen.js';\nimport {\n    AccessKeyDepositWithFunctionCallActionError,\n    AccessKeyDoesNotExistError,\n    AccessKeyMethodNameMismatchActionError,\n    AccessKeyNotEnoughAllowanceActionError,\n    AccessKeyNotFoundActionError,\n    AccessKeyReceiverMismatchActionError,\n    AccessKeyRequiresFullAccessActionError,\n    AccountAlreadyExistsActionError,\n    AccountDoesNotExistActionError,\n    AccountDoesNotExistError,\n    ActionExecutionError,\n    ActorNoPermissionActionError,\n    AddKeyAlreadyExistsActionError,\n    AddKeyMethodNameLengthExceededActionError,\n    AddKeyMethodNamesNumberOfBytesExceededActionError,\n    ContractCodeDoesNotExistError,\n    ContractExecutionError,\n    ContractMethodInvalidSignatureError,\n    ContractMethodNameEmptyError,\n    ContractMethodNotFoundError,\n    ContractSizeExceededValidationActionError,\n    CostOverflowError,\n    CreateAccountNotAllowedActionError,\n    CreateAccountOnlyByRegistrarActionError,\n    DelegateActionExpiredActionError,\n    DelegateActionInvalidNonceActionError,\n    DelegateActionInvalidSignatureActionError,\n    DelegateActionMustBeOnlyOneActionError,\n    DelegateActionNonceTooLargeActionError,\n    DelegateActionSenderDoesNotMatchTxReceiverActionError,\n    DeleteAccountStakingActionError,\n    DeleteAccountWithLargeStateActionError,\n    DeleteActionMustBeFinalActionError,\n    DeleteKeyDoesNotExistActionError,\n    DeterministicStateInitKeyLengthExceededActionError,\n    DeterministicStateInitValueLengthExceededActionError,\n    DoesNotTrackShardError,\n    EpochOutOfBoundsError,\n    FlatStorageBlockNotSupportedError,\n    FunctionCallArgumentsLengthExceededActionError,\n    FunctionCallMethodNameLengthExceededActionError,\n    FunctionCallZeroAttachedGasActionError,\n    GarbageCollectedBlockError,\n    GasKeyAlreadyExistsActionError,\n    GasKeyDoesNotExistActionError,\n    GasKeyDoesNotExistError,\n    GasKeyPermissionInvalidActionError,\n    GasKeyTooManyNoncesRequestedActionError,\n    GlobalContractCodeDoesNotExistError,\n    GlobalContractDoesNotExistActionError,\n    HandlerError,\n    HostAltBn128InvalidInputError,\n    HostBadUtf8Error,\n    HostBadUtf16Error,\n    HostBalanceExceededError,\n    HostCannotAppendActionToJointPromiseError,\n    HostCannotReturnJointPromiseError,\n    HostDeprecatedError,\n    HostECRecoverError,\n    HostEd25519VerifyInvalidInputError,\n    HostEmptyMethodNameError,\n    HostGasExceededError,\n    HostGasLimitExceededError,\n    HostGuestPanicError,\n    HostIntegerOverflowError,\n    HostInvalidAccountIdError,\n    HostInvalidIteratorIndexError,\n    HostInvalidMethodNameError,\n    HostInvalidPromiseIndexError,\n    HostInvalidPromiseResultIndexError,\n    HostInvalidPublicKeyError,\n    HostInvalidReceiptIndexError,\n    HostInvalidRegisterIdError,\n    HostIteratorWasInvalidatedError,\n    HostKeyLengthExceededError,\n    HostMemoryAccessViolationError,\n    HostNumberInputDataDependenciesExceededError,\n    HostNumberOfLogsExceededError,\n    HostNumberPromisesExceededError,\n    HostProhibitedInViewError,\n    HostReturnedValueLengthExceededError,\n    HostSizeExceededError,\n    HostTotalLogLengthExceededError,\n    HostValueLengthExceededError,\n    InconsistentStateError,\n    InsufficientStakeActionError,\n    IntegerOverflowValidationActionError,\n    InternalHandlerError,\n    InternalRpcError,\n    InvalidAccountError,\n    InvalidAccountIdValidationActionError,\n    InvalidChainError,\n    InvalidDataReceiverIdReceiptActionError,\n    InvalidDeterministicStateInitReceiverActionError,\n    InvalidNonceError,\n    InvalidPredecessorIdReceiptActionError,\n    InvalidReceiverIdError,\n    InvalidReceiverIdReceiptActionError,\n    InvalidRefundToReceiptActionError,\n    InvalidShardIdError,\n    InvalidSignatureError,\n    InvalidSignerIdError,\n    InvalidSignerIdReceiptActionError,\n    InvalidTransactionError,\n    InvalidTransactionVersionError,\n    LackBalanceForStateActionError,\n    MemTrieLoadingError,\n    MissingTrieValueError,\n    NodeIsSyncingError,\n    NoNewBlocksError,\n    NonceTooLargeError,\n    NoSyncedBlocksError,\n    NotConfirmedError,\n    NotEnoughBalanceError,\n    NotSyncedYetError,\n    NumberInputDataDependenciesExceededReceiptActionError,\n    OnlyImplicitAccountCreationAllowedActionError,\n    PrepareWasmError,\n    ReceiptSizeExceededActionError,\n    RequestRoutedError,\n    type RequestValidationError,\n    ReturnedValueLengthExceededReceiptActionError,\n    RpcError,\n    RpcMethodNotFoundError,\n    RpcRequestParseError,\n    ShardCongestedError,\n    ShardStuckError,\n    SignerDoesNotExistError,\n    StorageInconsistentStateError,\n    StorageInternalError,\n    TooLargeContractStateError,\n    TotalNumberOfActionsExceededActionError,\n    TotalPrepaidGasExceededActionError,\n    TransactionExecutionError,\n    TransactionExpiredError,\n    TransactionSizeExceededError,\n    TransactionTimeoutError,\n    TriesToStakeActionError,\n    TriesToUnstakeActionError,\n    UnavailableShardError,\n    UnexpectedTrieValueError,\n    UnknownBlockError,\n    UnknownChunkError,\n    UnknownEpochError,\n    UnknownReceiptError,\n    UnknownTransactionError,\n    UnknownTransactionOrReceiptError,\n    UnsuitableStakingKeyActionError,\n    UnsupportedProtocolFeatureActionError,\n    ValidatorInfoUnavailableError,\n    WasmTrapError,\n} from '../../rpc-errors/index.js';\nimport type { BlockHash } from '../../types/index.js';\nimport type { Methods } from '../methods.js';\n\ntype RawRpcError = Extract<Methods[keyof Methods]['response'], { error: object }>['error'];\n\ntype RawHandlerError = NonNullable<Extract<RawRpcError, { name: 'HANDLER_ERROR' }>>;\n\nexport function parseRpcError(error: RawRpcError): RpcError {\n    switch (error.name) {\n        case 'REQUEST_VALIDATION_ERROR': {\n            return parseRequestValidationError(error.cause);\n        }\n        case 'HANDLER_ERROR': {\n            if (!error.cause) return new RpcError(`Handler error with no cause`);\n\n            return parseHandlerError(error);\n        }\n        case 'INTERNAL_ERROR': {\n            return new InternalRpcError(error.cause.info.error_message);\n        }\n        default:\n            // ensures all RpcError variants are handled at compile time\n            error satisfies never;\n            return new RpcError(`Unknown RPC error`);\n    }\n}\n\ntype RawRequestValidationError = NonNullable<Extract<RawRpcError, { name: 'REQUEST_VALIDATION_ERROR' }>['cause']>;\n\nfunction parseRequestValidationError(error: RawRequestValidationError): RequestValidationError {\n    switch (error.name) {\n        case 'METHOD_NOT_FOUND':\n            return new RpcMethodNotFoundError(error.info.method_name);\n        case 'PARSE_ERROR':\n            return new RpcRequestParseError(error.info.error_message);\n        default:\n            // ensures all RequestValidationError variants are handled at compile time\n            error satisfies never;\n            return new RpcError('Unknown request validation error');\n    }\n}\n\nfunction parseHandlerError(rawError: RawHandlerError): HandlerError {\n    const error = rawError.cause!;\n\n    switch (error.name) {\n        case 'UNKNOWN_ACCOUNT': {\n            return new AccountDoesNotExistError(\n                error.info.requested_account_id,\n                error.info.block_hash,\n                error.info.block_height\n            );\n        }\n        case 'UNKNOWN_ACCESS_KEY':\n            return new AccessKeyDoesNotExistError(\n                PublicKey.fromString(error.info.public_key),\n                error.info.block_hash,\n                error.info.block_height\n            );\n        case 'NO_CONTRACT_CODE':\n            return new ContractCodeDoesNotExistError(\n                error.info.contract_account_id,\n                error.info.block_hash,\n                error.info.block_height\n            );\n        case 'UNKNOWN_BLOCK':\n            return new UnknownBlockError(\n                'block_reference' in error.info ? (error.info.block_reference as BlockReference) : undefined\n            );\n        case 'UNKNOWN_GAS_KEY':\n            return new GasKeyDoesNotExistError(\n                PublicKey.fromString(error.info.public_key),\n                error.info.block_hash,\n                error.info.block_height\n            );\n\n        case 'CONTRACT_EXECUTION_ERROR':\n            return parseFunctionCallError(\n                'error' in error.info ? error.info.error : error.info.vm_error,\n                error.info.block_hash,\n                error.info.block_height\n            );\n\n        case 'NO_GLOBAL_CONTRACT_CODE':\n            return new GlobalContractCodeDoesNotExistError(\n                error.info.identifier,\n                error.info.block_hash,\n                error.info.block_height\n            );\n\n        case 'GARBAGE_COLLECTED_BLOCK':\n            return new GarbageCollectedBlockError(error.info.block_hash, error.info.block_height);\n\n        case 'INVALID_SHARD_ID':\n            return new InvalidShardIdError(error.info.shard_id);\n\n        case 'UNAVAILABLE_SHARD':\n            return new UnavailableShardError(\n                'requested_shard_id' in error.info ? error.info.requested_shard_id : error.info.shard_id\n            );\n\n        case 'INVALID_TRANSACTION':\n            if (\n                'data' in rawError &&\n                typeof rawError.data === 'object' &&\n                rawError.data !== null &&\n                'TxExecutionError' in rawError.data &&\n                typeof rawError.data.TxExecutionError === 'object' &&\n                rawError.data.TxExecutionError !== null\n            ) {\n                return parseTransactionExecutionError(rawError.data.TxExecutionError as TxExecutionError, '', '');\n            }\n\n            return new InvalidTransactionError();\n\n        case 'UNKNOWN_TRANSACTION':\n            return new UnknownTransactionError(error.info.requested_transaction_hash);\n\n        case 'TIMEOUT_ERROR':\n            return new TransactionTimeoutError();\n\n        case 'UNKNOWN_EPOCH':\n            return new UnknownEpochError();\n\n        case 'EPOCH_OUT_OF_BOUNDS':\n            return new EpochOutOfBoundsError(error.info.epoch_id);\n\n        case 'NODE_IS_SYNCING':\n            return new NodeIsSyncingError();\n\n        case 'NO_NEW_BLOCKS':\n            return new NoNewBlocksError();\n\n        case 'UNKNOWN_RECEIPT':\n            return new UnknownReceiptError(error.info.receipt_id);\n\n        case 'INTERNAL_ERROR':\n            return new InternalHandlerError(\n                'error_message' in error.info ? error.info.error_message : error.info.debug_info\n            );\n\n        case 'NOT_SYNCED_YET':\n            return new NotSyncedYetError();\n\n        case 'UNKNOWN_CHUNK':\n            return new UnknownChunkError(error.info.chunk_hash);\n\n        case 'DOES_NOT_TRACK_SHARD':\n            return new DoesNotTrackShardError();\n\n        case 'REQUEST_ROUTED':\n            return new RequestRoutedError(error.info.transaction_hash);\n\n        case 'VALIDATOR_INFO_UNAVAILABLE':\n            return new ValidatorInfoUnavailableError();\n\n        case 'NO_SYNCED_BLOCKS':\n            return new NoSyncedBlocksError();\n\n        case 'INVALID_ACCOUNT':\n            return new InvalidAccountError(\n                error.info.requested_account_id,\n                error.info.block_hash,\n                error.info.block_height\n            );\n\n        case 'TOO_LARGE_CONTRACT_STATE':\n            return new TooLargeContractStateError(\n                error.info.contract_account_id,\n                error.info.block_hash,\n                error.info.block_height\n            );\n\n        case 'INCONSISTENT_STATE':\n            return new InconsistentStateError(error.info.execution_outcome_shard_id, error.info.number_or_shards);\n\n        case 'NOT_CONFIRMED':\n            return new NotConfirmedError(error.info.transaction_or_receipt_id);\n\n        case 'UNKNOWN_TRANSACTION_OR_RECEIPT':\n            return new UnknownTransactionOrReceiptError(error.info.transaction_or_receipt_id);\n\n        default:\n            // ensures all HandlerError variants are handled at compile time\n            error satisfies never;\n            return new HandlerError('Unknown handler error');\n    }\n}\n\nfunction parseFunctionCallError(\n    error: FunctionCallError,\n    blockHash: BlockHash,\n    blockHeight: number\n): ContractExecutionError {\n    if (error === 'WasmUnknownError') return new ContractExecutionError('Unknown WASM error', blockHash, blockHeight);\n    // unsused\n    if (error === '_EVMError') return new ContractExecutionError(error, blockHash, blockHeight);\n\n    if ('CompilationError' in error) {\n        if ('CodeDoesNotExist' in error.CompilationError)\n            return new ContractCodeDoesNotExistError(\n                error.CompilationError.CodeDoesNotExist.account_id,\n                blockHash,\n                blockHeight\n            );\n\n        if ('WasmerCompileError' in error.CompilationError)\n            return new ContractExecutionError(error.CompilationError.WasmerCompileError.msg, blockHash, blockHeight);\n\n        if ('PrepareError' in error.CompilationError)\n            return new PrepareWasmError(error.CompilationError.PrepareError, blockHash, blockHeight);\n\n        // ensures all CompilationError variants are handled at compile time\n        error.CompilationError satisfies never;\n        throw new ContractExecutionError('Unknown compilation error', blockHash, blockHeight);\n    }\n\n    if ('MethodResolveError' in error) {\n        switch (error.MethodResolveError) {\n            case 'MethodEmptyName':\n                return new ContractMethodNameEmptyError(blockHash, blockHeight);\n            case 'MethodNotFound':\n                return new ContractMethodNotFoundError(blockHash, blockHeight);\n            case 'MethodInvalidSignature':\n                return new ContractMethodInvalidSignatureError(blockHash, blockHeight);\n            default:\n                // ensures all MethodResolveError variants are handled at compile time\n                error.MethodResolveError satisfies never;\n                return new ContractExecutionError('Unknown method resolve error', blockHash, blockHeight);\n        }\n    }\n\n    if ('HostError' in error) return parseHostError(error.HostError, blockHash, blockHeight);\n\n    if ('LinkError' in error) return new ContractExecutionError(error.LinkError.msg, blockHash, blockHeight);\n\n    if ('WasmTrap' in error) return new WasmTrapError(error.WasmTrap, blockHash, blockHeight);\n\n    if ('ExecutionError' in error) return new ContractExecutionError(error.ExecutionError, blockHash, blockHeight);\n\n    // ensures all ContractExecutionError variants are handled at compile time\n    error satisfies never;\n    return new ContractExecutionError('Unknown contract execution error', blockHash, blockHeight);\n}\n\nfunction parseHostError(error: HostError, blockHash: BlockHash, blockHeight: number): ContractExecutionError {\n    if (typeof error === 'string') {\n        switch (error) {\n            case 'BadUTF16':\n                return new HostBadUtf16Error(blockHash, blockHeight);\n            case 'BadUTF8':\n                return new HostBadUtf8Error(blockHash, blockHeight);\n            case 'GasExceeded':\n                return new HostGasExceededError(blockHash, blockHeight);\n            case 'GasLimitExceeded':\n                return new HostGasLimitExceededError(blockHash, blockHeight);\n            case 'BalanceExceeded':\n                return new HostBalanceExceededError(blockHash, blockHeight);\n            case 'EmptyMethodName':\n                return new HostEmptyMethodNameError(blockHash, blockHeight);\n            case 'IntegerOverflow':\n                return new HostIntegerOverflowError(blockHash, blockHeight);\n            case 'CannotAppendActionToJointPromise':\n                return new HostCannotAppendActionToJointPromiseError(blockHash, blockHeight);\n            case 'CannotReturnJointPromise':\n                return new HostCannotReturnJointPromiseError(blockHash, blockHeight);\n            case 'MemoryAccessViolation':\n                return new HostMemoryAccessViolationError(blockHash, blockHeight);\n            case 'InvalidAccountId':\n                return new HostInvalidAccountIdError(blockHash, blockHeight);\n            case 'InvalidMethodName':\n                return new HostInvalidMethodNameError(blockHash, blockHeight);\n            case 'InvalidPublicKey':\n                return new HostInvalidPublicKeyError(blockHash, blockHeight);\n        }\n    }\n\n    if ('GuestPanic' in error) {\n        return new HostGuestPanicError(error.GuestPanic.panic_msg, blockHash, blockHeight);\n    }\n\n    if ('InvalidPromiseIndex' in error) {\n        return new HostInvalidPromiseIndexError(error.InvalidPromiseIndex.promise_idx, blockHash, blockHeight);\n    }\n\n    if ('InvalidPromiseResultIndex' in error) {\n        return new HostInvalidPromiseResultIndexError(\n            error.InvalidPromiseResultIndex.result_idx,\n            blockHash,\n            blockHeight\n        );\n    }\n\n    if ('InvalidRegisterId' in error) {\n        return new HostInvalidRegisterIdError(error.InvalidRegisterId.register_id, blockHash, blockHeight);\n    }\n\n    if ('IteratorWasInvalidated' in error) {\n        return new HostIteratorWasInvalidatedError(error.IteratorWasInvalidated.iterator_index, blockHash, blockHeight);\n    }\n\n    if ('InvalidReceiptIndex' in error) {\n        return new HostInvalidReceiptIndexError(error.InvalidReceiptIndex.receipt_index, blockHash, blockHeight);\n    }\n\n    if ('InvalidIteratorIndex' in error) {\n        return new HostInvalidIteratorIndexError(error.InvalidIteratorIndex.iterator_index, blockHash, blockHeight);\n    }\n\n    if ('ProhibitedInView' in error) {\n        return new HostProhibitedInViewError(error.ProhibitedInView.method_name, blockHash, blockHeight);\n    }\n\n    if ('NumberOfLogsExceeded' in error) {\n        return new HostNumberOfLogsExceededError(error.NumberOfLogsExceeded.limit, blockHash, blockHeight);\n    }\n\n    if ('KeyLengthExceeded' in error) {\n        return new HostKeyLengthExceededError(\n            error.KeyLengthExceeded.length,\n            error.KeyLengthExceeded.limit,\n            blockHash,\n            blockHeight\n        );\n    }\n\n    if ('ValueLengthExceeded' in error) {\n        return new HostValueLengthExceededError(\n            error.ValueLengthExceeded.length,\n            error.ValueLengthExceeded.limit,\n            blockHash,\n            blockHeight\n        );\n    }\n\n    if ('TotalLogLengthExceeded' in error) {\n        return new HostTotalLogLengthExceededError(\n            error.TotalLogLengthExceeded.length,\n            error.TotalLogLengthExceeded.limit,\n            blockHash,\n            blockHeight\n        );\n    }\n\n    if ('NumberPromisesExceeded' in error) {\n        return new HostNumberPromisesExceededError(\n            error.NumberPromisesExceeded.limit,\n            error.NumberPromisesExceeded.number_of_promises,\n            blockHash,\n            blockHeight\n        );\n    }\n\n    if ('NumberInputDataDependenciesExceeded' in error) {\n        return new HostNumberInputDataDependenciesExceededError(\n            error.NumberInputDataDependenciesExceeded.limit,\n            error.NumberInputDataDependenciesExceeded.number_of_input_data_dependencies,\n            blockHash,\n            blockHeight\n        );\n    }\n\n    if ('ReturnedValueLengthExceeded' in error) {\n        return new HostReturnedValueLengthExceededError(\n            error.ReturnedValueLengthExceeded.length,\n            error.ReturnedValueLengthExceeded.limit,\n            blockHash,\n            blockHeight\n        );\n    }\n\n    if ('ContractSizeExceeded' in error) {\n        return new HostSizeExceededError(\n            error.ContractSizeExceeded.size,\n            error.ContractSizeExceeded.limit,\n            blockHash,\n            blockHeight\n        );\n    }\n\n    if ('Deprecated' in error) {\n        return new HostDeprecatedError(error.Deprecated.method_name, blockHash, blockHeight);\n    }\n\n    if ('ECRecoverError' in error) {\n        return new HostECRecoverError(error.ECRecoverError.msg, blockHash, blockHeight);\n    }\n\n    if ('AltBn128InvalidInput' in error) {\n        return new HostAltBn128InvalidInputError(error.AltBn128InvalidInput.msg, blockHash, blockHeight);\n    }\n\n    if ('Ed25519VerifyInvalidInput' in error) {\n        return new HostEd25519VerifyInvalidInputError(error.Ed25519VerifyInvalidInput.msg, blockHash, blockHeight);\n    }\n\n    // ensures all HostError variants are handled at compile time\n    error satisfies never;\n    return new ContractExecutionError('Unknown host error', blockHash, blockHeight);\n}\n\nexport function parseRpcErrorMessage(errorMessage: string, blockHash: string, blockHeight: number): RpcError {\n    switch (true) {\n        case /^account (.*?) does not exist while viewing$/.test(errorMessage): {\n            const [, accountId] = errorMessage.match(/^account (.*?) does not exist while viewing$/)!;\n            if (typeof accountId !== 'string') return new RpcError(errorMessage);\n            return new AccountDoesNotExistError(accountId, blockHash, blockHeight);\n        }\n        case /^Account (.*?) doesn't exist$/.test(errorMessage): {\n            const [, accountId] = errorMessage.match(/^Account (.*?) doesn't exist$/)!;\n            if (typeof accountId !== 'string') return new RpcError(errorMessage);\n            return new AccountDoesNotExistError(accountId, blockHash, blockHeight);\n        }\n        case /^access key (.*?) does not exist while viewing$/.test(errorMessage): {\n            const [, pk] = errorMessage.match(/^access key (.*?) does not exist while viewing$/)!;\n            if (typeof pk !== 'string') return new RpcError(errorMessage);\n            return new AccessKeyDoesNotExistError(PublicKey.fromString(pk), blockHash, blockHeight);\n        }\n        case /^wasm execution failed with error: FunctionCallError\\(CompilationError\\(CodeDoesNotExist { account_id: \"(.*?)\" }\\)\\)$/.test(\n            errorMessage\n        ): {\n            const [, accountId] = errorMessage.match(\n                /^wasm execution failed with error: FunctionCallError\\(CompilationError\\(CodeDoesNotExist { account_id: \"(.*?)\" }\\)\\)$/\n            )!;\n            if (typeof accountId !== 'string') return new RpcError(errorMessage);\n            return new ContractCodeDoesNotExistError(accountId, blockHash, blockHeight);\n        }\n        case /^wasm execution failed with error: CompilationError\\(CodeDoesNotExist { account_id: \"(.*?)\" }\\)$/.test(\n            errorMessage\n        ): {\n            const [, accountId] = errorMessage.match(\n                /^wasm execution failed with error: CompilationError\\(CodeDoesNotExist { account_id: \"(.*?)\" }\\)$/\n            )!;\n            if (typeof accountId !== 'string') return new RpcError(errorMessage);\n            return new ContractCodeDoesNotExistError(accountId, blockHash, blockHeight);\n        }\n        case /^wasm execution failed with error: FunctionCallError\\(MethodResolveError\\(MethodNotFound\\)\\)$/.test(\n            errorMessage\n        ): {\n            return new ContractMethodNotFoundError(blockHash, blockHeight);\n        }\n        case /^wasm execution failed with error: MethodResolveError\\(MethodNotFound\\)$/.test(errorMessage): {\n            return new ContractMethodNotFoundError(blockHash, blockHeight);\n        }\n        // case /Transaction nonce \\d+ must be larger than nonce of the used access key \\d+/.test(errorMessage):\n        default:\n            return new RpcError(errorMessage);\n    }\n}\n\nexport function parseTransactionExecutionError(\n    error: TxExecutionError,\n    txHash: CryptoHash,\n    blockHash: BlockHash,\n    transactionResult?: RpcTransactionResponse\n): RpcError {\n    let parsedError: RpcError;\n\n    if ('ActionError' in error) {\n        parsedError = parseActionError(error.ActionError, txHash, blockHash);\n    } else if ('InvalidTxError' in error) {\n        parsedError = parseInvalidTransactionError(error.InvalidTxError, txHash, blockHash);\n    } else {\n        // ensures all TxExecutionError variants are handled at compile time\n        error satisfies never;\n        parsedError = new TransactionExecutionError('Unknown transaction execution error', txHash, blockHash);\n    }\n\n    if (\n        transactionResult &&\n        (parsedError instanceof TransactionExecutionError || parsedError instanceof ContractExecutionError)\n    ) {\n        parsedError.transactionResult = transactionResult;\n    }\n\n    return parsedError;\n}\n\nfunction parseActionError(\n    error: ActionError,\n    txHash: CryptoHash,\n    blockHash: BlockHash\n): ActionExecutionError | ContractExecutionError {\n    const actionIndex = typeof error.index === 'number' ? error.index : null;\n\n    if (typeof error.kind === 'string') {\n        switch (error.kind) {\n            case 'DelegateActionInvalidSignature':\n                return new DelegateActionInvalidSignatureActionError(actionIndex, txHash, blockHash);\n            case 'DelegateActionExpired':\n                return new DelegateActionExpiredActionError(actionIndex, txHash, blockHash);\n            default:\n                // ensures all string ActionErrorKind variants are handled at compile time\n                error.kind satisfies never;\n                return new ActionExecutionError('Unknown action error', actionIndex, txHash, blockHash);\n        }\n    }\n\n    if ('AccountAlreadyExists' in error.kind) {\n        return new AccountAlreadyExistsActionError(\n            error.kind.AccountAlreadyExists.account_id,\n            actionIndex,\n            txHash,\n            blockHash\n        );\n    }\n\n    if ('AccountDoesNotExist' in error.kind) {\n        return new AccountDoesNotExistActionError(\n            error.kind.AccountDoesNotExist.account_id,\n            actionIndex,\n            txHash,\n            blockHash\n        );\n    }\n\n    if ('ActorNoPermission' in error.kind) {\n        return new ActorNoPermissionActionError(\n            error.kind.ActorNoPermission.account_id,\n            error.kind.ActorNoPermission.actor_id,\n            actionIndex,\n            txHash,\n            blockHash\n        );\n    }\n\n    if ('AddKeyAlreadyExists' in error.kind) {\n        return new AddKeyAlreadyExistsActionError(\n            error.kind.AddKeyAlreadyExists.account_id,\n            PublicKey.fromString(error.kind.AddKeyAlreadyExists.public_key),\n            actionIndex,\n            txHash,\n            blockHash\n        );\n    }\n\n    if ('DeleteKeyDoesNotExist' in error.kind) {\n        return new DeleteKeyDoesNotExistActionError(\n            error.kind.DeleteKeyDoesNotExist.account_id,\n            PublicKey.from(error.kind.DeleteKeyDoesNotExist.public_key),\n            actionIndex,\n            txHash,\n            blockHash\n        );\n    }\n\n    if ('DeleteAccountStaking' in error.kind) {\n        return new DeleteAccountStakingActionError(\n            error.kind.DeleteAccountStaking.account_id,\n            actionIndex,\n            txHash,\n            blockHash\n        );\n    }\n\n    if ('LackBalanceForState' in error.kind) {\n        return new LackBalanceForStateActionError(\n            error.kind.LackBalanceForState.account_id,\n            BigInt(error.kind.LackBalanceForState.amount),\n            actionIndex,\n            txHash,\n            blockHash\n        );\n    }\n\n    if ('TriesToUnstake' in error.kind) {\n        return new TriesToUnstakeActionError(error.kind.TriesToUnstake.account_id, actionIndex, txHash, blockHash);\n    }\n\n    if ('TriesToStake' in error.kind) {\n        return new TriesToStakeActionError(\n            error.kind.TriesToStake.account_id,\n            BigInt(error.kind.TriesToStake.balance),\n            BigInt(error.kind.TriesToStake.locked),\n            BigInt(error.kind.TriesToStake.stake),\n            actionIndex,\n            txHash,\n            blockHash\n        );\n    }\n\n    if ('InsufficientStake' in error.kind) {\n        return new InsufficientStakeActionError(\n            error.kind.InsufficientStake.account_id,\n            BigInt(error.kind.InsufficientStake.minimum_stake),\n            BigInt(error.kind.InsufficientStake.stake),\n            actionIndex,\n            txHash,\n            blockHash\n        );\n    }\n\n    if ('OnlyImplicitAccountCreationAllowed' in error.kind) {\n        return new OnlyImplicitAccountCreationAllowedActionError(\n            error.kind.OnlyImplicitAccountCreationAllowed.account_id,\n            actionIndex,\n            txHash,\n            blockHash\n        );\n    }\n\n    if ('DeleteAccountWithLargeState' in error.kind) {\n        return new DeleteAccountWithLargeStateActionError(\n            error.kind.DeleteAccountWithLargeState.account_id,\n            actionIndex,\n            txHash,\n            blockHash\n        );\n    }\n\n    if ('DelegateActionInvalidNonce' in error.kind) {\n        return new DelegateActionInvalidNonceActionError(\n            error.kind.DelegateActionInvalidNonce.ak_nonce,\n            error.kind.DelegateActionInvalidNonce.delegate_nonce,\n            actionIndex,\n            txHash,\n            blockHash\n        );\n    }\n\n    if ('DelegateActionNonceTooLarge' in error.kind) {\n        return new DelegateActionNonceTooLargeActionError(\n            error.kind.DelegateActionNonceTooLarge.delegate_nonce,\n            error.kind.DelegateActionNonceTooLarge.upper_bound,\n            actionIndex,\n            txHash,\n            blockHash\n        );\n    }\n\n    if ('GasKeyDoesNotExist' in error.kind) {\n        return new GasKeyDoesNotExistActionError(\n            error.kind.GasKeyDoesNotExist.account_id,\n            PublicKey.fromString(error.kind.GasKeyDoesNotExist.public_key),\n            actionIndex,\n            txHash,\n            blockHash\n        );\n    }\n\n    if ('GasKeyAlreadyExists' in error.kind) {\n        return new GasKeyAlreadyExistsActionError(\n            error.kind.GasKeyAlreadyExists.account_id,\n            PublicKey.fromString(error.kind.GasKeyAlreadyExists.public_key),\n            actionIndex,\n            txHash,\n            blockHash\n        );\n    }\n\n    if ('GlobalContractDoesNotExist' in error.kind) {\n        return new GlobalContractDoesNotExistActionError(\n            error.kind.GlobalContractDoesNotExist.identifier,\n            actionIndex,\n            txHash,\n            blockHash\n        );\n    }\n\n    if ('FunctionCallError' in error.kind) {\n        return parseFunctionCallError(\n            error.kind.FunctionCallError,\n            blockHash,\n            -1 // blockHeight is unknown here\n        );\n    }\n\n    if ('NewReceiptValidationError' in error.kind) {\n        return parseReceiptValidationError(error.kind.NewReceiptValidationError, actionIndex, txHash, blockHash);\n    }\n\n    if ('CreateAccountOnlyByRegistrar' in error.kind) {\n        return new CreateAccountOnlyByRegistrarActionError(\n            error.kind.CreateAccountOnlyByRegistrar.account_id,\n            error.kind.CreateAccountOnlyByRegistrar.predecessor_id,\n            error.kind.CreateAccountOnlyByRegistrar.registrar_account_id,\n            actionIndex,\n            txHash,\n            blockHash\n        );\n    }\n\n    if ('CreateAccountNotAllowed' in error.kind) {\n        return new CreateAccountNotAllowedActionError(\n            error.kind.CreateAccountNotAllowed.account_id,\n            error.kind.CreateAccountNotAllowed.predecessor_id,\n            actionIndex,\n            txHash,\n            blockHash\n        );\n    }\n\n    if ('DelegateActionSenderDoesNotMatchTxReceiver' in error.kind) {\n        return new DelegateActionSenderDoesNotMatchTxReceiverActionError(\n            error.kind.DelegateActionSenderDoesNotMatchTxReceiver.receiver_id,\n            error.kind.DelegateActionSenderDoesNotMatchTxReceiver.sender_id,\n            actionIndex,\n            txHash,\n            blockHash\n        );\n    }\n\n    if ('DelegateActionAccessKeyError' in error.kind) {\n        return parseInvalidAccessKeyError(error.kind.DelegateActionAccessKeyError, actionIndex, txHash, blockHash);\n    }\n\n    // ensures all ActionErrorKind variants are handled at compile time\n    error.kind satisfies never;\n    return new ActionExecutionError('Unknown action error', actionIndex, txHash, blockHash);\n}\n\nfunction parseReceiptValidationError(\n    error: ReceiptValidationError,\n    actionIndex: number | null,\n    txHash: CryptoHash,\n    blockHash: BlockHash\n): ActionExecutionError {\n    if ('InvalidPredecessorId' in error) {\n        return new InvalidPredecessorIdReceiptActionError(\n            error.InvalidPredecessorId.account_id,\n            actionIndex,\n            txHash,\n            blockHash\n        );\n    }\n\n    if ('InvalidReceiverId' in error) {\n        return new InvalidReceiverIdReceiptActionError(\n            error.InvalidReceiverId.account_id,\n            actionIndex,\n            txHash,\n            blockHash\n        );\n    }\n\n    if ('InvalidSignerId' in error) {\n        return new InvalidSignerIdReceiptActionError(error.InvalidSignerId.account_id, actionIndex, txHash, blockHash);\n    }\n\n    if ('InvalidDataReceiverId' in error) {\n        return new InvalidDataReceiverIdReceiptActionError(\n            error.InvalidDataReceiverId.account_id,\n            actionIndex,\n            txHash,\n            blockHash\n        );\n    }\n\n    if ('ReturnedValueLengthExceeded' in error) {\n        return new ReturnedValueLengthExceededReceiptActionError(\n            error.ReturnedValueLengthExceeded.length,\n            error.ReturnedValueLengthExceeded.limit,\n            actionIndex,\n            txHash,\n            blockHash\n        );\n    }\n\n    if ('NumberInputDataDependenciesExceeded' in error) {\n        return new NumberInputDataDependenciesExceededReceiptActionError(\n            error.NumberInputDataDependenciesExceeded.limit,\n            error.NumberInputDataDependenciesExceeded.number_of_input_data_dependencies,\n            actionIndex,\n            txHash,\n            blockHash\n        );\n    }\n\n    if ('ActionsValidation' in error) {\n        error.ActionsValidation;\n        return parseActionsValidationError(error.ActionsValidation, actionIndex, txHash, blockHash);\n    }\n\n    if ('ReceiptSizeExceeded' in error) {\n        return new ReceiptSizeExceededActionError(\n            error.ReceiptSizeExceeded.limit,\n            error.ReceiptSizeExceeded.size,\n            actionIndex,\n            txHash,\n            blockHash\n        );\n    }\n\n    if ('InvalidRefundTo' in error) {\n        return new InvalidRefundToReceiptActionError(error.InvalidRefundTo.account_id, actionIndex, txHash, blockHash);\n    }\n\n    // ensures all ReceiptValidationError variants are handled at compile time\n    error satisfies never;\n    return new ActionExecutionError('Unknown receipt validation error', actionIndex, txHash, blockHash);\n}\n\nfunction parseActionsValidationError(\n    error: ActionsValidationError,\n    actionIndex: number | null,\n    txHash: CryptoHash,\n    blockHash: BlockHash\n): ActionExecutionError {\n    if (typeof error === 'string') {\n        switch (error) {\n            case 'DeleteActionMustBeFinal':\n                return new DeleteActionMustBeFinalActionError(actionIndex, txHash, blockHash);\n            case 'IntegerOverflow':\n                return new IntegerOverflowValidationActionError(actionIndex, txHash, blockHash);\n            case 'FunctionCallZeroAttachedGas':\n                return new FunctionCallZeroAttachedGasActionError(actionIndex, txHash, blockHash);\n            case 'DelegateActionMustBeOnlyOne':\n                return new DelegateActionMustBeOnlyOneActionError(actionIndex, txHash, blockHash);\n            default:\n                // ensures all string ActionsValidationError variants are handled at compile time\n                error satisfies never;\n                return new ActionExecutionError('Unknown actions validation error', actionIndex, txHash, blockHash);\n        }\n    }\n\n    if ('TotalPrepaidGasExceeded' in error) {\n        return new TotalPrepaidGasExceededActionError(\n            error.TotalPrepaidGasExceeded.limit,\n            error.TotalPrepaidGasExceeded.total_prepaid_gas,\n            actionIndex,\n            txHash,\n            blockHash\n        );\n    }\n\n    if ('TotalNumberOfActionsExceeded' in error) {\n        return new TotalNumberOfActionsExceededActionError(\n            error.TotalNumberOfActionsExceeded.limit,\n            error.TotalNumberOfActionsExceeded.total_number_of_actions,\n            actionIndex,\n            txHash,\n            blockHash\n        );\n    }\n\n    if ('AddKeyMethodNamesNumberOfBytesExceeded' in error) {\n        return new AddKeyMethodNamesNumberOfBytesExceededActionError(\n            error.AddKeyMethodNamesNumberOfBytesExceeded.limit,\n            error.AddKeyMethodNamesNumberOfBytesExceeded.total_number_of_bytes,\n            actionIndex,\n            txHash,\n            blockHash\n        );\n    }\n\n    if ('AddKeyMethodNameLengthExceeded' in error) {\n        return new AddKeyMethodNameLengthExceededActionError(\n            error.AddKeyMethodNameLengthExceeded.length,\n            error.AddKeyMethodNameLengthExceeded.limit,\n            actionIndex,\n            txHash,\n            blockHash\n        );\n    }\n\n    if ('InvalidAccountId' in error) {\n        return new InvalidAccountIdValidationActionError(\n            error.InvalidAccountId.account_id,\n            actionIndex,\n            txHash,\n            blockHash\n        );\n    }\n\n    if ('ContractSizeExceeded' in error) {\n        return new ContractSizeExceededValidationActionError(\n            error.ContractSizeExceeded.limit,\n            error.ContractSizeExceeded.size,\n            actionIndex,\n            txHash,\n            blockHash\n        );\n    }\n\n    if ('FunctionCallMethodNameLengthExceeded' in error) {\n        return new FunctionCallMethodNameLengthExceededActionError(\n            error.FunctionCallMethodNameLengthExceeded.length,\n            error.FunctionCallMethodNameLengthExceeded.limit,\n            actionIndex,\n            txHash,\n            blockHash\n        );\n    }\n\n    if ('FunctionCallArgumentsLengthExceeded' in error) {\n        return new FunctionCallArgumentsLengthExceededActionError(\n            error.FunctionCallArgumentsLengthExceeded.length,\n            error.FunctionCallArgumentsLengthExceeded.limit,\n            actionIndex,\n            txHash,\n            blockHash\n        );\n    }\n\n    if ('UnsuitableStakingKey' in error) {\n        return new UnsuitableStakingKeyActionError(\n            PublicKey.fromString(error.UnsuitableStakingKey.public_key),\n            actionIndex,\n            txHash,\n            blockHash\n        );\n    }\n\n    if ('UnsupportedProtocolFeature' in error) {\n        return new UnsupportedProtocolFeatureActionError(\n            error.UnsupportedProtocolFeature.protocol_feature,\n            error.UnsupportedProtocolFeature.version,\n            actionIndex,\n            txHash,\n            blockHash\n        );\n    }\n\n    if ('InvalidDeterministicStateInitReceiver' in error) {\n        return new InvalidDeterministicStateInitReceiverActionError(\n            error.InvalidDeterministicStateInitReceiver.derived_id,\n            error.InvalidDeterministicStateInitReceiver.receiver_id,\n            actionIndex,\n            txHash,\n            blockHash\n        );\n    }\n\n    if ('DeterministicStateInitKeyLengthExceeded' in error) {\n        return new DeterministicStateInitKeyLengthExceededActionError(\n            error.DeterministicStateInitKeyLengthExceeded.length,\n            error.DeterministicStateInitKeyLengthExceeded.limit,\n            actionIndex,\n            txHash,\n            blockHash\n        );\n    }\n\n    if ('DeterministicStateInitValueLengthExceeded' in error) {\n        return new DeterministicStateInitValueLengthExceededActionError(\n            error.DeterministicStateInitValueLengthExceeded.length,\n            error.DeterministicStateInitValueLengthExceeded.limit,\n            actionIndex,\n            txHash,\n            blockHash\n        );\n    }\n\n    if ('GasKeyPermissionInvalid' in error) {\n        return new GasKeyPermissionInvalidActionError(\n            error.GasKeyPermissionInvalid.permission,\n            actionIndex,\n            txHash,\n            blockHash\n        );\n    }\n\n    if ('GasKeyTooManyNoncesRequested' in error) {\n        return new GasKeyTooManyNoncesRequestedActionError(\n            error.GasKeyTooManyNoncesRequested.limit,\n            error.GasKeyTooManyNoncesRequested.requested_nonces,\n            actionIndex,\n            txHash,\n            blockHash\n        );\n    }\n\n    // ensures all ActionsValidationError variants are handled at compile time\n    error satisfies never;\n    return new ActionExecutionError('Unknown actions validation error', actionIndex, txHash, blockHash);\n}\n\nfunction parseInvalidAccessKeyError(\n    error: InvalidAccessKeyError,\n    actionIndex: number | null,\n    txHash: CryptoHash,\n    blockHash: BlockHash\n): ActionExecutionError {\n    if (typeof error === 'string') {\n        switch (error) {\n            case 'RequiresFullAccess':\n                return new AccessKeyRequiresFullAccessActionError(actionIndex, txHash, blockHash);\n            case 'DepositWithFunctionCall':\n                return new AccessKeyDepositWithFunctionCallActionError(actionIndex, txHash, blockHash);\n            default:\n                // ensures all string InvalidAccessKeyError variants are handled at compile time\n                error satisfies never;\n                return new ActionExecutionError('Unknown invalid access key error', actionIndex, txHash, blockHash);\n        }\n    }\n\n    if ('AccessKeyNotFound' in error) {\n        return new AccessKeyNotFoundActionError(\n            error.AccessKeyNotFound.account_id,\n            PublicKey.fromString(error.AccessKeyNotFound.public_key),\n            actionIndex,\n            txHash,\n            blockHash\n        );\n    }\n\n    if ('ReceiverMismatch' in error) {\n        return new AccessKeyReceiverMismatchActionError(\n            error.ReceiverMismatch.ak_receiver,\n            error.ReceiverMismatch.tx_receiver,\n            actionIndex,\n            txHash,\n            blockHash\n        );\n    }\n\n    if ('MethodNameMismatch' in error) {\n        return new AccessKeyMethodNameMismatchActionError(\n            error.MethodNameMismatch.method_name,\n            actionIndex,\n            txHash,\n            blockHash\n        );\n    }\n\n    if ('NotEnoughAllowance' in error) {\n        return new AccessKeyNotEnoughAllowanceActionError(\n            error.NotEnoughAllowance.account_id,\n            BigInt(error.NotEnoughAllowance.allowance),\n            BigInt(error.NotEnoughAllowance.cost),\n            PublicKey.fromString(error.NotEnoughAllowance.public_key),\n            actionIndex,\n            txHash,\n            blockHash\n        );\n    }\n\n    // ensures all InvalidAccessKeyError variants are handled at compile time\n    error satisfies never;\n    return new ActionExecutionError('Unknown invalid access key error', actionIndex, txHash, blockHash);\n}\n\nfunction parseInvalidTransactionError(\n    error: InvalidTxError,\n    txHash: CryptoHash,\n    blockHash: BlockHash\n): TransactionExecutionError {\n    if (typeof error === 'string') {\n        switch (error) {\n            case 'InvalidSignature':\n                return new InvalidSignatureError(txHash, blockHash);\n            case 'CostOverflow':\n                return new CostOverflowError(txHash, blockHash);\n            case 'InvalidChain':\n                return new InvalidChainError(txHash, blockHash);\n            case 'Expired':\n                return new TransactionExpiredError(txHash, blockHash);\n            case 'InvalidTransactionVersion':\n                return new InvalidTransactionVersionError(txHash, blockHash);\n            default:\n                // ensures all string InvalidError variants are handled at compile time\n                error satisfies never;\n                return new TransactionExecutionError('Unknown invalid transaction error', txHash, blockHash);\n        }\n    }\n\n    if ('InvalidAccessKeyError' in error) {\n        return parseInvalidAccessKeyError(error.InvalidAccessKeyError, null, txHash, blockHash);\n    }\n\n    if ('InvalidSignerId' in error) {\n        return new InvalidSignerIdError(error.InvalidSignerId.signer_id, txHash, blockHash);\n    }\n\n    if ('SignerDoesNotExist' in error) {\n        return new SignerDoesNotExistError(error.SignerDoesNotExist.signer_id, txHash, blockHash);\n    }\n\n    if ('InvalidNonce' in error) {\n        return new InvalidNonceError(error.InvalidNonce.ak_nonce, error.InvalidNonce.tx_nonce, txHash, blockHash);\n    }\n\n    if ('NonceTooLarge' in error) {\n        return new NonceTooLargeError(error.NonceTooLarge.tx_nonce, error.NonceTooLarge.upper_bound, txHash, blockHash);\n    }\n\n    if ('InvalidReceiverId' in error) {\n        return new InvalidReceiverIdError(error.InvalidReceiverId.receiver_id, txHash, blockHash);\n    }\n\n    if ('NotEnoughBalance' in error) {\n        return new NotEnoughBalanceError(\n            BigInt(error.NotEnoughBalance.balance),\n            BigInt(error.NotEnoughBalance.cost),\n            error.NotEnoughBalance.signer_id,\n            txHash,\n            blockHash\n        );\n    }\n\n    if ('LackBalanceForState' in error) {\n        return new LackBalanceForStateActionError(\n            error.LackBalanceForState.signer_id,\n            BigInt(error.LackBalanceForState.amount),\n            null,\n            txHash,\n            blockHash\n        );\n    }\n\n    if ('TransactionSizeExceeded' in error) {\n        return new TransactionSizeExceededError(\n            error.TransactionSizeExceeded.limit,\n            error.TransactionSizeExceeded.size,\n            txHash,\n            blockHash\n        );\n    }\n\n    if ('StorageError' in error) {\n        const storage = error.StorageError;\n\n        if (storage === 'StorageInternalError') {\n            return new StorageInternalError(txHash, blockHash);\n        }\n\n        if (storage === 'UnexpectedTrieValue') {\n            return new UnexpectedTrieValueError(txHash, blockHash);\n        }\n\n        if ('MissingTrieValue' in storage) {\n            return new MissingTrieValueError(\n                storage.MissingTrieValue.context,\n                storage.MissingTrieValue.hash,\n                txHash,\n                blockHash\n            );\n        }\n\n        if ('StorageInconsistentState' in storage) {\n            return new StorageInconsistentStateError(storage.StorageInconsistentState, txHash, blockHash);\n        }\n\n        if ('FlatStorageBlockNotSupported' in storage) {\n            return new FlatStorageBlockNotSupportedError(storage.FlatStorageBlockNotSupported, txHash, blockHash);\n        }\n\n        if ('MemTrieLoadingError' in storage) {\n            return new MemTrieLoadingError(storage.MemTrieLoadingError, txHash, blockHash);\n        }\n\n        // ensures all StorageError variants are handled at compile time\n        storage satisfies never;\n        return new TransactionExecutionError('Unknown storage error', txHash, blockHash);\n    }\n\n    if ('ShardCongested' in error) {\n        return new ShardCongestedError(\n            error.ShardCongested.congestion_level,\n            error.ShardCongested.shard_id,\n            txHash,\n            blockHash\n        );\n    }\n\n    if ('ShardStuck' in error) {\n        return new ShardStuckError(error.ShardStuck.missed_chunks, error.ShardStuck.shard_id, txHash, blockHash);\n    }\n\n    if ('ActionsValidation' in error) {\n        return parseActionsValidationError(error.ActionsValidation, null, txHash, blockHash);\n    }\n\n    // ensures all InvalidTxError variants are handled at compile time\n    error satisfies never;\n    return new TransactionExecutionError('Unknown invalid transaction error', txHash, blockHash);\n}\n","export async function exponentialBackoff(startWaitTime, retryNumber, waitBackoff, getResult) {\n    // TODO: jitter?\n\n    let waitTime = startWaitTime;\n    for (let i = 0; i < retryNumber; i++) {\n        const result = await getResult();\n        if (result) {\n            return result;\n        }\n\n        await sleep(waitTime);\n        waitTime *= waitBackoff;\n    }\n\n    return null;\n}\n\n// Sleep given number of millis.\nfunction sleep(millis: number): Promise<any> {\n    return new Promise((resolve) => setTimeout(resolve, millis));\n}\n","/**\n * @module\n * This module contains the {@link FailoverRpcProvider} client class\n * which can be used to interact with multiple [NEAR RPC APIs](https://docs.near.org/api/rpc/introduction).\n * @see {@link \"@near-js/types\".provider | provider} for a list of request and response types\n */\n\nimport type { CryptoHash, RpcQueryRequest, RpcQueryResponse } from '../rpc/index.js';\nimport { AccountDoesNotExistError } from '../rpc-errors/index.js';\nimport type { SignedTransaction } from '../transactions/index.js';\nimport {\n    type AccessKeyWithPublicKey,\n    type BlockId,\n    type BlockReference,\n    type ChunkId,\n    type LightClientProofRequest,\n    type NextLightClientBlockRequest,\n    type SerializedReturnValue,\n    type TxExecutionStatus,\n    TypedError,\n} from '../types/index.js';\nimport type {\n    CallFunctionArgs,\n    Provider,\n    ViewAccessKeyArgs,\n    ViewAccessKeyListArgs,\n    ViewAccountArgs,\n    ViewContractCodeArgs,\n    ViewContractStateArgs,\n    ViewGlobalContractCodeArgs,\n    ViewTransactionStatusArgs,\n} from './provider.js';\n\n/**\n * Client class to interact with the [NEAR RPC API](https://docs.near.org/api/rpc/introduction).\n * @see [https://github.com/near/nearcore/tree/master/chain/jsonrpc](https://github.com/near/nearcore/tree/master/chain/jsonrpc)\n */\nexport class FailoverRpcProvider implements Provider {\n    /** @hidden */\n    readonly providers: Provider[];\n\n    private currentProviderIndex: number;\n\n    /**\n     * @param providers list of providers\n     */\n    constructor(providers: Provider[]) {\n        if (providers.length === 0) {\n            throw new Error('At least one provider must be specified');\n        }\n\n        this.providers = providers;\n        this.currentProviderIndex = 0;\n    }\n\n    private switchToNextProvider(): void {\n        if (this.providers.length === 1) return;\n\n        if (this.providers.length - 1 <= this.currentProviderIndex) {\n            this.currentProviderIndex = 0;\n        } else {\n            this.currentProviderIndex += 1;\n        }\n    }\n\n    private get currentProvider(): Provider {\n        const provider = this.providers[this.currentProviderIndex];\n\n        if (!provider) throw new Error(`Provider wasn't found at index ${this.currentProviderIndex}`);\n\n        return provider;\n    }\n\n    private async withBackoff<T>(getResult: (provider: Provider) => Promise<T>): Promise<T> {\n        for (let i = 0; i < this.providers.length; i++) {\n            try {\n                // each provider implements own retry logic\n                const result = await getResult(this.currentProvider);\n\n                if (typeof result === 'undefined') continue;\n\n                return result;\n            } catch (e) {\n                if (e instanceof AccountDoesNotExistError) {\n                    throw e;\n                }\n                console.error(e);\n                this.switchToNextProvider();\n            }\n        }\n\n        throw new TypedError(`Exceeded ${this.providers.length} providers to execute request`, 'RetriesExceeded');\n    }\n\n    async getNetworkId(): Promise<string> {\n        return this.withBackoff((currentProvider) => currentProvider.getNetworkId());\n    }\n\n    public async getCurrentEpochSeatPrice(): Promise<bigint> {\n        return this.withBackoff((currentProvider) => currentProvider.getCurrentEpochSeatPrice());\n    }\n\n    public async getNextEpochSeatPrice(): Promise<bigint> {\n        return this.withBackoff((currentProvider) => currentProvider.getNextEpochSeatPrice());\n    }\n\n    public async viewAccessKey(params: ViewAccessKeyArgs) {\n        return this.withBackoff((currentProvider) => currentProvider.viewAccessKey(params));\n    }\n\n    public async viewAccessKeyList(params: ViewAccessKeyListArgs) {\n        return this.withBackoff((currentProvider) => currentProvider.viewAccessKeyList(params));\n    }\n\n    public async viewAccount(params: ViewAccountArgs) {\n        return this.withBackoff((currentProvider) => currentProvider.viewAccount(params));\n    }\n\n    public async viewContractCode(params: ViewContractCodeArgs) {\n        return this.withBackoff((currentProvider) => currentProvider.viewContractCode(params));\n    }\n\n    public async viewGlobalContractCode(params: ViewGlobalContractCodeArgs) {\n        return this.withBackoff((currentProvider) => currentProvider.viewGlobalContractCode(params));\n    }\n\n    public async viewContractState(params: ViewContractStateArgs) {\n        return this.withBackoff((currentProvider) => currentProvider.viewContractState(params));\n    }\n\n    public async callFunction<T extends SerializedReturnValue>(params: CallFunctionArgs): Promise<T | undefined> {\n        return this.withBackoff((currentProvider) => currentProvider.callFunction<T>(params));\n    }\n\n    public async callFunctionRaw(params: CallFunctionArgs) {\n        return this.withBackoff((currentProvider) => currentProvider.callFunctionRaw(params));\n    }\n\n    public async viewBlock(blockQuery: BlockReference) {\n        return this.withBackoff((currentProvider) => currentProvider.viewBlock(blockQuery));\n    }\n\n    public async viewChunk(chunkId: ChunkId) {\n        return this.withBackoff((currentProvider) => currentProvider.viewChunk(chunkId));\n    }\n\n    public async viewGasPrice(blockId?: BlockId) {\n        return this.withBackoff((currentProvider) => currentProvider.viewGasPrice(blockId));\n    }\n\n    public async viewNodeStatus() {\n        return this.withBackoff((currentProvider) => currentProvider.viewNodeStatus());\n    }\n\n    public async viewValidators(params?: { blockId: string | number } | { epochId: string }) {\n        return this.withBackoff((currentProvider) => currentProvider.viewValidators(params));\n    }\n\n    public async viewTransactionStatus(params: ViewTransactionStatusArgs) {\n        return this.withBackoff((currentProvider) => currentProvider.viewTransactionStatus(params));\n    }\n\n    public async viewTransactionStatusWithReceipts(params: ViewTransactionStatusArgs) {\n        return this.withBackoff((currentProvider) => currentProvider.viewTransactionStatusWithReceipts(params));\n    }\n\n    public async viewTransactionReceipt(receiptId: string) {\n        return this.withBackoff((currentProvider) => currentProvider.viewTransactionReceipt(receiptId));\n    }\n\n    async sendTransactionUntil(signedTransaction: SignedTransaction, waitUntil: TxExecutionStatus) {\n        return this.withBackoff((currentProvider) =>\n            currentProvider.sendTransactionUntil(signedTransaction, waitUntil)\n        );\n    }\n\n    /**\n     * Sends a signed transaction to the RPC and waits until transaction is fully complete\n     * @see [https://docs.near.org/docs/develop/front-end/rpc#send-transaction-await](https://docs.near.org/docs/develop/front-end/rpc#general-validator-status)\n     *\n     * @param signedTransaction The signed transaction being sent\n     */\n    async sendTransaction(signedTransaction: SignedTransaction) {\n        return this.withBackoff((currentProvider) => currentProvider.sendTransaction(signedTransaction));\n    }\n\n    /**\n     * Sends a signed transaction to the RPC and immediately returns transaction hash\n     * See [docs for more info](https://docs.near.org/docs/develop/front-end/rpc#send-transaction-async)\n     * @param signedTransaction The signed transaction being sent\n     */\n    async sendTransactionAsync(signedTransaction: SignedTransaction) {\n        return this.withBackoff((currentProvider) => currentProvider.sendTransactionAsync(signedTransaction));\n    }\n\n    /**\n     * Query the RPC by passing an {@link RpcQueryRequest }\n     * @see [https://docs.near.org/api/rpc/contracts](https://docs.near.org/api/rpc/contracts)\n     *\n     */\n    async query<R extends Omit<RpcQueryResponse, 'block_hash' | 'block_height'>>(\n        params: RpcQueryRequest\n    ): Promise<\n        R & {\n            block_hash: CryptoHash;\n            block_height: number;\n        }\n    > {\n        return this.withBackoff((currentProvider) => currentProvider.query(params));\n    }\n\n    /**\n     * Query changes in block from the RPC\n     * pass block_id OR finality as blockQuery, not both\n     * @see [https://docs.near.org/api/rpc/block-chunk](https://docs.near.org/api/rpc/block-chunk)\n     */\n    async blockChanges(blockQuery: BlockReference) {\n        return this.withBackoff((currentProvider) => currentProvider.blockChanges(blockQuery));\n    }\n\n    /**\n     * Gets the protocol config at a block from RPC\n     *\n     * @param blockReference specifies the block to get the protocol config for\n     */\n    async experimental_protocolConfig(blockReference: BlockReference | { sync_checkpoint: 'genesis' }) {\n        return this.withBackoff((currentProvider) => currentProvider.experimental_protocolConfig(blockReference));\n    }\n\n    /**\n     * Gets a light client execution proof for verifying execution outcomes\n     * @see [https://github.com/nearprotocol/NEPs/blob/master/specs/ChainSpec/LightClient.md#light-client-proof](https://github.com/nearprotocol/NEPs/blob/master/specs/ChainSpec/LightClient.md#light-client-proof)\n     */\n    async lightClientProof(request: LightClientProofRequest) {\n        return this.withBackoff((currentProvider) => currentProvider.lightClientProof(request));\n    }\n\n    /**\n     * Returns the next light client block as far in the future as possible from the last known hash\n     * to still be able to validate from that hash. This will either return the last block of the\n     * next epoch, or the last final known block.\n     *\n     * @see [https://github.com/near/NEPs/blob/master/specs/ChainSpec/LightClient.md#light-client-block](https://github.com/near/NEPs/blob/master/specs/ChainSpec/LightClient.md#light-client-block)\n     */\n    async nextLightClientBlock(request: NextLightClientBlockRequest) {\n        return this.withBackoff((currentProvider) => currentProvider.nextLightClientBlock(request));\n    }\n\n    /**\n     * Gets access key changes for a given array of accountIds\n     * See [docs for more info](https://docs.near.org/docs/develop/front-end/rpc#view-access-key-changes-all)\n     */\n    async accessKeyChanges(accountIdArray: string[], blockQuery: BlockReference) {\n        return this.withBackoff((currentProvider) => currentProvider.accessKeyChanges(accountIdArray, blockQuery));\n    }\n\n    /**\n     * Gets single access key changes for a given array of access keys\n     * pass block_id OR finality as blockQuery, not both\n     * See [docs for more info](https://docs.near.org/docs/develop/front-end/rpc#view-access-key-changes-single)\n     */\n    async singleAccessKeyChanges(accessKeyArray: AccessKeyWithPublicKey[], blockQuery: BlockReference) {\n        return this.withBackoff((currentProvider) =>\n            currentProvider.singleAccessKeyChanges(accessKeyArray, blockQuery)\n        );\n    }\n\n    /**\n     * Gets account changes for a given array of accountIds\n     * pass block_id OR finality as blockQuery, not both\n     * See [docs for more info](https://docs.near.org/docs/develop/front-end/rpc#view-account-changes)\n     */\n    async accountChanges(accountIdArray: string[], blockQuery: BlockReference) {\n        return this.withBackoff((currentProvider) => currentProvider.accountChanges(accountIdArray, blockQuery));\n    }\n\n    /**\n     * Gets contract state changes for a given array of accountIds\n     * pass block_id OR finality as blockQuery, not both\n     * Note: If you pass a keyPrefix it must be base64 encoded\n     * See [docs for more info](https://docs.near.org/docs/develop/front-end/rpc#view-contract-state-changes)\n     */\n    async contractStateChanges(accountIdArray: string[], blockQuery: BlockReference, keyPrefix = '') {\n        return this.withBackoff((currentProvider) =>\n            currentProvider.contractStateChanges(accountIdArray, blockQuery, keyPrefix)\n        );\n    }\n\n    /**\n     * Gets contract code changes for a given array of accountIds\n     * pass block_id OR finality as blockQuery, not both\n     * Note: Change is returned in a base64 encoded WASM file\n     * See [docs for more info](https://docs.near.org/docs/develop/front-end/rpc#view-contract-code-changes)\n     */\n    async contractCodeChanges(accountIdArray: string[], blockQuery: BlockReference) {\n        return this.withBackoff((currentProvider) => currentProvider.contractCodeChanges(accountIdArray, blockQuery));\n    }\n}\n","/* DEPRECATED - backward compatibility only */\nexport abstract class Assignable {\n    constructor(properties: any) {\n        Object.keys(properties).forEach((key: any) => {\n            (this as any)[key] = properties[key];\n        });\n    }\n}\n","// TODO determine why subclassing is still necessary even though `enum`\n//  cannot be set in the base class or it will not be borsh-serializable\nexport abstract class Enum {\n    abstract enum: string;\n\n    constructor(properties: any) {\n        if (Object.keys(properties).length !== 1) {\n            throw new Error('Enum can only take single value');\n        }\n        Object.keys(properties).forEach((key: string) => {\n            (this as any)[key] = properties[key];\n        });\n    }\n}\n","export class PositionalArgsError extends Error {\n    constructor() {\n        super(\n            'Contract method calls expect named arguments wrapped in object, e.g. { argName1: argValue1, argName2: argValue2 }'\n        );\n    }\n}\n\nexport class ArgumentTypeError extends Error {\n    constructor(argName: string, argType: string, argValue: any) {\n        super(`Expected ${argType} for '${argName}' argument, but got '${JSON.stringify(argValue)}'`);\n    }\n}\n\nexport class TypedError extends Error {\n    type: string;\n    context?: ErrorContext;\n    constructor(message?: string, type?: string, context?: ErrorContext) {\n        super(message);\n        this.type = type || 'UntypedError';\n        this.context = context;\n    }\n}\n\nexport class ErrorContext {\n    transactionHash?: string;\n    constructor(transactionHash?: string) {\n        this.transactionHash = transactionHash;\n    }\n}\n","/**\n * NEAR RPC API request types and responses\n * @module\n */\n\nimport type { BlockHeaderInnerLiteView, MerklePath } from './protocol.js';\nimport type { ExecutionOutcomeWithIdView } from './response.js';\nimport type { ValidatorStakeView } from './validator.js';\n\nexport interface LightClientBlockLiteView {\n    prev_block_hash: string;\n    inner_rest_hash: string;\n    inner_lite: BlockHeaderInnerLiteView;\n}\n\nexport interface LightClientProof {\n    outcome_proof: ExecutionOutcomeWithIdView;\n    outcome_root_proof: MerklePath;\n    block_header_lite: LightClientBlockLiteView;\n    block_proof: MerklePath;\n}\n\nexport enum IdType {\n    Transaction = 'transaction',\n    Receipt = 'receipt',\n}\n\nexport interface LightClientProofRequest {\n    type: IdType;\n    light_client_head: string;\n    transaction_hash?: string;\n    sender_id?: string;\n    receipt_id?: string;\n    receiver_id?: string;\n}\n\nexport interface NextLightClientBlockResponse {\n    prev_block_hash: string;\n    next_block_inner_hash: string;\n    inner_lite: BlockHeaderInnerLiteView;\n    inner_rest_hash: string;\n    next_bps?: ValidatorStakeView[];\n    approvals_after_next: (string | null)[];\n}\n\nexport interface NextLightClientBlockRequest {\n    last_block_hash: string;\n}\n","/**\n * NEAR RPC API request types and responses\n * @module\n */\nimport type { BlockHash, BlockHeight, MerklePath, TxExecutionStatus } from './protocol.js';\n\nexport type SerializedReturnValue = string | number | boolean | object;\n\nexport enum ExecutionStatusBasic {\n    Unknown = 'Unknown',\n    Pending = 'Pending',\n    Failure = 'Failure',\n}\n\nexport interface ExecutionStatus {\n    SuccessValue?: string;\n    SuccessReceiptId?: string;\n    Failure?: ExecutionError;\n}\n\nexport enum FinalExecutionStatusBasic {\n    NotStarted = 'NotStarted',\n    Started = 'Started',\n    Failure = 'Failure',\n}\n\nexport interface ExecutionError {\n    error_message: string;\n    error_type: string;\n}\n\nexport interface FinalExecutionStatus {\n    SuccessValue?: string;\n    Failure?: ExecutionError;\n}\n\nexport interface ExecutionOutcomeWithId {\n    id: string;\n    outcome: ExecutionOutcome;\n}\n\nexport interface ExecutionOutcome {\n    logs: string[];\n    receipt_ids: string[];\n    gas_burnt: number;\n    tokens_burnt: string;\n    executor_id: string;\n    status: ExecutionStatus | ExecutionStatusBasic;\n}\n\nexport type ReceiptAction = { Transfer: { deposit: string } };\n\nexport interface ExecutionOutcomeReceiptDetail {\n    predecessor_id: string;\n    receipt: {\n        Action: ExecutionOutcomeReceiptAction;\n    };\n    receipt_id: string;\n    receiver_id: string;\n}\n\nexport interface ExecutionOutcomeReceiptAction {\n    actions: ReceiptAction[];\n    gas_price: string;\n    input_data_ids: string[];\n    output_data_receivers: string[];\n    signer_id: string;\n    signer_public_key: string;\n}\n\nexport interface ExecutionOutcomeWithIdView {\n    proof: MerklePath;\n    block_hash: string;\n    id: string;\n    outcome: ExecutionOutcome;\n}\n\nexport interface FinalExecutionOutcome {\n    final_execution_status: TxExecutionStatus;\n    status: FinalExecutionStatus | FinalExecutionStatusBasic;\n    transaction: any;\n    transaction_outcome: ExecutionOutcomeWithId;\n    receipts_outcome: ExecutionOutcomeWithId[];\n    receipts?: ExecutionOutcomeReceiptDetail[];\n}\n\nexport interface QueryResponseKind {\n    block_height: BlockHeight;\n    block_hash: BlockHash;\n}\n\nexport interface AccountViewRaw extends QueryResponseKind {\n    amount: string;\n    locked: string;\n    code_hash: string;\n    storage_usage: number;\n    storage_paid_at: BlockHeight;\n}\n\nexport interface AccountView extends QueryResponseKind {\n    amount: bigint;\n    locked: bigint;\n    code_hash: string;\n    storage_usage: number;\n    storage_paid_at?: BlockHeight;\n}\n\nexport interface AccountBalanceInfo {\n    total: bigint;\n    usedOnStorage: bigint;\n    locked: bigint;\n    available: bigint;\n}\n\ninterface StateItem {\n    key: string;\n    value: string;\n    proof: string[];\n}\n\nexport interface ViewStateResult extends QueryResponseKind {\n    values: StateItem[];\n    proof: string[];\n}\n\nexport interface CodeResult extends QueryResponseKind {\n    result: number[];\n    logs: string[];\n}\n\nexport interface CallContractViewFunctionResultRaw extends QueryResponseKind {\n    result: number[];\n    logs: string[];\n}\n\nexport interface CallContractViewFunctionResult extends QueryResponseKind {\n    result?: string | number | any;\n    logs: string[];\n}\n\ninterface StateItemView {\n    key: string;\n    value: string;\n    proof: string[];\n}\n\nexport interface ContractStateView extends QueryResponseKind {\n    values: StateItemView[];\n}\n\nexport interface ContractCodeViewRaw extends QueryResponseKind {\n    code_base64: string;\n    hash: string;\n}\n\nexport interface ContractCodeView extends QueryResponseKind {\n    code: Uint8Array;\n    hash: string;\n}\n\nexport interface FunctionCallPermissionView {\n    FunctionCall: {\n        allowance?: string | null;\n        receiver_id: string;\n        method_names: string[];\n    };\n}\n\nexport interface AccessKeyViewRaw extends QueryResponseKind {\n    nonce: number;\n    permission: 'FullAccess' | FunctionCallPermissionView;\n}\nexport interface AccessKeyView extends QueryResponseKind {\n    nonce: bigint;\n    permission: 'FullAccess' | FunctionCallPermissionView;\n}\n\nexport interface AccessKeyInfoView {\n    public_key: string;\n    access_key: AccessKeyView;\n}\n\nexport interface AccessKeyList extends QueryResponseKind {\n    keys: AccessKeyInfoView[];\n}\n\nexport interface AccessKeyInfoView {\n    public_key: string;\n    access_key: AccessKeyView;\n}\n","/**\n * @module\n * This module contains the {@link JsonRpcProvider} client class\n * which can be used to interact with the [NEAR RPC API](https://docs.near.org/api/rpc/introduction).\n * @see {@link \"@near-js/types\".provider | provider} for a list of request and response types\n */\n\nimport type {\n    AccessKeyList,\n    AccessKeyView,\n    AccountView,\n    CallResult,\n    CryptoHash,\n    ContractCodeView as RawContractCodeView,\n    RpcBlockResponse,\n    RpcChunkResponse,\n    RpcGasPriceResponse,\n    RpcLightClientExecutionProofResponse,\n    RpcLightClientNextBlockResponse,\n    RpcProtocolConfigResponse,\n    RpcQueryRequest,\n    RpcQueryResponse,\n    RpcReceiptResponse,\n    RpcStateChangesInBlockByTypeResponse,\n    RpcStateChangesInBlockResponse,\n    RpcStatusResponse,\n    RpcTransactionResponse,\n    RpcValidatorResponse,\n    ViewStateResult,\n} from '../rpc/index.js';\nimport { RpcError } from '../rpc-errors/index.js';\nimport { encodeTransaction, type SignedTransaction } from '../transactions/index.js';\nimport {\n    type AccessKeyWithPublicKey,\n    type BlockId,\n    type BlockReference,\n    type ChunkId,\n    type Finality,\n    type LightClientProofRequest,\n    type NextLightClientBlockRequest,\n    type SerializedReturnValue,\n    type TxExecutionStatus,\n    TypedError,\n} from '../types/index.js';\nimport { base64Decode, base64Encode, baseEncode, bytesToString, findSeatPrice, stringToBytes } from '../utils/index.js';\nimport { parseRpcError, parseRpcErrorMessage } from './errors/parse.js';\nimport { type ConnectionInfo, fetchJsonRpc, retryConfig } from './fetch_json.js';\nimport type { Methods } from './methods.js';\nimport type {\n    CallFunctionArgs,\n    Provider,\n    ViewAccessKeyArgs,\n    ViewAccessKeyListArgs,\n    ViewAccountArgs,\n    ViewContractCodeArgs,\n    ViewContractStateArgs,\n    ViewGlobalContractCodeArgs,\n    ViewTransactionStatusArgs,\n    ViewValidatorsArgs,\n} from './provider.js';\n\n/** @hidden */\n// Default number of retries before giving up on a request.\nconst REQUEST_RETRY_NUMBER = 12;\n\n// Default wait until next retry in millis.\nconst REQUEST_RETRY_WAIT = 500;\n\n// Exponential back off for waiting to retry.\nconst REQUEST_RETRY_WAIT_BACKOFF = 1.5;\n\n/// Keep ids unique across all connections.\nlet _nextId = 123;\n\ntype RequestOptions = {\n    /**\n     * Number of retries before giving up on a request\n     */\n    retries: number;\n    /**\n     * Wait until next retry in milliseconds\n     */\n    wait: number;\n    /**\n     * Exponential back off for waiting to retry again\n     */\n    backoff: number;\n};\n\nconst DEFAULT_FINALITY = 'optimistic';\n\n/**\n * Client class to interact with the [NEAR RPC API](https://docs.near.org/api/rpc/introduction).\n * @see [https://github.com/near/nearcore/tree/master/chain/jsonrpc](https://github.com/near/nearcore/tree/master/chain/jsonrpc)\n */\nexport class JsonRpcProvider implements Provider {\n    /** @hidden */\n    readonly connection: ConnectionInfo;\n\n    /** @hidden */\n    readonly options: RequestOptions;\n\n    /** @hidden */\n    private networkId: string | undefined;\n\n    /**\n     * @param connectionInfo Connection info\n     */\n    constructor(connectionInfo: ConnectionInfo, options?: Partial<RequestOptions>) {\n        this.connection = connectionInfo || { url: '' };\n        const defaultOptions: RequestOptions = {\n            retries: REQUEST_RETRY_NUMBER,\n            wait: REQUEST_RETRY_WAIT,\n            backoff: REQUEST_RETRY_WAIT_BACKOFF,\n        };\n        this.options = Object.assign({}, defaultOptions, options);\n        this.networkId = undefined;\n    }\n\n    public async getNetworkId(): Promise<string> {\n        if (this.networkId) return this.networkId;\n\n        const { chain_id } = await this.viewNodeStatus();\n\n        this.networkId = chain_id;\n\n        return this.networkId;\n    }\n\n    public async getCurrentEpochSeatPrice(): Promise<bigint> {\n        const { minimum_stake_ratio: minStakeRatio, protocol_version: protocolVersion } =\n            await this.experimental_protocolConfig({ finality: DEFAULT_FINALITY });\n\n        if (!Array.isArray(minStakeRatio))\n            throw new Error('minimum_stake_ratio is not available on this protocol version');\n\n        const { current_validators: currentValidators } = await this.viewValidators();\n\n        // hard-coded in the protocol\n        const maxNumberOfSeats = 300;\n\n        return findSeatPrice(currentValidators, maxNumberOfSeats, minStakeRatio, protocolVersion);\n    }\n\n    public async getNextEpochSeatPrice(): Promise<bigint> {\n        const { minimum_stake_ratio: minStakeRatio, protocol_version: protocolVersion } =\n            await this.experimental_protocolConfig({ finality: DEFAULT_FINALITY });\n\n        if (!Array.isArray(minStakeRatio))\n            throw new Error('minimum_stake_ratio is not available on this protocol version');\n\n        const { next_validators: nextValidators } = await this.viewValidators();\n\n        // hard-coded in the protocol\n        const maxNumberOfSeats = 300;\n\n        return findSeatPrice(nextValidators, maxNumberOfSeats, minStakeRatio, protocolVersion);\n    }\n\n    public async viewAccessKey({\n        accountId,\n        publicKey,\n        finalityQuery = { finality: DEFAULT_FINALITY },\n    }: ViewAccessKeyArgs) {\n        const data = await this.query<AccessKeyView>({\n            finality: finalityQuery.finality,\n            request_type: 'view_access_key',\n            account_id: accountId,\n            public_key: publicKey.toString(),\n        });\n\n        return {\n            ...data,\n            nonce: BigInt(data.nonce),\n        };\n    }\n\n    public async viewAccessKeyList({\n        accountId,\n        finalityQuery = { finality: DEFAULT_FINALITY },\n    }: ViewAccessKeyListArgs) {\n        return this.query<AccessKeyList>({\n            finality: finalityQuery.finality,\n            request_type: 'view_access_key_list',\n            account_id: accountId,\n        });\n    }\n\n    public async viewAccount({ accountId, blockQuery = { finality: DEFAULT_FINALITY } }: ViewAccountArgs) {\n        let reference: { block_id: BlockId } | { finality: Finality };\n\n        if ('blockId' in blockQuery) {\n            reference = { block_id: blockQuery.blockId };\n        } else if ('finality' in blockQuery) {\n            reference = { finality: blockQuery.finality };\n        } else {\n            throw new Error('Either blockId or finality must be provided in blockQuery');\n        }\n\n        const data = await this.query<AccountView>({\n            ...reference,\n            request_type: 'view_account',\n            account_id: accountId,\n        });\n\n        return {\n            ...data,\n            amount: BigInt(data.amount),\n            locked: BigInt(data.locked),\n        };\n    }\n\n    public async viewContractCode({ contractId, blockQuery = { finality: DEFAULT_FINALITY } }: ViewContractCodeArgs) {\n        let reference: { block_id: BlockId } | { finality: Finality };\n\n        if ('blockId' in blockQuery) {\n            reference = { block_id: blockQuery.blockId };\n        } else if ('finality' in blockQuery) {\n            reference = { finality: blockQuery.finality };\n        } else {\n            throw new Error('Either blockId or finality must be provided in blockQuery');\n        }\n\n        const data = await this.query<RawContractCodeView>({\n            ...reference,\n            request_type: 'view_code',\n            account_id: contractId,\n        });\n\n        return {\n            ...data,\n            code: base64Decode(data.code_base64),\n        };\n    }\n\n    public async viewGlobalContractCode({\n        identifier,\n        blockQuery = { finality: DEFAULT_FINALITY },\n    }: ViewGlobalContractCodeArgs) {\n        let data: RawContractCodeView & {\n            block_hash: CryptoHash;\n            block_height: number;\n        };\n\n        let reference: { block_id: BlockId } | { finality: Finality };\n\n        if ('blockId' in blockQuery) {\n            reference = { block_id: blockQuery.blockId };\n        } else if ('finality' in blockQuery) {\n            reference = { finality: blockQuery.finality };\n        } else {\n            throw new Error('Either blockId or finality must be provided in blockQuery');\n        }\n\n        if ('codeHash' in identifier) {\n            data = await this.query<RawContractCodeView>({\n                ...reference,\n                request_type: 'view_global_contract_code',\n                code_hash:\n                    typeof identifier.codeHash === 'string'\n                        ? identifier.codeHash\n                        : Array.from(identifier.codeHash, (b) => b.toString(16).padStart(2, '0')).join(''),\n            });\n        } else if ('accountId' in identifier) {\n            data = await this.query<RawContractCodeView>({\n                ...reference,\n                request_type: 'view_global_contract_code_by_account_id',\n                account_id: identifier.accountId,\n            });\n        } else {\n            throw new Error('Either \"codeHash\", or \"accountId\" must be provided in identifier');\n        }\n\n        return {\n            ...data,\n            code: base64Decode(data.code_base64),\n        };\n    }\n\n    public async viewContractState({\n        contractId,\n        prefix,\n        blockQuery = { finality: DEFAULT_FINALITY },\n    }: ViewContractStateArgs) {\n        const prefixBase64 = base64Encode(stringToBytes(prefix || ''));\n\n        let reference: { block_id: BlockId } | { finality: Finality };\n\n        if ('blockId' in blockQuery) {\n            reference = { block_id: blockQuery.blockId };\n        } else if ('finality' in blockQuery) {\n            reference = { finality: blockQuery.finality };\n        } else {\n            throw new Error('Either blockId or finality must be provided in blockQuery');\n        }\n\n        return await this.query<ViewStateResult>({\n            ...reference,\n            request_type: 'view_state',\n            account_id: contractId,\n            prefix_base64: prefixBase64,\n        });\n    }\n\n    public async callFunction<T extends SerializedReturnValue>({\n        contractId,\n        method,\n        args,\n        blockQuery = { finality: DEFAULT_FINALITY },\n    }: CallFunctionArgs): Promise<T | undefined> {\n        const { result } = await this.callFunctionRaw({ contractId, method, args, blockQuery });\n\n        if (result.length === 0) return undefined;\n\n        const serializedResult = bytesToString(new Uint8Array(result));\n\n        try {\n            return JSON.parse(serializedResult) as T;\n        } catch {\n            return serializedResult as T;\n        }\n    }\n\n    public async callFunctionRaw({\n        contractId,\n        method,\n        args,\n        blockQuery = { finality: DEFAULT_FINALITY },\n    }: CallFunctionArgs) {\n        const argsBytes = args instanceof Uint8Array ? args : stringToBytes(JSON.stringify(args));\n        const argsBase64 = base64Encode(argsBytes);\n\n        if ('blockId' in blockQuery) {\n            return this.query<CallResult>({\n                request_type: 'call_function',\n                account_id: contractId,\n                method_name: method,\n                args_base64: argsBase64,\n                block_id: blockQuery.blockId,\n            });\n        } else if ('finality' in blockQuery) {\n            return this.query<CallResult>({\n                request_type: 'call_function',\n                account_id: contractId,\n                method_name: method,\n                args_base64: argsBase64,\n                finality: blockQuery.finality,\n            });\n        } else {\n            throw new Error('Either blockId or finality must be provided in blockQuery');\n        }\n    }\n\n    public async viewBlock(blockQuery: BlockReference): Promise<RpcBlockResponse> {\n        const { finality } = blockQuery as any;\n        const { blockId } = blockQuery as any;\n        return this.sendJsonRpc('block', { block_id: blockId, finality });\n    }\n\n    public async viewChunk(chunkId: ChunkId): Promise<RpcChunkResponse> {\n        return this.sendJsonRpc('chunk', [chunkId]);\n    }\n\n    public async viewGasPrice(blockId?: BlockId): Promise<RpcGasPriceResponse> {\n        return this.sendJsonRpc('gas_price', [blockId || null]);\n    }\n\n    public async viewNodeStatus(): Promise<RpcStatusResponse> {\n        return this.sendJsonRpc('status', []);\n    }\n\n    /**\n     * Query validators of an epoch.\n     * @see [https://docs.near.org/api/rpc/network#validation-status](https://docs.near.org/api/rpc/network#validation-status)\n     *\n     * @param params Object specifying either a block or epoch to query.\n     * - `{ blockId }`: Block hash or height.\n     * - `{ epochId }`: Epoch hash.\n     * - `null`: Current epoch.\n     */\n    public async viewValidators(params?: ViewValidatorsArgs): Promise<RpcValidatorResponse> {\n        if (typeof params === 'undefined') return this.sendJsonRpc('validators', [null]);\n\n        if (typeof params === 'object' && 'blockId' in params)\n            return this.sendJsonRpc('validators', { block_id: params.blockId });\n\n        if (typeof params === 'object' && 'epochId' in params)\n            return this.sendJsonRpc('validators', { epoch_id: params.epochId });\n\n        throw new Error('Invalid parameters for validators');\n    }\n\n    public async viewTransactionStatus({\n        txHash,\n        accountId,\n        waitUntil = 'EXECUTED_OPTIMISTIC',\n    }: ViewTransactionStatusArgs): Promise<RpcTransactionResponse> {\n        const encodedTxHash = typeof txHash === 'string' ? txHash : baseEncode(txHash);\n\n        return this.sendJsonRpc('tx', {\n            tx_hash: encodedTxHash,\n            sender_account_id: accountId,\n            wait_until: waitUntil,\n        });\n    }\n\n    public async viewTransactionStatusWithReceipts({\n        txHash,\n        accountId,\n        waitUntil = 'EXECUTED_OPTIMISTIC',\n    }: ViewTransactionStatusArgs): Promise<RpcTransactionResponse> {\n        const encodedTxHash = typeof txHash === 'string' ? txHash : baseEncode(txHash);\n\n        return this.sendJsonRpc('EXPERIMENTAL_tx_status', {\n            tx_hash: encodedTxHash,\n            sender_account_id: accountId,\n            wait_until: waitUntil,\n        });\n    }\n\n    public async viewTransactionReceipt(receiptId: string): Promise<RpcReceiptResponse> {\n        return this.sendJsonRpc('EXPERIMENTAL_receipt', {\n            receipt_id: receiptId,\n        });\n    }\n\n    /**\n     * Sends a signed transaction to the RPC\n     *\n     * @param signedTransaction The signed transaction being sent\n     * @param waitUntil\n     */\n    async sendTransactionUntil(\n        signedTransaction: SignedTransaction,\n        waitUntil: TxExecutionStatus\n    ): Promise<RpcTransactionResponse> {\n        const bytes = encodeTransaction(signedTransaction);\n        return this.sendJsonRpc('send_tx', {\n            signed_tx_base64: base64Encode(bytes),\n            wait_until: waitUntil,\n        });\n    }\n\n    /**\n     * Sends a signed transaction to the RPC and waits until transaction is fully complete\n     * @see [https://docs.near.org/docs/develop/front-end/rpc#send-transaction-await](https://docs.near.org/docs/develop/front-end/rpc#general-validator-status)\n     *\n     * @param signedTransaction The signed transaction being sent\n     */\n    async sendTransaction(signedTransaction: SignedTransaction): Promise<RpcTransactionResponse> {\n        return this.sendTransactionUntil(signedTransaction, 'EXECUTED_OPTIMISTIC');\n    }\n\n    /**\n     * Sends a signed transaction to the RPC and immediately returns transaction hash\n     * See [docs for more info](https://docs.near.org/docs/develop/front-end/rpc#send-transaction-async)\n     * @param signedTransaction The signed transaction being sent\n     * @returns {Promise<FinalExecutionOutcome>}\n     */\n    async sendTransactionAsync(signedTransaction: SignedTransaction): Promise<RpcTransactionResponse> {\n        return this.sendTransactionUntil(signedTransaction, 'NONE');\n    }\n\n    /**\n     * Query the RPC by passing an {@link RpcQueryRequest }\n     * @see [https://docs.near.org/api/rpc/contracts](https://docs.near.org/api/rpc/contracts)\n     *\n     */\n    async query<R extends Omit<RpcQueryResponse, 'block_hash' | 'block_height'>>(\n        params: RpcQueryRequest\n    ): Promise<\n        R & {\n            block_hash: CryptoHash;\n            block_height: number;\n        }\n    > {\n        return this.sendJsonRpc('query', params);\n    }\n\n    /**\n     * Query changes in block from the RPC\n     * pass block_id OR finality as blockQuery, not both\n     * @see [https://docs.near.org/api/rpc/block-chunk](https://docs.near.org/api/rpc/block-chunk)\n     */\n    async blockChanges(blockQuery: BlockReference): Promise<RpcStateChangesInBlockByTypeResponse> {\n        const { finality } = blockQuery as any;\n        const { blockId } = blockQuery as any;\n        return this.sendJsonRpc('EXPERIMENTAL_changes_in_block', { block_id: blockId, finality });\n    }\n\n    /**\n     * Gets the protocol config at a block from RPC\n     *\n     * @param blockReference specifies the block to get the protocol config for\n     */\n    async experimental_protocolConfig(\n        blockReference: BlockReference | { sync_checkpoint: 'genesis' }\n    ): Promise<RpcProtocolConfigResponse> {\n        const { blockId, ...otherParams } = blockReference as any;\n        return await this.sendJsonRpc('EXPERIMENTAL_protocol_config', { ...otherParams, block_id: blockId });\n    }\n\n    /**\n     * Gets a light client execution proof for verifying execution outcomes\n     * @see [https://github.com/nearprotocol/NEPs/blob/master/specs/ChainSpec/LightClient.md#light-client-proof](https://github.com/nearprotocol/NEPs/blob/master/specs/ChainSpec/LightClient.md#light-client-proof)\n     */\n    async lightClientProof(request: LightClientProofRequest): Promise<RpcLightClientExecutionProofResponse> {\n        return await this.sendJsonRpc('EXPERIMENTAL_light_client_proof', request);\n    }\n\n    /**\n     * Returns the next light client block as far in the future as possible from the last known hash\n     * to still be able to validate from that hash. This will either return the last block of the\n     * next epoch, or the last final known block.\n     *\n     * @see [https://github.com/near/NEPs/blob/master/specs/ChainSpec/LightClient.md#light-client-block](https://github.com/near/NEPs/blob/master/specs/ChainSpec/LightClient.md#light-client-block)\n     */\n    async nextLightClientBlock(request: NextLightClientBlockRequest): Promise<RpcLightClientNextBlockResponse> {\n        return await this.sendJsonRpc('next_light_client_block', request);\n    }\n\n    /**\n     * Gets access key changes for a given array of accountIds\n     * See [docs for more info](https://docs.near.org/docs/develop/front-end/rpc#view-access-key-changes-all)\n     */\n    async accessKeyChanges(\n        accountIdArray: string[],\n        blockQuery: BlockReference\n    ): Promise<RpcStateChangesInBlockResponse> {\n        const { finality } = blockQuery as any;\n        const { blockId } = blockQuery as any;\n        return this.sendJsonRpc('EXPERIMENTAL_changes', {\n            changes_type: 'all_access_key_changes',\n            account_ids: accountIdArray,\n            block_id: blockId,\n            finality,\n        });\n    }\n\n    /**\n     * Gets single access key changes for a given array of access keys\n     * pass block_id OR finality as blockQuery, not both\n     * See [docs for more info](https://docs.near.org/docs/develop/front-end/rpc#view-access-key-changes-single)\n     */\n    async singleAccessKeyChanges(\n        accessKeyArray: AccessKeyWithPublicKey[],\n        blockQuery: BlockReference\n    ): Promise<RpcStateChangesInBlockResponse> {\n        const { finality } = blockQuery as any;\n        const { blockId } = blockQuery as any;\n        return this.sendJsonRpc('EXPERIMENTAL_changes', {\n            changes_type: 'single_access_key_changes',\n            keys: accessKeyArray,\n            block_id: blockId,\n            finality,\n        });\n    }\n\n    /**\n     * Gets account changes for a given array of accountIds\n     * pass block_id OR finality as blockQuery, not both\n     * See [docs for more info](https://docs.near.org/docs/develop/front-end/rpc#view-account-changes)\n     */\n    async accountChanges(\n        accountIdArray: string[],\n        blockQuery: BlockReference\n    ): Promise<RpcStateChangesInBlockResponse> {\n        const { finality } = blockQuery as any;\n        const { blockId } = blockQuery as any;\n        return this.sendJsonRpc('EXPERIMENTAL_changes', {\n            changes_type: 'account_changes',\n            account_ids: accountIdArray,\n            block_id: blockId,\n            finality,\n        });\n    }\n\n    /**\n     * Gets contract state changes for a given array of accountIds\n     * pass block_id OR finality as blockQuery, not both\n     * Note: If you pass a keyPrefix it must be base64 encoded\n     * See [docs for more info](https://docs.near.org/docs/develop/front-end/rpc#view-contract-state-changes)\n     */\n    async contractStateChanges(\n        accountIdArray: string[],\n        blockQuery: BlockReference,\n        keyPrefix = ''\n    ): Promise<RpcStateChangesInBlockResponse> {\n        const { finality } = blockQuery as any;\n        const { blockId } = blockQuery as any;\n        return this.sendJsonRpc('EXPERIMENTAL_changes', {\n            changes_type: 'data_changes',\n            account_ids: accountIdArray,\n            key_prefix_base64: keyPrefix,\n            block_id: blockId,\n            finality,\n        });\n    }\n\n    /**\n     * Gets contract code changes for a given array of accountIds\n     * pass block_id OR finality as blockQuery, not both\n     * Note: Change is returned in a base64 encoded WASM file\n     * See [docs for more info](https://docs.near.org/docs/develop/front-end/rpc#view-contract-code-changes)\n     */\n    async contractCodeChanges(\n        accountIdArray: string[],\n        blockQuery: BlockReference\n    ): Promise<RpcStateChangesInBlockResponse> {\n        const { finality } = blockQuery as any;\n        const { blockId } = blockQuery as any;\n        return this.sendJsonRpc('EXPERIMENTAL_changes', {\n            changes_type: 'contract_code_changes',\n            account_ids: accountIdArray,\n            block_id: blockId,\n            finality,\n        });\n    }\n\n    /**\n     * Directly call the RPC specifying the method and params\n     *\n     * @param method RPC method\n     * @param params Parameters to the method\n     */\n    async sendJsonRpc<\n        Method extends keyof Methods,\n        Params = Methods[Method]['request']['params'],\n        Result = Extract<Methods[Method]['response'], { result: object }>['result'],\n    >(method: Method, params: Params): Promise<Result> {\n        const request = {\n            method,\n            params,\n            id: String(_nextId++),\n            jsonrpc: '2.0',\n        };\n        const response = await fetchJsonRpc(\n            this.connection.url,\n            request as Methods[Method]['request'],\n            this.connection.headers || {},\n            retryConfig(this.options.retries, this.options.backoff, this.options.wait)\n        );\n        if ('error' in response && typeof response.error !== 'undefined') {\n            throw parseRpcError(response.error);\n        }\n\n        if (!('result' in response)) {\n            throw new Error(`JSON RPC response must include either \"result\", or \"error\" property`);\n        }\n\n        const { result } = response;\n        // From jsonrpc spec:\n        // result\n        //   This member is REQUIRED on success.\n        //   This member MUST NOT exist if there was an error invoking the method.\n        if (typeof result === 'undefined') {\n            throw new TypedError(\n                `Exceeded ${this.options.retries} attempts for request to ${method}.`,\n                'RetriesExceeded'\n            );\n        }\n\n        // \"null\" is a valid result that shouldn't be treated as error\n        if (response.result === null) return null as Result;\n\n        if (\n            typeof response.result === 'object' &&\n            'error' in response.result &&\n            typeof response.result.error === 'string'\n        ) {\n            if ('block_hash' in response.result && 'block_height' in response.result) {\n                throw parseRpcErrorMessage(\n                    response.result.error,\n                    response.result.block_hash,\n                    response.result.block_height\n                );\n            } else {\n                throw new RpcError(response.result.error);\n            }\n        }\n\n        return result as Result;\n    }\n}\n","import type { PublicKey } from '../crypto/index.js';\nimport { Enum } from '../types/index.js';\n\nimport type { DelegateAction } from './delegate.js';\nimport type { Signature } from './signature.js';\n\nexport class FunctionCallPermission {\n    allowance?: bigint;\n    receiverId: string;\n    methodNames: string[];\n\n    constructor({\n        allowance,\n        receiverId,\n        methodNames,\n    }: { allowance?: bigint; receiverId: string; methodNames: string[] }) {\n        this.allowance = allowance;\n        this.receiverId = receiverId;\n        this.methodNames = methodNames;\n    }\n}\n\nexport class FullAccessPermission {}\n\nexport class AccessKeyPermission extends Enum {\n    enum!: string;\n    functionCall?: FunctionCallPermission;\n    fullAccess?: FullAccessPermission;\n\n    constructor(props: any) {\n        super(props);\n        for (const [k, v] of Object.entries(props || {})) {\n            this[k] = v;\n            this.enum = k;\n        }\n    }\n}\n\nexport class AccessKey {\n    nonce: bigint;\n    permission: AccessKeyPermission;\n\n    constructor({ nonce, permission }: { nonce: bigint; permission: AccessKeyPermission }) {\n        this.nonce = nonce;\n        this.permission = permission;\n    }\n}\n\nexport class CreateAccount {}\nexport class DeployContract {\n    code: Uint8Array;\n\n    constructor({ code }: { code: Uint8Array }) {\n        this.code = code;\n    }\n}\nexport class FunctionCall {\n    methodName: string;\n    args: Uint8Array;\n    gas: bigint;\n    deposit: bigint;\n\n    constructor({\n        methodName,\n        args,\n        gas,\n        deposit,\n    }: { methodName: string; args: Uint8Array; gas: bigint; deposit: bigint }) {\n        this.methodName = methodName;\n        this.args = args;\n        this.gas = gas;\n        this.deposit = deposit;\n    }\n}\n\nexport class GlobalContractDeployMode extends Enum {\n    enum!: string;\n    CodeHash?: null;\n    AccountId?: null;\n\n    constructor(props: { CodeHash?: null; AccountId?: null }) {\n        super(props);\n        for (const [k, v] of Object.entries(props || {})) {\n            this[k] = v;\n            this.enum = k;\n        }\n    }\n}\n\nexport class GlobalContractIdentifier extends Enum {\n    enum!: string;\n    CodeHash?: Uint8Array;\n    AccountId?: string;\n\n    constructor(props: { CodeHash?: Uint8Array; AccountId?: string }) {\n        super(props);\n        for (const [k, v] of Object.entries(props || {})) {\n            this[k] = v;\n            this.enum = k;\n        }\n    }\n}\n\nexport class DeployGlobalContract {\n    code: Uint8Array;\n    deployMode: GlobalContractDeployMode;\n\n    constructor({ code, deployMode }: { code: Uint8Array; deployMode: GlobalContractDeployMode }) {\n        this.code = code;\n        this.deployMode = deployMode;\n    }\n}\n\nexport class UseGlobalContract {\n    contractIdentifier: GlobalContractIdentifier;\n\n    constructor({ contractIdentifier }: { contractIdentifier: GlobalContractIdentifier }) {\n        this.contractIdentifier = contractIdentifier;\n    }\n}\nexport class Transfer {\n    deposit: bigint;\n\n    constructor({ deposit }: { deposit: bigint }) {\n        this.deposit = deposit;\n    }\n}\nexport class Stake {\n    stake: bigint;\n    publicKey: PublicKey;\n\n    constructor({ stake, publicKey }: { stake: bigint; publicKey: PublicKey }) {\n        this.stake = stake;\n        this.publicKey = publicKey;\n    }\n}\nexport class AddKey {\n    publicKey: PublicKey;\n    accessKey: AccessKey;\n\n    constructor({ publicKey, accessKey }: { publicKey: PublicKey; accessKey: AccessKey }) {\n        this.publicKey = publicKey;\n        this.accessKey = accessKey;\n    }\n}\nexport class DeleteKey {\n    publicKey: PublicKey;\n\n    constructor({ publicKey }: { publicKey: PublicKey }) {\n        this.publicKey = publicKey;\n    }\n}\nexport class DeleteAccount {\n    beneficiaryId: string;\n\n    constructor({ beneficiaryId }: { beneficiaryId: string }) {\n        this.beneficiaryId = beneficiaryId;\n    }\n}\nexport class SignedDelegate {\n    delegateAction: DelegateAction;\n    signature: Signature;\n\n    constructor({ delegateAction, signature }: { delegateAction: DelegateAction; signature: Signature }) {\n        this.delegateAction = delegateAction;\n        this.signature = signature;\n    }\n}\n\n/**\n * Contains a list of the valid transaction Actions available with this API\n * @see {@link https://nomicon.io/RuntimeSpec/Actions.html | Actions Spec}\n */\nexport class Action extends Enum {\n    enum!: string;\n    createAccount?: CreateAccount;\n    deployContract?: DeployContract;\n    functionCall?: FunctionCall;\n    transfer?: Transfer;\n    stake?: Stake;\n    addKey?: AddKey;\n    deleteKey?: DeleteKey;\n    deleteAccount?: DeleteAccount;\n    signedDelegate?: SignedDelegate;\n    deployGlobalContract?: DeployGlobalContract;\n    useGlobalContract?: UseGlobalContract;\n\n    constructor(props: any) {\n        super(props);\n        for (const [k, v] of Object.entries(props || {})) {\n            this[k] = v;\n            this.enum = k;\n        }\n    }\n}\n","import type { PublicKey } from '../crypto/index.js';\nimport { stringToBytes } from '../utils/index.js';\n\nimport {\n    AccessKey,\n    AccessKeyPermission,\n    Action,\n    AddKey,\n    CreateAccount,\n    DeleteAccount,\n    DeleteKey,\n    DeployContract,\n    DeployGlobalContract,\n    FullAccessPermission,\n    FunctionCall,\n    FunctionCallPermission,\n    GlobalContractDeployMode,\n    GlobalContractIdentifier,\n    SignedDelegate,\n    Stake,\n    Transfer,\n    UseGlobalContract,\n} from './actions.js';\nimport type { DelegateAction } from './delegate.js';\nimport type { Signature } from './signature.js';\n\n/**\n * Creates a full access key with full access permissions.\n * @returns A new full access key.\n */\nfunction fullAccessKey(): AccessKey {\n    return new AccessKey({\n        nonce: 0n,\n        permission: new AccessKeyPermission({\n            fullAccess: new FullAccessPermission(),\n        }),\n    });\n}\n\n/**\n * Creates an access key with function call permission for a specific receiver and method names.\n * @param receiverId The NEAR account ID of the function call receiver.\n * @param methodNames An array of method names allowed for function calls.\n * @param allowance An optional allowance (maximum amount) for the function call. Default: Unlimited.\n * @returns A new access key with function call permission.\n */\nfunction functionCallAccessKey(receiverId: string, methodNames: string[], allowance?: bigint): AccessKey {\n    return new AccessKey({\n        nonce: 0n,\n        permission: new AccessKeyPermission({\n            functionCall: new FunctionCallPermission({\n                receiverId,\n                allowance,\n                methodNames,\n            }),\n        }),\n    });\n}\n\n/**\n * Creates a new action for creating a new NEAR account.\n * @returns A new action for creating a new account.\n */\nfunction createAccount(): Action {\n    return new Action({ createAccount: new CreateAccount() });\n}\n\n/**\n * Creates a new action for deploying a contract with the provided code.\n * @param code The Uint8Array representing the code of the contract.\n * @returns A new action for deploying a contract.\n */\nfunction deployContract(code: Uint8Array): Action {\n    return new Action({ deployContract: new DeployContract({ code }) });\n}\n\n/**\n * Converts an input argument to a Uint8Array, handling cases for both JSON and Uint8Array.\n * @param args The input argument, either JSON object or Uint8Array.\n * @returns A Uint8Array representation of the input argument.\n */\nexport function stringifyJsonOrBytes(args: any): Uint8Array {\n    if (args instanceof Uint8Array) return args;\n    return stringToBytes(JSON.stringify(args));\n}\n\n/**\n * Constructs {@link Action} instance representing contract method call.\n *\n * @param methodName the name of the method to call\n * @param args arguments to pass to method. Can be either plain JS object which gets serialized as JSON automatically\n *  or `Uint8Array` instance which represents bytes passed as is.\n * @param gas max amount of gas that method call can use\n * @param deposit amount of NEAR (in yoctoNEAR) to send together with the call\n * @param stringify Convert input arguments into bytes array.\n */\nfunction functionCall(\n    methodName: string,\n    args: Uint8Array | object,\n    gas = 0n,\n    deposit = 0n,\n    stringify = stringifyJsonOrBytes\n): Action {\n    return new Action({\n        functionCall: new FunctionCall({\n            methodName,\n            args: stringify(args),\n            gas,\n            deposit,\n        }),\n    });\n}\n\n/**\n * Creates a new action for transferring funds, optionally specifying a deposit amount.\n * @param deposit The amount to be deposited along with the transfer. Default: 0.\n * @returns A new action for transferring funds.\n */\nfunction transfer(deposit = 0n): Action {\n    return new Action({ transfer: new Transfer({ deposit }) });\n}\n\n/**\n * Creates a new action for staking tokens, specifying the stake amount and public key.\n * @param stake The amount to be staked. Default: 0.\n * @param publicKey The public key associated with the staking action.\n * @returns A new action for staking tokens.\n */\nfunction stake(stake = 0n, publicKey: PublicKey): Action {\n    return new Action({ stake: new Stake({ stake, publicKey }) });\n}\n\n/**\n * Creates a new action for adding a public key with a specified access key.\n * @param publicKey The public key to be added.\n * @param accessKey The access key associated with the added public key.\n * @returns A new action for adding a public key.\n */\nfunction addKey(publicKey: PublicKey, accessKey: AccessKey): Action {\n    return new Action({ addKey: new AddKey({ publicKey, accessKey }) });\n}\n\n/**\n * Creates a new action for adding a full access key.\n * @param publicKey The public key to be added.\n * @returns A new action for adding a full access key.\n */\nfunction addFullAccessKey(publicKey: PublicKey): Action {\n    return addKey(publicKey, fullAccessKey());\n}\n\n/** * Creates a new action for adding a function call access key.\n * @param publicKey The public key to be added.\n * @param receiverId The NEAR account ID of the function call receiver.\n * @param methodNames An array of method names allowed for function calls.\n * @param allowance An optional allowance (maximum amount) for the function call.\n * @returns A new action for adding a function call access key.\n */\nfunction addFunctionCallAccessKey(\n    publicKey: PublicKey,\n    receiverId: string,\n    methodNames: string[],\n    allowance?: bigint\n): Action {\n    return addKey(publicKey, functionCallAccessKey(receiverId, methodNames, allowance));\n}\n\n/**\n * Creates a new action for deleting a public key.\n * @param publicKey The public key to be deleted.\n * @returns A new action for deleting a public key.\n */\nfunction deleteKey(publicKey: PublicKey): Action {\n    return new Action({ deleteKey: new DeleteKey({ publicKey }) });\n}\n\n/**\n * Creates a new action for deleting an account with the specified beneficiary ID.\n * @param beneficiaryId The NEAR account ID of the beneficiary.\n * @returns A new action for deleting an account.\n */\nfunction deleteAccount(beneficiaryId: string): Action {\n    return new Action({ deleteAccount: new DeleteAccount({ beneficiaryId }) });\n}\n\n/**\n * Creates a new action for a signed delegation, specifying the delegate action and signature.\n * @param options Signed delegate options\n * @param options.delegateAction The delegate action to be performed.\n * @param options.signature The signature associated with the delegate action.\n * @returns A new action for a signed delegation.\n */\nfunction signedDelegate({\n    delegateAction,\n    signature,\n}: {\n    delegateAction: DelegateAction;\n    signature: Signature;\n}): Action {\n    return new Action({\n        signedDelegate: new SignedDelegate({ delegateAction, signature }),\n    });\n}\n\n/**\n * Creates a new action for deploying a global contract with provided code and mode.\n * @param code The Uint8Array representing the contract code.\n * @param deployMode The mode to deploy global contract (CodeHash or AccountId).\n * @returns A new action for deploying a global contract.\n */\nfunction deployGlobalContract(code: Uint8Array, deployMode: 'codeHash' | 'accountId'): Action {\n    const mode =\n        deployMode === 'codeHash'\n            ? new GlobalContractDeployMode({ CodeHash: null })\n            : new GlobalContractDeployMode({ AccountId: null });\n\n    return new Action({ deployGlobalContract: new DeployGlobalContract({ code, deployMode: mode }) });\n}\n\n/**\n * Creates a new action for using a previously deployed global contract.\n * @param contractIdentifier The global contract identifier (hash or account id).\n * @returns A new action for using a global contract.\n */\nfunction useGlobalContract(contractIdentifier: { accountId: string } | { codeHash: string | Uint8Array }): Action {\n    const identifier =\n        'accountId' in contractIdentifier\n            ? new GlobalContractIdentifier({\n                  AccountId: contractIdentifier.accountId,\n              })\n            : new GlobalContractIdentifier({\n                  CodeHash:\n                      typeof contractIdentifier.codeHash === 'string'\n                          ? new Uint8Array(\n                                contractIdentifier.codeHash.match(/.{1,2}/g)!.map((byte) => parseInt(byte, 16))\n                            )\n                          : contractIdentifier.codeHash,\n              });\n    return new Action({ useGlobalContract: new UseGlobalContract({ contractIdentifier: identifier }) });\n}\n\nexport const actions = {\n    addFullAccessKey,\n    addFunctionCallAccessKey,\n    createAccount,\n    deleteAccount,\n    deleteKey,\n    deployContract,\n    fullAccessKey,\n    functionCall,\n    functionCallAccessKey,\n    signedDelegate,\n    stake,\n    transfer,\n    deployGlobalContract,\n    useGlobalContract,\n};\n","import { deserialize, type Schema, serialize } from 'borsh';\nimport { PublicKey } from '../crypto/index.js';\n\nimport type { Action, SignedDelegate } from './actions.js';\nimport type { DelegateAction } from './delegate.js';\nimport { DelegateActionPrefix } from './prefix.js';\nimport type { Signature } from './signature.js';\n\n/**\n * Borsh-encode a delegate action for inclusion as an action within a meta transaction\n * NB per NEP-461 this requires a Borsh-serialized prefix specific to delegate actions, ensuring\n *  signed delegate actions may never be identical to signed transactions with the same fields\n * @param delegateAction Delegate action to be signed by the meta transaction sender\n */\nexport function encodeDelegateAction(delegateAction: DelegateAction) {\n    return new Uint8Array([\n        ...serialize(SCHEMA.DelegateActionPrefix, new DelegateActionPrefix()),\n        ...serialize(SCHEMA.DelegateAction, delegateAction),\n    ]);\n}\n\n/**\n * Borsh-encode a signed delegate for validation and execution by a relayer\n * @param signedDelegate Signed delegate to be executed in a meta transaction\n */\nexport function encodeSignedDelegate(signedDelegate: SignedDelegate) {\n    return serialize(SCHEMA.SignedDelegate, signedDelegate);\n}\n\n/**\n * Borsh-encode a transaction or signed transaction into a serialized form.\n * @param transaction The transaction or signed transaction object to be encoded.\n * @returns A serialized representation of the input transaction.\n */\nexport function encodeTransaction(transaction: Transaction | SignedTransaction) {\n    const schema: Schema = 'signature' in transaction ? SCHEMA.SignedTransaction : SCHEMA.Transaction;\n    return serialize(schema, transaction);\n}\n\n/**\n * Borsh-decode a Transaction instance from a buffer\n * @param bytes Uint8Array data to be decoded\n */\nexport function decodeTransaction(bytes: Uint8Array) {\n    return new Transaction(deserialize(SCHEMA.Transaction, bytes) as Transaction);\n}\n\n/**\n * Borsh-decode a SignedTransaction instance from a buffer\n * @param bytes Uint8Array data to be decoded\n */\nexport function decodeSignedTransaction(bytes: Uint8Array) {\n    return new SignedTransaction(deserialize(SCHEMA.SignedTransaction, bytes) as SignedTransaction);\n}\n\nexport class Transaction {\n    signerId: string;\n    publicKey: PublicKey;\n    nonce: bigint;\n    receiverId: string;\n    actions: Action[];\n    blockHash: Uint8Array;\n\n    constructor({\n        signerId,\n        publicKey,\n        nonce,\n        receiverId,\n        actions,\n        blockHash,\n    }: {\n        signerId: string;\n        publicKey: PublicKey;\n        nonce: bigint;\n        receiverId: string;\n        actions: Action[];\n        blockHash: Uint8Array;\n    }) {\n        this.signerId = signerId;\n        this.publicKey = PublicKey.from(publicKey);\n        this.nonce = nonce;\n        this.receiverId = receiverId;\n        this.actions = actions;\n        this.blockHash = blockHash;\n    }\n\n    encode(): Uint8Array {\n        return encodeTransaction(this);\n    }\n\n    static decode(bytes: Uint8Array): Transaction {\n        return decodeTransaction(bytes);\n    }\n}\n\nexport class SignedTransaction {\n    transaction: Transaction;\n    signature: Signature;\n\n    constructor({ transaction, signature }: { transaction: Transaction; signature: Signature }) {\n        this.transaction = transaction instanceof Transaction ? transaction : new Transaction(transaction);\n        this.signature = signature;\n    }\n\n    encode(): Uint8Array {\n        return encodeTransaction(this);\n    }\n\n    static decode(bytes: Uint8Array): SignedTransaction {\n        return decodeSignedTransaction(bytes);\n    }\n}\n\nexport const SCHEMA = new (class BorshSchema {\n    Ed25519Signature: Schema = {\n        struct: {\n            data: { array: { type: 'u8', len: 64 } },\n        },\n    };\n    Secp256k1Signature: Schema = {\n        struct: {\n            data: { array: { type: 'u8', len: 65 } },\n        },\n    };\n    MlDsa65Signature: Schema = {\n        struct: {\n            data: { array: { type: 'u8', len: 3309 } },\n        },\n    };\n    Signature: Schema = {\n        enum: [\n            { struct: { ed25519Signature: this.Ed25519Signature } },\n            { struct: { secp256k1Signature: this.Secp256k1Signature } },\n            { struct: { mlDsa65Signature: this.MlDsa65Signature } },\n        ],\n    };\n    Ed25519Data: Schema = {\n        struct: {\n            data: { array: { type: 'u8', len: 32 } },\n        },\n    };\n    Secp256k1Data: Schema = {\n        struct: {\n            data: { array: { type: 'u8', len: 64 } },\n        },\n    };\n    MlDsa65Data: Schema = {\n        struct: {\n            data: { array: { type: 'u8', len: 1952 } },\n        },\n    };\n    PublicKey: Schema = {\n        enum: [\n            { struct: { ed25519Key: this.Ed25519Data } },\n            { struct: { secp256k1Key: this.Secp256k1Data } },\n            { struct: { mlDsa65Key: this.MlDsa65Data } },\n        ],\n    };\n    FunctionCallPermission: Schema = {\n        struct: {\n            allowance: { option: 'u128' },\n            receiverId: 'string',\n            methodNames: { array: { type: 'string' } },\n        },\n    };\n    FullAccessPermission: Schema = {\n        struct: {},\n    };\n    AccessKeyPermission: Schema = {\n        enum: [\n            { struct: { functionCall: this.FunctionCallPermission } },\n            { struct: { fullAccess: this.FullAccessPermission } },\n        ],\n    };\n    AccessKey: Schema = {\n        struct: {\n            nonce: 'u64',\n            permission: this.AccessKeyPermission,\n        },\n    };\n    CreateAccount: Schema = {\n        struct: {},\n    };\n    DeployContract: Schema = {\n        struct: {\n            code: { array: { type: 'u8' } },\n        },\n    };\n    FunctionCall: Schema = {\n        struct: {\n            methodName: 'string',\n            args: { array: { type: 'u8' } },\n            gas: 'u64',\n            deposit: 'u128',\n        },\n    };\n    Transfer: Schema = {\n        struct: {\n            deposit: 'u128',\n        },\n    };\n    Stake: Schema = {\n        struct: {\n            stake: 'u128',\n            publicKey: this.PublicKey,\n        },\n    };\n    AddKey: Schema = {\n        struct: {\n            publicKey: this.PublicKey,\n            accessKey: this.AccessKey,\n        },\n    };\n    DeleteKey: Schema = {\n        struct: {\n            publicKey: this.PublicKey,\n        },\n    };\n    DeleteAccount: Schema = {\n        struct: {\n            beneficiaryId: 'string',\n        },\n    };\n    GlobalContractDeployMode: Schema = {\n        enum: [{ struct: { CodeHash: { struct: {} } } }, { struct: { AccountId: { struct: {} } } }],\n    };\n    GlobalContractIdentifier: Schema = {\n        enum: [{ struct: { CodeHash: { array: { type: 'u8', len: 32 } } } }, { struct: { AccountId: 'string' } }],\n    };\n    DeployGlobalContract: Schema = {\n        struct: {\n            code: { array: { type: 'u8' } },\n            deployMode: this.GlobalContractDeployMode,\n        },\n    };\n    UseGlobalContract: Schema = {\n        struct: {\n            contractIdentifier: this.GlobalContractIdentifier,\n        },\n    };\n    DelegateActionPrefix: Schema = {\n        struct: {\n            prefix: 'u32',\n        },\n    };\n    /** @todo: get rid of \"ClassicActions\" and keep only \"Action\" schema to be consistent with \"nearcore\" */\n    ClassicActions: Schema = {\n        enum: [\n            { struct: { createAccount: this.CreateAccount } },\n            { struct: { deployContract: this.DeployContract } },\n            { struct: { functionCall: this.FunctionCall } },\n            { struct: { transfer: this.Transfer } },\n            { struct: { stake: this.Stake } },\n            { struct: { addKey: this.AddKey } },\n            { struct: { deleteKey: this.DeleteKey } },\n            { struct: { deleteAccount: this.DeleteAccount } },\n            { struct: { signedDelegate: 'string' } }, // placeholder to keep the right enum order, should not be used\n            { struct: { deployGlobalContract: this.DeployGlobalContract } },\n            { struct: { useGlobalContract: this.UseGlobalContract } },\n        ],\n    };\n    DelegateAction: Schema = {\n        struct: {\n            senderId: 'string',\n            receiverId: 'string',\n            actions: { array: { type: this.ClassicActions } },\n            nonce: 'u64',\n            maxBlockHeight: 'u64',\n            publicKey: this.PublicKey,\n        },\n    };\n    SignedDelegate: Schema = {\n        struct: {\n            delegateAction: this.DelegateAction,\n            signature: this.Signature,\n        },\n    };\n    Action: Schema = {\n        enum: [\n            { struct: { createAccount: this.CreateAccount } },\n            { struct: { deployContract: this.DeployContract } },\n            { struct: { functionCall: this.FunctionCall } },\n            { struct: { transfer: this.Transfer } },\n            { struct: { stake: this.Stake } },\n            { struct: { addKey: this.AddKey } },\n            { struct: { deleteKey: this.DeleteKey } },\n            { struct: { deleteAccount: this.DeleteAccount } },\n            { struct: { signedDelegate: this.SignedDelegate } },\n            { struct: { deployGlobalContract: this.DeployGlobalContract } },\n            { struct: { useGlobalContract: this.UseGlobalContract } },\n        ],\n    };\n    Transaction: Schema = {\n        struct: {\n            signerId: 'string',\n            publicKey: this.PublicKey,\n            nonce: 'u64',\n            receiverId: 'string',\n            blockHash: { array: { type: 'u8', len: 32 } },\n            actions: { array: { type: this.Action } },\n        },\n    };\n    SignedTransaction: Schema = {\n        struct: {\n            transaction: this.Transaction,\n            signature: this.Signature,\n        },\n    };\n})();\n","const ACTIONABLE_MESSAGE_BASE = 2 ** 30;\n// const NON_ACTIONABLE_MESSAGE_BASE = Math.pow(2, 31);\n\n/** The set of NEPs for which an [NEP-461](https://github.com/near/NEPs/pull/461) prefix is required on the message prior to hashing **/\nconst NEP = {\n    MetaTransactions: 366,\n};\n\n/** Base class for NEP message prefixes **/\nabstract class NEPPrefix {\n    prefix: number;\n\n    constructor({ prefix }: { prefix: number }) {\n        this.prefix = prefix;\n    }\n}\n\n/** Class for constructing prefixes on actionable (on-chain) messages **/\nabstract class ActionableMessagePrefix extends NEPPrefix {\n    /** Given the NEP number, set the prefix using 2^30 as the offset **/\n    protected constructor(prefix: number) {\n        super({ prefix: ACTIONABLE_MESSAGE_BASE + prefix });\n    }\n}\n\n/**\n * Class for constructing prefixes on non-actionable (off-chain) messages\n * @todo uncomment when off-chain messages are supported\n * **/\n// abstract class NonActionableMessagePrefix extends NEPPrefix {\n//     /** Given the NEP number, set the prefix using 2^31 as the offset **/\n//     protected constructor(prefix: number) {\n//         super({ prefix: NON_ACTIONABLE_MESSAGE_BASE + prefix });\n//     }\n// }\n\n/** Prefix for delegate actions whose signatures must always be distinguishable from valid transaction signatures **/\nexport class DelegateActionPrefix extends ActionableMessagePrefix {\n    constructor() {\n        super(NEP.MetaTransactions);\n    }\n}\n","import type { PublicKey } from '../crypto/index.js';\n\nimport type { Action } from './actions.js';\nimport { Transaction } from './schema.js';\n\n/**\n * Creates a new transaction object with the provided parameters.\n * @param signerId The NEAR account ID of the transaction signer.\n * @param publicKey The public key associated with the signer.\n * @param receiverId The NEAR account ID of the transaction receiver.\n * @param nonce The nonce value for the transaction, represented as a BN, string, or number.\n * @param actions An array of transaction actions to be performed.\n * @param blockHash The hash of the block where the transaction will be included.\n * @returns A new transaction object initialized with the provided parameters.\n */\nexport function createTransaction(\n    signerId: string,\n    publicKey: PublicKey,\n    receiverId: string,\n    nonce: bigint | string | number,\n    actions: Action[],\n    blockHash: Uint8Array\n): Transaction {\n    const txNonce = typeof nonce === 'bigint' ? nonce : BigInt(nonce);\n    return new Transaction({\n        signerId,\n        publicKey,\n        nonce: txNonce,\n        receiverId,\n        actions,\n        blockHash,\n    });\n}\n","import type { PublicKey } from '../crypto/index.js';\n\nimport { actions } from './action_creators.js';\nimport { Action, AddKey } from './actions.js';\n\nconst {\n    createAccount,\n    deleteAccount,\n    deleteKey,\n    deployContract,\n    functionCall,\n    stake,\n    transfer,\n    deployGlobalContract,\n    useGlobalContract,\n} = actions;\n\nexport class DelegateAction {\n    senderId: string;\n    receiverId: string;\n    actions: Array<Action>;\n    nonce: bigint;\n    maxBlockHeight: bigint;\n    publicKey: PublicKey;\n\n    constructor({\n        senderId,\n        receiverId,\n        actions,\n        nonce,\n        maxBlockHeight,\n        publicKey,\n    }: {\n        senderId: string;\n        receiverId: string;\n        actions: Action[];\n        nonce: bigint;\n        maxBlockHeight: bigint;\n        publicKey: PublicKey;\n    }) {\n        this.senderId = senderId;\n        this.receiverId = receiverId;\n        this.actions = actions;\n        this.nonce = nonce;\n        this.maxBlockHeight = maxBlockHeight;\n        this.publicKey = publicKey;\n    }\n}\n\n/**\n * Compose a delegate action for inclusion with a meta transaction signed on the sender's behalf\n * @param options Delegate action options\n * @param options.actions The set of actions to be included in the meta transaction\n * @param options.maxBlockHeight The maximum block height for which this action can be executed as part of a transaction\n * @param options.nonce Current nonce on the access key used to sign the delegate action\n * @param options.publicKey Public key for the access key used to sign the delegate action\n * @param options.receiverId Account ID for the intended receiver of the meta transaction\n * @param options.senderId Account ID for the intended signer of the delegate action\n */\nexport function buildDelegateAction({\n    actions,\n    maxBlockHeight,\n    nonce,\n    publicKey,\n    receiverId,\n    senderId,\n}: DelegateAction): DelegateAction {\n    return new DelegateAction({\n        senderId,\n        receiverId,\n        actions: actions.map((a) => {\n            // @ts-expect-error type workaround\n            if (!a.type && !a.params) {\n                return a;\n            }\n\n            // @ts-expect-error type workaround\n            switch (a.type) {\n                case 'AddKey': {\n                    // @ts-expect-error type workaround\n                    const { publicKey, accessKey } = a.params;\n                    return new Action({ addKey: new AddKey({ publicKey, accessKey }) });\n                }\n                case 'CreateAccount': {\n                    // @ts-expect-error type workaround\n                    return createAccount(a.params.createAccount);\n                }\n                case 'DeleteAccount': {\n                    // @ts-expect-error type workaround\n                    return deleteAccount(a.params.deleteAccount);\n                }\n                case 'DeleteKey': {\n                    // @ts-expect-error type workaround\n                    return deleteKey(a.params.publicKey);\n                }\n                case 'DeployContract': {\n                    // @ts-expect-error type workaround\n                    return deployContract(a.params.code);\n                }\n                case 'FunctionCall': {\n                    // @ts-expect-error type workaround\n                    const { methodName, args, gas, deposit } = a.params;\n                    return functionCall(methodName, args, gas, deposit);\n                }\n                case 'Stake': {\n                    // @ts-expect-error type workaround\n                    return stake(a.params.stake, a.params.publicKey);\n                }\n                case 'Transfer': {\n                    // @ts-expect-error type workaround\n                    const { deposit } = a.params;\n                    return transfer(deposit);\n                }\n                case 'DeployGlobalContract': {\n                    // @ts-expect-error type workaround\n                    const { code, deployMode } = a.params;\n                    // Ensure deployMode is an instance if passed as a plain object\n                    const modeInstance = 'CodeHash' in deployMode ? 'codeHash' : 'accountId';\n                    return deployGlobalContract(code, modeInstance);\n                }\n                case 'UseGlobalContract': {\n                    // @ts-expect-error type workaround\n                    const { identifier } = a.params;\n                    // Ensure identifier is an instance if passed as a plain object\n                    const idInstance =\n                        'CodeHash' in identifier\n                            ? { codeHash: identifier.CodeHash }\n                            : { accountId: identifier.AccountId };\n                    return useGlobalContract(idInstance);\n                }\n            }\n\n            throw new Error('Unrecognized action');\n        }),\n        nonce,\n        maxBlockHeight,\n        publicKey,\n    });\n}\n","import { KeyType } from '../crypto/index.js';\nimport { Enum } from '../types/index.js';\n\nclass ED25519Signature {\n    keyType: KeyType = KeyType.ED25519;\n    data!: Uint8Array;\n}\nclass SECP256K1Signature {\n    keyType: KeyType = KeyType.SECP256K1;\n    data!: Uint8Array;\n}\nclass MLDSA65Signature {\n    keyType: KeyType = KeyType.MLDSA65;\n    data!: Uint8Array;\n}\n\nfunction resolveEnumKeyName(keyType: KeyType) {\n    switch (keyType) {\n        case KeyType.ED25519: {\n            return 'ed25519Signature';\n        }\n        case KeyType.SECP256K1: {\n            return 'secp256k1Signature';\n        }\n        case KeyType.MLDSA65: {\n            return 'mlDsa65Signature';\n        }\n        default: {\n            throw Error(`unknown type ${keyType}`);\n        }\n    }\n}\n\nexport class Signature extends Enum {\n    enum: string;\n    ed25519Signature?: ED25519Signature;\n    secp256k1Signature?: SECP256K1Signature;\n    mlDsa65Signature?: MLDSA65Signature;\n\n    constructor(signature: { keyType: KeyType; data: Uint8Array }) {\n        const keyName = resolveEnumKeyName(signature.keyType);\n        super({ [keyName]: signature });\n        this[keyName] = signature;\n        this.enum = keyName;\n    }\n\n    get signature() {\n        return this.ed25519Signature || this.secp256k1Signature || this.mlDsa65Signature;\n    }\n\n    get signatureType(): KeyType {\n        if (typeof this.signature === 'undefined') throw new Error(`Property 'signature' of Signature is undefined`);\n\n        return this.signature.keyType;\n    }\n\n    get data(): Uint8Array {\n        if (typeof this.signature === 'undefined') throw new Error(`Property 'signature' of Signature is undefined`);\n\n        return this.signature.data;\n    }\n}\n","import { TypedError } from '../types/index.js';\nimport type { JsonRpcRequest, JsonRpcResponse } from './methods.js';\n\nconst BACKOFF_MULTIPLIER = 1.5;\nconst RETRY_NUMBER = 10;\nconst RETRY_DELAY = 0;\n\ninterface BackOffOptions<E> {\n    numOfAttempts: number;\n    timeMultiple: number;\n    startingDelay: number;\n    retry: (error: E) => boolean;\n}\n\n/**\n * Simple exponential backoff implementation.\n * Retries a function with exponentially increasing delays.\n */\nasync function backOff<T, E extends Error>(fn: () => Promise<T>, options: BackOffOptions<E>): Promise<T | undefined> {\n    const { numOfAttempts, timeMultiple, startingDelay, retry } = options;\n    let delay = startingDelay;\n\n    for (let attempt = 1; attempt <= numOfAttempts; attempt++) {\n        try {\n            return await fn();\n        } catch (error) {\n            if (attempt === numOfAttempts || !retry(error as E)) {\n                throw error;\n            }\n            if (delay > 0) {\n                await new Promise((resolve) => setTimeout(resolve, delay));\n            }\n            delay = delay === 0 ? 1 : delay * timeMultiple;\n        }\n    }\n    return undefined;\n}\n\nexport function retryConfig(\n    numOfAttempts = RETRY_NUMBER,\n    timeMultiple = BACKOFF_MULTIPLIER,\n    startingDelay = RETRY_DELAY\n): BackOffOptions<ProviderError> {\n    return {\n        numOfAttempts: numOfAttempts,\n        timeMultiple: timeMultiple,\n        startingDelay: startingDelay,\n        retry: (e: ProviderError) => {\n            if ([503, 500, 408].includes(e.cause)) {\n                return true;\n            }\n\n            if (e.toString().includes('FetchError') || e.toString().includes('Failed to fetch')) {\n                return true;\n            }\n\n            return false;\n        },\n    };\n}\n\nexport interface ConnectionInfo {\n    url: string;\n    headers?: { [key: string]: string | number };\n}\n\nexport class ProviderError extends Error {\n    override cause: number = -1;\n    constructor(message: string, options: any) {\n        super(message, options);\n        if (options.cause) {\n            this.cause = options.cause;\n        }\n    }\n}\n\n/**\n * Performs an HTTP request to an RPC endpoint\n * @param url URL for the HTTP request\n * @param json Request body\n * @param headers HTTP headers to include with the request\n * @returns Promise<any> }arsed JSON response from the HTTP request.\n */\nexport async function fetchJsonRpc<Req extends JsonRpcRequest>(\n    url: string,\n    json: Req,\n    headers: object,\n    retryConfig: BackOffOptions<ProviderError>\n): Promise<JsonRpcResponse<Req['method']>> {\n    const response = await backOff(async () => {\n        const res = await fetch(url, {\n            method: 'POST',\n            body: JSON.stringify(json),\n            headers: { ...headers, 'Content-Type': 'application/json' },\n        });\n\n        const { status } = res;\n\n        if (status === 500) {\n            throw new ProviderError('Internal server error', { cause: status });\n        } else if (status === 408) {\n            throw new ProviderError('Timeout error', { cause: status });\n        } else if (status === 429) {\n            throw new ProviderError(await res.text(), { cause: status });\n        } else if (status === 502) {\n            throw new ProviderError(`${url} Bad Gateway`, { cause: status });\n        } else if (status === 503) {\n            throw new ProviderError(`${url} unavailable`, { cause: status });\n        }\n\n        return res;\n    }, retryConfig);\n\n    if (!response) {\n        throw new TypedError(`Exceeded ${RETRY_NUMBER} attempts for ${url}.`, 'RetriesExceeded');\n    }\n\n    return await response.json();\n}\n","import { type KeyPairString, PublicKey } from '../crypto/index.js';\nimport { parseTransactionExecutionError } from '../providers/errors/parse.js';\nimport { JsonRpcProvider, type Provider } from '../providers/index.js';\nimport type { RpcTransactionResponse } from '../rpc/types.gen.js';\nimport { InvalidNonceError } from '../rpc-errors/index.js';\nimport { KeyPairSigner, type SignedMessage, type Signer } from '../signers/index.js';\nimport type { SignDelegateActionReturn } from '../signers/signer.js';\nimport { FungibleToken, type NativeToken, NEAR } from '../tokens/index.js';\nimport {\n    type Action,\n    actions,\n    buildDelegateAction,\n    createTransaction,\n    type DelegateAction,\n    type SignedDelegate,\n    type SignedTransaction,\n} from '../transactions/index.js';\nimport type { Finality, SerializedReturnValue, TxExecutionStatus } from '../types/index.js';\nimport { baseDecode, getTransactionLastResult } from '../utils/index.js';\nimport { NonceManager } from './nonce-manager.js';\n\nconst {\n    addFullAccessKey,\n    addFunctionCallAccessKey,\n    createAccount,\n    deleteAccount,\n    deleteKey,\n    deployContract,\n    deployGlobalContract,\n    functionCall,\n    transfer,\n    useGlobalContract,\n} = actions;\n\nconst DEFAULT_FINALITY: Finality = 'optimistic';\nexport const DEFAULT_WAIT_STATUS: TxExecutionStatus = 'EXECUTED_OPTIMISTIC';\nconst DEFAULT_FUNCTION_CALL_GAS = 30_000_000_000_000n; // 30 TGas\n\nexport interface AccountState {\n    balance: {\n        total: bigint;\n        usedOnStorage: bigint;\n        locked: bigint;\n        available: bigint;\n    };\n    storageUsage: number;\n    codeHash: string;\n}\n\nexport interface CreateTransactionArgs {\n    receiverId: string;\n    actions: Action[];\n    publicKey: string | PublicKey;\n}\n\nexport interface CreateSignedTransactionArgs {\n    receiverId: string;\n    actions: Action[];\n    signer?: Signer;\n}\n\nexport interface CreateMetaTransactionArgs {\n    receiverId: string;\n    actions: Action[];\n    blockHeightTtl?: number;\n    publicKey: PublicKey | string;\n}\n\nexport interface CreateSignedMetaTransactionArgs {\n    receiverId: string;\n    actions: Action[];\n    blockHeightTtl?: number;\n    signer?: Signer;\n}\n\nexport interface SignAndSendTransactionArgs {\n    receiverId: string;\n    actions: Action[];\n    waitUntil?: TxExecutionStatus;\n    throwOnFailure?: boolean;\n    signer?: Signer;\n    retries?: number;\n}\n\nexport interface SignAndSendTransactionsArgs {\n    transactions: Array<{\n        receiverId: string;\n        actions: Action[];\n    }>;\n    waitUntil?: TxExecutionStatus;\n    throwOnFailure?: boolean;\n    signer?: Signer;\n}\n\nexport interface CreateAccountArgs {\n    newAccountId: string;\n    publicKey: PublicKey | string;\n    nearToTransfer?: bigint | string | number;\n}\n\nexport interface CreateSubAccountArgs {\n    accountOrPrefix: string;\n    publicKey: PublicKey | string;\n    nearToTransfer?: bigint | string | number;\n}\n\nexport interface AddFunctionAccessKeyArgs {\n    publicKey: PublicKey | string;\n    contractId: string;\n    methodNames?: string[];\n    allowance?: bigint | string | number;\n}\n\nexport interface CallFunctionArgs {\n    contractId: string;\n    methodName: string;\n    args?: Uint8Array | Record<string, any>;\n    deposit?: bigint | string | number;\n    gas?: bigint | string | number;\n    waitUntil?: TxExecutionStatus;\n}\n\nexport interface SignNep413MessageArgs {\n    message: string;\n    recipient: string;\n    nonce: Uint8Array;\n    callbackUrl?: string;\n}\n\nexport interface TransferArgs {\n    receiverId: string;\n    amount: bigint | string | number;\n    token?: NativeToken | FungibleToken;\n}\n\n/**\n * This class allows to access common account information.\n * If a {@link Signer} is provider, then the account can\n * be used to perform all common actions such as\n * transferring tokens and calling functions\n */\nexport class Account {\n    public readonly accountId: string;\n    public readonly provider: Provider;\n    private signer?: Signer;\n    private readonly nonceManager: NonceManager;\n\n    constructor(accountId: string, provider: Provider | string, signer?: Signer | KeyPairString) {\n        this.accountId = accountId;\n        if (typeof provider === 'string') {\n            this.provider = new JsonRpcProvider({ url: provider });\n        } else {\n            this.provider = provider;\n        }\n        if (typeof signer === 'string') {\n            this.signer = KeyPairSigner.fromSecretKey(signer);\n        } else {\n            this.signer = signer;\n        }\n        this.nonceManager = new NonceManager();\n    }\n\n    /**\n     * Allows to set the signer used to control the account\n     *\n     * @param signer holds the private key and can sign Transactions\n     */\n    public setSigner(signer: Signer): void {\n        this.signer = signer;\n    }\n\n    public getSigner(): Signer | undefined {\n        return this.signer;\n    }\n\n    /**\n     * Returns an overview of the account's state, including the account's\n     * balance, storage usage, and code hash\n     */\n    public async getState(): Promise<AccountState> {\n        const [protocolConfig, state] = await Promise.all([\n            this.provider.experimental_protocolConfig({\n                finality: DEFAULT_FINALITY,\n            }),\n            this.provider.viewAccount({\n                accountId: this.accountId,\n                blockQuery: {\n                    finality: DEFAULT_FINALITY,\n                },\n            }),\n        ]);\n\n        if (typeof protocolConfig.runtime_config !== 'object' || protocolConfig.runtime_config === null)\n            throw new Error('runtime_config is not defined in protocol config');\n\n        if (typeof protocolConfig.runtime_config.storage_amount_per_byte === 'undefined')\n            throw new Error('runtime_config.storage_amount_per_byte is not defined in protocol config');\n\n        const costPerByte = BigInt(protocolConfig.runtime_config.storage_amount_per_byte);\n        const usedOnStorage = BigInt(state.storage_usage) * costPerByte;\n        const locked = BigInt(state.locked);\n        const total = BigInt(state.amount) + locked;\n        const available = total - (locked > usedOnStorage ? locked : usedOnStorage);\n\n        return {\n            balance: {\n                total,\n                usedOnStorage,\n                locked,\n                available,\n            },\n            storageUsage: state.storage_usage,\n            codeHash: state.code_hash,\n        };\n    }\n\n    /**\n     * Calls {@link Provider.viewAccessKey} to retrieve information for a\n     * specific key in the account\n     */\n    public async getAccessKey(publicKey: PublicKey | string) {\n        return this.provider.viewAccessKey({\n            accountId: this.accountId,\n            publicKey,\n            finalityQuery: {\n                finality: DEFAULT_FINALITY,\n            },\n        });\n    }\n\n    /**\n     * Calls {@link Provider.viewAccessKeyList} to retrieve the account's keys\n     */\n    public async getAccessKeyList() {\n        return this.provider.viewAccessKeyList({\n            accountId: this.accountId,\n            finalityQuery: {\n                finality: DEFAULT_FINALITY,\n            },\n        });\n    }\n\n    /**\n     * Calls {@link Provider.viewContractCode} to retrieve the account's\n     * contract code and its hash\n     */\n    public async getContractCode() {\n        return this.provider.viewContractCode({\n            contractId: this.accountId,\n            blockQuery: {\n                finality: DEFAULT_FINALITY,\n            },\n        });\n    }\n\n    /**\n     * Calls {@link Provider.viewContractState} to retrieve the keys and values\n     * stored on the account's contract\n     */\n    public async getContractState(prefix?: string) {\n        return this.provider.viewContractState({\n            contractId: this.accountId,\n            prefix,\n            blockQuery: {\n                finality: DEFAULT_FINALITY,\n            },\n        });\n    }\n\n    /**\n     * Create a transaction that can be later signed with a {@link Signer}\n     *\n     * @param options Transaction options\n     * @param options.receiverId Account against which to perform the actions\n     * @param options.actions Actions to perform\n     * @param options.publicKey The public part of the key that will be used to sign the transaction\n     */\n    public async createTransaction({ receiverId, actions, publicKey }: CreateTransactionArgs) {\n        if (!publicKey) throw new Error('Please provide a public key');\n\n        const pk = PublicKey.from(publicKey);\n\n        const [nonce, block] = await Promise.all([\n            this.nonceManager.resolveNextNonce(pk, this.accountId, this.provider),\n            this.provider.viewBlock({\n                // block hash referenced in tx must be finalized\n                // to ensure node has it in memory\n                finality: 'final',\n            }),\n        ]);\n\n        const recentBlockHash = block.header.hash;\n\n        return createTransaction(this.accountId, pk, receiverId, nonce, actions, baseDecode(recentBlockHash));\n    }\n\n    /**\n     * Create a signed transaction ready to be broadcast by a {@link Provider}\n     */\n    public async createSignedTransaction({\n        receiverId,\n        actions,\n        signer = this.signer,\n    }: CreateSignedTransactionArgs): Promise<SignedTransaction> {\n        if (!signer) throw new Error('Please set a signer');\n\n        const tx = await this.createTransaction({\n            receiverId,\n            actions,\n            publicKey: await signer.getPublicKey(),\n        });\n\n        const { signedTransaction } = await signer.signTransaction(tx);\n\n        return signedTransaction;\n    }\n\n    /**\n     * Create a meta transaction ready to be signed by a {@link Signer}\n     *\n     * @param options Meta transaction options\n     * @param options.receiverId NEAR account receiving the transaction\n     * @param options.actions list of actions to perform as part of the meta transaction\n     * @param options.blockHeightTtl number of blocks after which a meta transaction will expire if not processed\n     */\n    public async createMetaTransaction({\n        receiverId,\n        actions,\n        blockHeightTtl = 200,\n        publicKey,\n    }: CreateMetaTransactionArgs): Promise<DelegateAction> {\n        if (!publicKey) throw new Error('Please provide a public key');\n\n        const pk = PublicKey.from(publicKey);\n\n        const [accessKey, block] = await Promise.all([\n            this.getAccessKey(pk),\n            this.provider.viewBlock({\n                finality: DEFAULT_FINALITY,\n            }),\n        ]);\n\n        const nonce = BigInt(accessKey.nonce) + 1n;\n        const maxBlockHeight = BigInt(block.header.height) + BigInt(blockHeightTtl);\n\n        return buildDelegateAction({\n            receiverId,\n            senderId: this.accountId,\n            actions,\n            publicKey: pk,\n            nonce,\n            maxBlockHeight,\n        });\n    }\n\n    /**\n     * Create a signed MetaTransaction that can be broadcasted to a relayer\n     *\n     * @param options Signed meta transaction options\n     * @param options.receiverId NEAR account receiving the transaction\n     * @param options.actions list of actions to perform as part of the meta transaction\n     * @param options.blockHeightTtl number of blocks after which a meta transaction will expire if not processed\n     */\n    public async createSignedMetaTransaction({\n        receiverId,\n        actions,\n        blockHeightTtl = 200,\n        signer = this.signer,\n    }: CreateSignedMetaTransactionArgs): Promise<SignDelegateActionReturn> {\n        if (!signer) throw new Error('Please set a signer');\n\n        const delegateAction = await this.createMetaTransaction({\n            receiverId,\n            actions,\n            blockHeightTtl,\n            publicKey: await signer.getPublicKey(),\n        });\n\n        return signer.signDelegateAction(delegateAction);\n    }\n\n    /**\n     * Creates a transaction, signs it and broadcast it to the network\n     *\n     * @param options Sign and send transaction options\n     * @param options.receiverId The NEAR account ID of the transaction receiver.\n     * @param options.actions The list of actions to be performed in the transaction.\n     * @param options.throwOnFailure Whether to throw an error if the transaction fails.\n     *\n     */\n    async signAndSendTransaction({\n        receiverId,\n        actions,\n        waitUntil = DEFAULT_WAIT_STATUS,\n        throwOnFailure = true,\n        signer = this.signer,\n        retries = 10,\n    }: SignAndSendTransactionArgs): Promise<RpcTransactionResponse> {\n        const signedTx = await this.createSignedTransaction({\n            receiverId,\n            actions,\n            signer,\n        });\n\n        let result: RpcTransactionResponse;\n        try {\n            result = await this.provider.sendTransactionUntil(signedTx, waitUntil);\n        } catch (error: unknown) {\n            if (error instanceof InvalidNonceError) {\n                // invalidate nonce cache so we don't send another transaction with stale nonce\n                await this.nonceManager.invalidate(signedTx.transaction.publicKey);\n\n                if (retries > 0) {\n                    return this.signAndSendTransaction({\n                        receiverId,\n                        actions,\n                        waitUntil,\n                        throwOnFailure,\n                        signer,\n                        retries: retries - 1,\n                    });\n                }\n            }\n\n            throw error;\n        }\n\n        if (\n            throwOnFailure &&\n            typeof result.status === 'object' &&\n            result.status !== null &&\n            'Failure' in result.status &&\n            typeof result.status.Failure === 'object' &&\n            result.status.Failure !== null\n        ) {\n            throw parseTransactionExecutionError(\n                result.status.Failure,\n                result.transaction_outcome.id,\n                result.transaction_outcome.block_hash,\n                result\n            );\n        }\n\n        return result;\n    }\n\n    async signAndSendTransactions({\n        transactions,\n        waitUntil = DEFAULT_WAIT_STATUS,\n        throwOnFailure = true,\n        signer = this.signer,\n    }: SignAndSendTransactionsArgs) {\n        if (!this.signer) throw new Error('Please set a signer');\n\n        const results = await Promise.all(\n            transactions.map(async ({ receiverId, actions }) => {\n                return this.signAndSendTransaction({\n                    receiverId,\n                    actions,\n                    waitUntil,\n                    throwOnFailure,\n                    signer,\n                });\n            })\n        );\n\n        return results;\n    }\n\n    /**\n     * Creates a new NEAR account with a given ID and public key.\n     *\n     * This method can create two types of accounts:\n     *\n     * 1. Top-level accounts of the form `name.tla` (e.g., `bob.near`):\n     *\n     * 2. Sub-accounts of the current account (e.g., `sub.ana.near`):\n     *    - The new account ID must end with the current account ID\n     *    - Example: If your account is `ana.near`, you can create `sub.ana.near`\n     *\n     * @param options Account creation options\n     * @param options.newAccountId the new account to create (e.g. bob.near or sub.ana.near)\n     * @param options.publicKey the public part of the key that will control the account\n     * @param options.nearToTransfer how much NEAR to transfer to the account in yoctoNEAR (default: 0)\n     *\n     */\n    public async createAccount({ newAccountId, publicKey, nearToTransfer = 0n }: CreateAccountArgs) {\n        if (newAccountId.endsWith(this.accountId)) {\n            return this.createSubAccount({ accountOrPrefix: newAccountId, publicKey, nearToTransfer });\n        }\n\n        const splitted = newAccountId.split('.');\n        if (splitted.length != 2) {\n            throw new Error(\n                `${this.accountId} can only create sub-accounts of itself, or accounts of the form <account>.<tla>`\n            );\n        }\n\n        const TLA = splitted[1]!;\n        return this.signAndSendTransaction({\n            receiverId: TLA,\n            actions: [\n                functionCall(\n                    'create_account',\n                    {\n                        new_account_id: newAccountId,\n                        new_public_key: publicKey.toString(),\n                    },\n                    BigInt('60000000000000'),\n                    BigInt(nearToTransfer)\n                ),\n            ],\n        });\n    }\n\n    /**\n     * Creates a sub account of this account. For example, if the account is\n     * ana.near, you can create sub.ana.near.\n     *\n     * @param options Sub-account creation options\n     * @param options.accountOrPrefix a prefix (e.g. `sub`) or the full sub-account (`sub.ana.near`)\n     * @param options.publicKey the public part of the key that will control the account\n     * @param options.nearToTransfer how much NEAR to transfer to the account (default: 0)\n     *\n     */\n    public async createSubAccount({ accountOrPrefix, publicKey, nearToTransfer = 0n }: CreateSubAccountArgs) {\n        if (!this.signer) throw new Error('Please set a signer');\n\n        const newAccountId = accountOrPrefix.includes('.') ? accountOrPrefix : `${accountOrPrefix}.${this.accountId}`;\n\n        if (newAccountId.length > 64) {\n            throw new Error('Accounts cannot exceed 64 characters');\n        }\n\n        if (!newAccountId.endsWith(this.accountId)) {\n            throw new Error(`New account must end up with ${this.accountId}`);\n        }\n\n        const actions = [\n            createAccount(),\n            transfer(BigInt(nearToTransfer)),\n            addFullAccessKey(PublicKey.from(publicKey)),\n        ];\n\n        return this.signAndSendTransaction({\n            receiverId: newAccountId,\n            actions,\n        });\n    }\n\n    /**\n     * Deletes the account, transferring all remaining NEAR to a beneficiary\n     * account\n     *\n     * Important: Deleting an account does not transfer FTs or NFTs\n     *\n     * @param beneficiaryId Will receive the account's remaining balance\n     */\n    public async deleteAccount(beneficiaryId: string) {\n        return this.signAndSendTransaction({\n            receiverId: this.accountId,\n            actions: [deleteAccount(beneficiaryId)],\n        });\n    }\n\n    /**\n     * Deploy a smart contract in the account\n     *\n     * @param code The compiled contract code bytes\n     */\n    public async deployContract(code: Uint8Array) {\n        return this.signAndSendTransaction({\n            receiverId: this.accountId,\n            actions: [deployContract(code)],\n        });\n    }\n\n    /**\n     * Deploy a global contract that can be reused by multiple accounts\n     *\n     * @param code The compiled contract code bytes\n     * @param deployMode Deploy mode - \"codeHash\" for immutable contracts, \"accountId\" for updateable contracts\n     */\n    public async deployGlobalContract(code: Uint8Array, deployMode: 'codeHash' | 'accountId') {\n        return this.signAndSendTransaction({\n            receiverId: this.accountId,\n            actions: [deployGlobalContract(code, deployMode)],\n        });\n    }\n\n    /**\n     * Use a previously deployed global contract on this account\n     *\n     * @param contractIdentifier The global contract identifier - either { accountId: string } or { codeHash: string | Uint8Array }\n     */\n    public async useGlobalContract(contractIdentifier: { accountId: string } | { codeHash: string | Uint8Array }) {\n        return this.signAndSendTransaction({\n            receiverId: this.accountId,\n            actions: [useGlobalContract(contractIdentifier)],\n        });\n    }\n\n    /**\n     *\n     * @param options\n     * @param options.publicKey The key to add to the account\n     * @param options.contractId The contract that this key can call\n     * @param options.methodNames The methods this key is allowed to call\n     * @param options.allowance The amount of NEAR this key can expend in gas\n     * @returns\n     */\n    public async addFunctionCallAccessKey({\n        publicKey,\n        contractId,\n        methodNames = [],\n        allowance = NEAR.toUnits('0.25'),\n    }: AddFunctionAccessKeyArgs) {\n        return this.signAndSendTransaction({\n            receiverId: this.accountId,\n            actions: [addFunctionCallAccessKey(PublicKey.from(publicKey), contractId, methodNames, BigInt(allowance))],\n        });\n    }\n\n    /**\n     * Add a full access key to the account\n     *\n     * @param publicKey The public key to be added\n     */\n    public async addFullAccessKey(publicKey: PublicKey | string) {\n        return this.signAndSendTransaction({\n            receiverId: this.accountId,\n            actions: [addFullAccessKey(PublicKey.from(publicKey))],\n        });\n    }\n\n    /**\n     * @param publicKey The public key to be deleted\n     */\n    public async deleteKey(publicKey: PublicKey | string) {\n        return this.signAndSendTransaction({\n            receiverId: this.accountId,\n            actions: [deleteKey(PublicKey.from(publicKey))],\n        });\n    }\n\n    /**\n     * Call a function on a smart contract and return parsed transaction result\n     *\n     * @param params Call function parameters\n     * @param params.contractId The contract in which to call the function\n     * @param params.methodName The method that will be called\n     * @param params.args Arguments, either as a valid JSON Object or a raw Uint8Array\n     * @param params.deposit (optional) Amount of NEAR Tokens to attach to the call (default 0)\n     * @param params.gas (optional) Amount of GAS to use attach to the call (default 30TGas)\n     * @param params.waitUntil (optional) Transaction finality to wait for (default INCLUDED_FINAL)\n     * @returns\n     */\n    public async callFunction<T extends SerializedReturnValue>(params: CallFunctionArgs): Promise<T> {\n        const outcome = await this.callFunctionRaw(params);\n        return getTransactionLastResult(outcome) as T;\n    }\n\n    /**\n     * Call a function on a smart contract and return raw transaction outcome\n     *\n     * @param params Call function parameters\n     * @param params.contractId The contract in which to call the function\n     * @param params.methodName The method that will be called\n     * @param params.args Arguments, either as a valid JSON Object or a raw Uint8Array\n     * @param params.deposit (optional) Amount of NEAR Tokens to attach to the call (default 0)\n     * @param params.gas (optional) Amount of GAS to use attach to the call (default 30TGas)\n     * @param params.waitUntil (optional) Transaction finality to wait for (default INCLUDED_FINAL)\n     */\n    public async callFunctionRaw({\n        contractId,\n        methodName,\n        args = {},\n        deposit = 0n,\n        gas = DEFAULT_FUNCTION_CALL_GAS,\n        waitUntil = DEFAULT_WAIT_STATUS,\n    }: CallFunctionArgs) {\n        return await this.signAndSendTransaction({\n            receiverId: contractId,\n            actions: [functionCall(methodName, args, BigInt(gas), BigInt(deposit))],\n            waitUntil,\n        });\n    }\n\n    /**\n     * This function simply calls the `signNep413Message` method of the Signer\n     *\n     * @deprecated This method is deprecated and will be removed in future versions. Please use `signMessage` from `near-api-js/nep413` to sign NEP-413 messages.\n     *\n     * @param args Nep413 message signing arguments\n     * @param args.message The message to be signed (e.g. \"authenticating\")\n     * @param args.recipient Who will receive the message (e.g. auth.app.com)\n     * @param args.nonce A challenge sent by the recipient\n     * @param args.callbackUrl (optional) Deprecated parameter used only by browser wallets\n     * @returns\n     */\n    public async signNep413Message({\n        message,\n        recipient,\n        nonce,\n        callbackUrl,\n    }: SignNep413MessageArgs): Promise<SignedMessage> {\n        if (!this.signer) throw new Error('Please set a signer');\n\n        return this.signer.signNep413Message(this.accountId, {\n            message,\n            recipient,\n            nonce,\n            callbackUrl,\n        });\n    }\n\n    /**\n     *\n     * @param token The token to check the balance of. Defaults to Native NEAR.\n     * @returns The available balance of the account in units (e.g. yoctoNEAR).\n     */\n    public async getBalance(token: NativeToken | FungibleToken = NEAR): Promise<bigint> {\n        return token.getBalance(this);\n    }\n\n    /**\n     * Relay a meta-transaction signed by a different account\n     *\n     * @param signedDelegate The signed delegate action to relay\n     * @returns The transaction response from the relayed meta-transaction\n     */\n    public async relayMetaTransaction(signedDelegate: SignedDelegate) {\n        return this.signAndSendTransaction({\n            receiverId: signedDelegate.delegateAction.senderId,\n            actions: [actions.signedDelegate(signedDelegate)],\n        });\n    }\n    /**\n     * Transfers a token to the specified receiver.\n     *\n     * Supports sending either the native NEAR token or any supported Fungible Token (FT).\n     *\n     * @param options Transfer options\n     * @param options.amount - The amount of tokens to transfer in units (e.g. yoctoNEAR).\n     * @param options.receiverId - The NEAR account ID of the receiver.\n     * @param options.token - The token to transfer. Defaults to Native NEAR.\n     *\n     */\n    public async transfer({ receiverId, amount, token = NEAR }: TransferArgs): Promise<RpcTransactionResponse> {\n        if (token instanceof FungibleToken) {\n            const isRegistered = await token.isAccountRegistered({ accountId: receiverId, provider: this.provider });\n\n            if (!isRegistered) {\n                await token.registerAccount({\n                    accountIdToRegister: receiverId,\n                    fundingAccount: this,\n                });\n            }\n        }\n        return token.transfer({ from: this, receiverId, amount });\n    }\n}\n","import { sha256 } from '@noble/hashes/sha2.js';\nimport type { PublicKey } from '../crypto/index.js';\nimport { type MessagePayload, serializeMessage } from '../nep413/schema.js';\nimport { SignedDelegate } from '../transactions/actions.js';\nimport {\n    type DelegateAction,\n    encodeDelegateAction,\n    encodeTransaction,\n    Signature,\n    SignedTransaction,\n    type Transaction,\n} from '../transactions/index.js';\n\nexport interface SignedMessage {\n    accountId: string; // The account name to which the publicKey corresponds as plain text (e.g. \"alice.near\")\n    publicKey: PublicKey; // The public counterpart of the key used to sign, expressed as a string with format \"<key-type>:<base58-key-bytes>\" (e.g. \"ed25519:6TupyNrcHGTt5XRLmHTc2KGaiSbjhQi1KHtCXTgbcr4Y\")\n    signature: Uint8Array; // The bytes representation of the signature.\n    state?: string; // Optional, applicable to browser wallets (e.g. MyNearWallet). The same state passed in MessagePayload.\n}\n\nexport interface SignTransactionReturn {\n    txHash: Uint8Array;\n    signedTransaction: SignedTransaction;\n}\n\nexport interface SignDelegateActionReturn {\n    delegateHash: Uint8Array;\n    signedDelegate: SignedDelegate;\n}\n\n/**\n * General signing interface, can be used for in memory signing, RPC singing, external wallet, HSM, etc.\n *\n * The signer must return a valid PublicKey from `getPublicKey()`, and must implement raw byte signing\n * that can be verified with the corresponding public key. (To verify the signature, serialize and hash transaction/delegate action,\n * or get payload hash for NEP-413 message from `utils.ts` and verify with the public key).\n */\nexport abstract class Signer {\n    /**\n     * Returns public key for given signer\n     */\n    public abstract getPublicKey(): Promise<PublicKey>;\n\n    /**\n     * Implement this method to sign given bytes payload.\n     * @param bytes - The payload to sign.\n     * @returns {Promise<Uint8Array>} - Promise of the bytes representation of the signature.\n     */\n    protected abstract signBytes(bytes: Uint8Array): Promise<Uint8Array>;\n\n    /**\n     * Signs given message according to NEP-413 requirements\n     * @see https://github.com/near/NEPs/blob/master/neps/nep-0413.md\n     *\n     * @param accountId - The account name to which the public key corresponds (e.g. \"alice.near\").\n     * @param params - The parameters including message, recipient, nonce, and optional callbackUrl.\n     */\n    public async signNep413Message(accountId: string, params: MessagePayload): Promise<SignedMessage> {\n        if (params.nonce.length !== 32) throw new Error('Nonce must be exactly 32 bytes long');\n\n        const hash = serializeMessage(params);\n\n        const signature = await this.signBytes(hash);\n        return {\n            accountId: accountId,\n            publicKey: await this.getPublicKey(),\n            signature: signature,\n            state: params.callbackUrl,\n        };\n    }\n\n    /**\n     * Signs given transaction.\n     * @param transaction - The transaction to sign.\n     * @returns {Promise<[Uint8Array, SignedTransaction]>} - Promise of the hash that can be verified and signed transaction.\n     */\n    public async signTransaction(transaction: Transaction): Promise<SignTransactionReturn> {\n        const pk = await this.getPublicKey();\n\n        if (transaction.publicKey.toString() !== pk.toString())\n            throw new Error(\"The public key doesn't match the signer's key\");\n\n        const serializedTx = encodeTransaction(transaction);\n        const txHash = new Uint8Array(sha256(serializedTx));\n\n        const signature = await this.signBytes(txHash);\n        const signedTx = new SignedTransaction({\n            transaction,\n            signature: new Signature({\n                keyType: transaction.publicKey.keyType,\n                data: signature,\n            }),\n        });\n        return { txHash, signedTransaction: signedTx };\n    }\n\n    /**\n     * Signs given delegate action.\n     * @param delegateAction - The delegate action to sign.\n     * @returns {Promise<[Uint8Array, SignedDelegate]>} - Promise of the hash that can be verified and signed delegate action.\n     */\n    public async signDelegateAction(delegateAction: DelegateAction): Promise<SignDelegateActionReturn> {\n        const pk = await this.getPublicKey();\n\n        if (delegateAction.publicKey.toString() !== pk.toString())\n            throw new Error(\"The public key doesn't match the signer's key\");\n\n        const serializedDelegate = encodeDelegateAction(delegateAction);\n        const delegateHash = new Uint8Array(sha256(serializedDelegate));\n\n        const signature = await this.signBytes(delegateHash);\n        const signedDelegate = new SignedDelegate({\n            delegateAction,\n            signature: new Signature({\n                keyType: pk.keyType,\n                data: signature,\n            }),\n        });\n\n        return { delegateHash, signedDelegate };\n    }\n}\n","import { sha256 } from '@noble/hashes/sha2.js';\nimport { type Schema, serialize } from 'borsh';\n\nexport interface MessagePayload {\n    message: string; // The message that wants to be transmitted.\n    recipient: string; // The recipient to whom the message is destined (e.g. \"alice.near\" or \"myapp.com\").\n    nonce: Uint8Array; // A nonce that uniquely identifies this instance of the message, denoted as a 32 bytes array (a fixed `Buffer` in JS/TS).\n    callbackUrl?: string; // Optional, applicable to browser wallets (e.g. MyNearWallet). The URL to call after the signing process. Defaults to `window.location.href`.\n}\n\nexport const Nep413MessageSchema: Schema = {\n    struct: {\n        message: 'string',\n        nonce: { array: { type: 'u8', len: 32 } },\n        recipient: 'string',\n        callbackUrl: { option: 'string' },\n    },\n};\n\nexport function serializeMessage(payload: MessagePayload): Uint8Array {\n    // 2**31 + 413 == 2147484061\n    const PREFIX = 2147484061;\n    const serializedPrefix = serialize('u32', PREFIX);\n    const serializedParams = serialize(Nep413MessageSchema, payload);\n\n    const serializedPayload = new Uint8Array(serializedPrefix.length + serializedParams.length);\n    serializedPayload.set(serializedPrefix);\n    serializedPayload.set(serializedParams, serializedPrefix.length);\n\n    return new Uint8Array(sha256(serializedPayload));\n}\n","import { KeyPair, type KeyPairString, type PublicKey } from '../crypto/index.js';\nimport { Signer } from './signer.js';\n\n/**\n * Signs using in KeyPair.\n */\nexport class KeyPairSigner extends Signer {\n    private readonly key: KeyPair;\n\n    constructor(key: KeyPair) {\n        super();\n        this.key = key;\n    }\n\n    public static fromSecretKey(encodedKey: KeyPairString): KeyPairSigner {\n        const key = KeyPair.fromString(encodedKey);\n\n        return new KeyPairSigner(key);\n    }\n\n    public async getPublicKey(): Promise<PublicKey> {\n        return this.key.getPublicKey();\n    }\n\n    protected async signBytes(bytes: Uint8Array): Promise<Uint8Array> {\n        const { signature } = this.key.sign(bytes);\n        return new Uint8Array(signature);\n    }\n}\n","import { KeyPair, type KeyPairString, type PublicKey } from '../crypto/index.js';\nimport type { MessagePayload } from '../nep413/schema.js';\nimport type { DelegateAction, Transaction } from '../transactions/index.js';\nimport { KeyPairSigner } from './key_pair_signer.js';\nimport { type SignDelegateActionReturn, type SignedMessage, Signer, type SignTransactionReturn } from './signer.js';\n\n/**\n * Signs using Multiple Keys, rotating through them for parallel transaction signing.\n *\n * This signer is designed for high-throughput scenarios where you want to sign\n * multiple transactions in parallel using different keys (to avoid nonce conflicts).\n *\n * @example\n * ```ts\n * const signer = new MultiKeySigner([key1, key2, key3]);\n * const account = new Account('account.near', provider, signer);\n *\n * // These will use different keys in rotation\n * await Promise.all([\n *   account.transfer({ receiverId: 'bob.near', amount: 1n }),\n *   account.transfer({ receiverId: 'alice.near', amount: 2n }),\n *   account.transfer({ receiverId: 'carol.near', amount: 3n }),\n * ]);\n * ```\n */\nexport class MultiKeySigner extends Signer {\n    private readonly keys: KeyPair[];\n    private keyIndex: number = 0;\n\n    constructor(keys: KeyPair[]) {\n        super();\n        if (keys.length === 0) {\n            throw new Error('MultiKeySigner requires at least one key');\n        }\n        this.keys = keys;\n    }\n\n    public static fromSecretKeys(encodedKeys: KeyPairString[]): MultiKeySigner {\n        const keys = encodedKeys.map(KeyPair.fromString);\n        return new MultiKeySigner(keys);\n    }\n\n    /**\n     * Returns the next public key in rotation.\n     * Each call rotates to the next key, enabling parallel transaction creation\n     * where each transaction gets a different key.\n     */\n    public async getPublicKey(): Promise<PublicKey> {\n        const key = this.keys[this.keyIndex]!;\n        this.keyIndex = (this.keyIndex + 1) % this.keys.length;\n        return key.getPublicKey();\n    }\n\n    /**\n     * Find the key pair that matches a given public key.\n     */\n    private findKeyByPublicKey(publicKey: PublicKey): KeyPair {\n        const pkString = publicKey.toString();\n        const key = this.keys.find((k) => k.getPublicKey().toString() === pkString);\n        if (!key) {\n            throw new Error(\n                `No matching key found for public key ${pkString}. ` +\n                    `Available keys: ${this.keys.map((k) => k.getPublicKey().toString()).join(', ')}`\n            );\n        }\n        return key;\n    }\n\n    protected async signBytes(_bytes: Uint8Array): Promise<Uint8Array> {\n        throw new Error(\n            'MultiKeySigner does not support signBytes directly. Use signTransaction or signDelegateAction instead.'\n        );\n    }\n\n    /**\n     * Signs a NEP-413 message using the first key in the set.\n     * This is because NEP-413 messages are not typically parallelized,\n     * so we use a consistent key for signing.\n     */\n    public override async signNep413Message(accountId: string, params: MessagePayload): Promise<SignedMessage> {\n        const signer = new KeyPairSigner(this.keys[0]!);\n        return signer.signNep413Message(accountId, params);\n    }\n\n    /**\n     * Signs a transaction using the key that matches the transaction's public key.\n     * This ensures parallel transactions each get signed with the correct key.\n     */\n    public override async signTransaction(transaction: Transaction): Promise<SignTransactionReturn> {\n        const key = this.findKeyByPublicKey(transaction.publicKey);\n        const signer = new KeyPairSigner(key);\n        return signer.signTransaction(transaction);\n    }\n\n    /**\n     * Signs a delegate action using the key that matches the action's public key.\n     * This ensures parallel meta-transactions each get signed with the correct key.\n     */\n    public override async signDelegateAction(delegateAction: DelegateAction): Promise<SignDelegateActionReturn> {\n        const key = this.findKeyByPublicKey(delegateAction.publicKey);\n        const signer = new KeyPairSigner(key);\n        return signer.signDelegateAction(delegateAction);\n    }\n}\n","import type { NumericString } from './types.js';\n\nexport function toUnits(amount: NumericString | number, exponent: number): bigint {\n    const cleanedAmount = cleanupAmount(`${amount}`);\n    if (!cleanedAmount) {\n        throw new Error('Amount cannot be empty');\n    }\n    const split = cleanedAmount.split('.');\n    const wholePart = split[0];\n    const fracPart = split[1] || '';\n    if (split.length > 2 || fracPart.length > exponent) {\n        throw new Error(`Cannot parse '${amount}'`);\n    }\n    return BigInt(trimLeadingZeroes(wholePart + fracPart.padEnd(exponent, '0')));\n}\n\nfunction cleanupAmount(amount: string): string {\n    return amount.replace(/,/g, '').trim();\n}\n\nfunction trimLeadingZeroes(value: string): string {\n    value = value.replace(/^0+/, '');\n    if (value === '') {\n        return '0';\n    }\n    return value;\n}\n","import type { NumericString } from './types.js';\nimport { toUnits } from './utils.js';\n\nconst GIGA_NOMINATION_EXP = 9;\nconst TERA_NOMINATION_EXP = 12;\n\nexport function gigaToGas(giga: NumericString | number): bigint {\n    return toUnits(giga, GIGA_NOMINATION_EXP);\n}\n\nexport function teraToGas(tera: NumericString | number): bigint {\n    return toUnits(tera, TERA_NOMINATION_EXP);\n}\n","export const MAX_NOMINATION_EXP = 24;\n\n/**\n * Convert internal indivisible units to formatted human-readable amount\n */\nexport function formatAmount(\n    units: string | number | bigint,\n    fracDigits: number,\n    precision: number = fracDigits\n): string {\n    units = cleanupUnits(units);\n\n    const wholeStr = units.substring(0, units.length - fracDigits) || '0';\n    let fractionStr = units\n        .substring(units.length - fracDigits)\n        .substring(0, fracDigits)\n        .padStart(fracDigits, '0');\n\n    fractionStr = fractionStr.substring(0, precision);\n\n    return trimTrailingZeroes(`${wholeStr}.${fractionStr}`);\n}\n\n/**\n * Convert human readable amount to internal indivisible units.\n */\nexport function parseAmount(amount: string, fracDigits: number): string {\n    amount = cleanupAmount(amount);\n    const split = amount.split('.');\n\n    if (split.length > 2) {\n        throw new Error(`Cannot parse amount '${amount}' as it contains more than a single dot`);\n    }\n\n    const wholePart = split[0];\n    const fracPart = split[1] || '';\n\n    if (fracPart.length > MAX_NOMINATION_EXP) {\n        throw new Error(\n            `Cannot parse amount '${amount}' as it exceeds maximum decimal precision of ${MAX_NOMINATION_EXP}`\n        );\n    }\n\n    return trimLeadingZeroes(wholePart + fracPart.substring(0, fracDigits).padEnd(fracDigits, '0'));\n}\n\n/**\n * Removes commas from the input\n * @param amount A value or amount that may contain commas\n * @returns string The cleaned value\n */\nfunction cleanupAmount(amount: string): string {\n    return amount.replace(/,/g, '.').trim();\n}\n\n/**\n * Removes .000… from an input\n * @param value A value that may contain trailing zeroes in the decimals place\n * @returns string The value without the trailing zeros\n */\nfunction trimTrailingZeroes(value: string): string {\n    return value.replace(/\\.?0*$/, '');\n}\n\n/**\n * Removes leading zeroes from an input\n * @param value A value that may contain leading zeroes\n * @returns string The value without the leading zeroes\n */\nfunction trimLeadingZeroes(value: string): string {\n    value = value.replace(/^0+/, '');\n    if (value === '') {\n        return '0';\n    }\n    return value;\n}\n\nfunction cleanupUnits(amount: string | number | bigint): string {\n    return BigInt(amount).toString();\n}\n","import type { Account } from '../../accounts/account.js';\nimport type { Provider } from '../../providers/provider.js';\nimport { actions } from '../../transactions/action_creators.js';\nimport { teraToGas } from '../../units/gas.js';\nimport { formatAmount, parseAmount } from './format.js';\n\ninterface FTMetadata {\n    spec?: string;\n    name: string;\n    decimals: number;\n    symbol: string;\n    icon?: string;\n}\n\nabstract class BaseFT {\n    public readonly metadata: FTMetadata;\n\n    constructor(metadata: FTMetadata) {\n        this.metadata = metadata;\n    }\n\n    /**\n     * Converts a decimal number to indivisible units\n     *\n     * @param amount The amount in decimal format (e.g. \"1.234\")\n     * @returns The amount in indivisible units (e.g. \"1234\")\n     */\n    public toUnits(amount: string | number): bigint {\n        const units = parseAmount(amount.toString(), this.metadata.decimals);\n        return BigInt(units);\n    }\n\n    /**\n     * Converts indivisible units to a decimal number (represented as a string)\n     *\n     * @param amount The amount in indivisible units (e.g. \"1234\")\n     * @param precision (optional) number of digits shown to the right of the decimal point - rounded down\n     * @returns The amount as a decimal string (e.g. \"1.234\")\n     */\n    public toDecimal(amount: bigint | string | number, precision?: number): string {\n        return formatAmount(amount, this.metadata.decimals, precision);\n    }\n\n    /**\n     * Get the available balance of an account in indivisible units\n     *\n     * @param account The account to get the balance of\n     * @returns\n     */\n    abstract getBalance(account: Account): Promise<bigint>;\n\n    /**\n     * Transfer tokens from one account to another\n     *\n     * @param param\n     * @param param.from The Account that will transfer the tokens\n     * @param param.receiverId The AccountID that will receive the tokens\n     * @param param.amount The amount of tokens to transfer in the smallest unit\n     */\n    abstract transfer({\n        from,\n        receiverId,\n        amount,\n    }: {\n        from: Account;\n        receiverId: string;\n        amount: string | number | bigint;\n    }): Promise<any>;\n}\n\nexport class NativeToken extends BaseFT {\n    public async transfer({\n        from,\n        receiverId,\n        amount,\n    }: {\n        from: Account;\n        receiverId: string;\n        amount: string | number | bigint;\n    }): Promise<any> {\n        return from.signAndSendTransaction({\n            receiverId,\n            actions: [actions.transfer(BigInt(amount))],\n        });\n    }\n\n    public async getBalance(account: Account): Promise<bigint> {\n        const {\n            balance: { available },\n        } = await account.getState();\n        return available;\n    }\n}\n\nexport class FungibleToken extends BaseFT {\n    public readonly accountId: string;\n\n    constructor(accountId: string, metadata: FTMetadata) {\n        metadata.spec = metadata.spec || 'ft-1.0.0';\n        super(metadata);\n        this.accountId = accountId;\n    }\n\n    public async transfer({\n        from,\n        receiverId,\n        amount,\n    }: {\n        from: Account;\n        receiverId: string;\n        amount: string | number | bigint;\n    }): Promise<any> {\n        return from.callFunction({\n            contractId: this.accountId,\n            methodName: 'ft_transfer',\n            args: {\n                amount: amount.toString(),\n                receiver_id: receiverId,\n            },\n            gas: teraToGas(30),\n            deposit: 1,\n        });\n    }\n\n    public async getBalance({ accountId, provider }: { accountId: string; provider: Provider }): Promise<bigint> {\n        const balance = await provider.callFunction({\n            contractId: this.accountId,\n            method: 'ft_balance_of',\n            args: { account_id: accountId },\n        });\n        return BigInt(balance as string);\n    }\n\n    /**\n     * Transfer tokens and call a function on the receiver contract,\n     * only works if the receiver implements the `ft_on_transfer` method\n     *\n     * @param param Transfer call parameters\n     * @param param.from The Account that will transfer the tokens\n     * @param param.receiverId The AccountID that will receive the tokens\n     * @param param.amount The amount of tokens to transfer in the smallest unit\n     * @param param.msg The message to send to the `ft_on_transfer` method\n     */\n    public async transferCall({\n        from,\n        receiverId,\n        amount,\n        msg,\n    }: {\n        from: Account;\n        receiverId: string;\n        amount: bigint;\n        msg: string;\n    }): Promise<any> {\n        return from.callFunction({\n            contractId: this.accountId,\n            methodName: 'ft_transfer_call',\n            args: {\n                receiver_id: receiverId,\n                amount: amount.toString(),\n                msg,\n            },\n            gas: teraToGas(30),\n            deposit: 1,\n        });\n    }\n\n    /**\n     * Register an account to the fungible token contract by paying a storage deposit\n     *\n     * @param param\n     * @param param.accountIdToRegister The AccountID to register\n     * @param param.fundingAccount The Account that will fund the registration\n     */\n    public async registerAccount({\n        accountIdToRegister,\n        fundingAccount,\n    }: {\n        accountIdToRegister: string;\n        fundingAccount: Account;\n    }): Promise<any> {\n        const bounds = (await fundingAccount.provider.callFunction({\n            contractId: this.accountId,\n            method: 'storage_balance_bounds',\n            args: {},\n        })) as { min: string; max: string | null };\n\n        const requiredDeposit = bounds.min as string;\n\n        return fundingAccount.callFunction({\n            contractId: this.accountId,\n            methodName: 'storage_deposit',\n            args: {\n                account_id: accountIdToRegister,\n                registration_only: true,\n            },\n            gas: teraToGas(30),\n            deposit: requiredDeposit,\n        });\n    }\n\n    /**\n     * Unregister an account from the fungible token contract by paying a storage deposit\n     *\n     * @param param\n     * @param param.account The Account to unregister\n     * @param param.force Whether to remove the account without claiming the storage deposit\n     */\n    public async unregisterAccount({ account, force = false }: { account: Account; force: boolean }): Promise<any> {\n        return account.callFunction({\n            contractId: this.accountId,\n            methodName: 'storage_unregister',\n            args: { force },\n            gas: teraToGas(30),\n            deposit: 1,\n        });\n    }\n\n    /**\n     * Checks if an account is registered to the fungible token contract\n     *\n     * @param param\n     * @param param.accountId The AccountID to check\n     * @param param.provider A Provider to use for the query\n     * @returns Whether the account is registered\n     */\n    public async isAccountRegistered({\n        accountId,\n        provider,\n    }: {\n        accountId: string;\n        provider: Provider;\n    }): Promise<boolean> {\n        const [storage, required] = await Promise.all([\n            provider.callFunction<{ total: string; available: string }>({\n                contractId: this.accountId,\n                method: 'storage_balance_of',\n                args: { account_id: accountId },\n            }),\n            provider.callFunction<{ min: string; max: string | null }>({\n                contractId: this.accountId,\n                method: 'storage_balance_bounds',\n                args: {},\n            }),\n        ]);\n\n        if (!storage) return false;\n\n        return BigInt(storage.total) >= BigInt(required!.min);\n    }\n}\n\n/**\n * The NEAR token is the native token of the NEAR blockchain\n */\nexport const NEAR = new NativeToken({\n    name: 'NEAR',\n    decimals: 24,\n    symbol: 'NEAR',\n    icon: 'data:image/svg+xml,%3Csvg%20width%3D%2232%22%20height%3D%2232%22%20viewBox%3D%220%200%2032%2032%22%20fill%3D%22none%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Ccircle%20cx%3D%2216%22%20cy%3D%2216%22%20r%3D%2216%22%20fill%3D%22white%22%3E%3C%2Fcircle%3E%3Cg%20clip-path%3D%22url(%23clip0000000003)%22%3E%3Cpath%20d%3D%22M20.8422%208.84471L17.4978%2013.776C17.4501%2013.847%2017.43%2013.9328%2017.4411%2014.0174C17.4522%2014.102%2017.4938%2014.1798%2017.5582%2014.2363C17.6225%2014.2928%2017.7053%2014.3243%2017.7913%2014.3249C17.8772%2014.3254%2017.9604%2014.2951%2018.0256%2014.2395L21.3178%2011.4036C21.3371%2011.3865%2021.361%2011.3753%2021.3866%2011.3714C21.4122%2011.3675%2021.4383%2011.3711%2021.4619%2011.3818C21.4855%2011.3924%2021.5054%2011.4096%2021.5193%2011.4314C21.5331%2011.4531%2021.5403%2011.4783%2021.54%2011.504V20.3824C21.54%2020.4095%2021.5316%2020.4361%2021.5158%2020.4583C21.5001%2020.4806%2021.4779%2020.4975%2021.4522%2020.5068C21.4265%2020.516%2021.3985%2020.5172%2021.3721%2020.5102C21.3456%2020.5031%2021.322%2020.4882%2021.3044%2020.4673L11.3533%208.63726C11.1933%208.44956%2010.994%208.29873%2010.7693%208.19525C10.5446%208.09178%2010.2999%208.03815%2010.0522%208.03809H9.70444C9.2524%208.03809%208.81887%208.21642%208.49922%208.53386C8.17957%208.8513%208%209.28185%208%209.73078V22.2351C8%2022.684%208.17957%2023.1145%208.49922%2023.432C8.81887%2023.7494%209.2524%2023.9277%209.70444%2023.9277V23.9277C9.99591%2023.9278%2010.2825%2023.8537%2010.537%2023.7125C10.7914%2023.5713%2011.0051%2023.3677%2011.1578%2023.1211L14.5022%2018.1898C14.5499%2018.1188%2014.57%2018.033%2014.5589%2017.9484C14.5478%2017.8638%2014.5062%2017.7861%2014.4418%2017.7295C14.3775%2017.673%2014.2947%2017.6415%2014.2087%2017.641C14.1228%2017.6404%2014.0396%2017.6707%2013.9744%2017.7264L10.6822%2020.5622C10.6629%2020.5794%2010.639%2020.5906%2010.6134%2020.5944C10.5878%2020.5983%2010.5617%2020.5947%2010.5381%2020.5841C10.5145%2020.5734%2010.4946%2020.5562%2010.4807%2020.5345C10.4669%2020.5128%2010.4597%2020.4875%2010.46%2020.4618V11.5813C10.46%2011.5541%2010.4684%2011.5276%2010.4842%2011.5053C10.4999%2011.483%2010.5221%2011.4661%2010.5478%2011.4568C10.5735%2011.4476%2010.6015%2011.4464%2010.6279%2011.4534C10.6544%2011.4605%2010.678%2011.4755%2010.6956%2011.4963L20.6456%2023.3286C20.8056%2023.5163%2021.0049%2023.6671%2021.2296%2023.7706C21.4543%2023.874%2021.699%2023.9277%2021.9467%2023.9277H22.2944C22.5184%2023.9279%2022.7401%2023.8842%2022.947%2023.7992C23.154%2023.7142%2023.342%2023.5895%2023.5004%2023.4324C23.6588%2023.2752%2023.7844%2023.0885%2023.8702%2022.8831C23.9559%2022.6776%2024%2022.4574%2024%2022.2351V9.73078C24%209.28185%2023.8204%208.8513%2023.5008%208.53386C23.1811%208.21642%2022.7476%208.03809%2022.2956%208.03809C22.0041%208.03801%2021.7175%208.11211%2021.4631%208.25332C21.2086%208.39453%2020.9949%208.59814%2020.8422%208.84471V8.84471Z%22%20fill%3D%22black%22%3E%3C%2Fpath%3E%3C%2Fg%3E%3Cdefs%3E%3CclipPath%20id%3D%22clip00033%22%3E%3Crect%20width%3D%2216%22%20height%3D%2216%22%20fill%3D%22black%22%20transform%3D%22translate(8%207.9834)%22%3E%3C%2Frect%3E%3C%2FclipPath%3E%3C%2Fdefs%3E%3C%2Fsvg%3E',\n});\n","import type { PublicKey } from '../crypto/public_key.js';\nimport type { Provider } from '../providers/provider.js';\n\nexport class NonceManager {\n    private nonces: Record<string, bigint>;\n    private locks: Record<string, Promise<void>>;\n\n    constructor() {\n        this.nonces = {};\n        this.locks = {};\n    }\n\n    public async resolveNextNonce(pk: PublicKey, accountId: string, provider: Provider): Promise<bigint> {\n        const key = pk.toString();\n\n        // wait until unlocked\n        const lock = this.locks[key];\n        if (lock) await lock;\n\n        if (typeof this.nonces[key] === 'bigint') {\n            this.nonces[key] = this.nonces[key] + 1n;\n            return this.nonces[key];\n        }\n\n        // biome-ignore lint/suspicious/noEmptyBlockStatements: unlock is immediately overwritten\n        let unlock = () => {};\n\n        const newLock = new Promise<void>((resolve) => {\n            unlock = resolve;\n        });\n        this.locks[key] = newLock;\n\n        try {\n            const accessKey = await provider.viewAccessKey({\n                accountId,\n                publicKey: pk,\n                finalityQuery: { finality: 'optimistic' },\n            });\n\n            this.nonces[key] = accessKey.nonce + 1n;\n\n            return this.nonces[key];\n        } finally {\n            unlock();\n        }\n    }\n\n    public async invalidate(pk: PublicKey): Promise<void> {\n        const key = pk.toString();\n\n        // make sure to wait until unlocked\n        const lock = this.locks[key];\n        if (lock) await lock;\n\n        delete this.nonces[key];\n    }\n}\n","import type { ValidationError } from 'is-my-json-valid';\n\nexport class UnsupportedSerializationError extends Error {\n    constructor(methodName: string, serializationType: string) {\n        super(`Contract method '${methodName}' is using an unsupported serialization type ${serializationType}`);\n    }\n}\n\nexport class UnknownArgumentError extends Error {\n    constructor(actualArgName: string, expectedArgNames: string[]) {\n        super(`Unrecognized argument '${actualArgName}', expected '${JSON.stringify(expectedArgNames)}'`);\n    }\n}\n\nexport class ArgumentSchemaError extends Error {\n    constructor(argName: string, errors: ValidationError[]) {\n        super(`Argument '${argName}' does not conform to the specified ABI schema: '${JSON.stringify(errors)}'`);\n    }\n}\n\nexport class ConflictingOptions extends Error {\n    constructor() {\n        super(\n            'Conflicting contract method options have been passed. You can either specify ABI or a list of view/call methods.'\n        );\n    }\n}\n","/* eslint-disable @typescript-eslint/ban-types */\n/* eslint-disable @typescript-eslint/no-unnecessary-type-constraint */\n/* eslint-disable @typescript-eslint/no-unused-vars */\n\nimport validator from 'is-my-json-valid';\nimport type { Provider } from '../providers/index.js';\nimport type { BlockReference, TxExecutionStatus } from '../types/index.js';\nimport type {\n    AbiFunction,\n    AbiFunctionKind,\n    AbiParameters,\n    AbiRoot,\n    AbiType,\n    RootSchema,\n    Schema,\n    SchemaObject,\n} from './abi_types.js';\nimport type { Account } from './account.js';\nimport { ArgumentSchemaError, UnknownArgumentError } from './errors.js';\n\ntype IsNullable<T> = [null] extends [T] ? true : false;\n\ntype IsNever<T> = [T] extends [never] ? true : false;\n\nexport type IsNarrowable<T, U> =\n    IsNever<(T extends U ? true : false) & (U extends T ? false : true)> extends true ? false : true;\n\ntype IsFullyOptional<T> =\n    IsNever<keyof T> extends true\n        ? true\n        : {\n                [K in keyof T]-?: {} extends Pick<T, K> ? true : false;\n            }[keyof T] extends true\n          ? true\n          : false;\n\ntype Prettify<T> = {\n    [K in keyof T]: T[K];\n} & {};\n\ntype ExtractAbiFunctions<\n    abi extends AbiRoot,\n    abiFunctionKind extends AbiFunctionKind = AbiFunctionKind,\n    _functions extends AbiFunction[] = abi['body']['functions'],\n> = Extract<_functions[number], { kind: abiFunctionKind }>;\n\ntype ExtractAbiFunction<\n    abi extends AbiRoot,\n    functionName extends ExtractAbiFunctionNames<abi>,\n    abiFunctionKind extends AbiFunctionKind = AbiFunctionKind,\n> = Extract<ExtractAbiFunctions<abi, abiFunctionKind>, { name: functionName }>;\n\ntype ExtractAbiFunctionNames<\n    abi extends AbiRoot,\n    abiFunctionKind extends AbiFunctionKind = AbiFunctionKind,\n    _functions extends AbiFunction[] = abi['body']['functions'],\n> = ExtractAbiFunctions<abi, abiFunctionKind>['name'];\n\ntype GetViewFunction<\n    abi extends AbiRoot,\n    functionName extends ExtractAbiFunctionNames<abi, 'view'>,\n    abiFunction extends AbiFunction = ExtractAbiFunction<abi, functionName>,\n    _args extends Record<string, unknown> = ContractFunctionArgs<abi, abiFunction>,\n    _return = ContractFunctionReturnType<abi, abiFunction>,\n> =\n    IsNarrowable<abi, AbiRoot> extends true\n        ? IsNever<_args> extends true\n            ? (params?: { blockQuery?: BlockReference }) => Promise<Prettify<_return>>\n            : IsFullyOptional<_args> extends true\n              ? (params?: { blockQuery?: BlockReference; args?: _args }) => Promise<Prettify<_return>>\n              : (params: { blockQuery?: BlockReference; args: _args }) => Promise<Prettify<_return>>\n        : <Response = unknown>(params?: {\n              blockQuery?: BlockReference;\n              args?: Record<string, unknown>;\n          }) => Promise<Response>;\n\ntype GetCallFunction<\n    abi extends AbiRoot,\n    functionName extends ExtractAbiFunctionNames<abi, 'call'>,\n    abiFunction extends AbiFunction = ExtractAbiFunction<abi, functionName>,\n    _args extends Record<string, unknown> = ContractFunctionArgs<abi, abiFunction>,\n    _return = ContractFunctionReturnType<abi, abiFunction>,\n> =\n    IsNarrowable<abi, AbiRoot> extends true\n        ? IsNever<_args> extends true\n            ? (params: {\n                  deposit?: bigint;\n                  gas?: bigint;\n                  waitUntil?: TxExecutionStatus;\n                  account: Account;\n              }) => Promise<Prettify<_return>>\n            : (params: {\n                  deposit?: bigint;\n                  gas?: bigint;\n                  args: _args;\n                  waitUntil?: TxExecutionStatus;\n                  account: Account;\n              }) => Promise<Prettify<_return>>\n        : <Response = unknown>(params: {\n              deposit?: bigint;\n              gas?: bigint;\n              args?: Record<string, unknown>;\n              waitUntil?: TxExecutionStatus;\n              account: Account;\n          }) => Promise<Response>;\n\ntype ContractFunctionReturnType<abi extends AbiRoot, abiFunction extends AbiFunction> = abiFunction extends {\n    result: infer Result;\n}\n    ? Result extends AbiType\n        ? Result['type_schema'] extends Schema\n            ? ResolveSchemaType<abi, Result['type_schema']>\n            : unknown\n        : unknown\n    : void;\n\ntype ContractFunctionArgs<abi extends AbiRoot, abiFunction extends AbiFunction> = abiFunction extends {\n    params: infer Params;\n}\n    ? Params extends AbiParameters\n        ? Params['args'] extends { name: any; type_schema: any }[]\n            ? Prettify<\n                  {\n                      [Arg in Params['args'][number] as IsNullable<\n                          ResolveSchemaType<abi, Arg['type_schema']>\n                      > extends false\n                          ? Arg['name'] & string\n                          : never]: ResolveSchemaType<abi, Arg['type_schema']>;\n                  } & {\n                      [Arg in Params['args'][number] as IsNullable<\n                          ResolveSchemaType<abi, Arg['type_schema']>\n                      > extends true\n                          ? Arg['name'] & string\n                          : never]?: ResolveSchemaType<abi, Arg['type_schema']>;\n                  }\n              >\n            : never\n        : never\n    : never;\n\ntype ToArray<T> = T extends any[] ? T : [T];\n\ntype JSONSchemaTypeMap = {\n    string: string;\n    integer: number;\n    number: number;\n    boolean: boolean;\n    null: null;\n};\n\ntype EnumValue = NonNullable<SchemaObject['enum']>;\n\ntype ResolveEnum<schema extends { enum: EnumValue }> = schema['enum'] extends (infer S)[] ? S : never;\n\ntype ResolveType<abi extends AbiRoot, schema extends Schema, type extends any | any[]> =\n    ToArray<type> extends (infer T)[]\n        ? T extends 'array'\n            ? ResolveArrayType<abi, schema>\n            : T extends 'object'\n              ? ResolveObjectType<abi, schema>\n              : T extends keyof JSONSchemaTypeMap\n                ? JSONSchemaTypeMap[T]\n                : never\n        : never;\n\ntype ResolveArrayType<abi extends AbiRoot, schema extends Schema> = schema extends {\n    items: infer Items;\n}\n    ? Items extends Schema\n        ? schema extends {\n              uniqueItems: true;\n          }\n            ? Set<ResolveSchemaType<abi, Items>>\n            : ResolveSchemaType<abi, Items>[]\n        : unknown[]\n    : unknown[];\n\ntype ResolveObjectType<abi extends AbiRoot, schema extends Schema> = schema extends {\n    properties: Record<string, any>;\n}\n    ? schema extends {\n          required: string[];\n      }\n        ? Prettify<\n              {\n                  -readonly [Key in keyof schema['properties'] as Key extends schema['required'][number]\n                      ? Key\n                      : never]: ResolveSchemaType<abi, schema['properties'][Key]>;\n              } & {\n                  -readonly [Key in keyof schema['properties'] as Key extends schema['required'][number]\n                      ? never\n                      : Key]?: ResolveSchemaType<abi, schema['properties'][Key]>;\n              }\n          >\n        : {\n              -readonly [Key in keyof schema['properties']]?: ResolveSchemaType<abi, schema['properties'][Key]>;\n          }\n    : schema extends {\n            additionalProperties: Schema;\n        }\n      ? Record<string, ResolveSchemaType<abi, schema['additionalProperties']>>\n      : Record<string, unknown>;\n\ntype ResolveRef<\n    abi extends AbiRoot,\n    ref extends string,\n    _definitions = abi['body']['root_schema']['definitions'],\n> = ref extends keyof _definitions\n    ? _definitions[ref] extends Schema\n        ? ResolveSchemaType<abi, _definitions[ref]>\n        : never\n    : never;\n\n/** @todo: it has to use advanced OneOf type that ensures only exact type is allowed */\ntype ResolveOneOf<abi extends AbiRoot, schema extends { oneOf: Schema[] }> = schema['oneOf'] extends (infer S)[]\n    ? S extends Schema\n        ? ResolveSchemaType<abi, S>\n        : never\n    : never;\n\ntype ResolveAnyOf<abi extends AbiRoot, schema extends { anyOf: Schema[] }> = schema['anyOf'] extends (infer S)[]\n    ? S extends Schema\n        ? ResolveSchemaType<abi, S>\n        : never\n    : never;\n\ntype ResolveSchemaType<abi extends AbiRoot, schema extends Schema | boolean> = schema extends boolean\n    ? schema\n    : schema extends { enum: EnumValue }\n      ? ResolveEnum<schema>\n      : schema extends { type: infer Type }\n        ? ResolveType<abi, schema, Type>\n        : schema extends { $ref: `#/definitions/${infer Ref}` }\n          ? ResolveRef<abi, Ref>\n          : schema extends { oneOf: Schema[] }\n            ? ResolveOneOf<abi, schema>\n            : schema extends { anyOf: Schema[] }\n              ? ResolveAnyOf<abi, schema>\n              : never;\n\ntype ContractParameters<abi extends AbiRoot, contractId extends string> = {\n    contractId: contractId;\n    provider: Provider;\n    abi: abi;\n};\n\nexport type ContractReturnType<\n    abi extends AbiRoot,\n    contractId extends string,\n    //\n    _viewFunctionNames extends string = abi extends AbiRoot\n        ? AbiRoot extends abi\n            ? string\n            : ExtractAbiFunctionNames<abi, 'view'>\n        : string,\n    _callFunctionNames extends string = abi extends AbiRoot\n        ? AbiRoot extends abi\n            ? string\n            : ExtractAbiFunctionNames<abi, 'call'>\n        : string,\n> = Prettify<\n    (IsNever<_viewFunctionNames> extends false\n        ? {\n              view: {\n                  [functionName in _viewFunctionNames]: GetViewFunction<abi, functionName>;\n              };\n          }\n        : {}) &\n        (IsNever<_callFunctionNames> extends false\n            ? {\n                  call: {\n                      [functionName in _callFunctionNames]: GetCallFunction<abi, functionName>;\n                  };\n              }\n            : {}) & { abi: abi; contractId: contractId }\n>;\n\nexport type ContractConstructor = {\n    new <const abi extends AbiRoot, contractId extends string>(\n        params: ContractParameters<abi, contractId>\n    ): ContractReturnType<abi, contractId>;\n\n    new <const abi extends AbiRoot, contractId extends string>(\n        params: Prettify<Omit<ContractParameters<abi, contractId>, 'abi'>>\n    ): Prettify<Omit<ContractReturnType<abi, contractId>, 'abi'>>;\n};\n\nclass RawContract<const abi extends AbiRoot, contractId extends string> {\n    abi?: abi;\n    contractId: contractId;\n\n    view!: ContractReturnType<abi, contractId> extends {\n        view: infer ViewMethods;\n    }\n        ? ViewMethods\n        : never;\n\n    call!: ContractReturnType<abi, contractId> extends {\n        call: infer CallMethods;\n    }\n        ? CallMethods\n        : never;\n\n    constructor({ abi, provider, contractId }: ContractParameters<abi, contractId>) {\n        this.contractId = contractId;\n        this.abi = abi;\n\n        let hasViewFunction = false;\n        let hasCallFunction = false;\n\n        const abiFunctions = abi?.body.functions || [];\n\n        for (const func of abiFunctions) {\n            if (func.kind === 'view') {\n                hasViewFunction = true;\n            } else if (func.kind === 'call') {\n                hasCallFunction = true;\n            }\n\n            // exit early if all flags are `true`\n            if (hasViewFunction && hasCallFunction) break;\n        }\n\n        if (hasViewFunction || !abi) {\n            this.view = new Proxy(\n                {},\n                {\n                    get: (_, functionName: string) => {\n                        const abiFunction = (abi?.body.functions || []).find(({ name }) => name === functionName);\n\n                        return async (params: { args?: object; blockQuery?: BlockReference } = {}) => {\n                            const args = params.args ?? {};\n\n                            if (abiFunction && abi) {\n                                validateArguments(args, abiFunction, abi);\n                            }\n\n                            return provider.callFunction({\n                                contractId,\n                                method: functionName,\n                                args: args as Record<string, unknown>,\n                                blockQuery: params.blockQuery,\n                            });\n                        };\n                    },\n                }\n            ) as any;\n        }\n\n        if (hasCallFunction || !abi) {\n            this.call = new Proxy(\n                {},\n                {\n                    get: (_, functionName: string) => {\n                        const abiFunction = (abi?.body.functions || []).find(({ name }) => name === functionName);\n\n                        return async (params: {\n                            deposit?: bigint;\n                            gas?: bigint;\n                            args?: object;\n                            waitUntil?: TxExecutionStatus;\n                            account: Account;\n                        }) => {\n                            const args = params.args ?? {};\n\n                            if (abiFunction && abi) {\n                                validateArguments(args, abiFunction, abi);\n                            }\n\n                            return params.account.callFunction({\n                                contractId,\n                                methodName: functionName,\n                                args,\n                                deposit: params.deposit,\n                                gas: params.gas,\n                                waitUntil: params.waitUntil,\n                            });\n                        };\n                    },\n                }\n            ) as any;\n        }\n\n        if (!abi) {\n            delete this.abi;\n        }\n    }\n}\n\nexport const Contract = RawContract as ContractConstructor;\n\nfunction validateArguments(args: object, abiFunction: AbiFunction, abiRoot: AbiRoot) {\n    if (typeof args !== 'object' || typeof abiFunction.params !== 'object') return;\n\n    if (abiFunction.params.serialization_type === 'json') {\n        const params = abiFunction.params.args;\n        for (const p of params) {\n            const arg = args[p.name];\n            const typeSchema = p.type_schema;\n            (typeSchema as RootSchema).definitions = abiRoot.body.root_schema.definitions;\n            const validate = validator(typeSchema as any);\n            const valid = validate(arg);\n            if (!valid) {\n                throw new ArgumentSchemaError(p.name, validate.errors);\n            }\n        }\n        // Check there are no extra unknown arguments passed\n        for (const argName of Object.keys(args)) {\n            const param = params.find((p) => p.name === argName);\n            if (!param) {\n                throw new UnknownArgumentError(\n                    argName,\n                    params.map((p) => p.name)\n                );\n            }\n        }\n    }\n}\n","import type { BigintString, NumericString } from './types.js';\nimport { toUnits } from './utils.js';\n\nconst NEAR_NOMINATION_EXP = 24;\n\nexport function nearToYocto(near: number | NumericString): bigint {\n    return toUnits(near, NEAR_NOMINATION_EXP);\n}\n\nexport function yoctoToNear(yocto: bigint | BigintString, decimals: number = NEAR_NOMINATION_EXP): NumericString {\n    decimals = Math.floor(decimals);\n\n    if (decimals < 0 || decimals > NEAR_NOMINATION_EXP) {\n        throw new Error(`Decimal places argument must be between 0 and ${NEAR_NOMINATION_EXP}`);\n    }\n\n    // check if bigint is constructible\n    yocto = `${BigInt(yocto)}`;\n    const wholeStr = yocto.substring(0, yocto.length - NEAR_NOMINATION_EXP) || '0';\n    const fractionStr = yocto\n        .substring(yocto.length - NEAR_NOMINATION_EXP)\n        .padStart(NEAR_NOMINATION_EXP, '0')\n        .substring(0, decimals);\n\n    return trimTrailingZeroes(`${wholeStr}.${fractionStr}`) as unknown as NumericString;\n}\n\nfunction trimTrailingZeroes(value: string): string {\n    return value.replace(/\\.?0*$/, '');\n}\n"],"mappings":"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","names":["Enum","KeyType","import_ed25519","import_ml_dsa","import_secp256k1","import_rpc_errors","Enum","IdType","ExecutionStatusBasic","FinalExecutionStatusBasic","import_rpc_errors","Enum","stake","stake","signedDelegate","actions","actions","createAccount","deleteAccount","deleteKey","deployContract","functionCall","stake","transfer","deployGlobalContract","useGlobalContract","actions","publicKey","resolveEnumKeyName","Enum","retryConfig","import_rpc_errors","import_sha2","import_borsh","signedDelegate","cleanupAmount","trimLeadingZeroes","trimTrailingZeroes","cleanupAmount","trimLeadingZeroes","addFullAccessKey","addFunctionCallAccessKey","createAccount","deleteAccount","deleteKey","deployContract","deployGlobalContract","functionCall","transfer","useGlobalContract","DEFAULT_FINALITY","actions","signedDelegate","validator","NEAR_NOMINATION_EXP","trimTrailingZeroes"]}