@routstr/sdk 0.1.2 → 0.1.3
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 +10 -3
- package/dist/client/index.js.map +1 -1
- package/dist/client/index.mjs +10 -3
- package/dist/client/index.mjs.map +1 -1
- package/dist/discovery/index.d.mts +3 -2
- package/dist/discovery/index.d.ts +3 -2
- package/dist/discovery/index.js +17 -4
- package/dist/discovery/index.js.map +1 -1
- package/dist/discovery/index.mjs +17 -4
- package/dist/discovery/index.mjs.map +1 -1
- package/dist/index.d.mts +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +43 -9
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +43 -9
- package/dist/index.mjs.map +1 -1
- package/dist/{interfaces-Dnrvxr6N.d.ts → interfaces-CC0LT9p9.d.ts} +10 -0
- package/dist/{interfaces-nanJOqdW.d.mts → interfaces-DGdP8fQp.d.mts} +10 -0
- package/dist/storage/index.d.mts +4 -1
- package/dist/storage/index.d.ts +4 -1
- package/dist/storage/index.js +16 -2
- package/dist/storage/index.js.map +1 -1
- package/dist/storage/index.mjs +16 -2
- package/dist/storage/index.mjs.map +1 -1
- package/package.json +1 -1
package/dist/index.mjs
CHANGED
|
@@ -140,6 +140,7 @@ var ModelManager = class _ModelManager {
|
|
|
140
140
|
const lastUpdate = this.adapter.getBaseUrlsLastUpdate();
|
|
141
141
|
const cacheValid = lastUpdate && Date.now() - lastUpdate <= this.cacheTTL;
|
|
142
142
|
if (cacheValid) {
|
|
143
|
+
await this.fetchRoutstr21Models();
|
|
143
144
|
return this.filterBaseUrlsForTor(cachedUrls, torMode);
|
|
144
145
|
}
|
|
145
146
|
}
|
|
@@ -450,9 +451,18 @@ var ModelManager = class _ModelManager {
|
|
|
450
451
|
}
|
|
451
452
|
/**
|
|
452
453
|
* Fetch routstr21 models from Nostr network (kind 38423)
|
|
454
|
+
* Uses cache if available and not expired
|
|
453
455
|
* @returns Array of model IDs or empty array if not found
|
|
454
456
|
*/
|
|
455
|
-
async fetchRoutstr21Models() {
|
|
457
|
+
async fetchRoutstr21Models(forceRefresh = false) {
|
|
458
|
+
const cachedModels = this.adapter.getRoutstr21Models();
|
|
459
|
+
if (!forceRefresh && cachedModels.length > 0) {
|
|
460
|
+
const lastUpdate = this.adapter.getRoutstr21ModelsLastUpdate();
|
|
461
|
+
const cacheValid = lastUpdate && Date.now() - lastUpdate <= this.cacheTTL;
|
|
462
|
+
if (cacheValid) {
|
|
463
|
+
return cachedModels;
|
|
464
|
+
}
|
|
465
|
+
}
|
|
456
466
|
const DEFAULT_RELAYS = [
|
|
457
467
|
"wss://relay.primal.net",
|
|
458
468
|
"wss://nos.lol",
|
|
@@ -466,7 +476,9 @@ var ModelManager = class _ModelManager {
|
|
|
466
476
|
kinds: [38423],
|
|
467
477
|
"#d": ["routstr-21-models"],
|
|
468
478
|
limit: 1,
|
|
469
|
-
authors: [
|
|
479
|
+
authors: [
|
|
480
|
+
"4ad6fa2d16e2a9b576c863b4cf7404a70d4dc320c0c447d10ad6ff58993eacc8"
|
|
481
|
+
]
|
|
470
482
|
}).pipe(
|
|
471
483
|
onlyEvents(),
|
|
472
484
|
tap((event2) => {
|
|
@@ -483,20 +495,21 @@ var ModelManager = class _ModelManager {
|
|
|
483
495
|
});
|
|
484
496
|
const timeline = localEventStore.getTimeline({ kinds: [38423] });
|
|
485
497
|
if (timeline.length === 0) {
|
|
486
|
-
return [];
|
|
498
|
+
return cachedModels.length > 0 ? cachedModels : [];
|
|
487
499
|
}
|
|
488
500
|
const event = timeline[0];
|
|
489
501
|
try {
|
|
490
502
|
const content = JSON.parse(event.content);
|
|
491
503
|
const models = Array.isArray(content?.models) ? content.models : [];
|
|
492
504
|
this.adapter.setRoutstr21Models(models);
|
|
505
|
+
this.adapter.setRoutstr21ModelsLastUpdate(Date.now());
|
|
493
506
|
return models;
|
|
494
507
|
} catch {
|
|
495
508
|
console.warn(
|
|
496
509
|
"[Routstr21Models] Failed to parse Nostr event content:",
|
|
497
510
|
event.id
|
|
498
511
|
);
|
|
499
|
-
return [];
|
|
512
|
+
return cachedModels.length > 0 ? cachedModels : [];
|
|
500
513
|
}
|
|
501
514
|
}
|
|
502
515
|
};
|
|
@@ -2734,12 +2747,19 @@ var RoutstrClient = class {
|
|
|
2734
2747
|
response.token = token;
|
|
2735
2748
|
if (!response.ok) {
|
|
2736
2749
|
const requestId = response.headers.get("x-routstr-request-id") || void 0;
|
|
2750
|
+
let bodyText;
|
|
2751
|
+
try {
|
|
2752
|
+
bodyText = await response.text();
|
|
2753
|
+
} catch (e) {
|
|
2754
|
+
bodyText = void 0;
|
|
2755
|
+
}
|
|
2737
2756
|
return await this._handleErrorResponse(
|
|
2738
2757
|
params,
|
|
2739
2758
|
token,
|
|
2740
2759
|
response.status,
|
|
2741
2760
|
requestId,
|
|
2742
|
-
this.mode === "xcashu" ? response.headers.get("x-cashu") ?? void 0 : void 0
|
|
2761
|
+
this.mode === "xcashu" ? response.headers.get("x-cashu") ?? void 0 : void 0,
|
|
2762
|
+
bodyText
|
|
2743
2763
|
);
|
|
2744
2764
|
}
|
|
2745
2765
|
return response;
|
|
@@ -2758,7 +2778,7 @@ var RoutstrClient = class {
|
|
|
2758
2778
|
/**
|
|
2759
2779
|
* Handle error responses with failover
|
|
2760
2780
|
*/
|
|
2761
|
-
async _handleErrorResponse(params, token, status, requestId, xCashuRefundToken) {
|
|
2781
|
+
async _handleErrorResponse(params, token, status, requestId, xCashuRefundToken, responseBody) {
|
|
2762
2782
|
const { path, method, body, selectedModel, baseUrl, mintUrl } = params;
|
|
2763
2783
|
let tryNextProvider = false;
|
|
2764
2784
|
this._log(
|
|
@@ -2828,7 +2848,7 @@ var RoutstrClient = class {
|
|
|
2828
2848
|
);
|
|
2829
2849
|
}
|
|
2830
2850
|
}
|
|
2831
|
-
if (status === 402 && !tryNextProvider && (this.mode === "apikeys" || this.mode === "lazyrefund")) {
|
|
2851
|
+
if ((status === 402 || status === 413 && responseBody?.includes("Insufficient balance")) && !tryNextProvider && (this.mode === "apikeys" || this.mode === "lazyrefund")) {
|
|
2832
2852
|
const topupResult = await this.balanceManager.topUp({
|
|
2833
2853
|
mintUrl,
|
|
2834
2854
|
baseUrl,
|
|
@@ -3612,6 +3632,7 @@ var SDK_STORAGE_KEYS = {
|
|
|
3612
3632
|
API_KEYS: "api_keys",
|
|
3613
3633
|
CHILD_KEYS: "child_keys",
|
|
3614
3634
|
ROUTSTR21_MODELS: "routstr21Models",
|
|
3635
|
+
LAST_ROUTSTR21_MODELS_UPDATE: "lastRoutstr21ModelsUpdate",
|
|
3615
3636
|
CACHED_RECEIVE_TOKENS: "cached_receive_tokens"
|
|
3616
3637
|
};
|
|
3617
3638
|
|
|
@@ -3646,6 +3667,7 @@ var createSdkStore = async ({
|
|
|
3646
3667
|
rawApiKeys,
|
|
3647
3668
|
rawChildKeys,
|
|
3648
3669
|
rawRoutstr21Models,
|
|
3670
|
+
rawLastRoutstr21ModelsUpdate,
|
|
3649
3671
|
rawCachedReceiveTokens
|
|
3650
3672
|
] = await Promise.all([
|
|
3651
3673
|
driver.getItem(
|
|
@@ -3672,6 +3694,10 @@ var createSdkStore = async ({
|
|
|
3672
3694
|
driver.getItem(SDK_STORAGE_KEYS.API_KEYS, []),
|
|
3673
3695
|
driver.getItem(SDK_STORAGE_KEYS.CHILD_KEYS, []),
|
|
3674
3696
|
driver.getItem(SDK_STORAGE_KEYS.ROUTSTR21_MODELS, []),
|
|
3697
|
+
driver.getItem(
|
|
3698
|
+
SDK_STORAGE_KEYS.LAST_ROUTSTR21_MODELS_UPDATE,
|
|
3699
|
+
null
|
|
3700
|
+
),
|
|
3675
3701
|
driver.getItem(SDK_STORAGE_KEYS.CACHED_RECEIVE_TOKENS, [])
|
|
3676
3702
|
]);
|
|
3677
3703
|
const modelsFromAllProviders = Object.fromEntries(
|
|
@@ -3723,7 +3749,8 @@ var createSdkStore = async ({
|
|
|
3723
3749
|
createdAt: entry.createdAt ?? Date.now()
|
|
3724
3750
|
}));
|
|
3725
3751
|
const routstr21Models = rawRoutstr21Models;
|
|
3726
|
-
const
|
|
3752
|
+
const lastRoutstr21ModelsUpdate = rawLastRoutstr21ModelsUpdate;
|
|
3753
|
+
const cachedReceiveTokens = rawCachedReceiveTokens?.map((entry) => ({
|
|
3727
3754
|
token: entry.token,
|
|
3728
3755
|
amount: entry.amount,
|
|
3729
3756
|
unit: entry.unit || "sat",
|
|
@@ -3742,6 +3769,7 @@ var createSdkStore = async ({
|
|
|
3742
3769
|
apiKeys,
|
|
3743
3770
|
childKeys,
|
|
3744
3771
|
routstr21Models,
|
|
3772
|
+
lastRoutstr21ModelsUpdate,
|
|
3745
3773
|
cachedReceiveTokens,
|
|
3746
3774
|
setModelsFromAllProviders: (value) => {
|
|
3747
3775
|
const normalized = {};
|
|
@@ -3846,6 +3874,10 @@ var createSdkStore = async ({
|
|
|
3846
3874
|
void driver.setItem(SDK_STORAGE_KEYS.ROUTSTR21_MODELS, value);
|
|
3847
3875
|
set({ routstr21Models: value });
|
|
3848
3876
|
},
|
|
3877
|
+
setRoutstr21ModelsLastUpdate: (value) => {
|
|
3878
|
+
void driver.setItem(SDK_STORAGE_KEYS.LAST_ROUTSTR21_MODELS_UPDATE, value);
|
|
3879
|
+
set({ lastRoutstr21ModelsUpdate: value });
|
|
3880
|
+
},
|
|
3849
3881
|
setCachedReceiveTokens: (value) => {
|
|
3850
3882
|
const normalized = value.map((entry) => ({
|
|
3851
3883
|
token: entry.token,
|
|
@@ -3884,7 +3916,9 @@ var createDiscoveryAdapterFromStore = (store) => ({
|
|
|
3884
3916
|
getBaseUrlsLastUpdate: () => store.getState().lastBaseUrlsUpdate,
|
|
3885
3917
|
setBaseUrlsLastUpdate: (timestamp) => store.getState().setBaseUrlsLastUpdate(timestamp),
|
|
3886
3918
|
getRoutstr21Models: () => store.getState().routstr21Models,
|
|
3887
|
-
setRoutstr21Models: (models) => store.getState().setRoutstr21Models(models)
|
|
3919
|
+
setRoutstr21Models: (models) => store.getState().setRoutstr21Models(models),
|
|
3920
|
+
getRoutstr21ModelsLastUpdate: () => store.getState().lastRoutstr21ModelsUpdate,
|
|
3921
|
+
setRoutstr21ModelsLastUpdate: (timestamp) => store.getState().setRoutstr21ModelsLastUpdate(timestamp)
|
|
3888
3922
|
});
|
|
3889
3923
|
var createStorageAdapterFromStore = (store) => ({
|
|
3890
3924
|
getToken: (baseUrl) => {
|