@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.d.mts
CHANGED
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
import { M as Model } from './types-BlHjmWRK.mjs';
|
|
2
2
|
export { A as APIErrorVerdict, b as AnnotationData, C as CandidateProvider, F as FetchAIResponseParams, I as ImageData, a as Message, c as MessageContentType, d as MintDiscoveryResult, e as MintSelection, f as ModelArchitecture, g as ModelDiscoveryResult, h as ModelPricing, i as ModelSatsPricing, j as PendingTokenEntry, k as PerRequestLimits, P as ProviderInfo, R as RefundResult, S as SpendResult, l as StreamingResult, m as TopUpResult, T as TransactionHistory, U as UsageStats } from './types-BlHjmWRK.mjs';
|
|
3
|
-
import { D as DiscoveryAdapter } from './interfaces-
|
|
3
|
+
import { D as DiscoveryAdapter } from './interfaces-DGdP8fQp.mjs';
|
|
4
4
|
import { ModelManager } from './discovery/index.mjs';
|
|
5
5
|
export { MintDiscovery, ModelManagerConfig } from './discovery/index.mjs';
|
|
6
6
|
import { W as WalletAdapter, S as StorageAdapter, P as ProviderRegistry } from './interfaces-B85Wx7ni.mjs';
|
|
7
7
|
export { A as ApiKeyEntry, C as ChildKeyEntry, R as RoutstrClientOptions, a as StreamingCallbacks } from './interfaces-B85Wx7ni.mjs';
|
|
8
8
|
export { BalanceManager, CashuSpender, CreateProviderTokenOptions, ProviderTokenResult, RefundApiKeyOptions, RefundOptions, SpendOptions, TopUpOptions } from './wallet/index.mjs';
|
|
9
|
-
|
|
9
|
+
import { DebugLevel } from './client/index.mjs';
|
|
10
|
+
export { AlertLevel, FetchOptions, ModelProviderPrice, ProviderManager, RouteRequestParams, RoutstrClient, RoutstrClientMode, StreamCallbacks, StreamProcessor } from './client/index.mjs';
|
|
10
11
|
export { SDK_STORAGE_KEYS, SdkStore, StorageDriver, createDiscoveryAdapterFromStore, createIndexedDBDriver, createMemoryDriver, createProviderRegistryFromStore, createSdkStore, createSqliteDriver, createStorageAdapterFromStore, getDefaultDiscoveryAdapter, getDefaultProviderRegistry, getDefaultSdkDriver, getDefaultSdkStore, getDefaultStorageAdapter, localStorageDriver } from './storage/index.mjs';
|
|
11
12
|
import 'zustand/vanilla';
|
|
12
13
|
|
|
@@ -141,6 +142,8 @@ interface RouteRequestOptions {
|
|
|
141
142
|
forceRefresh?: boolean;
|
|
142
143
|
/** Optional: pre-initialized ModelManager (skips bootstrap if provided) */
|
|
143
144
|
modelManager?: ModelManager;
|
|
145
|
+
/** Optional: set RoutstrClient debug level */
|
|
146
|
+
debugLevel?: DebugLevel;
|
|
144
147
|
}
|
|
145
148
|
/**
|
|
146
149
|
* Result from routeRequests function
|
|
@@ -179,4 +182,4 @@ interface RouteRequestResult {
|
|
|
179
182
|
*/
|
|
180
183
|
declare function routeRequests(options: RouteRequestOptions): Promise<Response>;
|
|
181
184
|
|
|
182
|
-
export { DiscoveryAdapter, FailoverError, InsufficientBalanceError, MintDiscoveryError, MintUnreachableError, Model, ModelManager, ModelNotFoundError, NoProvidersAvailableError, ProviderBootstrapError, type ProviderDirectoryEntry, ProviderError, ProviderRegistry, type RouteRequestOptions, type RouteRequestResult, StorageAdapter, StreamingError, TokenOperationError, WalletAdapter, filterBaseUrlsForTor, getProviderEndpoints, isOnionUrl, isTorContext, normalizeProviderUrl, routeRequests };
|
|
185
|
+
export { DebugLevel, DiscoveryAdapter, FailoverError, InsufficientBalanceError, MintDiscoveryError, MintUnreachableError, Model, ModelManager, ModelNotFoundError, NoProvidersAvailableError, ProviderBootstrapError, type ProviderDirectoryEntry, ProviderError, ProviderRegistry, type RouteRequestOptions, type RouteRequestResult, StorageAdapter, StreamingError, TokenOperationError, WalletAdapter, filterBaseUrlsForTor, getProviderEndpoints, isOnionUrl, isTorContext, normalizeProviderUrl, routeRequests };
|
package/dist/index.d.ts
CHANGED
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
import { M as Model } from './types-BlHjmWRK.js';
|
|
2
2
|
export { A as APIErrorVerdict, b as AnnotationData, C as CandidateProvider, F as FetchAIResponseParams, I as ImageData, a as Message, c as MessageContentType, d as MintDiscoveryResult, e as MintSelection, f as ModelArchitecture, g as ModelDiscoveryResult, h as ModelPricing, i as ModelSatsPricing, j as PendingTokenEntry, k as PerRequestLimits, P as ProviderInfo, R as RefundResult, S as SpendResult, l as StreamingResult, m as TopUpResult, T as TransactionHistory, U as UsageStats } from './types-BlHjmWRK.js';
|
|
3
|
-
import { D as DiscoveryAdapter } from './interfaces-
|
|
3
|
+
import { D as DiscoveryAdapter } from './interfaces-CC0LT9p9.js';
|
|
4
4
|
import { ModelManager } from './discovery/index.js';
|
|
5
5
|
export { MintDiscovery, ModelManagerConfig } from './discovery/index.js';
|
|
6
6
|
import { W as WalletAdapter, S as StorageAdapter, P as ProviderRegistry } from './interfaces-BVNyAmKu.js';
|
|
7
7
|
export { A as ApiKeyEntry, C as ChildKeyEntry, R as RoutstrClientOptions, a as StreamingCallbacks } from './interfaces-BVNyAmKu.js';
|
|
8
8
|
export { BalanceManager, CashuSpender, CreateProviderTokenOptions, ProviderTokenResult, RefundApiKeyOptions, RefundOptions, SpendOptions, TopUpOptions } from './wallet/index.js';
|
|
9
|
-
|
|
9
|
+
import { DebugLevel } from './client/index.js';
|
|
10
|
+
export { AlertLevel, FetchOptions, ModelProviderPrice, ProviderManager, RouteRequestParams, RoutstrClient, RoutstrClientMode, StreamCallbacks, StreamProcessor } from './client/index.js';
|
|
10
11
|
export { SDK_STORAGE_KEYS, SdkStore, StorageDriver, createDiscoveryAdapterFromStore, createIndexedDBDriver, createMemoryDriver, createProviderRegistryFromStore, createSdkStore, createSqliteDriver, createStorageAdapterFromStore, getDefaultDiscoveryAdapter, getDefaultProviderRegistry, getDefaultSdkDriver, getDefaultSdkStore, getDefaultStorageAdapter, localStorageDriver } from './storage/index.js';
|
|
11
12
|
import 'zustand/vanilla';
|
|
12
13
|
|
|
@@ -141,6 +142,8 @@ interface RouteRequestOptions {
|
|
|
141
142
|
forceRefresh?: boolean;
|
|
142
143
|
/** Optional: pre-initialized ModelManager (skips bootstrap if provided) */
|
|
143
144
|
modelManager?: ModelManager;
|
|
145
|
+
/** Optional: set RoutstrClient debug level */
|
|
146
|
+
debugLevel?: DebugLevel;
|
|
144
147
|
}
|
|
145
148
|
/**
|
|
146
149
|
* Result from routeRequests function
|
|
@@ -179,4 +182,4 @@ interface RouteRequestResult {
|
|
|
179
182
|
*/
|
|
180
183
|
declare function routeRequests(options: RouteRequestOptions): Promise<Response>;
|
|
181
184
|
|
|
182
|
-
export { DiscoveryAdapter, FailoverError, InsufficientBalanceError, MintDiscoveryError, MintUnreachableError, Model, ModelManager, ModelNotFoundError, NoProvidersAvailableError, ProviderBootstrapError, type ProviderDirectoryEntry, ProviderError, ProviderRegistry, type RouteRequestOptions, type RouteRequestResult, StorageAdapter, StreamingError, TokenOperationError, WalletAdapter, filterBaseUrlsForTor, getProviderEndpoints, isOnionUrl, isTorContext, normalizeProviderUrl, routeRequests };
|
|
185
|
+
export { DebugLevel, DiscoveryAdapter, FailoverError, InsufficientBalanceError, MintDiscoveryError, MintUnreachableError, Model, ModelManager, ModelNotFoundError, NoProvidersAvailableError, ProviderBootstrapError, type ProviderDirectoryEntry, ProviderError, ProviderRegistry, type RouteRequestOptions, type RouteRequestResult, StorageAdapter, StreamingError, TokenOperationError, WalletAdapter, filterBaseUrlsForTor, getProviderEndpoints, isOnionUrl, isTorContext, normalizeProviderUrl, routeRequests };
|
package/dist/index.js
CHANGED
|
@@ -142,6 +142,7 @@ var ModelManager = class _ModelManager {
|
|
|
142
142
|
const lastUpdate = this.adapter.getBaseUrlsLastUpdate();
|
|
143
143
|
const cacheValid = lastUpdate && Date.now() - lastUpdate <= this.cacheTTL;
|
|
144
144
|
if (cacheValid) {
|
|
145
|
+
await this.fetchRoutstr21Models();
|
|
145
146
|
return this.filterBaseUrlsForTor(cachedUrls, torMode);
|
|
146
147
|
}
|
|
147
148
|
}
|
|
@@ -452,9 +453,18 @@ var ModelManager = class _ModelManager {
|
|
|
452
453
|
}
|
|
453
454
|
/**
|
|
454
455
|
* Fetch routstr21 models from Nostr network (kind 38423)
|
|
456
|
+
* Uses cache if available and not expired
|
|
455
457
|
* @returns Array of model IDs or empty array if not found
|
|
456
458
|
*/
|
|
457
|
-
async fetchRoutstr21Models() {
|
|
459
|
+
async fetchRoutstr21Models(forceRefresh = false) {
|
|
460
|
+
const cachedModels = this.adapter.getRoutstr21Models();
|
|
461
|
+
if (!forceRefresh && cachedModels.length > 0) {
|
|
462
|
+
const lastUpdate = this.adapter.getRoutstr21ModelsLastUpdate();
|
|
463
|
+
const cacheValid = lastUpdate && Date.now() - lastUpdate <= this.cacheTTL;
|
|
464
|
+
if (cacheValid) {
|
|
465
|
+
return cachedModels;
|
|
466
|
+
}
|
|
467
|
+
}
|
|
458
468
|
const DEFAULT_RELAYS = [
|
|
459
469
|
"wss://relay.primal.net",
|
|
460
470
|
"wss://nos.lol",
|
|
@@ -468,7 +478,9 @@ var ModelManager = class _ModelManager {
|
|
|
468
478
|
kinds: [38423],
|
|
469
479
|
"#d": ["routstr-21-models"],
|
|
470
480
|
limit: 1,
|
|
471
|
-
authors: [
|
|
481
|
+
authors: [
|
|
482
|
+
"4ad6fa2d16e2a9b576c863b4cf7404a70d4dc320c0c447d10ad6ff58993eacc8"
|
|
483
|
+
]
|
|
472
484
|
}).pipe(
|
|
473
485
|
applesauceRelay.onlyEvents(),
|
|
474
486
|
rxjs.tap((event2) => {
|
|
@@ -485,20 +497,21 @@ var ModelManager = class _ModelManager {
|
|
|
485
497
|
});
|
|
486
498
|
const timeline = localEventStore.getTimeline({ kinds: [38423] });
|
|
487
499
|
if (timeline.length === 0) {
|
|
488
|
-
return [];
|
|
500
|
+
return cachedModels.length > 0 ? cachedModels : [];
|
|
489
501
|
}
|
|
490
502
|
const event = timeline[0];
|
|
491
503
|
try {
|
|
492
504
|
const content = JSON.parse(event.content);
|
|
493
505
|
const models = Array.isArray(content?.models) ? content.models : [];
|
|
494
506
|
this.adapter.setRoutstr21Models(models);
|
|
507
|
+
this.adapter.setRoutstr21ModelsLastUpdate(Date.now());
|
|
495
508
|
return models;
|
|
496
509
|
} catch {
|
|
497
510
|
console.warn(
|
|
498
511
|
"[Routstr21Models] Failed to parse Nostr event content:",
|
|
499
512
|
event.id
|
|
500
513
|
);
|
|
501
|
-
return [];
|
|
514
|
+
return cachedModels.length > 0 ? cachedModels : [];
|
|
502
515
|
}
|
|
503
516
|
}
|
|
504
517
|
};
|
|
@@ -2726,22 +2739,31 @@ var RoutstrClient = class {
|
|
|
2726
2739
|
try {
|
|
2727
2740
|
const url = `${baseUrl.replace(/\/$/, "")}${path}`;
|
|
2728
2741
|
if (this.mode === "xcashu") this._log("DEBUG", "HEADERS,", headers);
|
|
2742
|
+
this._log("DEBUG", "HEADERS,", headers);
|
|
2729
2743
|
const response = await fetch(url, {
|
|
2730
2744
|
method,
|
|
2731
2745
|
headers,
|
|
2732
2746
|
body: body === void 0 || method === "GET" ? void 0 : JSON.stringify(body)
|
|
2733
2747
|
});
|
|
2734
2748
|
if (this.mode === "xcashu") this._log("DEBUG", "response,", response);
|
|
2749
|
+
this._log("DEBUG", "response,", response);
|
|
2735
2750
|
response.baseUrl = baseUrl;
|
|
2736
2751
|
response.token = token;
|
|
2737
2752
|
if (!response.ok) {
|
|
2738
2753
|
const requestId = response.headers.get("x-routstr-request-id") || void 0;
|
|
2754
|
+
let bodyText;
|
|
2755
|
+
try {
|
|
2756
|
+
bodyText = await response.text();
|
|
2757
|
+
} catch (e) {
|
|
2758
|
+
bodyText = void 0;
|
|
2759
|
+
}
|
|
2739
2760
|
return await this._handleErrorResponse(
|
|
2740
2761
|
params,
|
|
2741
2762
|
token,
|
|
2742
2763
|
response.status,
|
|
2743
2764
|
requestId,
|
|
2744
|
-
this.mode === "xcashu" ? response.headers.get("x-cashu") ?? void 0 : void 0
|
|
2765
|
+
this.mode === "xcashu" ? response.headers.get("x-cashu") ?? void 0 : void 0,
|
|
2766
|
+
bodyText
|
|
2745
2767
|
);
|
|
2746
2768
|
}
|
|
2747
2769
|
return response;
|
|
@@ -2760,7 +2782,7 @@ var RoutstrClient = class {
|
|
|
2760
2782
|
/**
|
|
2761
2783
|
* Handle error responses with failover
|
|
2762
2784
|
*/
|
|
2763
|
-
async _handleErrorResponse(params, token, status, requestId, xCashuRefundToken) {
|
|
2785
|
+
async _handleErrorResponse(params, token, status, requestId, xCashuRefundToken, responseBody) {
|
|
2764
2786
|
const { path, method, body, selectedModel, baseUrl, mintUrl } = params;
|
|
2765
2787
|
let tryNextProvider = false;
|
|
2766
2788
|
this._log(
|
|
@@ -2830,7 +2852,8 @@ var RoutstrClient = class {
|
|
|
2830
2852
|
);
|
|
2831
2853
|
}
|
|
2832
2854
|
}
|
|
2833
|
-
if (status === 402 && !tryNextProvider && (this.mode === "apikeys" || this.mode === "lazyrefund")) {
|
|
2855
|
+
if ((status === 402 || status === 413 && responseBody?.includes("Insufficient balance")) && !tryNextProvider && (this.mode === "apikeys" || this.mode === "lazyrefund")) {
|
|
2856
|
+
console.log("RESPONSFE ", responseBody);
|
|
2834
2857
|
const topupResult = await this.balanceManager.topUp({
|
|
2835
2858
|
mintUrl,
|
|
2836
2859
|
baseUrl,
|
|
@@ -3614,6 +3637,7 @@ var SDK_STORAGE_KEYS = {
|
|
|
3614
3637
|
API_KEYS: "api_keys",
|
|
3615
3638
|
CHILD_KEYS: "child_keys",
|
|
3616
3639
|
ROUTSTR21_MODELS: "routstr21Models",
|
|
3640
|
+
LAST_ROUTSTR21_MODELS_UPDATE: "lastRoutstr21ModelsUpdate",
|
|
3617
3641
|
CACHED_RECEIVE_TOKENS: "cached_receive_tokens"
|
|
3618
3642
|
};
|
|
3619
3643
|
|
|
@@ -3648,6 +3672,7 @@ var createSdkStore = async ({
|
|
|
3648
3672
|
rawApiKeys,
|
|
3649
3673
|
rawChildKeys,
|
|
3650
3674
|
rawRoutstr21Models,
|
|
3675
|
+
rawLastRoutstr21ModelsUpdate,
|
|
3651
3676
|
rawCachedReceiveTokens
|
|
3652
3677
|
] = await Promise.all([
|
|
3653
3678
|
driver.getItem(
|
|
@@ -3674,6 +3699,10 @@ var createSdkStore = async ({
|
|
|
3674
3699
|
driver.getItem(SDK_STORAGE_KEYS.API_KEYS, []),
|
|
3675
3700
|
driver.getItem(SDK_STORAGE_KEYS.CHILD_KEYS, []),
|
|
3676
3701
|
driver.getItem(SDK_STORAGE_KEYS.ROUTSTR21_MODELS, []),
|
|
3702
|
+
driver.getItem(
|
|
3703
|
+
SDK_STORAGE_KEYS.LAST_ROUTSTR21_MODELS_UPDATE,
|
|
3704
|
+
null
|
|
3705
|
+
),
|
|
3677
3706
|
driver.getItem(SDK_STORAGE_KEYS.CACHED_RECEIVE_TOKENS, [])
|
|
3678
3707
|
]);
|
|
3679
3708
|
const modelsFromAllProviders = Object.fromEntries(
|
|
@@ -3725,7 +3754,8 @@ var createSdkStore = async ({
|
|
|
3725
3754
|
createdAt: entry.createdAt ?? Date.now()
|
|
3726
3755
|
}));
|
|
3727
3756
|
const routstr21Models = rawRoutstr21Models;
|
|
3728
|
-
const
|
|
3757
|
+
const lastRoutstr21ModelsUpdate = rawLastRoutstr21ModelsUpdate;
|
|
3758
|
+
const cachedReceiveTokens = rawCachedReceiveTokens?.map((entry) => ({
|
|
3729
3759
|
token: entry.token,
|
|
3730
3760
|
amount: entry.amount,
|
|
3731
3761
|
unit: entry.unit || "sat",
|
|
@@ -3744,6 +3774,7 @@ var createSdkStore = async ({
|
|
|
3744
3774
|
apiKeys,
|
|
3745
3775
|
childKeys,
|
|
3746
3776
|
routstr21Models,
|
|
3777
|
+
lastRoutstr21ModelsUpdate,
|
|
3747
3778
|
cachedReceiveTokens,
|
|
3748
3779
|
setModelsFromAllProviders: (value) => {
|
|
3749
3780
|
const normalized = {};
|
|
@@ -3848,6 +3879,10 @@ var createSdkStore = async ({
|
|
|
3848
3879
|
void driver.setItem(SDK_STORAGE_KEYS.ROUTSTR21_MODELS, value);
|
|
3849
3880
|
set({ routstr21Models: value });
|
|
3850
3881
|
},
|
|
3882
|
+
setRoutstr21ModelsLastUpdate: (value) => {
|
|
3883
|
+
void driver.setItem(SDK_STORAGE_KEYS.LAST_ROUTSTR21_MODELS_UPDATE, value);
|
|
3884
|
+
set({ lastRoutstr21ModelsUpdate: value });
|
|
3885
|
+
},
|
|
3851
3886
|
setCachedReceiveTokens: (value) => {
|
|
3852
3887
|
const normalized = value.map((entry) => ({
|
|
3853
3888
|
token: entry.token,
|
|
@@ -3886,7 +3921,9 @@ var createDiscoveryAdapterFromStore = (store) => ({
|
|
|
3886
3921
|
getBaseUrlsLastUpdate: () => store.getState().lastBaseUrlsUpdate,
|
|
3887
3922
|
setBaseUrlsLastUpdate: (timestamp) => store.getState().setBaseUrlsLastUpdate(timestamp),
|
|
3888
3923
|
getRoutstr21Models: () => store.getState().routstr21Models,
|
|
3889
|
-
setRoutstr21Models: (models) => store.getState().setRoutstr21Models(models)
|
|
3924
|
+
setRoutstr21Models: (models) => store.getState().setRoutstr21Models(models),
|
|
3925
|
+
getRoutstr21ModelsLastUpdate: () => store.getState().lastRoutstr21ModelsUpdate,
|
|
3926
|
+
setRoutstr21ModelsLastUpdate: (timestamp) => store.getState().setRoutstr21ModelsLastUpdate(timestamp)
|
|
3890
3927
|
});
|
|
3891
3928
|
var createStorageAdapterFromStore = (store) => ({
|
|
3892
3929
|
getToken: (baseUrl) => {
|
|
@@ -4181,7 +4218,8 @@ async function routeRequests(options) {
|
|
|
4181
4218
|
includeProviderUrls = [],
|
|
4182
4219
|
torMode = false,
|
|
4183
4220
|
forceRefresh = false,
|
|
4184
|
-
modelManager: providedModelManager
|
|
4221
|
+
modelManager: providedModelManager,
|
|
4222
|
+
debugLevel
|
|
4185
4223
|
} = options;
|
|
4186
4224
|
let modelManager;
|
|
4187
4225
|
let providers;
|
|
@@ -4248,6 +4286,9 @@ async function routeRequests(options) {
|
|
|
4248
4286
|
alertLevel,
|
|
4249
4287
|
"apikeys"
|
|
4250
4288
|
);
|
|
4289
|
+
if (debugLevel) {
|
|
4290
|
+
client.setDebugLevel(debugLevel);
|
|
4291
|
+
}
|
|
4251
4292
|
const maxTokens = extractMaxTokens(requestBody);
|
|
4252
4293
|
const stream = extractStream(requestBody);
|
|
4253
4294
|
let response = null;
|