@bounded-sh/client 0.0.60 → 0.0.62

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 (51) hide show
  1. package/dist/auth/bounded-login-widget.d.ts +1 -1
  2. package/dist/auth/index.d.ts +4 -5
  3. package/dist/{email-auth-provider-BCEdcnRu.js → email-auth-provider-BttT2sZK.js} +2 -2
  4. package/dist/{email-auth-provider-BCEdcnRu.js.map → email-auth-provider-BttT2sZK.js.map} +1 -1
  5. package/dist/{email-auth-provider-B5yIZe1l.js → email-auth-provider-BxV1zZA_.js} +2 -2
  6. package/dist/{email-auth-provider-B5yIZe1l.js.map → email-auth-provider-BxV1zZA_.js.map} +1 -1
  7. package/dist/{email-auth-provider-BF-vvbAt.mjs → email-auth-provider-Cb4VKA1E.mjs} +2 -2
  8. package/dist/{email-auth-provider-BF-vvbAt.mjs.map → email-auth-provider-Cb4VKA1E.mjs.map} +1 -1
  9. package/dist/{email-auth-provider-nBv7mW9q.mjs → email-auth-provider-vWv0rnbd.mjs} +2 -2
  10. package/dist/{email-auth-provider-nBv7mW9q.mjs.map → email-auth-provider-vWv0rnbd.mjs.map} +1 -1
  11. package/dist/{guest-auth-provider-DFNAHmtY.mjs → guest-auth-provider-BBPpydtM.mjs} +2 -2
  12. package/dist/{guest-auth-provider-DFNAHmtY.mjs.map → guest-auth-provider-BBPpydtM.mjs.map} +1 -1
  13. package/dist/{guest-auth-provider-CrRreOyf.js → guest-auth-provider-BcR-MQ0g.js} +2 -2
  14. package/dist/{guest-auth-provider-CrRreOyf.js.map → guest-auth-provider-BcR-MQ0g.js.map} +1 -1
  15. package/dist/{guest-auth-provider-DGvQgIwm.mjs → guest-auth-provider-CeIZw5x6.mjs} +2 -2
  16. package/dist/{guest-auth-provider-DGvQgIwm.mjs.map → guest-auth-provider-CeIZw5x6.mjs.map} +1 -1
  17. package/dist/{guest-auth-provider-CZ-CpNhD.js → guest-auth-provider-peD5Zasl.js} +2 -2
  18. package/dist/{guest-auth-provider-CZ-CpNhD.js.map → guest-auth-provider-peD5Zasl.js.map} +1 -1
  19. package/dist/{index-iu8vB4ye.js → index-DEDYfO2p.js} +51 -22
  20. package/dist/index-DEDYfO2p.js.map +1 -0
  21. package/dist/{index-CQtGkKVd.mjs → index-DpJl_Cpa.mjs} +51 -22
  22. package/dist/index-DpJl_Cpa.mjs.map +1 -0
  23. package/dist/index.js +1 -1
  24. package/dist/index.mjs +1 -1
  25. package/dist/{index.native-Crfn_NOB.mjs → index.native-BIUs8t7F.mjs} +38 -15
  26. package/dist/index.native-BIUs8t7F.mjs.map +1 -0
  27. package/dist/{index.native-CDfx0N6p.js → index.native-BSheiGj2.js} +38 -15
  28. package/dist/index.native-BSheiGj2.js.map +1 -0
  29. package/dist/index.native.js +1 -1
  30. package/dist/index.native.mjs +1 -1
  31. package/dist/{injected-evm-wallet-provider-CGa692L1.js → injected-evm-wallet-provider-7XawIUdJ.js} +2 -2
  32. package/dist/{injected-evm-wallet-provider-CGa692L1.js.map → injected-evm-wallet-provider-7XawIUdJ.js.map} +1 -1
  33. package/dist/{injected-evm-wallet-provider-LTWiACl5.js → injected-evm-wallet-provider-B-9VXQcH.js} +2 -2
  34. package/dist/{injected-evm-wallet-provider-LTWiACl5.js.map → injected-evm-wallet-provider-B-9VXQcH.js.map} +1 -1
  35. package/dist/{injected-evm-wallet-provider-D8lYGcM2.mjs → injected-evm-wallet-provider-BVsxOzYr.mjs} +2 -2
  36. package/dist/{injected-evm-wallet-provider-D8lYGcM2.mjs.map → injected-evm-wallet-provider-BVsxOzYr.mjs.map} +1 -1
  37. package/dist/{injected-evm-wallet-provider-Bi9G3X35.mjs → injected-evm-wallet-provider-DnOrVMDX.mjs} +2 -2
  38. package/dist/{injected-evm-wallet-provider-Bi9G3X35.mjs.map → injected-evm-wallet-provider-DnOrVMDX.mjs.map} +1 -1
  39. package/dist/{injected-wallet-provider-TPx8Wzvq.js → injected-wallet-provider-BMDJntMD.js} +2 -2
  40. package/dist/{injected-wallet-provider-TPx8Wzvq.js.map → injected-wallet-provider-BMDJntMD.js.map} +1 -1
  41. package/dist/{injected-wallet-provider-kx8tcMKM.mjs → injected-wallet-provider-Bqk33sir.mjs} +2 -2
  42. package/dist/{injected-wallet-provider-kx8tcMKM.mjs.map → injected-wallet-provider-Bqk33sir.mjs.map} +1 -1
  43. package/dist/{injected-wallet-provider-DYZFxIdd.js → injected-wallet-provider-D574oPzH.js} +2 -2
  44. package/dist/{injected-wallet-provider-DYZFxIdd.js.map → injected-wallet-provider-D574oPzH.js.map} +1 -1
  45. package/dist/{injected-wallet-provider-CcyA5JBS.mjs → injected-wallet-provider-ZkPzVj5W.mjs} +2 -2
  46. package/dist/{injected-wallet-provider-CcyA5JBS.mjs.map → injected-wallet-provider-ZkPzVj5W.mjs.map} +1 -1
  47. package/package.json +2 -2
  48. package/dist/index-CQtGkKVd.mjs.map +0 -1
  49. package/dist/index-iu8vB4ye.js.map +0 -1
  50. package/dist/index.native-CDfx0N6p.js.map +0 -1
  51. package/dist/index.native-Crfn_NOB.mjs.map +0 -1
