@xbg.solutions/bpsk-utils-api-client 1.2.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.
Files changed (49) hide show
  1. package/lib/index.d.ts +10 -0
  2. package/lib/index.d.ts.map +1 -0
  3. package/lib/index.js +14 -0
  4. package/lib/index.js.map +1 -0
  5. package/lib/services/api/api.service.d.ts +67 -0
  6. package/lib/services/api/api.service.d.ts.map +1 -0
  7. package/lib/services/api/api.service.js +344 -0
  8. package/lib/services/api/api.service.js.map +1 -0
  9. package/lib/services/api/index.d.ts +13 -0
  10. package/lib/services/api/index.d.ts.map +1 -0
  11. package/lib/services/api/index.js +15 -0
  12. package/lib/services/api/index.js.map +1 -0
  13. package/lib/services/api/request-handler.d.ts +17 -0
  14. package/lib/services/api/request-handler.d.ts.map +1 -0
  15. package/lib/services/api/request-handler.js +289 -0
  16. package/lib/services/api/request-handler.js.map +1 -0
  17. package/lib/services/api/response-handler.d.ts +16 -0
  18. package/lib/services/api/response-handler.d.ts.map +1 -0
  19. package/lib/services/api/response-handler.js +254 -0
  20. package/lib/services/api/response-handler.js.map +1 -0
  21. package/lib/services/caching/api-cache.service.d.ts +97 -0
  22. package/lib/services/caching/api-cache.service.d.ts.map +1 -0
  23. package/lib/services/caching/api-cache.service.js +294 -0
  24. package/lib/services/caching/api-cache.service.js.map +1 -0
  25. package/lib/services/caching/cache.service.d.ts +86 -0
  26. package/lib/services/caching/cache.service.d.ts.map +1 -0
  27. package/lib/services/caching/cache.service.js +519 -0
  28. package/lib/services/caching/cache.service.js.map +1 -0
  29. package/lib/services/caching/index.d.ts +5 -0
  30. package/lib/services/caching/index.d.ts.map +1 -0
  31. package/lib/services/caching/index.js +3 -0
  32. package/lib/services/caching/index.js.map +1 -0
  33. package/lib/stores/api.service.d.ts +6 -0
  34. package/lib/stores/api.service.d.ts.map +1 -0
  35. package/lib/stores/api.service.js +6 -0
  36. package/lib/stores/api.service.js.map +1 -0
  37. package/lib/stores/request-handler.d.ts +6 -0
  38. package/lib/stores/request-handler.d.ts.map +1 -0
  39. package/lib/stores/request-handler.js +6 -0
  40. package/lib/stores/request-handler.js.map +1 -0
  41. package/lib/stores/response-handler.d.ts +6 -0
  42. package/lib/stores/response-handler.d.ts.map +1 -0
  43. package/lib/stores/response-handler.js +6 -0
  44. package/lib/stores/response-handler.js.map +1 -0
  45. package/lib/utils/cache-helpers.d.ts +112 -0
  46. package/lib/utils/cache-helpers.d.ts.map +1 -0
  47. package/lib/utils/cache-helpers.js +302 -0
  48. package/lib/utils/cache-helpers.js.map +1 -0
  49. package/package.json +27 -0
