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