@@ -3686,6 +3686,7 @@ const OIDC_NO_WALLET = 'This login has no embedded wallet. Enable `"auth": { "wa
3686
3686
  'then sign from a user gesture.';
3687
3687
  const PKCE_STORE_KEY = 'bounded.oidc.pkce';
3688
3688
  const STORED_AUTH_METHOD_KEY$1 = 'bounded_last_auth_method';
3689
+ const ISSUER_SESSION_KIND_KEY$1 = 'bounded_issuer_session_kind';
3689
3690
  // Active session store (Web on web, RN on React Native) — selected by config,
3690
3691
  // not by `typeof window` (truthy on RN). OIDC redirect/popup is web-only, but the
3691
3692
  // session it mints is read back through this same selector everywhere.
@@ -4174,6 +4175,13 @@ async function establishInlineSession(data) {
4174
4175
  getPlatform().storage.setItem(STORED_AUTH_METHOD_KEY$1, 'email');
4175
4176
  }
4176
4177
  catch ( /* storage unavailable */_a) { /* storage unavailable */ }
4178
+ // Turnkey-native OTP mints an app session directly. It does not establish a
4179
+ // Better Auth browser cookie on the issuer, so logout must not navigate
4180
+ // through the issuer's cookie-clearing /logout endpoint.
4181
+ try {
4182
+ getPlatform().storage.setItem(ISSUER_SESSION_KIND_KEY$1, 'inline');
4183
+ }
4184
+ catch ( /* storage unavailable */_b) { /* storage unavailable */ }
4177
4185
  setCurrentUser(user);
4178
4186
  setAuthProviderInstance(oidcProviderSingleton);
4179
4187
  return user;
