@fundedfast/sdk 1.3.0

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 (52) hide show
  1. package/CHANGELOG.md +104 -0
  2. package/README.md +352 -0
  3. package/dist/cjs/client.d.ts +130 -0
  4. package/dist/cjs/client.d.ts.map +1 -0
  5. package/dist/cjs/client.js +362 -0
  6. package/dist/cjs/client.js.map +1 -0
  7. package/dist/cjs/index.d.ts +27 -0
  8. package/dist/cjs/index.d.ts.map +1 -0
  9. package/dist/cjs/index.js +33 -0
  10. package/dist/cjs/index.js.map +1 -0
  11. package/dist/cjs/package.json +1 -0
  12. package/dist/cjs/resources/admin.d.ts +597 -0
  13. package/dist/cjs/resources/admin.d.ts.map +1 -0
  14. package/dist/cjs/resources/admin.js +842 -0
  15. package/dist/cjs/resources/admin.js.map +1 -0
  16. package/dist/cjs/resources/public.d.ts +519 -0
  17. package/dist/cjs/resources/public.d.ts.map +1 -0
  18. package/dist/cjs/resources/public.js +588 -0
  19. package/dist/cjs/resources/public.js.map +1 -0
  20. package/dist/cjs/types.d.ts +651 -0
  21. package/dist/cjs/types.d.ts.map +1 -0
  22. package/dist/cjs/types.js +11 -0
  23. package/dist/cjs/types.js.map +1 -0
  24. package/dist/cjs/webhooks.d.ts +104 -0
  25. package/dist/cjs/webhooks.d.ts.map +1 -0
  26. package/dist/cjs/webhooks.js +199 -0
  27. package/dist/cjs/webhooks.js.map +1 -0
  28. package/dist/esm/client.d.ts +130 -0
  29. package/dist/esm/client.d.ts.map +1 -0
  30. package/dist/esm/client.js +355 -0
  31. package/dist/esm/client.js.map +1 -0
  32. package/dist/esm/index.d.ts +27 -0
  33. package/dist/esm/index.d.ts.map +1 -0
  34. package/dist/esm/index.js +26 -0
  35. package/dist/esm/index.js.map +1 -0
  36. package/dist/esm/resources/admin.d.ts +597 -0
  37. package/dist/esm/resources/admin.d.ts.map +1 -0
  38. package/dist/esm/resources/admin.js +816 -0
  39. package/dist/esm/resources/admin.js.map +1 -0
  40. package/dist/esm/resources/public.d.ts +519 -0
  41. package/dist/esm/resources/public.d.ts.map +1 -0
  42. package/dist/esm/resources/public.js +578 -0
  43. package/dist/esm/resources/public.js.map +1 -0
  44. package/dist/esm/types.d.ts +651 -0
  45. package/dist/esm/types.d.ts.map +1 -0
  46. package/dist/esm/types.js +10 -0
  47. package/dist/esm/types.js.map +1 -0
  48. package/dist/esm/webhooks.d.ts +104 -0
  49. package/dist/esm/webhooks.d.ts.map +1 -0
  50. package/dist/esm/webhooks.js +159 -0
  51. package/dist/esm/webhooks.js.map +1 -0
  52. package/package.json +72 -0
