@bounded-sh/client 0.0.64 → 0.0.65

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.
Files changed (65) hide show
  1. package/dist/auth/providers/injected-wallet-provider.d.ts +1 -1
  2. package/dist/auth/providers/privy-expo-provider.d.ts +1 -1
  3. package/dist/auth/turnkey-signing-capability.d.ts +20 -0
  4. package/dist/{email-auth-provider-v9xvY0Ky.mjs → email-auth-provider-BLHNLu5l.mjs} +2 -2
  5. package/dist/{email-auth-provider-v9xvY0Ky.mjs.map → email-auth-provider-BLHNLu5l.mjs.map} +1 -1
  6. package/dist/{email-auth-provider-97CluDlZ.js → email-auth-provider-CJVJsWXv.js} +2 -2
  7. package/dist/{email-auth-provider-97CluDlZ.js.map → email-auth-provider-CJVJsWXv.js.map} +1 -1
  8. package/dist/{email-auth-provider-CKM4O5Z1.js → email-auth-provider-DYtoSrdm.js} +2 -2
  9. package/dist/{email-auth-provider-CKM4O5Z1.js.map → email-auth-provider-DYtoSrdm.js.map} +1 -1
  10. package/dist/{email-auth-provider-h0fPnU76.mjs → email-auth-provider-wqNimboO.mjs} +2 -2
  11. package/dist/{email-auth-provider-h0fPnU76.mjs.map → email-auth-provider-wqNimboO.mjs.map} +1 -1
  12. package/dist/{guest-auth-provider-Dmup2WIL.mjs → guest-auth-provider-C3EGlSSp.mjs} +2 -2
  13. package/dist/{guest-auth-provider-BLRbjAv2.mjs.map → guest-auth-provider-C3EGlSSp.mjs.map} +1 -1
  14. package/dist/{guest-auth-provider-BLRbjAv2.mjs → guest-auth-provider-CKkNZ-1p.mjs} +2 -2
  15. package/dist/{guest-auth-provider-Dmup2WIL.mjs.map → guest-auth-provider-CKkNZ-1p.mjs.map} +1 -1
  16. package/dist/{guest-auth-provider-CLnFuodt.js → guest-auth-provider-CoI0r92a.js} +2 -2
  17. package/dist/{guest-auth-provider-CLnFuodt.js.map → guest-auth-provider-CoI0r92a.js.map} +1 -1
  18. package/dist/{guest-auth-provider-BvIf5W5c.js → guest-auth-provider-UMP8Z_bK.js} +2 -2
  19. package/dist/{guest-auth-provider-BvIf5W5c.js.map → guest-auth-provider-UMP8Z_bK.js.map} +1 -1
  20. package/dist/{index-7yz-Olrm.mjs → index-Cgbr0abz.mjs} +111 -108
  21. package/dist/index-Cgbr0abz.mjs.map +1 -0
  22. package/dist/{index-Bk0nEjB6.js → index-FkEGh6dx.js} +109 -107
  23. package/dist/index-FkEGh6dx.js.map +1 -0
  24. package/dist/index.d.ts +0 -1
  25. package/dist/index.js +1 -2
  26. package/dist/index.js.map +1 -1
  27. package/dist/index.mjs +1 -1
  28. package/dist/{index.native-Do-VhPUG.js → index.native-CAHw3k3_.js} +108 -106
  29. package/dist/index.native-CAHw3k3_.js.map +1 -0
  30. package/dist/{index.native-CWcQMPZd.mjs → index.native-wyaknPBR.mjs} +110 -107
  31. package/dist/index.native-wyaknPBR.mjs.map +1 -0
  32. package/dist/index.native.d.ts +0 -1
  33. package/dist/index.native.js +1 -2
  34. package/dist/index.native.js.map +1 -1
  35. package/dist/index.native.mjs +1 -1
  36. package/dist/{injected-evm-wallet-provider-xvZq9Zli.mjs → injected-evm-wallet-provider-B8x7dNuL.mjs} +2 -2
  37. package/dist/{injected-evm-wallet-provider-xvZq9Zli.mjs.map → injected-evm-wallet-provider-B8x7dNuL.mjs.map} +1 -1
  38. package/dist/{injected-evm-wallet-provider-BMiT8I-4.js → injected-evm-wallet-provider-BAToKWZo.js} +2 -2
  39. package/dist/{injected-evm-wallet-provider-BMiT8I-4.js.map → injected-evm-wallet-provider-BAToKWZo.js.map} +1 -1
  40. package/dist/{injected-evm-wallet-provider-B5MA0w8I.js → injected-evm-wallet-provider-D-7Eg6TS.js} +2 -2
  41. package/dist/{injected-evm-wallet-provider-B5MA0w8I.js.map → injected-evm-wallet-provider-D-7Eg6TS.js.map} +1 -1
  42. package/dist/{injected-evm-wallet-provider-DlPsOmik.mjs → injected-evm-wallet-provider-pVKJtDHL.mjs} +2 -2
  43. package/dist/{injected-evm-wallet-provider-DlPsOmik.mjs.map → injected-evm-wallet-provider-pVKJtDHL.mjs.map} +1 -1
  44. package/dist/{injected-wallet-provider-CSj0lY9H.js → injected-wallet-provider-28GE3rH9.js} +8 -75
  45. package/dist/injected-wallet-provider-28GE3rH9.js.map +1 -0
  46. package/dist/{injected-wallet-provider-Dd7ij6bc.mjs → injected-wallet-provider-5NeXEzui.mjs} +9 -76
  47. package/dist/injected-wallet-provider-5NeXEzui.mjs.map +1 -0
  48. package/dist/{injected-wallet-provider-YHhhFzsj.mjs → injected-wallet-provider-BojBmTAQ.mjs} +9 -76
  49. package/dist/injected-wallet-provider-BojBmTAQ.mjs.map +1 -0
  50. package/dist/{injected-wallet-provider-CoE5XQQn.js → injected-wallet-provider-DvwlPJea.js} +8 -75
  51. package/dist/injected-wallet-provider-DvwlPJea.js.map +1 -0
  52. package/dist/onramp.d.ts +4 -1
  53. package/package.json +2 -2
  54. package/dist/auth/providers/phantom-wallet-provider.d.ts +0 -111
  55. package/dist/auth/providers/privy-wallet-provider.d.ts +0 -83
  56. package/dist/auth/providers/sol/sol-utils.d.ts +0 -2
  57. package/dist/auth/providers/solana-mobile-wallet-provider.d.ts +0 -151
  58. package/dist/index-7yz-Olrm.mjs.map +0 -1
  59. package/dist/index-Bk0nEjB6.js.map +0 -1
  60. package/dist/index.native-CWcQMPZd.mjs.map +0 -1
  61. package/dist/index.native-Do-VhPUG.js.map +0 -1
  62. package/dist/injected-wallet-provider-CSj0lY9H.js.map +0 -1
  63. package/dist/injected-wallet-provider-CoE5XQQn.js.map +0 -1
  64. package/dist/injected-wallet-provider-Dd7ij6bc.mjs.map +0 -1
  65. package/dist/injected-wallet-provider-YHhhFzsj.mjs.map +0 -1