@@ -4220,6 +4228,13 @@ async function exchangeCode(code, verifier, redirectUri) {
4220
4228
  getPlatform().storage.setItem(STORED_AUTH_METHOD_KEY$1, 'email');
4221
4229
  }
4222
4230
  catch ( /* storage unavailable */_b) { /* storage unavailable */ }
4231
+ // OIDC login does establish the issuer's Better Auth browser cookie. Record
4232
+ // that fact separately from the provider name so logout clears the cookie
4233
+ // and returns through the registered app origin.
4234
+ try {
4235
+ getPlatform().storage.setItem(ISSUER_SESSION_KIND_KEY$1, 'hosted');
4236
+ }
4237
+ catch ( /* storage unavailable */_c) { /* storage unavailable */ }
4223
4238
  setCurrentUser(user);
4224
4239
  setAuthProviderInstance(oidcProviderSingleton);
4225
4240
  return user;
@@ -4236,6 +4251,7 @@ const objectIdentityKeys = new WeakMap();
4236
4251
  let nextObjectIdentityKey = 1;
4237
4252
  // --- localStorage helpers: track which auth method created the active session ---
4238
4253
  const STORED_AUTH_METHOD_KEY = 'bounded_last_auth_method';
4254
+ const ISSUER_SESSION_KIND_KEY = 'bounded_issuer_session_kind';
4239
4255
  function getStoredAuthMethod() {
4240
4256
  try {
4241
4257
  return getPlatform().storage.getItem(STORED_AUTH_METHOD_KEY);
@@ -4252,11 +4268,25 @@ function setStoredAuthMethod(method) {
4252
4268
  else {
4253
4269
  getPlatform().storage.removeItem(STORED_AUTH_METHOD_KEY);
4254
4270
  }
4271
+ // Non-email providers cannot own a Better Auth browser session. Clear
4272
+ // any prior hosted/inline classification when the active provider is
4273
+ // replaced or the session is removed.
4274
+ if (method !== 'email') {
4275
+ getPlatform().storage.removeItem(ISSUER_SESSION_KIND_KEY);
4276
+ }
4255
4277
  }
4256
4278
  catch (_a) {
4257
4279
  // storage might not be available
4258
4280
  }
4259
4281
  }
4282
+ function getIssuerSessionKind() {
4283
+ try {
4284
+ return getPlatform().storage.getItem(ISSUER_SESSION_KIND_KEY);
4285
+ }
4286
+ catch (_a) {
4287
+ return null;
4288
+ }
4289
+ }
4260
4290
  function getStoredIdToken() {
4261
4291
  try {
4262
4292
  return getActiveSessionManager().getIdToken();
@@ -4447,14 +4477,13 @@ function getInitConfig() {
4447
4477
  return initConfig;
4448
4478
  }
4449
4479
  /**
4450
- * Which LOGIN mode the app runs (default "bounded"). "turnkey" opts the app into
4451
- * Turnkey-native email OTP: the unified widget runs the code entry INLINE (no OIDC
4452
- * popup) via startTurnkeyEmailLogin(), and Bounded mints the session from Turnkey's
4453
- * verification. The value comes from init() config (`authMode`); a `openBoundedWidget`
4454
- * option can override it per call. Anything other than "turnkey" is "bounded".
4480
+ * Which LOGIN mode the app runs (default "turnkey"). Turnkey-native email OTP keeps
4481
+ * code entry inline in the unified widget (no OIDC popup), and Bounded mints the
4482
+ * session from Turnkey's verification. Apps can explicitly select "bounded" for the
4483
+ * legacy Better Auth email flow. A per-call openBoundedWidget option can override it.
4455
4484
  */
4456
4485
  function resolveAuthMode(config) {
4457
- return config.authMode === 'turnkey' ? 'turnkey' : 'bounded';
4486
+ return config.authMode === 'bounded' ? 'bounded' : 'turnkey';
4458
4487
  }
4459
4488
  /**
4460
4489
  * Resolve the injected-wallet-config the provider should use, merging the
@@ -4515,7 +4544,7 @@ async function getAuthProvider(config) {
4515
4544
  // manager as legacy email sessions. Human login should be started
4516
4545
  // with loginWithRedirect(); this provider is kept as the restore and
4517
4546
  // logout surface for those sessions.
4518
- currentAuthProvider = new (await import('./email-auth-provider-nBv7mW9q.mjs')).EmailAuthProvider();
4547
+ currentAuthProvider = new (await import('./email-auth-provider-vWv0rnbd.mjs')).EmailAuthProvider();
4519
4548
  break;
4520
4549
  case "wallet":
4521
4550
  case "phantom": {
@@ -4534,7 +4563,7 @@ async function getAuthProvider(config) {
4534
4563
  if (!isWalletLoginEnabled(config)) {
4535
4564
  throw walletLoginNotEnabledError(authMethod);
4536
4565
  }
4537
- const { InjectedWalletProvider } = await import('./injected-wallet-provider-kx8tcMKM.mjs');
4566
+ const { InjectedWalletProvider } = await import('./injected-wallet-provider-Bqk33sir.mjs');
4538
4567
  currentAuthProvider = new InjectedWalletProvider(resolveInjectedWalletConfig(config), rpcUrl, configuredNetwork);
4539
4568
  break;
4540
4569
  }
@@ -4547,7 +4576,7 @@ async function getAuthProvider(config) {
4547
4576
  // Selecting authMethod:'evm-wallet' IS the opt-in — pass evmWalletConfig
4548
4577
  // to point at a specific wallet or set chainId/domain.
4549
4578
  const evmWalletConfig = ((_a = config.evmWalletConfig) !== null && _a !== void 0 ? _a : {});
4550
- const { InjectedEvmWalletProvider } = await import('./injected-evm-wallet-provider-D8lYGcM2.mjs');
4579
+ const { InjectedEvmWalletProvider } = await import('./injected-evm-wallet-provider-BVsxOzYr.mjs');
4551
4580
  currentAuthProvider = new InjectedEvmWalletProvider(evmWalletConfig);
4552
4581
  break;
4553
4582
  }
@@ -4575,7 +4604,7 @@ async function getAuthProvider(config) {
4575
4604
  break;
4576
4605
  case "guest":
4577
4606
  // Anonymous auth: a device-local ed25519 keypair signs the challenge.
4578
- currentAuthProvider = new (await import('./guest-auth-provider-DGvQgIwm.mjs')).GuestAuthProvider();
4607
+ currentAuthProvider = new (await import('./guest-auth-provider-CeIZw5x6.mjs')).GuestAuthProvider();
4579
4608
  break;
4580
4609
  }
4581
4610
  if (!currentAuthProvider) {
@@ -4631,7 +4660,7 @@ async function signInAnonymously() {
4631
4660
  // Lazy-load the guest provider so its ed25519/web3 dependencies stay out of
4632
4661
  // the main bundle for data-only apps. Specifier is a static string literal
4633
4662
  // so bundle-splitting can see it.
4634
- const provider = new (await import('./guest-auth-provider-DGvQgIwm.mjs')).GuestAuthProvider();
4663
+ const provider = new (await import('./guest-auth-provider-CeIZw5x6.mjs')).GuestAuthProvider();
4635
4664
  setAuthLoading(true); // reflect "signing in…" while the guest keypair session is minted
4636
4665
  const commit = (user) => {
4637
4666
  // No await/interleaving inside this block: provider/method/config/marker
@@ -4782,7 +4811,7 @@ async function loginWithWallet(options) {
4782
4811
  ? Object.assign(Object.assign({}, base), { getProvider: options.getProvider }) : base;
4783
4812
  const rpcUrl = normalizeSolanaRpcUrl(cfg.rpcUrl);
4784
4813
  const network = getConfiguredSolanaNetwork(cfg);
4785
- const { InjectedWalletProvider } = await import('./injected-wallet-provider-kx8tcMKM.mjs');
4814
+ const { InjectedWalletProvider } = await import('./injected-wallet-provider-Bqk33sir.mjs');
4786
4815
  let provider = new InjectedWalletProvider(injectedConfig, rpcUrl, network);
4787
4816
  if (coreConfig.chain === 'offchain')
4788
4817
  provider = new OffchainAuthProvider(provider);
@@ -4927,15 +4956,15 @@ async function logout$1(options) {
4927
4956
  const idTokenHint = idTokenHintOrNull(sm);
4928
4957
  if (refreshToken)
4929
4958
  await revokeSession(refreshToken, sessionIssuer !== null && sessionIssuer !== void 0 ? sessionIssuer : undefined);
4930
- // Hosted sessions ('email' covers the whole hosted surface: email OTP +
4931
- // social + the OIDC redirect/popup flows) are the ones with an issuer
4932
- // cookie; wallet and guest sessions have nothing hosted to end.
4933
- // Check the STORED marker as well as the in-memory method: the hosted
4934
- // OIDC flows (loginWithPopup / completeLoginFromRedirect) write the
4935
- // 'email' marker via exchangeCode() but never touch currentAuthMethod,
4936
- // which stays 'guest'/explicit even after a hosted upgrade. Worst case of
4937
- // a false positive is a harmless idempotent issuer bounce.
4938
- const wasHosted = currentAuthMethod === 'email' || getStoredAuthMethod() === 'email';
4959
+ // Only OIDC-hosted sessions own an issuer browser cookie. Turnkey-native
4960
+ // email OTP is also an email auth method, but it mints the app session
4961
+ // inline and has no issuer cookie to clear. Use the explicit session-kind
4962
+ // marker when present. The auth-method fallback preserves correct logout
4963
+ // behavior for hosted sessions created by older SDK versions.
4964
+ const issuerSessionKind = getIssuerSessionKind();
4965
+ const wasHosted = issuerSessionKind === 'hosted'
4966
+ || (issuerSessionKind === null
4967
+ && (currentAuthMethod === 'email' || getStoredAuthMethod() === 'email'));
4939
4968
  await currentAuthProvider.logout();
4940
4969
  setStoredAuthMethod(null);
4941
4970
  currentAuthProvider = null;
@@ -8034,4 +8063,4 @@ function defaultInjectedEvmProvider() {
8034
8063
  }
8035
8064
 
8036
8065
  export { FAILURE_REASONS as $, completeLoginFromRedirect as A, loginWithPopup as B, completeLoginInPopup as C, openBoundedWidget as D, EMBEDDED_WALLET_UNSUPPORTED as E, useAuth as F, useQuery as G, useBuildRun as H, apps as I, deserializeTransaction as J, signSolanaMessageViaTurnkey as K, getOrCreateTurnkeyWallet as L, startTurnkeyEmailLogin as M, getIdToken as N, onramp as O, onrampQuote as P, onrampStatus as Q, setPlatform as R, OffchainAuthProvider as S, PrivyExpoProvider as T, requestEip6963Providers as U, builds as V, BuildsApiError as W, NON_TERMINAL_STATES as X, TERMINAL_STATES as Y, RUN_STATES as Z, PARK_REASONS as _, hasEmbeddedEvmWallet as a, BUILD_REVIEW_CAPABILITY_SCHEMA as a0, BUILD_REVIEW_CAPABILITY_REFRESH_SCHEMA as a1, BUILD_DELEGATED_REVIEW_CAPABILITY_SCHEMA as a2, embeddedSignAndSubmit as b, setAuthLoading as c, defaultInjectedProvider as d, embeddedRunEvmTransaction as e, bufferExports as f, getPlatform as g, hasEmbeddedWallet as h, bs58 as i, confirmAndCheckTransaction as j, defaultInjectedEvmProvider as k, init as l, getCurrentUser as m, normalizeSolanaRpcUrl as n, onAuthStateChanged as o, onAuthLoadingChanged as p, getAuthLoading as q, resolveSolanaRpcUrl as r, setCurrentUser as s, login as t, logout as u, getAuthProvider as v, signInAnonymously as w, loginWithPrivy as x, loginWithWallet as y, loginWithRedirect as z };
8037
- //# sourceMappingURL=index-CQtGkKVd.mjs.map
8066
+ //# sourceMappingURL=index-DpJl_Cpa.mjs.map