everything-dev
Version:
A consolidated product package for building Module Federation apps with oRPC APIs.
77 lines (75 loc) • 3 kB
JavaScript
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