@@ -1,4 +1,4 @@
1
- import { getConfig, getActiveSessionManager, WebSessionManager, ReactNativeSessionManager, revokeSession, init as init$1, onSessionCleared, reconnectWithNewAuth, deriveUserIdentityFromIdToken, subscribe, getIdToken as getIdToken$1, convertRemainingAccounts, buildSetDocumentsTransaction, genAuthNonce, genSolanaMessage, createSessionWithSignature } from '@bounded-sh/core';
1
+ import { getConfig, getActiveSessionManager, WebSessionManager, ReactNativeSessionManager, revokeSession, init as init$1, onSessionCleared, reconnectWithNewAuth, deriveUserIdentityFromIdToken, subscribe, getIdToken as getIdToken$1, genAuthNonce, genSolanaMessage, createSessionWithSignature } from '@bounded-sh/core';
2
2
  import * as React from 'react';
3
3
 
4
4
  /**
@@ -3719,6 +3719,63 @@ async function runWidget(url, signerOrigin, ex, popupFallback) {
3719
3719
  return run;
3720
3720
  }
3721
3721
 
3722
+ // turnkey-signing-capability.ts - the pure AS-02 (DS2-0112) signing-capability logic,
3723
+ // kept import-free (no DOM, no session, no @bounded-sh/core) so it is unit-testable.
3724
+ //
3725
+ // The hosted Turnkey signer refuses to sign unless the request carries an issuer-signed
3726
+ // SIGNING CAPABILITY bound to the app id, the requesting origin, and the EXACT payload
3727
+ // hash. `requestTurnkeySigningCapability` mints one for the given bytes and
3728
+ // `buildTurnkeySignRequest` assembles the signer request that carries it. The bridge
3729
+ // (turnkey-signer-bridge.ts) supplies the base url + id token and routes through both,
3730
+ // so a regression here (a dropped capability, a wrong route, a swallowed error) is
3731
+ // caught without a browser.
3732
+ // POST the Bounded id token + payload hash to the issuer's capability mint route and
3733
+ // return the issuer-signed capability for exactly these bytes. Credential-free: identity
3734
+ // is proven with the id token in the body (not an ambient cookie the cross-origin fetch
3735
+ // would not carry). Throws with the same stable messages the bridge relied on inline.
3736
+ async function requestTurnkeySigningCapability(opts) {
3737
+ const base = opts.baseUrl.replace(/\/$/, '');
3738
+ let res;
3739
+ try {
3740
+ res = await opts.fetchImpl(`${base}/wallet/turnkey/capability`, {
3741
+ method: 'POST',
3742
+ headers: { 'content-type': 'application/json' },
3743
+ body: JSON.stringify({ idToken: opts.idToken, messageHex: opts.messageHex }),
3744
+ });
3745
+ }
3746
+ catch (_a) {
3747
+ throw new Error('Could not reach the Bounded signer to authorize this signature.');
3748
+ }
3749
+ if (!res.ok) {
3750
+ let error = 'signing_capability_denied';
3751
+ try {
3752
+ const d = (await res.json());
3753
+ if (d && typeof d.error === 'string')
3754
+ error = d.error;
3755
+ }
3756
+ catch (_b) {
3757
+ /* keep the default marker */
3758
+ }
3759
+ throw new Error(`Turnkey signing was not authorized (${error}).`);
3760
+ }
3761
+ const d = (await res.json());
3762
+ if (!d || typeof d.capability !== 'string' || !d.capability) {
3763
+ throw new Error('Turnkey signing capability was malformed.');
3764
+ }
3765
+ return d.capability;
3766
+ }
3767
+ // Assemble the `bounded:turnkey:sign` postMessage request, carrying the issuer-signed
3768
+ // capability for the same bytes. Without the capability the hosted signer refuses
3769
+ // (capability_required), so it is a required field of every sign request.
3770
+ function buildTurnkeySignRequest(opts) {
3771
+ return {
3772
+ type: 'bounded:turnkey:sign',
3773
+ requestId: opts.requestId,
3774
+ messageHex: opts.messageHex,
3775
+ capability: opts.capability,
3776
+ };
3777
+ }
3778
+
3722
3779
  // turnkey-signer-bridge.ts - routes NON-CUSTODIAL Turnkey embedded-wallet signing
