@routstr/sdk 0.1.2 → 0.1.4
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 +13 -3
- package/dist/client/index.js.map +1 -1
- package/dist/client/index.mjs +13 -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 +6 -3
- package/dist/index.d.ts +6 -3
- package/dist/index.js +51 -10
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +51 -10
- 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
|
};
|
|
@@ -2724,22 +2737,31 @@ var RoutstrClient = class {
|
|
|
2724
2737
|
try {
|
|
2725
2738
|
const url = `${baseUrl.replace(/\/$/, "")}${path}`;
|
|
2726
2739
|
if (this.mode === "xcashu") this._log("DEBUG", "HEADERS,", headers);
|
|
2740
|
+
this._log("DEBUG", "HEADERS,", headers);
|
|
2727
2741
|
const response = await fetch(url, {
|
|
2728
2742
|
method,
|
|
2729
2743
|
headers,
|
|
2730
2744
|
body: body === void 0 || method === "GET" ? void 0 : JSON.stringify(body)
|
|
2731
2745
|
});
|
|
2732
2746
|
if (this.mode === "xcashu") this._log("DEBUG", "response,", response);
|
|
2747
|
+
this._log("DEBUG", "response,", response);
|
|
2733
2748
|
response.baseUrl = baseUrl;
|
|
2734
2749
|
response.token = token;
|
|
2735
2750
|
if (!response.ok) {
|
|
2736
2751
|
const requestId = response.headers.get("x-routstr-request-id") || void 0;
|
|
2752
|
+
let bodyText;
|
|
2753
|
+
try {
|
|
2754
|
+
bodyText = await response.text();
|
|
2755
|
+
} catch (e) {
|
|
2756
|
+
bodyText = void 0;
|
|
2757
|
+
}
|
|
2737
2758
|
return await this._handleErrorResponse(
|
|
2738
2759
|
params,
|
|
2739
2760
|
token,
|
|
2740
2761
|
response.status,
|
|
2741
2762
|
requestId,
|
|
2742
|
-
this.mode === "xcashu" ? response.headers.get("x-cashu") ?? void 0 : void 0
|
|
2763
|
+
this.mode === "xcashu" ? response.headers.get("x-cashu") ?? void 0 : void 0,
|
|
2764
|
+
bodyText
|
|
2743
2765
|
);
|
|
2744
2766
|
}
|
|
2745
2767
|
return response;
|
|
@@ -2758,7 +2780,7 @@ var RoutstrClient = class {
|
|
|
2758
2780
|
/**
|
|
2759
2781
|
* Handle error responses with failover
|
|
2760
2782
|
*/
|
|
2761
|
-
async _handleErrorResponse(params, token, status, requestId, xCashuRefundToken) {
|
|
2783
|
+
async _handleErrorResponse(params, token, status, requestId, xCashuRefundToken, responseBody) {
|
|
2762
2784
|
const { path, method, body, selectedModel, baseUrl, mintUrl } = params;
|
|
2763
2785
|
let tryNextProvider = false;
|
|
2764
2786
|
this._log(
|
|
@@ -2828,7 +2850,8 @@ var RoutstrClient = class {
|
|
|
2828
2850
|
);
|
|
2829
2851
|
}
|
|
2830
2852
|
}
|
|
2831
|
-
if (status === 402 && !tryNextProvider && (this.mode === "apikeys" || this.mode === "lazyrefund")) {
|
|
2853
|
+
if ((status === 402 || status === 413 && responseBody?.includes("Insufficient balance")) && !tryNextProvider && (this.mode === "apikeys" || this.mode === "lazyrefund")) {
|
|
2854
|
+
console.log("RESPONSFE ", responseBody);
|
|
2832
2855
|
const topupResult = await this.balanceManager.topUp({
|
|
2833
2856
|
mintUrl,
|
|
2834
2857
|
baseUrl,
|
|
@@ -3612,6 +3635,7 @@ var SDK_STORAGE_KEYS = {
|
|
|
3612
3635
|
API_KEYS: "api_keys",
|
|
3613
3636
|
CHILD_KEYS: "child_keys",
|
|
3614
3637
|
ROUTSTR21_MODELS: "routstr21Models",
|
|
3638
|
+
LAST_ROUTSTR21_MODELS_UPDATE: "lastRoutstr21ModelsUpdate",
|
|
3615
3639
|
CACHED_RECEIVE_TOKENS: "cached_receive_tokens"
|
|
3616
3640
|
};
|
|
3617
3641
|
|
|
@@ -3646,6 +3670,7 @@ var createSdkStore = async ({
|
|
|
3646
3670
|
rawApiKeys,
|
|
3647
3671
|
rawChildKeys,
|
|
3648
3672
|
rawRoutstr21Models,
|
|
3673
|
+
rawLastRoutstr21ModelsUpdate,
|
|
3649
3674
|
rawCachedReceiveTokens
|
|
3650
3675
|
] = await Promise.all([
|
|
3651
3676
|
driver.getItem(
|
|
@@ -3672,6 +3697,10 @@ var createSdkStore = async ({
|
|
|
3672
3697
|
driver.getItem(SDK_STORAGE_KEYS.API_KEYS, []),
|
|
3673
3698
|
driver.getItem(SDK_STORAGE_KEYS.CHILD_KEYS, []),
|
|
3674
3699
|
driver.getItem(SDK_STORAGE_KEYS.ROUTSTR21_MODELS, []),
|
|
3700
|
+
driver.getItem(
|
|
3701
|
+
SDK_STORAGE_KEYS.LAST_ROUTSTR21_MODELS_UPDATE,
|
|
3702
|
+
null
|
|
3703
|
+
),
|
|
3675
3704
|
driver.getItem(SDK_STORAGE_KEYS.CACHED_RECEIVE_TOKENS, [])
|
|
3676
3705
|
]);
|
|
3677
3706
|
const modelsFromAllProviders = Object.fromEntries(
|
|
@@ -3723,7 +3752,8 @@ var createSdkStore = async ({
|
|
|
3723
3752
|
createdAt: entry.createdAt ?? Date.now()
|
|
3724
3753
|
}));
|
|
3725
3754
|
const routstr21Models = rawRoutstr21Models;
|
|
3726
|
-
const
|
|
3755
|
+
const lastRoutstr21ModelsUpdate = rawLastRoutstr21ModelsUpdate;
|
|
3756
|
+
const cachedReceiveTokens = rawCachedReceiveTokens?.map((entry) => ({
|
|
3727
3757
|
token: entry.token,
|
|
3728
3758
|
amount: entry.amount,
|
|
3729
3759
|
unit: entry.unit || "sat",
|
|
@@ -3742,6 +3772,7 @@ var createSdkStore = async ({
|
|
|
3742
3772
|
apiKeys,
|
|
3743
3773
|
childKeys,
|
|
3744
3774
|
routstr21Models,
|
|
3775
|
+
lastRoutstr21ModelsUpdate,
|
|
3745
3776
|
cachedReceiveTokens,
|
|
3746
3777
|
setModelsFromAllProviders: (value) => {
|
|
3747
3778
|
const normalized = {};
|
|
@@ -3846,6 +3877,10 @@ var createSdkStore = async ({
|
|
|
3846
3877
|
void driver.setItem(SDK_STORAGE_KEYS.ROUTSTR21_MODELS, value);
|
|
3847
3878
|
set({ routstr21Models: value });
|
|
3848
3879
|
},
|
|
3880
|
+
setRoutstr21ModelsLastUpdate: (value) => {
|
|
3881
|
+
void driver.setItem(SDK_STORAGE_KEYS.LAST_ROUTSTR21_MODELS_UPDATE, value);
|
|
3882
|
+
set({ lastRoutstr21ModelsUpdate: value });
|
|
3883
|
+
},
|
|
3849
3884
|
setCachedReceiveTokens: (value) => {
|
|
3850
3885
|
const normalized = value.map((entry) => ({
|
|
3851
3886
|
token: entry.token,
|
|
@@ -3884,7 +3919,9 @@ var createDiscoveryAdapterFromStore = (store) => ({
|
|
|
3884
3919
|
getBaseUrlsLastUpdate: () => store.getState().lastBaseUrlsUpdate,
|
|
3885
3920
|
setBaseUrlsLastUpdate: (timestamp) => store.getState().setBaseUrlsLastUpdate(timestamp),
|
|
3886
3921
|
getRoutstr21Models: () => store.getState().routstr21Models,
|
|
3887
|
-
setRoutstr21Models: (models) => store.getState().setRoutstr21Models(models)
|
|
3922
|
+
setRoutstr21Models: (models) => store.getState().setRoutstr21Models(models),
|
|
3923
|
+
getRoutstr21ModelsLastUpdate: () => store.getState().lastRoutstr21ModelsUpdate,
|
|
3924
|
+
setRoutstr21ModelsLastUpdate: (timestamp) => store.getState().setRoutstr21ModelsLastUpdate(timestamp)
|
|
3888
3925
|
});
|
|
3889
3926
|
var createStorageAdapterFromStore = (store) => ({
|
|
3890
3927
|
getToken: (baseUrl) => {
|
|
@@ -4179,7 +4216,8 @@ async function routeRequests(options) {
|
|
|
4179
4216
|
includeProviderUrls = [],
|
|
4180
4217
|
torMode = false,
|
|
4181
4218
|
forceRefresh = false,
|
|
4182
|
-
modelManager: providedModelManager
|
|
4219
|
+
modelManager: providedModelManager,
|
|
4220
|
+
debugLevel
|
|
4183
4221
|
} = options;
|
|
4184
4222
|
let modelManager;
|
|
4185
4223
|
let providers;
|
|
@@ -4246,6 +4284,9 @@ async function routeRequests(options) {
|
|
|
4246
4284
|
alertLevel,
|
|
4247
4285
|
"apikeys"
|
|
4248
4286
|
);
|
|
4287
|
+
if (debugLevel) {
|
|
4288
|
+
client.setDebugLevel(debugLevel);
|
|
4289
|
+
}
|
|
4249
4290
|
const maxTokens = extractMaxTokens(requestBody);
|
|
4250
4291
|
const stream = extractStream(requestBody);
|
|
4251
4292
|
let response = null;
|