UNPKG

everything-dev

Version:

A consolidated product package for building Module Federation apps with oRPC APIs.

84 lines (82 loc) • 2.74 kB
import { readSessionHandle, updateSessionHandle } from "./auth-session.mjs"; import { openInBrowser, startDeviceLogin } from "./auth-login.mjs"; import { generateNearKeyPair } from "./near-cli.mjs"; import { Near, isPrivateKey } from "near-kit"; //#region src/delegate-signer.ts function relayErrorMessage(message) { return message.replace(/\n/g, " "); } async function submitRegistryWriteDelegated(opts) { const delegate = await new Near({ network: opts.network, defaultSignerId: opts.account, privateKey: assertPrivateKey(opts.delegatePrivateKey) }).transaction(opts.account).functionCall(opts.contract, "__fastdata_kv", opts.args, { gas: "300 Tgas", attachedDeposit: "0 yocto" }).delegate({ receiverId: opts.contract, blockHeightOffset: 200 }); const response = await fetch(opts.relayEndpoint, { method: "POST", headers: { "x-api-key": opts.apiKey, "content-type": "application/json" }, body: JSON.stringify({ payload: delegate.payload }) }); if (!response.ok) { let detail = `Relay rejected the transaction (HTTP ${response.status})`; try { const body = await response.json(); const relayMessage = body.message ?? body.error; if (relayMessage) detail = `${detail}: ${relayErrorMessage(relayMessage)}`; } catch {} throw new Error(detail); } return { success: true, txHash: (await response.json()).txHash }; } function assertPrivateKey(key) { if (!isPrivateKey(key)) throw new Error("Invalid delegate key format (expected ed25519:…)"); return key; } async function ensureDelegateKey(opts) { const existing = readSessionHandle(opts.configDir)?.delegateKey; if (existing && existing.accountId === opts.account && existing.contract === opts.contract && existing.network === opts.network) return existing; const keyPair = generateNearKeyPair(); const login = await startDeviceLogin({ siteUrl: opts.siteUrl, delegate: { pubKey: keyPair.publicKey, contract: opts.contract, network: opts.network }, account: opts.account }); console.log(` One-time code: ${login.userCode}`); await openInBrowser(login.verificationUrl).catch((error) => { console.log(` ⚠ ${error.message}`); }); console.log(` Waiting for delegate-key approval at ${login.verificationUrl}…`); await login.waitForApproval(); const record = { publicKey: keyPair.publicKey, privateKey: keyPair.privateKey, accountId: opts.account, network: opts.network, contract: opts.contract, mintedAt: (/* @__PURE__ */ new Date()).toISOString() }; updateSessionHandle(opts.configDir, (current) => ({ ...current, delegateKey: record })); return record; } //#endregion export { ensureDelegateKey, submitRegistryWriteDelegated }; //# sourceMappingURL=delegate-signer.mjs.map