@@ -0,0 +1,362 @@
1
+ "use strict";
2
+ /**
3
+ * @fundedfast/sdk - Client
4
+ *
5
+ * Production-grade HTTP client for the FAST platform API.
6
+ * Features: automatic retries with exponential backoff, rate limit awareness,
7
+ * request/response hooks, idempotency support, debug logging, and proper error handling.
8
+ *
9
+ * @example
10
+ * ```typescript
11
+ * import { FastClient } from '@fundedfast/sdk';
12
+ *
13
+ * const fast = new FastClient({
14
+ * apiKey: process.env.FAST_API_KEY!,
15
+ * retry: { maxRetries: 3 },
16
+ * onResponse: ({ status, durationMs, correlationId }) => {
17
+ * metrics.histogram('fast.request.duration', durationMs, { status });
18
+ * },
19
+ * });
20
+ *
21
+ * const result = await fast.bets.validate({
22
+ * userId: 'player-42',
23
+ * externalBetId: 'BET-001',
24
+ * stakeAmount: 5.00,
25
+ * odds: 2.10,
26
+ * status: 'placed',
27
+ * });
28
+ * ```
29
+ *
30
+ * @module client
31
+ */
32
+ Object.defineProperty(exports, "__esModule", { value: true });
33
+ exports.FastClient = exports.FastNetworkError = exports.FastTimeoutError = exports.FastApiError = exports.SDK_VERSION = void 0;
34
+ const public_js_1 = require("./resources/public.js");
35
+ const admin_js_1 = require("./resources/admin.js");
36
+ // ============================================================================
37
+ // CONSTANTS
38
+ // ============================================================================
39
+ const DEFAULT_BASE_URL = 'https://api.fundedfast.eu/v1';
40
+ const DEFAULT_TIMEOUT = 10_000;
41
+ exports.SDK_VERSION = '1.3.0';
42
+ const USER_AGENT = `fundedfast-sdk/${exports.SDK_VERSION} node/${typeof globalThis !== 'undefined' && 'process' in globalThis ? globalThis.process?.version || 'unknown' : 'unknown'}`;
43
+ const DEFAULT_RETRY = {
44
+ maxRetries: 3,
45
+ initialDelay: 300,
46
+ maxDelay: 10_000,
47
+ retryableStatuses: [429, 500, 502, 503, 504],
48
+ };
49
+ /** The key as it may appear in logs: its prefix and last four characters. */
50
+ function redactKey(key) {
51
+ if (key.length <= 8)
52
+ return '***';
53
+ const prefix = /^[a-z]+[-_]/i.exec(key)?.[0] ?? '';
54
+ return `${prefix}***${key.slice(-4)}`;
55
+ }
56
+ /** Random idempotency key (crypto.randomUUID where available - Node 19+/browsers). */
57
+ function generateIdempotencyKey() {
58
+ const c = globalThis.crypto;
59
+ if (c && typeof c.randomUUID === 'function')
60
+ return c.randomUUID();
61
+ return `sdk-${Date.now().toString(36)}-${Math.random().toString(36).slice(2, 12)}-${Math.random().toString(36).slice(2, 12)}`;
62
+ }
63
+ function sleep(ms) {
64
+ return new Promise(resolve => setTimeout(resolve, ms));
65
+ }
66
+ // ============================================================================
67
+ // ERROR CLASSES
68
+ // ============================================================================
69
+ /**
70
+ * Error thrown when the FAST API returns a non-2xx response.
71
+ *
72
+ * @example
73
+ * ```typescript
74
+ * try {
75
+ * await fast.challenges.purchase({ userId: 'x', challengeTierId: 'invalid' });
76
+ * } catch (err) {
77
+ * if (err instanceof FastApiError) {
78
+ * console.log(err.status); // 400
79
+ * console.log(err.code); // 'validation_error'
80
+ * console.log(err.correlationId); // 'abc-123' (for support)
81
+ * console.log(err.isRetryable); // false
82
+ * }
83
+ * }
84
+ * ```
85
+ */
86
+ class FastApiError extends Error {
87
+ status;
88
+ code;
89
+ correlationId;
90
+ isRetryable;
91
+ rateLimitReset;
92
+ constructor(status, body, rateLimitReset) {
93
+ super(body.message || body.error || `HTTP ${status}`);
94
+ this.name = 'FastApiError';
95
+ this.status = status;
96
+ this.code = body.error || `http_${status}`;
97
+ this.correlationId = body.correlationId || '';
98
+ this.isRetryable = DEFAULT_RETRY.retryableStatuses.includes(status);
99
+ this.rateLimitReset = rateLimitReset;
100
+ }
101
+ }
102
+ exports.FastApiError = FastApiError;
103
+ /**
104
+ * Error thrown when a request times out.
105
+ */
106
+ class FastTimeoutError extends Error {
107
+ timeoutMs;
108
+ constructor(timeoutMs) {
109
+ super(`Request timed out after ${timeoutMs}ms`);
110
+ this.name = 'FastTimeoutError';
111
+ this.timeoutMs = timeoutMs;
112
+ }
113
+ }
114
+ exports.FastTimeoutError = FastTimeoutError;
115
+ /**
116
+ * Error thrown when a network error occurs (DNS, connection refused, etc.)
117
+ */
118
+ class FastNetworkError extends Error {
119
+ cause;
120
+ constructor(cause) {
121
+ super(`Network error: ${cause.message}`);
122
+ this.name = 'FastNetworkError';
123
+ this.cause = cause;
124
+ }
125
+ }
126
+ exports.FastNetworkError = FastNetworkError;
127
+ // ============================================================================
128
+ // CLIENT
129
+ // ============================================================================
130
+ /**
131
+ * FAST Platform API client.
132
+ *
133
+ * Provides typed access to all operator-facing endpoints with automatic retry,
134
+ * rate limit handling, and observability hooks.
135
+ *
136
+ * @example
137
+ * ```typescript
138
+ * const fast = new FastClient({ apiKey: 'key-...' });
139
+ *
140
+ * // Namespaced APIs
141
+ * const tiers = await fast.challenges.listTiers();
142
+ * const result = await fast.bets.validate(betEvent);
143
+ * const progress = await fast.users.getProgress('player-42');
144
+ * ```
145
+ */
146
+ class FastClient {
147
+ baseUrl;
148
+ apiKey;
149
+ timeout;
150
+ retryConfig;
151
+ onRequest;
152
+ onResponse;
153
+ _fetch;
154
+ customHeaders;
155
+ debug;
156
+ /** Challenge purchase and tier management */
157
+ challenges;
158
+ /** Bet validation and ingestion */
159
+ bets;
160
+ /** User progress, history, and withdrawals */
161
+ users;
162
+ /** Bet event reconciliation */
163
+ reconciliation;
164
+ /** Real-time event streaming (SSE) */
165
+ events;
166
+ /** Sandbox operations (staging only) */
167
+ sandbox;
168
+ /** Widget module and branding configuration */
169
+ widget;
170
+ /** Admin / backoffice operations (tenant management) */
171
+ admin;
172
+ constructor(config) {
173
+ if (!config.apiKey) {
174
+ throw new Error('FastClient: apiKey is required');
175
+ }
176
+ // A server key in a page is a server key published to every visitor.
177
+ const inBrowser = typeof globalThis.window !== 'undefined'
178
+ && typeof globalThis.document !== 'undefined';
179
+ if (inBrowser && !config.dangerouslyAllowBrowser && !config.apiKey.startsWith('pk_')) {
180
+ throw new Error('FastClient: refusing to run in a browser with a server API key. Call FAST from your backend, '
181
+ + 'and use the widget (public pk_ key + user token) in the browser. '
182
+ + 'Pass dangerouslyAllowBrowser: true only if you understand the key will be exposed.');
183
+ }
184
+ this.baseUrl = (config.baseUrl || DEFAULT_BASE_URL).replace(/\/$/, '');
185
+ this.apiKey = config.apiKey;
186
+ this.timeout = config.timeout ?? DEFAULT_TIMEOUT;
187
+ this.onRequest = config.onRequest;
188
+ this.onResponse = config.onResponse;
189
+ this._fetch = config.fetch ?? globalThis.fetch.bind(globalThis);
190
+ this.customHeaders = config.headers ?? {};
191
+ this.debug = config.debug ?? false;
192
+ if (config.retry === false) {
193
+ this.retryConfig = null;
194
+ }
195
+ else {
196
+ this.retryConfig = { ...DEFAULT_RETRY, ...(config.retry || {}) };
197
+ }
198
+ this.challenges = new public_js_1.ChallengesApi(this);
199
+ this.bets = new public_js_1.BetsApi(this);
200
+ this.users = new public_js_1.UsersApi(this);
201
+ this.reconciliation = new public_js_1.ReconciliationApi(this);
202
+ this.events = new public_js_1.EventsApi(this);
203
+ this.sandbox = new public_js_1.SandboxApi(this);
204
+ this.widget = new public_js_1.WidgetApi(this);
205
+ this.admin = new admin_js_1.AdminApi(this);
206
+ }
207
+ /**
208
+ * Execute an authenticated request against the FAST API.
209
+ * Handles retries, timeouts, rate limits, and hooks automatically.
210
+ *
211
+ * @internal Use the namespaced APIs (challenges, bets, users, etc.) instead.
212
+ */
213
+ async request(method, path, options) {
214
+ let url = `${this.baseUrl}${path}`;
215
+ if (options?.query) {
216
+ const params = new URLSearchParams();
217
+ for (const [k, v] of Object.entries(options.query)) {
218
+ if (v !== undefined && v !== '')
219
+ params.set(k, v);
220
+ }
221
+ const qs = params.toString();
222
+ if (qs)
223
+ url += `?${qs}`;
224
+ }
225
+ const headers = {
226
+ 'X-API-Key': this.apiKey,
227
+ 'User-Agent': USER_AGENT,
228
+ ...this.customHeaders,
229
+ };
230
+ if (options?.body) {
231
+ headers['Content-Type'] = 'application/json';
232
+ }
233
+ // Money-mutation endpoints (withdraw, refund-stake) REQUIRE X-Idempotency-Key.
234
+ // Auto-generate one per logical request when the caller does not supply one:
235
+ // the same key is reused across the retry loop below, so SDK retries are
236
+ // exactly-once on the server.
237
+ if (method === 'POST') {
238
+ headers['X-Idempotency-Key'] = options?.idempotencyKey || generateIdempotencyKey();
239
+ }
240
+ else if (options?.idempotencyKey) {
241
+ headers['X-Idempotency-Key'] = options.idempotencyKey;
242
+ }
243
+ const bodyStr = options?.body ? JSON.stringify(options.body) : undefined;
244
+ // Hook: onRequest
245
+ if (this.onRequest) {
246
+ // The hook is for logging and tracing; hand it the headers without the
247
+ // key, so a request logger does not write the server key to disk.
248
+ await this.onRequest({ method, url, headers: { ...headers, 'X-API-Key': redactKey(this.apiKey) }, body: bodyStr });
249
+ }
250
+ if (this.debug) {
251
+ console.log(`[fast-sdk] ${method} ${url}`);
252
+ }
253
+ const maxAttempts = this.retryConfig ? this.retryConfig.maxRetries + 1 : 1;
254
+ let lastError = null;
255
+ for (let attempt = 1; attempt <= maxAttempts; attempt++) {
256
+ const start = Date.now();
257
+ try {
258
+ const controller = new AbortController();
259
+ const timer = setTimeout(() => controller.abort(), this.timeout);
260
+ const res = await this._fetch(url, {
261
+ method,
262
+ headers,
263
+ body: bodyStr,
264
+ signal: controller.signal,
265
+ });
266
+ clearTimeout(timer);
267
+ const durationMs = Date.now() - start;
268
+ if (res.ok) {
269
+ const body = await res.json();
270
+ if (this.onResponse) {
271
+ const correlationId = (body && typeof body === 'object' && 'correlationId' in body)
272
+ ? body.correlationId
273
+ : undefined;
274
+ await this.onResponse({
275
+ status: res.status,
276
+ headers: Object.fromEntries(res.headers.entries()),
277
+ body,
278
+ durationMs,
279
+ correlationId,
280
+ });
281
+ }
282
+ if (this.debug) {
283
+ console.log(`[fast-sdk] ${method} ${url} -> ${res.status} (${durationMs}ms)`);
284
+ }
285
+ return body;
286
+ }
287
+ // Non-2xx response
288
+ const errBody = await res.json().catch(() => ({
289
+ error: `http_${res.status}`,
290
+ message: res.statusText,
291
+ correlationId: '',
292
+ }));
293
+ // Rate limit: respect Retry-After header
294
+ const retryAfter = res.headers.get('Retry-After');
295
+ const rateLimitReset = retryAfter ? parseInt(retryAfter, 10) * 1000 : undefined;
296
+ const error = new FastApiError(res.status, errBody, rateLimitReset);
297
+ if (this.onResponse) {
298
+ await this.onResponse({
299
+ status: res.status,
300
+ headers: Object.fromEntries(res.headers.entries()),
301
+ body: errBody,
302
+ durationMs,
303
+ correlationId: errBody.correlationId,
304
+ });
305
+ }
306
+ // Should we retry?
307
+ if (this.retryConfig && attempt < maxAttempts && this.retryConfig.retryableStatuses.includes(res.status)) {
308
+ const delay = this.calculateDelay(attempt, rateLimitReset);
309
+ if (this.debug) {
310
+ console.log(`[fast-sdk] Retrying (${attempt}/${this.retryConfig.maxRetries}) after ${delay}ms...`);
311
+ }
312
+ await sleep(delay);
313
+ lastError = error;
314
+ continue;
315
+ }
316
+ throw error;
317
+ }
318
+ catch (err) {
319
+ if (err instanceof FastApiError)
320
+ throw err;
321
+ if (err instanceof Error && err.name === 'AbortError') {
322
+ const timeoutErr = new FastTimeoutError(this.timeout);
323
+ if (this.retryConfig && attempt < maxAttempts) {
324
+ const delay = this.calculateDelay(attempt);
325
+ if (this.debug) {
326
+ console.log(`[fast-sdk] Timeout, retrying (${attempt}/${this.retryConfig.maxRetries}) after ${delay}ms...`);
327
+ }
328
+ await sleep(delay);
329
+ lastError = timeoutErr;
330
+ continue;
331
+ }
332
+ throw timeoutErr;
333
+ }
334
+ // Network error
335
+ const netErr = new FastNetworkError(err instanceof Error ? err : new Error(String(err)));
336
+ if (this.retryConfig && attempt < maxAttempts) {
337
+ const delay = this.calculateDelay(attempt);
338
+ if (this.debug) {
339
+ console.log(`[fast-sdk] Network error, retrying (${attempt}/${this.retryConfig.maxRetries}) after ${delay}ms...`);
340
+ }
341
+ await sleep(delay);
342
+ lastError = netErr;
343
+ continue;
344
+ }
345
+ throw netErr;
346
+ }
347
+ }
348
+ // Should not reach here, but just in case
349
+ throw lastError || new Error('Request failed after all retry attempts');
350
+ }
351
+ calculateDelay(attempt, rateLimitReset) {
352
+ if (rateLimitReset && rateLimitReset > 0) {
353
+ return Math.min(rateLimitReset, this.retryConfig.maxDelay);
354
+ }
355
+ // Exponential backoff with jitter
356
+ const base = this.retryConfig.initialDelay * Math.pow(2, attempt - 1);
357
+ const jitter = base * 0.2 * Math.random();
358
+ return Math.min(base + jitter, this.retryConfig.maxDelay);
359
+ }
360
+ }
361
+ exports.FastClient = FastClient;
362
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * @fundedfast/sdk
3
+ *
4
+ * Official TypeScript SDK for the FAST platform.
5
+ * Zero dependencies. Works in Node.js 18+, Deno, Bun, and edge runtimes.
6
+ *
7
+ * @example
8
+ * ```typescript
9
+ * import { FastClient } from '@fundedfast/sdk';
10
+ *
11
+ * const fast = new FastClient({ apiKey: process.env.FAST_API_KEY! });
12
+ *
13
+ * // Validate a bet
14
+ * const result = await fast.bets.validate({
15
+ * userId: 'player-42',
16
+ * externalBetId: 'BET-001',
17
+ * stakeAmount: 5.00,
18
+ * odds: 2.10,
19
+ * status: 'placed',
20
+ * });
21
+ * ```
22
+ *
23
+ * @packageDocumentation
24
+ */
25
+ export { FastClient, FastApiError, FastTimeoutError, FastNetworkError } from './client.js';
26
+ export type { FastClientConfig, FastError, RetryConfig, RequestHook, ResponseHook, ChallengeStatus, FailureReason, BetStatus, ValidationStatus, FundedAccountStatus, WebhookDeliveryStatus, RejectionCode, IntegrationMode, WebhookEventType, RewardType, RewardApplyMode, LeaderboardPeriod, PurchaseRequest, BetEvent, WithdrawRequest, Challenge, ChallengeTier, ChallengeTierFull, TierTerms, ValidationResult, BetIngestResult, BatchBetResult, Ruleset, UserProgress, ChallengeProgress, ChallengePassedProgress, FundedAccountProgress, NoProgress, WithdrawableInfo, WithdrawalResult, ReconciliationData, SseToken, WebhookPayload, Achievement, UserAchievements, Reward, UserRewards, RewardClaimResult, LeaderboardEntry, TimelineEvent, WithdrawalEventResult, SandboxResetResult, SandboxUserResetResult, AdminBetEvent, BetSettleRequest, BulkSettleRequest, BulkSettleResult, WebhookDelivery, AuditEntry, TenantSettings, AdminOverview, BonusOffer, BonusStats, MissionDef, TournamentDef, TournamentLeaderboardEntry, LoyaltyConfig, LoyaltyTier, LoyaltyStats, WebhookEchoEntry, AdapterMapping, ReconciliationFlag, RewardRule, SelfExclusionRecord, } from './types.js';
27
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAE3F,YAAY,EACV,gBAAgB,EAChB,SAAS,EACT,WAAW,EACX,WAAW,EACX,YAAY,EAGZ,eAAe,EACf,aAAa,EACb,SAAS,EACT,gBAAgB,EAChB,mBAAmB,EACnB,qBAAqB,EACrB,aAAa,EACb,eAAe,EACf,gBAAgB,EAChB,UAAU,EACV,eAAe,EACf,iBAAiB,EAGjB,eAAe,EACf,QAAQ,EACR,eAAe,EAGf,SAAS,EACT,aAAa,EACb,iBAAiB,EACjB,SAAS,EACT,gBAAgB,EAChB,eAAe,EACf,cAAc,EACd,OAAO,EACP,YAAY,EACZ,iBAAiB,EACjB,uBAAuB,EACvB,qBAAqB,EACrB,UAAU,EACV,gBAAgB,EAChB,gBAAgB,EAChB,kBAAkB,EAClB,QAAQ,EACR,cAAc,EAGd,WAAW,EACX,gBAAgB,EAChB,MAAM,EACN,WAAW,EACX,iBAAiB,EACjB,gBAAgB,EAChB,aAAa,EACb,qBAAqB,EACrB,kBAAkB,EAClB,sBAAsB,EAGtB,aAAa,EACb,gBAAgB,EAChB,iBAAiB,EACjB,gBAAgB,EAChB,eAAe,EACf,UAAU,EACV,cAAc,EACd,aAAa,EACb,UAAU,EACV,UAAU,EACV,UAAU,EACV,aAAa,EACb,0BAA0B,EAC1B,aAAa,EACb,WAAW,EACX,YAAY,EACZ,gBAAgB,EAChB,cAAc,EACd,kBAAkB,EAClB,UAAU,EACV,mBAAmB,GACpB,MAAM,YAAY,CAAC"}
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+ /**
3
+ * @fundedfast/sdk
4
+ *
5
+ * Official TypeScript SDK for the FAST platform.
6
+ * Zero dependencies. Works in Node.js 18+, Deno, Bun, and edge runtimes.
7
+ *
8
+ * @example
9
+ * ```typescript
10
+ * import { FastClient } from '@fundedfast/sdk';
11
+ *
12
+ * const fast = new FastClient({ apiKey: process.env.FAST_API_KEY! });
13
+ *
14
+ * // Validate a bet
15
+ * const result = await fast.bets.validate({
16
+ * userId: 'player-42',
17
+ * externalBetId: 'BET-001',
18
+ * stakeAmount: 5.00,
19
+ * odds: 2.10,
20
+ * status: 'placed',
21
+ * });
22
+ * ```
23
+ *
24
+ * @packageDocumentation
25
+ */
26
+ Object.defineProperty(exports, "__esModule", { value: true });
27
+ exports.FastNetworkError = exports.FastTimeoutError = exports.FastApiError = exports.FastClient = void 0;
28
+ var client_js_1 = require("./client.js");
29
+ Object.defineProperty(exports, "FastClient", { enumerable: true, get: function () { return client_js_1.FastClient; } });
30
+ Object.defineProperty(exports, "FastApiError", { enumerable: true, get: function () { return client_js_1.FastApiError; } });
31
+ Object.defineProperty(exports, "FastTimeoutError", { enumerable: true, get: function () { return client_js_1.FastTimeoutError; } });
32
+ Object.defineProperty(exports, "FastNetworkError", { enumerable: true, get: function () { return client_js_1.FastNetworkError; } });
33
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;;;AAEH,yCAA2F;AAAlF,uGAAA,UAAU,OAAA;AAAE,yGAAA,YAAY,OAAA;AAAE,6GAAA,gBAAgB,OAAA;AAAE,6GAAA,gBAAgB,OAAA"}
@@ -0,0 +1 @@
1
+ {"type":"commonjs"}