UNPKG

@shogun-sdk/accounts

Version:

Shogun with Turnkey: configs, encryption, authentication with Telegram/Turnkey OIDC, etc.

83 lines 3.21 kB
export const makeExternalRequest = async (apiDomain, endpoint, data) => { const response = await fetch(`${apiDomain}${endpoint}`, { method: 'POST', headers: { 'Content-Type': 'application/json', }, body: JSON.stringify(data), }); if (!response.ok) { throw new Error(`External request failed: ${response.statusText}`); } return response.json(); }; export const makeExternalGetRequest = async (apiDomain, endpoint, params) => { const url = new URL(`${apiDomain}${endpoint}`); if (params) { Object.entries(params).forEach(([key, value]) => { url.searchParams.append(key, value); }); } const response = await fetch(url.toString(), { method: 'GET', headers: { 'Content-Type': 'application/json', }, }); if (!response.ok) { throw new Error(`External request failed: ${response.statusText}`); } return response.json(); }; const safeSerialize = (data) => { return JSON.parse(JSON.stringify(data, (_key, value) => (typeof value === 'bigint' ? value.toString() : value))); }; export const createExternalSigner = (apiDomain, externalSubOrgId, chainId, signWith) => { return { account: signWith, writeContract: (data) => { // Attempt to safely serialize BigInt values to string const safeData = safeSerialize(data); return makeExternalRequest(apiDomain, '/api/turnkey/external-transaction', { orgId: externalSubOrgId, transactionData: safeData, type: 'writeContract', address: signWith || data.account, chainId, }); }, sendTransaction: (data) => { // Attempt to safely serialize BigInt values to string const safeData = safeSerialize(data); return makeExternalRequest(apiDomain, '/api/turnkey/external-transaction', { orgId: externalSubOrgId, transactionData: safeData, type: 'sendTransaction', address: signWith || data.account, chainId, }); }, signAllTransactions: (transactions, address) => { return makeExternalRequest(apiDomain, '/api/turnkey/external-transaction', { orgId: externalSubOrgId, transactions: transactions, address: address, type: 'signAllTransactions', chainId, }); }, addSignature: (transaction, address) => { const serializedTransaction = transaction.serialize(); // Convert the serialized Uint8Array to a base64 string const base64Transaction = Buffer.from(serializedTransaction).toString('base64'); return makeExternalRequest(apiDomain, '/api/turnkey/external-transaction', { orgId: externalSubOrgId, transactionData: base64Transaction, address: address, type: 'addSignature', chainId, }); }, }; }; //# sourceMappingURL=requests.js.map