UNPKG

everything-dev

Version:

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

77 lines (75 loc) • 3 kB
const require_site_client = require('./site-client.cjs'); const require_device_login = require('./device-login.cjs'); const require_near_cli = require('./near-cli.cjs'); const require_session = require('./session.cjs'); let near_kit = require("near-kit"); //#region src/services/auth/delegate-signer.ts const realSiteClient = { authPost: require_site_client.authPost }; function relayErrorMessage(message) { return message.replace(/\n/g, " "); } async function submitRegistryWriteDelegated(opts, siteClient = realSiteClient) { const delegate = await new near_kit.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 { status, json } = await siteClient.authPost(opts.relayEndpoint.replace(/\/api\/auth\/near\/relay$/, ""), "/near/relay", { payload: delegate.payload }, void 0, { "x-api-key": opts.apiKey }); if (status >= 400) { let detail = `Relay rejected the transaction (HTTP ${status})`; const relayMessage = typeof json.message === "string" ? json.message : typeof json.error === "string" ? json.error : void 0; if (relayMessage) detail = `${detail}: ${relayErrorMessage(relayMessage)}`; throw new Error(detail); } return { success: true, txHash: json.txHash }; } function assertPrivateKey(key) { if (!(0, near_kit.isPrivateKey)(key)) throw new Error("Invalid delegate key format (expected ed25519:…)"); return key; } async function ensureDelegateKey(opts) { const existing = require_session.readSessionHandle(opts.configDir)?.delegateKey; if (existing && existing.accountId === opts.account && existing.contract === opts.contract && existing.network === opts.network) return existing; const keyPair = require_near_cli.generateNearKeyPair(); const login = await require_device_login.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 require_device_login.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() }; require_session.updateSessionHandle(opts.configDir, (current) => ({ ...current, delegateKey: record })); return record; } //#endregion exports.ensureDelegateKey = ensureDelegateKey; exports.submitRegistryWriteDelegated = submitRegistryWriteDelegated; //# sourceMappingURL=delegate-signer.cjs.map