3723
3780
  // through the Bounded-owned signer page (auth.bounded.sh/wallet/turnkey/signer).
3724
3781
  //
@@ -3883,6 +3940,33 @@ async function runPopup(url, signerOrigin, ex) {
3883
3940
  } }, 5 * 60 * 1000);
3884
3941
  });
3885
3942
  }
3943
+ // AS-02: the hosted signer refuses to sign unless the request carries an issuer-signed
3944
+ // SIGNING CAPABILITY bound to the app id, this origin, and the EXACT bytes (a bare postMessage
3945
+ // from any peer can no longer consent-phish a signature). Fetch one from the human-auth issuer
3946
+ // for exactly these bytes before posting the sign request. Credential-free: the caller proves
3947
+ // identity with the Bounded id token WE minted (a body secret, RS256-verified server-side), not
3948
+ // an ambient cookie - the issuer's session cookie is SameSite-scoped to its own origin and is
3949
+ // not sent on this cross-origin fetch, so the token is what carries the session's wallet.
3950
+ async function fetchSigningCapability(messageHex) {
3951
+ const cfg = await getConfig();
3952
+ const base = (cfg.humanAuthApiUrl || 'https://auth.bounded.sh').replace(/\/$/, '');
3953
+ let idToken = null;
3954
+ try {
3955
+ idToken = getActiveSessionManager().getIdToken();
3956
+ }
3957
+ catch (_a) {
3958
+ idToken = null;
3959
+ }
3960
+ if (!idToken) {
3961
+ throw new Error('This session has no Turnkey wallet. Sign in again to provision one.');
3962
+ }
3963
+ return requestTurnkeySigningCapability({
3964
+ baseUrl: base,
3965
+ idToken,
3966
+ messageHex,
3967
+ fetchImpl: (url, init) => fetch(url, init),
3968
+ });
3969
+ }
3886
3970
  function hasTurnkeyWallet() {
3887
3971
  return activeTurnkeyAddress() !== null;
3888
3972
  }
