@bounded-sh/client 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/auth/providers/phantom-wallet-provider.d.ts +1 -1
- package/dist/auth/providers/privy-expo-provider.d.ts +1 -1
- package/dist/auth/providers/solana-mobile-wallet-provider.d.ts +3 -3
- package/dist/{index-BHTfW8CV.esm.js → index-B2ytfYTB.esm.js} +2 -2
- package/dist/{index-BHTfW8CV.esm.js.map → index-B2ytfYTB.esm.js.map} +1 -1
- package/dist/{index-CT2j1oic.esm.js → index-BFOmV3Pb.esm.js} +2 -2
- package/dist/{index-CT2j1oic.esm.js.map → index-BFOmV3Pb.esm.js.map} +1 -1
- package/dist/{index-VGx-869x.js → index-BL-0ZKBl.js} +76 -76
- package/dist/index-BL-0ZKBl.js.map +1 -0
- package/dist/{index-sKqrgk0t.js → index-BgAygrhE.js} +2 -2
- package/dist/{index-sKqrgk0t.js.map → index-BgAygrhE.js.map} +1 -1
- package/dist/{index-C1VOdmRN.js → index-CqoP9udN.js} +2 -2
- package/dist/{index-C1VOdmRN.js.map → index-CqoP9udN.js.map} +1 -1
- package/dist/{index-o5Hv9pfS.esm.js → index-D986s6w7.esm.js} +76 -76
- package/dist/index-D986s6w7.esm.js.map +1 -0
- package/dist/{index.browser-DaNhOhkQ.esm.js → index.browser-Bd0GwRur.esm.js} +2 -2
- package/dist/{index.browser-DaNhOhkQ.esm.js.map → index.browser-Bd0GwRur.esm.js.map} +1 -1
- package/dist/{index.browser-utVKQsEC.js → index.browser-BeM1bzpe.js} +2 -2
- package/dist/{index.browser-utVKQsEC.js.map → index.browser-BeM1bzpe.js.map} +1 -1
- package/dist/{index.browser-DhAcjdpV.esm.js → index.browser-D2xm-q6N.esm.js} +2 -2
- package/dist/{index.browser-DhAcjdpV.esm.js.map → index.browser-D2xm-q6N.esm.js.map} +1 -1
- package/dist/{index.browser-BJZ7fYwv.js → index.browser-D8u31irV.js} +2 -2
- package/dist/{index.browser-BJZ7fYwv.js.map → index.browser-D8u31irV.js.map} +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.esm.js +1 -1
- package/dist/index.js +1 -1
- package/dist/{index.native-JPUkdHJj.esm.js → index.native-B-cLm_BI.esm.js} +50 -50
- package/dist/index.native-B-cLm_BI.esm.js.map +1 -0
- package/dist/{index.native-B5IBOdv_.js → index.native-NgHStPq0.js} +50 -50
- package/dist/index.native-NgHStPq0.js.map +1 -0
- package/dist/index.native.d.ts +1 -1
- package/dist/index.native.esm.js +1 -1
- package/dist/index.native.js +1 -1
- package/dist/{phantom-wallet-provider-DMlaSrAl.esm.js → phantom-wallet-provider-Cy5T9EVd.esm.js} +10 -10
- package/dist/phantom-wallet-provider-Cy5T9EVd.esm.js.map +1 -0
- package/dist/{phantom-wallet-provider-CDLyxrih.js → phantom-wallet-provider-Dy48LSdU.js} +10 -10
- package/dist/phantom-wallet-provider-Dy48LSdU.js.map +1 -0
- package/dist/{privy-wallet-provider-nR52lXzI.esm.js → privy-wallet-provider-BDsrUpk4.esm.js} +5 -5
- package/dist/privy-wallet-provider-BDsrUpk4.esm.js.map +1 -0
- package/dist/{privy-wallet-provider-DiHHTDbZ.js → privy-wallet-provider-CiKtBJ5M.js} +5 -5
- package/dist/privy-wallet-provider-CiKtBJ5M.js.map +1 -0
- package/dist/{solana-mobile-wallet-provider-B4CeMMQd.esm.js → solana-mobile-wallet-provider-CSk_FIww.esm.js} +20 -20
- package/dist/solana-mobile-wallet-provider-CSk_FIww.esm.js.map +1 -0
- package/dist/{solana-mobile-wallet-provider-BYMfFjZb.js → solana-mobile-wallet-provider-k_YdrTJZ.js} +20 -20
- package/dist/solana-mobile-wallet-provider-k_YdrTJZ.js.map +1 -0
- package/package.json +2 -2
- package/dist/index-VGx-869x.js.map +0 -1
- package/dist/index-o5Hv9pfS.esm.js.map +0 -1
- package/dist/index.native-B5IBOdv_.js.map +0 -1
- package/dist/index.native-JPUkdHJj.esm.js.map +0 -1
- package/dist/phantom-wallet-provider-CDLyxrih.js.map +0 -1
- package/dist/phantom-wallet-provider-DMlaSrAl.esm.js.map +0 -1
- package/dist/privy-wallet-provider-DiHHTDbZ.js.map +0 -1
- package/dist/privy-wallet-provider-nR52lXzI.esm.js.map +0 -1
- package/dist/solana-mobile-wallet-provider-B4CeMMQd.esm.js.map +0 -1
- package/dist/solana-mobile-wallet-provider-BYMfFjZb.js.map +0 -1
|
@@ -6472,7 +6472,7 @@ function getWebhookKeysUrl() {
|
|
|
6472
6472
|
/**
|
|
6473
6473
|
* True when init() configured a Bounded network (the Cloudflare-native stack).
|
|
6474
6474
|
* Synchronous + non-blocking. Used to route reads/writes that behave differently
|
|
6475
|
-
* on Bounded vs the legacy
|
|
6475
|
+
* on Bounded vs the legacy backend (e.g. `count`/`aggregate`, which on
|
|
6476
6476
|
* Bounded must use the deterministic server aggregation, not the legacy AI query).
|
|
6477
6477
|
*/
|
|
6478
6478
|
function isBoundedNetwork() {
|
|
@@ -9327,7 +9327,7 @@ class WebSessionManager {
|
|
|
9327
9327
|
// the RIGHT /session/refresh. Email overrides with humanAuthApiUrl; all
|
|
9328
9328
|
// wallet/guest/signature flows default to authApiUrl (the bounded-auth issuer).
|
|
9329
9329
|
const sessionIssuer = (issuer || config.authApiUrl || "").replace(/\/$/, "");
|
|
9330
|
-
localStorage.setItem(this.
|
|
9330
|
+
localStorage.setItem(this.BOUNDED_SESSION_STORAGE_KEY, JSON.stringify(Object.assign({ address,
|
|
9331
9331
|
accessToken,
|
|
9332
9332
|
idToken,
|
|
9333
9333
|
refreshToken, appId: currentAppId }, (sessionIssuer ? { issuer: sessionIssuer } : {}))));
|
|
@@ -9338,7 +9338,7 @@ class WebSessionManager {
|
|
|
9338
9338
|
static async getSession() {
|
|
9339
9339
|
if (typeof window === "undefined")
|
|
9340
9340
|
return null;
|
|
9341
|
-
const session = localStorage.getItem(this.
|
|
9341
|
+
const session = localStorage.getItem(this.BOUNDED_SESSION_STORAGE_KEY);
|
|
9342
9342
|
if (!session)
|
|
9343
9343
|
return null;
|
|
9344
9344
|
const sessionObj = JSON.parse(session);
|
|
@@ -9362,7 +9362,7 @@ class WebSessionManager {
|
|
|
9362
9362
|
// Persist the ROTATED refresh token — the old one is now
|
|
9363
9363
|
// single-use spent; reusing it would revoke the family.
|
|
9364
9364
|
refreshed.refreshToken);
|
|
9365
|
-
const newSession = localStorage.getItem(this.
|
|
9365
|
+
const newSession = localStorage.getItem(this.BOUNDED_SESSION_STORAGE_KEY);
|
|
9366
9366
|
if (!newSession)
|
|
9367
9367
|
return null;
|
|
9368
9368
|
const newObj = JSON.parse(newSession);
|
|
@@ -9386,14 +9386,14 @@ class WebSessionManager {
|
|
|
9386
9386
|
static clearSession() {
|
|
9387
9387
|
if (typeof window === "undefined")
|
|
9388
9388
|
return;
|
|
9389
|
-
localStorage.removeItem(this.
|
|
9389
|
+
localStorage.removeItem(this.BOUNDED_SESSION_STORAGE_KEY);
|
|
9390
9390
|
}
|
|
9391
9391
|
/* ------------------------------------------------------------------ */
|
|
9392
9392
|
/* IS-AUTH */
|
|
9393
9393
|
/* ------------------------------------------------------------------ */
|
|
9394
9394
|
static isAuthenticated() {
|
|
9395
9395
|
// NOTE: this remains synchronous to stay backward compatible
|
|
9396
|
-
return !!localStorage.getItem(this.
|
|
9396
|
+
return !!localStorage.getItem(this.BOUNDED_SESSION_STORAGE_KEY);
|
|
9397
9397
|
}
|
|
9398
9398
|
/* ------------------------------------------------------------------ */
|
|
9399
9399
|
/* TOKEN HELPERS */
|
|
@@ -9401,13 +9401,13 @@ class WebSessionManager {
|
|
|
9401
9401
|
static getIdToken() {
|
|
9402
9402
|
if (typeof window === "undefined")
|
|
9403
9403
|
return null;
|
|
9404
|
-
const session = localStorage.getItem(this.
|
|
9404
|
+
const session = localStorage.getItem(this.BOUNDED_SESSION_STORAGE_KEY);
|
|
9405
9405
|
return session ? JSON.parse(session).idToken : null;
|
|
9406
9406
|
}
|
|
9407
9407
|
static getRefreshToken() {
|
|
9408
9408
|
if (typeof window === "undefined")
|
|
9409
9409
|
return null;
|
|
9410
|
-
const session = localStorage.getItem(this.
|
|
9410
|
+
const session = localStorage.getItem(this.BOUNDED_SESSION_STORAGE_KEY);
|
|
9411
9411
|
return session ? JSON.parse(session).refreshToken : null;
|
|
9412
9412
|
}
|
|
9413
9413
|
/** The issuer base that minted this session (for routing silent refresh). */
|
|
@@ -9415,7 +9415,7 @@ class WebSessionManager {
|
|
|
9415
9415
|
var _a;
|
|
9416
9416
|
if (typeof window === "undefined")
|
|
9417
9417
|
return null;
|
|
9418
|
-
const session = localStorage.getItem(this.
|
|
9418
|
+
const session = localStorage.getItem(this.BOUNDED_SESSION_STORAGE_KEY);
|
|
9419
9419
|
return session ? ((_a = JSON.parse(session).issuer) !== null && _a !== void 0 ? _a : null) : null;
|
|
9420
9420
|
}
|
|
9421
9421
|
/* ------------------------------------------------------------------ */
|
|
@@ -9425,7 +9425,7 @@ class WebSessionManager {
|
|
|
9425
9425
|
var _a;
|
|
9426
9426
|
if (typeof window === "undefined")
|
|
9427
9427
|
return;
|
|
9428
|
-
const session = localStorage.getItem(this.
|
|
9428
|
+
const session = localStorage.getItem(this.BOUNDED_SESSION_STORAGE_KEY);
|
|
9429
9429
|
if (!session)
|
|
9430
9430
|
return;
|
|
9431
9431
|
const sessionObj = JSON.parse(session);
|
|
@@ -9442,10 +9442,10 @@ class WebSessionManager {
|
|
|
9442
9442
|
sessionObj.refreshToken = refreshToken;
|
|
9443
9443
|
}
|
|
9444
9444
|
(_a = sessionObj.appId) !== null && _a !== void 0 ? _a : (sessionObj.appId = config.appId);
|
|
9445
|
-
localStorage.setItem(this.
|
|
9445
|
+
localStorage.setItem(this.BOUNDED_SESSION_STORAGE_KEY, JSON.stringify(sessionObj));
|
|
9446
9446
|
}
|
|
9447
9447
|
}
|
|
9448
|
-
WebSessionManager.
|
|
9448
|
+
WebSessionManager.BOUNDED_SESSION_STORAGE_KEY = "bounded_session_storage";
|
|
9449
9449
|
|
|
9450
9450
|
let _config = null;
|
|
9451
9451
|
class ReactNativeSessionManager {
|
|
@@ -9538,7 +9538,7 @@ class ReactNativeSessionManager {
|
|
|
9538
9538
|
// Issuer base for silent refresh (email overrides w/ humanAuthApiUrl; wallet/
|
|
9539
9539
|
// guest default to authApiUrl). See WebSessionManager for the rationale.
|
|
9540
9540
|
const sessionIssuer = (issuer || config.authApiUrl || "").replace(/\/$/, "");
|
|
9541
|
-
this.getStorage().setItem(this.
|
|
9541
|
+
this.getStorage().setItem(this.BOUNDED_SESSION_STORAGE_KEY, JSON.stringify(Object.assign({ address,
|
|
9542
9542
|
accessToken,
|
|
9543
9543
|
idToken,
|
|
9544
9544
|
refreshToken, appId: currentAppId }, (sessionIssuer ? { issuer: sessionIssuer } : {}))));
|
|
@@ -9547,7 +9547,7 @@ class ReactNativeSessionManager {
|
|
|
9547
9547
|
/* GET */
|
|
9548
9548
|
/* ------------------------------------------------------------------ */
|
|
9549
9549
|
static async getSession() {
|
|
9550
|
-
const session = this.getStorage().getItem(this.
|
|
9550
|
+
const session = this.getStorage().getItem(this.BOUNDED_SESSION_STORAGE_KEY);
|
|
9551
9551
|
if (!session)
|
|
9552
9552
|
return null;
|
|
9553
9553
|
const sessionObj = JSON.parse(session);
|
|
@@ -9568,7 +9568,7 @@ class ReactNativeSessionManager {
|
|
|
9568
9568
|
const refreshed = await refreshSession(refreshToken, sessionObj.issuer);
|
|
9569
9569
|
if ((refreshed === null || refreshed === void 0 ? void 0 : refreshed.idToken) && (refreshed === null || refreshed === void 0 ? void 0 : refreshed.accessToken)) {
|
|
9570
9570
|
await this.updateIdTokenAndAccessToken(refreshed.idToken, refreshed.accessToken, refreshed.refreshToken);
|
|
9571
|
-
const newSession = this.getStorage().getItem(this.
|
|
9571
|
+
const newSession = this.getStorage().getItem(this.BOUNDED_SESSION_STORAGE_KEY);
|
|
9572
9572
|
if (!newSession)
|
|
9573
9573
|
return null;
|
|
9574
9574
|
const newObj = JSON.parse(newSession);
|
|
@@ -9590,20 +9590,20 @@ class ReactNativeSessionManager {
|
|
|
9590
9590
|
/* CLEAR */
|
|
9591
9591
|
/* ------------------------------------------------------------------ */
|
|
9592
9592
|
static clearSession() {
|
|
9593
|
-
this.getStorage().removeItem(this.
|
|
9593
|
+
this.getStorage().removeItem(this.BOUNDED_SESSION_STORAGE_KEY);
|
|
9594
9594
|
}
|
|
9595
9595
|
/* ------------------------------------------------------------------ */
|
|
9596
9596
|
/* IS-AUTH */
|
|
9597
9597
|
/* ------------------------------------------------------------------ */
|
|
9598
9598
|
static isAuthenticated() {
|
|
9599
|
-
return !!this.getStorage().getItem(this.
|
|
9599
|
+
return !!this.getStorage().getItem(this.BOUNDED_SESSION_STORAGE_KEY);
|
|
9600
9600
|
}
|
|
9601
9601
|
/* ------------------------------------------------------------------ */
|
|
9602
9602
|
/* TOKEN HELPERS */
|
|
9603
9603
|
/* ------------------------------------------------------------------ */
|
|
9604
9604
|
static getIdToken() {
|
|
9605
9605
|
try {
|
|
9606
|
-
const session = this.getStorage().getItem(this.
|
|
9606
|
+
const session = this.getStorage().getItem(this.BOUNDED_SESSION_STORAGE_KEY);
|
|
9607
9607
|
return session ? JSON.parse(session).idToken : null;
|
|
9608
9608
|
}
|
|
9609
9609
|
catch (_a) {
|
|
@@ -9614,7 +9614,7 @@ class ReactNativeSessionManager {
|
|
|
9614
9614
|
static getIssuer() {
|
|
9615
9615
|
var _a;
|
|
9616
9616
|
try {
|
|
9617
|
-
const session = this.getStorage().getItem(this.
|
|
9617
|
+
const session = this.getStorage().getItem(this.BOUNDED_SESSION_STORAGE_KEY);
|
|
9618
9618
|
return session ? ((_a = JSON.parse(session).issuer) !== null && _a !== void 0 ? _a : null) : null;
|
|
9619
9619
|
}
|
|
9620
9620
|
catch (_b) {
|
|
@@ -9623,7 +9623,7 @@ class ReactNativeSessionManager {
|
|
|
9623
9623
|
}
|
|
9624
9624
|
static getRefreshToken() {
|
|
9625
9625
|
try {
|
|
9626
|
-
const session = this.getStorage().getItem(this.
|
|
9626
|
+
const session = this.getStorage().getItem(this.BOUNDED_SESSION_STORAGE_KEY);
|
|
9627
9627
|
return session ? JSON.parse(session).refreshToken : null;
|
|
9628
9628
|
}
|
|
9629
9629
|
catch (_a) {
|
|
@@ -9635,7 +9635,7 @@ class ReactNativeSessionManager {
|
|
|
9635
9635
|
/* ------------------------------------------------------------------ */
|
|
9636
9636
|
static async updateIdTokenAndAccessToken(idToken, accessToken, refreshToken) {
|
|
9637
9637
|
var _a;
|
|
9638
|
-
const session = this.getStorage().getItem(this.
|
|
9638
|
+
const session = this.getStorage().getItem(this.BOUNDED_SESSION_STORAGE_KEY);
|
|
9639
9639
|
if (!session)
|
|
9640
9640
|
return;
|
|
9641
9641
|
const sessionObj = JSON.parse(session);
|
|
@@ -9651,10 +9651,10 @@ class ReactNativeSessionManager {
|
|
|
9651
9651
|
sessionObj.refreshToken = refreshToken;
|
|
9652
9652
|
}
|
|
9653
9653
|
(_a = sessionObj.appId) !== null && _a !== void 0 ? _a : (sessionObj.appId = config.appId);
|
|
9654
|
-
this.getStorage().setItem(this.
|
|
9654
|
+
this.getStorage().setItem(this.BOUNDED_SESSION_STORAGE_KEY, JSON.stringify(sessionObj));
|
|
9655
9655
|
}
|
|
9656
9656
|
}
|
|
9657
|
-
ReactNativeSessionManager.
|
|
9657
|
+
ReactNativeSessionManager.BOUNDED_SESSION_STORAGE_KEY = "bounded_session_storage";
|
|
9658
9658
|
|
|
9659
9659
|
/**
|
|
9660
9660
|
* Return the active CLIENT session manager for the current runtime.
|
|
@@ -10175,9 +10175,9 @@ async function buildSetDocumentsTransaction(connection, idl, anchorProvider, pay
|
|
|
10175
10175
|
/* ENV helpers */
|
|
10176
10176
|
/* ------------------------------------------------------------------ */
|
|
10177
10177
|
// Canonical `BOUNDED_PRIVATE_KEY` (matches the CLI); legacy
|
|
10178
|
-
// `
|
|
10178
|
+
// `BOUNDED_SOLANA_KEYPAIR` still honored. Only consulted when no explicit
|
|
10179
10179
|
// keypair was provided (createWalletClient passes one).
|
|
10180
|
-
const ENV_KEYPAIRS = ["BOUNDED_PRIVATE_KEY", "
|
|
10180
|
+
const ENV_KEYPAIRS = ["BOUNDED_PRIVATE_KEY", "BOUNDED_SOLANA_KEYPAIR"];
|
|
10181
10181
|
function loadKeypairFromEnv() {
|
|
10182
10182
|
let secret;
|
|
10183
10183
|
let found;
|
|
@@ -10300,7 +10300,7 @@ var serverSessionManager = /*#__PURE__*/Object.freeze({
|
|
|
10300
10300
|
});
|
|
10301
10301
|
|
|
10302
10302
|
/**
|
|
10303
|
-
* Safe base64 helpers for
|
|
10303
|
+
* Safe base64 helpers for bounded-core.
|
|
10304
10304
|
*
|
|
10305
10305
|
* Uses the global atob/btoa when available (browser, RN with polyfill),
|
|
10306
10306
|
* falls back to the 'buffer' package (Node.js / SSR / RN without polyfill).
|
|
@@ -10480,7 +10480,7 @@ axiosRetry(apiClient, {
|
|
|
10480
10480
|
shouldResetTimeout: true,
|
|
10481
10481
|
onRetry: (retryCount, error, requestConfig) => {
|
|
10482
10482
|
var _a;
|
|
10483
|
-
console.warn(`[
|
|
10483
|
+
console.warn(`[bounded-sdk] retry ${retryCount} for ${(_a = requestConfig.method) === null || _a === void 0 ? void 0 : _a.toUpperCase()} ${requestConfig.url} — ${error.code || error.message}`);
|
|
10484
10484
|
},
|
|
10485
10485
|
});
|
|
10486
10486
|
const refreshInFlight = new Map();
|
|
@@ -10539,8 +10539,8 @@ async function makeApiRequest(method, urlPath, data, _overrides) {
|
|
|
10539
10539
|
: await createAuthHeader(config.isServer);
|
|
10540
10540
|
const headers = Object.assign({ "Content-Type": "application/json", "X-Public-App-Id": config.appId, "X-App-Id": config.appId }, authHeader);
|
|
10541
10541
|
if (typeof window !== "undefined" &&
|
|
10542
|
-
window.
|
|
10543
|
-
const customAppId = window.
|
|
10542
|
+
window.CUSTOM_BOUNDED_APP_ID_HEADER) {
|
|
10543
|
+
const customAppId = window.CUSTOM_BOUNDED_APP_ID_HEADER;
|
|
10544
10544
|
if (customAppId) {
|
|
10545
10545
|
headers["X-App-Id"] = customAppId;
|
|
10546
10546
|
}
|
|
@@ -10799,7 +10799,7 @@ function parseAggregateValue(result) {
|
|
|
10799
10799
|
* Count items in a collection path. Returns a numeric result.
|
|
10800
10800
|
*
|
|
10801
10801
|
* This uses the AI query engine with a count-specific prompt prefix,
|
|
10802
|
-
* so
|
|
10802
|
+
* so Bounded will generate a $count aggregation pipeline and return
|
|
10803
10803
|
* just the count rather than full documents.
|
|
10804
10804
|
*
|
|
10805
10805
|
* IMPORTANT: This only works for collections where the read policy is "true".
|
|
@@ -11324,10 +11324,10 @@ async function setMany(many, options) {
|
|
|
11324
11324
|
let documents = [];
|
|
11325
11325
|
const pathsToInvalidate = new Set();
|
|
11326
11326
|
for (const { path, document: documentWithReservedFields } of many) {
|
|
11327
|
-
// for setting, we should remove any pieces of the document that start with '
|
|
11327
|
+
// for setting, we should remove any pieces of the document that start with '_' as they are internal and shouldn't be updated. The API would block it if it is one of the reserved ones
|
|
11328
11328
|
let document = documentWithReservedFields;
|
|
11329
11329
|
if (documentWithReservedFields) {
|
|
11330
|
-
document = Object.fromEntries(Object.entries(documentWithReservedFields).filter(([key]) => !key.startsWith('
|
|
11330
|
+
document = Object.fromEntries(Object.entries(documentWithReservedFields).filter(([key]) => !key.startsWith('_')));
|
|
11331
11331
|
}
|
|
11332
11332
|
const normalizedPath = path.startsWith("/") ? path.slice(1) : path;
|
|
11333
11333
|
pathsToInvalidate.add(normalizedPath);
|
|
@@ -11451,7 +11451,7 @@ async function setMany(many, options) {
|
|
|
11451
11451
|
var _a, _b, _c, _d, _e;
|
|
11452
11452
|
// NOTE (backwards-compat revert): a program-allowlist on server-supplied
|
|
11453
11453
|
// `preInstructions` was tried here for the audit-8 SOL-drain concern, but it
|
|
11454
|
-
// broke legitimate onchain DeFi flows —
|
|
11454
|
+
// broke legitimate onchain DeFi flows — bounded routes Phoenix, Jupiter/swap,
|
|
11455
11455
|
// SPL-Token and ATA-creation instructions through standard-path preInstructions
|
|
11456
11456
|
// (see sol-helper remaining-accounts-extractor). A correct audit-8 fix must be
|
|
11457
11457
|
// DeFi-aware (e.g. block ONLY a raw System Transfer/TransferWithSeed, never a
|
|
@@ -11535,10 +11535,10 @@ async function setMany(many, options) {
|
|
|
11535
11535
|
const transaction = web3_js.VersionedTransaction.deserialize(txBytes);
|
|
11536
11536
|
// Validate the transaction before signing: ensure only allowed programs
|
|
11537
11537
|
// and no unauthorized System program instructions (e.g., SOL transfers)
|
|
11538
|
-
const
|
|
11538
|
+
const BOUNDED_PROGRAM = 'poof4b5pk1L9tmThvBmaABjcyjfhFGbMbQP5BXk2QZp';
|
|
11539
11539
|
const COMPUTE_BUDGET = 'ComputeBudget111111111111111111111111111111';
|
|
11540
11540
|
const SYSTEM_PROGRAM = '11111111111111111111111111111111';
|
|
11541
|
-
const ALLOWED_PROGRAMS = new Set([
|
|
11541
|
+
const ALLOWED_PROGRAMS = new Set([BOUNDED_PROGRAM, COMPUTE_BUDGET, SYSTEM_PROGRAM]);
|
|
11542
11542
|
// System program instruction discriminators (first 4 bytes, little-endian u32)
|
|
11543
11543
|
const SYSTEM_TRANSFER = 2; // Transfer instruction index
|
|
11544
11544
|
const SYSTEM_TRANSFER_WITH_SEED = 11;
|
|
@@ -12132,8 +12132,8 @@ async function getOrCreateConnection(appId, isServer, routePath, authTokenProvid
|
|
|
12132
12132
|
if (appId && appId !== config.appId) {
|
|
12133
12133
|
wsUrl.searchParams.append('appId', appId);
|
|
12134
12134
|
}
|
|
12135
|
-
else if (typeof window !== 'undefined' && window.
|
|
12136
|
-
wsUrl.searchParams.append('appId', window.
|
|
12135
|
+
else if (typeof window !== 'undefined' && window.CUSTOM_BOUNDED_APP_ID_HEADER) {
|
|
12136
|
+
wsUrl.searchParams.append('appId', window.CUSTOM_BOUNDED_APP_ID_HEADER);
|
|
12137
12137
|
}
|
|
12138
12138
|
else {
|
|
12139
12139
|
wsUrl.searchParams.append('appId', config.appId);
|
|
@@ -12993,7 +12993,7 @@ function serverTimestamp() {
|
|
|
12993
12993
|
// ---------------------------------------------------------------------------
|
|
12994
12994
|
// IDB helpers (lazy-loaded, non-blocking)
|
|
12995
12995
|
// ---------------------------------------------------------------------------
|
|
12996
|
-
const IDB_NAME$1 = '
|
|
12996
|
+
const IDB_NAME$1 = 'bounded-realtime';
|
|
12997
12997
|
const IDB_STORE$1 = 'subscriptions';
|
|
12998
12998
|
const IDB_VERSION = 1;
|
|
12999
12999
|
let idbPromise = null;
|
|
@@ -13431,10 +13431,10 @@ class RealtimeStore {
|
|
|
13431
13431
|
const normalizedPath = path.startsWith('/') ? path.slice(1) : path;
|
|
13432
13432
|
const collectionPath = this.getCollectionPath(normalizedPath);
|
|
13433
13433
|
const optimisticDoc = Object.assign(Object.assign({ _id: normalizedPath, pathId: normalizedPath }, resolvedDoc), {
|
|
13434
|
-
// System timestamp field name
|
|
13435
|
-
//
|
|
13434
|
+
// System timestamp field name: the Bounded worker stamps the neutral
|
|
13435
|
+
// `_updatedAt`; the underscore-prefixed `_updated_at` metadata mirror.
|
|
13436
13436
|
// Match it so the optimistic doc lines up with the server's confirmation.
|
|
13437
|
-
[isBoundedNetwork() ? '_updatedAt' : '
|
|
13437
|
+
[isBoundedNetwork() ? '_updatedAt' : '_updated_at']: Date.now() });
|
|
13438
13438
|
const sub = this.findSubscriptionByPath(collectionPath);
|
|
13439
13439
|
let prevDoc = null;
|
|
13440
13440
|
if (sub) {
|
|
@@ -18548,7 +18548,7 @@ let currentAuthProvider = null;
|
|
|
18548
18548
|
let currentAuthMethod = null;
|
|
18549
18549
|
let initConfig = null;
|
|
18550
18550
|
// --- localStorage helpers: track which auth method the user last logged in with ---
|
|
18551
|
-
const STORED_AUTH_METHOD_KEY$1 = '
|
|
18551
|
+
const STORED_AUTH_METHOD_KEY$1 = 'bounded_last_auth_method';
|
|
18552
18552
|
function getStoredAuthMethod() {
|
|
18553
18553
|
try {
|
|
18554
18554
|
return getPlatform().storage.getItem(STORED_AUTH_METHOD_KEY$1);
|
|
@@ -19301,7 +19301,7 @@ async function loadDependencies() {
|
|
|
19301
19301
|
const [reactModule, reactDomModule, phantomModule] = await Promise.all([
|
|
19302
19302
|
import('react'),
|
|
19303
19303
|
import('react-dom/client'),
|
|
19304
|
-
Promise.resolve().then(function () { return require('./index-
|
|
19304
|
+
Promise.resolve().then(function () { return require('./index-BgAygrhE.js'); })
|
|
19305
19305
|
]);
|
|
19306
19306
|
// Extract default export from ESM module namespace
|
|
19307
19307
|
// Dynamic import() returns { default: Module, ...exports }, not the module directly
|
|
@@ -19491,7 +19491,7 @@ class PhantomWalletProvider {
|
|
|
19491
19491
|
};
|
|
19492
19492
|
}
|
|
19493
19493
|
}, [phantom, phantom === null || phantom === void 0 ? void 0 : phantom.isConnected, phantom === null || phantom === void 0 ? void 0 : phantom.addresses, phantom === null || phantom === void 0 ? void 0 : phantom.isLoading, connect, disconnect, isDisconnecting, modal, modal.isOpened, solana, solana === null || solana === void 0 ? void 0 : solana.connected, solanaHook.isAvailable, connectError]);
|
|
19494
|
-
// Auto-login: If connected but no
|
|
19494
|
+
// Auto-login: If connected but no Bounded session, try to create one.
|
|
19495
19495
|
// This handles social login callbacks where user returns from OAuth already connected.
|
|
19496
19496
|
React.useEffect(() => {
|
|
19497
19497
|
const autoCreateSession = async () => {
|
|
@@ -19505,7 +19505,7 @@ class PhantomWalletProvider {
|
|
|
19505
19505
|
// and clears it on logout, so this guard is correct in both
|
|
19506
19506
|
// steady-state and post-logout cases.
|
|
19507
19507
|
try {
|
|
19508
|
-
if (getPlatform().storage.getItem('
|
|
19508
|
+
if (getPlatform().storage.getItem('bounded_last_auth_method') === 'mobile-wallet-adapter') {
|
|
19509
19509
|
return;
|
|
19510
19510
|
}
|
|
19511
19511
|
}
|
|
@@ -19543,7 +19543,7 @@ class PhantomWalletProvider {
|
|
|
19543
19543
|
// in flight. If MWA owns the auth method now, abort before we
|
|
19544
19544
|
// overwrite its session (or its in-flight session).
|
|
19545
19545
|
try {
|
|
19546
|
-
if (getPlatform().storage.getItem('
|
|
19546
|
+
if (getPlatform().storage.getItem('bounded_last_auth_method') === 'mobile-wallet-adapter') {
|
|
19547
19547
|
return;
|
|
19548
19548
|
}
|
|
19549
19549
|
}
|
|
@@ -19551,7 +19551,7 @@ class PhantomWalletProvider {
|
|
|
19551
19551
|
await WebSessionManager.storeSession(publicKey, createSessionResult.accessToken, createSessionResult.idToken, createSessionResult.refreshToken);
|
|
19552
19552
|
// Mark auth method so clearIncompatibleSession() doesn't wipe this session
|
|
19553
19553
|
try {
|
|
19554
|
-
getPlatform().storage.setItem('
|
|
19554
|
+
getPlatform().storage.setItem('bounded_last_auth_method', 'phantom');
|
|
19555
19555
|
}
|
|
19556
19556
|
catch (_d) { }
|
|
19557
19557
|
setCurrentUser({ provider: that, address: publicKey });
|
|
@@ -19649,7 +19649,7 @@ class PhantomWalletProvider {
|
|
|
19649
19649
|
await WebSessionManager.storeSession(publicKey, createSessionResult.accessToken, createSessionResult.idToken, createSessionResult.refreshToken);
|
|
19650
19650
|
// Mark auth method so clearIncompatibleSession() doesn't wipe this session
|
|
19651
19651
|
try {
|
|
19652
|
-
getPlatform().storage.setItem('
|
|
19652
|
+
getPlatform().storage.setItem('bounded_last_auth_method', 'phantom');
|
|
19653
19653
|
}
|
|
19654
19654
|
catch (_b) { }
|
|
19655
19655
|
const user = { provider: that, address: publicKey };
|
|
@@ -20264,8 +20264,8 @@ class PhantomWalletProvider {
|
|
|
20264
20264
|
try {
|
|
20265
20265
|
const remainingAccounts = convertRemainingAccounts(solTransactionData.txArgs[0].remainingAccounts);
|
|
20266
20266
|
let app_id = solTransactionData.appId;
|
|
20267
|
-
if (typeof window !== 'undefined' && window.
|
|
20268
|
-
app_id = window.
|
|
20267
|
+
if (typeof window !== 'undefined' && window.CUSTOM_BOUNDED_APP_ID_HEADER) {
|
|
20268
|
+
app_id = window.CUSTOM_BOUNDED_APP_ID_HEADER;
|
|
20269
20269
|
}
|
|
20270
20270
|
if (!app_id) {
|
|
20271
20271
|
throw new Error("App ID is required");
|
|
@@ -20682,7 +20682,7 @@ var phantomWalletProvider = /*#__PURE__*/Object.freeze({
|
|
|
20682
20682
|
* doesn't force the user back into Phantom's approval flow when the
|
|
20683
20683
|
* underlying wallet authorization is still valid.
|
|
20684
20684
|
*/
|
|
20685
|
-
const MWA_AUTH_TOKEN_STORAGE_KEY = '
|
|
20685
|
+
const MWA_AUTH_TOKEN_STORAGE_KEY = 'bounded_mwa_auth_token';
|
|
20686
20686
|
/**
|
|
20687
20687
|
* Detects whether the current environment is a mobile browser capable of
|
|
20688
20688
|
* Mobile Wallet Adapter (MWA) communication.
|
|
@@ -20696,7 +20696,7 @@ function isMobileWalletAvailable() {
|
|
|
20696
20696
|
return detectAndroid();
|
|
20697
20697
|
}
|
|
20698
20698
|
const ED25519_SIGNATURE_LENGTH = 64;
|
|
20699
|
-
const STORED_AUTH_METHOD_KEY = '
|
|
20699
|
+
const STORED_AUTH_METHOD_KEY = 'bounded_last_auth_method';
|
|
20700
20700
|
const MWA_AUTH_METHOD = 'mobile-wallet-adapter';
|
|
20701
20701
|
function findMwaError(e, maxDepth = 5) {
|
|
20702
20702
|
var _a;
|
|
@@ -20799,7 +20799,7 @@ async function withMwaAssociationRetry(fn) {
|
|
|
20799
20799
|
* no `blur` event fires, the protocol's `getDetectionPromise` (3000ms
|
|
20800
20800
|
* timeout, line 433) rejects, and we get `ERROR_WALLET_NOT_FOUND`.
|
|
20801
20801
|
*
|
|
20802
|
-
* Fix: show a
|
|
20802
|
+
* Fix: show a Bounded-controlled modal between the two transacts. When the
|
|
20803
20803
|
* user taps the modal's "Sign in" button, that tap IS a fresh user
|
|
20804
20804
|
* activation. We invoke the sign function directly inside the click handler
|
|
20805
20805
|
* — no `await` between the tap and the call — so the activation propagates
|
|
@@ -20837,7 +20837,7 @@ async function awaitSignInGestureAndSign(theme, signFn, noResultError = 'MWA ret
|
|
|
20837
20837
|
const closeColor = isDark ? '#71717a' : '#a1a1aa';
|
|
20838
20838
|
const fontStack = '-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif';
|
|
20839
20839
|
const overlay = document.createElement('div');
|
|
20840
|
-
overlay.setAttribute('data-
|
|
20840
|
+
overlay.setAttribute('data-bounded-mwa-gesture', 'true');
|
|
20841
20841
|
overlay.style.cssText = [
|
|
20842
20842
|
'position: fixed',
|
|
20843
20843
|
'inset: 0',
|
|
@@ -21202,7 +21202,7 @@ async function registerMobileWalletAdapter(config) {
|
|
|
21202
21202
|
if (typeof window === 'undefined')
|
|
21203
21203
|
return;
|
|
21204
21204
|
try {
|
|
21205
|
-
const walletStandardMobile = await Promise.resolve().then(function () { return require('./index.browser-
|
|
21205
|
+
const walletStandardMobile = await Promise.resolve().then(function () { return require('./index.browser-D8u31irV.js'); });
|
|
21206
21206
|
const registerMwa = walletStandardMobile.registerMwa || ((_a = walletStandardMobile.default) === null || _a === void 0 ? void 0 : _a.registerMwa);
|
|
21207
21207
|
if (!registerMwa) {
|
|
21208
21208
|
console.warn('[SolanaMobileWallet] registerMwa not found in @solana-mobile/wallet-standard-mobile');
|
|
@@ -21260,7 +21260,7 @@ async function registerMobileWalletAdapter(config) {
|
|
|
21260
21260
|
* does.
|
|
21261
21261
|
*
|
|
21262
21262
|
* Notes on UX: login uses two wallet popups in succession — `standard:connect`
|
|
21263
|
-
* (authorize) and `solana:signMessage` (sign the
|
|
21263
|
+
* (authorize) and `solana:signMessage` (sign the Bounded nonce). The
|
|
21264
21264
|
* previous implementation combined both inside a single `transact` callback;
|
|
21265
21265
|
* splitting them is the cost of going through wallet-standard, and is
|
|
21266
21266
|
* acceptable given the alternative was broken on Seeker.
|
|
@@ -21303,9 +21303,9 @@ class SolanaMobileWalletProvider {
|
|
|
21303
21303
|
// entirely via `config.appIdentity.uri`.
|
|
21304
21304
|
const fallbackUri = hasDOM
|
|
21305
21305
|
? getPlatform().getLocationOrigin()
|
|
21306
|
-
: '
|
|
21306
|
+
: 'bounded://app';
|
|
21307
21307
|
this.appIdentity = config.appIdentity || {
|
|
21308
|
-
name: '
|
|
21308
|
+
name: 'Bounded App',
|
|
21309
21309
|
uri: fallbackUri,
|
|
21310
21310
|
};
|
|
21311
21311
|
this.cluster = config.cluster || 'mainnet-beta';
|
|
@@ -21341,7 +21341,7 @@ class SolanaMobileWalletProvider {
|
|
|
21341
21341
|
async ensureWallet() {
|
|
21342
21342
|
if (this.wallet)
|
|
21343
21343
|
return this.wallet;
|
|
21344
|
-
const mod = await Promise.resolve().then(function () { return require('./index.browser-
|
|
21344
|
+
const mod = await Promise.resolve().then(function () { return require('./index.browser-D8u31irV.js'); });
|
|
21345
21345
|
const chain = mapChainToWalletStandard(this.cluster);
|
|
21346
21346
|
this.wallet = new mod.LocalSolanaMobileWalletAdapterWallet({
|
|
21347
21347
|
appIdentity: this.appIdentity,
|
|
@@ -21361,7 +21361,7 @@ class SolanaMobileWalletProvider {
|
|
|
21361
21361
|
return this.wallet;
|
|
21362
21362
|
}
|
|
21363
21363
|
/**
|
|
21364
|
-
* Ensure the wallet has an active authorization. After a
|
|
21364
|
+
* Ensure the wallet has an active authorization. After a Bounded session
|
|
21365
21365
|
* is restored from storage on cold-start, `wallet.accounts` is empty until
|
|
21366
21366
|
* we silently reconnect from the AuthorizationCache. If the cache is also
|
|
21367
21367
|
* empty, fall back to interactive `login()` (which surfaces the three-stage
|
|
@@ -21472,7 +21472,7 @@ class SolanaMobileWalletProvider {
|
|
|
21472
21472
|
}
|
|
21473
21473
|
const account = auth.accounts[0];
|
|
21474
21474
|
// account.address is base64-encoded per MWA spec; convert to
|
|
21475
|
-
// the base58 form
|
|
21475
|
+
// the base58 form Bounded + the rest of the SDK use.
|
|
21476
21476
|
const base58Addr = new web3_js.PublicKey(bufferExports.Buffer.from(account.address, 'base64')).toBase58();
|
|
21477
21477
|
// Reuse session if already valid for this address — skip the
|
|
21478
21478
|
// signMessages roundtrip entirely.
|
|
@@ -21509,7 +21509,7 @@ class SolanaMobileWalletProvider {
|
|
|
21509
21509
|
setCurrentUser(user);
|
|
21510
21510
|
return user;
|
|
21511
21511
|
}
|
|
21512
|
-
// Create
|
|
21512
|
+
// Create Bounded session on the server.
|
|
21513
21513
|
if (!result.signatureBase64 || !result.messageText) {
|
|
21514
21514
|
throw new Error('MWA login completed without signature');
|
|
21515
21515
|
}
|
|
@@ -21538,7 +21538,7 @@ class SolanaMobileWalletProvider {
|
|
|
21538
21538
|
}
|
|
21539
21539
|
const wallet = await this.ensureWallet();
|
|
21540
21540
|
// Quick-check: wallet may already have authorization (e.g. from a
|
|
21541
|
-
// previous in-page login) and a matching
|
|
21541
|
+
// previous in-page login) and a matching Bounded session — skip
|
|
21542
21542
|
// popups in that case.
|
|
21543
21543
|
if (wallet.accounts.length > 0) {
|
|
21544
21544
|
const accountPubkey = new web3_js.PublicKey(wallet.accounts[0].publicKey);
|
|
@@ -21569,14 +21569,14 @@ class SolanaMobileWalletProvider {
|
|
|
21569
21569
|
const account = accounts[0];
|
|
21570
21570
|
const accountPubkey = new web3_js.PublicKey(account.publicKey);
|
|
21571
21571
|
const base58Addr = accountPubkey.toBase58();
|
|
21572
|
-
// If we happen to already have a matching
|
|
21572
|
+
// If we happen to already have a matching Bounded session, reuse it.
|
|
21573
21573
|
const existingSession = await getActiveSessionManager().getSession();
|
|
21574
21574
|
if (existingSession && existingSession.address === base58Addr) {
|
|
21575
21575
|
const user = { provider: this, address: base58Addr };
|
|
21576
21576
|
setCurrentUser(user);
|
|
21577
21577
|
return user;
|
|
21578
21578
|
}
|
|
21579
|
-
// Wallet popup #2: sign the
|
|
21579
|
+
// Wallet popup #2: sign the Bounded nonce message.
|
|
21580
21580
|
//
|
|
21581
21581
|
// We cannot call signMessageFeat.signMessage() directly here:
|
|
21582
21582
|
// it would run as a JS continuation from the connect() resolve,
|
|
@@ -21589,7 +21589,7 @@ class SolanaMobileWalletProvider {
|
|
|
21589
21589
|
// protocol's 3-second getDetectionPromise rejects with
|
|
21590
21590
|
// ERROR_WALLET_NOT_FOUND.
|
|
21591
21591
|
//
|
|
21592
|
-
// Insert a
|
|
21592
|
+
// Insert a Bounded modal: the user's tap on "Sign in" provides a
|
|
21593
21593
|
// fresh activation, and signMessage is invoked synchronously
|
|
21594
21594
|
// inside the click handler so the activation propagates.
|
|
21595
21595
|
// C1: fetch the nonce HERE (after connect), not before — a pre-connect
|
|
@@ -21606,7 +21606,7 @@ class SolanaMobileWalletProvider {
|
|
|
21606
21606
|
}
|
|
21607
21607
|
const { signature: sigBytes } = signResult;
|
|
21608
21608
|
const signatureBase64 = bufferExports.Buffer.from(sigBytes).toString('base64');
|
|
21609
|
-
// Create
|
|
21609
|
+
// Create Bounded session on the server.
|
|
21610
21610
|
const createSessionResult = await createSessionWithSignature(base58Addr, messageText, signatureBase64);
|
|
21611
21611
|
await getActiveSessionManager().storeSession(base58Addr, createSessionResult.accessToken, createSessionResult.idToken, createSessionResult.refreshToken);
|
|
21612
21612
|
// Auth-method marker is already 'mobile-wallet-adapter' from above.
|
|
@@ -21995,8 +21995,8 @@ class SolanaMobileWalletProvider {
|
|
|
21995
21995
|
try {
|
|
21996
21996
|
const remainingAccounts = convertRemainingAccounts(solTransactionData.txArgs[0].remainingAccounts);
|
|
21997
21997
|
let app_id = solTransactionData.appId;
|
|
21998
|
-
if (typeof window !== 'undefined' && window.
|
|
21999
|
-
app_id = window.
|
|
21998
|
+
if (typeof window !== 'undefined' && window.CUSTOM_BOUNDED_APP_ID_HEADER) {
|
|
21999
|
+
app_id = window.CUSTOM_BOUNDED_APP_ID_HEADER;
|
|
22000
22000
|
}
|
|
22001
22001
|
if (!app_id) {
|
|
22002
22002
|
throw new Error('App ID is required');
|
|
@@ -22603,8 +22603,8 @@ class PrivyWalletProvider {
|
|
|
22603
22603
|
const connection = new web3_js.Connection(rpcUrl, "confirmed");
|
|
22604
22604
|
const remainingAccounts = convertRemainingAccounts(solTransactionData.txArgs[0].remainingAccounts);
|
|
22605
22605
|
let app_id = solTransactionData.appId;
|
|
22606
|
-
if (typeof window !== 'undefined' && window.
|
|
22607
|
-
const customAppId = window.
|
|
22606
|
+
if (typeof window !== 'undefined' && window.CUSTOM_BOUNDED_APP_ID_HEADER) {
|
|
22607
|
+
const customAppId = window.CUSTOM_BOUNDED_APP_ID_HEADER;
|
|
22608
22608
|
if (customAppId) {
|
|
22609
22609
|
app_id = customAppId;
|
|
22610
22610
|
}
|
|
@@ -23215,7 +23215,7 @@ class PrivyExpoProvider {
|
|
|
23215
23215
|
if (!wallet) {
|
|
23216
23216
|
throw new Error('No embedded Solana wallet found after login. Ensure embeddedWallets.solana.createOnLogin is configured.');
|
|
23217
23217
|
}
|
|
23218
|
-
// Mint a
|
|
23218
|
+
// Mint a Bounded session by having the Privy Solana wallet sign the
|
|
23219
23219
|
// standard SIWS challenge — identical to Phantom/MWA, so the backend mints
|
|
23220
23220
|
// the session via the proven wallet-signature path (no Privy-specific
|
|
23221
23221
|
// token verification needed).
|
|
@@ -23235,8 +23235,8 @@ class PrivyExpoProvider {
|
|
|
23235
23235
|
const connection = new web3_js.Connection(rpcUrl, 'confirmed');
|
|
23236
23236
|
const remainingAccounts = convertRemainingAccounts(solTransactionData.txArgs[0].remainingAccounts);
|
|
23237
23237
|
let app_id = solTransactionData.appId;
|
|
23238
|
-
if (typeof globalThis !== 'undefined' && globalThis.
|
|
23239
|
-
app_id = globalThis.
|
|
23238
|
+
if (typeof globalThis !== 'undefined' && globalThis.CUSTOM_BOUNDED_APP_ID_HEADER) {
|
|
23239
|
+
app_id = globalThis.CUSTOM_BOUNDED_APP_ID_HEADER;
|
|
23240
23240
|
}
|
|
23241
23241
|
if (!app_id) {
|
|
23242
23242
|
throw new Error('App ID is required');
|
|
@@ -23390,7 +23390,7 @@ class PrivyExpoProvider {
|
|
|
23390
23390
|
// Private helpers
|
|
23391
23391
|
// -------------------------------------------------------------------
|
|
23392
23392
|
/**
|
|
23393
|
-
* Mint a
|
|
23393
|
+
* Mint a Bounded session from a Privy Solana wallet by signing the canonical
|
|
23394
23394
|
* SIWS challenge (nonce -> genSolanaMessage -> wallet.signMessage). This reuses
|
|
23395
23395
|
* createSessionWithSignature — the exact path Phantom, the mobile wallet
|
|
23396
23396
|
* adapter, and the guest device-key use — so the bounded /session issuer mints
|
|
@@ -23569,4 +23569,4 @@ exports.wsGet = wsGet;
|
|
|
23569
23569
|
exports.wsGetMany = wsGetMany;
|
|
23570
23570
|
exports.wsQuery = wsQuery;
|
|
23571
23571
|
exports.wsSet = wsSet;
|
|
23572
|
-
//# sourceMappingURL=index-
|
|
23572
|
+
//# sourceMappingURL=index-BL-0ZKBl.js.map
|