@routstr/sdk 0.1.8 → 0.2.1
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/client/index.js +27 -4
- package/dist/client/index.js.map +1 -1
- package/dist/client/index.mjs +27 -4
- package/dist/client/index.mjs.map +1 -1
- package/dist/discovery/index.d.mts +2 -1
- package/dist/discovery/index.d.ts +2 -1
- package/dist/discovery/index.js +9 -1
- package/dist/discovery/index.js.map +1 -1
- package/dist/discovery/index.mjs +9 -1
- package/dist/discovery/index.mjs.map +1 -1
- package/dist/index.d.mts +3 -1
- package/dist/index.d.ts +3 -1
- package/dist/index.js +224 -142
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +224 -142
- package/dist/index.mjs.map +1 -1
- package/dist/storage/index.d.mts +19 -1
- package/dist/storage/index.d.ts +19 -1
- package/dist/storage/index.js +185 -135
- package/dist/storage/index.js.map +1 -1
- package/dist/storage/index.mjs +185 -135
- package/dist/storage/index.mjs.map +1 -1
- package/dist/wallet/index.js +26 -3
- package/dist/wallet/index.js.map +1 -1
- package/dist/wallet/index.mjs +26 -3
- package/dist/wallet/index.mjs.map +1 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -15,9 +15,9 @@ var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require
|
|
|
15
15
|
|
|
16
16
|
// core/errors.ts
|
|
17
17
|
var InsufficientBalanceError = class extends Error {
|
|
18
|
-
constructor(required, available, maxMintBalance = 0, maxMintUrl = "") {
|
|
18
|
+
constructor(required, available, maxMintBalance = 0, maxMintUrl = "", customMessage) {
|
|
19
19
|
super(
|
|
20
|
-
`Insufficient balance: need ${required} sats, have ${available} sats available. ` + (maxMintBalance > 0 ? `Largest mint balance: ${maxMintBalance} sats from ${maxMintUrl}` : "")
|
|
20
|
+
customMessage ?? `Insufficient balance: need ${required} sats, have ${available} sats available. ` + (maxMintBalance > 0 ? `Largest mint balance: ${maxMintBalance} sats from ${maxMintUrl}` : "")
|
|
21
21
|
);
|
|
22
22
|
this.required = required;
|
|
23
23
|
this.available = available;
|
|
@@ -301,9 +301,10 @@ var ModelManager = class _ModelManager {
|
|
|
301
301
|
* Uses cache if available and not expired
|
|
302
302
|
* @param baseUrls List of provider base URLs to fetch from
|
|
303
303
|
* @param forceRefresh Ignore cache and fetch fresh data
|
|
304
|
+
* @param onProgress Callback fired after each provider completes with current combined models
|
|
304
305
|
* @returns Array of unique models with best prices selected
|
|
305
306
|
*/
|
|
306
|
-
async fetchModels(baseUrls, forceRefresh = false) {
|
|
307
|
+
async fetchModels(baseUrls, forceRefresh = false, onProgress) {
|
|
307
308
|
if (baseUrls.length === 0) {
|
|
308
309
|
throw new NoProvidersAvailableError();
|
|
309
310
|
}
|
|
@@ -313,6 +314,12 @@ var ModelManager = class _ModelManager {
|
|
|
313
314
|
const estimateMinCost = (m) => {
|
|
314
315
|
return m?.sats_pricing?.completion ?? 0;
|
|
315
316
|
};
|
|
317
|
+
const emitProgress = () => {
|
|
318
|
+
if (onProgress) {
|
|
319
|
+
const currentModels = Array.from(bestById.values()).map((v) => v.model);
|
|
320
|
+
onProgress(currentModels);
|
|
321
|
+
}
|
|
322
|
+
};
|
|
316
323
|
const fetchPromises = baseUrls.map(async (url) => {
|
|
317
324
|
const base = url.endsWith("/") ? url : `${url}/`;
|
|
318
325
|
try {
|
|
@@ -347,6 +354,7 @@ var ModelManager = class _ModelManager {
|
|
|
347
354
|
}
|
|
348
355
|
}
|
|
349
356
|
}
|
|
357
|
+
emitProgress();
|
|
350
358
|
return { success: true, base, list };
|
|
351
359
|
} catch (error) {
|
|
352
360
|
if (this.isProviderDownError(error)) {
|
|
@@ -1468,6 +1476,10 @@ var BalanceManager = class {
|
|
|
1468
1476
|
requestId
|
|
1469
1477
|
};
|
|
1470
1478
|
} catch (error) {
|
|
1479
|
+
console.log(
|
|
1480
|
+
"DEBUG",
|
|
1481
|
+
`[TopuPU] topup: Topup result for ${baseUrl}: error=${error}`
|
|
1482
|
+
);
|
|
1471
1483
|
if (cashuToken) {
|
|
1472
1484
|
await this._recoverFailedTopUp(cashuToken);
|
|
1473
1485
|
}
|
|
@@ -1494,16 +1506,35 @@ var BalanceManager = class {
|
|
|
1494
1506
|
(sum, value) => sum + value,
|
|
1495
1507
|
0
|
|
1496
1508
|
);
|
|
1509
|
+
const targetProviderBalance = balanceState.providerBalances[baseUrl] || 0;
|
|
1497
1510
|
const refundableProviderBalance = Object.entries(
|
|
1498
1511
|
balanceState.providerBalances
|
|
1499
1512
|
).filter(([providerBaseUrl]) => providerBaseUrl !== baseUrl).reduce((sum, [, value]) => sum + value, 0);
|
|
1500
|
-
if (totalMintBalance < adjustedAmount && totalMintBalance + refundableProviderBalance >= adjustedAmount && retryCount < 1) {
|
|
1513
|
+
if (totalMintBalance + targetProviderBalance < adjustedAmount && totalMintBalance + targetProviderBalance + refundableProviderBalance >= adjustedAmount && retryCount < 1) {
|
|
1501
1514
|
await this._refundOtherProvidersForTopUp(baseUrl, mintUrl);
|
|
1502
1515
|
return this.createProviderToken({
|
|
1503
1516
|
...options,
|
|
1504
1517
|
retryCount: retryCount + 1
|
|
1505
1518
|
});
|
|
1506
1519
|
}
|
|
1520
|
+
if (totalMintBalance + targetProviderBalance < adjustedAmount) {
|
|
1521
|
+
const error = new InsufficientBalanceError(
|
|
1522
|
+
adjustedAmount,
|
|
1523
|
+
totalMintBalance + targetProviderBalance,
|
|
1524
|
+
totalMintBalance,
|
|
1525
|
+
Object.entries(balanceState.mintBalances).reduce(
|
|
1526
|
+
(max, [url, balance]) => balance > max.balance ? { url, balance } : max,
|
|
1527
|
+
{ url: "", balance: 0 }
|
|
1528
|
+
).url
|
|
1529
|
+
);
|
|
1530
|
+
return { success: false, error: error.message };
|
|
1531
|
+
}
|
|
1532
|
+
if (targetProviderBalance >= adjustedAmount) {
|
|
1533
|
+
return {
|
|
1534
|
+
success: true,
|
|
1535
|
+
amountSpent: 0
|
|
1536
|
+
};
|
|
1537
|
+
}
|
|
1507
1538
|
const providerMints = baseUrl && this.providerRegistry ? this.providerRegistry.getProviderMints(baseUrl) : [];
|
|
1508
1539
|
let requiredAmount = adjustedAmount;
|
|
1509
1540
|
const supportedMintsOnly = providerMints.length > 0;
|
|
@@ -2965,7 +2996,7 @@ var RoutstrClient = class {
|
|
|
2965
2996
|
"DEBUG",
|
|
2966
2997
|
`[RoutstrClient] _handleErrorResponse: Insufficient balance, need=${required}, have=${available}`
|
|
2967
2998
|
);
|
|
2968
|
-
throw new InsufficientBalanceError(required, available);
|
|
2999
|
+
throw new InsufficientBalanceError(required, available, 0, "", message);
|
|
2969
3000
|
} else {
|
|
2970
3001
|
this._log(
|
|
2971
3002
|
"DEBUG",
|
|
@@ -3701,7 +3732,11 @@ var createSqliteDriver = (options = {}) => {
|
|
|
3701
3732
|
};
|
|
3702
3733
|
|
|
3703
3734
|
// storage/drivers/indexedDB.ts
|
|
3735
|
+
var isBrowser = typeof indexedDB !== "undefined";
|
|
3704
3736
|
var openDatabase = (dbName, storeName) => {
|
|
3737
|
+
if (!isBrowser) {
|
|
3738
|
+
return Promise.reject(new Error("IndexedDB is not available"));
|
|
3739
|
+
}
|
|
3705
3740
|
return new Promise((resolve, reject) => {
|
|
3706
3741
|
const request = indexedDB.open(dbName, 1);
|
|
3707
3742
|
request.onupgradeneeded = () => {
|
|
@@ -3806,7 +3841,8 @@ var SDK_STORAGE_KEYS = {
|
|
|
3806
3841
|
ROUTSTR21_MODELS: "routstr21Models",
|
|
3807
3842
|
LAST_ROUTSTR21_MODELS_UPDATE: "lastRoutstr21ModelsUpdate",
|
|
3808
3843
|
CACHED_RECEIVE_TOKENS: "cached_receive_tokens",
|
|
3809
|
-
USAGE_TRACKING: "usage_tracking"
|
|
3844
|
+
USAGE_TRACKING: "usage_tracking",
|
|
3845
|
+
CLIENT_IDS: "client_ids"
|
|
3810
3846
|
};
|
|
3811
3847
|
|
|
3812
3848
|
// storage/store.ts
|
|
@@ -3824,9 +3860,158 @@ var getCashuTokenBalance = (token) => {
|
|
|
3824
3860
|
return 0;
|
|
3825
3861
|
}
|
|
3826
3862
|
};
|
|
3827
|
-
var
|
|
3828
|
-
|
|
3829
|
-
|
|
3863
|
+
var createEmptyStore = (driver) => vanilla.createStore((set, get) => ({
|
|
3864
|
+
modelsFromAllProviders: {},
|
|
3865
|
+
lastUsedModel: null,
|
|
3866
|
+
baseUrlsList: [],
|
|
3867
|
+
lastBaseUrlsUpdate: null,
|
|
3868
|
+
disabledProviders: [],
|
|
3869
|
+
mintsFromAllProviders: {},
|
|
3870
|
+
infoFromAllProviders: {},
|
|
3871
|
+
lastModelsUpdate: {},
|
|
3872
|
+
cachedTokens: [],
|
|
3873
|
+
apiKeys: [],
|
|
3874
|
+
childKeys: [],
|
|
3875
|
+
routstr21Models: [],
|
|
3876
|
+
lastRoutstr21ModelsUpdate: null,
|
|
3877
|
+
cachedReceiveTokens: [],
|
|
3878
|
+
usageTracking: [],
|
|
3879
|
+
clientIds: [],
|
|
3880
|
+
setModelsFromAllProviders: (value) => {
|
|
3881
|
+
const normalized = {};
|
|
3882
|
+
for (const [baseUrl, models] of Object.entries(value)) {
|
|
3883
|
+
normalized[normalizeBaseUrl(baseUrl)] = models;
|
|
3884
|
+
}
|
|
3885
|
+
void driver.setItem(
|
|
3886
|
+
SDK_STORAGE_KEYS.MODELS_FROM_ALL_PROVIDERS,
|
|
3887
|
+
normalized
|
|
3888
|
+
);
|
|
3889
|
+
set({ modelsFromAllProviders: normalized });
|
|
3890
|
+
},
|
|
3891
|
+
setLastUsedModel: (value) => {
|
|
3892
|
+
void driver.setItem(SDK_STORAGE_KEYS.LAST_USED_MODEL, value);
|
|
3893
|
+
set({ lastUsedModel: value });
|
|
3894
|
+
},
|
|
3895
|
+
setBaseUrlsList: (value) => {
|
|
3896
|
+
const normalized = value.map((url) => normalizeBaseUrl(url));
|
|
3897
|
+
void driver.setItem(SDK_STORAGE_KEYS.BASE_URLS_LIST, normalized);
|
|
3898
|
+
set({ baseUrlsList: normalized });
|
|
3899
|
+
},
|
|
3900
|
+
setBaseUrlsLastUpdate: (value) => {
|
|
3901
|
+
void driver.setItem(SDK_STORAGE_KEYS.LAST_BASE_URLS_UPDATE, value);
|
|
3902
|
+
set({ lastBaseUrlsUpdate: value });
|
|
3903
|
+
},
|
|
3904
|
+
setDisabledProviders: (value) => {
|
|
3905
|
+
const normalized = value.map((url) => normalizeBaseUrl(url));
|
|
3906
|
+
void driver.setItem(SDK_STORAGE_KEYS.DISABLED_PROVIDERS, normalized);
|
|
3907
|
+
set({ disabledProviders: normalized });
|
|
3908
|
+
},
|
|
3909
|
+
setMintsFromAllProviders: (value) => {
|
|
3910
|
+
const normalized = {};
|
|
3911
|
+
for (const [baseUrl, mints] of Object.entries(value)) {
|
|
3912
|
+
normalized[normalizeBaseUrl(baseUrl)] = mints.map(
|
|
3913
|
+
(mint) => mint.endsWith("/") ? mint.slice(0, -1) : mint
|
|
3914
|
+
);
|
|
3915
|
+
}
|
|
3916
|
+
void driver.setItem(
|
|
3917
|
+
SDK_STORAGE_KEYS.MINTS_FROM_ALL_PROVIDERS,
|
|
3918
|
+
normalized
|
|
3919
|
+
);
|
|
3920
|
+
set({ mintsFromAllProviders: normalized });
|
|
3921
|
+
},
|
|
3922
|
+
setInfoFromAllProviders: (value) => {
|
|
3923
|
+
const normalized = {};
|
|
3924
|
+
for (const [baseUrl, info] of Object.entries(value)) {
|
|
3925
|
+
normalized[normalizeBaseUrl(baseUrl)] = info;
|
|
3926
|
+
}
|
|
3927
|
+
void driver.setItem(SDK_STORAGE_KEYS.INFO_FROM_ALL_PROVIDERS, normalized);
|
|
3928
|
+
set({ infoFromAllProviders: normalized });
|
|
3929
|
+
},
|
|
3930
|
+
setLastModelsUpdate: (value) => {
|
|
3931
|
+
const normalized = {};
|
|
3932
|
+
for (const [baseUrl, timestamp] of Object.entries(value)) {
|
|
3933
|
+
normalized[normalizeBaseUrl(baseUrl)] = timestamp;
|
|
3934
|
+
}
|
|
3935
|
+
void driver.setItem(SDK_STORAGE_KEYS.LAST_MODELS_UPDATE, normalized);
|
|
3936
|
+
set({ lastModelsUpdate: normalized });
|
|
3937
|
+
},
|
|
3938
|
+
setCachedTokens: (value) => {
|
|
3939
|
+
set((state) => {
|
|
3940
|
+
const updates = typeof value === "function" ? value(state.cachedTokens) : value;
|
|
3941
|
+
const normalized = updates.map((entry) => ({
|
|
3942
|
+
...entry,
|
|
3943
|
+
baseUrl: normalizeBaseUrl(entry.baseUrl),
|
|
3944
|
+
balance: typeof entry.balance === "number" ? entry.balance : getCashuTokenBalance(entry.token),
|
|
3945
|
+
lastUsed: entry.lastUsed ?? null
|
|
3946
|
+
}));
|
|
3947
|
+
void driver.setItem(SDK_STORAGE_KEYS.LOCAL_CASHU_TOKENS, normalized);
|
|
3948
|
+
return { cachedTokens: normalized };
|
|
3949
|
+
});
|
|
3950
|
+
},
|
|
3951
|
+
setApiKeys: (value) => {
|
|
3952
|
+
set((state) => {
|
|
3953
|
+
const updates = typeof value === "function" ? value(state.apiKeys) : value;
|
|
3954
|
+
const normalized = updates.map((entry) => ({
|
|
3955
|
+
...entry,
|
|
3956
|
+
baseUrl: normalizeBaseUrl(entry.baseUrl),
|
|
3957
|
+
balance: entry.balance ?? 0,
|
|
3958
|
+
lastUsed: entry.lastUsed ?? null
|
|
3959
|
+
}));
|
|
3960
|
+
void driver.setItem(SDK_STORAGE_KEYS.API_KEYS, normalized);
|
|
3961
|
+
return { apiKeys: normalized };
|
|
3962
|
+
});
|
|
3963
|
+
},
|
|
3964
|
+
setChildKeys: (value) => {
|
|
3965
|
+
set((state) => {
|
|
3966
|
+
const updates = typeof value === "function" ? value(state.childKeys) : value;
|
|
3967
|
+
const normalized = updates.map((entry) => ({
|
|
3968
|
+
parentBaseUrl: normalizeBaseUrl(entry.parentBaseUrl),
|
|
3969
|
+
childKey: entry.childKey,
|
|
3970
|
+
balance: entry.balance ?? 0,
|
|
3971
|
+
balanceLimit: entry.balanceLimit,
|
|
3972
|
+
validityDate: entry.validityDate,
|
|
3973
|
+
createdAt: entry.createdAt ?? Date.now()
|
|
3974
|
+
}));
|
|
3975
|
+
void driver.setItem(SDK_STORAGE_KEYS.CHILD_KEYS, normalized);
|
|
3976
|
+
return { childKeys: normalized };
|
|
3977
|
+
});
|
|
3978
|
+
},
|
|
3979
|
+
setRoutstr21Models: (value) => {
|
|
3980
|
+
void driver.setItem(SDK_STORAGE_KEYS.ROUTSTR21_MODELS, value);
|
|
3981
|
+
set({ routstr21Models: value });
|
|
3982
|
+
},
|
|
3983
|
+
setRoutstr21ModelsLastUpdate: (value) => {
|
|
3984
|
+
void driver.setItem(SDK_STORAGE_KEYS.LAST_ROUTSTR21_MODELS_UPDATE, value);
|
|
3985
|
+
set({ lastRoutstr21ModelsUpdate: value });
|
|
3986
|
+
},
|
|
3987
|
+
setCachedReceiveTokens: (value) => {
|
|
3988
|
+
const normalized = value.map((entry) => ({
|
|
3989
|
+
token: entry.token,
|
|
3990
|
+
amount: entry.amount,
|
|
3991
|
+
unit: entry.unit || "sat",
|
|
3992
|
+
createdAt: entry.createdAt ?? Date.now()
|
|
3993
|
+
}));
|
|
3994
|
+
void driver.setItem(SDK_STORAGE_KEYS.CACHED_RECEIVE_TOKENS, normalized);
|
|
3995
|
+
set({ cachedReceiveTokens: normalized });
|
|
3996
|
+
},
|
|
3997
|
+
setUsageTracking: (value) => {
|
|
3998
|
+
void driver.setItem(SDK_STORAGE_KEYS.USAGE_TRACKING, value);
|
|
3999
|
+
set({ usageTracking: value });
|
|
4000
|
+
},
|
|
4001
|
+
setClientIds: (value) => {
|
|
4002
|
+
set((state) => {
|
|
4003
|
+
const updates = typeof value === "function" ? value(state.clientIds) : value;
|
|
4004
|
+
const normalized = updates.map((entry) => ({
|
|
4005
|
+
...entry,
|
|
4006
|
+
createdAt: entry.createdAt ?? Date.now(),
|
|
4007
|
+
lastUsed: entry.lastUsed ?? null
|
|
4008
|
+
}));
|
|
4009
|
+
void driver.setItem(SDK_STORAGE_KEYS.CLIENT_IDS, normalized);
|
|
4010
|
+
return { clientIds: normalized };
|
|
4011
|
+
});
|
|
4012
|
+
}
|
|
4013
|
+
}));
|
|
4014
|
+
var hydrateStoreFromDriver = async (store, driver) => {
|
|
3830
4015
|
const [
|
|
3831
4016
|
rawModels,
|
|
3832
4017
|
lastUsedModel,
|
|
@@ -3842,7 +4027,8 @@ var createSdkStore = async ({
|
|
|
3842
4027
|
rawRoutstr21Models,
|
|
3843
4028
|
rawLastRoutstr21ModelsUpdate,
|
|
3844
4029
|
rawCachedReceiveTokens,
|
|
3845
|
-
rawUsageTracking
|
|
4030
|
+
rawUsageTracking,
|
|
4031
|
+
rawClientIds
|
|
3846
4032
|
] = await Promise.all([
|
|
3847
4033
|
driver.getItem(
|
|
3848
4034
|
SDK_STORAGE_KEYS.MODELS_FROM_ALL_PROVIDERS,
|
|
@@ -3873,7 +4059,8 @@ var createSdkStore = async ({
|
|
|
3873
4059
|
null
|
|
3874
4060
|
),
|
|
3875
4061
|
driver.getItem(SDK_STORAGE_KEYS.CACHED_RECEIVE_TOKENS, []),
|
|
3876
|
-
driver.getItem(SDK_STORAGE_KEYS.USAGE_TRACKING, [])
|
|
4062
|
+
driver.getItem(SDK_STORAGE_KEYS.USAGE_TRACKING, []),
|
|
4063
|
+
driver.getItem(SDK_STORAGE_KEYS.CLIENT_IDS, [])
|
|
3877
4064
|
]);
|
|
3878
4065
|
const modelsFromAllProviders = Object.fromEntries(
|
|
3879
4066
|
Object.entries(rawModels).map(([baseUrl, models]) => [
|
|
@@ -3932,7 +4119,12 @@ var createSdkStore = async ({
|
|
|
3932
4119
|
createdAt: entry.createdAt ?? Date.now()
|
|
3933
4120
|
}));
|
|
3934
4121
|
const usageTracking = rawUsageTracking;
|
|
3935
|
-
|
|
4122
|
+
const clientIds = rawClientIds.map((entry) => ({
|
|
4123
|
+
...entry,
|
|
4124
|
+
createdAt: entry.createdAt ?? Date.now(),
|
|
4125
|
+
lastUsed: entry.lastUsed ?? null
|
|
4126
|
+
}));
|
|
4127
|
+
store.setState({
|
|
3936
4128
|
modelsFromAllProviders,
|
|
3937
4129
|
lastUsedModel,
|
|
3938
4130
|
baseUrlsList,
|
|
@@ -3948,128 +4140,17 @@ var createSdkStore = async ({
|
|
|
3948
4140
|
lastRoutstr21ModelsUpdate,
|
|
3949
4141
|
cachedReceiveTokens,
|
|
3950
4142
|
usageTracking,
|
|
3951
|
-
|
|
3952
|
-
|
|
3953
|
-
|
|
3954
|
-
|
|
3955
|
-
|
|
3956
|
-
|
|
3957
|
-
|
|
3958
|
-
|
|
3959
|
-
|
|
3960
|
-
|
|
3961
|
-
|
|
3962
|
-
setLastUsedModel: (value) => {
|
|
3963
|
-
void driver.setItem(SDK_STORAGE_KEYS.LAST_USED_MODEL, value);
|
|
3964
|
-
set({ lastUsedModel: value });
|
|
3965
|
-
},
|
|
3966
|
-
setBaseUrlsList: (value) => {
|
|
3967
|
-
const normalized = value.map((url) => normalizeBaseUrl(url));
|
|
3968
|
-
void driver.setItem(SDK_STORAGE_KEYS.BASE_URLS_LIST, normalized);
|
|
3969
|
-
set({ baseUrlsList: normalized });
|
|
3970
|
-
},
|
|
3971
|
-
setBaseUrlsLastUpdate: (value) => {
|
|
3972
|
-
void driver.setItem(SDK_STORAGE_KEYS.LAST_BASE_URLS_UPDATE, value);
|
|
3973
|
-
set({ lastBaseUrlsUpdate: value });
|
|
3974
|
-
},
|
|
3975
|
-
setDisabledProviders: (value) => {
|
|
3976
|
-
const normalized = value.map((url) => normalizeBaseUrl(url));
|
|
3977
|
-
void driver.setItem(SDK_STORAGE_KEYS.DISABLED_PROVIDERS, normalized);
|
|
3978
|
-
set({ disabledProviders: normalized });
|
|
3979
|
-
},
|
|
3980
|
-
setMintsFromAllProviders: (value) => {
|
|
3981
|
-
const normalized = {};
|
|
3982
|
-
for (const [baseUrl, mints] of Object.entries(value)) {
|
|
3983
|
-
normalized[normalizeBaseUrl(baseUrl)] = mints.map(
|
|
3984
|
-
(mint) => mint.endsWith("/") ? mint.slice(0, -1) : mint
|
|
3985
|
-
);
|
|
3986
|
-
}
|
|
3987
|
-
void driver.setItem(
|
|
3988
|
-
SDK_STORAGE_KEYS.MINTS_FROM_ALL_PROVIDERS,
|
|
3989
|
-
normalized
|
|
3990
|
-
);
|
|
3991
|
-
set({ mintsFromAllProviders: normalized });
|
|
3992
|
-
},
|
|
3993
|
-
setInfoFromAllProviders: (value) => {
|
|
3994
|
-
const normalized = {};
|
|
3995
|
-
for (const [baseUrl, info] of Object.entries(value)) {
|
|
3996
|
-
normalized[normalizeBaseUrl(baseUrl)] = info;
|
|
3997
|
-
}
|
|
3998
|
-
void driver.setItem(SDK_STORAGE_KEYS.INFO_FROM_ALL_PROVIDERS, normalized);
|
|
3999
|
-
set({ infoFromAllProviders: normalized });
|
|
4000
|
-
},
|
|
4001
|
-
setLastModelsUpdate: (value) => {
|
|
4002
|
-
const normalized = {};
|
|
4003
|
-
for (const [baseUrl, timestamp] of Object.entries(value)) {
|
|
4004
|
-
normalized[normalizeBaseUrl(baseUrl)] = timestamp;
|
|
4005
|
-
}
|
|
4006
|
-
void driver.setItem(SDK_STORAGE_KEYS.LAST_MODELS_UPDATE, normalized);
|
|
4007
|
-
set({ lastModelsUpdate: normalized });
|
|
4008
|
-
},
|
|
4009
|
-
setCachedTokens: (value) => {
|
|
4010
|
-
set((state) => {
|
|
4011
|
-
const updates = typeof value === "function" ? value(state.cachedTokens) : value;
|
|
4012
|
-
const normalized = updates.map((entry) => ({
|
|
4013
|
-
...entry,
|
|
4014
|
-
baseUrl: normalizeBaseUrl(entry.baseUrl),
|
|
4015
|
-
balance: typeof entry.balance === "number" ? entry.balance : getCashuTokenBalance(entry.token),
|
|
4016
|
-
lastUsed: entry.lastUsed ?? null
|
|
4017
|
-
}));
|
|
4018
|
-
void driver.setItem(SDK_STORAGE_KEYS.LOCAL_CASHU_TOKENS, normalized);
|
|
4019
|
-
return { cachedTokens: normalized };
|
|
4020
|
-
});
|
|
4021
|
-
},
|
|
4022
|
-
setApiKeys: (value) => {
|
|
4023
|
-
set((state) => {
|
|
4024
|
-
const updates = typeof value === "function" ? value(state.apiKeys) : value;
|
|
4025
|
-
const normalized = updates.map((entry) => ({
|
|
4026
|
-
...entry,
|
|
4027
|
-
baseUrl: normalizeBaseUrl(entry.baseUrl),
|
|
4028
|
-
balance: entry.balance ?? 0,
|
|
4029
|
-
lastUsed: entry.lastUsed ?? null
|
|
4030
|
-
}));
|
|
4031
|
-
void driver.setItem(SDK_STORAGE_KEYS.API_KEYS, normalized);
|
|
4032
|
-
return { apiKeys: normalized };
|
|
4033
|
-
});
|
|
4034
|
-
},
|
|
4035
|
-
setChildKeys: (value) => {
|
|
4036
|
-
set((state) => {
|
|
4037
|
-
const updates = typeof value === "function" ? value(state.childKeys) : value;
|
|
4038
|
-
const normalized = updates.map((entry) => ({
|
|
4039
|
-
parentBaseUrl: normalizeBaseUrl(entry.parentBaseUrl),
|
|
4040
|
-
childKey: entry.childKey,
|
|
4041
|
-
balance: entry.balance ?? 0,
|
|
4042
|
-
balanceLimit: entry.balanceLimit,
|
|
4043
|
-
validityDate: entry.validityDate,
|
|
4044
|
-
createdAt: entry.createdAt ?? Date.now()
|
|
4045
|
-
}));
|
|
4046
|
-
void driver.setItem(SDK_STORAGE_KEYS.CHILD_KEYS, normalized);
|
|
4047
|
-
return { childKeys: normalized };
|
|
4048
|
-
});
|
|
4049
|
-
},
|
|
4050
|
-
setRoutstr21Models: (value) => {
|
|
4051
|
-
void driver.setItem(SDK_STORAGE_KEYS.ROUTSTR21_MODELS, value);
|
|
4052
|
-
set({ routstr21Models: value });
|
|
4053
|
-
},
|
|
4054
|
-
setRoutstr21ModelsLastUpdate: (value) => {
|
|
4055
|
-
void driver.setItem(SDK_STORAGE_KEYS.LAST_ROUTSTR21_MODELS_UPDATE, value);
|
|
4056
|
-
set({ lastRoutstr21ModelsUpdate: value });
|
|
4057
|
-
},
|
|
4058
|
-
setCachedReceiveTokens: (value) => {
|
|
4059
|
-
const normalized = value.map((entry) => ({
|
|
4060
|
-
token: entry.token,
|
|
4061
|
-
amount: entry.amount,
|
|
4062
|
-
unit: entry.unit || "sat",
|
|
4063
|
-
createdAt: entry.createdAt ?? Date.now()
|
|
4064
|
-
}));
|
|
4065
|
-
void driver.setItem(SDK_STORAGE_KEYS.CACHED_RECEIVE_TOKENS, normalized);
|
|
4066
|
-
set({ cachedReceiveTokens: normalized });
|
|
4067
|
-
},
|
|
4068
|
-
setUsageTracking: (value) => {
|
|
4069
|
-
void driver.setItem(SDK_STORAGE_KEYS.USAGE_TRACKING, value);
|
|
4070
|
-
set({ usageTracking: value });
|
|
4071
|
-
}
|
|
4072
|
-
}));
|
|
4143
|
+
clientIds
|
|
4144
|
+
});
|
|
4145
|
+
};
|
|
4146
|
+
var createSdkStore = ({
|
|
4147
|
+
driver
|
|
4148
|
+
}) => {
|
|
4149
|
+
const store = createEmptyStore(driver);
|
|
4150
|
+
return {
|
|
4151
|
+
store,
|
|
4152
|
+
hydrate: hydrateStoreFromDriver(store, driver)
|
|
4153
|
+
};
|
|
4073
4154
|
};
|
|
4074
4155
|
var createDiscoveryAdapterFromStore = (store) => ({
|
|
4075
4156
|
getCachedModels: () => store.getState().modelsFromAllProviders,
|
|
@@ -4334,7 +4415,7 @@ var createProviderRegistryFromStore = (store) => ({
|
|
|
4334
4415
|
});
|
|
4335
4416
|
|
|
4336
4417
|
// storage/index.ts
|
|
4337
|
-
var
|
|
4418
|
+
var isBrowser2 = () => {
|
|
4338
4419
|
try {
|
|
4339
4420
|
return typeof window !== "undefined" && typeof window.localStorage !== "undefined";
|
|
4340
4421
|
} catch {
|
|
@@ -4354,7 +4435,7 @@ var isBun2 = () => {
|
|
|
4354
4435
|
};
|
|
4355
4436
|
var getDefaultSdkDriver = () => {
|
|
4356
4437
|
if (defaultDriver) return defaultDriver;
|
|
4357
|
-
if (
|
|
4438
|
+
if (isBrowser2()) {
|
|
4358
4439
|
defaultDriver = localStorageDriver;
|
|
4359
4440
|
return defaultDriver;
|
|
4360
4441
|
}
|
|
@@ -4369,12 +4450,12 @@ var getDefaultSdkDriver = () => {
|
|
|
4369
4450
|
defaultDriver = createMemoryDriver();
|
|
4370
4451
|
return defaultDriver;
|
|
4371
4452
|
};
|
|
4372
|
-
var
|
|
4453
|
+
var defaultStore = null;
|
|
4373
4454
|
var getDefaultSdkStore = () => {
|
|
4374
|
-
if (!
|
|
4375
|
-
|
|
4455
|
+
if (!defaultStore) {
|
|
4456
|
+
defaultStore = createSdkStore({ driver: getDefaultSdkDriver() });
|
|
4376
4457
|
}
|
|
4377
|
-
return
|
|
4458
|
+
return defaultStore.hydrate.then(() => defaultStore.store);
|
|
4378
4459
|
};
|
|
4379
4460
|
var getDefaultDiscoveryAdapter = async () => createDiscoveryAdapterFromStore(await getDefaultSdkStore());
|
|
4380
4461
|
var getDefaultStorageAdapter = async () => createStorageAdapterFromStore(await getDefaultSdkStore());
|
|
@@ -4395,7 +4476,8 @@ async function routeRequests(options) {
|
|
|
4395
4476
|
torMode = false,
|
|
4396
4477
|
forceRefresh = false,
|
|
4397
4478
|
modelManager: providedModelManager,
|
|
4398
|
-
debugLevel
|
|
4479
|
+
debugLevel,
|
|
4480
|
+
mode = "apikeys"
|
|
4399
4481
|
} = options;
|
|
4400
4482
|
let modelManager;
|
|
4401
4483
|
let providers;
|
|
@@ -4460,7 +4542,7 @@ async function routeRequests(options) {
|
|
|
4460
4542
|
storageAdapter,
|
|
4461
4543
|
providerRegistry,
|
|
4462
4544
|
alertLevel,
|
|
4463
|
-
|
|
4545
|
+
mode
|
|
4464
4546
|
);
|
|
4465
4547
|
if (debugLevel) {
|
|
4466
4548
|
client.setDebugLevel(debugLevel);
|