@@ -0,0 +1,519 @@
1
+ /**
2
+ * Caching Service
3
+ *
4
+ * Provides multiple levels of caching: memory, localStorage, sessionStorage,
5
+ * and IndexedDB for different use cases and data sizes.
6
+ */
7
+ import { writable } from 'svelte/store';
8
+ import { loggerService } from '@xbg.solutions/bpsk-core';
9
+ /**
10
+ * Memory cache storage
11
+ */
12
+ class MemoryCacheStorage {
13
+ constructor(maxSize = 100) {
14
+ this.cache = new Map();
15
+ this.maxSize = maxSize;
16
+ }
17
+ async get(key) {
18
+ const item = this.cache.get(key);
19
+ return item ? item : null;
20
+ }
21
+ async set(key, item) {
22
+ // Implement LRU eviction
23
+ if (this.cache.size >= this.maxSize && !this.cache.has(key)) {
24
+ const firstKey = this.cache.keys().next().value;
25
+ if (firstKey) {
26
+ this.cache.delete(firstKey);
27
+ }
28
+ }
29
+ this.cache.set(key, item);
30
+ }
31
+ async delete(key) {
32
+ this.cache.delete(key);
33
+ }
34
+ async clear() {
35
+ this.cache.clear();
36
+ }
37
+ async keys() {
38
+ return Array.from(this.cache.keys());
39
+ }
40
+ async size() {
41
+ return this.cache.size;
42
+ }
43
+ }
44
+ /**
45
+ * LocalStorage cache storage
46
+ */
47
+ class LocalStorageCacheStorage {
48
+ constructor() {
49
+ this.prefix = 'cache:';
50
+ }
51
+ async get(key) {
52
+ if (typeof window === 'undefined')
53
+ return null;
54
+ try {
55
+ const value = localStorage.getItem(this.prefix + key);
56
+ return value ? JSON.parse(value) : null;
57
+ }
58
+ catch {
59
+ return null;
60
+ }
61
+ }
62
+ async set(key, item) {
63
+ if (typeof window === 'undefined')
64
+ return;
65
+ try {
66
+ localStorage.setItem(this.prefix + key, JSON.stringify(item));
67
+ }
68
+ catch (error) {
69
+ // Handle quota exceeded error
70
+ if (error instanceof DOMException && error.code === 22) {
71
+ await this.cleanup();
72
+ try {
73
+ localStorage.setItem(this.prefix + key, JSON.stringify(item));
74
+ }
75
+ catch {
76
+ // Still can't save, give up
77
+ }
78
+ }
79
+ }
80
+ }
81
+ async delete(key) {
82
+ if (typeof window === 'undefined')
83
+ return;
84
+ localStorage.removeItem(this.prefix + key);
85
+ }
86
+ async clear() {
87
+ if (typeof window === 'undefined')
88
+ return;
89
+ const keys = await this.keys();
90
+ keys.forEach(key => localStorage.removeItem(this.prefix + key));
91
+ }
92
+ async keys() {
93
+ if (typeof window === 'undefined')
94
+ return [];
95
+ const keys = [];
96
+ for (let i = 0; i < localStorage.length; i++) {
97
+ const key = localStorage.key(i);
98
+ if (key?.startsWith(this.prefix)) {
99
+ keys.push(key.substring(this.prefix.length));
100
+ }
101
+ }
102
+ return keys;
103
+ }
104
+ async size() {
105
+ return (await this.keys()).length;
106
+ }
107
+ async cleanup() {
108
+ const keys = await this.keys();
109
+ const items = [];
110
+ // Get all items with their expiration times
111
+ for (const key of keys) {
112
+ const item = await this.get(key);
113
+ if (item) {
114
+ items.push({ key, item });
115
+ }
116
+ }
117
+ // Sort by expiration time (oldest first)
118
+ items.sort((a, b) => a.item.expiresAt - b.item.expiresAt);
119
+ // Remove oldest 25% of items
120
+ const removeCount = Math.ceil(items.length * 0.25);
121
+ for (let i = 0; i < removeCount; i++) {
122
+ await this.delete(items[i].key);
123
+ }
124
+ }
125
+ }
126
+ /**
127
+ * SessionStorage cache storage
128
+ */
129
+ class SessionStorageCacheStorage extends LocalStorageCacheStorage {
130
+ constructor() {
131
+ super(...arguments);
132
+ this.prefix = 'session_cache:';
133
+ }
134
+ async get(key) {
135
+ if (typeof window === 'undefined')
136
+ return null;
137
+ try {
138
+ const value = sessionStorage.getItem(this.prefix + key);
139
+ return value ? JSON.parse(value) : null;
140
+ }
141
+ catch {
142
+ return null;
143
+ }
144
+ }
145
+ async set(key, item) {
146
+ if (typeof window === 'undefined')
147
+ return;
148
+ try {
149
+ sessionStorage.setItem(this.prefix + key, JSON.stringify(item));
150
+ }
151
+ catch (error) {
152
+ if (error instanceof DOMException && error.code === 22) {
153
+ await this.cleanup();
154
+ try {
155
+ sessionStorage.setItem(this.prefix + key, JSON.stringify(item));
156
+ }
157
+ catch {
158
+ // Still can't save
159
+ }
160
+ }
161
+ }
162
+ }
163
+ async delete(key) {
164
+ if (typeof window === 'undefined')
165
+ return;
166
+ sessionStorage.removeItem(this.prefix + key);
167
+ }
168
+ async keys() {
169
+ if (typeof window === 'undefined')
170
+ return [];
171
+ const keys = [];
172
+ for (let i = 0; i < sessionStorage.length; i++) {
173
+ const key = sessionStorage.key(i);
174
+ if (key?.startsWith(this.prefix)) {
175
+ keys.push(key.substring(this.prefix.length));
176
+ }
177
+ }
178
+ return keys;
179
+ }
180
+ }
181
+ /**
182
+ * IndexedDB cache storage for large data
183
+ */
184
+ class IndexedDBCacheStorage {
185
+ constructor() {
186
+ this.dbName = 'CacheDB';
187
+ this.version = 1;
188
+ this.storeName = 'cache';
189
+ this.db = null;
190
+ }
191
+ async getDB() {
192
+ if (this.db)
193
+ return this.db;
194
+ return new Promise((resolve, reject) => {
195
+ if (typeof window === 'undefined' || !window.indexedDB) {
196
+ reject(new Error('IndexedDB not available'));
197
+ return;
198
+ }
199
+ const request = indexedDB.open(this.dbName, this.version);
200
+ request.onerror = () => reject(request.error);
201
+ request.onsuccess = () => {
202
+ this.db = request.result;
203
+ resolve(this.db);
204
+ };
205
+ request.onupgradeneeded = () => {
206
+ const db = request.result;
207
+ if (!db.objectStoreNames.contains(this.storeName)) {
208
+ const store = db.createObjectStore(this.storeName, { keyPath: 'key' });
209
+ store.createIndex('expiresAt', 'expiresAt');
210
+ store.createIndex('tags', 'tags', { multiEntry: true });
211
+ }
212
+ };
213
+ });
214
+ }
215
+ async get(key) {
216
+ try {
217
+ const db = await this.getDB();
218
+ const transaction = db.transaction([this.storeName], 'readonly');
219
+ const store = transaction.objectStore(this.storeName);
220
+ return new Promise((resolve, reject) => {
221
+ const request = store.get(key);
222
+ request.onerror = () => reject(request.error);
223
+ request.onsuccess = () => resolve(request.result || null);
224
+ });
225
+ }
226
+ catch {
227
+ return null;
228
+ }
229
+ }
230
+ async set(key, item) {
231
+ try {
232
+ const db = await this.getDB();
233
+ const transaction = db.transaction([this.storeName], 'readwrite');
234
+ const store = transaction.objectStore(this.storeName);
235
+ return new Promise((resolve, reject) => {
236
+ const request = store.put(item);
237
+ request.onerror = () => reject(request.error);
238
+ request.onsuccess = () => resolve();
239
+ });
240
+ }
241
+ catch (error) {
242
+ throw new Error(`Failed to set cache item: ${error}`);
243
+ }
244
+ }
245
+ async delete(key) {
246
+ try {
247
+ const db = await this.getDB();
248
+ const transaction = db.transaction([this.storeName], 'readwrite');
249
+ const store = transaction.objectStore(this.storeName);
250
+ return new Promise((resolve, reject) => {
251
+ const request = store.delete(key);
252
+ request.onerror = () => reject(request.error);
253
+ request.onsuccess = () => resolve();
254
+ });
255
+ }
256
+ catch (error) {
257
+ throw new Error(`Failed to delete cache item: ${error}`);
258
+ }
259
+ }
260
+ async clear() {
261
+ try {
262
+ const db = await this.getDB();
263
+ const transaction = db.transaction([this.storeName], 'readwrite');
264
+ const store = transaction.objectStore(this.storeName);
265
+ return new Promise((resolve, reject) => {
266
+ const request = store.clear();
267
+ request.onerror = () => reject(request.error);
268
+ request.onsuccess = () => resolve();
269
+ });
270
+ }
271
+ catch (error) {
272
+ throw new Error(`Failed to clear cache: ${error}`);
273
+ }
274
+ }
275
+ async keys() {
276
+ try {
277
+ const db = await this.getDB();
278
+ const transaction = db.transaction([this.storeName], 'readonly');
279
+ const store = transaction.objectStore(this.storeName);
280
+ return new Promise((resolve, reject) => {
281
+ const keys = [];
282
+ const request = store.openCursor();
283
+ request.onerror = () => reject(request.error);
284
+ request.onsuccess = () => {
285
+ const cursor = request.result;
286
+ if (cursor) {
287
+ keys.push(cursor.value.key);
288
+ cursor.continue();
289
+ }
290
+ else {
291
+ resolve(keys);
292
+ }
293
+ };
294
+ });
295
+ }
296
+ catch {
297
+ return [];
298
+ }
299
+ }
300
+ async size() {
301
+ return (await this.keys()).length;
302
+ }
303
+ }
304
+ /**
305
+ * Main cache service
306
+ */
307
+ class CacheService {
308
+ constructor() {
309
+ this.storages = new Map();
310
+ this.stats = writable({
311
+ hitCount: 0,
312
+ missCount: 0,
313
+ hitRate: 0,
314
+ itemCount: 0,
315
+ totalSize: 0,
316
+ evictedCount: 0
317
+ });
318
+ this.logger = loggerService.withContext('CacheService');
319
+ this.storages.set('memory', new MemoryCacheStorage());
320
+ this.storages.set('localStorage', new LocalStorageCacheStorage());
321
+ this.storages.set('sessionStorage', new SessionStorageCacheStorage());
322
+ this.storages.set('indexedDB', new IndexedDBCacheStorage());
323
+ // Clean expired items periodically
324
+ if (typeof window !== 'undefined') {
325
+ setInterval(() => this.cleanupExpired(), 5 * 60 * 1000); // Every 5 minutes
326
+ }
327
+ }
328
+ /**
329
+ * Get item from cache
330
+ */
331
+ async get(key, storage = 'memory') {
332
+ const store = this.storages.get(storage);
333
+ if (!store) {
334
+ this.logger.warn(`Storage ${storage} not found`);
335
+ return null;
336
+ }
337
+ try {
338
+ const item = await store.get(key);
339
+ if (!item) {
340
+ this.updateStats('miss');
341
+ return null;
342
+ }
343
+ // Check if expired
344
+ if (Date.now() > item.expiresAt) {
345
+ await store.delete(key);
346
+ this.updateStats('miss');
347
+ return null;
348
+ }
349
+ this.updateStats('hit');
350
+ return item.value;
351
+ }
352
+ catch (error) {
353
+ this.logger.error(`Failed to get cache item: ${key}`, error instanceof Error ? error : undefined);
354
+ this.updateStats('miss');
355
+ return null;
356
+ }
357
+ }
358
+ /**
359
+ * Set item in cache
360
+ */
361
+ async set(key, value, options = {}) {
362
+ const storage = options.storage || 'memory';
363
+ const store = this.storages.get(storage);
364
+ if (!store) {
365
+ this.logger.warn(`Storage ${storage} not found`);
366
+ return;
367
+ }
368
+ const now = Date.now();
369
+ const ttl = options.ttl || (60 * 60 * 1000); // Default 1 hour
370
+ const item = {
371
+ key,
372
+ value,
373
+ expiresAt: now + ttl,
374
+ createdAt: now,
375
+ tags: options.tags,
376
+ size: this.estimateSize(value)
377
+ };
378
+ try {
379
+ await store.set(key, item);
380
+ this.logger.debug(`Cached item: ${key}`, { storage, ttl, size: item.size });
381
+ }
382
+ catch (error) {
383
+ this.logger.error(`Failed to set cache item: ${key}`, error instanceof Error ? error : undefined);
384
+ }
385
+ }
386
+ /**
387
+ * Delete item from cache
388
+ */
389
+ async delete(key, storage = 'memory') {
390
+ const store = this.storages.get(storage);
391
+ if (!store)
392
+ return;
393
+ try {
394
+ await store.delete(key);
395
+ this.logger.debug(`Deleted cache item: ${key}`, { storage });
396
+ }
397
+ catch (error) {
398
+ this.logger.error(`Failed to delete cache item: ${key}`, error instanceof Error ? error : undefined);
399
+ }
400
+ }
401
+ /**
402
+ * Clear all items from cache
403
+ */
404
+ async clear(storage = 'memory') {
405
+ const store = this.storages.get(storage);
406
+ if (!store)
407
+ return;
408
+ try {
409
+ await store.clear();
410
+ this.logger.info(`Cleared cache storage: ${storage}`);
411
+ }
412
+ catch (error) {
413
+ this.logger.error(`Failed to clear cache: ${storage}`, error instanceof Error ? error : undefined);
414
+ }
415
+ }
416
+ /**
417
+ * Get or set cached value
418
+ */
419
+ async getOrSet(key, factory, options = {}) {
420
+ const cached = await this.get(key, options.storage);
421
+ if (cached !== null) {
422
+ return cached;
423
+ }
424
+ const value = await factory();
425
+ await this.set(key, value, options);
426
+ return value;
427
+ }
428
+ /**
429
+ * Invalidate cache by tags
430
+ */
431
+ async invalidateByTags(tags, storage = 'memory') {
432
+ const store = this.storages.get(storage);
433
+ if (!store)
434
+ return;
435
+ try {
436
+ const keys = await store.keys();
437
+ const toDelete = [];
438
+ for (const key of keys) {
439
+ const item = await store.get(key);
440
+ if (item?.tags && item.tags.some(tag => tags.includes(tag))) {
441
+ toDelete.push(key);
442
+ }
443
+ }
444
+ await Promise.all(toDelete.map(key => store.delete(key)));
445
+ this.logger.info(`Invalidated ${toDelete.length} items by tags`, { tags, storage });
446
+ }
447
+ catch (error) {
448
+ this.logger.error(`Failed to invalidate by tags`, error instanceof Error ? error : undefined);
449
+ }
450
+ }
451
+ /**
452
+ * Clean up expired items
453
+ */
454
+ async cleanupExpired() {
455
+ const now = Date.now();
456
+ let totalCleaned = 0;
457
+ for (const [storageName, store] of this.storages) {
458
+ try {
459
+ const keys = await store.keys();
460
+ const toDelete = [];
461
+ for (const key of keys) {
462
+ const item = await store.get(key);
463
+ if (item && now > item.expiresAt) {
464
+ toDelete.push(key);
465
+ }
466
+ }
467
+ await Promise.all(toDelete.map(key => store.delete(key)));
468
+ totalCleaned += toDelete.length;
469
+ }
470
+ catch (error) {
471
+ this.logger.error(`Failed to cleanup expired items in ${storageName}`, error instanceof Error ? error : undefined);
472
+ }
473
+ }
474
+ if (totalCleaned > 0) {
475
+ this.logger.info(`Cleaned up ${totalCleaned} expired cache items`);
476
+ }
477
+ }
478
+ /**
479
+ * Get all keys from a specific storage
480
+ */
481
+ async keys(storage = 'memory') {
482
+ const store = this.storages.get(storage);
483
+ if (!store)
484
+ return [];
485
+ return store.keys();
486
+ }
487
+ /**
488
+ * Get cache statistics
489
+ */
490
+ getStats() {
491
+ return this.stats;
492
+ }
493
+ /**
494
+ * Estimate object size in bytes
495
+ */
496
+ estimateSize(value) {
497
+ const str = JSON.stringify(value);
498
+ return new Blob([str]).size;
499
+ }
500
+ /**
501
+ * Update cache statistics
502
+ */
503
+ updateStats(type) {
504
+ this.stats.update(stats => {
505
+ if (type === 'hit') {
506
+ stats.hitCount++;
507
+ }
508
+ else {
509
+ stats.missCount++;
510
+ }
511
+ const total = stats.hitCount + stats.missCount;
512
+ stats.hitRate = total > 0 ? (stats.hitCount / total) * 100 : 0;
513
+ return stats;
514
+ });
515
+ }
516
+ }
517
+ // Export singleton instance
518
+ export const cacheService = new CacheService();
519
+ //# sourceMappingURL=cache.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache.service.js","sourceRoot":"","sources":["../../../src/services/caching/cache.service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ export { cacheService } from './cache.service';
2
+ export { apiCacheService } from './api-cache.service';
3
+ export type { CacheItem, CacheOptions, CacheStats } from './cache.service';
4
+ export type { APIResponse, APICacheOptions } from './api-cache.service';
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/services/caching/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAEtD,YAAY,EACV,SAAS,EACT,YAAY,EACZ,UAAU,EACX,MAAM,iBAAiB,CAAC;AAEzB,YAAY,EACV,WAAW,EACX,eAAe,EAChB,MAAM,qBAAqB,CAAC"}
@@ -0,0 +1,3 @@
1
+ export { cacheService } from './cache.service';
2
+ export { apiCacheService } from './api-cache.service';
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/services/caching/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC"}
@@ -0,0 +1,6 @@
1
+ export interface ApiServiceState {
2
+ isOnline: boolean;
3
+ requestCount: number;
4
+ }
5
+ export declare const apiServiceStore: import("svelte/store").Writable<ApiServiceState>;
6
+ //# sourceMappingURL=api.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api.service.d.ts","sourceRoot":"","sources":["../../src/stores/api.service.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,OAAO,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,eAAO,MAAM,eAAe,kDAG1B,CAAC"}
@@ -0,0 +1,6 @@
1
+ import { writable } from 'svelte/store';
2
+ export const apiServiceStore = writable({
3
+ isOnline: true,
4
+ requestCount: 0
5
+ });
6
+ //# sourceMappingURL=api.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api.service.js","sourceRoot":"","sources":["../../src/stores/api.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAOxC,MAAM,CAAC,MAAM,eAAe,GAAG,QAAQ,CAAkB;IACvD,QAAQ,EAAE,IAAI;IACd,YAAY,EAAE,CAAC;CAChB,CAAC,CAAC"}
@@ -0,0 +1,6 @@
1
+ export interface RequestHandlerState {
2
+ requestCount: number;
3
+ activeRequests: string[];
4
+ }
5
+ export declare const requestHandlerStore: import("svelte/store").Writable<RequestHandlerState>;
6
+ //# sourceMappingURL=request-handler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"request-handler.d.ts","sourceRoot":"","sources":["../../src/stores/request-handler.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,mBAAmB;IAClC,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,EAAE,CAAC;CAC1B;AAED,eAAO,MAAM,mBAAmB,sDAG9B,CAAC"}
@@ -0,0 +1,6 @@
1
+ import { writable } from 'svelte/store';
2
+ export const requestHandlerStore = writable({
3
+ requestCount: 0,
4
+ activeRequests: []
5
+ });
6
+ //# sourceMappingURL=request-handler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"request-handler.js","sourceRoot":"","sources":["../../src/stores/request-handler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAOxC,MAAM,CAAC,MAAM,mBAAmB,GAAG,QAAQ,CAAsB;IAC/D,YAAY,EAAE,CAAC;IACf,cAAc,EAAE,EAAE;CACnB,CAAC,CAAC"}
@@ -0,0 +1,6 @@
1
+ export interface ResponseHandlerState {
2
+ responseCount: number;
3
+ errors: string[];
4
+ }
5
+ export declare const responseHandlerStore: import("svelte/store").Writable<ResponseHandlerState>;
6
+ //# sourceMappingURL=response-handler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"response-handler.d.ts","sourceRoot":"","sources":["../../src/stores/response-handler.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,oBAAoB;IACnC,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,eAAO,MAAM,oBAAoB,uDAG/B,CAAC"}
@@ -0,0 +1,6 @@
1
+ import { writable } from 'svelte/store';
2
+ export const responseHandlerStore = writable({
3
+ responseCount: 0,
4
+ errors: []
5
+ });
6
+ //# sourceMappingURL=response-handler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"response-handler.js","sourceRoot":"","sources":["../../src/stores/response-handler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAOxC,MAAM,CAAC,MAAM,oBAAoB,GAAG,QAAQ,CAAuB;IACjE,aAAa,EAAE,CAAC;IAChB,MAAM,EAAE,EAAE;CACX,CAAC,CAAC"}