@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
|
@@ -6469,7 +6469,7 @@ function getWebhookKeysUrl() {
|
|
|
6469
6469
|
/**
|
|
6470
6470
|
* True when init() configured a Bounded network (the Cloudflare-native stack).
|
|
6471
6471
|
* Synchronous + non-blocking. Used to route reads/writes that behave differently
|
|
6472
|
-
* on Bounded vs the legacy
|
|
6472
|
+
* on Bounded vs the legacy backend (e.g. `count`/`aggregate`, which on
|
|
6473
6473
|
* Bounded must use the deterministic server aggregation, not the legacy AI query).
|
|
6474
6474
|
*/
|
|
6475
6475
|
function isBoundedNetwork() {
|
|
@@ -9324,7 +9324,7 @@ class WebSessionManager {
|
|
|
9324
9324
|
// the RIGHT /session/refresh. Email overrides with humanAuthApiUrl; all
|
|
9325
9325
|
// wallet/guest/signature flows default to authApiUrl (the bounded-auth issuer).
|
|
9326
9326
|
const sessionIssuer = (issuer || config.authApiUrl || "").replace(/\/$/, "");
|
|
9327
|
-
localStorage.setItem(this.
|
|
9327
|
+
localStorage.setItem(this.BOUNDED_SESSION_STORAGE_KEY, JSON.stringify(Object.assign({ address,
|
|
9328
9328
|
accessToken,
|
|
9329
9329
|
idToken,
|
|
9330
9330
|
refreshToken, appId: currentAppId }, (sessionIssuer ? { issuer: sessionIssuer } : {}))));
|
|
@@ -9335,7 +9335,7 @@ class WebSessionManager {
|
|
|
9335
9335
|
static async getSession() {
|
|
9336
9336
|
if (typeof window === "undefined")
|
|
9337
9337
|
return null;
|
|
9338
|
-
const session = localStorage.getItem(this.
|
|
9338
|
+
const session = localStorage.getItem(this.BOUNDED_SESSION_STORAGE_KEY);
|
|
9339
9339
|
if (!session)
|
|
9340
9340
|
return null;
|
|
9341
9341
|
const sessionObj = JSON.parse(session);
|
|
@@ -9359,7 +9359,7 @@ class WebSessionManager {
|
|
|
9359
9359
|
// Persist the ROTATED refresh token — the old one is now
|
|
9360
9360
|
// single-use spent; reusing it would revoke the family.
|
|
9361
9361
|
refreshed.refreshToken);
|
|
9362
|
-
const newSession = localStorage.getItem(this.
|
|
9362
|
+
const newSession = localStorage.getItem(this.BOUNDED_SESSION_STORAGE_KEY);
|
|
9363
9363
|
if (!newSession)
|
|
9364
9364
|
return null;
|
|
9365
9365
|
const newObj = JSON.parse(newSession);
|
|
@@ -9383,14 +9383,14 @@ class WebSessionManager {
|
|
|
9383
9383
|
static clearSession() {
|
|
9384
9384
|
if (typeof window === "undefined")
|
|
9385
9385
|
return;
|
|
9386
|
-
localStorage.removeItem(this.
|
|
9386
|
+
localStorage.removeItem(this.BOUNDED_SESSION_STORAGE_KEY);
|
|
9387
9387
|
}
|
|
9388
9388
|
/* ------------------------------------------------------------------ */
|
|
9389
9389
|
/* IS-AUTH */
|
|
9390
9390
|
/* ------------------------------------------------------------------ */
|
|
9391
9391
|
static isAuthenticated() {
|
|
9392
9392
|
// NOTE: this remains synchronous to stay backward compatible
|
|
9393
|
-
return !!localStorage.getItem(this.
|
|
9393
|
+
return !!localStorage.getItem(this.BOUNDED_SESSION_STORAGE_KEY);
|
|
9394
9394
|
}
|
|
9395
9395
|
/* ------------------------------------------------------------------ */
|
|
9396
9396
|
/* TOKEN HELPERS */
|
|
@@ -9398,13 +9398,13 @@ class WebSessionManager {
|
|
|
9398
9398
|
static getIdToken() {
|
|
9399
9399
|
if (typeof window === "undefined")
|
|
9400
9400
|
return null;
|
|
9401
|
-
const session = localStorage.getItem(this.
|
|
9401
|
+
const session = localStorage.getItem(this.BOUNDED_SESSION_STORAGE_KEY);
|
|
9402
9402
|
return session ? JSON.parse(session).idToken : null;
|
|
9403
9403
|
}
|
|
9404
9404
|
static getRefreshToken() {
|
|
9405
9405
|
if (typeof window === "undefined")
|
|
9406
9406
|
return null;
|
|
9407
|
-
const session = localStorage.getItem(this.
|
|
9407
|
+
const session = localStorage.getItem(this.BOUNDED_SESSION_STORAGE_KEY);
|
|
9408
9408
|
return session ? JSON.parse(session).refreshToken : null;
|
|
9409
9409
|
}
|
|
9410
9410
|
/** The issuer base that minted this session (for routing silent refresh). */
|
|
@@ -9412,7 +9412,7 @@ class WebSessionManager {
|
|
|
9412
9412
|
var _a;
|
|
9413
9413
|
if (typeof window === "undefined")
|
|
9414
9414
|
return null;
|
|
9415
|
-
const session = localStorage.getItem(this.
|
|
9415
|
+
const session = localStorage.getItem(this.BOUNDED_SESSION_STORAGE_KEY);
|
|
9416
9416
|
return session ? ((_a = JSON.parse(session).issuer) !== null && _a !== void 0 ? _a : null) : null;
|
|
9417
9417
|
}
|
|
9418
9418
|
/* ------------------------------------------------------------------ */
|
|
@@ -9422,7 +9422,7 @@ class WebSessionManager {
|
|
|
9422
9422
|
var _a;
|
|
9423
9423
|
if (typeof window === "undefined")
|
|
9424
9424
|
return;
|
|
9425
|
-
const session = localStorage.getItem(this.
|
|
9425
|
+
const session = localStorage.getItem(this.BOUNDED_SESSION_STORAGE_KEY);
|
|
9426
9426
|
if (!session)
|
|
9427
9427
|
return;
|
|
9428
9428
|
const sessionObj = JSON.parse(session);
|
|
@@ -9439,10 +9439,10 @@ class WebSessionManager {
|
|
|
9439
9439
|
sessionObj.refreshToken = refreshToken;
|
|
9440
9440
|
}
|
|
9441
9441
|
(_a = sessionObj.appId) !== null && _a !== void 0 ? _a : (sessionObj.appId = config.appId);
|
|
9442
|
-
localStorage.setItem(this.
|
|
9442
|
+
localStorage.setItem(this.BOUNDED_SESSION_STORAGE_KEY, JSON.stringify(sessionObj));
|
|
9443
9443
|
}
|
|
9444
9444
|
}
|
|
9445
|
-
WebSessionManager.
|
|
9445
|
+
WebSessionManager.BOUNDED_SESSION_STORAGE_KEY = "bounded_session_storage";
|
|
9446
9446
|
|
|
9447
9447
|
let _config = null;
|
|
9448
9448
|
class ReactNativeSessionManager {
|
|
@@ -9535,7 +9535,7 @@ class ReactNativeSessionManager {
|
|
|
9535
9535
|
// Issuer base for silent refresh (email overrides w/ humanAuthApiUrl; wallet/
|
|
9536
9536
|
// guest default to authApiUrl). See WebSessionManager for the rationale.
|
|
9537
9537
|
const sessionIssuer = (issuer || config.authApiUrl || "").replace(/\/$/, "");
|
|
9538
|
-
this.getStorage().setItem(this.
|
|
9538
|
+
this.getStorage().setItem(this.BOUNDED_SESSION_STORAGE_KEY, JSON.stringify(Object.assign({ address,
|
|
9539
9539
|
accessToken,
|
|
9540
9540
|
idToken,
|
|
9541
9541
|
refreshToken, appId: currentAppId }, (sessionIssuer ? { issuer: sessionIssuer } : {}))));
|
|
@@ -9544,7 +9544,7 @@ class ReactNativeSessionManager {
|
|
|
9544
9544
|
/* GET */
|
|
9545
9545
|
/* ------------------------------------------------------------------ */
|
|
9546
9546
|
static async getSession() {
|
|
9547
|
-
const session = this.getStorage().getItem(this.
|
|
9547
|
+
const session = this.getStorage().getItem(this.BOUNDED_SESSION_STORAGE_KEY);
|
|
9548
9548
|
if (!session)
|
|
9549
9549
|
return null;
|
|
9550
9550
|
const sessionObj = JSON.parse(session);
|
|
@@ -9565,7 +9565,7 @@ class ReactNativeSessionManager {
|
|
|
9565
9565
|
const refreshed = await refreshSession(refreshToken, sessionObj.issuer);
|
|
9566
9566
|
if ((refreshed === null || refreshed === void 0 ? void 0 : refreshed.idToken) && (refreshed === null || refreshed === void 0 ? void 0 : refreshed.accessToken)) {
|
|
9567
9567
|
await this.updateIdTokenAndAccessToken(refreshed.idToken, refreshed.accessToken, refreshed.refreshToken);
|
|
9568
|
-
const newSession = this.getStorage().getItem(this.
|
|
9568
|
+
const newSession = this.getStorage().getItem(this.BOUNDED_SESSION_STORAGE_KEY);
|
|
9569
9569
|
if (!newSession)
|
|
9570
9570
|
return null;
|
|
9571
9571
|
const newObj = JSON.parse(newSession);
|
|
@@ -9587,20 +9587,20 @@ class ReactNativeSessionManager {
|
|
|
9587
9587
|
/* CLEAR */
|
|
9588
9588
|
/* ------------------------------------------------------------------ */
|
|
9589
9589
|
static clearSession() {
|
|
9590
|
-
this.getStorage().removeItem(this.
|
|
9590
|
+
this.getStorage().removeItem(this.BOUNDED_SESSION_STORAGE_KEY);
|
|
9591
9591
|
}
|
|
9592
9592
|
/* ------------------------------------------------------------------ */
|
|
9593
9593
|
/* IS-AUTH */
|
|
9594
9594
|
/* ------------------------------------------------------------------ */
|
|
9595
9595
|
static isAuthenticated() {
|
|
9596
|
-
return !!this.getStorage().getItem(this.
|
|
9596
|
+
return !!this.getStorage().getItem(this.BOUNDED_SESSION_STORAGE_KEY);
|
|
9597
9597
|
}
|
|
9598
9598
|
/* ------------------------------------------------------------------ */
|
|
9599
9599
|
/* TOKEN HELPERS */
|
|
9600
9600
|
/* ------------------------------------------------------------------ */
|
|
9601
9601
|
static getIdToken() {
|
|
9602
9602
|
try {
|
|
9603
|
-
const session = this.getStorage().getItem(this.
|
|
9603
|
+
const session = this.getStorage().getItem(this.BOUNDED_SESSION_STORAGE_KEY);
|
|
9604
9604
|
return session ? JSON.parse(session).idToken : null;
|
|
9605
9605
|
}
|
|
9606
9606
|
catch (_a) {
|
|
@@ -9611,7 +9611,7 @@ class ReactNativeSessionManager {
|
|
|
9611
9611
|
static getIssuer() {
|
|
9612
9612
|
var _a;
|
|
9613
9613
|
try {
|
|
9614
|
-
const session = this.getStorage().getItem(this.
|
|
9614
|
+
const session = this.getStorage().getItem(this.BOUNDED_SESSION_STORAGE_KEY);
|
|
9615
9615
|
return session ? ((_a = JSON.parse(session).issuer) !== null && _a !== void 0 ? _a : null) : null;
|
|
9616
9616
|
}
|
|
9617
9617
|
catch (_b) {
|
|
@@ -9620,7 +9620,7 @@ class ReactNativeSessionManager {
|
|
|
9620
9620
|
}
|
|
9621
9621
|
static getRefreshToken() {
|
|
9622
9622
|
try {
|
|
9623
|
-
const session = this.getStorage().getItem(this.
|
|
9623
|
+
const session = this.getStorage().getItem(this.BOUNDED_SESSION_STORAGE_KEY);
|
|
9624
9624
|
return session ? JSON.parse(session).refreshToken : null;
|
|
9625
9625
|
}
|
|
9626
9626
|
catch (_a) {
|
|
@@ -9632,7 +9632,7 @@ class ReactNativeSessionManager {
|
|
|
9632
9632
|
/* ------------------------------------------------------------------ */
|
|
9633
9633
|
static async updateIdTokenAndAccessToken(idToken, accessToken, refreshToken) {
|
|
9634
9634
|
var _a;
|
|
9635
|
-
const session = this.getStorage().getItem(this.
|
|
9635
|
+
const session = this.getStorage().getItem(this.BOUNDED_SESSION_STORAGE_KEY);
|
|
9636
9636
|
if (!session)
|
|
9637
9637
|
return;
|
|
9638
9638
|
const sessionObj = JSON.parse(session);
|
|
@@ -9648,10 +9648,10 @@ class ReactNativeSessionManager {
|
|
|
9648
9648
|
sessionObj.refreshToken = refreshToken;
|
|
9649
9649
|
}
|
|
9650
9650
|
(_a = sessionObj.appId) !== null && _a !== void 0 ? _a : (sessionObj.appId = config.appId);
|
|
9651
|
-
this.getStorage().setItem(this.
|
|
9651
|
+
this.getStorage().setItem(this.BOUNDED_SESSION_STORAGE_KEY, JSON.stringify(sessionObj));
|
|
9652
9652
|
}
|
|
9653
9653
|
}
|
|
9654
|
-
ReactNativeSessionManager.
|
|
9654
|
+
ReactNativeSessionManager.BOUNDED_SESSION_STORAGE_KEY = "bounded_session_storage";
|
|
9655
9655
|
|
|
9656
9656
|
/**
|
|
9657
9657
|
* Return the active CLIENT session manager for the current runtime.
|
|
@@ -10172,9 +10172,9 @@ async function buildSetDocumentsTransaction(connection, idl, anchorProvider, pay
|
|
|
10172
10172
|
/* ENV helpers */
|
|
10173
10173
|
/* ------------------------------------------------------------------ */
|
|
10174
10174
|
// Canonical `BOUNDED_PRIVATE_KEY` (matches the CLI); legacy
|
|
10175
|
-
// `
|
|
10175
|
+
// `BOUNDED_SOLANA_KEYPAIR` still honored. Only consulted when no explicit
|
|
10176
10176
|
// keypair was provided (createWalletClient passes one).
|
|
10177
|
-
const ENV_KEYPAIRS = ["BOUNDED_PRIVATE_KEY", "
|
|
10177
|
+
const ENV_KEYPAIRS = ["BOUNDED_PRIVATE_KEY", "BOUNDED_SOLANA_KEYPAIR"];
|
|
10178
10178
|
function loadKeypairFromEnv() {
|
|
10179
10179
|
let secret;
|
|
10180
10180
|
let found;
|
|
@@ -10297,7 +10297,7 @@ var serverSessionManager = /*#__PURE__*/Object.freeze({
|
|
|
10297
10297
|
});
|
|
10298
10298
|
|
|
10299
10299
|
/**
|
|
10300
|
-
* Safe base64 helpers for
|
|
10300
|
+
* Safe base64 helpers for bounded-core.
|
|
10301
10301
|
*
|
|
10302
10302
|
* Uses the global atob/btoa when available (browser, RN with polyfill),
|
|
10303
10303
|
* falls back to the 'buffer' package (Node.js / SSR / RN without polyfill).
|
|
@@ -10477,7 +10477,7 @@ axiosRetry(apiClient, {
|
|
|
10477
10477
|
shouldResetTimeout: true,
|
|
10478
10478
|
onRetry: (retryCount, error, requestConfig) => {
|
|
10479
10479
|
var _a;
|
|
10480
|
-
console.warn(`[
|
|
10480
|
+
console.warn(`[bounded-sdk] retry ${retryCount} for ${(_a = requestConfig.method) === null || _a === void 0 ? void 0 : _a.toUpperCase()} ${requestConfig.url} — ${error.code || error.message}`);
|
|
10481
10481
|
},
|
|
10482
10482
|
});
|
|
10483
10483
|
const refreshInFlight = new Map();
|
|
@@ -10536,8 +10536,8 @@ async function makeApiRequest(method, urlPath, data, _overrides) {
|
|
|
10536
10536
|
: await createAuthHeader(config.isServer);
|
|
10537
10537
|
const headers = Object.assign({ "Content-Type": "application/json", "X-Public-App-Id": config.appId, "X-App-Id": config.appId }, authHeader);
|
|
10538
10538
|
if (typeof window !== "undefined" &&
|
|
10539
|
-
window.
|
|
10540
|
-
const customAppId = window.
|
|
10539
|
+
window.CUSTOM_BOUNDED_APP_ID_HEADER) {
|
|
10540
|
+
const customAppId = window.CUSTOM_BOUNDED_APP_ID_HEADER;
|
|
10541
10541
|
if (customAppId) {
|
|
10542
10542
|
headers["X-App-Id"] = customAppId;
|
|
10543
10543
|
}
|
|
@@ -10796,7 +10796,7 @@ function parseAggregateValue(result) {
|
|
|
10796
10796
|
* Count items in a collection path. Returns a numeric result.
|
|
10797
10797
|
*
|
|
10798
10798
|
* This uses the AI query engine with a count-specific prompt prefix,
|
|
10799
|
-
* so
|
|
10799
|
+
* so Bounded will generate a $count aggregation pipeline and return
|
|
10800
10800
|
* just the count rather than full documents.
|
|
10801
10801
|
*
|
|
10802
10802
|
* IMPORTANT: This only works for collections where the read policy is "true".
|
|
@@ -11321,10 +11321,10 @@ async function setMany(many, options) {
|
|
|
11321
11321
|
let documents = [];
|
|
11322
11322
|
const pathsToInvalidate = new Set();
|
|
11323
11323
|
for (const { path, document: documentWithReservedFields } of many) {
|
|
11324
|
-
// for setting, we should remove any pieces of the document that start with '
|
|
11324
|
+
// 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
|
|
11325
11325
|
let document = documentWithReservedFields;
|
|
11326
11326
|
if (documentWithReservedFields) {
|
|
11327
|
-
document = Object.fromEntries(Object.entries(documentWithReservedFields).filter(([key]) => !key.startsWith('
|
|
11327
|
+
document = Object.fromEntries(Object.entries(documentWithReservedFields).filter(([key]) => !key.startsWith('_')));
|
|
11328
11328
|
}
|
|
11329
11329
|
const normalizedPath = path.startsWith("/") ? path.slice(1) : path;
|
|
11330
11330
|
pathsToInvalidate.add(normalizedPath);
|
|
@@ -11448,7 +11448,7 @@ async function setMany(many, options) {
|
|
|
11448
11448
|
var _a, _b, _c, _d, _e;
|
|
11449
11449
|
// NOTE (backwards-compat revert): a program-allowlist on server-supplied
|
|
11450
11450
|
// `preInstructions` was tried here for the audit-8 SOL-drain concern, but it
|
|
11451
|
-
// broke legitimate onchain DeFi flows —
|
|
11451
|
+
// broke legitimate onchain DeFi flows — bounded routes Phoenix, Jupiter/swap,
|
|
11452
11452
|
// SPL-Token and ATA-creation instructions through standard-path preInstructions
|
|
11453
11453
|
// (see sol-helper remaining-accounts-extractor). A correct audit-8 fix must be
|
|
11454
11454
|
// DeFi-aware (e.g. block ONLY a raw System Transfer/TransferWithSeed, never a
|
|
@@ -11532,10 +11532,10 @@ async function setMany(many, options) {
|
|
|
11532
11532
|
const transaction = web3_js.VersionedTransaction.deserialize(txBytes);
|
|
11533
11533
|
// Validate the transaction before signing: ensure only allowed programs
|
|
11534
11534
|
// and no unauthorized System program instructions (e.g., SOL transfers)
|
|
11535
|
-
const
|
|
11535
|
+
const BOUNDED_PROGRAM = 'poof4b5pk1L9tmThvBmaABjcyjfhFGbMbQP5BXk2QZp';
|
|
11536
11536
|
const COMPUTE_BUDGET = 'ComputeBudget111111111111111111111111111111';
|
|
11537
11537
|
const SYSTEM_PROGRAM = '11111111111111111111111111111111';
|
|
11538
|
-
const ALLOWED_PROGRAMS = new Set([
|
|
11538
|
+
const ALLOWED_PROGRAMS = new Set([BOUNDED_PROGRAM, COMPUTE_BUDGET, SYSTEM_PROGRAM]);
|
|
11539
11539
|
// System program instruction discriminators (first 4 bytes, little-endian u32)
|
|
11540
11540
|
const SYSTEM_TRANSFER = 2; // Transfer instruction index
|
|
11541
11541
|
const SYSTEM_TRANSFER_WITH_SEED = 11;
|
|
@@ -12129,8 +12129,8 @@ async function getOrCreateConnection(appId, isServer, routePath, authTokenProvid
|
|
|
12129
12129
|
if (appId && appId !== config.appId) {
|
|
12130
12130
|
wsUrl.searchParams.append('appId', appId);
|
|
12131
12131
|
}
|
|
12132
|
-
else if (typeof window !== 'undefined' && window.
|
|
12133
|
-
wsUrl.searchParams.append('appId', window.
|
|
12132
|
+
else if (typeof window !== 'undefined' && window.CUSTOM_BOUNDED_APP_ID_HEADER) {
|
|
12133
|
+
wsUrl.searchParams.append('appId', window.CUSTOM_BOUNDED_APP_ID_HEADER);
|
|
12134
12134
|
}
|
|
12135
12135
|
else {
|
|
12136
12136
|
wsUrl.searchParams.append('appId', config.appId);
|
|
@@ -12990,7 +12990,7 @@ function serverTimestamp() {
|
|
|
12990
12990
|
// ---------------------------------------------------------------------------
|
|
12991
12991
|
// IDB helpers (lazy-loaded, non-blocking)
|
|
12992
12992
|
// ---------------------------------------------------------------------------
|
|
12993
|
-
const IDB_NAME$1 = '
|
|
12993
|
+
const IDB_NAME$1 = 'bounded-realtime';
|
|
12994
12994
|
const IDB_STORE$1 = 'subscriptions';
|
|
12995
12995
|
const IDB_VERSION = 1;
|
|
12996
12996
|
let idbPromise = null;
|
|
@@ -13428,10 +13428,10 @@ class RealtimeStore {
|
|
|
13428
13428
|
const normalizedPath = path.startsWith('/') ? path.slice(1) : path;
|
|
13429
13429
|
const collectionPath = this.getCollectionPath(normalizedPath);
|
|
13430
13430
|
const optimisticDoc = Object.assign(Object.assign({ _id: normalizedPath, pathId: normalizedPath }, resolvedDoc), {
|
|
13431
|
-
// System timestamp field name
|
|
13432
|
-
//
|
|
13431
|
+
// System timestamp field name: the Bounded worker stamps the neutral
|
|
13432
|
+
// `_updatedAt`; the underscore-prefixed `_updated_at` metadata mirror.
|
|
13433
13433
|
// Match it so the optimistic doc lines up with the server's confirmation.
|
|
13434
|
-
[isBoundedNetwork() ? '_updatedAt' : '
|
|
13434
|
+
[isBoundedNetwork() ? '_updatedAt' : '_updated_at']: Date.now() });
|
|
13435
13435
|
const sub = this.findSubscriptionByPath(collectionPath);
|
|
13436
13436
|
let prevDoc = null;
|
|
13437
13437
|
if (sub) {
|
|
@@ -18545,7 +18545,7 @@ let currentAuthProvider = null;
|
|
|
18545
18545
|
let currentAuthMethod = null;
|
|
18546
18546
|
let initConfig = null;
|
|
18547
18547
|
// --- localStorage helpers: track which auth method the user last logged in with ---
|
|
18548
|
-
const STORED_AUTH_METHOD_KEY = '
|
|
18548
|
+
const STORED_AUTH_METHOD_KEY = 'bounded_last_auth_method';
|
|
18549
18549
|
function getStoredAuthMethod() {
|
|
18550
18550
|
try {
|
|
18551
18551
|
return getPlatform().storage.getItem(STORED_AUTH_METHOD_KEY);
|
|
@@ -18593,17 +18593,17 @@ function clearIncompatibleSession() {
|
|
|
18593
18593
|
// Lazy loaders for web-only providers.
|
|
18594
18594
|
// Using dynamic import() ensures Metro (RN) never resolves these modules.
|
|
18595
18595
|
async function loadPhantomWalletProvider() {
|
|
18596
|
-
const mod = await Promise.resolve().then(function () { return require('./phantom-wallet-provider-
|
|
18596
|
+
const mod = await Promise.resolve().then(function () { return require('./phantom-wallet-provider-Dy48LSdU.js'); });
|
|
18597
18597
|
return { PhantomWalletProvider: mod.PhantomWalletProvider };
|
|
18598
18598
|
}
|
|
18599
18599
|
// Web Privy provider (depends on react-dom + @privy-io/react-auth). Lazy so Metro
|
|
18600
18600
|
// never bundles it into the RN build — RN uses the @privy-io/expo provider instead.
|
|
18601
18601
|
async function loadPrivyWalletProvider() {
|
|
18602
|
-
const mod = await Promise.resolve().then(function () { return require('./privy-wallet-provider-
|
|
18602
|
+
const mod = await Promise.resolve().then(function () { return require('./privy-wallet-provider-CiKtBJ5M.js'); });
|
|
18603
18603
|
return mod.PrivyWalletProvider;
|
|
18604
18604
|
}
|
|
18605
18605
|
async function loadSolanaMobileWalletProvider() {
|
|
18606
|
-
const mod = await Promise.resolve().then(function () { return require('./solana-mobile-wallet-provider-
|
|
18606
|
+
const mod = await Promise.resolve().then(function () { return require('./solana-mobile-wallet-provider-k_YdrTJZ.js'); });
|
|
18607
18607
|
return mod.SolanaMobileWalletProvider;
|
|
18608
18608
|
}
|
|
18609
18609
|
async function hotSwapToMWAProvider(config) {
|
|
@@ -19323,7 +19323,7 @@ class PrivyExpoProvider {
|
|
|
19323
19323
|
if (!wallet) {
|
|
19324
19324
|
throw new Error('No embedded Solana wallet found after login. Ensure embeddedWallets.solana.createOnLogin is configured.');
|
|
19325
19325
|
}
|
|
19326
|
-
// Mint a
|
|
19326
|
+
// Mint a Bounded session by having the Privy Solana wallet sign the
|
|
19327
19327
|
// standard SIWS challenge — identical to Phantom/MWA, so the backend mints
|
|
19328
19328
|
// the session via the proven wallet-signature path (no Privy-specific
|
|
19329
19329
|
// token verification needed).
|
|
@@ -19343,8 +19343,8 @@ class PrivyExpoProvider {
|
|
|
19343
19343
|
const connection = new web3_js.Connection(rpcUrl, 'confirmed');
|
|
19344
19344
|
const remainingAccounts = convertRemainingAccounts(solTransactionData.txArgs[0].remainingAccounts);
|
|
19345
19345
|
let app_id = solTransactionData.appId;
|
|
19346
|
-
if (typeof globalThis !== 'undefined' && globalThis.
|
|
19347
|
-
app_id = globalThis.
|
|
19346
|
+
if (typeof globalThis !== 'undefined' && globalThis.CUSTOM_BOUNDED_APP_ID_HEADER) {
|
|
19347
|
+
app_id = globalThis.CUSTOM_BOUNDED_APP_ID_HEADER;
|
|
19348
19348
|
}
|
|
19349
19349
|
if (!app_id) {
|
|
19350
19350
|
throw new Error('App ID is required');
|
|
@@ -19498,7 +19498,7 @@ class PrivyExpoProvider {
|
|
|
19498
19498
|
// Private helpers
|
|
19499
19499
|
// -------------------------------------------------------------------
|
|
19500
19500
|
/**
|
|
19501
|
-
* Mint a
|
|
19501
|
+
* Mint a Bounded session from a Privy Solana wallet by signing the canonical
|
|
19502
19502
|
* SIWS challenge (nonce -> genSolanaMessage -> wallet.signMessage). This reuses
|
|
19503
19503
|
* createSessionWithSignature — the exact path Phantom, the mobile wallet
|
|
19504
19504
|
* adapter, and the guest device-key use — so the bounded /session issuer mints
|
|
@@ -19681,4 +19681,4 @@ exports.wsGet = wsGet;
|
|
|
19681
19681
|
exports.wsGetMany = wsGetMany;
|
|
19682
19682
|
exports.wsQuery = wsQuery;
|
|
19683
19683
|
exports.wsSet = wsSet;
|
|
19684
|
-
//# sourceMappingURL=index.native-
|
|
19684
|
+
//# sourceMappingURL=index.native-NgHStPq0.js.map
|