everything-dev
Version:
A consolidated product package for building Module Federation apps with oRPC APIs.
1 lines • 5.92 kB
Source Map (JSON)
{"version":3,"file":"near-signer.cjs","names":["isPrivateKey","NearTransactionError","FileKeyStore","isNearCliInstalled","Near","executeKeychainTransaction"],"sources":["../src/near-signer.ts"],"sourcesContent":["import { isPrivateKey, Near, type PrivateKey } from \"near-kit\";\nimport { FileKeyStore } from \"near-kit/keys/file\";\n\nimport type { NetworkId } from \"./fastkv\";\nimport { executeKeychainTransaction, isNearCliInstalled, NearTransactionError } from \"./near-cli\";\n\nexport type SigningKeySource = \"provided\" | \"credentials-file\";\n\nexport interface ResolvedSigningKey {\n source: SigningKeySource;\n privateKey: string;\n}\n\nexport interface RegistryWriteRequest {\n account: string;\n contract: string;\n method: string;\n args: Record<string, string>;\n network: NetworkId;\n privateKey?: string;\n}\n\nexport type SigningStrategy =\n | { strategy: \"near-kit\"; privateKey: string; source: SigningKeySource }\n | { strategy: \"near-cli-keychain\" };\n\nexport interface NearTransactionResult {\n success: true;\n txHash?: string;\n signedWith: \"env\" | \"credentials-file\" | \"near-cli-keychain\";\n}\n\nfunction assertPrivateKey(key: string): PrivateKey {\n if (!isPrivateKey(key)) {\n throw new NearTransactionError(\n `Invalid private key format: must start with \"ed25519:\" or \"secp256k1:\" (got a ${key.length}-character value).`,\n );\n }\n return key as PrivateKey;\n}\n\nexport async function resolveSigningKey(opts: {\n privateKey?: string;\n account: string;\n network: NetworkId;\n}): Promise<ResolvedSigningKey> {\n const explicitKey =\n opts.privateKey || process.env.NEAR_PRIVATE_KEY || process.env.BOS_NEAR_PRIVATE_KEY;\n if (explicitKey) {\n return { source: \"provided\", privateKey: explicitKey };\n }\n\n const keyStore = new FileKeyStore(\"~/.near-credentials\", opts.network);\n const keyPair = await keyStore.get(opts.account);\n if (keyPair?.secretKey) {\n return { source: \"credentials-file\", privateKey: keyPair.secretKey };\n }\n\n throw new NearTransactionError(\"No signing key available\");\n}\n\nexport async function resolveSigningStrategy(opts: {\n privateKey?: string;\n account: string;\n network: NetworkId;\n}): Promise<SigningStrategy> {\n try {\n const resolved = await resolveSigningKey(opts);\n return { strategy: \"near-kit\", privateKey: resolved.privateKey, source: resolved.source };\n } catch {\n // fall through to the near-cli-rs keychain\n }\n\n if (process.stdin.isTTY && (await isNearCliInstalled())) {\n return { strategy: \"near-cli-keychain\" };\n }\n\n throw new NearTransactionError(\n `No signing key available for ${opts.account} on ${opts.network}. ` +\n `Set NEAR_PRIVATE_KEY (or BOS_NEAR_PRIVATE_KEY), store credentials at ` +\n `~/.near-credentials/${opts.network}/${opts.account}.json, or sign with the ` +\n `near-cli-rs keychain (install it, then retry from an interactive terminal). ` +\n `Generate a publish key with: bos key generate`,\n );\n}\n\nexport function describeSigningStrategy(strategy: SigningStrategy): string {\n if (strategy.strategy === \"near-cli-keychain\") {\n return \"near-cli-rs keychain\";\n }\n return strategy.source === \"provided\"\n ? \"the environment or --private-key flag\"\n : `~/.near-credentials`;\n}\n\nasync function submitWithNearKit(\n tx: RegistryWriteRequest,\n privateKey: string,\n): Promise<NearTransactionResult> {\n const near = new Near({\n network: tx.network,\n defaultSignerId: tx.account,\n privateKey: assertPrivateKey(privateKey),\n });\n\n const outcome = await near\n .transaction(tx.account)\n .functionCall(tx.contract, tx.method, tx.args, {\n gas: \"300 Tgas\",\n attachedDeposit: \"0 yocto\",\n })\n .send({ waitUntil: \"NONE\" });\n\n return { success: true, txHash: outcome?.transaction?.hash, signedWith: \"env\" };\n}\n\nexport async function submitRegistryWrite(\n tx: RegistryWriteRequest,\n strategy?: SigningStrategy,\n): Promise<NearTransactionResult> {\n const resolved = strategy ?? (await resolveSigningStrategy(tx));\n\n if (resolved.strategy === \"near-cli-keychain\") {\n const result = await executeKeychainTransaction({\n account: tx.account,\n contract: tx.contract,\n method: tx.method,\n args: tx.args,\n network: tx.network,\n });\n return { ...result, signedWith: \"near-cli-keychain\" };\n }\n\n return submitWithNearKit(tx, resolved.privateKey);\n}\n"],"mappings":";;;;;AAgCA,SAAS,iBAAiB,KAAyB;CACjD,IAAI,KAACA,uBAAa,GAAG,GACnB,MAAM,IAAIC,sCACR,iFAAiF,IAAI,OAAO,mBAC9F;CAEF,OAAO;AACT;AAEA,eAAsB,kBAAkB,MAIR;CAC9B,MAAM,cACJ,KAAK,cAAc,QAAQ,IAAI,oBAAoB,QAAQ,IAAI;CACjE,IAAI,aACF,OAAO;EAAE,QAAQ;EAAY,YAAY;CAAY;CAIvD,MAAM,UAAU,MAAM,IADDC,gCAAa,uBAAuB,KAAK,OACjC,CAAC,CAAC,IAAI,KAAK,OAAO;CAC/C,IAAI,SAAS,WACX,OAAO;EAAE,QAAQ;EAAoB,YAAY,QAAQ;CAAU;CAGrE,MAAM,IAAID,sCAAqB,0BAA0B;AAC3D;AAEA,eAAsB,uBAAuB,MAIhB;CAC3B,IAAI;EACF,MAAM,WAAW,MAAM,kBAAkB,IAAI;EAC7C,OAAO;GAAE,UAAU;GAAY,YAAY,SAAS;GAAY,QAAQ,SAAS;EAAO;CAC1F,QAAQ,CAER;CAEA,IAAI,QAAQ,MAAM,SAAU,MAAME,oCAAmB,GACnD,OAAO,EAAE,UAAU,oBAAoB;CAGzC,MAAM,IAAIF,sCACR,gCAAgC,KAAK,QAAQ,MAAM,KAAK,QAAQ,6FAEvC,KAAK,QAAQ,GAAG,KAAK,QAAQ,kJAGxD;AACF;AAEA,SAAgB,wBAAwB,UAAmC;CACzE,IAAI,SAAS,aAAa,qBACxB,OAAO;CAET,OAAO,SAAS,WAAW,aACvB,0CACA;AACN;AAEA,eAAe,kBACb,IACA,YACgC;CAehC,OAAO;EAAE,SAAS;EAAM,SAAQ,MARV,IANLG,cAAK;GACpB,SAAS,GAAG;GACZ,iBAAiB,GAAG;GACpB,YAAY,iBAAiB,UAAU;EACzC,CAEyB,CAAC,CACvB,YAAY,GAAG,OAAO,CAAC,CACvB,aAAa,GAAG,UAAU,GAAG,QAAQ,GAAG,MAAM;GAC7C,KAAK;GACL,iBAAiB;EACnB,CAAC,CAAC,CACD,KAAK,EAAE,WAAW,OAAO,CAAC,EAEU,EAAE,aAAa;EAAM,YAAY;CAAM;AAChF;AAEA,eAAsB,oBACpB,IACA,UACgC;CAChC,MAAM,WAAW,YAAa,MAAM,uBAAuB,EAAE;CAE7D,IAAI,SAAS,aAAa,qBAQxB,OAAO;EAAE,GAAG,MAPSC,4CAA2B;GAC9C,SAAS,GAAG;GACZ,UAAU,GAAG;GACb,QAAQ,GAAG;GACX,MAAM,GAAG;GACT,SAAS,GAAG;EACd,CAAC;EACmB,YAAY;CAAoB;CAGtD,OAAO,kBAAkB,IAAI,SAAS,UAAU;AAClD"}