@bounded-sh/server 0.0.1 → 0.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +3 -4
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +3 -4
- package/dist/index.mjs.map +1 -1
- package/package.json +64 -64
package/dist/index.js
CHANGED
|
@@ -33,10 +33,9 @@ var crypto__namespace = /*#__PURE__*/_interopNamespaceDefault(crypto);
|
|
|
33
33
|
*
|
|
34
34
|
* Most code should pass a keypair explicitly — `createWalletClient({ keypair })`
|
|
35
35
|
* does. The env var is the fallback for the global `set/get` path. `BOUNDED_*`
|
|
36
|
-
* is the canonical name (it matches the CLI's `BOUNDED_PRIVATE_KEY`)
|
|
37
|
-
* `TAROBASE_SOLANA_KEYPAIR` is still honored so existing setups keep working.
|
|
36
|
+
* is the canonical name (it matches the CLI's `BOUNDED_PRIVATE_KEY`).
|
|
38
37
|
* ------------------------------------------------------------- */
|
|
39
|
-
const ENV_VARS = ['BOUNDED_PRIVATE_KEY'
|
|
38
|
+
const ENV_VARS = ['BOUNDED_PRIVATE_KEY']; // base-58 or JSON array
|
|
40
39
|
function loadKeypairFromEnv() {
|
|
41
40
|
var _a;
|
|
42
41
|
let secret;
|
|
@@ -697,7 +696,7 @@ async function createWalletClient(opts) {
|
|
|
697
696
|
// ---------------------------------------------------------------------------
|
|
698
697
|
// webhooks.ts -- Verify signed inbound mutation webhooks.
|
|
699
698
|
//
|
|
700
|
-
// The
|
|
699
|
+
// The Bounded realtime worker fires outbound webhooks for declared
|
|
701
700
|
// collections after a mutation commits, signed with a platform Ed25519 private
|
|
702
701
|
// key. This module verifies those signatures on the receiving server.
|
|
703
702
|
//
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../.rollup-tmp/auth/providers/solana-keypair-provider.js","../.rollup-tmp/auth/providers/offchain-auth-provider.js","../.rollup-tmp/auth/index.js","../.rollup-tmp/global.js","../.rollup-tmp/utils.js","../.rollup-tmp/wallet-client.js","../.rollup-tmp/webhooks.js"],"sourcesContent":["import { Buffer } from 'buffer';\nimport { ComputeBudgetProgram, Connection, Keypair, VersionedTransaction } from '@solana/web3.js';\nimport * as anchor from '@coral-xyz/anchor';\nimport nacl from 'tweetnacl';\nimport bs58 from 'bs58';\nimport { convertRemainingAccounts, buildSetDocumentsTransaction, } from '@bounded-sh/core';\nimport { SOLANA_DEVNET_RPC_URL, SOLANA_MAINNET_RPC_URL, SURFNET_RPC_URL } from '..';\n/* ------------------------------------------------------------- *\n * KEYPAIR ENV-VAR (only consulted when no explicit keypair is given)\n *\n * Most code should pass a keypair explicitly — `createWalletClient({ keypair })`\n * does. The env var is the fallback for the global `set/get` path. `BOUNDED_*`\n * is the canonical name (it matches the CLI's `BOUNDED_PRIVATE_KEY`); the legacy\n * `TAROBASE_SOLANA_KEYPAIR` is still honored so existing setups keep working.\n * ------------------------------------------------------------- */\nconst ENV_VARS = ['BOUNDED_PRIVATE_KEY', 'TAROBASE_SOLANA_KEYPAIR']; // base-58 or JSON array\nfunction loadKeypairFromEnv() {\n var _a;\n let secret;\n let found;\n for (const name of ENV_VARS) {\n const v = (_a = process === null || process === void 0 ? void 0 : process.env) === null || _a === void 0 ? void 0 : _a[name];\n if (v) {\n secret = v;\n found = name;\n break;\n }\n }\n if (!secret) {\n throw new Error(`No server keypair: set ${ENV_VARS[0]} to a base58 secret key (or JSON array), ` +\n `or pass one explicitly via createWalletClient({ keypair }).`);\n }\n try {\n const secretKey = secret.trim().startsWith('[')\n ? Uint8Array.from(JSON.parse(secret))\n : bs58.decode(secret.trim());\n return Keypair.fromSecretKey(secretKey);\n }\n catch (err) {\n throw new Error(`Unable to parse ${found}. Ensure it is valid base58 or a JSON array.`);\n }\n}\n/* ──────────────────────────────────────────────────────────\n * Helper – fetch getPriorityFeeEstimate\n * ──────────────────────────────────────────────────────── */\nasync function fetchPriorityFee(rpcEndpoint, rawUnsignedTxBuffer) {\n var _a, _b;\n try {\n const res = await fetch(rpcEndpoint, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({\n jsonrpc: \"2.0\",\n id: \"1\",\n method: \"getPriorityFeeEstimate\",\n params: [{\n transaction: bs58.encode(rawUnsignedTxBuffer), options: {\n recommended: true\n }\n }]\n })\n });\n const data = await res.json();\n const fee = (_b = (_a = data === null || data === void 0 ? void 0 : data.result) === null || _a === void 0 ? void 0 : _a.priorityFeeEstimate) !== null && _b !== void 0 ? _b : null;\n console.log(\"Got fee from Helius\", fee);\n if (fee != null && fee > 0) {\n return Math.ceil(Number(fee) * 1.2);\n }\n else {\n console.log(\"No fee from Helius, using default 10000\");\n return Math.ceil(10000 * 1.2);\n }\n }\n catch (err) {\n console.warn(\"Priority‑fee estimate failed:\", err);\n return Math.ceil(10000 * 1.2);\n }\n}\nexport class SolanaKeypairProvider {\n constructor(networkUrl = null, keypair) {\n this.networkUrl = networkUrl;\n this.explicitKeypair = keypair;\n }\n get keypair() {\n var _a, _b;\n return ((_a = this.cachedKeypair) !== null && _a !== void 0 ? _a : (this.cachedKeypair = (_b = this.explicitKeypair) !== null && _b !== void 0 ? _b : loadKeypairFromEnv()));\n }\n /* ----------------------------------------------------------- *\n * (Auth stubs – fill in later if needed)\n * ----------------------------------------------------------- */\n async login() { throw new Error('Not implemented'); }\n async restoreSession() { throw new Error('Not implemented'); }\n async logout() { throw new Error('Not implemented'); }\n /* ----------------------------------------------------------- *\n * Sign arbitrary message\n * ----------------------------------------------------------- */\n async signMessage(message) {\n const sig = nacl.sign.detached(new TextEncoder().encode(message), this.keypair.secretKey);\n return Buffer.from(sig).toString('base64');\n }\n /* ----------------------------------------------------------- *\n * Sign transaction\n * ----------------------------------------------------------- */\n async signTransaction(transaction) {\n // Use duck typing instead of instanceof to handle multiple @solana/web3.js versions\n const isLegacyTransaction = 'recentBlockhash' in transaction && !('message' in transaction && 'staticAccountKeys' in transaction.message);\n if (isLegacyTransaction) {\n transaction.partialSign(this.keypair);\n }\n else {\n transaction.sign([this.keypair]);\n }\n return transaction;\n }\n /**\n * Signs and submits a Solana transaction to the network.\n *\n * This method handles blockhash and transaction confirmation automatically - you do NOT need to\n * set recentBlockhash or lastValidBlockHeight on the transaction before calling this method.\n * The network/RPC URL is derived from the provider's configuration (set during initialization).\n *\n * @param transaction - The transaction to sign and submit (Transaction or VersionedTransaction)\n * @param feePayer - Optional fee payer public key. If not provided and the transaction doesn't\n * already have a feePayer set, the keypair's public key will be used.\n * Useful for co-signing scenarios where a different account pays the fees.\n * @returns The transaction signature\n */\n async signAndSubmitTransaction(transaction, feePayer) {\n // 1. Get RPC URL and create connection\n const rpcUrl = this.getRpcUrl();\n const connection = new Connection(rpcUrl, 'confirmed');\n // 2. Get fresh blockhash and set it on the transaction before signing\n const { blockhash, lastValidBlockHeight } = await connection.getLatestBlockhash('confirmed');\n // Use duck typing instead of instanceof to handle multiple @solana/web3.js versions\n const isLegacyTransaction = 'recentBlockhash' in transaction && !('message' in transaction && 'staticAccountKeys' in transaction.message);\n if (isLegacyTransaction) {\n const legacyTx = transaction;\n legacyTx.recentBlockhash = blockhash;\n legacyTx.lastValidBlockHeight = lastValidBlockHeight;\n // Set feePayer if not already set\n if (!legacyTx.feePayer) {\n legacyTx.feePayer = feePayer !== null && feePayer !== void 0 ? feePayer : this.keypair.publicKey;\n }\n }\n else {\n // VersionedTransaction\n const versionedTx = transaction;\n versionedTx.message.recentBlockhash = blockhash;\n // Note: VersionedTransaction feePayer is set in the message at creation time\n // and cannot be modified after creation\n }\n // 3. Sign the transaction\n const signedTx = await this.signTransaction(transaction);\n // 4. Submit and confirm using shared helper\n const { signature } = await this.submitAndConfirmTransaction(signedTx, connection);\n return signature;\n }\n /* ----------------------------------------------------------- *\n * Private Helpers\n * ----------------------------------------------------------- */\n /**\n * Submits a signed transaction and waits for confirmation using polling.\n * Shared by both signAndSubmitTransaction and runTransactionInner.\n */\n async submitAndConfirmTransaction(signedTx, connection, options) {\n var _a, _b, _c, _d;\n const sig = await connection.sendRawTransaction(signedTx.serialize(), {\n preflightCommitment: 'confirmed'\n });\n // Wait for confirmation using polling\n const startTime = Date.now();\n const timeoutMs = 10 * 1000; // 10 seconds\n while (true) {\n const st = await connection.getSignatureStatus(sig);\n if ((_a = st === null || st === void 0 ? void 0 : st.value) === null || _a === void 0 ? void 0 : _a.err) {\n // Transaction confirmed but failed on-chain — fetch logs for a readable error\n const txInfo = await connection.getTransaction(sig, {\n maxSupportedTransactionVersion: 0,\n commitment: 'confirmed'\n });\n const logMessages = (_b = txInfo === null || txInfo === void 0 ? void 0 : txInfo.meta) === null || _b === void 0 ? void 0 : _b.logMessages;\n const errorMessage = logMessages ? JSON.stringify(logMessages) : JSON.stringify((_c = st === null || st === void 0 ? void 0 : st.value) === null || _c === void 0 ? void 0 : _c.err);\n throw new Error(`Transaction failed: ${errorMessage}`);\n }\n if (((_d = st === null || st === void 0 ? void 0 : st.value) === null || _d === void 0 ? void 0 : _d.confirmationStatus) === 'confirmed') {\n break;\n }\n // Check if we've exceeded the timeout\n if (Date.now() - startTime > timeoutMs) {\n throw new Error(`Transaction confirmation timeout after ${timeoutMs / 1000} seconds`);\n }\n await new Promise(resolve => setTimeout(resolve, 500));\n }\n // Optionally fetch transaction info\n let txInfo = null;\n if (options === null || options === void 0 ? void 0 : options.fetchTxInfo) {\n txInfo = await connection.getTransaction(sig, {\n maxSupportedTransactionVersion: 0,\n commitment: 'confirmed'\n });\n }\n return { signature: sig, txInfo };\n }\n getRpcUrl(network) {\n if (this.networkUrl) {\n return this.networkUrl;\n }\n if (network === 'solana_devnet') {\n return SOLANA_DEVNET_RPC_URL;\n }\n else if (network === 'solana_mainnet') {\n return SOLANA_MAINNET_RPC_URL;\n }\n else if (network === 'surfnet') {\n return SURFNET_RPC_URL;\n }\n return SOLANA_MAINNET_RPC_URL; // default to mainnet\n }\n /* ----------------------------------------------------------- *\n * Transaction runner\n * ----------------------------------------------------------- */\n async runTransaction(_evm, sol, opts) {\n if (!sol)\n throw new Error('Solana transaction data required');\n const kp = this.keypair;\n // Helper for duck typing - checks if transaction is legacy Transaction vs VersionedTransaction\n const isLegacyTx = (tx) => {\n return 'recentBlockhash' in tx && !('message' in tx && 'staticAccountKeys' in tx.message);\n };\n const wallet = {\n publicKey: kp.publicKey,\n signTransaction: async (tx) => {\n // Use duck typing instead of instanceof to handle multiple @solana/web3.js versions\n if (isLegacyTx(tx)) {\n tx.partialSign(kp);\n }\n else {\n tx.sign([kp]);\n }\n return tx;\n },\n signAllTransactions: async (txs) => txs.map((t) => {\n // Use duck typing instead of instanceof to handle multiple @solana/web3.js versions\n if (isLegacyTx(t)) {\n t.partialSign(kp);\n }\n else {\n t.sign([kp]);\n }\n return t;\n }),\n };\n /* de-dupe remaining accounts */\n const deduped = (() => {\n const fin = [];\n for (const acc of convertRemainingAccounts(sol.txArgs[0].remainingAccounts)) {\n const ex = fin.find((x) => x.pubkey.equals(acc.pubkey));\n if (ex) {\n ex.isSigner || (ex.isSigner = acc.isSigner);\n ex.isWritable || (ex.isWritable = acc.isWritable);\n }\n else\n fin.push(acc);\n }\n return fin;\n })();\n let retries = 0;\n let didPass = false;\n let delay = 1000;\n let toReturn = null;\n let errorMessage = \"\";\n while (retries < 5) {\n try {\n toReturn = await this.runTransactionInner(sol, opts, wallet, kp, deduped);\n didPass = true;\n break;\n }\n catch (error) {\n console.log(\"Error building and sending transaction on retry:\", retries, error);\n await new Promise(resolve => setTimeout(resolve, delay));\n // Exponential backoff\n delay *= 1.5;\n retries++;\n errorMessage = error.message || JSON.stringify(error, null, 2);\n }\n }\n if (!didPass) {\n throw new Error(`Failed to send transaction after 5 retries: ${errorMessage}`);\n }\n return toReturn;\n }\n async runTransactionInner(sol, opts, wallet, kp, deduped) {\n var _a, _b, _c;\n let rpcUrl = this.getRpcUrl(sol.network);\n const connection = new Connection(rpcUrl, 'confirmed');\n const anchorProvider = new anchor.AnchorProvider(connection, wallet, anchor.AnchorProvider.defaultOptions());\n const app_id = sol.appId;\n if (!app_id)\n throw new Error('app_id missing');\n // When the server has co-signed a transaction (CPI attestation),\n // deserialize it and just add the wallet signature instead of\n // building from components.\n let tx;\n let blockhash;\n let lastValidBlockHeight;\n if (sol.signedTransaction) {\n tx = VersionedTransaction.deserialize(Buffer.from(sol.signedTransaction, 'base64'));\n const latestBlockhash = await connection.getLatestBlockhash('confirmed');\n blockhash = latestBlockhash.blockhash;\n lastValidBlockHeight = latestBlockhash.lastValidBlockHeight;\n }\n else {\n const result = await buildSetDocumentsTransaction(connection, sol.txArgs[0].idl, anchorProvider, kp.publicKey, {\n app_id,\n documents: sol.txArgs[0].setDocumentData,\n delete_paths: sol.txArgs[0].deletePaths,\n txData: sol.txArgs[0].txData\n }, deduped, sol.lutKey, sol.preInstructions, false, sol.additionalLutAddresses);\n tx = result.tx;\n blockhash = result.blockhash;\n lastValidBlockHeight = result.lastValidBlockHeight;\n }\n // Helper for duck typing - checks if transaction is legacy Transaction vs VersionedTransaction\n const isLegacyTx = (t) => {\n return 'recentBlockhash' in t && !('message' in t && 'staticAccountKeys' in t.message);\n };\n // Refresh blockhash and lastValidBlockHeight\n // Use duck typing instead of instanceof to handle multiple @solana/web3.js versions\n if (isLegacyTx(tx)) {\n tx.partialSign(kp);\n tx.recentBlockhash = blockhash;\n tx.lastValidBlockHeight = lastValidBlockHeight;\n tx.feePayer = kp.publicKey;\n }\n else {\n tx.sign([kp]);\n tx.message.recentBlockhash = blockhash;\n }\n // 3️⃣ Optional priority‑fee instruction\n const rawUnsigned = tx.serialize({ requireAllSignatures: false });\n const microLamports = await fetchPriorityFee(connection.rpcEndpoint, rawUnsigned);\n if (microLamports != null) {\n // Use duck typing instead of instanceof to handle multiple @solana/web3.js versions\n if (isLegacyTx(tx)) {\n tx.instructions.unshift(ComputeBudgetProgram.setComputeUnitPrice({ microLamports }));\n tx.partialSign(kp);\n }\n else {\n // For pre-signed (attestation) transactions, we can't rebuild — skip priority fee\n if (!sol.signedTransaction) {\n // Rebuild the transaction with the new priority fee\n const roundTwo = await buildSetDocumentsTransaction(connection, sol.txArgs[0].idl, anchorProvider, kp.publicKey, {\n app_id,\n documents: sol.txArgs[0].setDocumentData,\n delete_paths: sol.txArgs[0].deletePaths,\n txData: sol.txArgs[0].txData\n }, deduped, sol.lutKey, [ComputeBudgetProgram.setComputeUnitPrice({ microLamports }), ...sol.preInstructions], false, sol.additionalLutAddresses);\n tx = roundTwo.tx;\n blockhash = roundTwo.blockhash;\n lastValidBlockHeight = roundTwo.lastValidBlockHeight;\n tx.sign([kp]);\n tx.message.recentBlockhash = blockhash;\n }\n }\n }\n if ((opts === null || opts === void 0 ? void 0 : opts.shouldSubmitTx) === false) {\n return { signedTransaction: tx, blockNumber: 0, gasUsed: '0', data: '' };\n }\n // Submit and confirm using shared helper\n const { signature, txInfo } = await this.submitAndConfirmTransaction(tx, connection, { fetchTxInfo: true });\n return {\n transactionSignature: signature,\n blockNumber: (_a = txInfo === null || txInfo === void 0 ? void 0 : txInfo.slot) !== null && _a !== void 0 ? _a : 0,\n gasUsed: (_c = (_b = txInfo === null || txInfo === void 0 ? void 0 : txInfo.meta) === null || _b === void 0 ? void 0 : _b.fee.toString()) !== null && _c !== void 0 ? _c : '0',\n data: txInfo === null || txInfo === void 0 ? void 0 : txInfo.meta,\n };\n }\n /* ----------------------------------------------------------- */\n async getNativeMethods() {\n return { keypair: this.keypair };\n }\n}\n//# sourceMappingURL=solana-keypair-provider.js.map","import * as crypto from 'crypto';\n/**\n * Server-side OffchainAuthProvider wrapper for the poofnet environment.\n *\n * For signMessage, this generates a mock signature using SHA-256 hashing.\n * This is used for offchain transaction signing.\n */\nexport class OffchainAuthProvider {\n constructor(wrappedProvider) {\n this.wrappedProvider = wrappedProvider;\n }\n async login() {\n return this.wrappedProvider.login();\n }\n async logout() {\n return this.wrappedProvider.logout();\n }\n async restoreSession() {\n return this.wrappedProvider.restoreSession();\n }\n async getNativeMethods() {\n return this.wrappedProvider.getNativeMethods();\n }\n async signMessage(message) {\n // Delegate to wrapped provider for real signing\n return this.wrappedProvider.signMessage(message);\n }\n async signMessageMock(message) {\n // Generate mock signature (SHA-256 hash of message, base64 encoded)\n // This is used for offchain transaction signing\n const hash = crypto.createHash('sha256').update(message).digest('base64');\n return hash;\n }\n async signTransaction(transaction) {\n throw new Error('Poofnet does not support real Solana transactions. Deploy your project to mainnet to use this feature.');\n }\n /**\n * Sign and submit transaction - not supported in poofnet environment.\n * See the real providers (PhantomWalletProvider, PrivyWalletProvider, SolanaKeypairProvider)\n * for the full implementation with blockhash handling and feePayer support.\n */\n async signAndSubmitTransaction(_transaction, _feePayer) {\n throw new Error('Poofnet does not support real Solana transactions. Deploy your project to mainnet to use this feature.');\n }\n async runTransaction(evmTransactionData, solTransactionData, options) {\n return this.wrappedProvider.runTransaction(evmTransactionData, solTransactionData, options);\n }\n}\n//# sourceMappingURL=offchain-auth-provider.js.map","import { getConfig } from '@bounded-sh/core';\nimport { SolanaKeypairProvider } from './providers/solana-keypair-provider';\nimport { OffchainAuthProvider } from './providers/offchain-auth-provider';\nlet currentAuthProvider = null;\nexport const SOLANA_DEVNET_RPC_URL = \"https://idelle-8nxsep-fast-devnet.helius-rpc.com\";\nexport const SOLANA_MAINNET_RPC_URL = \"https://celestia-cegncv-fast-mainnet.helius-rpc.com\";\nexport const SURFNET_RPC_URL = \"https://surfpool.fly.dev\";\nexport async function getAuthProvider() {\n var _a;\n const config = await getConfig();\n if (currentAuthProvider) {\n // If provider exists but chain is \"offchain\" and it's not already wrapped, rewrap it\n if (config.chain === \"offchain\" && !(currentAuthProvider instanceof OffchainAuthProvider)) {\n currentAuthProvider = new OffchainAuthProvider(currentAuthProvider);\n }\n return currentAuthProvider;\n }\n currentAuthProvider = await matchAuthProvider((_a = config.rpcUrl) !== null && _a !== void 0 ? _a : null);\n // Wrap with OffchainAuthProvider for offchain chain\n if (config.chain === \"offchain\") {\n currentAuthProvider = new OffchainAuthProvider(currentAuthProvider);\n }\n return currentAuthProvider;\n}\nexport async function matchAuthProvider(rpcUrl) {\n return new SolanaKeypairProvider(rpcUrl);\n}\n//# sourceMappingURL=index.js.map","import { getAuthProvider } from './auth';\nimport { init as configInit } from '@bounded-sh/core';\nlet authProviderInstance = null;\nconst SOLANA_DEVNET_RPC_URL = \"https://api.devnet.solana.com\";\nconst SOLANA_MAINNET_RPC_URL = \"https://celestia-cegncv-fast-mainnet.helius-rpc.com\";\nconst SURFNET_RPC_URL = \"https://surfpool.fly.dev\";\nexport async function init(newConfig) {\n // Initialize config first so getAuthProvider can access it\n // Server-side skips backend init since it already has all needed config\n await configInit(Object.assign(Object.assign({}, newConfig), { isServer: true, skipBackendInit: true }));\n // Get the auth provider (which will wrap it if chain is \"offchain\")\n authProviderInstance = await getAuthProvider();\n // Update config with the wrapped provider\n await configInit(Object.assign(Object.assign({}, newConfig), { authProvider: authProviderInstance, isServer: true, skipBackendInit: true }));\n}\n//# sourceMappingURL=global.js.map","import { getIdToken as getIdTokenCore } from '@bounded-sh/core';\n// Wrapper for getIdToken - passes isServer=true for server-side usage\nexport async function getIdToken() {\n return getIdTokenCore(true);\n}\n//# sourceMappingURL=utils.js.map","var __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport { Keypair } from '@solana/web3.js';\nimport bs58 from 'bs58';\nimport { getConfig, get as coreGet, getMany as coreGetMany, set as coreSet, setMany as coreSetMany, setFile as coreSetFile, getFiles as coreGetFiles, search as coreSearch, runQuery as coreRunQuery, runQueryMany as coreRunQueryMany, runExpression as coreRunExpression, runExpressionMany as coreRunExpressionMany, count as coreCount, aggregate as coreAggregate, queryAggregate as coreQueryAggregate, subscribe as coreSubscribe, functions as coreFunctions, ServerSessionManager, } from '@bounded-sh/core';\nimport { SolanaKeypairProvider } from './auth/providers/solana-keypair-provider';\nimport { OffchainAuthProvider } from './auth/providers/offchain-auth-provider';\n/* ------------------------------------------------------------------ */\n/* Keypair parsing */\n/* ------------------------------------------------------------------ */\nfunction parseKeypair(secret) {\n const trimmed = secret.trim();\n try {\n const secretKey = trimmed.startsWith('[')\n ? Uint8Array.from(JSON.parse(trimmed))\n : bs58.decode(trimmed);\n return Keypair.fromSecretKey(secretKey);\n }\n catch (_a) {\n throw new Error('Invalid keypair: must be base58 or JSON array.');\n }\n}\n/**\n * Whether a JWT is expired or within 60s of expiry (or unparseable). Used to\n * decide if the wallet should re-sign for a fresh token. Server-only (Node\n * Buffer); a keypair-backed session can always re-sign, so this is safe to be\n * conservative about.\n */\nfunction jwtExpiringSoon(token) {\n if (!token)\n return true;\n try {\n const part = token.split('.')[1];\n const json = Buffer.from(part.replace(/-/g, '+').replace(/_/g, '/'), 'base64').toString('utf8');\n const exp = JSON.parse(json).exp;\n if (!exp)\n return false;\n return Date.now() > exp * 1000 - 60000;\n }\n catch (_a) {\n return true;\n }\n}\n/* ------------------------------------------------------------------ */\n/* WalletClient */\n/* ------------------------------------------------------------------ */\nexport class WalletClient {\n constructor(provider, sessionManager, address) {\n this.provider = provider;\n this.sessionManager = sessionManager;\n this.address = address;\n }\n /* ---- Auth override helpers ---- */\n buildOverrides() {\n return {\n authProvider: this.provider,\n _getAuthHeaders: async () => {\n let s = await this.sessionManager.getSession();\n // Keypair-backed session: if the cached token is expired/near-expiry,\n // re-sign for a fresh one (we always hold the key). Keeps long-lived WS\n // subscriptions authenticated across reconnects, and stops one-shot reads\n // from sending a stale token.\n if (jwtExpiringSoon(s.idToken)) {\n this.sessionManager.clearSession();\n s = await this.sessionManager.getSession();\n }\n return { Authorization: `Bearer ${s.idToken}` };\n },\n _clearAuth: async () => {\n this.sessionManager.clearSession();\n },\n _walletAddress: this.address,\n };\n }\n /** Strip Authorization from caller headers to prevent overriding wallet token */\n sanitizeHeaders(headers) {\n if (!headers)\n return undefined;\n const _a = headers, { Authorization, authorization } = _a, rest = __rest(_a, [\"Authorization\", \"authorization\"]);\n return Object.keys(rest).length > 0 ? rest : undefined;\n }\n mergeSetOverrides(opts) {\n var _a;\n const ovr = this.buildOverrides();\n return Object.assign(Object.assign({}, opts), { _overrides: Object.assign(Object.assign({}, opts === null || opts === void 0 ? void 0 : opts._overrides), { headers: this.sanitizeHeaders((_a = opts === null || opts === void 0 ? void 0 : opts._overrides) === null || _a === void 0 ? void 0 : _a.headers), authProvider: ovr.authProvider, _getAuthHeaders: ovr._getAuthHeaders, _clearAuth: ovr._clearAuth }) });\n }\n mergeReadOverrides(existing) {\n const ovr = this.buildOverrides();\n return Object.assign(Object.assign({}, existing), { headers: this.sanitizeHeaders(existing === null || existing === void 0 ? void 0 : existing.headers), _getAuthHeaders: ovr._getAuthHeaders, _clearAuth: ovr._clearAuth, _walletAddress: ovr._walletAddress });\n }\n /* ---- Data operations ---- */\n async set(path, document, options) {\n return coreSet(path, document, this.mergeSetOverrides(options));\n }\n async setMany(many, options) {\n return coreSetMany(many, this.mergeSetOverrides(options));\n }\n async setFile(path, file, options) {\n return coreSetFile(path, file, { _overrides: this.mergeReadOverrides(options === null || options === void 0 ? void 0 : options._overrides) });\n }\n async get(path, opts) {\n return coreGet(path, Object.assign(Object.assign({}, opts), { _overrides: this.mergeReadOverrides(opts === null || opts === void 0 ? void 0 : opts._overrides) }));\n }\n async getMany(paths, opts) {\n return coreGetMany(paths, Object.assign(Object.assign({}, opts), { _overrides: this.mergeReadOverrides() }));\n }\n async getFiles(path, options) {\n return coreGetFiles(path, { _overrides: this.mergeReadOverrides(options === null || options === void 0 ? void 0 : options._overrides) });\n }\n async search(path, query, opts = {}) {\n return coreSearch(path, query, Object.assign(Object.assign({}, opts), { _overrides: this.mergeReadOverrides(opts === null || opts === void 0 ? void 0 : opts._overrides) }));\n }\n async runQuery(absolutePath, queryName, queryArgs, opts) {\n return coreRunQuery(absolutePath, queryName, queryArgs, Object.assign(Object.assign({}, opts), { _overrides: this.mergeReadOverrides(opts === null || opts === void 0 ? void 0 : opts._overrides) }));\n }\n async runQueryMany(many, opts) {\n return coreRunQueryMany(many, Object.assign(Object.assign({}, opts), { _overrides: this.mergeReadOverrides(opts === null || opts === void 0 ? void 0 : opts._overrides) }));\n }\n async runExpression(expression, queryArgs, options) {\n return coreRunExpression(expression, queryArgs, Object.assign(Object.assign({}, options), { _overrides: this.mergeReadOverrides(options === null || options === void 0 ? void 0 : options._overrides) }));\n }\n async runExpressionMany(many) {\n const ovr = this.mergeReadOverrides();\n return coreRunExpressionMany(many.map(m => (Object.assign(Object.assign({}, m), { _overrides: ovr }))));\n }\n async count(path, opts = {}) {\n return coreCount(path, Object.assign(Object.assign({}, opts), { _overrides: this.mergeReadOverrides(opts === null || opts === void 0 ? void 0 : opts._overrides) }));\n }\n async aggregate(path, operation, opts = {}) {\n return coreAggregate(path, operation, Object.assign(Object.assign({}, opts), { _overrides: this.mergeReadOverrides(opts === null || opts === void 0 ? void 0 : opts._overrides) }));\n }\n async queryAggregate(path, spec, opts = {}) {\n return coreQueryAggregate(path, spec, Object.assign(Object.assign({}, opts), { _overrides: this.mergeReadOverrides(opts === null || opts === void 0 ? void 0 : opts._overrides) }));\n }\n /**\n * Subscribe to real-time updates as THIS wallet's identity. Unlike the global\n * `subscribe`, this needs no `BOUNDED_PRIVATE_KEY` env var — the WS connection\n * authenticates with the wallet's own session (so read rules see the right\n * principal), and is scoped to its own connection so it never crosses another\n * identity. Accepts a bare callback or `{ onData, onError, filter, ... }`.\n * Returns an async unsubscribe.\n */\n async subscribe(path, options) {\n const opts = typeof options === 'function' ? { onData: options } : Object.assign({}, options);\n const ovr = this.buildOverrides();\n return coreSubscribe(path, Object.assign(Object.assign({}, opts), { _overrides: {\n _getAuthHeaders: ovr._getAuthHeaders,\n _clearAuth: ovr._clearAuth,\n _walletAddress: ovr._walletAddress,\n } }));\n }\n /**\n * Invoke a deployed Bounded Function AS this wallet's identity. Unlike the\n * top-level `functions.invoke`, this needs no `BOUNDED_PRIVATE_KEY` env var —\n * the dispatcher sees the wallet's verified session, so the function's `auth`\n * rule + `ctx.user` reflect this client. Returns the function's JSON; throws\n * `FunctionInvokeError` on 401/403/404/503.\n */\n async invoke(name, args = {}, opts = {}) {\n const ovr = this.buildOverrides();\n return coreFunctions.invoke(name, args, Object.assign(Object.assign({}, opts), { _overrides: { _getAuthHeaders: ovr._getAuthHeaders } }));\n }\n /* ---- Signing operations (use provider directly) ---- */\n async signMessage(message) {\n return this.provider.signMessage(message);\n }\n async signTransaction(transaction) {\n return this.provider.signTransaction(transaction);\n }\n async signAndSubmitTransaction(transaction, feePayer) {\n return this.provider.signAndSubmitTransaction(transaction, feePayer);\n }\n}\n/**\n * Create a self-contained wallet client bound to a specific keypair.\n * Each client has its own auth session — no global state is mutated.\n *\n * @example\n * ```ts\n * const vault = await createWalletClient({ keypair: process.env.VAULT_KEY });\n * await vault.set('markets/123', data);\n * ```\n */\nexport async function createWalletClient(opts) {\n var _a;\n const kp = parseKeypair(opts.keypair);\n const config = await getConfig();\n let provider = new SolanaKeypairProvider((_a = config.rpcUrl) !== null && _a !== void 0 ? _a : null, kp);\n if (config.chain === 'offchain') {\n provider = new OffchainAuthProvider(provider);\n }\n const sessionManager = ServerSessionManager.forKeypair(kp);\n // Eagerly authenticate so failures surface immediately\n await sessionManager.getSession();\n return new WalletClient(provider, sessionManager, kp.publicKey.toBase58());\n}\n//# sourceMappingURL=wallet-client.js.map","// ---------------------------------------------------------------------------\n// webhooks.ts -- Verify signed inbound mutation webhooks.\n//\n// The Tarobase realtime worker fires outbound webhooks for declared\n// collections after a mutation commits, signed with a platform Ed25519 private\n// key. This module verifies those signatures on the receiving server.\n//\n// verifyWebhook():\n// 1. Fetches the platform's hosted public keys (well-known endpoint),\n// cached in-memory with a TTL.\n// 2. Picks the key matching the X-Bounded-Key-Id header.\n// 3. Verifies the Ed25519 signature (X-Bounded-Signature) over the RAW body.\n// 4. Checks the X-Bounded-Timestamp is within an allowed skew.\n// 5. Returns the parsed, typed payload — or throws.\n//\n// Verification uses WebCrypto (globalThis.crypto.subtle), available natively in\n// Node 18+, Bun, Deno, Cloudflare Workers, and modern browsers.\n// ---------------------------------------------------------------------------\nimport { getWebhookKeysUrl } from \"@bounded-sh/core\";\n// Default to PRODUCTION keys so an omitted keysUrl is production-safe (audit\n// SDK LOW-7). Staging receivers must pass keysUrl explicitly.\nexport const DEFAULT_WEBHOOK_KEYS_URL = \"https://realtime.bounded.sh/.well-known/bounded-webhook-keys.json\";\nconst DEFAULT_MAX_SKEW_SECONDS = 300;\nconst DEFAULT_CACHE_TTL_MS = 300000;\nexport class WebhookVerificationError extends Error {\n constructor(message) {\n super(message);\n this.name = \"WebhookVerificationError\";\n }\n}\nfunction getHeader(headers, name) {\n var _a;\n if (headers && typeof headers.get === \"function\") {\n return headers.get(name);\n }\n const lower = name.toLowerCase();\n const obj = headers;\n for (const key of Object.keys(obj)) {\n if (key.toLowerCase() === lower) {\n const value = obj[key];\n return Array.isArray(value) ? (_a = value[0]) !== null && _a !== void 0 ? _a : null : value !== null && value !== void 0 ? value : null;\n }\n }\n return null;\n}\n// ---------------------------------------------------------------------------\n// Base64\n// ---------------------------------------------------------------------------\nfunction base64ToBytes(b64) {\n const binary = typeof Buffer !== \"undefined\"\n ? Buffer.from(b64, \"base64\").toString(\"binary\")\n : atob(b64);\n const buffer = new ArrayBuffer(binary.length);\n const bytes = new Uint8Array(buffer);\n for (let i = 0; i < binary.length; i++)\n bytes[i] = binary.charCodeAt(i);\n return bytes;\n}\nfunction utf8Bytes(text) {\n const encoded = new TextEncoder().encode(text);\n const buffer = new ArrayBuffer(encoded.length);\n const bytes = new Uint8Array(buffer);\n bytes.set(encoded);\n return bytes;\n}\nconst keyCache = new Map();\n/** Clear the in-memory key cache (mainly for tests). */\nexport function clearWebhookKeyCache() {\n keyCache.clear();\n}\nasync function loadKeys(keysUrl, cacheTtlMs, fetchImpl, now) {\n const cached = keyCache.get(keysUrl);\n if (cached && cached.expiresAt > now()) {\n return cached.keys;\n }\n let res;\n try {\n res = await fetchImpl(keysUrl);\n }\n catch (err) {\n throw new WebhookVerificationError(`Failed to fetch webhook keys from ${keysUrl}: ${err.message}`);\n }\n if (!res.ok) {\n throw new WebhookVerificationError(`Failed to fetch webhook keys from ${keysUrl}: HTTP ${res.status}`);\n }\n const body = (await res.json());\n if (!body || !Array.isArray(body.keys)) {\n throw new WebhookVerificationError(`Webhook keys endpoint ${keysUrl} returned an invalid payload.`);\n }\n keyCache.set(keysUrl, { keys: body.keys, expiresAt: now() + cacheTtlMs });\n return body.keys;\n}\n// ---------------------------------------------------------------------------\n// In-memory replay store (single-process receivers)\n// ---------------------------------------------------------------------------\n/**\n * A simple in-memory {@link WebhookReplayStore}. Records seen event ids until\n * their skew-window expiry and lazily evicts expired entries. Suitable for a\n * single-process receiver; use a shared store (Redis, KV, a DB unique\n * constraint) for multi-instance deployments.\n */\nexport class InMemoryReplayStore {\n constructor() {\n this.seen = new Map();\n }\n checkAndRecord(id, expiresAtMs) {\n const now = Date.now();\n // Opportunistic eviction of expired entries to bound memory.\n if (this.seen.size > 0) {\n for (const [key, exp] of this.seen) {\n if (exp <= now)\n this.seen.delete(key);\n }\n }\n const existing = this.seen.get(id);\n if (existing !== undefined && existing > now) {\n return true; // replay\n }\n this.seen.set(id, expiresAtMs);\n return false;\n }\n /** Clear all recorded ids (mainly for tests). */\n clear() {\n this.seen.clear();\n }\n}\n// ---------------------------------------------------------------------------\n// verifyWebhook\n// ---------------------------------------------------------------------------\n/**\n * Verify a signed inbound webhook and return its typed payload.\n *\n * @param rawBody The exact raw request body string the platform signed. Must be\n * the unparsed bytes — re-serializing parsed JSON may not match byte-for-byte.\n * @param headers The inbound request headers (a Headers instance or a plain\n * object; case-insensitive).\n * @param opts Optional overrides (keys URL, skew, cache TTL, fetch).\n * @returns The parsed, validated {@link WebhookPayload}.\n * @throws {WebhookVerificationError} if anything fails verification.\n */\nexport async function verifyWebhook(rawBody, headers, opts = {}) {\n var _a, _b, _c, _d, _e, _f;\n // Resolution order: explicit opts.keysUrl > the configured Bounded network's\n // hosted keys (so a staging receiver verifies staging-signed deliveries\n // without passing keysUrl) > the production default (fail-closed when the\n // network is unknown — audit SDK LOW-7).\n const keysUrl = (_b = (_a = opts.keysUrl) !== null && _a !== void 0 ? _a : getWebhookKeysUrl()) !== null && _b !== void 0 ? _b : DEFAULT_WEBHOOK_KEYS_URL;\n const maxSkew = (_c = opts.maxSkewSeconds) !== null && _c !== void 0 ? _c : DEFAULT_MAX_SKEW_SECONDS;\n const cacheTtlMs = (_d = opts.cacheTtlMs) !== null && _d !== void 0 ? _d : DEFAULT_CACHE_TTL_MS;\n const fetchImpl = (_e = opts.fetchImpl) !== null && _e !== void 0 ? _e : globalThis.fetch;\n const now = (_f = opts.now) !== null && _f !== void 0 ? _f : Date.now;\n if (typeof fetchImpl !== \"function\") {\n throw new WebhookVerificationError(\"No fetch implementation available; pass opts.fetchImpl.\");\n }\n const signature = getHeader(headers, \"X-Bounded-Signature\");\n const keyId = getHeader(headers, \"X-Bounded-Key-Id\");\n const timestampHeader = getHeader(headers, \"X-Bounded-Timestamp\");\n if (!signature)\n throw new WebhookVerificationError(\"Missing X-Bounded-Signature header.\");\n if (!keyId)\n throw new WebhookVerificationError(\"Missing X-Bounded-Key-Id header.\");\n if (!timestampHeader)\n throw new WebhookVerificationError(\"Missing X-Bounded-Timestamp header.\");\n const headerTimestamp = Number(timestampHeader);\n if (!Number.isFinite(headerTimestamp)) {\n throw new WebhookVerificationError(\"Invalid X-Bounded-Timestamp header.\");\n }\n // Resolve the signing key by id.\n const keys = await loadKeys(keysUrl, cacheTtlMs, fetchImpl, now);\n let key = keys.find((k) => k.id === keyId);\n // Cache-miss tolerance: a freshly-rotated key may not be cached yet. Force a\n // single refresh before giving up.\n if (!key) {\n keyCache.delete(keysUrl);\n const refreshed = await loadKeys(keysUrl, cacheTtlMs, fetchImpl, now);\n key = refreshed.find((k) => k.id === keyId);\n }\n if (!key) {\n throw new WebhookVerificationError(`No public key found for key id \"${keyId}\".`);\n }\n if (key.alg !== \"ed25519\") {\n throw new WebhookVerificationError(`Unsupported key algorithm \"${key.alg}\".`);\n }\n // Verify the Ed25519 signature over the raw body.\n const subtle = (globalThis.crypto && globalThis.crypto.subtle);\n if (!subtle) {\n throw new WebhookVerificationError(\"WebCrypto (crypto.subtle) is not available.\");\n }\n let cryptoKey;\n try {\n cryptoKey = await subtle.importKey(\"raw\", base64ToBytes(key.publicKey), { name: \"Ed25519\" }, false, [\"verify\"]);\n }\n catch (err) {\n throw new WebhookVerificationError(`Failed to import Ed25519 public key: ${err.message}`);\n }\n const ok = await subtle.verify({ name: \"Ed25519\" }, cryptoKey, base64ToBytes(signature), utf8Bytes(rawBody));\n if (!ok) {\n throw new WebhookVerificationError(\"Webhook signature verification failed.\");\n }\n // Parse and shallow-validate the payload.\n let payload;\n try {\n payload = JSON.parse(rawBody);\n }\n catch (_g) {\n throw new WebhookVerificationError(\"Webhook body is not valid JSON.\");\n }\n if (!payload ||\n typeof payload.id !== \"string\" ||\n typeof payload.appId !== \"string\" ||\n typeof payload.path !== \"string\" ||\n (payload.operation !== \"create\" &&\n payload.operation !== \"update\" &&\n payload.operation !== \"delete\") ||\n typeof payload.timestamp !== \"number\" ||\n !Number.isFinite(payload.timestamp)) {\n throw new WebhookVerificationError(\"Webhook payload is missing required fields.\");\n }\n // Replay protection: the timestamp used for the skew window MUST be the SIGNED\n // payload.timestamp, not the unsigned X-Bounded-Timestamp header. An attacker\n // can swap the header freely without breaking the Ed25519 signature, so the\n // header alone is no replay bound. We also require the header to equal the\n // signed value so the (unsigned) header cannot diverge from what was signed.\n if (headerTimestamp !== payload.timestamp) {\n throw new WebhookVerificationError(\"X-Bounded-Timestamp header does not match the signed payload timestamp.\");\n }\n const nowSeconds = Math.floor(now() / 1000);\n if (Math.abs(nowSeconds - payload.timestamp) > maxSkew) {\n throw new WebhookVerificationError(`Webhook timestamp outside allowed skew of ${maxSkew}s (delta ${Math.abs(nowSeconds - payload.timestamp)}s).`);\n }\n // Optional nonce/replay cache: reject a previously-seen event id within the\n // skew window. The signed payload.id uniquely identifies the delivery.\n if (opts.replayStore) {\n const expiresAtMs = (payload.timestamp + maxSkew) * 1000;\n const replayed = await opts.replayStore.checkAndRecord(payload.id, expiresAtMs);\n if (replayed) {\n throw new WebhookVerificationError(`Webhook replay detected for event id \"${payload.id}\".`);\n }\n }\n return payload;\n}\n//# sourceMappingURL=webhooks.js.map"],"names":["Keypair","Buffer","Connection","convertRemainingAccounts","anchor","VersionedTransaction","buildSetDocumentsTransaction","ComputeBudgetProgram","crypto","getConfig","configInit","getIdTokenCore","this","coreSet","coreSetMany","coreSetFile","coreGet","coreGetMany","coreGetFiles","coreSearch","coreRunQuery","coreRunQueryMany","coreRunExpression","coreRunExpressionMany","coreCount","coreAggregate","coreQueryAggregate","coreSubscribe","coreFunctions","ServerSessionManager","getWebhookKeysUrl"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../.rollup-tmp/auth/providers/solana-keypair-provider.js","../.rollup-tmp/auth/providers/offchain-auth-provider.js","../.rollup-tmp/auth/index.js","../.rollup-tmp/global.js","../.rollup-tmp/utils.js","../.rollup-tmp/wallet-client.js","../.rollup-tmp/webhooks.js"],"sourcesContent":["import { Buffer } from 'buffer';\nimport { ComputeBudgetProgram, Connection, Keypair, VersionedTransaction } from '@solana/web3.js';\nimport * as anchor from '@coral-xyz/anchor';\nimport nacl from 'tweetnacl';\nimport bs58 from 'bs58';\nimport { convertRemainingAccounts, buildSetDocumentsTransaction, } from '@bounded-sh/core';\nimport { SOLANA_DEVNET_RPC_URL, SOLANA_MAINNET_RPC_URL, SURFNET_RPC_URL } from '..';\n/* ------------------------------------------------------------- *\n * KEYPAIR ENV-VAR (only consulted when no explicit keypair is given)\n *\n * Most code should pass a keypair explicitly — `createWalletClient({ keypair })`\n * does. The env var is the fallback for the global `set/get` path. `BOUNDED_*`\n * is the canonical name (it matches the CLI's `BOUNDED_PRIVATE_KEY`).\n * ------------------------------------------------------------- */\nconst ENV_VARS = ['BOUNDED_PRIVATE_KEY']; // base-58 or JSON array\nfunction loadKeypairFromEnv() {\n var _a;\n let secret;\n let found;\n for (const name of ENV_VARS) {\n const v = (_a = process === null || process === void 0 ? void 0 : process.env) === null || _a === void 0 ? void 0 : _a[name];\n if (v) {\n secret = v;\n found = name;\n break;\n }\n }\n if (!secret) {\n throw new Error(`No server keypair: set ${ENV_VARS[0]} to a base58 secret key (or JSON array), ` +\n `or pass one explicitly via createWalletClient({ keypair }).`);\n }\n try {\n const secretKey = secret.trim().startsWith('[')\n ? Uint8Array.from(JSON.parse(secret))\n : bs58.decode(secret.trim());\n return Keypair.fromSecretKey(secretKey);\n }\n catch (err) {\n throw new Error(`Unable to parse ${found}. Ensure it is valid base58 or a JSON array.`);\n }\n}\n/* ──────────────────────────────────────────────────────────\n * Helper – fetch getPriorityFeeEstimate\n * ──────────────────────────────────────────────────────── */\nasync function fetchPriorityFee(rpcEndpoint, rawUnsignedTxBuffer) {\n var _a, _b;\n try {\n const res = await fetch(rpcEndpoint, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({\n jsonrpc: \"2.0\",\n id: \"1\",\n method: \"getPriorityFeeEstimate\",\n params: [{\n transaction: bs58.encode(rawUnsignedTxBuffer), options: {\n recommended: true\n }\n }]\n })\n });\n const data = await res.json();\n const fee = (_b = (_a = data === null || data === void 0 ? void 0 : data.result) === null || _a === void 0 ? void 0 : _a.priorityFeeEstimate) !== null && _b !== void 0 ? _b : null;\n console.log(\"Got fee from Helius\", fee);\n if (fee != null && fee > 0) {\n return Math.ceil(Number(fee) * 1.2);\n }\n else {\n console.log(\"No fee from Helius, using default 10000\");\n return Math.ceil(10000 * 1.2);\n }\n }\n catch (err) {\n console.warn(\"Priority‑fee estimate failed:\", err);\n return Math.ceil(10000 * 1.2);\n }\n}\nexport class SolanaKeypairProvider {\n constructor(networkUrl = null, keypair) {\n this.networkUrl = networkUrl;\n this.explicitKeypair = keypair;\n }\n get keypair() {\n var _a, _b;\n return ((_a = this.cachedKeypair) !== null && _a !== void 0 ? _a : (this.cachedKeypair = (_b = this.explicitKeypair) !== null && _b !== void 0 ? _b : loadKeypairFromEnv()));\n }\n /* ----------------------------------------------------------- *\n * (Auth stubs – fill in later if needed)\n * ----------------------------------------------------------- */\n async login() { throw new Error('Not implemented'); }\n async restoreSession() { throw new Error('Not implemented'); }\n async logout() { throw new Error('Not implemented'); }\n /* ----------------------------------------------------------- *\n * Sign arbitrary message\n * ----------------------------------------------------------- */\n async signMessage(message) {\n const sig = nacl.sign.detached(new TextEncoder().encode(message), this.keypair.secretKey);\n return Buffer.from(sig).toString('base64');\n }\n /* ----------------------------------------------------------- *\n * Sign transaction\n * ----------------------------------------------------------- */\n async signTransaction(transaction) {\n // Use duck typing instead of instanceof to handle multiple @solana/web3.js versions\n const isLegacyTransaction = 'recentBlockhash' in transaction && !('message' in transaction && 'staticAccountKeys' in transaction.message);\n if (isLegacyTransaction) {\n transaction.partialSign(this.keypair);\n }\n else {\n transaction.sign([this.keypair]);\n }\n return transaction;\n }\n /**\n * Signs and submits a Solana transaction to the network.\n *\n * This method handles blockhash and transaction confirmation automatically - you do NOT need to\n * set recentBlockhash or lastValidBlockHeight on the transaction before calling this method.\n * The network/RPC URL is derived from the provider's configuration (set during initialization).\n *\n * @param transaction - The transaction to sign and submit (Transaction or VersionedTransaction)\n * @param feePayer - Optional fee payer public key. If not provided and the transaction doesn't\n * already have a feePayer set, the keypair's public key will be used.\n * Useful for co-signing scenarios where a different account pays the fees.\n * @returns The transaction signature\n */\n async signAndSubmitTransaction(transaction, feePayer) {\n // 1. Get RPC URL and create connection\n const rpcUrl = this.getRpcUrl();\n const connection = new Connection(rpcUrl, 'confirmed');\n // 2. Get fresh blockhash and set it on the transaction before signing\n const { blockhash, lastValidBlockHeight } = await connection.getLatestBlockhash('confirmed');\n // Use duck typing instead of instanceof to handle multiple @solana/web3.js versions\n const isLegacyTransaction = 'recentBlockhash' in transaction && !('message' in transaction && 'staticAccountKeys' in transaction.message);\n if (isLegacyTransaction) {\n const legacyTx = transaction;\n legacyTx.recentBlockhash = blockhash;\n legacyTx.lastValidBlockHeight = lastValidBlockHeight;\n // Set feePayer if not already set\n if (!legacyTx.feePayer) {\n legacyTx.feePayer = feePayer !== null && feePayer !== void 0 ? feePayer : this.keypair.publicKey;\n }\n }\n else {\n // VersionedTransaction\n const versionedTx = transaction;\n versionedTx.message.recentBlockhash = blockhash;\n // Note: VersionedTransaction feePayer is set in the message at creation time\n // and cannot be modified after creation\n }\n // 3. Sign the transaction\n const signedTx = await this.signTransaction(transaction);\n // 4. Submit and confirm using shared helper\n const { signature } = await this.submitAndConfirmTransaction(signedTx, connection);\n return signature;\n }\n /* ----------------------------------------------------------- *\n * Private Helpers\n * ----------------------------------------------------------- */\n /**\n * Submits a signed transaction and waits for confirmation using polling.\n * Shared by both signAndSubmitTransaction and runTransactionInner.\n */\n async submitAndConfirmTransaction(signedTx, connection, options) {\n var _a, _b, _c, _d;\n const sig = await connection.sendRawTransaction(signedTx.serialize(), {\n preflightCommitment: 'confirmed'\n });\n // Wait for confirmation using polling\n const startTime = Date.now();\n const timeoutMs = 10 * 1000; // 10 seconds\n while (true) {\n const st = await connection.getSignatureStatus(sig);\n if ((_a = st === null || st === void 0 ? void 0 : st.value) === null || _a === void 0 ? void 0 : _a.err) {\n // Transaction confirmed but failed on-chain — fetch logs for a readable error\n const txInfo = await connection.getTransaction(sig, {\n maxSupportedTransactionVersion: 0,\n commitment: 'confirmed'\n });\n const logMessages = (_b = txInfo === null || txInfo === void 0 ? void 0 : txInfo.meta) === null || _b === void 0 ? void 0 : _b.logMessages;\n const errorMessage = logMessages ? JSON.stringify(logMessages) : JSON.stringify((_c = st === null || st === void 0 ? void 0 : st.value) === null || _c === void 0 ? void 0 : _c.err);\n throw new Error(`Transaction failed: ${errorMessage}`);\n }\n if (((_d = st === null || st === void 0 ? void 0 : st.value) === null || _d === void 0 ? void 0 : _d.confirmationStatus) === 'confirmed') {\n break;\n }\n // Check if we've exceeded the timeout\n if (Date.now() - startTime > timeoutMs) {\n throw new Error(`Transaction confirmation timeout after ${timeoutMs / 1000} seconds`);\n }\n await new Promise(resolve => setTimeout(resolve, 500));\n }\n // Optionally fetch transaction info\n let txInfo = null;\n if (options === null || options === void 0 ? void 0 : options.fetchTxInfo) {\n txInfo = await connection.getTransaction(sig, {\n maxSupportedTransactionVersion: 0,\n commitment: 'confirmed'\n });\n }\n return { signature: sig, txInfo };\n }\n getRpcUrl(network) {\n if (this.networkUrl) {\n return this.networkUrl;\n }\n if (network === 'solana_devnet') {\n return SOLANA_DEVNET_RPC_URL;\n }\n else if (network === 'solana_mainnet') {\n return SOLANA_MAINNET_RPC_URL;\n }\n else if (network === 'surfnet') {\n return SURFNET_RPC_URL;\n }\n return SOLANA_MAINNET_RPC_URL; // default to mainnet\n }\n /* ----------------------------------------------------------- *\n * Transaction runner\n * ----------------------------------------------------------- */\n async runTransaction(_evm, sol, opts) {\n if (!sol)\n throw new Error('Solana transaction data required');\n const kp = this.keypair;\n // Helper for duck typing - checks if transaction is legacy Transaction vs VersionedTransaction\n const isLegacyTx = (tx) => {\n return 'recentBlockhash' in tx && !('message' in tx && 'staticAccountKeys' in tx.message);\n };\n const wallet = {\n publicKey: kp.publicKey,\n signTransaction: async (tx) => {\n // Use duck typing instead of instanceof to handle multiple @solana/web3.js versions\n if (isLegacyTx(tx)) {\n tx.partialSign(kp);\n }\n else {\n tx.sign([kp]);\n }\n return tx;\n },\n signAllTransactions: async (txs) => txs.map((t) => {\n // Use duck typing instead of instanceof to handle multiple @solana/web3.js versions\n if (isLegacyTx(t)) {\n t.partialSign(kp);\n }\n else {\n t.sign([kp]);\n }\n return t;\n }),\n };\n /* de-dupe remaining accounts */\n const deduped = (() => {\n const fin = [];\n for (const acc of convertRemainingAccounts(sol.txArgs[0].remainingAccounts)) {\n const ex = fin.find((x) => x.pubkey.equals(acc.pubkey));\n if (ex) {\n ex.isSigner || (ex.isSigner = acc.isSigner);\n ex.isWritable || (ex.isWritable = acc.isWritable);\n }\n else\n fin.push(acc);\n }\n return fin;\n })();\n let retries = 0;\n let didPass = false;\n let delay = 1000;\n let toReturn = null;\n let errorMessage = \"\";\n while (retries < 5) {\n try {\n toReturn = await this.runTransactionInner(sol, opts, wallet, kp, deduped);\n didPass = true;\n break;\n }\n catch (error) {\n console.log(\"Error building and sending transaction on retry:\", retries, error);\n await new Promise(resolve => setTimeout(resolve, delay));\n // Exponential backoff\n delay *= 1.5;\n retries++;\n errorMessage = error.message || JSON.stringify(error, null, 2);\n }\n }\n if (!didPass) {\n throw new Error(`Failed to send transaction after 5 retries: ${errorMessage}`);\n }\n return toReturn;\n }\n async runTransactionInner(sol, opts, wallet, kp, deduped) {\n var _a, _b, _c;\n let rpcUrl = this.getRpcUrl(sol.network);\n const connection = new Connection(rpcUrl, 'confirmed');\n const anchorProvider = new anchor.AnchorProvider(connection, wallet, anchor.AnchorProvider.defaultOptions());\n const app_id = sol.appId;\n if (!app_id)\n throw new Error('app_id missing');\n // When the server has co-signed a transaction (CPI attestation),\n // deserialize it and just add the wallet signature instead of\n // building from components.\n let tx;\n let blockhash;\n let lastValidBlockHeight;\n if (sol.signedTransaction) {\n tx = VersionedTransaction.deserialize(Buffer.from(sol.signedTransaction, 'base64'));\n const latestBlockhash = await connection.getLatestBlockhash('confirmed');\n blockhash = latestBlockhash.blockhash;\n lastValidBlockHeight = latestBlockhash.lastValidBlockHeight;\n }\n else {\n const result = await buildSetDocumentsTransaction(connection, sol.txArgs[0].idl, anchorProvider, kp.publicKey, {\n app_id,\n documents: sol.txArgs[0].setDocumentData,\n delete_paths: sol.txArgs[0].deletePaths,\n txData: sol.txArgs[0].txData\n }, deduped, sol.lutKey, sol.preInstructions, false, sol.additionalLutAddresses);\n tx = result.tx;\n blockhash = result.blockhash;\n lastValidBlockHeight = result.lastValidBlockHeight;\n }\n // Helper for duck typing - checks if transaction is legacy Transaction vs VersionedTransaction\n const isLegacyTx = (t) => {\n return 'recentBlockhash' in t && !('message' in t && 'staticAccountKeys' in t.message);\n };\n // Refresh blockhash and lastValidBlockHeight\n // Use duck typing instead of instanceof to handle multiple @solana/web3.js versions\n if (isLegacyTx(tx)) {\n tx.partialSign(kp);\n tx.recentBlockhash = blockhash;\n tx.lastValidBlockHeight = lastValidBlockHeight;\n tx.feePayer = kp.publicKey;\n }\n else {\n tx.sign([kp]);\n tx.message.recentBlockhash = blockhash;\n }\n // 3️⃣ Optional priority‑fee instruction\n const rawUnsigned = tx.serialize({ requireAllSignatures: false });\n const microLamports = await fetchPriorityFee(connection.rpcEndpoint, rawUnsigned);\n if (microLamports != null) {\n // Use duck typing instead of instanceof to handle multiple @solana/web3.js versions\n if (isLegacyTx(tx)) {\n tx.instructions.unshift(ComputeBudgetProgram.setComputeUnitPrice({ microLamports }));\n tx.partialSign(kp);\n }\n else {\n // For pre-signed (attestation) transactions, we can't rebuild — skip priority fee\n if (!sol.signedTransaction) {\n // Rebuild the transaction with the new priority fee\n const roundTwo = await buildSetDocumentsTransaction(connection, sol.txArgs[0].idl, anchorProvider, kp.publicKey, {\n app_id,\n documents: sol.txArgs[0].setDocumentData,\n delete_paths: sol.txArgs[0].deletePaths,\n txData: sol.txArgs[0].txData\n }, deduped, sol.lutKey, [ComputeBudgetProgram.setComputeUnitPrice({ microLamports }), ...sol.preInstructions], false, sol.additionalLutAddresses);\n tx = roundTwo.tx;\n blockhash = roundTwo.blockhash;\n lastValidBlockHeight = roundTwo.lastValidBlockHeight;\n tx.sign([kp]);\n tx.message.recentBlockhash = blockhash;\n }\n }\n }\n if ((opts === null || opts === void 0 ? void 0 : opts.shouldSubmitTx) === false) {\n return { signedTransaction: tx, blockNumber: 0, gasUsed: '0', data: '' };\n }\n // Submit and confirm using shared helper\n const { signature, txInfo } = await this.submitAndConfirmTransaction(tx, connection, { fetchTxInfo: true });\n return {\n transactionSignature: signature,\n blockNumber: (_a = txInfo === null || txInfo === void 0 ? void 0 : txInfo.slot) !== null && _a !== void 0 ? _a : 0,\n gasUsed: (_c = (_b = txInfo === null || txInfo === void 0 ? void 0 : txInfo.meta) === null || _b === void 0 ? void 0 : _b.fee.toString()) !== null && _c !== void 0 ? _c : '0',\n data: txInfo === null || txInfo === void 0 ? void 0 : txInfo.meta,\n };\n }\n /* ----------------------------------------------------------- */\n async getNativeMethods() {\n return { keypair: this.keypair };\n }\n}\n//# sourceMappingURL=solana-keypair-provider.js.map","import * as crypto from 'crypto';\n/**\n * Server-side OffchainAuthProvider wrapper for the poofnet environment.\n *\n * For signMessage, this generates a mock signature using SHA-256 hashing.\n * This is used for offchain transaction signing.\n */\nexport class OffchainAuthProvider {\n constructor(wrappedProvider) {\n this.wrappedProvider = wrappedProvider;\n }\n async login() {\n return this.wrappedProvider.login();\n }\n async logout() {\n return this.wrappedProvider.logout();\n }\n async restoreSession() {\n return this.wrappedProvider.restoreSession();\n }\n async getNativeMethods() {\n return this.wrappedProvider.getNativeMethods();\n }\n async signMessage(message) {\n // Delegate to wrapped provider for real signing\n return this.wrappedProvider.signMessage(message);\n }\n async signMessageMock(message) {\n // Generate mock signature (SHA-256 hash of message, base64 encoded)\n // This is used for offchain transaction signing\n const hash = crypto.createHash('sha256').update(message).digest('base64');\n return hash;\n }\n async signTransaction(transaction) {\n throw new Error('Poofnet does not support real Solana transactions. Deploy your project to mainnet to use this feature.');\n }\n /**\n * Sign and submit transaction - not supported in poofnet environment.\n * See the real providers (PhantomWalletProvider, PrivyWalletProvider, SolanaKeypairProvider)\n * for the full implementation with blockhash handling and feePayer support.\n */\n async signAndSubmitTransaction(_transaction, _feePayer) {\n throw new Error('Poofnet does not support real Solana transactions. Deploy your project to mainnet to use this feature.');\n }\n async runTransaction(evmTransactionData, solTransactionData, options) {\n return this.wrappedProvider.runTransaction(evmTransactionData, solTransactionData, options);\n }\n}\n//# sourceMappingURL=offchain-auth-provider.js.map","import { getConfig } from '@bounded-sh/core';\nimport { SolanaKeypairProvider } from './providers/solana-keypair-provider';\nimport { OffchainAuthProvider } from './providers/offchain-auth-provider';\nlet currentAuthProvider = null;\nexport const SOLANA_DEVNET_RPC_URL = \"https://idelle-8nxsep-fast-devnet.helius-rpc.com\";\nexport const SOLANA_MAINNET_RPC_URL = \"https://celestia-cegncv-fast-mainnet.helius-rpc.com\";\nexport const SURFNET_RPC_URL = \"https://surfpool.fly.dev\";\nexport async function getAuthProvider() {\n var _a;\n const config = await getConfig();\n if (currentAuthProvider) {\n // If provider exists but chain is \"offchain\" and it's not already wrapped, rewrap it\n if (config.chain === \"offchain\" && !(currentAuthProvider instanceof OffchainAuthProvider)) {\n currentAuthProvider = new OffchainAuthProvider(currentAuthProvider);\n }\n return currentAuthProvider;\n }\n currentAuthProvider = await matchAuthProvider((_a = config.rpcUrl) !== null && _a !== void 0 ? _a : null);\n // Wrap with OffchainAuthProvider for offchain chain\n if (config.chain === \"offchain\") {\n currentAuthProvider = new OffchainAuthProvider(currentAuthProvider);\n }\n return currentAuthProvider;\n}\nexport async function matchAuthProvider(rpcUrl) {\n return new SolanaKeypairProvider(rpcUrl);\n}\n//# sourceMappingURL=index.js.map","import { getAuthProvider } from './auth';\nimport { init as configInit } from '@bounded-sh/core';\nlet authProviderInstance = null;\nconst SOLANA_DEVNET_RPC_URL = \"https://api.devnet.solana.com\";\nconst SOLANA_MAINNET_RPC_URL = \"https://celestia-cegncv-fast-mainnet.helius-rpc.com\";\nconst SURFNET_RPC_URL = \"https://surfpool.fly.dev\";\nexport async function init(newConfig) {\n // Initialize config first so getAuthProvider can access it\n // Server-side skips backend init since it already has all needed config\n await configInit(Object.assign(Object.assign({}, newConfig), { isServer: true, skipBackendInit: true }));\n // Get the auth provider (which will wrap it if chain is \"offchain\")\n authProviderInstance = await getAuthProvider();\n // Update config with the wrapped provider\n await configInit(Object.assign(Object.assign({}, newConfig), { authProvider: authProviderInstance, isServer: true, skipBackendInit: true }));\n}\n//# sourceMappingURL=global.js.map","import { getIdToken as getIdTokenCore } from '@bounded-sh/core';\n// Wrapper for getIdToken - passes isServer=true for server-side usage\nexport async function getIdToken() {\n return getIdTokenCore(true);\n}\n//# sourceMappingURL=utils.js.map","var __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport { Keypair } from '@solana/web3.js';\nimport bs58 from 'bs58';\nimport { getConfig, get as coreGet, getMany as coreGetMany, set as coreSet, setMany as coreSetMany, setFile as coreSetFile, getFiles as coreGetFiles, search as coreSearch, runQuery as coreRunQuery, runQueryMany as coreRunQueryMany, runExpression as coreRunExpression, runExpressionMany as coreRunExpressionMany, count as coreCount, aggregate as coreAggregate, queryAggregate as coreQueryAggregate, subscribe as coreSubscribe, functions as coreFunctions, ServerSessionManager, } from '@bounded-sh/core';\nimport { SolanaKeypairProvider } from './auth/providers/solana-keypair-provider';\nimport { OffchainAuthProvider } from './auth/providers/offchain-auth-provider';\n/* ------------------------------------------------------------------ */\n/* Keypair parsing */\n/* ------------------------------------------------------------------ */\nfunction parseKeypair(secret) {\n const trimmed = secret.trim();\n try {\n const secretKey = trimmed.startsWith('[')\n ? Uint8Array.from(JSON.parse(trimmed))\n : bs58.decode(trimmed);\n return Keypair.fromSecretKey(secretKey);\n }\n catch (_a) {\n throw new Error('Invalid keypair: must be base58 or JSON array.');\n }\n}\n/**\n * Whether a JWT is expired or within 60s of expiry (or unparseable). Used to\n * decide if the wallet should re-sign for a fresh token. Server-only (Node\n * Buffer); a keypair-backed session can always re-sign, so this is safe to be\n * conservative about.\n */\nfunction jwtExpiringSoon(token) {\n if (!token)\n return true;\n try {\n const part = token.split('.')[1];\n const json = Buffer.from(part.replace(/-/g, '+').replace(/_/g, '/'), 'base64').toString('utf8');\n const exp = JSON.parse(json).exp;\n if (!exp)\n return false;\n return Date.now() > exp * 1000 - 60000;\n }\n catch (_a) {\n return true;\n }\n}\n/* ------------------------------------------------------------------ */\n/* WalletClient */\n/* ------------------------------------------------------------------ */\nexport class WalletClient {\n constructor(provider, sessionManager, address) {\n this.provider = provider;\n this.sessionManager = sessionManager;\n this.address = address;\n }\n /* ---- Auth override helpers ---- */\n buildOverrides() {\n return {\n authProvider: this.provider,\n _getAuthHeaders: async () => {\n let s = await this.sessionManager.getSession();\n // Keypair-backed session: if the cached token is expired/near-expiry,\n // re-sign for a fresh one (we always hold the key). Keeps long-lived WS\n // subscriptions authenticated across reconnects, and stops one-shot reads\n // from sending a stale token.\n if (jwtExpiringSoon(s.idToken)) {\n this.sessionManager.clearSession();\n s = await this.sessionManager.getSession();\n }\n return { Authorization: `Bearer ${s.idToken}` };\n },\n _clearAuth: async () => {\n this.sessionManager.clearSession();\n },\n _walletAddress: this.address,\n };\n }\n /** Strip Authorization from caller headers to prevent overriding wallet token */\n sanitizeHeaders(headers) {\n if (!headers)\n return undefined;\n const _a = headers, { Authorization, authorization } = _a, rest = __rest(_a, [\"Authorization\", \"authorization\"]);\n return Object.keys(rest).length > 0 ? rest : undefined;\n }\n mergeSetOverrides(opts) {\n var _a;\n const ovr = this.buildOverrides();\n return Object.assign(Object.assign({}, opts), { _overrides: Object.assign(Object.assign({}, opts === null || opts === void 0 ? void 0 : opts._overrides), { headers: this.sanitizeHeaders((_a = opts === null || opts === void 0 ? void 0 : opts._overrides) === null || _a === void 0 ? void 0 : _a.headers), authProvider: ovr.authProvider, _getAuthHeaders: ovr._getAuthHeaders, _clearAuth: ovr._clearAuth }) });\n }\n mergeReadOverrides(existing) {\n const ovr = this.buildOverrides();\n return Object.assign(Object.assign({}, existing), { headers: this.sanitizeHeaders(existing === null || existing === void 0 ? void 0 : existing.headers), _getAuthHeaders: ovr._getAuthHeaders, _clearAuth: ovr._clearAuth, _walletAddress: ovr._walletAddress });\n }\n /* ---- Data operations ---- */\n async set(path, document, options) {\n return coreSet(path, document, this.mergeSetOverrides(options));\n }\n async setMany(many, options) {\n return coreSetMany(many, this.mergeSetOverrides(options));\n }\n async setFile(path, file, options) {\n return coreSetFile(path, file, { _overrides: this.mergeReadOverrides(options === null || options === void 0 ? void 0 : options._overrides) });\n }\n async get(path, opts) {\n return coreGet(path, Object.assign(Object.assign({}, opts), { _overrides: this.mergeReadOverrides(opts === null || opts === void 0 ? void 0 : opts._overrides) }));\n }\n async getMany(paths, opts) {\n return coreGetMany(paths, Object.assign(Object.assign({}, opts), { _overrides: this.mergeReadOverrides() }));\n }\n async getFiles(path, options) {\n return coreGetFiles(path, { _overrides: this.mergeReadOverrides(options === null || options === void 0 ? void 0 : options._overrides) });\n }\n async search(path, query, opts = {}) {\n return coreSearch(path, query, Object.assign(Object.assign({}, opts), { _overrides: this.mergeReadOverrides(opts === null || opts === void 0 ? void 0 : opts._overrides) }));\n }\n async runQuery(absolutePath, queryName, queryArgs, opts) {\n return coreRunQuery(absolutePath, queryName, queryArgs, Object.assign(Object.assign({}, opts), { _overrides: this.mergeReadOverrides(opts === null || opts === void 0 ? void 0 : opts._overrides) }));\n }\n async runQueryMany(many, opts) {\n return coreRunQueryMany(many, Object.assign(Object.assign({}, opts), { _overrides: this.mergeReadOverrides(opts === null || opts === void 0 ? void 0 : opts._overrides) }));\n }\n async runExpression(expression, queryArgs, options) {\n return coreRunExpression(expression, queryArgs, Object.assign(Object.assign({}, options), { _overrides: this.mergeReadOverrides(options === null || options === void 0 ? void 0 : options._overrides) }));\n }\n async runExpressionMany(many) {\n const ovr = this.mergeReadOverrides();\n return coreRunExpressionMany(many.map(m => (Object.assign(Object.assign({}, m), { _overrides: ovr }))));\n }\n async count(path, opts = {}) {\n return coreCount(path, Object.assign(Object.assign({}, opts), { _overrides: this.mergeReadOverrides(opts === null || opts === void 0 ? void 0 : opts._overrides) }));\n }\n async aggregate(path, operation, opts = {}) {\n return coreAggregate(path, operation, Object.assign(Object.assign({}, opts), { _overrides: this.mergeReadOverrides(opts === null || opts === void 0 ? void 0 : opts._overrides) }));\n }\n async queryAggregate(path, spec, opts = {}) {\n return coreQueryAggregate(path, spec, Object.assign(Object.assign({}, opts), { _overrides: this.mergeReadOverrides(opts === null || opts === void 0 ? void 0 : opts._overrides) }));\n }\n /**\n * Subscribe to real-time updates as THIS wallet's identity. Unlike the global\n * `subscribe`, this needs no `BOUNDED_PRIVATE_KEY` env var — the WS connection\n * authenticates with the wallet's own session (so read rules see the right\n * principal), and is scoped to its own connection so it never crosses another\n * identity. Accepts a bare callback or `{ onData, onError, filter, ... }`.\n * Returns an async unsubscribe.\n */\n async subscribe(path, options) {\n const opts = typeof options === 'function' ? { onData: options } : Object.assign({}, options);\n const ovr = this.buildOverrides();\n return coreSubscribe(path, Object.assign(Object.assign({}, opts), { _overrides: {\n _getAuthHeaders: ovr._getAuthHeaders,\n _clearAuth: ovr._clearAuth,\n _walletAddress: ovr._walletAddress,\n } }));\n }\n /**\n * Invoke a deployed Bounded Function AS this wallet's identity. Unlike the\n * top-level `functions.invoke`, this needs no `BOUNDED_PRIVATE_KEY` env var —\n * the dispatcher sees the wallet's verified session, so the function's `auth`\n * rule + `ctx.user` reflect this client. Returns the function's JSON; throws\n * `FunctionInvokeError` on 401/403/404/503.\n */\n async invoke(name, args = {}, opts = {}) {\n const ovr = this.buildOverrides();\n return coreFunctions.invoke(name, args, Object.assign(Object.assign({}, opts), { _overrides: { _getAuthHeaders: ovr._getAuthHeaders } }));\n }\n /* ---- Signing operations (use provider directly) ---- */\n async signMessage(message) {\n return this.provider.signMessage(message);\n }\n async signTransaction(transaction) {\n return this.provider.signTransaction(transaction);\n }\n async signAndSubmitTransaction(transaction, feePayer) {\n return this.provider.signAndSubmitTransaction(transaction, feePayer);\n }\n}\n/**\n * Create a self-contained wallet client bound to a specific keypair.\n * Each client has its own auth session — no global state is mutated.\n *\n * @example\n * ```ts\n * const vault = await createWalletClient({ keypair: process.env.VAULT_KEY });\n * await vault.set('markets/123', data);\n * ```\n */\nexport async function createWalletClient(opts) {\n var _a;\n const kp = parseKeypair(opts.keypair);\n const config = await getConfig();\n let provider = new SolanaKeypairProvider((_a = config.rpcUrl) !== null && _a !== void 0 ? _a : null, kp);\n if (config.chain === 'offchain') {\n provider = new OffchainAuthProvider(provider);\n }\n const sessionManager = ServerSessionManager.forKeypair(kp);\n // Eagerly authenticate so failures surface immediately\n await sessionManager.getSession();\n return new WalletClient(provider, sessionManager, kp.publicKey.toBase58());\n}\n//# sourceMappingURL=wallet-client.js.map","// ---------------------------------------------------------------------------\n// webhooks.ts -- Verify signed inbound mutation webhooks.\n//\n// The Bounded realtime worker fires outbound webhooks for declared\n// collections after a mutation commits, signed with a platform Ed25519 private\n// key. This module verifies those signatures on the receiving server.\n//\n// verifyWebhook():\n// 1. Fetches the platform's hosted public keys (well-known endpoint),\n// cached in-memory with a TTL.\n// 2. Picks the key matching the X-Bounded-Key-Id header.\n// 3. Verifies the Ed25519 signature (X-Bounded-Signature) over the RAW body.\n// 4. Checks the X-Bounded-Timestamp is within an allowed skew.\n// 5. Returns the parsed, typed payload — or throws.\n//\n// Verification uses WebCrypto (globalThis.crypto.subtle), available natively in\n// Node 18+, Bun, Deno, Cloudflare Workers, and modern browsers.\n// ---------------------------------------------------------------------------\nimport { getWebhookKeysUrl } from \"@bounded-sh/core\";\n// Default to PRODUCTION keys so an omitted keysUrl is production-safe (audit\n// SDK LOW-7). Staging receivers must pass keysUrl explicitly.\nexport const DEFAULT_WEBHOOK_KEYS_URL = \"https://realtime.bounded.sh/.well-known/bounded-webhook-keys.json\";\nconst DEFAULT_MAX_SKEW_SECONDS = 300;\nconst DEFAULT_CACHE_TTL_MS = 300000;\nexport class WebhookVerificationError extends Error {\n constructor(message) {\n super(message);\n this.name = \"WebhookVerificationError\";\n }\n}\nfunction getHeader(headers, name) {\n var _a;\n if (headers && typeof headers.get === \"function\") {\n return headers.get(name);\n }\n const lower = name.toLowerCase();\n const obj = headers;\n for (const key of Object.keys(obj)) {\n if (key.toLowerCase() === lower) {\n const value = obj[key];\n return Array.isArray(value) ? (_a = value[0]) !== null && _a !== void 0 ? _a : null : value !== null && value !== void 0 ? value : null;\n }\n }\n return null;\n}\n// ---------------------------------------------------------------------------\n// Base64\n// ---------------------------------------------------------------------------\nfunction base64ToBytes(b64) {\n const binary = typeof Buffer !== \"undefined\"\n ? Buffer.from(b64, \"base64\").toString(\"binary\")\n : atob(b64);\n const buffer = new ArrayBuffer(binary.length);\n const bytes = new Uint8Array(buffer);\n for (let i = 0; i < binary.length; i++)\n bytes[i] = binary.charCodeAt(i);\n return bytes;\n}\nfunction utf8Bytes(text) {\n const encoded = new TextEncoder().encode(text);\n const buffer = new ArrayBuffer(encoded.length);\n const bytes = new Uint8Array(buffer);\n bytes.set(encoded);\n return bytes;\n}\nconst keyCache = new Map();\n/** Clear the in-memory key cache (mainly for tests). */\nexport function clearWebhookKeyCache() {\n keyCache.clear();\n}\nasync function loadKeys(keysUrl, cacheTtlMs, fetchImpl, now) {\n const cached = keyCache.get(keysUrl);\n if (cached && cached.expiresAt > now()) {\n return cached.keys;\n }\n let res;\n try {\n res = await fetchImpl(keysUrl);\n }\n catch (err) {\n throw new WebhookVerificationError(`Failed to fetch webhook keys from ${keysUrl}: ${err.message}`);\n }\n if (!res.ok) {\n throw new WebhookVerificationError(`Failed to fetch webhook keys from ${keysUrl}: HTTP ${res.status}`);\n }\n const body = (await res.json());\n if (!body || !Array.isArray(body.keys)) {\n throw new WebhookVerificationError(`Webhook keys endpoint ${keysUrl} returned an invalid payload.`);\n }\n keyCache.set(keysUrl, { keys: body.keys, expiresAt: now() + cacheTtlMs });\n return body.keys;\n}\n// ---------------------------------------------------------------------------\n// In-memory replay store (single-process receivers)\n// ---------------------------------------------------------------------------\n/**\n * A simple in-memory {@link WebhookReplayStore}. Records seen event ids until\n * their skew-window expiry and lazily evicts expired entries. Suitable for a\n * single-process receiver; use a shared store (Redis, KV, a DB unique\n * constraint) for multi-instance deployments.\n */\nexport class InMemoryReplayStore {\n constructor() {\n this.seen = new Map();\n }\n checkAndRecord(id, expiresAtMs) {\n const now = Date.now();\n // Opportunistic eviction of expired entries to bound memory.\n if (this.seen.size > 0) {\n for (const [key, exp] of this.seen) {\n if (exp <= now)\n this.seen.delete(key);\n }\n }\n const existing = this.seen.get(id);\n if (existing !== undefined && existing > now) {\n return true; // replay\n }\n this.seen.set(id, expiresAtMs);\n return false;\n }\n /** Clear all recorded ids (mainly for tests). */\n clear() {\n this.seen.clear();\n }\n}\n// ---------------------------------------------------------------------------\n// verifyWebhook\n// ---------------------------------------------------------------------------\n/**\n * Verify a signed inbound webhook and return its typed payload.\n *\n * @param rawBody The exact raw request body string the platform signed. Must be\n * the unparsed bytes — re-serializing parsed JSON may not match byte-for-byte.\n * @param headers The inbound request headers (a Headers instance or a plain\n * object; case-insensitive).\n * @param opts Optional overrides (keys URL, skew, cache TTL, fetch).\n * @returns The parsed, validated {@link WebhookPayload}.\n * @throws {WebhookVerificationError} if anything fails verification.\n */\nexport async function verifyWebhook(rawBody, headers, opts = {}) {\n var _a, _b, _c, _d, _e, _f;\n // Resolution order: explicit opts.keysUrl > the configured Bounded network's\n // hosted keys (so a staging receiver verifies staging-signed deliveries\n // without passing keysUrl) > the production default (fail-closed when the\n // network is unknown — audit SDK LOW-7).\n const keysUrl = (_b = (_a = opts.keysUrl) !== null && _a !== void 0 ? _a : getWebhookKeysUrl()) !== null && _b !== void 0 ? _b : DEFAULT_WEBHOOK_KEYS_URL;\n const maxSkew = (_c = opts.maxSkewSeconds) !== null && _c !== void 0 ? _c : DEFAULT_MAX_SKEW_SECONDS;\n const cacheTtlMs = (_d = opts.cacheTtlMs) !== null && _d !== void 0 ? _d : DEFAULT_CACHE_TTL_MS;\n const fetchImpl = (_e = opts.fetchImpl) !== null && _e !== void 0 ? _e : globalThis.fetch;\n const now = (_f = opts.now) !== null && _f !== void 0 ? _f : Date.now;\n if (typeof fetchImpl !== \"function\") {\n throw new WebhookVerificationError(\"No fetch implementation available; pass opts.fetchImpl.\");\n }\n const signature = getHeader(headers, \"X-Bounded-Signature\");\n const keyId = getHeader(headers, \"X-Bounded-Key-Id\");\n const timestampHeader = getHeader(headers, \"X-Bounded-Timestamp\");\n if (!signature)\n throw new WebhookVerificationError(\"Missing X-Bounded-Signature header.\");\n if (!keyId)\n throw new WebhookVerificationError(\"Missing X-Bounded-Key-Id header.\");\n if (!timestampHeader)\n throw new WebhookVerificationError(\"Missing X-Bounded-Timestamp header.\");\n const headerTimestamp = Number(timestampHeader);\n if (!Number.isFinite(headerTimestamp)) {\n throw new WebhookVerificationError(\"Invalid X-Bounded-Timestamp header.\");\n }\n // Resolve the signing key by id.\n const keys = await loadKeys(keysUrl, cacheTtlMs, fetchImpl, now);\n let key = keys.find((k) => k.id === keyId);\n // Cache-miss tolerance: a freshly-rotated key may not be cached yet. Force a\n // single refresh before giving up.\n if (!key) {\n keyCache.delete(keysUrl);\n const refreshed = await loadKeys(keysUrl, cacheTtlMs, fetchImpl, now);\n key = refreshed.find((k) => k.id === keyId);\n }\n if (!key) {\n throw new WebhookVerificationError(`No public key found for key id \"${keyId}\".`);\n }\n if (key.alg !== \"ed25519\") {\n throw new WebhookVerificationError(`Unsupported key algorithm \"${key.alg}\".`);\n }\n // Verify the Ed25519 signature over the raw body.\n const subtle = (globalThis.crypto && globalThis.crypto.subtle);\n if (!subtle) {\n throw new WebhookVerificationError(\"WebCrypto (crypto.subtle) is not available.\");\n }\n let cryptoKey;\n try {\n cryptoKey = await subtle.importKey(\"raw\", base64ToBytes(key.publicKey), { name: \"Ed25519\" }, false, [\"verify\"]);\n }\n catch (err) {\n throw new WebhookVerificationError(`Failed to import Ed25519 public key: ${err.message}`);\n }\n const ok = await subtle.verify({ name: \"Ed25519\" }, cryptoKey, base64ToBytes(signature), utf8Bytes(rawBody));\n if (!ok) {\n throw new WebhookVerificationError(\"Webhook signature verification failed.\");\n }\n // Parse and shallow-validate the payload.\n let payload;\n try {\n payload = JSON.parse(rawBody);\n }\n catch (_g) {\n throw new WebhookVerificationError(\"Webhook body is not valid JSON.\");\n }\n if (!payload ||\n typeof payload.id !== \"string\" ||\n typeof payload.appId !== \"string\" ||\n typeof payload.path !== \"string\" ||\n (payload.operation !== \"create\" &&\n payload.operation !== \"update\" &&\n payload.operation !== \"delete\") ||\n typeof payload.timestamp !== \"number\" ||\n !Number.isFinite(payload.timestamp)) {\n throw new WebhookVerificationError(\"Webhook payload is missing required fields.\");\n }\n // Replay protection: the timestamp used for the skew window MUST be the SIGNED\n // payload.timestamp, not the unsigned X-Bounded-Timestamp header. An attacker\n // can swap the header freely without breaking the Ed25519 signature, so the\n // header alone is no replay bound. We also require the header to equal the\n // signed value so the (unsigned) header cannot diverge from what was signed.\n if (headerTimestamp !== payload.timestamp) {\n throw new WebhookVerificationError(\"X-Bounded-Timestamp header does not match the signed payload timestamp.\");\n }\n const nowSeconds = Math.floor(now() / 1000);\n if (Math.abs(nowSeconds - payload.timestamp) > maxSkew) {\n throw new WebhookVerificationError(`Webhook timestamp outside allowed skew of ${maxSkew}s (delta ${Math.abs(nowSeconds - payload.timestamp)}s).`);\n }\n // Optional nonce/replay cache: reject a previously-seen event id within the\n // skew window. The signed payload.id uniquely identifies the delivery.\n if (opts.replayStore) {\n const expiresAtMs = (payload.timestamp + maxSkew) * 1000;\n const replayed = await opts.replayStore.checkAndRecord(payload.id, expiresAtMs);\n if (replayed) {\n throw new WebhookVerificationError(`Webhook replay detected for event id \"${payload.id}\".`);\n }\n }\n return payload;\n}\n//# sourceMappingURL=webhooks.js.map"],"names":["Keypair","Buffer","Connection","convertRemainingAccounts","anchor","VersionedTransaction","buildSetDocumentsTransaction","ComputeBudgetProgram","crypto","getConfig","configInit","getIdTokenCore","this","coreSet","coreSetMany","coreSetFile","coreGet","coreGetMany","coreGetFiles","coreSearch","coreRunQuery","coreRunQueryMany","coreRunExpression","coreRunExpressionMany","coreCount","coreAggregate","coreQueryAggregate","coreSubscribe","coreFunctions","ServerSessionManager","getWebhookKeysUrl"],"mappings":"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"}
|
package/dist/index.mjs
CHANGED
|
@@ -13,10 +13,9 @@ import * as crypto from 'crypto';
|
|
|
13
13
|
*
|
|
14
14
|
* Most code should pass a keypair explicitly — `createWalletClient({ keypair })`
|
|
15
15
|
* does. The env var is the fallback for the global `set/get` path. `BOUNDED_*`
|
|
16
|
-
* is the canonical name (it matches the CLI's `BOUNDED_PRIVATE_KEY`)
|
|
17
|
-
* `TAROBASE_SOLANA_KEYPAIR` is still honored so existing setups keep working.
|
|
16
|
+
* is the canonical name (it matches the CLI's `BOUNDED_PRIVATE_KEY`).
|
|
18
17
|
* ------------------------------------------------------------- */
|
|
19
|
-
const ENV_VARS = ['BOUNDED_PRIVATE_KEY'
|
|
18
|
+
const ENV_VARS = ['BOUNDED_PRIVATE_KEY']; // base-58 or JSON array
|
|
20
19
|
function loadKeypairFromEnv() {
|
|
21
20
|
var _a;
|
|
22
21
|
let secret;
|
|
@@ -677,7 +676,7 @@ async function createWalletClient(opts) {
|
|
|
677
676
|
// ---------------------------------------------------------------------------
|
|
678
677
|
// webhooks.ts -- Verify signed inbound mutation webhooks.
|
|
679
678
|
//
|
|
680
|
-
// The
|
|
679
|
+
// The Bounded realtime worker fires outbound webhooks for declared
|
|
681
680
|
// collections after a mutation commits, signed with a platform Ed25519 private
|
|
682
681
|
// key. This module verifies those signatures on the receiving server.
|
|
683
682
|
//
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","sources":["../.rollup-tmp/auth/providers/solana-keypair-provider.js","../.rollup-tmp/auth/providers/offchain-auth-provider.js","../.rollup-tmp/auth/index.js","../.rollup-tmp/global.js","../.rollup-tmp/utils.js","../.rollup-tmp/wallet-client.js","../.rollup-tmp/webhooks.js"],"sourcesContent":["import { Buffer } from 'buffer';\nimport { ComputeBudgetProgram, Connection, Keypair, VersionedTransaction } from '@solana/web3.js';\nimport * as anchor from '@coral-xyz/anchor';\nimport nacl from 'tweetnacl';\nimport bs58 from 'bs58';\nimport { convertRemainingAccounts, buildSetDocumentsTransaction, } from '@bounded-sh/core';\nimport { SOLANA_DEVNET_RPC_URL, SOLANA_MAINNET_RPC_URL, SURFNET_RPC_URL } from '..';\n/* ------------------------------------------------------------- *\n * KEYPAIR ENV-VAR (only consulted when no explicit keypair is given)\n *\n * Most code should pass a keypair explicitly — `createWalletClient({ keypair })`\n * does. The env var is the fallback for the global `set/get` path. `BOUNDED_*`\n * is the canonical name (it matches the CLI's `BOUNDED_PRIVATE_KEY`); the legacy\n * `TAROBASE_SOLANA_KEYPAIR` is still honored so existing setups keep working.\n * ------------------------------------------------------------- */\nconst ENV_VARS = ['BOUNDED_PRIVATE_KEY', 'TAROBASE_SOLANA_KEYPAIR']; // base-58 or JSON array\nfunction loadKeypairFromEnv() {\n var _a;\n let secret;\n let found;\n for (const name of ENV_VARS) {\n const v = (_a = process === null || process === void 0 ? void 0 : process.env) === null || _a === void 0 ? void 0 : _a[name];\n if (v) {\n secret = v;\n found = name;\n break;\n }\n }\n if (!secret) {\n throw new Error(`No server keypair: set ${ENV_VARS[0]} to a base58 secret key (or JSON array), ` +\n `or pass one explicitly via createWalletClient({ keypair }).`);\n }\n try {\n const secretKey = secret.trim().startsWith('[')\n ? Uint8Array.from(JSON.parse(secret))\n : bs58.decode(secret.trim());\n return Keypair.fromSecretKey(secretKey);\n }\n catch (err) {\n throw new Error(`Unable to parse ${found}. Ensure it is valid base58 or a JSON array.`);\n }\n}\n/* ──────────────────────────────────────────────────────────\n * Helper – fetch getPriorityFeeEstimate\n * ──────────────────────────────────────────────────────── */\nasync function fetchPriorityFee(rpcEndpoint, rawUnsignedTxBuffer) {\n var _a, _b;\n try {\n const res = await fetch(rpcEndpoint, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({\n jsonrpc: \"2.0\",\n id: \"1\",\n method: \"getPriorityFeeEstimate\",\n params: [{\n transaction: bs58.encode(rawUnsignedTxBuffer), options: {\n recommended: true\n }\n }]\n })\n });\n const data = await res.json();\n const fee = (_b = (_a = data === null || data === void 0 ? void 0 : data.result) === null || _a === void 0 ? void 0 : _a.priorityFeeEstimate) !== null && _b !== void 0 ? _b : null;\n console.log(\"Got fee from Helius\", fee);\n if (fee != null && fee > 0) {\n return Math.ceil(Number(fee) * 1.2);\n }\n else {\n console.log(\"No fee from Helius, using default 10000\");\n return Math.ceil(10000 * 1.2);\n }\n }\n catch (err) {\n console.warn(\"Priority‑fee estimate failed:\", err);\n return Math.ceil(10000 * 1.2);\n }\n}\nexport class SolanaKeypairProvider {\n constructor(networkUrl = null, keypair) {\n this.networkUrl = networkUrl;\n this.explicitKeypair = keypair;\n }\n get keypair() {\n var _a, _b;\n return ((_a = this.cachedKeypair) !== null && _a !== void 0 ? _a : (this.cachedKeypair = (_b = this.explicitKeypair) !== null && _b !== void 0 ? _b : loadKeypairFromEnv()));\n }\n /* ----------------------------------------------------------- *\n * (Auth stubs – fill in later if needed)\n * ----------------------------------------------------------- */\n async login() { throw new Error('Not implemented'); }\n async restoreSession() { throw new Error('Not implemented'); }\n async logout() { throw new Error('Not implemented'); }\n /* ----------------------------------------------------------- *\n * Sign arbitrary message\n * ----------------------------------------------------------- */\n async signMessage(message) {\n const sig = nacl.sign.detached(new TextEncoder().encode(message), this.keypair.secretKey);\n return Buffer.from(sig).toString('base64');\n }\n /* ----------------------------------------------------------- *\n * Sign transaction\n * ----------------------------------------------------------- */\n async signTransaction(transaction) {\n // Use duck typing instead of instanceof to handle multiple @solana/web3.js versions\n const isLegacyTransaction = 'recentBlockhash' in transaction && !('message' in transaction && 'staticAccountKeys' in transaction.message);\n if (isLegacyTransaction) {\n transaction.partialSign(this.keypair);\n }\n else {\n transaction.sign([this.keypair]);\n }\n return transaction;\n }\n /**\n * Signs and submits a Solana transaction to the network.\n *\n * This method handles blockhash and transaction confirmation automatically - you do NOT need to\n * set recentBlockhash or lastValidBlockHeight on the transaction before calling this method.\n * The network/RPC URL is derived from the provider's configuration (set during initialization).\n *\n * @param transaction - The transaction to sign and submit (Transaction or VersionedTransaction)\n * @param feePayer - Optional fee payer public key. If not provided and the transaction doesn't\n * already have a feePayer set, the keypair's public key will be used.\n * Useful for co-signing scenarios where a different account pays the fees.\n * @returns The transaction signature\n */\n async signAndSubmitTransaction(transaction, feePayer) {\n // 1. Get RPC URL and create connection\n const rpcUrl = this.getRpcUrl();\n const connection = new Connection(rpcUrl, 'confirmed');\n // 2. Get fresh blockhash and set it on the transaction before signing\n const { blockhash, lastValidBlockHeight } = await connection.getLatestBlockhash('confirmed');\n // Use duck typing instead of instanceof to handle multiple @solana/web3.js versions\n const isLegacyTransaction = 'recentBlockhash' in transaction && !('message' in transaction && 'staticAccountKeys' in transaction.message);\n if (isLegacyTransaction) {\n const legacyTx = transaction;\n legacyTx.recentBlockhash = blockhash;\n legacyTx.lastValidBlockHeight = lastValidBlockHeight;\n // Set feePayer if not already set\n if (!legacyTx.feePayer) {\n legacyTx.feePayer = feePayer !== null && feePayer !== void 0 ? feePayer : this.keypair.publicKey;\n }\n }\n else {\n // VersionedTransaction\n const versionedTx = transaction;\n versionedTx.message.recentBlockhash = blockhash;\n // Note: VersionedTransaction feePayer is set in the message at creation time\n // and cannot be modified after creation\n }\n // 3. Sign the transaction\n const signedTx = await this.signTransaction(transaction);\n // 4. Submit and confirm using shared helper\n const { signature } = await this.submitAndConfirmTransaction(signedTx, connection);\n return signature;\n }\n /* ----------------------------------------------------------- *\n * Private Helpers\n * ----------------------------------------------------------- */\n /**\n * Submits a signed transaction and waits for confirmation using polling.\n * Shared by both signAndSubmitTransaction and runTransactionInner.\n */\n async submitAndConfirmTransaction(signedTx, connection, options) {\n var _a, _b, _c, _d;\n const sig = await connection.sendRawTransaction(signedTx.serialize(), {\n preflightCommitment: 'confirmed'\n });\n // Wait for confirmation using polling\n const startTime = Date.now();\n const timeoutMs = 10 * 1000; // 10 seconds\n while (true) {\n const st = await connection.getSignatureStatus(sig);\n if ((_a = st === null || st === void 0 ? void 0 : st.value) === null || _a === void 0 ? void 0 : _a.err) {\n // Transaction confirmed but failed on-chain — fetch logs for a readable error\n const txInfo = await connection.getTransaction(sig, {\n maxSupportedTransactionVersion: 0,\n commitment: 'confirmed'\n });\n const logMessages = (_b = txInfo === null || txInfo === void 0 ? void 0 : txInfo.meta) === null || _b === void 0 ? void 0 : _b.logMessages;\n const errorMessage = logMessages ? JSON.stringify(logMessages) : JSON.stringify((_c = st === null || st === void 0 ? void 0 : st.value) === null || _c === void 0 ? void 0 : _c.err);\n throw new Error(`Transaction failed: ${errorMessage}`);\n }\n if (((_d = st === null || st === void 0 ? void 0 : st.value) === null || _d === void 0 ? void 0 : _d.confirmationStatus) === 'confirmed') {\n break;\n }\n // Check if we've exceeded the timeout\n if (Date.now() - startTime > timeoutMs) {\n throw new Error(`Transaction confirmation timeout after ${timeoutMs / 1000} seconds`);\n }\n await new Promise(resolve => setTimeout(resolve, 500));\n }\n // Optionally fetch transaction info\n let txInfo = null;\n if (options === null || options === void 0 ? void 0 : options.fetchTxInfo) {\n txInfo = await connection.getTransaction(sig, {\n maxSupportedTransactionVersion: 0,\n commitment: 'confirmed'\n });\n }\n return { signature: sig, txInfo };\n }\n getRpcUrl(network) {\n if (this.networkUrl) {\n return this.networkUrl;\n }\n if (network === 'solana_devnet') {\n return SOLANA_DEVNET_RPC_URL;\n }\n else if (network === 'solana_mainnet') {\n return SOLANA_MAINNET_RPC_URL;\n }\n else if (network === 'surfnet') {\n return SURFNET_RPC_URL;\n }\n return SOLANA_MAINNET_RPC_URL; // default to mainnet\n }\n /* ----------------------------------------------------------- *\n * Transaction runner\n * ----------------------------------------------------------- */\n async runTransaction(_evm, sol, opts) {\n if (!sol)\n throw new Error('Solana transaction data required');\n const kp = this.keypair;\n // Helper for duck typing - checks if transaction is legacy Transaction vs VersionedTransaction\n const isLegacyTx = (tx) => {\n return 'recentBlockhash' in tx && !('message' in tx && 'staticAccountKeys' in tx.message);\n };\n const wallet = {\n publicKey: kp.publicKey,\n signTransaction: async (tx) => {\n // Use duck typing instead of instanceof to handle multiple @solana/web3.js versions\n if (isLegacyTx(tx)) {\n tx.partialSign(kp);\n }\n else {\n tx.sign([kp]);\n }\n return tx;\n },\n signAllTransactions: async (txs) => txs.map((t) => {\n // Use duck typing instead of instanceof to handle multiple @solana/web3.js versions\n if (isLegacyTx(t)) {\n t.partialSign(kp);\n }\n else {\n t.sign([kp]);\n }\n return t;\n }),\n };\n /* de-dupe remaining accounts */\n const deduped = (() => {\n const fin = [];\n for (const acc of convertRemainingAccounts(sol.txArgs[0].remainingAccounts)) {\n const ex = fin.find((x) => x.pubkey.equals(acc.pubkey));\n if (ex) {\n ex.isSigner || (ex.isSigner = acc.isSigner);\n ex.isWritable || (ex.isWritable = acc.isWritable);\n }\n else\n fin.push(acc);\n }\n return fin;\n })();\n let retries = 0;\n let didPass = false;\n let delay = 1000;\n let toReturn = null;\n let errorMessage = \"\";\n while (retries < 5) {\n try {\n toReturn = await this.runTransactionInner(sol, opts, wallet, kp, deduped);\n didPass = true;\n break;\n }\n catch (error) {\n console.log(\"Error building and sending transaction on retry:\", retries, error);\n await new Promise(resolve => setTimeout(resolve, delay));\n // Exponential backoff\n delay *= 1.5;\n retries++;\n errorMessage = error.message || JSON.stringify(error, null, 2);\n }\n }\n if (!didPass) {\n throw new Error(`Failed to send transaction after 5 retries: ${errorMessage}`);\n }\n return toReturn;\n }\n async runTransactionInner(sol, opts, wallet, kp, deduped) {\n var _a, _b, _c;\n let rpcUrl = this.getRpcUrl(sol.network);\n const connection = new Connection(rpcUrl, 'confirmed');\n const anchorProvider = new anchor.AnchorProvider(connection, wallet, anchor.AnchorProvider.defaultOptions());\n const app_id = sol.appId;\n if (!app_id)\n throw new Error('app_id missing');\n // When the server has co-signed a transaction (CPI attestation),\n // deserialize it and just add the wallet signature instead of\n // building from components.\n let tx;\n let blockhash;\n let lastValidBlockHeight;\n if (sol.signedTransaction) {\n tx = VersionedTransaction.deserialize(Buffer.from(sol.signedTransaction, 'base64'));\n const latestBlockhash = await connection.getLatestBlockhash('confirmed');\n blockhash = latestBlockhash.blockhash;\n lastValidBlockHeight = latestBlockhash.lastValidBlockHeight;\n }\n else {\n const result = await buildSetDocumentsTransaction(connection, sol.txArgs[0].idl, anchorProvider, kp.publicKey, {\n app_id,\n documents: sol.txArgs[0].setDocumentData,\n delete_paths: sol.txArgs[0].deletePaths,\n txData: sol.txArgs[0].txData\n }, deduped, sol.lutKey, sol.preInstructions, false, sol.additionalLutAddresses);\n tx = result.tx;\n blockhash = result.blockhash;\n lastValidBlockHeight = result.lastValidBlockHeight;\n }\n // Helper for duck typing - checks if transaction is legacy Transaction vs VersionedTransaction\n const isLegacyTx = (t) => {\n return 'recentBlockhash' in t && !('message' in t && 'staticAccountKeys' in t.message);\n };\n // Refresh blockhash and lastValidBlockHeight\n // Use duck typing instead of instanceof to handle multiple @solana/web3.js versions\n if (isLegacyTx(tx)) {\n tx.partialSign(kp);\n tx.recentBlockhash = blockhash;\n tx.lastValidBlockHeight = lastValidBlockHeight;\n tx.feePayer = kp.publicKey;\n }\n else {\n tx.sign([kp]);\n tx.message.recentBlockhash = blockhash;\n }\n // 3️⃣ Optional priority‑fee instruction\n const rawUnsigned = tx.serialize({ requireAllSignatures: false });\n const microLamports = await fetchPriorityFee(connection.rpcEndpoint, rawUnsigned);\n if (microLamports != null) {\n // Use duck typing instead of instanceof to handle multiple @solana/web3.js versions\n if (isLegacyTx(tx)) {\n tx.instructions.unshift(ComputeBudgetProgram.setComputeUnitPrice({ microLamports }));\n tx.partialSign(kp);\n }\n else {\n // For pre-signed (attestation) transactions, we can't rebuild — skip priority fee\n if (!sol.signedTransaction) {\n // Rebuild the transaction with the new priority fee\n const roundTwo = await buildSetDocumentsTransaction(connection, sol.txArgs[0].idl, anchorProvider, kp.publicKey, {\n app_id,\n documents: sol.txArgs[0].setDocumentData,\n delete_paths: sol.txArgs[0].deletePaths,\n txData: sol.txArgs[0].txData\n }, deduped, sol.lutKey, [ComputeBudgetProgram.setComputeUnitPrice({ microLamports }), ...sol.preInstructions], false, sol.additionalLutAddresses);\n tx = roundTwo.tx;\n blockhash = roundTwo.blockhash;\n lastValidBlockHeight = roundTwo.lastValidBlockHeight;\n tx.sign([kp]);\n tx.message.recentBlockhash = blockhash;\n }\n }\n }\n if ((opts === null || opts === void 0 ? void 0 : opts.shouldSubmitTx) === false) {\n return { signedTransaction: tx, blockNumber: 0, gasUsed: '0', data: '' };\n }\n // Submit and confirm using shared helper\n const { signature, txInfo } = await this.submitAndConfirmTransaction(tx, connection, { fetchTxInfo: true });\n return {\n transactionSignature: signature,\n blockNumber: (_a = txInfo === null || txInfo === void 0 ? void 0 : txInfo.slot) !== null && _a !== void 0 ? _a : 0,\n gasUsed: (_c = (_b = txInfo === null || txInfo === void 0 ? void 0 : txInfo.meta) === null || _b === void 0 ? void 0 : _b.fee.toString()) !== null && _c !== void 0 ? _c : '0',\n data: txInfo === null || txInfo === void 0 ? void 0 : txInfo.meta,\n };\n }\n /* ----------------------------------------------------------- */\n async getNativeMethods() {\n return { keypair: this.keypair };\n }\n}\n//# sourceMappingURL=solana-keypair-provider.js.map","import * as crypto from 'crypto';\n/**\n * Server-side OffchainAuthProvider wrapper for the poofnet environment.\n *\n * For signMessage, this generates a mock signature using SHA-256 hashing.\n * This is used for offchain transaction signing.\n */\nexport class OffchainAuthProvider {\n constructor(wrappedProvider) {\n this.wrappedProvider = wrappedProvider;\n }\n async login() {\n return this.wrappedProvider.login();\n }\n async logout() {\n return this.wrappedProvider.logout();\n }\n async restoreSession() {\n return this.wrappedProvider.restoreSession();\n }\n async getNativeMethods() {\n return this.wrappedProvider.getNativeMethods();\n }\n async signMessage(message) {\n // Delegate to wrapped provider for real signing\n return this.wrappedProvider.signMessage(message);\n }\n async signMessageMock(message) {\n // Generate mock signature (SHA-256 hash of message, base64 encoded)\n // This is used for offchain transaction signing\n const hash = crypto.createHash('sha256').update(message).digest('base64');\n return hash;\n }\n async signTransaction(transaction) {\n throw new Error('Poofnet does not support real Solana transactions. Deploy your project to mainnet to use this feature.');\n }\n /**\n * Sign and submit transaction - not supported in poofnet environment.\n * See the real providers (PhantomWalletProvider, PrivyWalletProvider, SolanaKeypairProvider)\n * for the full implementation with blockhash handling and feePayer support.\n */\n async signAndSubmitTransaction(_transaction, _feePayer) {\n throw new Error('Poofnet does not support real Solana transactions. Deploy your project to mainnet to use this feature.');\n }\n async runTransaction(evmTransactionData, solTransactionData, options) {\n return this.wrappedProvider.runTransaction(evmTransactionData, solTransactionData, options);\n }\n}\n//# sourceMappingURL=offchain-auth-provider.js.map","import { getConfig } from '@bounded-sh/core';\nimport { SolanaKeypairProvider } from './providers/solana-keypair-provider';\nimport { OffchainAuthProvider } from './providers/offchain-auth-provider';\nlet currentAuthProvider = null;\nexport const SOLANA_DEVNET_RPC_URL = \"https://idelle-8nxsep-fast-devnet.helius-rpc.com\";\nexport const SOLANA_MAINNET_RPC_URL = \"https://celestia-cegncv-fast-mainnet.helius-rpc.com\";\nexport const SURFNET_RPC_URL = \"https://surfpool.fly.dev\";\nexport async function getAuthProvider() {\n var _a;\n const config = await getConfig();\n if (currentAuthProvider) {\n // If provider exists but chain is \"offchain\" and it's not already wrapped, rewrap it\n if (config.chain === \"offchain\" && !(currentAuthProvider instanceof OffchainAuthProvider)) {\n currentAuthProvider = new OffchainAuthProvider(currentAuthProvider);\n }\n return currentAuthProvider;\n }\n currentAuthProvider = await matchAuthProvider((_a = config.rpcUrl) !== null && _a !== void 0 ? _a : null);\n // Wrap with OffchainAuthProvider for offchain chain\n if (config.chain === \"offchain\") {\n currentAuthProvider = new OffchainAuthProvider(currentAuthProvider);\n }\n return currentAuthProvider;\n}\nexport async function matchAuthProvider(rpcUrl) {\n return new SolanaKeypairProvider(rpcUrl);\n}\n//# sourceMappingURL=index.js.map","import { getAuthProvider } from './auth';\nimport { init as configInit } from '@bounded-sh/core';\nlet authProviderInstance = null;\nconst SOLANA_DEVNET_RPC_URL = \"https://api.devnet.solana.com\";\nconst SOLANA_MAINNET_RPC_URL = \"https://celestia-cegncv-fast-mainnet.helius-rpc.com\";\nconst SURFNET_RPC_URL = \"https://surfpool.fly.dev\";\nexport async function init(newConfig) {\n // Initialize config first so getAuthProvider can access it\n // Server-side skips backend init since it already has all needed config\n await configInit(Object.assign(Object.assign({}, newConfig), { isServer: true, skipBackendInit: true }));\n // Get the auth provider (which will wrap it if chain is \"offchain\")\n authProviderInstance = await getAuthProvider();\n // Update config with the wrapped provider\n await configInit(Object.assign(Object.assign({}, newConfig), { authProvider: authProviderInstance, isServer: true, skipBackendInit: true }));\n}\n//# sourceMappingURL=global.js.map","import { getIdToken as getIdTokenCore } from '@bounded-sh/core';\n// Wrapper for getIdToken - passes isServer=true for server-side usage\nexport async function getIdToken() {\n return getIdTokenCore(true);\n}\n//# sourceMappingURL=utils.js.map","var __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport { Keypair } from '@solana/web3.js';\nimport bs58 from 'bs58';\nimport { getConfig, get as coreGet, getMany as coreGetMany, set as coreSet, setMany as coreSetMany, setFile as coreSetFile, getFiles as coreGetFiles, search as coreSearch, runQuery as coreRunQuery, runQueryMany as coreRunQueryMany, runExpression as coreRunExpression, runExpressionMany as coreRunExpressionMany, count as coreCount, aggregate as coreAggregate, queryAggregate as coreQueryAggregate, subscribe as coreSubscribe, functions as coreFunctions, ServerSessionManager, } from '@bounded-sh/core';\nimport { SolanaKeypairProvider } from './auth/providers/solana-keypair-provider';\nimport { OffchainAuthProvider } from './auth/providers/offchain-auth-provider';\n/* ------------------------------------------------------------------ */\n/* Keypair parsing */\n/* ------------------------------------------------------------------ */\nfunction parseKeypair(secret) {\n const trimmed = secret.trim();\n try {\n const secretKey = trimmed.startsWith('[')\n ? Uint8Array.from(JSON.parse(trimmed))\n : bs58.decode(trimmed);\n return Keypair.fromSecretKey(secretKey);\n }\n catch (_a) {\n throw new Error('Invalid keypair: must be base58 or JSON array.');\n }\n}\n/**\n * Whether a JWT is expired or within 60s of expiry (or unparseable). Used to\n * decide if the wallet should re-sign for a fresh token. Server-only (Node\n * Buffer); a keypair-backed session can always re-sign, so this is safe to be\n * conservative about.\n */\nfunction jwtExpiringSoon(token) {\n if (!token)\n return true;\n try {\n const part = token.split('.')[1];\n const json = Buffer.from(part.replace(/-/g, '+').replace(/_/g, '/'), 'base64').toString('utf8');\n const exp = JSON.parse(json).exp;\n if (!exp)\n return false;\n return Date.now() > exp * 1000 - 60000;\n }\n catch (_a) {\n return true;\n }\n}\n/* ------------------------------------------------------------------ */\n/* WalletClient */\n/* ------------------------------------------------------------------ */\nexport class WalletClient {\n constructor(provider, sessionManager, address) {\n this.provider = provider;\n this.sessionManager = sessionManager;\n this.address = address;\n }\n /* ---- Auth override helpers ---- */\n buildOverrides() {\n return {\n authProvider: this.provider,\n _getAuthHeaders: async () => {\n let s = await this.sessionManager.getSession();\n // Keypair-backed session: if the cached token is expired/near-expiry,\n // re-sign for a fresh one (we always hold the key). Keeps long-lived WS\n // subscriptions authenticated across reconnects, and stops one-shot reads\n // from sending a stale token.\n if (jwtExpiringSoon(s.idToken)) {\n this.sessionManager.clearSession();\n s = await this.sessionManager.getSession();\n }\n return { Authorization: `Bearer ${s.idToken}` };\n },\n _clearAuth: async () => {\n this.sessionManager.clearSession();\n },\n _walletAddress: this.address,\n };\n }\n /** Strip Authorization from caller headers to prevent overriding wallet token */\n sanitizeHeaders(headers) {\n if (!headers)\n return undefined;\n const _a = headers, { Authorization, authorization } = _a, rest = __rest(_a, [\"Authorization\", \"authorization\"]);\n return Object.keys(rest).length > 0 ? rest : undefined;\n }\n mergeSetOverrides(opts) {\n var _a;\n const ovr = this.buildOverrides();\n return Object.assign(Object.assign({}, opts), { _overrides: Object.assign(Object.assign({}, opts === null || opts === void 0 ? void 0 : opts._overrides), { headers: this.sanitizeHeaders((_a = opts === null || opts === void 0 ? void 0 : opts._overrides) === null || _a === void 0 ? void 0 : _a.headers), authProvider: ovr.authProvider, _getAuthHeaders: ovr._getAuthHeaders, _clearAuth: ovr._clearAuth }) });\n }\n mergeReadOverrides(existing) {\n const ovr = this.buildOverrides();\n return Object.assign(Object.assign({}, existing), { headers: this.sanitizeHeaders(existing === null || existing === void 0 ? void 0 : existing.headers), _getAuthHeaders: ovr._getAuthHeaders, _clearAuth: ovr._clearAuth, _walletAddress: ovr._walletAddress });\n }\n /* ---- Data operations ---- */\n async set(path, document, options) {\n return coreSet(path, document, this.mergeSetOverrides(options));\n }\n async setMany(many, options) {\n return coreSetMany(many, this.mergeSetOverrides(options));\n }\n async setFile(path, file, options) {\n return coreSetFile(path, file, { _overrides: this.mergeReadOverrides(options === null || options === void 0 ? void 0 : options._overrides) });\n }\n async get(path, opts) {\n return coreGet(path, Object.assign(Object.assign({}, opts), { _overrides: this.mergeReadOverrides(opts === null || opts === void 0 ? void 0 : opts._overrides) }));\n }\n async getMany(paths, opts) {\n return coreGetMany(paths, Object.assign(Object.assign({}, opts), { _overrides: this.mergeReadOverrides() }));\n }\n async getFiles(path, options) {\n return coreGetFiles(path, { _overrides: this.mergeReadOverrides(options === null || options === void 0 ? void 0 : options._overrides) });\n }\n async search(path, query, opts = {}) {\n return coreSearch(path, query, Object.assign(Object.assign({}, opts), { _overrides: this.mergeReadOverrides(opts === null || opts === void 0 ? void 0 : opts._overrides) }));\n }\n async runQuery(absolutePath, queryName, queryArgs, opts) {\n return coreRunQuery(absolutePath, queryName, queryArgs, Object.assign(Object.assign({}, opts), { _overrides: this.mergeReadOverrides(opts === null || opts === void 0 ? void 0 : opts._overrides) }));\n }\n async runQueryMany(many, opts) {\n return coreRunQueryMany(many, Object.assign(Object.assign({}, opts), { _overrides: this.mergeReadOverrides(opts === null || opts === void 0 ? void 0 : opts._overrides) }));\n }\n async runExpression(expression, queryArgs, options) {\n return coreRunExpression(expression, queryArgs, Object.assign(Object.assign({}, options), { _overrides: this.mergeReadOverrides(options === null || options === void 0 ? void 0 : options._overrides) }));\n }\n async runExpressionMany(many) {\n const ovr = this.mergeReadOverrides();\n return coreRunExpressionMany(many.map(m => (Object.assign(Object.assign({}, m), { _overrides: ovr }))));\n }\n async count(path, opts = {}) {\n return coreCount(path, Object.assign(Object.assign({}, opts), { _overrides: this.mergeReadOverrides(opts === null || opts === void 0 ? void 0 : opts._overrides) }));\n }\n async aggregate(path, operation, opts = {}) {\n return coreAggregate(path, operation, Object.assign(Object.assign({}, opts), { _overrides: this.mergeReadOverrides(opts === null || opts === void 0 ? void 0 : opts._overrides) }));\n }\n async queryAggregate(path, spec, opts = {}) {\n return coreQueryAggregate(path, spec, Object.assign(Object.assign({}, opts), { _overrides: this.mergeReadOverrides(opts === null || opts === void 0 ? void 0 : opts._overrides) }));\n }\n /**\n * Subscribe to real-time updates as THIS wallet's identity. Unlike the global\n * `subscribe`, this needs no `BOUNDED_PRIVATE_KEY` env var — the WS connection\n * authenticates with the wallet's own session (so read rules see the right\n * principal), and is scoped to its own connection so it never crosses another\n * identity. Accepts a bare callback or `{ onData, onError, filter, ... }`.\n * Returns an async unsubscribe.\n */\n async subscribe(path, options) {\n const opts = typeof options === 'function' ? { onData: options } : Object.assign({}, options);\n const ovr = this.buildOverrides();\n return coreSubscribe(path, Object.assign(Object.assign({}, opts), { _overrides: {\n _getAuthHeaders: ovr._getAuthHeaders,\n _clearAuth: ovr._clearAuth,\n _walletAddress: ovr._walletAddress,\n } }));\n }\n /**\n * Invoke a deployed Bounded Function AS this wallet's identity. Unlike the\n * top-level `functions.invoke`, this needs no `BOUNDED_PRIVATE_KEY` env var —\n * the dispatcher sees the wallet's verified session, so the function's `auth`\n * rule + `ctx.user` reflect this client. Returns the function's JSON; throws\n * `FunctionInvokeError` on 401/403/404/503.\n */\n async invoke(name, args = {}, opts = {}) {\n const ovr = this.buildOverrides();\n return coreFunctions.invoke(name, args, Object.assign(Object.assign({}, opts), { _overrides: { _getAuthHeaders: ovr._getAuthHeaders } }));\n }\n /* ---- Signing operations (use provider directly) ---- */\n async signMessage(message) {\n return this.provider.signMessage(message);\n }\n async signTransaction(transaction) {\n return this.provider.signTransaction(transaction);\n }\n async signAndSubmitTransaction(transaction, feePayer) {\n return this.provider.signAndSubmitTransaction(transaction, feePayer);\n }\n}\n/**\n * Create a self-contained wallet client bound to a specific keypair.\n * Each client has its own auth session — no global state is mutated.\n *\n * @example\n * ```ts\n * const vault = await createWalletClient({ keypair: process.env.VAULT_KEY });\n * await vault.set('markets/123', data);\n * ```\n */\nexport async function createWalletClient(opts) {\n var _a;\n const kp = parseKeypair(opts.keypair);\n const config = await getConfig();\n let provider = new SolanaKeypairProvider((_a = config.rpcUrl) !== null && _a !== void 0 ? _a : null, kp);\n if (config.chain === 'offchain') {\n provider = new OffchainAuthProvider(provider);\n }\n const sessionManager = ServerSessionManager.forKeypair(kp);\n // Eagerly authenticate so failures surface immediately\n await sessionManager.getSession();\n return new WalletClient(provider, sessionManager, kp.publicKey.toBase58());\n}\n//# sourceMappingURL=wallet-client.js.map","// ---------------------------------------------------------------------------\n// webhooks.ts -- Verify signed inbound mutation webhooks.\n//\n// The Tarobase realtime worker fires outbound webhooks for declared\n// collections after a mutation commits, signed with a platform Ed25519 private\n// key. This module verifies those signatures on the receiving server.\n//\n// verifyWebhook():\n// 1. Fetches the platform's hosted public keys (well-known endpoint),\n// cached in-memory with a TTL.\n// 2. Picks the key matching the X-Bounded-Key-Id header.\n// 3. Verifies the Ed25519 signature (X-Bounded-Signature) over the RAW body.\n// 4. Checks the X-Bounded-Timestamp is within an allowed skew.\n// 5. Returns the parsed, typed payload — or throws.\n//\n// Verification uses WebCrypto (globalThis.crypto.subtle), available natively in\n// Node 18+, Bun, Deno, Cloudflare Workers, and modern browsers.\n// ---------------------------------------------------------------------------\nimport { getWebhookKeysUrl } from \"@bounded-sh/core\";\n// Default to PRODUCTION keys so an omitted keysUrl is production-safe (audit\n// SDK LOW-7). Staging receivers must pass keysUrl explicitly.\nexport const DEFAULT_WEBHOOK_KEYS_URL = \"https://realtime.bounded.sh/.well-known/bounded-webhook-keys.json\";\nconst DEFAULT_MAX_SKEW_SECONDS = 300;\nconst DEFAULT_CACHE_TTL_MS = 300000;\nexport class WebhookVerificationError extends Error {\n constructor(message) {\n super(message);\n this.name = \"WebhookVerificationError\";\n }\n}\nfunction getHeader(headers, name) {\n var _a;\n if (headers && typeof headers.get === \"function\") {\n return headers.get(name);\n }\n const lower = name.toLowerCase();\n const obj = headers;\n for (const key of Object.keys(obj)) {\n if (key.toLowerCase() === lower) {\n const value = obj[key];\n return Array.isArray(value) ? (_a = value[0]) !== null && _a !== void 0 ? _a : null : value !== null && value !== void 0 ? value : null;\n }\n }\n return null;\n}\n// ---------------------------------------------------------------------------\n// Base64\n// ---------------------------------------------------------------------------\nfunction base64ToBytes(b64) {\n const binary = typeof Buffer !== \"undefined\"\n ? Buffer.from(b64, \"base64\").toString(\"binary\")\n : atob(b64);\n const buffer = new ArrayBuffer(binary.length);\n const bytes = new Uint8Array(buffer);\n for (let i = 0; i < binary.length; i++)\n bytes[i] = binary.charCodeAt(i);\n return bytes;\n}\nfunction utf8Bytes(text) {\n const encoded = new TextEncoder().encode(text);\n const buffer = new ArrayBuffer(encoded.length);\n const bytes = new Uint8Array(buffer);\n bytes.set(encoded);\n return bytes;\n}\nconst keyCache = new Map();\n/** Clear the in-memory key cache (mainly for tests). */\nexport function clearWebhookKeyCache() {\n keyCache.clear();\n}\nasync function loadKeys(keysUrl, cacheTtlMs, fetchImpl, now) {\n const cached = keyCache.get(keysUrl);\n if (cached && cached.expiresAt > now()) {\n return cached.keys;\n }\n let res;\n try {\n res = await fetchImpl(keysUrl);\n }\n catch (err) {\n throw new WebhookVerificationError(`Failed to fetch webhook keys from ${keysUrl}: ${err.message}`);\n }\n if (!res.ok) {\n throw new WebhookVerificationError(`Failed to fetch webhook keys from ${keysUrl}: HTTP ${res.status}`);\n }\n const body = (await res.json());\n if (!body || !Array.isArray(body.keys)) {\n throw new WebhookVerificationError(`Webhook keys endpoint ${keysUrl} returned an invalid payload.`);\n }\n keyCache.set(keysUrl, { keys: body.keys, expiresAt: now() + cacheTtlMs });\n return body.keys;\n}\n// ---------------------------------------------------------------------------\n// In-memory replay store (single-process receivers)\n// ---------------------------------------------------------------------------\n/**\n * A simple in-memory {@link WebhookReplayStore}. Records seen event ids until\n * their skew-window expiry and lazily evicts expired entries. Suitable for a\n * single-process receiver; use a shared store (Redis, KV, a DB unique\n * constraint) for multi-instance deployments.\n */\nexport class InMemoryReplayStore {\n constructor() {\n this.seen = new Map();\n }\n checkAndRecord(id, expiresAtMs) {\n const now = Date.now();\n // Opportunistic eviction of expired entries to bound memory.\n if (this.seen.size > 0) {\n for (const [key, exp] of this.seen) {\n if (exp <= now)\n this.seen.delete(key);\n }\n }\n const existing = this.seen.get(id);\n if (existing !== undefined && existing > now) {\n return true; // replay\n }\n this.seen.set(id, expiresAtMs);\n return false;\n }\n /** Clear all recorded ids (mainly for tests). */\n clear() {\n this.seen.clear();\n }\n}\n// ---------------------------------------------------------------------------\n// verifyWebhook\n// ---------------------------------------------------------------------------\n/**\n * Verify a signed inbound webhook and return its typed payload.\n *\n * @param rawBody The exact raw request body string the platform signed. Must be\n * the unparsed bytes — re-serializing parsed JSON may not match byte-for-byte.\n * @param headers The inbound request headers (a Headers instance or a plain\n * object; case-insensitive).\n * @param opts Optional overrides (keys URL, skew, cache TTL, fetch).\n * @returns The parsed, validated {@link WebhookPayload}.\n * @throws {WebhookVerificationError} if anything fails verification.\n */\nexport async function verifyWebhook(rawBody, headers, opts = {}) {\n var _a, _b, _c, _d, _e, _f;\n // Resolution order: explicit opts.keysUrl > the configured Bounded network's\n // hosted keys (so a staging receiver verifies staging-signed deliveries\n // without passing keysUrl) > the production default (fail-closed when the\n // network is unknown — audit SDK LOW-7).\n const keysUrl = (_b = (_a = opts.keysUrl) !== null && _a !== void 0 ? _a : getWebhookKeysUrl()) !== null && _b !== void 0 ? _b : DEFAULT_WEBHOOK_KEYS_URL;\n const maxSkew = (_c = opts.maxSkewSeconds) !== null && _c !== void 0 ? _c : DEFAULT_MAX_SKEW_SECONDS;\n const cacheTtlMs = (_d = opts.cacheTtlMs) !== null && _d !== void 0 ? _d : DEFAULT_CACHE_TTL_MS;\n const fetchImpl = (_e = opts.fetchImpl) !== null && _e !== void 0 ? _e : globalThis.fetch;\n const now = (_f = opts.now) !== null && _f !== void 0 ? _f : Date.now;\n if (typeof fetchImpl !== \"function\") {\n throw new WebhookVerificationError(\"No fetch implementation available; pass opts.fetchImpl.\");\n }\n const signature = getHeader(headers, \"X-Bounded-Signature\");\n const keyId = getHeader(headers, \"X-Bounded-Key-Id\");\n const timestampHeader = getHeader(headers, \"X-Bounded-Timestamp\");\n if (!signature)\n throw new WebhookVerificationError(\"Missing X-Bounded-Signature header.\");\n if (!keyId)\n throw new WebhookVerificationError(\"Missing X-Bounded-Key-Id header.\");\n if (!timestampHeader)\n throw new WebhookVerificationError(\"Missing X-Bounded-Timestamp header.\");\n const headerTimestamp = Number(timestampHeader);\n if (!Number.isFinite(headerTimestamp)) {\n throw new WebhookVerificationError(\"Invalid X-Bounded-Timestamp header.\");\n }\n // Resolve the signing key by id.\n const keys = await loadKeys(keysUrl, cacheTtlMs, fetchImpl, now);\n let key = keys.find((k) => k.id === keyId);\n // Cache-miss tolerance: a freshly-rotated key may not be cached yet. Force a\n // single refresh before giving up.\n if (!key) {\n keyCache.delete(keysUrl);\n const refreshed = await loadKeys(keysUrl, cacheTtlMs, fetchImpl, now);\n key = refreshed.find((k) => k.id === keyId);\n }\n if (!key) {\n throw new WebhookVerificationError(`No public key found for key id \"${keyId}\".`);\n }\n if (key.alg !== \"ed25519\") {\n throw new WebhookVerificationError(`Unsupported key algorithm \"${key.alg}\".`);\n }\n // Verify the Ed25519 signature over the raw body.\n const subtle = (globalThis.crypto && globalThis.crypto.subtle);\n if (!subtle) {\n throw new WebhookVerificationError(\"WebCrypto (crypto.subtle) is not available.\");\n }\n let cryptoKey;\n try {\n cryptoKey = await subtle.importKey(\"raw\", base64ToBytes(key.publicKey), { name: \"Ed25519\" }, false, [\"verify\"]);\n }\n catch (err) {\n throw new WebhookVerificationError(`Failed to import Ed25519 public key: ${err.message}`);\n }\n const ok = await subtle.verify({ name: \"Ed25519\" }, cryptoKey, base64ToBytes(signature), utf8Bytes(rawBody));\n if (!ok) {\n throw new WebhookVerificationError(\"Webhook signature verification failed.\");\n }\n // Parse and shallow-validate the payload.\n let payload;\n try {\n payload = JSON.parse(rawBody);\n }\n catch (_g) {\n throw new WebhookVerificationError(\"Webhook body is not valid JSON.\");\n }\n if (!payload ||\n typeof payload.id !== \"string\" ||\n typeof payload.appId !== \"string\" ||\n typeof payload.path !== \"string\" ||\n (payload.operation !== \"create\" &&\n payload.operation !== \"update\" &&\n payload.operation !== \"delete\") ||\n typeof payload.timestamp !== \"number\" ||\n !Number.isFinite(payload.timestamp)) {\n throw new WebhookVerificationError(\"Webhook payload is missing required fields.\");\n }\n // Replay protection: the timestamp used for the skew window MUST be the SIGNED\n // payload.timestamp, not the unsigned X-Bounded-Timestamp header. An attacker\n // can swap the header freely without breaking the Ed25519 signature, so the\n // header alone is no replay bound. We also require the header to equal the\n // signed value so the (unsigned) header cannot diverge from what was signed.\n if (headerTimestamp !== payload.timestamp) {\n throw new WebhookVerificationError(\"X-Bounded-Timestamp header does not match the signed payload timestamp.\");\n }\n const nowSeconds = Math.floor(now() / 1000);\n if (Math.abs(nowSeconds - payload.timestamp) > maxSkew) {\n throw new WebhookVerificationError(`Webhook timestamp outside allowed skew of ${maxSkew}s (delta ${Math.abs(nowSeconds - payload.timestamp)}s).`);\n }\n // Optional nonce/replay cache: reject a previously-seen event id within the\n // skew window. The signed payload.id uniquely identifies the delivery.\n if (opts.replayStore) {\n const expiresAtMs = (payload.timestamp + maxSkew) * 1000;\n const replayed = await opts.replayStore.checkAndRecord(payload.id, expiresAtMs);\n if (replayed) {\n throw new WebhookVerificationError(`Webhook replay detected for event id \"${payload.id}\".`);\n }\n }\n return payload;\n}\n//# sourceMappingURL=webhooks.js.map"],"names":["Buffer","configInit","getIdTokenCore","this","coreSet","coreSetMany","coreSetFile","coreGet","coreGetMany","coreGetFiles","coreSearch","coreRunQuery","coreRunQueryMany","coreRunExpression","coreRunExpressionMany","coreCount","coreAggregate","coreQueryAggregate","coreSubscribe","coreFunctions"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.mjs","sources":["../.rollup-tmp/auth/providers/solana-keypair-provider.js","../.rollup-tmp/auth/providers/offchain-auth-provider.js","../.rollup-tmp/auth/index.js","../.rollup-tmp/global.js","../.rollup-tmp/utils.js","../.rollup-tmp/wallet-client.js","../.rollup-tmp/webhooks.js"],"sourcesContent":["import { Buffer } from 'buffer';\nimport { ComputeBudgetProgram, Connection, Keypair, VersionedTransaction } from '@solana/web3.js';\nimport * as anchor from '@coral-xyz/anchor';\nimport nacl from 'tweetnacl';\nimport bs58 from 'bs58';\nimport { convertRemainingAccounts, buildSetDocumentsTransaction, } from '@bounded-sh/core';\nimport { SOLANA_DEVNET_RPC_URL, SOLANA_MAINNET_RPC_URL, SURFNET_RPC_URL } from '..';\n/* ------------------------------------------------------------- *\n * KEYPAIR ENV-VAR (only consulted when no explicit keypair is given)\n *\n * Most code should pass a keypair explicitly — `createWalletClient({ keypair })`\n * does. The env var is the fallback for the global `set/get` path. `BOUNDED_*`\n * is the canonical name (it matches the CLI's `BOUNDED_PRIVATE_KEY`).\n * ------------------------------------------------------------- */\nconst ENV_VARS = ['BOUNDED_PRIVATE_KEY']; // base-58 or JSON array\nfunction loadKeypairFromEnv() {\n var _a;\n let secret;\n let found;\n for (const name of ENV_VARS) {\n const v = (_a = process === null || process === void 0 ? void 0 : process.env) === null || _a === void 0 ? void 0 : _a[name];\n if (v) {\n secret = v;\n found = name;\n break;\n }\n }\n if (!secret) {\n throw new Error(`No server keypair: set ${ENV_VARS[0]} to a base58 secret key (or JSON array), ` +\n `or pass one explicitly via createWalletClient({ keypair }).`);\n }\n try {\n const secretKey = secret.trim().startsWith('[')\n ? Uint8Array.from(JSON.parse(secret))\n : bs58.decode(secret.trim());\n return Keypair.fromSecretKey(secretKey);\n }\n catch (err) {\n throw new Error(`Unable to parse ${found}. Ensure it is valid base58 or a JSON array.`);\n }\n}\n/* ──────────────────────────────────────────────────────────\n * Helper – fetch getPriorityFeeEstimate\n * ──────────────────────────────────────────────────────── */\nasync function fetchPriorityFee(rpcEndpoint, rawUnsignedTxBuffer) {\n var _a, _b;\n try {\n const res = await fetch(rpcEndpoint, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({\n jsonrpc: \"2.0\",\n id: \"1\",\n method: \"getPriorityFeeEstimate\",\n params: [{\n transaction: bs58.encode(rawUnsignedTxBuffer), options: {\n recommended: true\n }\n }]\n })\n });\n const data = await res.json();\n const fee = (_b = (_a = data === null || data === void 0 ? void 0 : data.result) === null || _a === void 0 ? void 0 : _a.priorityFeeEstimate) !== null && _b !== void 0 ? _b : null;\n console.log(\"Got fee from Helius\", fee);\n if (fee != null && fee > 0) {\n return Math.ceil(Number(fee) * 1.2);\n }\n else {\n console.log(\"No fee from Helius, using default 10000\");\n return Math.ceil(10000 * 1.2);\n }\n }\n catch (err) {\n console.warn(\"Priority‑fee estimate failed:\", err);\n return Math.ceil(10000 * 1.2);\n }\n}\nexport class SolanaKeypairProvider {\n constructor(networkUrl = null, keypair) {\n this.networkUrl = networkUrl;\n this.explicitKeypair = keypair;\n }\n get keypair() {\n var _a, _b;\n return ((_a = this.cachedKeypair) !== null && _a !== void 0 ? _a : (this.cachedKeypair = (_b = this.explicitKeypair) !== null && _b !== void 0 ? _b : loadKeypairFromEnv()));\n }\n /* ----------------------------------------------------------- *\n * (Auth stubs – fill in later if needed)\n * ----------------------------------------------------------- */\n async login() { throw new Error('Not implemented'); }\n async restoreSession() { throw new Error('Not implemented'); }\n async logout() { throw new Error('Not implemented'); }\n /* ----------------------------------------------------------- *\n * Sign arbitrary message\n * ----------------------------------------------------------- */\n async signMessage(message) {\n const sig = nacl.sign.detached(new TextEncoder().encode(message), this.keypair.secretKey);\n return Buffer.from(sig).toString('base64');\n }\n /* ----------------------------------------------------------- *\n * Sign transaction\n * ----------------------------------------------------------- */\n async signTransaction(transaction) {\n // Use duck typing instead of instanceof to handle multiple @solana/web3.js versions\n const isLegacyTransaction = 'recentBlockhash' in transaction && !('message' in transaction && 'staticAccountKeys' in transaction.message);\n if (isLegacyTransaction) {\n transaction.partialSign(this.keypair);\n }\n else {\n transaction.sign([this.keypair]);\n }\n return transaction;\n }\n /**\n * Signs and submits a Solana transaction to the network.\n *\n * This method handles blockhash and transaction confirmation automatically - you do NOT need to\n * set recentBlockhash or lastValidBlockHeight on the transaction before calling this method.\n * The network/RPC URL is derived from the provider's configuration (set during initialization).\n *\n * @param transaction - The transaction to sign and submit (Transaction or VersionedTransaction)\n * @param feePayer - Optional fee payer public key. If not provided and the transaction doesn't\n * already have a feePayer set, the keypair's public key will be used.\n * Useful for co-signing scenarios where a different account pays the fees.\n * @returns The transaction signature\n */\n async signAndSubmitTransaction(transaction, feePayer) {\n // 1. Get RPC URL and create connection\n const rpcUrl = this.getRpcUrl();\n const connection = new Connection(rpcUrl, 'confirmed');\n // 2. Get fresh blockhash and set it on the transaction before signing\n const { blockhash, lastValidBlockHeight } = await connection.getLatestBlockhash('confirmed');\n // Use duck typing instead of instanceof to handle multiple @solana/web3.js versions\n const isLegacyTransaction = 'recentBlockhash' in transaction && !('message' in transaction && 'staticAccountKeys' in transaction.message);\n if (isLegacyTransaction) {\n const legacyTx = transaction;\n legacyTx.recentBlockhash = blockhash;\n legacyTx.lastValidBlockHeight = lastValidBlockHeight;\n // Set feePayer if not already set\n if (!legacyTx.feePayer) {\n legacyTx.feePayer = feePayer !== null && feePayer !== void 0 ? feePayer : this.keypair.publicKey;\n }\n }\n else {\n // VersionedTransaction\n const versionedTx = transaction;\n versionedTx.message.recentBlockhash = blockhash;\n // Note: VersionedTransaction feePayer is set in the message at creation time\n // and cannot be modified after creation\n }\n // 3. Sign the transaction\n const signedTx = await this.signTransaction(transaction);\n // 4. Submit and confirm using shared helper\n const { signature } = await this.submitAndConfirmTransaction(signedTx, connection);\n return signature;\n }\n /* ----------------------------------------------------------- *\n * Private Helpers\n * ----------------------------------------------------------- */\n /**\n * Submits a signed transaction and waits for confirmation using polling.\n * Shared by both signAndSubmitTransaction and runTransactionInner.\n */\n async submitAndConfirmTransaction(signedTx, connection, options) {\n var _a, _b, _c, _d;\n const sig = await connection.sendRawTransaction(signedTx.serialize(), {\n preflightCommitment: 'confirmed'\n });\n // Wait for confirmation using polling\n const startTime = Date.now();\n const timeoutMs = 10 * 1000; // 10 seconds\n while (true) {\n const st = await connection.getSignatureStatus(sig);\n if ((_a = st === null || st === void 0 ? void 0 : st.value) === null || _a === void 0 ? void 0 : _a.err) {\n // Transaction confirmed but failed on-chain — fetch logs for a readable error\n const txInfo = await connection.getTransaction(sig, {\n maxSupportedTransactionVersion: 0,\n commitment: 'confirmed'\n });\n const logMessages = (_b = txInfo === null || txInfo === void 0 ? void 0 : txInfo.meta) === null || _b === void 0 ? void 0 : _b.logMessages;\n const errorMessage = logMessages ? JSON.stringify(logMessages) : JSON.stringify((_c = st === null || st === void 0 ? void 0 : st.value) === null || _c === void 0 ? void 0 : _c.err);\n throw new Error(`Transaction failed: ${errorMessage}`);\n }\n if (((_d = st === null || st === void 0 ? void 0 : st.value) === null || _d === void 0 ? void 0 : _d.confirmationStatus) === 'confirmed') {\n break;\n }\n // Check if we've exceeded the timeout\n if (Date.now() - startTime > timeoutMs) {\n throw new Error(`Transaction confirmation timeout after ${timeoutMs / 1000} seconds`);\n }\n await new Promise(resolve => setTimeout(resolve, 500));\n }\n // Optionally fetch transaction info\n let txInfo = null;\n if (options === null || options === void 0 ? void 0 : options.fetchTxInfo) {\n txInfo = await connection.getTransaction(sig, {\n maxSupportedTransactionVersion: 0,\n commitment: 'confirmed'\n });\n }\n return { signature: sig, txInfo };\n }\n getRpcUrl(network) {\n if (this.networkUrl) {\n return this.networkUrl;\n }\n if (network === 'solana_devnet') {\n return SOLANA_DEVNET_RPC_URL;\n }\n else if (network === 'solana_mainnet') {\n return SOLANA_MAINNET_RPC_URL;\n }\n else if (network === 'surfnet') {\n return SURFNET_RPC_URL;\n }\n return SOLANA_MAINNET_RPC_URL; // default to mainnet\n }\n /* ----------------------------------------------------------- *\n * Transaction runner\n * ----------------------------------------------------------- */\n async runTransaction(_evm, sol, opts) {\n if (!sol)\n throw new Error('Solana transaction data required');\n const kp = this.keypair;\n // Helper for duck typing - checks if transaction is legacy Transaction vs VersionedTransaction\n const isLegacyTx = (tx) => {\n return 'recentBlockhash' in tx && !('message' in tx && 'staticAccountKeys' in tx.message);\n };\n const wallet = {\n publicKey: kp.publicKey,\n signTransaction: async (tx) => {\n // Use duck typing instead of instanceof to handle multiple @solana/web3.js versions\n if (isLegacyTx(tx)) {\n tx.partialSign(kp);\n }\n else {\n tx.sign([kp]);\n }\n return tx;\n },\n signAllTransactions: async (txs) => txs.map((t) => {\n // Use duck typing instead of instanceof to handle multiple @solana/web3.js versions\n if (isLegacyTx(t)) {\n t.partialSign(kp);\n }\n else {\n t.sign([kp]);\n }\n return t;\n }),\n };\n /* de-dupe remaining accounts */\n const deduped = (() => {\n const fin = [];\n for (const acc of convertRemainingAccounts(sol.txArgs[0].remainingAccounts)) {\n const ex = fin.find((x) => x.pubkey.equals(acc.pubkey));\n if (ex) {\n ex.isSigner || (ex.isSigner = acc.isSigner);\n ex.isWritable || (ex.isWritable = acc.isWritable);\n }\n else\n fin.push(acc);\n }\n return fin;\n })();\n let retries = 0;\n let didPass = false;\n let delay = 1000;\n let toReturn = null;\n let errorMessage = \"\";\n while (retries < 5) {\n try {\n toReturn = await this.runTransactionInner(sol, opts, wallet, kp, deduped);\n didPass = true;\n break;\n }\n catch (error) {\n console.log(\"Error building and sending transaction on retry:\", retries, error);\n await new Promise(resolve => setTimeout(resolve, delay));\n // Exponential backoff\n delay *= 1.5;\n retries++;\n errorMessage = error.message || JSON.stringify(error, null, 2);\n }\n }\n if (!didPass) {\n throw new Error(`Failed to send transaction after 5 retries: ${errorMessage}`);\n }\n return toReturn;\n }\n async runTransactionInner(sol, opts, wallet, kp, deduped) {\n var _a, _b, _c;\n let rpcUrl = this.getRpcUrl(sol.network);\n const connection = new Connection(rpcUrl, 'confirmed');\n const anchorProvider = new anchor.AnchorProvider(connection, wallet, anchor.AnchorProvider.defaultOptions());\n const app_id = sol.appId;\n if (!app_id)\n throw new Error('app_id missing');\n // When the server has co-signed a transaction (CPI attestation),\n // deserialize it and just add the wallet signature instead of\n // building from components.\n let tx;\n let blockhash;\n let lastValidBlockHeight;\n if (sol.signedTransaction) {\n tx = VersionedTransaction.deserialize(Buffer.from(sol.signedTransaction, 'base64'));\n const latestBlockhash = await connection.getLatestBlockhash('confirmed');\n blockhash = latestBlockhash.blockhash;\n lastValidBlockHeight = latestBlockhash.lastValidBlockHeight;\n }\n else {\n const result = await buildSetDocumentsTransaction(connection, sol.txArgs[0].idl, anchorProvider, kp.publicKey, {\n app_id,\n documents: sol.txArgs[0].setDocumentData,\n delete_paths: sol.txArgs[0].deletePaths,\n txData: sol.txArgs[0].txData\n }, deduped, sol.lutKey, sol.preInstructions, false, sol.additionalLutAddresses);\n tx = result.tx;\n blockhash = result.blockhash;\n lastValidBlockHeight = result.lastValidBlockHeight;\n }\n // Helper for duck typing - checks if transaction is legacy Transaction vs VersionedTransaction\n const isLegacyTx = (t) => {\n return 'recentBlockhash' in t && !('message' in t && 'staticAccountKeys' in t.message);\n };\n // Refresh blockhash and lastValidBlockHeight\n // Use duck typing instead of instanceof to handle multiple @solana/web3.js versions\n if (isLegacyTx(tx)) {\n tx.partialSign(kp);\n tx.recentBlockhash = blockhash;\n tx.lastValidBlockHeight = lastValidBlockHeight;\n tx.feePayer = kp.publicKey;\n }\n else {\n tx.sign([kp]);\n tx.message.recentBlockhash = blockhash;\n }\n // 3️⃣ Optional priority‑fee instruction\n const rawUnsigned = tx.serialize({ requireAllSignatures: false });\n const microLamports = await fetchPriorityFee(connection.rpcEndpoint, rawUnsigned);\n if (microLamports != null) {\n // Use duck typing instead of instanceof to handle multiple @solana/web3.js versions\n if (isLegacyTx(tx)) {\n tx.instructions.unshift(ComputeBudgetProgram.setComputeUnitPrice({ microLamports }));\n tx.partialSign(kp);\n }\n else {\n // For pre-signed (attestation) transactions, we can't rebuild — skip priority fee\n if (!sol.signedTransaction) {\n // Rebuild the transaction with the new priority fee\n const roundTwo = await buildSetDocumentsTransaction(connection, sol.txArgs[0].idl, anchorProvider, kp.publicKey, {\n app_id,\n documents: sol.txArgs[0].setDocumentData,\n delete_paths: sol.txArgs[0].deletePaths,\n txData: sol.txArgs[0].txData\n }, deduped, sol.lutKey, [ComputeBudgetProgram.setComputeUnitPrice({ microLamports }), ...sol.preInstructions], false, sol.additionalLutAddresses);\n tx = roundTwo.tx;\n blockhash = roundTwo.blockhash;\n lastValidBlockHeight = roundTwo.lastValidBlockHeight;\n tx.sign([kp]);\n tx.message.recentBlockhash = blockhash;\n }\n }\n }\n if ((opts === null || opts === void 0 ? void 0 : opts.shouldSubmitTx) === false) {\n return { signedTransaction: tx, blockNumber: 0, gasUsed: '0', data: '' };\n }\n // Submit and confirm using shared helper\n const { signature, txInfo } = await this.submitAndConfirmTransaction(tx, connection, { fetchTxInfo: true });\n return {\n transactionSignature: signature,\n blockNumber: (_a = txInfo === null || txInfo === void 0 ? void 0 : txInfo.slot) !== null && _a !== void 0 ? _a : 0,\n gasUsed: (_c = (_b = txInfo === null || txInfo === void 0 ? void 0 : txInfo.meta) === null || _b === void 0 ? void 0 : _b.fee.toString()) !== null && _c !== void 0 ? _c : '0',\n data: txInfo === null || txInfo === void 0 ? void 0 : txInfo.meta,\n };\n }\n /* ----------------------------------------------------------- */\n async getNativeMethods() {\n return { keypair: this.keypair };\n }\n}\n//# sourceMappingURL=solana-keypair-provider.js.map","import * as crypto from 'crypto';\n/**\n * Server-side OffchainAuthProvider wrapper for the poofnet environment.\n *\n * For signMessage, this generates a mock signature using SHA-256 hashing.\n * This is used for offchain transaction signing.\n */\nexport class OffchainAuthProvider {\n constructor(wrappedProvider) {\n this.wrappedProvider = wrappedProvider;\n }\n async login() {\n return this.wrappedProvider.login();\n }\n async logout() {\n return this.wrappedProvider.logout();\n }\n async restoreSession() {\n return this.wrappedProvider.restoreSession();\n }\n async getNativeMethods() {\n return this.wrappedProvider.getNativeMethods();\n }\n async signMessage(message) {\n // Delegate to wrapped provider for real signing\n return this.wrappedProvider.signMessage(message);\n }\n async signMessageMock(message) {\n // Generate mock signature (SHA-256 hash of message, base64 encoded)\n // This is used for offchain transaction signing\n const hash = crypto.createHash('sha256').update(message).digest('base64');\n return hash;\n }\n async signTransaction(transaction) {\n throw new Error('Poofnet does not support real Solana transactions. Deploy your project to mainnet to use this feature.');\n }\n /**\n * Sign and submit transaction - not supported in poofnet environment.\n * See the real providers (PhantomWalletProvider, PrivyWalletProvider, SolanaKeypairProvider)\n * for the full implementation with blockhash handling and feePayer support.\n */\n async signAndSubmitTransaction(_transaction, _feePayer) {\n throw new Error('Poofnet does not support real Solana transactions. Deploy your project to mainnet to use this feature.');\n }\n async runTransaction(evmTransactionData, solTransactionData, options) {\n return this.wrappedProvider.runTransaction(evmTransactionData, solTransactionData, options);\n }\n}\n//# sourceMappingURL=offchain-auth-provider.js.map","import { getConfig } from '@bounded-sh/core';\nimport { SolanaKeypairProvider } from './providers/solana-keypair-provider';\nimport { OffchainAuthProvider } from './providers/offchain-auth-provider';\nlet currentAuthProvider = null;\nexport const SOLANA_DEVNET_RPC_URL = \"https://idelle-8nxsep-fast-devnet.helius-rpc.com\";\nexport const SOLANA_MAINNET_RPC_URL = \"https://celestia-cegncv-fast-mainnet.helius-rpc.com\";\nexport const SURFNET_RPC_URL = \"https://surfpool.fly.dev\";\nexport async function getAuthProvider() {\n var _a;\n const config = await getConfig();\n if (currentAuthProvider) {\n // If provider exists but chain is \"offchain\" and it's not already wrapped, rewrap it\n if (config.chain === \"offchain\" && !(currentAuthProvider instanceof OffchainAuthProvider)) {\n currentAuthProvider = new OffchainAuthProvider(currentAuthProvider);\n }\n return currentAuthProvider;\n }\n currentAuthProvider = await matchAuthProvider((_a = config.rpcUrl) !== null && _a !== void 0 ? _a : null);\n // Wrap with OffchainAuthProvider for offchain chain\n if (config.chain === \"offchain\") {\n currentAuthProvider = new OffchainAuthProvider(currentAuthProvider);\n }\n return currentAuthProvider;\n}\nexport async function matchAuthProvider(rpcUrl) {\n return new SolanaKeypairProvider(rpcUrl);\n}\n//# sourceMappingURL=index.js.map","import { getAuthProvider } from './auth';\nimport { init as configInit } from '@bounded-sh/core';\nlet authProviderInstance = null;\nconst SOLANA_DEVNET_RPC_URL = \"https://api.devnet.solana.com\";\nconst SOLANA_MAINNET_RPC_URL = \"https://celestia-cegncv-fast-mainnet.helius-rpc.com\";\nconst SURFNET_RPC_URL = \"https://surfpool.fly.dev\";\nexport async function init(newConfig) {\n // Initialize config first so getAuthProvider can access it\n // Server-side skips backend init since it already has all needed config\n await configInit(Object.assign(Object.assign({}, newConfig), { isServer: true, skipBackendInit: true }));\n // Get the auth provider (which will wrap it if chain is \"offchain\")\n authProviderInstance = await getAuthProvider();\n // Update config with the wrapped provider\n await configInit(Object.assign(Object.assign({}, newConfig), { authProvider: authProviderInstance, isServer: true, skipBackendInit: true }));\n}\n//# sourceMappingURL=global.js.map","import { getIdToken as getIdTokenCore } from '@bounded-sh/core';\n// Wrapper for getIdToken - passes isServer=true for server-side usage\nexport async function getIdToken() {\n return getIdTokenCore(true);\n}\n//# sourceMappingURL=utils.js.map","var __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport { Keypair } from '@solana/web3.js';\nimport bs58 from 'bs58';\nimport { getConfig, get as coreGet, getMany as coreGetMany, set as coreSet, setMany as coreSetMany, setFile as coreSetFile, getFiles as coreGetFiles, search as coreSearch, runQuery as coreRunQuery, runQueryMany as coreRunQueryMany, runExpression as coreRunExpression, runExpressionMany as coreRunExpressionMany, count as coreCount, aggregate as coreAggregate, queryAggregate as coreQueryAggregate, subscribe as coreSubscribe, functions as coreFunctions, ServerSessionManager, } from '@bounded-sh/core';\nimport { SolanaKeypairProvider } from './auth/providers/solana-keypair-provider';\nimport { OffchainAuthProvider } from './auth/providers/offchain-auth-provider';\n/* ------------------------------------------------------------------ */\n/* Keypair parsing */\n/* ------------------------------------------------------------------ */\nfunction parseKeypair(secret) {\n const trimmed = secret.trim();\n try {\n const secretKey = trimmed.startsWith('[')\n ? Uint8Array.from(JSON.parse(trimmed))\n : bs58.decode(trimmed);\n return Keypair.fromSecretKey(secretKey);\n }\n catch (_a) {\n throw new Error('Invalid keypair: must be base58 or JSON array.');\n }\n}\n/**\n * Whether a JWT is expired or within 60s of expiry (or unparseable). Used to\n * decide if the wallet should re-sign for a fresh token. Server-only (Node\n * Buffer); a keypair-backed session can always re-sign, so this is safe to be\n * conservative about.\n */\nfunction jwtExpiringSoon(token) {\n if (!token)\n return true;\n try {\n const part = token.split('.')[1];\n const json = Buffer.from(part.replace(/-/g, '+').replace(/_/g, '/'), 'base64').toString('utf8');\n const exp = JSON.parse(json).exp;\n if (!exp)\n return false;\n return Date.now() > exp * 1000 - 60000;\n }\n catch (_a) {\n return true;\n }\n}\n/* ------------------------------------------------------------------ */\n/* WalletClient */\n/* ------------------------------------------------------------------ */\nexport class WalletClient {\n constructor(provider, sessionManager, address) {\n this.provider = provider;\n this.sessionManager = sessionManager;\n this.address = address;\n }\n /* ---- Auth override helpers ---- */\n buildOverrides() {\n return {\n authProvider: this.provider,\n _getAuthHeaders: async () => {\n let s = await this.sessionManager.getSession();\n // Keypair-backed session: if the cached token is expired/near-expiry,\n // re-sign for a fresh one (we always hold the key). Keeps long-lived WS\n // subscriptions authenticated across reconnects, and stops one-shot reads\n // from sending a stale token.\n if (jwtExpiringSoon(s.idToken)) {\n this.sessionManager.clearSession();\n s = await this.sessionManager.getSession();\n }\n return { Authorization: `Bearer ${s.idToken}` };\n },\n _clearAuth: async () => {\n this.sessionManager.clearSession();\n },\n _walletAddress: this.address,\n };\n }\n /** Strip Authorization from caller headers to prevent overriding wallet token */\n sanitizeHeaders(headers) {\n if (!headers)\n return undefined;\n const _a = headers, { Authorization, authorization } = _a, rest = __rest(_a, [\"Authorization\", \"authorization\"]);\n return Object.keys(rest).length > 0 ? rest : undefined;\n }\n mergeSetOverrides(opts) {\n var _a;\n const ovr = this.buildOverrides();\n return Object.assign(Object.assign({}, opts), { _overrides: Object.assign(Object.assign({}, opts === null || opts === void 0 ? void 0 : opts._overrides), { headers: this.sanitizeHeaders((_a = opts === null || opts === void 0 ? void 0 : opts._overrides) === null || _a === void 0 ? void 0 : _a.headers), authProvider: ovr.authProvider, _getAuthHeaders: ovr._getAuthHeaders, _clearAuth: ovr._clearAuth }) });\n }\n mergeReadOverrides(existing) {\n const ovr = this.buildOverrides();\n return Object.assign(Object.assign({}, existing), { headers: this.sanitizeHeaders(existing === null || existing === void 0 ? void 0 : existing.headers), _getAuthHeaders: ovr._getAuthHeaders, _clearAuth: ovr._clearAuth, _walletAddress: ovr._walletAddress });\n }\n /* ---- Data operations ---- */\n async set(path, document, options) {\n return coreSet(path, document, this.mergeSetOverrides(options));\n }\n async setMany(many, options) {\n return coreSetMany(many, this.mergeSetOverrides(options));\n }\n async setFile(path, file, options) {\n return coreSetFile(path, file, { _overrides: this.mergeReadOverrides(options === null || options === void 0 ? void 0 : options._overrides) });\n }\n async get(path, opts) {\n return coreGet(path, Object.assign(Object.assign({}, opts), { _overrides: this.mergeReadOverrides(opts === null || opts === void 0 ? void 0 : opts._overrides) }));\n }\n async getMany(paths, opts) {\n return coreGetMany(paths, Object.assign(Object.assign({}, opts), { _overrides: this.mergeReadOverrides() }));\n }\n async getFiles(path, options) {\n return coreGetFiles(path, { _overrides: this.mergeReadOverrides(options === null || options === void 0 ? void 0 : options._overrides) });\n }\n async search(path, query, opts = {}) {\n return coreSearch(path, query, Object.assign(Object.assign({}, opts), { _overrides: this.mergeReadOverrides(opts === null || opts === void 0 ? void 0 : opts._overrides) }));\n }\n async runQuery(absolutePath, queryName, queryArgs, opts) {\n return coreRunQuery(absolutePath, queryName, queryArgs, Object.assign(Object.assign({}, opts), { _overrides: this.mergeReadOverrides(opts === null || opts === void 0 ? void 0 : opts._overrides) }));\n }\n async runQueryMany(many, opts) {\n return coreRunQueryMany(many, Object.assign(Object.assign({}, opts), { _overrides: this.mergeReadOverrides(opts === null || opts === void 0 ? void 0 : opts._overrides) }));\n }\n async runExpression(expression, queryArgs, options) {\n return coreRunExpression(expression, queryArgs, Object.assign(Object.assign({}, options), { _overrides: this.mergeReadOverrides(options === null || options === void 0 ? void 0 : options._overrides) }));\n }\n async runExpressionMany(many) {\n const ovr = this.mergeReadOverrides();\n return coreRunExpressionMany(many.map(m => (Object.assign(Object.assign({}, m), { _overrides: ovr }))));\n }\n async count(path, opts = {}) {\n return coreCount(path, Object.assign(Object.assign({}, opts), { _overrides: this.mergeReadOverrides(opts === null || opts === void 0 ? void 0 : opts._overrides) }));\n }\n async aggregate(path, operation, opts = {}) {\n return coreAggregate(path, operation, Object.assign(Object.assign({}, opts), { _overrides: this.mergeReadOverrides(opts === null || opts === void 0 ? void 0 : opts._overrides) }));\n }\n async queryAggregate(path, spec, opts = {}) {\n return coreQueryAggregate(path, spec, Object.assign(Object.assign({}, opts), { _overrides: this.mergeReadOverrides(opts === null || opts === void 0 ? void 0 : opts._overrides) }));\n }\n /**\n * Subscribe to real-time updates as THIS wallet's identity. Unlike the global\n * `subscribe`, this needs no `BOUNDED_PRIVATE_KEY` env var — the WS connection\n * authenticates with the wallet's own session (so read rules see the right\n * principal), and is scoped to its own connection so it never crosses another\n * identity. Accepts a bare callback or `{ onData, onError, filter, ... }`.\n * Returns an async unsubscribe.\n */\n async subscribe(path, options) {\n const opts = typeof options === 'function' ? { onData: options } : Object.assign({}, options);\n const ovr = this.buildOverrides();\n return coreSubscribe(path, Object.assign(Object.assign({}, opts), { _overrides: {\n _getAuthHeaders: ovr._getAuthHeaders,\n _clearAuth: ovr._clearAuth,\n _walletAddress: ovr._walletAddress,\n } }));\n }\n /**\n * Invoke a deployed Bounded Function AS this wallet's identity. Unlike the\n * top-level `functions.invoke`, this needs no `BOUNDED_PRIVATE_KEY` env var —\n * the dispatcher sees the wallet's verified session, so the function's `auth`\n * rule + `ctx.user` reflect this client. Returns the function's JSON; throws\n * `FunctionInvokeError` on 401/403/404/503.\n */\n async invoke(name, args = {}, opts = {}) {\n const ovr = this.buildOverrides();\n return coreFunctions.invoke(name, args, Object.assign(Object.assign({}, opts), { _overrides: { _getAuthHeaders: ovr._getAuthHeaders } }));\n }\n /* ---- Signing operations (use provider directly) ---- */\n async signMessage(message) {\n return this.provider.signMessage(message);\n }\n async signTransaction(transaction) {\n return this.provider.signTransaction(transaction);\n }\n async signAndSubmitTransaction(transaction, feePayer) {\n return this.provider.signAndSubmitTransaction(transaction, feePayer);\n }\n}\n/**\n * Create a self-contained wallet client bound to a specific keypair.\n * Each client has its own auth session — no global state is mutated.\n *\n * @example\n * ```ts\n * const vault = await createWalletClient({ keypair: process.env.VAULT_KEY });\n * await vault.set('markets/123', data);\n * ```\n */\nexport async function createWalletClient(opts) {\n var _a;\n const kp = parseKeypair(opts.keypair);\n const config = await getConfig();\n let provider = new SolanaKeypairProvider((_a = config.rpcUrl) !== null && _a !== void 0 ? _a : null, kp);\n if (config.chain === 'offchain') {\n provider = new OffchainAuthProvider(provider);\n }\n const sessionManager = ServerSessionManager.forKeypair(kp);\n // Eagerly authenticate so failures surface immediately\n await sessionManager.getSession();\n return new WalletClient(provider, sessionManager, kp.publicKey.toBase58());\n}\n//# sourceMappingURL=wallet-client.js.map","// ---------------------------------------------------------------------------\n// webhooks.ts -- Verify signed inbound mutation webhooks.\n//\n// The Bounded realtime worker fires outbound webhooks for declared\n// collections after a mutation commits, signed with a platform Ed25519 private\n// key. This module verifies those signatures on the receiving server.\n//\n// verifyWebhook():\n// 1. Fetches the platform's hosted public keys (well-known endpoint),\n// cached in-memory with a TTL.\n// 2. Picks the key matching the X-Bounded-Key-Id header.\n// 3. Verifies the Ed25519 signature (X-Bounded-Signature) over the RAW body.\n// 4. Checks the X-Bounded-Timestamp is within an allowed skew.\n// 5. Returns the parsed, typed payload — or throws.\n//\n// Verification uses WebCrypto (globalThis.crypto.subtle), available natively in\n// Node 18+, Bun, Deno, Cloudflare Workers, and modern browsers.\n// ---------------------------------------------------------------------------\nimport { getWebhookKeysUrl } from \"@bounded-sh/core\";\n// Default to PRODUCTION keys so an omitted keysUrl is production-safe (audit\n// SDK LOW-7). Staging receivers must pass keysUrl explicitly.\nexport const DEFAULT_WEBHOOK_KEYS_URL = \"https://realtime.bounded.sh/.well-known/bounded-webhook-keys.json\";\nconst DEFAULT_MAX_SKEW_SECONDS = 300;\nconst DEFAULT_CACHE_TTL_MS = 300000;\nexport class WebhookVerificationError extends Error {\n constructor(message) {\n super(message);\n this.name = \"WebhookVerificationError\";\n }\n}\nfunction getHeader(headers, name) {\n var _a;\n if (headers && typeof headers.get === \"function\") {\n return headers.get(name);\n }\n const lower = name.toLowerCase();\n const obj = headers;\n for (const key of Object.keys(obj)) {\n if (key.toLowerCase() === lower) {\n const value = obj[key];\n return Array.isArray(value) ? (_a = value[0]) !== null && _a !== void 0 ? _a : null : value !== null && value !== void 0 ? value : null;\n }\n }\n return null;\n}\n// ---------------------------------------------------------------------------\n// Base64\n// ---------------------------------------------------------------------------\nfunction base64ToBytes(b64) {\n const binary = typeof Buffer !== \"undefined\"\n ? Buffer.from(b64, \"base64\").toString(\"binary\")\n : atob(b64);\n const buffer = new ArrayBuffer(binary.length);\n const bytes = new Uint8Array(buffer);\n for (let i = 0; i < binary.length; i++)\n bytes[i] = binary.charCodeAt(i);\n return bytes;\n}\nfunction utf8Bytes(text) {\n const encoded = new TextEncoder().encode(text);\n const buffer = new ArrayBuffer(encoded.length);\n const bytes = new Uint8Array(buffer);\n bytes.set(encoded);\n return bytes;\n}\nconst keyCache = new Map();\n/** Clear the in-memory key cache (mainly for tests). */\nexport function clearWebhookKeyCache() {\n keyCache.clear();\n}\nasync function loadKeys(keysUrl, cacheTtlMs, fetchImpl, now) {\n const cached = keyCache.get(keysUrl);\n if (cached && cached.expiresAt > now()) {\n return cached.keys;\n }\n let res;\n try {\n res = await fetchImpl(keysUrl);\n }\n catch (err) {\n throw new WebhookVerificationError(`Failed to fetch webhook keys from ${keysUrl}: ${err.message}`);\n }\n if (!res.ok) {\n throw new WebhookVerificationError(`Failed to fetch webhook keys from ${keysUrl}: HTTP ${res.status}`);\n }\n const body = (await res.json());\n if (!body || !Array.isArray(body.keys)) {\n throw new WebhookVerificationError(`Webhook keys endpoint ${keysUrl} returned an invalid payload.`);\n }\n keyCache.set(keysUrl, { keys: body.keys, expiresAt: now() + cacheTtlMs });\n return body.keys;\n}\n// ---------------------------------------------------------------------------\n// In-memory replay store (single-process receivers)\n// ---------------------------------------------------------------------------\n/**\n * A simple in-memory {@link WebhookReplayStore}. Records seen event ids until\n * their skew-window expiry and lazily evicts expired entries. Suitable for a\n * single-process receiver; use a shared store (Redis, KV, a DB unique\n * constraint) for multi-instance deployments.\n */\nexport class InMemoryReplayStore {\n constructor() {\n this.seen = new Map();\n }\n checkAndRecord(id, expiresAtMs) {\n const now = Date.now();\n // Opportunistic eviction of expired entries to bound memory.\n if (this.seen.size > 0) {\n for (const [key, exp] of this.seen) {\n if (exp <= now)\n this.seen.delete(key);\n }\n }\n const existing = this.seen.get(id);\n if (existing !== undefined && existing > now) {\n return true; // replay\n }\n this.seen.set(id, expiresAtMs);\n return false;\n }\n /** Clear all recorded ids (mainly for tests). */\n clear() {\n this.seen.clear();\n }\n}\n// ---------------------------------------------------------------------------\n// verifyWebhook\n// ---------------------------------------------------------------------------\n/**\n * Verify a signed inbound webhook and return its typed payload.\n *\n * @param rawBody The exact raw request body string the platform signed. Must be\n * the unparsed bytes — re-serializing parsed JSON may not match byte-for-byte.\n * @param headers The inbound request headers (a Headers instance or a plain\n * object; case-insensitive).\n * @param opts Optional overrides (keys URL, skew, cache TTL, fetch).\n * @returns The parsed, validated {@link WebhookPayload}.\n * @throws {WebhookVerificationError} if anything fails verification.\n */\nexport async function verifyWebhook(rawBody, headers, opts = {}) {\n var _a, _b, _c, _d, _e, _f;\n // Resolution order: explicit opts.keysUrl > the configured Bounded network's\n // hosted keys (so a staging receiver verifies staging-signed deliveries\n // without passing keysUrl) > the production default (fail-closed when the\n // network is unknown — audit SDK LOW-7).\n const keysUrl = (_b = (_a = opts.keysUrl) !== null && _a !== void 0 ? _a : getWebhookKeysUrl()) !== null && _b !== void 0 ? _b : DEFAULT_WEBHOOK_KEYS_URL;\n const maxSkew = (_c = opts.maxSkewSeconds) !== null && _c !== void 0 ? _c : DEFAULT_MAX_SKEW_SECONDS;\n const cacheTtlMs = (_d = opts.cacheTtlMs) !== null && _d !== void 0 ? _d : DEFAULT_CACHE_TTL_MS;\n const fetchImpl = (_e = opts.fetchImpl) !== null && _e !== void 0 ? _e : globalThis.fetch;\n const now = (_f = opts.now) !== null && _f !== void 0 ? _f : Date.now;\n if (typeof fetchImpl !== \"function\") {\n throw new WebhookVerificationError(\"No fetch implementation available; pass opts.fetchImpl.\");\n }\n const signature = getHeader(headers, \"X-Bounded-Signature\");\n const keyId = getHeader(headers, \"X-Bounded-Key-Id\");\n const timestampHeader = getHeader(headers, \"X-Bounded-Timestamp\");\n if (!signature)\n throw new WebhookVerificationError(\"Missing X-Bounded-Signature header.\");\n if (!keyId)\n throw new WebhookVerificationError(\"Missing X-Bounded-Key-Id header.\");\n if (!timestampHeader)\n throw new WebhookVerificationError(\"Missing X-Bounded-Timestamp header.\");\n const headerTimestamp = Number(timestampHeader);\n if (!Number.isFinite(headerTimestamp)) {\n throw new WebhookVerificationError(\"Invalid X-Bounded-Timestamp header.\");\n }\n // Resolve the signing key by id.\n const keys = await loadKeys(keysUrl, cacheTtlMs, fetchImpl, now);\n let key = keys.find((k) => k.id === keyId);\n // Cache-miss tolerance: a freshly-rotated key may not be cached yet. Force a\n // single refresh before giving up.\n if (!key) {\n keyCache.delete(keysUrl);\n const refreshed = await loadKeys(keysUrl, cacheTtlMs, fetchImpl, now);\n key = refreshed.find((k) => k.id === keyId);\n }\n if (!key) {\n throw new WebhookVerificationError(`No public key found for key id \"${keyId}\".`);\n }\n if (key.alg !== \"ed25519\") {\n throw new WebhookVerificationError(`Unsupported key algorithm \"${key.alg}\".`);\n }\n // Verify the Ed25519 signature over the raw body.\n const subtle = (globalThis.crypto && globalThis.crypto.subtle);\n if (!subtle) {\n throw new WebhookVerificationError(\"WebCrypto (crypto.subtle) is not available.\");\n }\n let cryptoKey;\n try {\n cryptoKey = await subtle.importKey(\"raw\", base64ToBytes(key.publicKey), { name: \"Ed25519\" }, false, [\"verify\"]);\n }\n catch (err) {\n throw new WebhookVerificationError(`Failed to import Ed25519 public key: ${err.message}`);\n }\n const ok = await subtle.verify({ name: \"Ed25519\" }, cryptoKey, base64ToBytes(signature), utf8Bytes(rawBody));\n if (!ok) {\n throw new WebhookVerificationError(\"Webhook signature verification failed.\");\n }\n // Parse and shallow-validate the payload.\n let payload;\n try {\n payload = JSON.parse(rawBody);\n }\n catch (_g) {\n throw new WebhookVerificationError(\"Webhook body is not valid JSON.\");\n }\n if (!payload ||\n typeof payload.id !== \"string\" ||\n typeof payload.appId !== \"string\" ||\n typeof payload.path !== \"string\" ||\n (payload.operation !== \"create\" &&\n payload.operation !== \"update\" &&\n payload.operation !== \"delete\") ||\n typeof payload.timestamp !== \"number\" ||\n !Number.isFinite(payload.timestamp)) {\n throw new WebhookVerificationError(\"Webhook payload is missing required fields.\");\n }\n // Replay protection: the timestamp used for the skew window MUST be the SIGNED\n // payload.timestamp, not the unsigned X-Bounded-Timestamp header. An attacker\n // can swap the header freely without breaking the Ed25519 signature, so the\n // header alone is no replay bound. We also require the header to equal the\n // signed value so the (unsigned) header cannot diverge from what was signed.\n if (headerTimestamp !== payload.timestamp) {\n throw new WebhookVerificationError(\"X-Bounded-Timestamp header does not match the signed payload timestamp.\");\n }\n const nowSeconds = Math.floor(now() / 1000);\n if (Math.abs(nowSeconds - payload.timestamp) > maxSkew) {\n throw new WebhookVerificationError(`Webhook timestamp outside allowed skew of ${maxSkew}s (delta ${Math.abs(nowSeconds - payload.timestamp)}s).`);\n }\n // Optional nonce/replay cache: reject a previously-seen event id within the\n // skew window. The signed payload.id uniquely identifies the delivery.\n if (opts.replayStore) {\n const expiresAtMs = (payload.timestamp + maxSkew) * 1000;\n const replayed = await opts.replayStore.checkAndRecord(payload.id, expiresAtMs);\n if (replayed) {\n throw new WebhookVerificationError(`Webhook replay detected for event id \"${payload.id}\".`);\n }\n }\n return payload;\n}\n//# sourceMappingURL=webhooks.js.map"],"names":["Buffer","configInit","getIdTokenCore","this","coreSet","coreSetMany","coreSetFile","coreGet","coreGetMany","coreGetFiles","coreSearch","coreRunQuery","coreRunQueryMany","coreRunExpression","coreRunExpressionMany","coreCount","coreAggregate","coreQueryAggregate","coreSubscribe","coreFunctions"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,67 +1,67 @@
|
|
|
1
1
|
{
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
2
|
+
"name": "@bounded-sh/server",
|
|
3
|
+
"version": "0.0.2",
|
|
4
|
+
"description": "Server SDK for Poof API - Node.js/Backend implementation",
|
|
5
|
+
"main": "./dist/index.js",
|
|
6
|
+
"module": "./dist/index.mjs",
|
|
7
|
+
"types": "./dist/index.d.ts",
|
|
8
|
+
"exports": {
|
|
9
|
+
".": {
|
|
10
|
+
"types": "./dist/index.d.ts",
|
|
11
|
+
"import": "./dist/index.mjs",
|
|
12
|
+
"require": "./dist/index.js"
|
|
13
|
+
}
|
|
14
|
+
},
|
|
15
|
+
"scripts": {
|
|
16
|
+
"build": "rm -rf ./dist ./.rollup-tmp && tsc -p tsconfig.build.json --outDir .rollup-tmp --declarationDir .rollup-tmp --emitDeclarationOnly false && rollup -c && tsc -p tsconfig.build.json --emitDeclarationOnly --declarationDir dist && rm -rf ./.rollup-tmp",
|
|
17
|
+
"watch": "rollup -c -w",
|
|
18
|
+
"prepare": "npm run build"
|
|
19
|
+
},
|
|
20
|
+
"files": [
|
|
21
|
+
"dist"
|
|
22
|
+
],
|
|
23
|
+
"keywords": [
|
|
24
|
+
"sdk",
|
|
25
|
+
"api",
|
|
26
|
+
"poof",
|
|
27
|
+
"web3",
|
|
28
|
+
"onchain",
|
|
29
|
+
"blockchain",
|
|
30
|
+
"solana",
|
|
31
|
+
"ai",
|
|
32
|
+
"server",
|
|
33
|
+
"node",
|
|
34
|
+
"typescript"
|
|
35
|
+
],
|
|
36
|
+
"author": "Poof.new",
|
|
37
|
+
"license": "MIT",
|
|
38
|
+
"devDependencies": {
|
|
39
|
+
"@rollup/plugin-commonjs": "28.0.9",
|
|
40
|
+
"@rollup/plugin-json": "6.1.0",
|
|
41
|
+
"@rollup/plugin-node-resolve": "15.3.1",
|
|
42
|
+
"rollup": "4.60.1",
|
|
43
|
+
"rollup-plugin-peer-deps-external": "2.2.4",
|
|
44
|
+
"rollup-plugin-typescript2": "0.36.0",
|
|
45
|
+
"typescript": "5.9.3"
|
|
46
|
+
},
|
|
47
|
+
"dependencies": {
|
|
48
|
+
"@coral-xyz/anchor": "0.31.1",
|
|
49
|
+
"@bounded-sh/core": "0.0.2",
|
|
50
|
+
"@solana/spl-token": "0.4.14",
|
|
51
|
+
"@solana/web3.js": "1.98.4",
|
|
52
|
+
"axios": "1.15.2",
|
|
53
|
+
"bn.js": "5.2.3",
|
|
54
|
+
"bs58": "5.0.0",
|
|
55
|
+
"buffer": "6.0.3",
|
|
56
|
+
"lodash": "4.18.1",
|
|
57
|
+
"reconnecting-websocket": "4.4.0",
|
|
58
|
+
"tweetnacl": "1.0.3"
|
|
59
|
+
},
|
|
60
|
+
"resolutions": {
|
|
61
|
+
"picomatch": "4.0.3"
|
|
62
|
+
},
|
|
63
|
+
"packageManager": "yarn@1.22.22+sha512.a6b2f7906b721bba3d67d4aff083df04dad64c399707841b7acf00f6b133b7ac24255f2652fa22ae3534329dc6180534e98d17432037ff6fd140556e2bb3137e",
|
|
64
|
+
"publishConfig": {
|
|
65
|
+
"access": "public"
|
|
13
66
|
}
|
|
14
|
-
},
|
|
15
|
-
"scripts": {
|
|
16
|
-
"build": "rm -rf ./dist ./.rollup-tmp && tsc -p tsconfig.build.json --outDir .rollup-tmp --declarationDir .rollup-tmp --emitDeclarationOnly false && rollup -c && tsc -p tsconfig.build.json --emitDeclarationOnly --declarationDir dist && rm -rf ./.rollup-tmp",
|
|
17
|
-
"watch": "rollup -c -w",
|
|
18
|
-
"prepare": "npm run build"
|
|
19
|
-
},
|
|
20
|
-
"files": [
|
|
21
|
-
"dist"
|
|
22
|
-
],
|
|
23
|
-
"keywords": [
|
|
24
|
-
"sdk",
|
|
25
|
-
"api",
|
|
26
|
-
"poof",
|
|
27
|
-
"web3",
|
|
28
|
-
"onchain",
|
|
29
|
-
"blockchain",
|
|
30
|
-
"solana",
|
|
31
|
-
"ai",
|
|
32
|
-
"server",
|
|
33
|
-
"node",
|
|
34
|
-
"typescript"
|
|
35
|
-
],
|
|
36
|
-
"author": "Poof.new",
|
|
37
|
-
"license": "MIT",
|
|
38
|
-
"devDependencies": {
|
|
39
|
-
"@rollup/plugin-commonjs": "28.0.9",
|
|
40
|
-
"@rollup/plugin-json": "6.1.0",
|
|
41
|
-
"@rollup/plugin-node-resolve": "15.3.1",
|
|
42
|
-
"rollup": "4.60.1",
|
|
43
|
-
"rollup-plugin-peer-deps-external": "2.2.4",
|
|
44
|
-
"rollup-plugin-typescript2": "0.36.0",
|
|
45
|
-
"typescript": "5.9.3"
|
|
46
|
-
},
|
|
47
|
-
"dependencies": {
|
|
48
|
-
"@coral-xyz/anchor": "0.31.1",
|
|
49
|
-
"@bounded-sh/core": "0.0.1",
|
|
50
|
-
"@solana/spl-token": "0.4.14",
|
|
51
|
-
"@solana/web3.js": "1.98.4",
|
|
52
|
-
"axios": "1.15.2",
|
|
53
|
-
"bn.js": "5.2.3",
|
|
54
|
-
"bs58": "5.0.0",
|
|
55
|
-
"buffer": "6.0.3",
|
|
56
|
-
"lodash": "4.18.1",
|
|
57
|
-
"reconnecting-websocket": "4.4.0",
|
|
58
|
-
"tweetnacl": "1.0.3"
|
|
59
|
-
},
|
|
60
|
-
"resolutions": {
|
|
61
|
-
"picomatch": "4.0.3"
|
|
62
|
-
},
|
|
63
|
-
"packageManager": "yarn@1.22.22+sha512.a6b2f7906b721bba3d67d4aff083df04dad64c399707841b7acf00f6b133b7ac24255f2652fa22ae3534329dc6180534e98d17432037ff6fd140556e2bb3137e",
|
|
64
|
-
"publishConfig": {
|
|
65
|
-
"access": "public"
|
|
66
|
-
}
|
|
67
67
|
}
|