everything-dev
Version:
A consolidated product package for building Module Federation apps with oRPC APIs.
85 lines (83 loc) • 2.87 kB
JavaScript
const require_auth_session = require('./auth-session.cjs');
const require_auth_login = require('./auth-login.cjs');
const require_near_cli = require('./near-cli.cjs');
let near_kit = require("near-kit");
//#region src/delegate-signer.ts
function relayErrorMessage(message) {
return message.replace(/\n/g, " ");
}
async function submitRegistryWriteDelegated(opts) {
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 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 (!(0, near_kit.isPrivateKey)(key)) throw new Error("Invalid delegate key format (expected ed25519:…)");
return key;
}
async function ensureDelegateKey(opts) {
const existing = require_auth_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_auth_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_auth_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_auth_session.updateSessionHandle(opts.configDir, (current) => ({
...current,
delegateKey: record
}));
return record;
}
//#endregion
exports.ensureDelegateKey = ensureDelegateKey;
exports.submitRegistryWriteDelegated = submitRegistryWriteDelegated;
//# sourceMappingURL=delegate-signer.cjs.map