everything-dev
Version:
A consolidated product package for building Module Federation apps with oRPC APIs.
1 lines • 5.6 kB
Source Map (JSON)
{"version":3,"file":"delegate-signer.cjs","names":["Near","isPrivateKey","readSessionHandle","generateNearKeyPair","startDeviceLogin","openInBrowser"],"sources":["../src/delegate-signer.ts"],"sourcesContent":["import { isPrivateKey, Near, type PrivateKey } from \"near-kit\";\nimport { openInBrowser, startDeviceLogin } from \"./auth-login\";\nimport { type DelegateKeyRecord, readSessionHandle, updateSessionHandle } from \"./auth-session\";\nimport type { NetworkId } from \"./fastkv\";\nimport { generateNearKeyPair } from \"./near-cli\";\n\nexport interface RelayResult {\n success: true;\n txHash?: string;\n}\n\nexport interface DelegateSubmitOptions {\n account: string;\n contract: string;\n network: NetworkId;\n args: Record<string, string>;\n delegatePrivateKey: string;\n relayEndpoint: string;\n apiKey: string;\n gas?: string;\n}\n\nfunction relayErrorMessage(message: string): string {\n return message.replace(/\\n/g, \" \");\n}\n\nexport async function submitRegistryWriteDelegated(\n opts: DelegateSubmitOptions,\n): Promise<RelayResult> {\n const near = new Near({\n network: opts.network,\n defaultSignerId: opts.account,\n privateKey: assertPrivateKey(opts.delegatePrivateKey),\n });\n\n const delegate = await near\n .transaction(opts.account)\n .functionCall(opts.contract, \"__fastdata_kv\", opts.args, {\n gas: \"300 Tgas\",\n attachedDeposit: \"0 yocto\",\n })\n .delegate({ receiverId: opts.contract, blockHeightOffset: 200 });\n\n const response = await fetch(opts.relayEndpoint, {\n method: \"POST\",\n headers: {\n \"x-api-key\": opts.apiKey,\n \"content-type\": \"application/json\",\n },\n body: JSON.stringify({ payload: delegate.payload }),\n });\n\n if (!response.ok) {\n let detail = `Relay rejected the transaction (HTTP ${response.status})`;\n try {\n const body = (await response.json()) as { message?: string; error?: string };\n const relayMessage = body.message ?? body.error;\n if (relayMessage) {\n detail = `${detail}: ${relayErrorMessage(relayMessage)}`;\n }\n } catch {\n // keep the generic message\n }\n throw new Error(detail);\n }\n\n const body = (await response.json()) as { txHash?: string };\n return { success: true, txHash: body.txHash };\n}\n\nfunction assertPrivateKey(key: string): PrivateKey {\n if (!isPrivateKey(key)) {\n throw new Error(\"Invalid delegate key format (expected ed25519:…)\");\n }\n return key as PrivateKey;\n}\n\nexport interface EnsureDelegateKeyOptions {\n configDir: string;\n account: string;\n contract: string;\n network: NetworkId;\n siteUrl: string;\n}\n\nexport async function ensureDelegateKey(\n opts: EnsureDelegateKeyOptions,\n): Promise<DelegateKeyRecord> {\n const existing = readSessionHandle(opts.configDir)?.delegateKey;\n if (\n existing &&\n existing.accountId === opts.account &&\n existing.contract === opts.contract &&\n existing.network === opts.network\n ) {\n return existing;\n }\n\n const keyPair = generateNearKeyPair();\n\n const login = await startDeviceLogin({\n siteUrl: opts.siteUrl,\n delegate: {\n pubKey: keyPair.publicKey,\n contract: opts.contract,\n network: opts.network,\n },\n account: opts.account,\n });\n\n console.log(` One-time code: ${login.userCode}`);\n await openInBrowser(login.verificationUrl).catch((error: unknown) => {\n console.log(` ⚠ ${(error as Error).message}`);\n });\n console.log(` Waiting for delegate-key approval at ${login.verificationUrl}…`);\n\n await login.waitForApproval();\n\n const record: DelegateKeyRecord = {\n publicKey: keyPair.publicKey,\n privateKey: keyPair.privateKey,\n accountId: opts.account,\n network: opts.network,\n contract: opts.contract,\n mintedAt: new Date().toISOString(),\n };\n updateSessionHandle(opts.configDir, (current) => ({ ...current, delegateKey: record }));\n return record;\n}\n"],"mappings":";;;;;;AAsBA,SAAS,kBAAkB,SAAyB;CAClD,OAAO,QAAQ,QAAQ,OAAO,GAAG;AACnC;AAEA,eAAsB,6BACpB,MACsB;CAOtB,MAAM,WAAW,MAAM,IANNA,cAAK;EACpB,SAAS,KAAK;EACd,iBAAiB,KAAK;EACtB,YAAY,iBAAiB,KAAK,kBAAkB;CACtD,CAE0B,CAAC,CACxB,YAAY,KAAK,OAAO,CAAC,CACzB,aAAa,KAAK,UAAU,iBAAiB,KAAK,MAAM;EACvD,KAAK;EACL,iBAAiB;CACnB,CAAC,CAAC,CACD,SAAS;EAAE,YAAY,KAAK;EAAU,mBAAmB;CAAI,CAAC;CAEjE,MAAM,WAAW,MAAM,MAAM,KAAK,eAAe;EAC/C,QAAQ;EACR,SAAS;GACP,aAAa,KAAK;GAClB,gBAAgB;EAClB;EACA,MAAM,KAAK,UAAU,EAAE,SAAS,SAAS,QAAQ,CAAC;CACpD,CAAC;CAED,IAAI,CAAC,SAAS,IAAI;EAChB,IAAI,SAAS,wCAAwC,SAAS,OAAO;EACrE,IAAI;GACF,MAAM,OAAQ,MAAM,SAAS,KAAK;GAClC,MAAM,eAAe,KAAK,WAAW,KAAK;GAC1C,IAAI,cACF,SAAS,GAAG,OAAO,IAAI,kBAAkB,YAAY;EAEzD,QAAQ,CAER;EACA,MAAM,IAAI,MAAM,MAAM;CACxB;CAGA,OAAO;EAAE,SAAS;EAAM,SAAQ,MADZ,SAAS,KAAK,EACE,CAAC;CAAO;AAC9C;AAEA,SAAS,iBAAiB,KAAyB;CACjD,IAAI,KAACC,uBAAa,GAAG,GACnB,MAAM,IAAI,MAAM,kDAAkD;CAEpE,OAAO;AACT;AAUA,eAAsB,kBACpB,MAC4B;CAC5B,MAAM,WAAWC,uCAAkB,KAAK,SAAS,CAAC,EAAE;CACpD,IACE,YACA,SAAS,cAAc,KAAK,WAC5B,SAAS,aAAa,KAAK,YAC3B,SAAS,YAAY,KAAK,SAE1B,OAAO;CAGT,MAAM,UAAUC,qCAAoB;CAEpC,MAAM,QAAQ,MAAMC,oCAAiB;EACnC,SAAS,KAAK;EACd,UAAU;GACR,QAAQ,QAAQ;GAChB,UAAU,KAAK;GACf,SAAS,KAAK;EAChB;EACA,SAAS,KAAK;CAChB,CAAC;CAED,QAAQ,IAAI,oBAAoB,MAAM,UAAU;CAChD,MAAMC,iCAAc,MAAM,eAAe,CAAC,CAAC,OAAO,UAAmB;EACnE,QAAQ,IAAI,OAAQ,MAAgB,SAAS;CAC/C,CAAC;CACD,QAAQ,IAAI,0CAA0C,MAAM,gBAAgB,EAAE;CAE9E,MAAM,MAAM,gBAAgB;CAE5B,MAAM,SAA4B;EAChC,WAAW,QAAQ;EACnB,YAAY,QAAQ;EACpB,WAAW,KAAK;EAChB,SAAS,KAAK;EACd,UAAU,KAAK;EACf,2BAAU,IAAI,KAAK,EAAC,CAAC,YAAY;CACnC;CACA,yCAAoB,KAAK,YAAY,aAAa;EAAE,GAAG;EAAS,aAAa;CAAO,EAAE;CACtF,OAAO;AACT"}