@@ -3903,8 +3987,11 @@ async function signSolanaMessageViaTurnkey(message) {
3903
3987
  const { url, origin } = await turnkeySignerPage();
3904
3988
  const requestId = `tksign_${Date.now()}_${++requestSeq}`;
3905
3989
  const messageHex = toHex(message);
3990
+ // AS-02: obtain the issuer-signed capability for THESE exact bytes first; the signer will
3991
+ // refuse (capability_required) without it. Fetched per signature (each is single-payload).
3992
+ const capability = await fetchSigningCapability(messageHex);
3906
3993
  return await deliver(url, origin, {
3907
- request: { type: 'bounded:turnkey:sign', requestId, messageHex },
3994
+ request: buildTurnkeySignRequest({ requestId, messageHex, capability }),
3908
3995
  onResult: (d) => {
3909
3996
  if (d.ok && typeof d.signatureHex === 'string' && typeof d.address === 'string') {
3910
3997
  return { done: true, value: { signature: fromHex(d.signatureHex), address: d.address, subOrgId: String(d.subOrgId || '') } };
@@ -4773,7 +4860,7 @@ async function getAuthProvider(config) {
4773
4860
  // manager as legacy email sessions. Human login should be started
4774
4861
  // with loginWithRedirect(); this provider is kept as the restore and
4775
4862
  // logout surface for those sessions.
4776
- currentAuthProvider = new (await import('./email-auth-provider-h0fPnU76.mjs')).EmailAuthProvider();
4863
+ currentAuthProvider = new (await import('./email-auth-provider-wqNimboO.mjs')).EmailAuthProvider();
4777
4864
  break;
4778
4865
  case "wallet":
4779
4866
  case "phantom": {
@@ -4792,7 +4879,7 @@ async function getAuthProvider(config) {
4792
4879
  if (!isWalletLoginEnabled(config)) {
4793
4880
  throw walletLoginNotEnabledError(authMethod);
4794
4881
  }
4795
- const { InjectedWalletProvider } = await import('./injected-wallet-provider-Dd7ij6bc.mjs');
4882
+ const { InjectedWalletProvider } = await import('./injected-wallet-provider-5NeXEzui.mjs');
4796
4883
  currentAuthProvider = new InjectedWalletProvider(resolveInjectedWalletConfig(config), rpcUrl, configuredNetwork);
4797
4884
  break;
4798
4885
  }
@@ -4805,7 +4892,7 @@ async function getAuthProvider(config) {
4805
4892
  // Selecting authMethod:'evm-wallet' IS the opt-in — pass evmWalletConfig
4806
4893
  // to point at a specific wallet or set chainId/domain.
4807
4894
  const evmWalletConfig = ((_a = config.evmWalletConfig) !== null && _a !== void 0 ? _a : {});
4808
- const { InjectedEvmWalletProvider } = await import('./injected-evm-wallet-provider-xvZq9Zli.mjs');
4895
+ const { InjectedEvmWalletProvider } = await import('./injected-evm-wallet-provider-B8x7dNuL.mjs');
4809
4896
  currentAuthProvider = new InjectedEvmWalletProvider(evmWalletConfig);
4810
4897
  break;
4811
4898
  }
@@ -4833,7 +4920,7 @@ async function getAuthProvider(config) {
4833
4920
  break;
4834
4921
  case "guest":
4835
4922
  // Anonymous auth: a device-local ed25519 keypair signs the challenge.
4836
- currentAuthProvider = new (await import('./guest-auth-provider-Dmup2WIL.mjs')).GuestAuthProvider();
4923
+ currentAuthProvider = new (await import('./guest-auth-provider-C3EGlSSp.mjs')).GuestAuthProvider();
4837
4924
  break;
4838
4925
  }
4839
4926
  if (!currentAuthProvider) {
@@ -4889,7 +4976,7 @@ async function signInAnonymously() {
4889
4976
  // Lazy-load the guest provider so its ed25519/web3 dependencies stay out of
4890
4977
  // the main bundle for data-only apps. Specifier is a static string literal
4891
4978
  // so bundle-splitting can see it.
4892
- const provider = new (await import('./guest-auth-provider-Dmup2WIL.mjs')).GuestAuthProvider();
4979
+ const provider = new (await import('./guest-auth-provider-C3EGlSSp.mjs')).GuestAuthProvider();
4893
4980
  setAuthLoading(true); // reflect "signing in…" while the guest keypair session is minted
4894
4981
  const commit = (user) => {
4895
4982
  // No await/interleaving inside this block: provider/method/config/marker
@@ -6127,18 +6214,6 @@ async function list() {
6127
6214
  */
6128
6215
  const apps = { create, list, buildCreateRedirectUrl };
6129
6216
 
6130
- async function deserializeTransaction(tx) {
6131
- // Literal specifier so bundlers can code-split the lazy chunk.
6132
- const { Transaction, VersionedTransaction } = await import('@solana/web3.js');
6133
- const buf = Buffer.isBuffer(tx) ? tx : Buffer.from(tx, 'base64');
6134
- if ((buf[0] & 0x80) !== 0) {
6135
- return VersionedTransaction.deserialize(buf);
6136
- }
6137
- else {
6138
- return Transaction.from(buf);
6139
- }
6140
- }
6141
-
6142
6217
  // bounded.onramp() - fund the signed-in user's wallet with Coinbase Onramp.
6143
6218
  //
6144
6219
  // Web-only. Opens Coinbase's hosted checkout (pay.coinbase.com) in a popup
@@ -6180,16 +6255,16 @@ async function readError(res) {
6180
6255
  }
6181
6256
  }
6182
6257
  function sessionBody(options, extra) {
6183
- return JSON.stringify(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({}, (options.asset ? { asset: options.asset } : {})), (options.address ? { address: options.address } : {})), (options.amountUsd !== undefined ? { amountUsd: options.amountUsd } : {})), (options.minAmountOut !== undefined ? { minAmountOut: options.minAmountOut } : {})), (options.slippagePad !== undefined ? { slippagePad: options.slippagePad } : {})), extra));
6258
+ return JSON.stringify(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({}, (options.asset ? { asset: options.asset } : {})), (options.amountUsd !== undefined ? { amountUsd: options.amountUsd } : {})), (options.minAmountOut !== undefined ? { minAmountOut: options.minAmountOut } : {})), (options.slippagePad !== undefined ? { slippagePad: options.slippagePad } : {})), extra));
6184
6259
  }
6185
- function resolveAddress(options) {
6186
- var _a, _b;
6260
+ function resolveAddress() {
6261
+ var _a;
6187
6262
  const user = getCurrentUser();
6188
- const address = (_b = (_a = options.address) !== null && _a !== void 0 ? _a : user === null || user === void 0 ? void 0 : user.address) !== null && _b !== void 0 ? _b : undefined;
6263
+ const address = (_a = user === null || user === void 0 ? void 0 : user.address) !== null && _a !== void 0 ? _a : undefined;
6189
6264
  if (!address) {
6190
6265
  throw new Error(user
6191
- ? 'onramp: the signed-in account has no wallet address - pass { address } explicitly'
6192
- : 'onramp: no signed-in user - call login() first or pass { address }');
6266
+ ? 'onramp: the signed-in account has no wallet address (create one via the embedded wallet flow)'
6267
+ : 'onramp: no signed-in user - call login() first');
6193
6268
  }
6194
6269
  return address;
6195
6270
  }
@@ -6200,7 +6275,7 @@ function resolveAddress(options) {
6200
6275
  async function onrampQuote(options = {}) {
6201
6276
  if (!hasDOM())
6202
6277
  throw new Error('onrampQuote is web-only');
6203
- resolveAddress(options);
6278
+ resolveAddress();
6204
6279
  const res = await authedFetch('/__bounded/onramp/session', {
6205
6280
  method: 'POST',
6206
6281
  headers: { 'content-type': 'application/json' },
@@ -6258,7 +6333,7 @@ async function onramp(options = {}) {
6258
6333
  var _a;
6259
6334
  if (!hasDOM())
6260
6335
  throw new Error('onramp() is web-only');
6261
- resolveAddress(options);
6336
+ resolveAddress();
6262
6337
  // Open the window synchronously so the click's user-activation window is not
6263
6338
  // consumed by the fetch below (same hard-won pattern as loginWithPopup).
6264
6339
  let popup = null;
@@ -6481,84 +6556,12 @@ class PrivyExpoProvider {
6481
6556
  setCurrentUser(user);
6482
6557
  return user;
6483
6558
  }
6484
- async runTransaction(_evmTransactionData, solTransactionData, options) {
6485
- var _a;
6486
- await this.ensureReady();
6487
- const [{ Connection, PublicKey }, programSdk] = await Promise.all([
6488
- import('@solana/web3.js'),
6489
- import('@coral-xyz/anchor'),
6490
- ]);
6491
- if (!solTransactionData) {
6492
- throw new Error('Solana transaction data is required');
6493
- }
6494
- const wallet = await this.getWalletOrThrow();
6495
- const rpcUrl = this.getRpcUrl(solTransactionData.network);
6496
- const connection = new Connection(rpcUrl, 'confirmed');
6497
- const remainingAccounts = convertRemainingAccounts(solTransactionData.txArgs[0].remainingAccounts);
6498
- const app_id = solTransactionData.appId;
6499
- if (!app_id) {
6500
- throw new Error('App ID is required');
6501
- }
6502
- // Create a mock wallet adapter for Anchor (only publicKey needed for building TX)
6503
- const walletPublicKey = new PublicKey(wallet.address);
6504
- const walletAdapter = {
6505
- publicKey: walletPublicKey,
6506
- signTransaction: async (tx) => tx,
6507
- signAllTransactions: async (txs) => txs,
6508
- };
6509
- const ProviderClass = programSdk[['Anch', 'orProvider'].join('')];
6510
- const programProvider = new ProviderClass(connection, walletAdapter, ProviderClass.defaultOptions());
6511
- const finalDeduped = [];
6512
- for (const acc of remainingAccounts) {
6513
- const existing = finalDeduped.find((d) => d.pubkey.equals(acc.pubkey));
6514
- if (existing) {
6515
- existing.isSigner = existing.isSigner || acc.isSigner;
6516
- existing.isWritable = existing.isWritable || acc.isWritable;
6517
- }
6518
- else {
6519
- finalDeduped.push(acc);
6520
- }
6521
- }
6522
- const { tx, blockhash, lastValidBlockHeight } = await buildSetDocumentsTransaction(connection, solTransactionData.txArgs[0].idl, programProvider, walletPublicKey, {
6523
- app_id,
6524
- documents: solTransactionData.txArgs[0].setDocumentData,
6525
- delete_paths: solTransactionData.txArgs[0].deletePaths,
6526
- txData: solTransactionData.txArgs[0].txData,
6527
- }, finalDeduped, solTransactionData.lutKey, solTransactionData.preInstructions, false, solTransactionData.additionalLutAddresses);
6528
- // Set blockhash
6529
- const isLegacyTx = 'recentBlockhash' in tx &&
6530
- !('message' in tx && 'staticAccountKeys' in tx.message);
6531
- if (isLegacyTx) {
6532
- tx.recentBlockhash = blockhash;
6533
- tx.lastValidBlockHeight = lastValidBlockHeight;
6534
- }
6535
- else {
6536
- tx.message.recentBlockhash = blockhash;
6537
- }
6538
- try {
6539
- if ((options === null || options === void 0 ? void 0 : options.shouldSubmitTx) === false) {
6540
- // Sign only — don't submit
6541
- const signed = await wallet.signTransaction(tx);
6542
- return {
6543
- signedTransaction: signed.signedTransaction,
6544
- blockNumber: 0,
6545
- gasUsed: '0',
6546
- data: '',
6547
- };
6548
- }
6549
- // Sign and submit
6550
- const { signature, txInfo } = await this.signAndSubmitInternal(tx, wallet, connection);
6551
- return {
6552
- transactionSignature: signature,
6553
- blockNumber: (txInfo === null || txInfo === void 0 ? void 0 : txInfo.slot) || 0,
6554
- gasUsed: ((_a = txInfo === null || txInfo === void 0 ? void 0 : txInfo.meta) === null || _a === void 0 ? void 0 : _a.fee.toString()) || '0',
6555
- data: txInfo === null || txInfo === void 0 ? void 0 : txInfo.meta,
6556
- };
6557
- }
6558
- catch (err) {
6559
- console.error(err);
6560
- throw err;
6561
- }
6559
+ async runTransaction(_evmTransactionData, _solTransactionData, _options) {
6560
+ // Client-side Solana transaction building is retired: the realtime
6561
+ // worker returns a fully-built (and, when sponsored, partially-signed)
6562
+ // transaction on its 202, which the SDK validates and signs via
6563
+ // signTransaction. This provider serves no EVM payload either.
6564
+ throw new Error('runTransaction is not supported by this provider; Bounded returns pre-built Solana transactions that are signed with signTransaction.');
6562
6565
  }
6563
6566
  async signMessage(message) {
6564
6567
  await this.ensureReady();
@@ -6715,5 +6718,5 @@ class PrivyExpoProvider {
6715
6718
  }
6716
6719
  }
6717
6720
 
6718
- export { useAuth as A, useQuery as B, useBuildRun as C, apps as D, deserializeTransaction as E, getIdToken as F, onramp as G, onrampQuote as H, onrampStatus as I, setPlatform as J, builds as K, BuildsApiError as L, PARK_REASONS as M, NON_TERMINAL_STATES as N, OffchainAuthProvider as O, PrivyExpoProvider as P, FAILURE_REASONS as Q, RUN_STATES as R, BUILD_REVIEW_CAPABILITY_SCHEMA as S, TERMINAL_STATES as T, BUILD_REVIEW_CAPABILITY_REFRESH_SCHEMA as U, BUILD_DELEGATED_REVIEW_CAPABILITY_SCHEMA as V, signMessageWithTurnkey as a, signTransactionWithTurnkey as b, signAndSubmitTransactionWithTurnkey as c, setAuthLoading as d, bufferExports as e, bs58 as f, getPlatform as g, hasTurnkeyWallet as h, confirmAndCheckTransaction as i, init as j, getCurrentUser as k, onAuthLoadingChanged as l, getAuthLoading as m, normalizeSolanaRpcUrl as n, onAuthStateChanged as o, login as p, logout as q, resolveSolanaRpcUrl as r, setCurrentUser as s, getAuthProvider as t, signInAnonymously as u, loginWithPrivy as v, loginWithRedirect as w, completeLoginFromRedirect as x, loginWithPopup as y, completeLoginInPopup as z };
6719
- //# sourceMappingURL=index.native-CWcQMPZd.mjs.map
6721
+ export { useAuth as A, useQuery as B, useBuildRun as C, apps as D, getIdToken as E, onramp as F, onrampQuote as G, onrampStatus as H, setPlatform as I, builds as J, BuildsApiError as K, PARK_REASONS as L, FAILURE_REASONS as M, NON_TERMINAL_STATES as N, OffchainAuthProvider as O, PrivyExpoProvider as P, BUILD_REVIEW_CAPABILITY_SCHEMA as Q, RUN_STATES as R, BUILD_REVIEW_CAPABILITY_REFRESH_SCHEMA as S, TERMINAL_STATES as T, BUILD_DELEGATED_REVIEW_CAPABILITY_SCHEMA as U, signMessageWithTurnkey as a, signTransactionWithTurnkey as b, signAndSubmitTransactionWithTurnkey as c, setAuthLoading as d, bufferExports as e, bs58 as f, getPlatform as g, hasTurnkeyWallet as h, confirmAndCheckTransaction as i, init as j, getCurrentUser as k, onAuthLoadingChanged as l, getAuthLoading as m, normalizeSolanaRpcUrl as n, onAuthStateChanged as o, login as p, logout as q, resolveSolanaRpcUrl as r, setCurrentUser as s, getAuthProvider as t, signInAnonymously as u, loginWithPrivy as v, loginWithRedirect as w, completeLoginFromRedirect as x, loginWithPopup as y, completeLoginInPopup as z };
6722
+ //# sourceMappingURL=index.native-wyaknPBR.mjs.map