@routstr/sdk 0.2.6 → 0.2.7

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.
@@ -353,7 +353,10 @@ var SDK_STORAGE_KEYS = {
353
353
  LAST_ROUTSTR21_MODELS_UPDATE: "lastRoutstr21ModelsUpdate",
354
354
  CACHED_RECEIVE_TOKENS: "cached_receive_tokens",
355
355
  USAGE_TRACKING: "usage_tracking",
356
- CLIENT_IDS: "client_ids"
356
+ CLIENT_IDS: "client_ids",
357
+ FAILED_PROVIDERS: "failed_providers",
358
+ LAST_FAILED: "last_failed",
359
+ PROVIDERS_ON_COOLDOWN: "providers_on_cooldown"
357
360
  };
358
361
 
359
362
  // storage/usageTracking/indexedDB.ts
@@ -1000,6 +1003,9 @@ var createEmptyStore = (driver) => createStore((set, get) => ({
1000
1003
  lastRoutstr21ModelsUpdate: null,
1001
1004
  cachedReceiveTokens: [],
1002
1005
  clientIds: [],
1006
+ failedProviders: [],
1007
+ lastFailed: {},
1008
+ providersOnCooldown: [],
1003
1009
  setModelsFromAllProviders: (value) => {
1004
1010
  const normalized = {};
1005
1011
  for (const [baseUrl, models] of Object.entries(value)) {
@@ -1139,6 +1145,71 @@ var createEmptyStore = (driver) => createStore((set, get) => ({
1139
1145
  void driver.setItem(SDK_STORAGE_KEYS.CLIENT_IDS, normalized);
1140
1146
  return { clientIds: normalized };
1141
1147
  });
1148
+ },
1149
+ // ========== Failure Tracking ==========
1150
+ setFailedProviders: (value) => {
1151
+ const normalized = value.map((url) => normalizeBaseUrl5(url));
1152
+ void driver.setItem(SDK_STORAGE_KEYS.FAILED_PROVIDERS, normalized);
1153
+ set({ failedProviders: normalized });
1154
+ },
1155
+ addFailedProvider: (baseUrl) => {
1156
+ const normalized = normalizeBaseUrl5(baseUrl);
1157
+ const current = get().failedProviders;
1158
+ if (!current.includes(normalized)) {
1159
+ const updated = [...current, normalized];
1160
+ void driver.setItem(SDK_STORAGE_KEYS.FAILED_PROVIDERS, updated);
1161
+ set({ failedProviders: updated });
1162
+ }
1163
+ },
1164
+ removeFailedProvider: (baseUrl) => {
1165
+ const normalized = normalizeBaseUrl5(baseUrl);
1166
+ const current = get().failedProviders;
1167
+ const updated = current.filter((url) => url !== normalized);
1168
+ void driver.setItem(SDK_STORAGE_KEYS.FAILED_PROVIDERS, updated);
1169
+ set({ failedProviders: updated });
1170
+ },
1171
+ setLastFailed: (value) => {
1172
+ const normalized = {};
1173
+ for (const [baseUrl, timestamp] of Object.entries(value)) {
1174
+ normalized[normalizeBaseUrl5(baseUrl)] = timestamp;
1175
+ }
1176
+ void driver.setItem(SDK_STORAGE_KEYS.LAST_FAILED, normalized);
1177
+ set({ lastFailed: normalized });
1178
+ },
1179
+ setLastFailedTimestamp: (baseUrl, timestamp) => {
1180
+ const normalized = normalizeBaseUrl5(baseUrl);
1181
+ const current = get().lastFailed;
1182
+ const updated = { ...current, [normalized]: timestamp };
1183
+ void driver.setItem(SDK_STORAGE_KEYS.LAST_FAILED, updated);
1184
+ set({ lastFailed: updated });
1185
+ },
1186
+ setProvidersOnCooldown: (value) => {
1187
+ const normalized = value.map((entry) => ({
1188
+ baseUrl: normalizeBaseUrl5(entry.baseUrl),
1189
+ timestamp: entry.timestamp
1190
+ }));
1191
+ void driver.setItem(SDK_STORAGE_KEYS.PROVIDERS_ON_COOLDOWN, normalized);
1192
+ set({ providersOnCooldown: normalized });
1193
+ },
1194
+ addProviderOnCooldown: (baseUrl, timestamp) => {
1195
+ const normalized = normalizeBaseUrl5(baseUrl);
1196
+ const current = get().providersOnCooldown;
1197
+ if (!current.some((entry) => entry.baseUrl === normalized)) {
1198
+ const updated = [...current, { baseUrl: normalized, timestamp }];
1199
+ void driver.setItem(SDK_STORAGE_KEYS.PROVIDERS_ON_COOLDOWN, updated);
1200
+ set({ providersOnCooldown: updated });
1201
+ }
1202
+ },
1203
+ removeProviderFromCooldown: (baseUrl) => {
1204
+ const normalized = normalizeBaseUrl5(baseUrl);
1205
+ const current = get().providersOnCooldown;
1206
+ const updated = current.filter((entry) => entry.baseUrl !== normalized);
1207
+ void driver.setItem(SDK_STORAGE_KEYS.PROVIDERS_ON_COOLDOWN, updated);
1208
+ set({ providersOnCooldown: updated });
1209
+ },
1210
+ clearProvidersOnCooldown: () => {
1211
+ void driver.setItem(SDK_STORAGE_KEYS.PROVIDERS_ON_COOLDOWN, []);
1212
+ set({ providersOnCooldown: [] });
1142
1213
  }
1143
1214
  }));
1144
1215
  var hydrateStoreFromDriver = async (store, driver) => {
@@ -1157,7 +1228,10 @@ var hydrateStoreFromDriver = async (store, driver) => {
1157
1228
  rawRoutstr21Models,
1158
1229
  rawLastRoutstr21ModelsUpdate,
1159
1230
  rawCachedReceiveTokens,
1160
- rawClientIds
1231
+ rawClientIds,
1232
+ rawFailedProviders,
1233
+ rawLastFailed,
1234
+ rawProvidersOnCooldown
1161
1235
  ] = await Promise.all([
1162
1236
  driver.getItem(
1163
1237
  SDK_STORAGE_KEYS.MODELS_FROM_ALL_PROVIDERS,
@@ -1188,7 +1262,10 @@ var hydrateStoreFromDriver = async (store, driver) => {
1188
1262
  null
1189
1263
  ),
1190
1264
  driver.getItem(SDK_STORAGE_KEYS.CACHED_RECEIVE_TOKENS, []),
1191
- driver.getItem(SDK_STORAGE_KEYS.CLIENT_IDS, [])
1265
+ driver.getItem(SDK_STORAGE_KEYS.CLIENT_IDS, []),
1266
+ driver.getItem(SDK_STORAGE_KEYS.FAILED_PROVIDERS, []),
1267
+ driver.getItem(SDK_STORAGE_KEYS.LAST_FAILED, {}),
1268
+ driver.getItem(SDK_STORAGE_KEYS.PROVIDERS_ON_COOLDOWN, [])
1192
1269
  ]);
1193
1270
  const modelsFromAllProviders = Object.fromEntries(
1194
1271
  Object.entries(rawModels).map(([baseUrl, models]) => [
@@ -1256,6 +1333,17 @@ var hydrateStoreFromDriver = async (store, driver) => {
1256
1333
  createdAt: entry.createdAt ?? Date.now(),
1257
1334
  lastUsed: entry.lastUsed ?? null
1258
1335
  }));
1336
+ const failedProviders = rawFailedProviders.map((url) => normalizeBaseUrl5(url));
1337
+ const lastFailed = Object.fromEntries(
1338
+ Object.entries(rawLastFailed).map(([baseUrl, timestamp]) => [
1339
+ normalizeBaseUrl5(baseUrl),
1340
+ timestamp
1341
+ ])
1342
+ );
1343
+ const providersOnCooldown = rawProvidersOnCooldown.map((entry) => ({
1344
+ baseUrl: normalizeBaseUrl5(entry.baseUrl),
1345
+ timestamp: entry.timestamp
1346
+ }));
1259
1347
  store.setState({
1260
1348
  modelsFromAllProviders,
1261
1349
  lastUsedModel,
@@ -1271,7 +1359,10 @@ var hydrateStoreFromDriver = async (store, driver) => {
1271
1359
  routstr21Models,
1272
1360
  lastRoutstr21ModelsUpdate,
1273
1361
  cachedReceiveTokens,
1274
- clientIds
1362
+ clientIds,
1363
+ failedProviders,
1364
+ lastFailed,
1365
+ providersOnCooldown
1275
1366
  });
1276
1367
  };
1277
1368
  var createSdkStore = ({