@djangocfg/api 2.1.332 → 2.1.334

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.
@@ -21,805 +21,6 @@ var proxyMiddlewareConfig = {
21
21
  matcher: ["/media/:path*", "/api/:path*"]
22
22
  };
23
23
 
24
- // src/_api/generated/core/bodySerializer.gen.ts
25
- var jsonBodySerializer = {
26
- bodySerializer: /* @__PURE__ */ __name((body) => JSON.stringify(body, (_key, value) => typeof value === "bigint" ? value.toString() : value), "bodySerializer")
27
- };
28
-
29
- // src/_api/generated/core/params.gen.ts
30
- var extraPrefixesMap = {
31
- $body_: "body",
32
- $headers_: "headers",
33
- $path_: "path",
34
- $query_: "query"
35
- };
36
- var extraPrefixes = Object.entries(extraPrefixesMap);
37
-
38
- // src/_api/generated/core/serverSentEvents.gen.ts
39
- function createSseClient({
40
- onRequest,
41
- onSseError,
42
- onSseEvent,
43
- responseTransformer,
44
- responseValidator,
45
- sseDefaultRetryDelay,
46
- sseMaxRetryAttempts,
47
- sseMaxRetryDelay,
48
- sseSleepFn,
49
- url,
50
- ...options
51
- }) {
52
- let lastEventId;
53
- const sleep = sseSleepFn ?? ((ms) => new Promise((resolve) => setTimeout(resolve, ms)));
54
- const createStream = /* @__PURE__ */ __name(async function* () {
55
- let retryDelay = sseDefaultRetryDelay ?? 3e3;
56
- let attempt = 0;
57
- const signal = options.signal ?? new AbortController().signal;
58
- while (true) {
59
- if (signal.aborted) break;
60
- attempt++;
61
- const headers = options.headers instanceof Headers ? options.headers : new Headers(options.headers);
62
- if (lastEventId !== void 0) {
63
- headers.set("Last-Event-ID", lastEventId);
64
- }
65
- try {
66
- const requestInit = {
67
- redirect: "follow",
68
- ...options,
69
- body: options.serializedBody,
70
- headers,
71
- signal
72
- };
73
- let request = new Request(url, requestInit);
74
- if (onRequest) {
75
- request = await onRequest(url, requestInit);
76
- }
77
- const _fetch = options.fetch ?? globalThis.fetch;
78
- const response = await _fetch(request);
79
- if (!response.ok) throw new Error(`SSE failed: ${response.status} ${response.statusText}`);
80
- if (!response.body) throw new Error("No body in SSE response");
81
- const reader = response.body.pipeThrough(new TextDecoderStream()).getReader();
82
- let buffer = "";
83
- const abortHandler = /* @__PURE__ */ __name(() => {
84
- try {
85
- reader.cancel();
86
- } catch {
87
- }
88
- }, "abortHandler");
89
- signal.addEventListener("abort", abortHandler);
90
- try {
91
- while (true) {
92
- const { done, value } = await reader.read();
93
- if (done) break;
94
- buffer += value;
95
- buffer = buffer.replace(/\r\n?/g, "\n");
96
- const chunks = buffer.split("\n\n");
97
- buffer = chunks.pop() ?? "";
98
- for (const chunk of chunks) {
99
- const lines = chunk.split("\n");
100
- const dataLines = [];
101
- let eventName;
102
- for (const line of lines) {
103
- if (line.startsWith("data:")) {
104
- dataLines.push(line.replace(/^data:\s*/, ""));
105
- } else if (line.startsWith("event:")) {
106
- eventName = line.replace(/^event:\s*/, "");
107
- } else if (line.startsWith("id:")) {
108
- lastEventId = line.replace(/^id:\s*/, "");
109
- } else if (line.startsWith("retry:")) {
110
- const parsed = Number.parseInt(line.replace(/^retry:\s*/, ""), 10);
111
- if (!Number.isNaN(parsed)) {
112
- retryDelay = parsed;
113
- }
114
- }
115
- }
116
- let data;
117
- let parsedJson = false;
118
- if (dataLines.length) {
119
- const rawData = dataLines.join("\n");
120
- try {
121
- data = JSON.parse(rawData);
122
- parsedJson = true;
123
- } catch {
124
- data = rawData;
125
- }
126
- }
127
- if (parsedJson) {
128
- if (responseValidator) {
129
- await responseValidator(data);
130
- }
131
- if (responseTransformer) {
132
- data = await responseTransformer(data);
133
- }
134
- }
135
- onSseEvent?.({
136
- data,
137
- event: eventName,
138
- id: lastEventId,
139
- retry: retryDelay
140
- });
141
- if (dataLines.length) {
142
- yield data;
143
- }
144
- }
145
- }
146
- } finally {
147
- signal.removeEventListener("abort", abortHandler);
148
- reader.releaseLock();
149
- }
150
- break;
151
- } catch (error) {
152
- onSseError?.(error);
153
- if (sseMaxRetryAttempts !== void 0 && attempt >= sseMaxRetryAttempts) {
154
- break;
155
- }
156
- const backoff = Math.min(retryDelay * 2 ** (attempt - 1), sseMaxRetryDelay ?? 3e4);
157
- await sleep(backoff);
158
- }
159
- }
160
- }, "createStream");
161
- const stream = createStream();
162
- return { stream };
163
- }
164
- __name(createSseClient, "createSseClient");
165
-
166
- // src/_api/generated/core/pathSerializer.gen.ts
167
- var separatorArrayExplode = /* @__PURE__ */ __name((style) => {
168
- switch (style) {
169
- case "label":
170
- return ".";
171
- case "matrix":
172
- return ";";
173
- case "simple":
174
- return ",";
175
- default:
176
- return "&";
177
- }
178
- }, "separatorArrayExplode");
179
- var separatorArrayNoExplode = /* @__PURE__ */ __name((style) => {
180
- switch (style) {
181
- case "form":
182
- return ",";
183
- case "pipeDelimited":
184
- return "|";
185
- case "spaceDelimited":
186
- return "%20";
187
- default:
188
- return ",";
189
- }
190
- }, "separatorArrayNoExplode");
191
- var separatorObjectExplode = /* @__PURE__ */ __name((style) => {
192
- switch (style) {
193
- case "label":
194
- return ".";
195
- case "matrix":
196
- return ";";
197
- case "simple":
198
- return ",";
199
- default:
200
- return "&";
201
- }
202
- }, "separatorObjectExplode");
203
- var serializeArrayParam = /* @__PURE__ */ __name(({
204
- allowReserved,
205
- explode,
206
- name,
207
- style,
208
- value
209
- }) => {
210
- if (!explode) {
211
- const joinedValues2 = (allowReserved ? value : value.map((v) => encodeURIComponent(v))).join(separatorArrayNoExplode(style));
212
- switch (style) {
213
- case "label":
214
- return `.${joinedValues2}`;
215
- case "matrix":
216
- return `;${name}=${joinedValues2}`;
217
- case "simple":
218
- return joinedValues2;
219
- default:
220
- return `${name}=${joinedValues2}`;
221
- }
222
- }
223
- const separator = separatorArrayExplode(style);
224
- const joinedValues = value.map((v) => {
225
- if (style === "label" || style === "simple") {
226
- return allowReserved ? v : encodeURIComponent(v);
227
- }
228
- return serializePrimitiveParam({
229
- allowReserved,
230
- name,
231
- value: v
232
- });
233
- }).join(separator);
234
- return style === "label" || style === "matrix" ? separator + joinedValues : joinedValues;
235
- }, "serializeArrayParam");
236
- var serializePrimitiveParam = /* @__PURE__ */ __name(({
237
- allowReserved,
238
- name,
239
- value
240
- }) => {
241
- if (value === void 0 || value === null) {
242
- return "";
243
- }
244
- if (typeof value === "object") {
245
- throw new Error(
246
- "Deeply-nested arrays/objects aren\u2019t supported. Provide your own `querySerializer()` to handle these."
247
- );
248
- }
249
- return `${name}=${allowReserved ? value : encodeURIComponent(value)}`;
250
- }, "serializePrimitiveParam");
251
- var serializeObjectParam = /* @__PURE__ */ __name(({
252
- allowReserved,
253
- explode,
254
- name,
255
- style,
256
- value,
257
- valueOnly
258
- }) => {
259
- if (value instanceof Date) {
260
- return valueOnly ? value.toISOString() : `${name}=${value.toISOString()}`;
261
- }
262
- if (style !== "deepObject" && !explode) {
263
- let values = [];
264
- Object.entries(value).forEach(([key, v]) => {
265
- values = [...values, key, allowReserved ? v : encodeURIComponent(v)];
266
- });
267
- const joinedValues2 = values.join(",");
268
- switch (style) {
269
- case "form":
270
- return `${name}=${joinedValues2}`;
271
- case "label":
272
- return `.${joinedValues2}`;
273
- case "matrix":
274
- return `;${name}=${joinedValues2}`;
275
- default:
276
- return joinedValues2;
277
- }
278
- }
279
- const separator = separatorObjectExplode(style);
280
- const joinedValues = Object.entries(value).map(
281
- ([key, v]) => serializePrimitiveParam({
282
- allowReserved,
283
- name: style === "deepObject" ? `${name}[${key}]` : key,
284
- value: v
285
- })
286
- ).join(separator);
287
- return style === "label" || style === "matrix" ? separator + joinedValues : joinedValues;
288
- }, "serializeObjectParam");
289
-
290
- // src/_api/generated/core/utils.gen.ts
291
- var PATH_PARAM_RE = /\{[^{}]+\}/g;
292
- var defaultPathSerializer = /* @__PURE__ */ __name(({ path, url: _url }) => {
293
- let url = _url;
294
- const matches = _url.match(PATH_PARAM_RE);
295
- if (matches) {
296
- for (const match of matches) {
297
- let explode = false;
298
- let name = match.substring(1, match.length - 1);
299
- let style = "simple";
300
- if (name.endsWith("*")) {
301
- explode = true;
302
- name = name.substring(0, name.length - 1);
303
- }
304
- if (name.startsWith(".")) {
305
- name = name.substring(1);
306
- style = "label";
307
- } else if (name.startsWith(";")) {
308
- name = name.substring(1);
309
- style = "matrix";
310
- }
311
- const value = path[name];
312
- if (value === void 0 || value === null) {
313
- continue;
314
- }
315
- if (Array.isArray(value)) {
316
- url = url.replace(match, serializeArrayParam({ explode, name, style, value }));
317
- continue;
318
- }
319
- if (typeof value === "object") {
320
- url = url.replace(
321
- match,
322
- serializeObjectParam({
323
- explode,
324
- name,
325
- style,
326
- value,
327
- valueOnly: true
328
- })
329
- );
330
- continue;
331
- }
332
- if (style === "matrix") {
333
- url = url.replace(
334
- match,
335
- `;${serializePrimitiveParam({
336
- name,
337
- value
338
- })}`
339
- );
340
- continue;
341
- }
342
- const replaceValue = encodeURIComponent(
343
- style === "label" ? `.${value}` : value
344
- );
345
- url = url.replace(match, replaceValue);
346
- }
347
- }
348
- return url;
349
- }, "defaultPathSerializer");
350
- var getUrl = /* @__PURE__ */ __name(({
351
- baseUrl,
352
- path,
353
- query,
354
- querySerializer,
355
- url: _url
356
- }) => {
357
- const pathUrl = _url.startsWith("/") ? _url : `/${_url}`;
358
- let url = (baseUrl ?? "") + pathUrl;
359
- if (path) {
360
- url = defaultPathSerializer({ path, url });
361
- }
362
- let search = query ? querySerializer(query) : "";
363
- if (search.startsWith("?")) {
364
- search = search.substring(1);
365
- }
366
- if (search) {
367
- url += `?${search}`;
368
- }
369
- return url;
370
- }, "getUrl");
371
- function getValidRequestBody(options) {
372
- const hasBody = options.body !== void 0;
373
- const isSerializedBody = hasBody && options.bodySerializer;
374
- if (isSerializedBody) {
375
- if ("serializedBody" in options) {
376
- const hasSerializedBody = options.serializedBody !== void 0 && options.serializedBody !== "";
377
- return hasSerializedBody ? options.serializedBody : null;
378
- }
379
- return options.body !== "" ? options.body : null;
380
- }
381
- if (hasBody) {
382
- return options.body;
383
- }
384
- return void 0;
385
- }
386
- __name(getValidRequestBody, "getValidRequestBody");
387
-
388
- // src/_api/generated/core/auth.gen.ts
389
- var getAuthToken = /* @__PURE__ */ __name(async (auth2, callback) => {
390
- const token = typeof callback === "function" ? await callback(auth2) : callback;
391
- if (!token) {
392
- return;
393
- }
394
- if (auth2.scheme === "bearer") {
395
- return `Bearer ${token}`;
396
- }
397
- if (auth2.scheme === "basic") {
398
- return `Basic ${btoa(token)}`;
399
- }
400
- return token;
401
- }, "getAuthToken");
402
-
403
- // src/_api/generated/client/utils.gen.ts
404
- var createQuerySerializer = /* @__PURE__ */ __name(({
405
- parameters = {},
406
- ...args
407
- } = {}) => {
408
- const querySerializer = /* @__PURE__ */ __name((queryParams) => {
409
- const search = [];
410
- if (queryParams && typeof queryParams === "object") {
411
- for (const name in queryParams) {
412
- const value = queryParams[name];
413
- if (value === void 0 || value === null) {
414
- continue;
415
- }
416
- const options = parameters[name] || args;
417
- if (Array.isArray(value)) {
418
- const serializedArray = serializeArrayParam({
419
- allowReserved: options.allowReserved,
420
- explode: true,
421
- name,
422
- style: "form",
423
- value,
424
- ...options.array
425
- });
426
- if (serializedArray) search.push(serializedArray);
427
- } else if (typeof value === "object") {
428
- const serializedObject = serializeObjectParam({
429
- allowReserved: options.allowReserved,
430
- explode: true,
431
- name,
432
- style: "deepObject",
433
- value,
434
- ...options.object
435
- });
436
- if (serializedObject) search.push(serializedObject);
437
- } else {
438
- const serializedPrimitive = serializePrimitiveParam({
439
- allowReserved: options.allowReserved,
440
- name,
441
- value
442
- });
443
- if (serializedPrimitive) search.push(serializedPrimitive);
444
- }
445
- }
446
- }
447
- return search.join("&");
448
- }, "querySerializer");
449
- return querySerializer;
450
- }, "createQuerySerializer");
451
- var getParseAs = /* @__PURE__ */ __name((contentType) => {
452
- if (!contentType) {
453
- return "stream";
454
- }
455
- const cleanContent = contentType.split(";")[0]?.trim();
456
- if (!cleanContent) {
457
- return;
458
- }
459
- if (cleanContent.startsWith("application/json") || cleanContent.endsWith("+json")) {
460
- return "json";
461
- }
462
- if (cleanContent === "multipart/form-data") {
463
- return "formData";
464
- }
465
- if (["application/", "audio/", "image/", "video/"].some((type) => cleanContent.startsWith(type))) {
466
- return "blob";
467
- }
468
- if (cleanContent.startsWith("text/")) {
469
- return "text";
470
- }
471
- return;
472
- }, "getParseAs");
473
- var checkForExistence = /* @__PURE__ */ __name((options, name) => {
474
- if (!name) {
475
- return false;
476
- }
477
- if (options.headers.has(name) || options.query?.[name] || options.headers.get("Cookie")?.includes(`${name}=`)) {
478
- return true;
479
- }
480
- return false;
481
- }, "checkForExistence");
482
- var setAuthParams = /* @__PURE__ */ __name(async ({
483
- security,
484
- ...options
485
- }) => {
486
- for (const auth2 of security) {
487
- if (checkForExistence(options, auth2.name)) {
488
- continue;
489
- }
490
- const token = await getAuthToken(auth2, options.auth);
491
- if (!token) {
492
- continue;
493
- }
494
- const name = auth2.name ?? "Authorization";
495
- switch (auth2.in) {
496
- case "query":
497
- if (!options.query) {
498
- options.query = {};
499
- }
500
- options.query[name] = token;
501
- break;
502
- case "cookie":
503
- options.headers.append("Cookie", `${name}=${token}`);
504
- break;
505
- case "header":
506
- default:
507
- options.headers.set(name, token);
508
- break;
509
- }
510
- }
511
- }, "setAuthParams");
512
- var buildUrl = /* @__PURE__ */ __name((options) => getUrl({
513
- baseUrl: options.baseUrl,
514
- path: options.path,
515
- query: options.query,
516
- querySerializer: typeof options.querySerializer === "function" ? options.querySerializer : createQuerySerializer(options.querySerializer),
517
- url: options.url
518
- }), "buildUrl");
519
- var mergeConfigs = /* @__PURE__ */ __name((a, b) => {
520
- const config = { ...a, ...b };
521
- if (config.baseUrl?.endsWith("/")) {
522
- config.baseUrl = config.baseUrl.substring(0, config.baseUrl.length - 1);
523
- }
524
- config.headers = mergeHeaders(a.headers, b.headers);
525
- return config;
526
- }, "mergeConfigs");
527
- var headersEntries = /* @__PURE__ */ __name((headers) => {
528
- const entries = [];
529
- headers.forEach((value, key) => {
530
- entries.push([key, value]);
531
- });
532
- return entries;
533
- }, "headersEntries");
534
- var mergeHeaders = /* @__PURE__ */ __name((...headers) => {
535
- const mergedHeaders = new Headers();
536
- for (const header of headers) {
537
- if (!header) {
538
- continue;
539
- }
540
- const iterator = header instanceof Headers ? headersEntries(header) : Object.entries(header);
541
- for (const [key, value] of iterator) {
542
- if (value === null) {
543
- mergedHeaders.delete(key);
544
- } else if (Array.isArray(value)) {
545
- for (const v of value) {
546
- mergedHeaders.append(key, v);
547
- }
548
- } else if (value !== void 0) {
549
- mergedHeaders.set(
550
- key,
551
- typeof value === "object" ? JSON.stringify(value) : value
552
- );
553
- }
554
- }
555
- }
556
- return mergedHeaders;
557
- }, "mergeHeaders");
558
- var Interceptors = class {
559
- static {
560
- __name(this, "Interceptors");
561
- }
562
- fns = [];
563
- clear() {
564
- this.fns = [];
565
- }
566
- eject(id) {
567
- const index = this.getInterceptorIndex(id);
568
- if (this.fns[index]) {
569
- this.fns[index] = null;
570
- }
571
- }
572
- exists(id) {
573
- const index = this.getInterceptorIndex(id);
574
- return Boolean(this.fns[index]);
575
- }
576
- getInterceptorIndex(id) {
577
- if (typeof id === "number") {
578
- return this.fns[id] ? id : -1;
579
- }
580
- return this.fns.indexOf(id);
581
- }
582
- update(id, fn) {
583
- const index = this.getInterceptorIndex(id);
584
- if (this.fns[index]) {
585
- this.fns[index] = fn;
586
- return id;
587
- }
588
- return false;
589
- }
590
- use(fn) {
591
- this.fns.push(fn);
592
- return this.fns.length - 1;
593
- }
594
- };
595
- var createInterceptors = /* @__PURE__ */ __name(() => ({
596
- error: new Interceptors(),
597
- request: new Interceptors(),
598
- response: new Interceptors()
599
- }), "createInterceptors");
600
- var defaultQuerySerializer = createQuerySerializer({
601
- allowReserved: false,
602
- array: {
603
- explode: true,
604
- style: "form"
605
- },
606
- object: {
607
- explode: true,
608
- style: "deepObject"
609
- }
610
- });
611
- var defaultHeaders = {
612
- "Content-Type": "application/json"
613
- };
614
- var createConfig = /* @__PURE__ */ __name((override = {}) => ({
615
- ...jsonBodySerializer,
616
- headers: defaultHeaders,
617
- parseAs: "auto",
618
- querySerializer: defaultQuerySerializer,
619
- ...override
620
- }), "createConfig");
621
-
622
- // src/_api/generated/client/client.gen.ts
623
- var createClient = /* @__PURE__ */ __name((config = {}) => {
624
- let _config = mergeConfigs(createConfig(), config);
625
- const getConfig = /* @__PURE__ */ __name(() => ({ ..._config }), "getConfig");
626
- const setConfig = /* @__PURE__ */ __name((config2) => {
627
- _config = mergeConfigs(_config, config2);
628
- return getConfig();
629
- }, "setConfig");
630
- const interceptors = createInterceptors();
631
- const beforeRequest = /* @__PURE__ */ __name(async (options) => {
632
- const opts = {
633
- ..._config,
634
- ...options,
635
- fetch: options.fetch ?? _config.fetch ?? globalThis.fetch,
636
- headers: mergeHeaders(_config.headers, options.headers),
637
- serializedBody: void 0
638
- };
639
- if (opts.security) {
640
- await setAuthParams({
641
- ...opts,
642
- security: opts.security
643
- });
644
- }
645
- if (opts.requestValidator) {
646
- await opts.requestValidator(opts);
647
- }
648
- if (opts.body !== void 0 && opts.bodySerializer) {
649
- opts.serializedBody = opts.bodySerializer(opts.body);
650
- }
651
- if (opts.body === void 0 || opts.serializedBody === "") {
652
- opts.headers.delete("Content-Type");
653
- }
654
- const resolvedOpts = opts;
655
- const url = buildUrl(resolvedOpts);
656
- return { opts: resolvedOpts, url };
657
- }, "beforeRequest");
658
- const request = /* @__PURE__ */ __name(async (options) => {
659
- const throwOnError = options.throwOnError ?? _config.throwOnError;
660
- const responseStyle = options.responseStyle ?? _config.responseStyle;
661
- let request2;
662
- let response;
663
- try {
664
- const { opts, url } = await beforeRequest(options);
665
- const requestInit = {
666
- redirect: "follow",
667
- ...opts,
668
- body: getValidRequestBody(opts)
669
- };
670
- request2 = new Request(url, requestInit);
671
- for (const fn of interceptors.request.fns) {
672
- if (fn) {
673
- request2 = await fn(request2, opts);
674
- }
675
- }
676
- const _fetch = opts.fetch;
677
- response = await _fetch(request2);
678
- for (const fn of interceptors.response.fns) {
679
- if (fn) {
680
- response = await fn(response, request2, opts);
681
- }
682
- }
683
- const result = {
684
- request: request2,
685
- response
686
- };
687
- if (response.ok) {
688
- const parseAs = (opts.parseAs === "auto" ? getParseAs(response.headers.get("Content-Type")) : opts.parseAs) ?? "json";
689
- if (response.status === 204 || response.headers.get("Content-Length") === "0") {
690
- let emptyData;
691
- switch (parseAs) {
692
- case "arrayBuffer":
693
- case "blob":
694
- case "text":
695
- emptyData = await response[parseAs]();
696
- break;
697
- case "formData":
698
- emptyData = new FormData();
699
- break;
700
- case "stream":
701
- emptyData = response.body;
702
- break;
703
- case "json":
704
- default:
705
- emptyData = {};
706
- break;
707
- }
708
- return opts.responseStyle === "data" ? emptyData : {
709
- data: emptyData,
710
- ...result
711
- };
712
- }
713
- let data;
714
- switch (parseAs) {
715
- case "arrayBuffer":
716
- case "blob":
717
- case "formData":
718
- case "text":
719
- data = await response[parseAs]();
720
- break;
721
- case "json": {
722
- const text = await response.text();
723
- data = text ? JSON.parse(text) : {};
724
- break;
725
- }
726
- case "stream":
727
- return opts.responseStyle === "data" ? response.body : {
728
- data: response.body,
729
- ...result
730
- };
731
- }
732
- if (parseAs === "json") {
733
- if (opts.responseValidator) {
734
- await opts.responseValidator(data);
735
- }
736
- if (opts.responseTransformer) {
737
- data = await opts.responseTransformer(data);
738
- }
739
- }
740
- return opts.responseStyle === "data" ? data : {
741
- data,
742
- ...result
743
- };
744
- }
745
- const textError = await response.text();
746
- let jsonError;
747
- try {
748
- jsonError = JSON.parse(textError);
749
- } catch {
750
- }
751
- throw jsonError ?? textError;
752
- } catch (error) {
753
- let finalError = error;
754
- for (const fn of interceptors.error.fns) {
755
- if (fn) {
756
- finalError = await fn(finalError, response, request2, options);
757
- }
758
- }
759
- finalError = finalError || {};
760
- if (throwOnError) {
761
- throw finalError;
762
- }
763
- return responseStyle === "data" ? void 0 : {
764
- error: finalError,
765
- request: request2,
766
- response
767
- };
768
- }
769
- }, "request");
770
- const makeMethodFn = /* @__PURE__ */ __name((method) => (options) => request({ ...options, method }), "makeMethodFn");
771
- const makeSseFn = /* @__PURE__ */ __name((method) => async (options) => {
772
- const { opts, url } = await beforeRequest(options);
773
- return createSseClient({
774
- ...opts,
775
- body: opts.body,
776
- method,
777
- onRequest: /* @__PURE__ */ __name(async (url2, init) => {
778
- let request2 = new Request(url2, init);
779
- for (const fn of interceptors.request.fns) {
780
- if (fn) {
781
- request2 = await fn(request2, opts);
782
- }
783
- }
784
- return request2;
785
- }, "onRequest"),
786
- serializedBody: getValidRequestBody(opts),
787
- url
788
- });
789
- }, "makeSseFn");
790
- const _buildUrl = /* @__PURE__ */ __name((options) => buildUrl({ ..._config, ...options }), "_buildUrl");
791
- return {
792
- buildUrl: _buildUrl,
793
- connect: makeMethodFn("CONNECT"),
794
- delete: makeMethodFn("DELETE"),
795
- get: makeMethodFn("GET"),
796
- getConfig,
797
- head: makeMethodFn("HEAD"),
798
- interceptors,
799
- options: makeMethodFn("OPTIONS"),
800
- patch: makeMethodFn("PATCH"),
801
- post: makeMethodFn("POST"),
802
- put: makeMethodFn("PUT"),
803
- request,
804
- setConfig,
805
- sse: {
806
- connect: makeSseFn("CONNECT"),
807
- delete: makeSseFn("DELETE"),
808
- get: makeSseFn("GET"),
809
- head: makeSseFn("HEAD"),
810
- options: makeSseFn("OPTIONS"),
811
- patch: makeSseFn("PATCH"),
812
- post: makeSseFn("POST"),
813
- put: makeSseFn("PUT"),
814
- trace: makeSseFn("TRACE")
815
- },
816
- trace: makeMethodFn("TRACE")
817
- };
818
- }, "createClient");
819
-
820
- // src/_api/generated/client.gen.ts
821
- var client = createClient(createConfig({ baseUrl: "http://localhost:8000" }));
822
-
823
24
  // src/_api/generated/helpers/auth.ts
824
25
  var ACCESS_KEY = "cfg.access_token";
825
26
  var REFRESH_KEY = "cfg.refresh_token";
@@ -912,15 +113,23 @@ var _apiKeyOverride = null;
912
113
  var _baseUrlOverride = null;
913
114
  var _withCredentials = true;
914
115
  var _onUnauthorized = null;
116
+ var _refreshHandler = null;
117
+ var _refreshInflight = null;
118
+ var RETRY_MARKER = "X-Auth-Retry";
119
+ var _client = null;
120
+ function pushClientConfig() {
121
+ if (!_client) return;
122
+ _client.setConfig({
123
+ baseUrl: auth.getBaseUrl(),
124
+ credentials: _withCredentials ? "include" : "same-origin"
125
+ });
126
+ }
127
+ __name(pushClientConfig, "pushClientConfig");
915
128
  var auth = {
916
129
  // ── Storage mode ──────────────────────────────────────────────────
917
130
  getStorageMode() {
918
131
  return _storageMode;
919
132
  },
920
- /**
921
- * Switch the storage backend. Existing values in the *previous*
922
- * backend are NOT migrated — set fresh values after switching.
923
- */
924
133
  setStorageMode(mode) {
925
134
  _storageMode = mode;
926
135
  _storage = mode === "cookie" ? cookieBackend : localStorageBackend;
@@ -946,15 +155,12 @@ var auth = {
946
155
  return _storage.get(ACCESS_KEY) !== null;
947
156
  },
948
157
  // ── API key ───────────────────────────────────────────────────────
949
- /** In-memory API key. Falls back to storage, then NEXT_PUBLIC_API_KEY. */
950
158
  getApiKey() {
951
159
  return _apiKeyOverride ?? _storage.get(API_KEY_KEY) ?? defaultApiKey();
952
160
  },
953
- /** In-memory only (cleared on reload). */
954
161
  setApiKey(key) {
955
162
  _apiKeyOverride = key;
956
163
  },
957
- /** Persist to active storage backend (localStorage or cookie). */
958
164
  setApiKeyPersist(key) {
959
165
  _apiKeyOverride = key;
960
166
  _storage.set(API_KEY_KEY, key);
@@ -964,7 +170,6 @@ var auth = {
964
170
  _storage.set(API_KEY_KEY, null);
965
171
  },
966
172
  // ── Locale ────────────────────────────────────────────────────────
967
- /** Override locale → falls back to NEXT_LOCALE cookie / navigator.language. */
968
173
  getLocale() {
969
174
  return _localeOverride ?? detectLocale();
970
175
  },
@@ -978,309 +183,1213 @@ var auth = {
978
183
  },
979
184
  setBaseUrl(url) {
980
185
  _baseUrlOverride = url ? url.replace(/\/$/, "") : null;
981
- client.setConfig({ baseUrl: this.getBaseUrl() });
186
+ pushClientConfig();
982
187
  },
983
- // ── Credentials toggle (Django session/CSRF cross-origin) ─────────
188
+ // ── Credentials toggle ────────────────────────────────────────────
984
189
  getWithCredentials() {
985
190
  return _withCredentials;
986
191
  },
987
192
  setWithCredentials(value) {
988
193
  _withCredentials = value;
989
- client.setConfig({ credentials: value ? "include" : "same-origin" });
194
+ pushClientConfig();
990
195
  },
991
196
  // ── 401 handler ───────────────────────────────────────────────────
992
197
  /**
993
- * Register a callback fired on every 401 response. Use this to wire
994
- * a token-refresh flow or a forced logout. Setting `null` removes
995
- * the handler.
198
+ * Fired when the server returns 401 AND no refresh path recovers it
199
+ * (no refresh token, no refresh handler, refresh failed, or retry
200
+ * still 401). The app should clear local state and redirect to login.
201
+ *
202
+ * NOT fired for 401 that gets transparently recovered by the refresh
203
+ * handler — those are invisible to callers.
204
+ */
205
+ onUnauthorized(cb) {
206
+ _onUnauthorized = cb;
207
+ },
208
+ /**
209
+ * Register the refresh strategy. The handler receives the current
210
+ * refresh token and must call your refresh endpoint, returning
211
+ * `{ access, refresh? }` on success or `null` on failure.
212
+ *
213
+ * @example
214
+ * auth.setRefreshHandler(async (refresh) => {
215
+ * const { data } = await Auth.tokenRefreshCreate({ body: { refresh } });
216
+ * return data ? { access: data.access, refresh: data.refresh } : null;
217
+ * });
996
218
  */
219
+ setRefreshHandler(fn) {
220
+ _refreshHandler = fn;
221
+ }
222
+ };
223
+ async function tryRefresh() {
224
+ if (_refreshInflight) return _refreshInflight;
225
+ if (!_refreshHandler) return null;
226
+ const refresh = auth.getRefreshToken();
227
+ if (!refresh) return null;
228
+ _refreshInflight = (async () => {
229
+ try {
230
+ const result = await _refreshHandler(refresh);
231
+ if (!result?.access) return null;
232
+ auth.setToken(result.access);
233
+ if (result.refresh) auth.setRefreshToken(result.refresh);
234
+ return result.access;
235
+ } catch {
236
+ return null;
237
+ } finally {
238
+ _refreshInflight = null;
239
+ }
240
+ })();
241
+ return _refreshInflight;
242
+ }
243
+ __name(tryRefresh, "tryRefresh");
244
+ function installAuthOnClient(client2) {
245
+ if (_client) return;
246
+ _client = client2;
247
+ client2.setConfig({
248
+ baseUrl: auth.getBaseUrl(),
249
+ credentials: _withCredentials ? "include" : "same-origin"
250
+ });
251
+ client2.interceptors.request.use((request) => {
252
+ const token = auth.getToken();
253
+ if (token) request.headers.set("Authorization", `Bearer ${token}`);
254
+ const locale = auth.getLocale();
255
+ if (locale) request.headers.set("Accept-Language", locale);
256
+ const apiKey = auth.getApiKey();
257
+ if (apiKey) request.headers.set("X-API-Key", apiKey);
258
+ return request;
259
+ });
260
+ client2.interceptors.response.use(async (response, request) => {
261
+ if (response.status !== 401) return response;
262
+ if (request.headers.get(RETRY_MARKER)) {
263
+ if (_onUnauthorized) {
264
+ try {
265
+ _onUnauthorized(response);
266
+ } catch {
267
+ }
268
+ }
269
+ return response;
270
+ }
271
+ const newToken = await tryRefresh();
272
+ if (!newToken) {
273
+ if (_onUnauthorized) {
274
+ try {
275
+ _onUnauthorized(response);
276
+ } catch {
277
+ }
278
+ }
279
+ return response;
280
+ }
281
+ const retry = request.clone();
282
+ retry.headers.set("Authorization", `Bearer ${newToken}`);
283
+ retry.headers.set(RETRY_MARKER, "1");
284
+ try {
285
+ const retried = await fetch(retry);
286
+ if (retried.status === 401 && _onUnauthorized) {
287
+ try {
288
+ _onUnauthorized(retried);
289
+ } catch {
290
+ }
291
+ }
292
+ return retried;
293
+ } catch {
294
+ if (_onUnauthorized) {
295
+ try {
296
+ _onUnauthorized(response);
297
+ } catch {
298
+ }
299
+ }
300
+ return response;
301
+ }
302
+ });
303
+ }
304
+ __name(installAuthOnClient, "installAuthOnClient");
305
+
306
+ // src/_api/generated/helpers/logger.ts
307
+ import { createConsola } from "consola";
308
+ var DEFAULT_CONFIG = {
309
+ enabled: typeof process !== "undefined" && process.env.NODE_ENV !== "production",
310
+ logRequests: true,
311
+ logResponses: true,
312
+ logErrors: true,
313
+ logBodies: true,
314
+ logHeaders: false
315
+ };
316
+ var SENSITIVE_HEADERS = [
317
+ "authorization",
318
+ "cookie",
319
+ "set-cookie",
320
+ "x-api-key",
321
+ "x-csrf-token"
322
+ ];
323
+ var APILogger = class {
324
+ static {
325
+ __name(this, "APILogger");
326
+ }
327
+ config;
328
+ consola;
329
+ constructor(config = {}) {
330
+ this.config = { ...DEFAULT_CONFIG, ...config };
331
+ this.consola = config.consola || createConsola({
332
+ level: this.config.enabled ? 4 : 0
333
+ });
334
+ }
335
+ enable() {
336
+ this.config.enabled = true;
337
+ }
338
+ disable() {
339
+ this.config.enabled = false;
340
+ }
341
+ setConfig(config) {
342
+ this.config = { ...this.config, ...config };
343
+ }
344
+ filterHeaders(headers) {
345
+ if (!headers) return {};
346
+ const filtered = {};
347
+ Object.keys(headers).forEach((key) => {
348
+ filtered[key] = SENSITIVE_HEADERS.includes(key.toLowerCase()) ? "***" : headers[key] || "";
349
+ });
350
+ return filtered;
351
+ }
352
+ logRequest(request) {
353
+ if (!this.config.enabled || !this.config.logRequests) return;
354
+ const { method, url, headers, body } = request;
355
+ this.consola.start(`${method} ${url}`);
356
+ if (this.config.logHeaders && headers) this.consola.debug("Headers:", this.filterHeaders(headers));
357
+ if (this.config.logBodies && body) this.consola.debug("Body:", body);
358
+ }
359
+ logResponse(request, response) {
360
+ if (!this.config.enabled || !this.config.logResponses) return;
361
+ const { method, url } = request;
362
+ const { status, statusText, data, duration } = response;
363
+ this.consola.success(`${method} ${url} ${status} ${statusText} (${duration}ms)`);
364
+ if (this.config.logBodies && data) this.consola.debug("Response:", data);
365
+ }
366
+ logError(request, error) {
367
+ if (!this.config.enabled || !this.config.logErrors) return;
368
+ const { method, url } = request;
369
+ const { message, statusCode, fieldErrors, duration } = error;
370
+ this.consola.error(`${method} ${url} ${statusCode || "Network"} Error (${duration}ms)`);
371
+ this.consola.error("Message:", message);
372
+ if (fieldErrors && Object.keys(fieldErrors).length > 0) {
373
+ this.consola.error("Field Errors:");
374
+ Object.entries(fieldErrors).forEach(([field, errors]) => {
375
+ errors.forEach((err) => this.consola.error(` \u2022 ${field}: ${err}`));
376
+ });
377
+ }
378
+ }
379
+ info(message, ...args) {
380
+ if (this.config.enabled) this.consola.info(message, ...args);
381
+ }
382
+ warn(message, ...args) {
383
+ if (this.config.enabled) this.consola.warn(message, ...args);
384
+ }
385
+ error(message, ...args) {
386
+ if (this.config.enabled) this.consola.error(message, ...args);
387
+ }
388
+ debug(message, ...args) {
389
+ if (this.config.enabled) this.consola.debug(message, ...args);
390
+ }
391
+ success(message, ...args) {
392
+ if (this.config.enabled) this.consola.success(message, ...args);
393
+ }
394
+ withTag(tag) {
395
+ return this.consola.withTag(tag);
396
+ }
397
+ };
398
+ var defaultLogger = new APILogger();
399
+
400
+ // src/_api/generated/_cfg_accounts/api.ts
401
+ var API = class {
402
+ static {
403
+ __name(this, "API");
404
+ }
405
+ logger;
406
+ constructor(_baseUrl, opts = {}) {
407
+ this.logger = new APILogger(opts.logger);
408
+ if (_baseUrl) auth.setBaseUrl(_baseUrl);
409
+ if (opts.locale !== void 0) auth.setLocale(opts.locale);
410
+ if (opts.apiKey !== void 0) auth.setApiKey(opts.apiKey);
411
+ if (opts.withCredentials !== void 0) auth.setWithCredentials(opts.withCredentials);
412
+ }
413
+ // ── Base URL ────────────────────────────────────────────────────────────
414
+ getBaseUrl() {
415
+ return auth.getBaseUrl();
416
+ }
417
+ setBaseUrl(url) {
418
+ auth.setBaseUrl(url);
419
+ }
420
+ // ── Tokens ──────────────────────────────────────────────────────────────
421
+ getToken() {
422
+ return auth.getToken();
423
+ }
424
+ setToken(token) {
425
+ auth.setToken(token);
426
+ }
427
+ getRefreshToken() {
428
+ return auth.getRefreshToken();
429
+ }
430
+ setRefreshToken(token) {
431
+ auth.setRefreshToken(token);
432
+ }
433
+ clearToken() {
434
+ auth.clearTokens();
435
+ }
436
+ isAuthenticated() {
437
+ return auth.isAuthenticated();
438
+ }
439
+ // ── Locale / API key ────────────────────────────────────────────────────
440
+ getLocale() {
441
+ return auth.getLocale();
442
+ }
443
+ setLocale(locale) {
444
+ auth.setLocale(locale);
445
+ }
446
+ getApiKey() {
447
+ return auth.getApiKey();
448
+ }
449
+ setApiKey(key) {
450
+ auth.setApiKey(key);
451
+ }
452
+ // ── 401 handling ────────────────────────────────────────────────────────
453
+ /** Fired only on terminal 401 (after refresh+retry path is exhausted). */
454
+ onUnauthorized(cb) {
455
+ auth.onUnauthorized(cb);
456
+ }
457
+ /** Provide a refresh strategy. See `auth.setRefreshHandler` for the contract. */
458
+ setRefreshHandler(fn) {
459
+ auth.setRefreshHandler(fn);
460
+ }
461
+ };
462
+
463
+ // src/_api/generated/_cfg_centrifugo/api.ts
464
+ var API2 = class {
465
+ static {
466
+ __name(this, "API");
467
+ }
468
+ logger;
469
+ constructor(_baseUrl, opts = {}) {
470
+ this.logger = new APILogger(opts.logger);
471
+ if (_baseUrl) auth.setBaseUrl(_baseUrl);
472
+ if (opts.locale !== void 0) auth.setLocale(opts.locale);
473
+ if (opts.apiKey !== void 0) auth.setApiKey(opts.apiKey);
474
+ if (opts.withCredentials !== void 0) auth.setWithCredentials(opts.withCredentials);
475
+ }
476
+ // ── Base URL ────────────────────────────────────────────────────────────
477
+ getBaseUrl() {
478
+ return auth.getBaseUrl();
479
+ }
480
+ setBaseUrl(url) {
481
+ auth.setBaseUrl(url);
482
+ }
483
+ // ── Tokens ──────────────────────────────────────────────────────────────
484
+ getToken() {
485
+ return auth.getToken();
486
+ }
487
+ setToken(token) {
488
+ auth.setToken(token);
489
+ }
490
+ getRefreshToken() {
491
+ return auth.getRefreshToken();
492
+ }
493
+ setRefreshToken(token) {
494
+ auth.setRefreshToken(token);
495
+ }
496
+ clearToken() {
497
+ auth.clearTokens();
498
+ }
499
+ isAuthenticated() {
500
+ return auth.isAuthenticated();
501
+ }
502
+ // ── Locale / API key ────────────────────────────────────────────────────
503
+ getLocale() {
504
+ return auth.getLocale();
505
+ }
506
+ setLocale(locale) {
507
+ auth.setLocale(locale);
508
+ }
509
+ getApiKey() {
510
+ return auth.getApiKey();
511
+ }
512
+ setApiKey(key) {
513
+ auth.setApiKey(key);
514
+ }
515
+ // ── 401 handling ────────────────────────────────────────────────────────
516
+ /** Fired only on terminal 401 (after refresh+retry path is exhausted). */
997
517
  onUnauthorized(cb) {
998
- _onUnauthorized = cb;
518
+ auth.onUnauthorized(cb);
999
519
  }
1000
- };
1001
- client.setConfig({
1002
- baseUrl: auth.getBaseUrl(),
1003
- credentials: _withCredentials ? "include" : "same-origin"
1004
- });
1005
- client.interceptors.request.use((request) => {
1006
- const token = auth.getToken();
1007
- if (token) request.headers.set("Authorization", `Bearer ${token}`);
1008
- const locale = auth.getLocale();
1009
- if (locale) request.headers.set("Accept-Language", locale);
1010
- const apiKey = auth.getApiKey();
1011
- if (apiKey) request.headers.set("X-API-Key", apiKey);
1012
- return request;
1013
- });
1014
- client.interceptors.response.use((response) => {
1015
- if (response.status === 401 && _onUnauthorized) {
1016
- try {
1017
- _onUnauthorized(response);
1018
- } catch {
1019
- }
520
+ /** Provide a refresh strategy. See `auth.setRefreshHandler` for the contract. */
521
+ setRefreshHandler(fn) {
522
+ auth.setRefreshHandler(fn);
1020
523
  }
1021
- return response;
1022
- });
1023
-
1024
- // src/_api/generated/helpers/logger.ts
1025
- import { createConsola } from "consola";
1026
- var DEFAULT_CONFIG = {
1027
- enabled: typeof process !== "undefined" && process.env.NODE_ENV !== "production",
1028
- logRequests: true,
1029
- logResponses: true,
1030
- logErrors: true,
1031
- logBodies: true,
1032
- logHeaders: false
1033
524
  };
1034
- var SENSITIVE_HEADERS = [
1035
- "authorization",
1036
- "cookie",
1037
- "set-cookie",
1038
- "x-api-key",
1039
- "x-csrf-token"
1040
- ];
1041
- var APILogger = class {
525
+
526
+ // src/_api/generated/_cfg_totp/api.ts
527
+ var API3 = class {
1042
528
  static {
1043
- __name(this, "APILogger");
529
+ __name(this, "API");
1044
530
  }
1045
- config;
1046
- consola;
1047
- constructor(config = {}) {
1048
- this.config = { ...DEFAULT_CONFIG, ...config };
1049
- this.consola = config.consola || createConsola({
1050
- level: this.config.enabled ? 4 : 0
1051
- });
531
+ logger;
532
+ constructor(_baseUrl, opts = {}) {
533
+ this.logger = new APILogger(opts.logger);
534
+ if (_baseUrl) auth.setBaseUrl(_baseUrl);
535
+ if (opts.locale !== void 0) auth.setLocale(opts.locale);
536
+ if (opts.apiKey !== void 0) auth.setApiKey(opts.apiKey);
537
+ if (opts.withCredentials !== void 0) auth.setWithCredentials(opts.withCredentials);
1052
538
  }
1053
- enable() {
1054
- this.config.enabled = true;
539
+ // ── Base URL ────────────────────────────────────────────────────────────
540
+ getBaseUrl() {
541
+ return auth.getBaseUrl();
1055
542
  }
1056
- disable() {
1057
- this.config.enabled = false;
543
+ setBaseUrl(url) {
544
+ auth.setBaseUrl(url);
1058
545
  }
1059
- setConfig(config) {
1060
- this.config = { ...this.config, ...config };
546
+ // ── Tokens ──────────────────────────────────────────────────────────────
547
+ getToken() {
548
+ return auth.getToken();
1061
549
  }
1062
- filterHeaders(headers) {
1063
- if (!headers) return {};
1064
- const filtered = {};
1065
- Object.keys(headers).forEach((key) => {
1066
- filtered[key] = SENSITIVE_HEADERS.includes(key.toLowerCase()) ? "***" : headers[key] || "";
1067
- });
1068
- return filtered;
550
+ setToken(token) {
551
+ auth.setToken(token);
1069
552
  }
1070
- logRequest(request) {
1071
- if (!this.config.enabled || !this.config.logRequests) return;
1072
- const { method, url, headers, body } = request;
1073
- this.consola.start(`${method} ${url}`);
1074
- if (this.config.logHeaders && headers) this.consola.debug("Headers:", this.filterHeaders(headers));
1075
- if (this.config.logBodies && body) this.consola.debug("Body:", body);
553
+ getRefreshToken() {
554
+ return auth.getRefreshToken();
1076
555
  }
1077
- logResponse(request, response) {
1078
- if (!this.config.enabled || !this.config.logResponses) return;
1079
- const { method, url } = request;
1080
- const { status, statusText, data, duration } = response;
1081
- this.consola.success(`${method} ${url} ${status} ${statusText} (${duration}ms)`);
1082
- if (this.config.logBodies && data) this.consola.debug("Response:", data);
556
+ setRefreshToken(token) {
557
+ auth.setRefreshToken(token);
1083
558
  }
1084
- logError(request, error) {
1085
- if (!this.config.enabled || !this.config.logErrors) return;
1086
- const { method, url } = request;
1087
- const { message, statusCode, fieldErrors, duration } = error;
1088
- this.consola.error(`${method} ${url} ${statusCode || "Network"} Error (${duration}ms)`);
1089
- this.consola.error("Message:", message);
1090
- if (fieldErrors && Object.keys(fieldErrors).length > 0) {
1091
- this.consola.error("Field Errors:");
1092
- Object.entries(fieldErrors).forEach(([field, errors]) => {
1093
- errors.forEach((err) => this.consola.error(` \u2022 ${field}: ${err}`));
1094
- });
1095
- }
559
+ clearToken() {
560
+ auth.clearTokens();
1096
561
  }
1097
- info(message, ...args) {
1098
- if (this.config.enabled) this.consola.info(message, ...args);
562
+ isAuthenticated() {
563
+ return auth.isAuthenticated();
1099
564
  }
1100
- warn(message, ...args) {
1101
- if (this.config.enabled) this.consola.warn(message, ...args);
565
+ // ── Locale / API key ────────────────────────────────────────────────────
566
+ getLocale() {
567
+ return auth.getLocale();
1102
568
  }
1103
- error(message, ...args) {
1104
- if (this.config.enabled) this.consola.error(message, ...args);
569
+ setLocale(locale) {
570
+ auth.setLocale(locale);
1105
571
  }
1106
- debug(message, ...args) {
1107
- if (this.config.enabled) this.consola.debug(message, ...args);
572
+ getApiKey() {
573
+ return auth.getApiKey();
1108
574
  }
1109
- success(message, ...args) {
1110
- if (this.config.enabled) this.consola.success(message, ...args);
575
+ setApiKey(key) {
576
+ auth.setApiKey(key);
1111
577
  }
1112
- withTag(tag) {
1113
- return this.consola.withTag(tag);
578
+ // ── 401 handling ────────────────────────────────────────────────────────
579
+ /** Fired only on terminal 401 (after refresh+retry path is exhausted). */
580
+ onUnauthorized(cb) {
581
+ auth.onUnauthorized(cb);
582
+ }
583
+ /** Provide a refresh strategy. See `auth.setRefreshHandler` for the contract. */
584
+ setRefreshHandler(fn) {
585
+ auth.setRefreshHandler(fn);
1114
586
  }
1115
587
  };
1116
- var defaultLogger = new APILogger();
1117
588
 
1118
- // src/_api/generated/_cfg_accounts/api.ts
1119
- var API = class {
1120
- static {
1121
- __name(this, "API");
1122
- }
1123
- logger;
1124
- constructor(_baseUrl, opts = {}) {
1125
- this.logger = new APILogger(opts.logger);
1126
- if (_baseUrl) auth.setBaseUrl(_baseUrl);
1127
- if (opts.locale !== void 0) auth.setLocale(opts.locale);
1128
- if (opts.apiKey !== void 0) auth.setApiKey(opts.apiKey);
1129
- if (opts.withCredentials !== void 0) auth.setWithCredentials(opts.withCredentials);
1130
- }
1131
- // ── Base URL ────────────────────────────────────────────────────────────
1132
- getBaseUrl() {
1133
- return auth.getBaseUrl();
1134
- }
1135
- setBaseUrl(url) {
1136
- auth.setBaseUrl(url);
1137
- }
1138
- // ── Tokens ──────────────────────────────────────────────────────────────
1139
- getToken() {
1140
- return auth.getToken();
1141
- }
1142
- setToken(token) {
1143
- auth.setToken(token);
1144
- }
1145
- getRefreshToken() {
1146
- return auth.getRefreshToken();
589
+ // src/_api/generated/index.ts
590
+ var CfgAccountsApi = new API();
591
+ var CfgCentrifugoApi = new API2();
592
+ var CfgTotpApi = new API3();
593
+
594
+ // src/_api/generated/core/bodySerializer.gen.ts
595
+ var jsonBodySerializer = {
596
+ bodySerializer: /* @__PURE__ */ __name((body) => JSON.stringify(body, (_key, value) => typeof value === "bigint" ? value.toString() : value), "bodySerializer")
597
+ };
598
+
599
+ // src/_api/generated/core/params.gen.ts
600
+ var extraPrefixesMap = {
601
+ $body_: "body",
602
+ $headers_: "headers",
603
+ $path_: "path",
604
+ $query_: "query"
605
+ };
606
+ var extraPrefixes = Object.entries(extraPrefixesMap);
607
+
608
+ // src/_api/generated/core/serverSentEvents.gen.ts
609
+ function createSseClient({
610
+ onRequest,
611
+ onSseError,
612
+ onSseEvent,
613
+ responseTransformer,
614
+ responseValidator,
615
+ sseDefaultRetryDelay,
616
+ sseMaxRetryAttempts,
617
+ sseMaxRetryDelay,
618
+ sseSleepFn,
619
+ url,
620
+ ...options
621
+ }) {
622
+ let lastEventId;
623
+ const sleep = sseSleepFn ?? ((ms) => new Promise((resolve) => setTimeout(resolve, ms)));
624
+ const createStream = /* @__PURE__ */ __name(async function* () {
625
+ let retryDelay = sseDefaultRetryDelay ?? 3e3;
626
+ let attempt = 0;
627
+ const signal = options.signal ?? new AbortController().signal;
628
+ while (true) {
629
+ if (signal.aborted) break;
630
+ attempt++;
631
+ const headers = options.headers instanceof Headers ? options.headers : new Headers(options.headers);
632
+ if (lastEventId !== void 0) {
633
+ headers.set("Last-Event-ID", lastEventId);
634
+ }
635
+ try {
636
+ const requestInit = {
637
+ redirect: "follow",
638
+ ...options,
639
+ body: options.serializedBody,
640
+ headers,
641
+ signal
642
+ };
643
+ let request = new Request(url, requestInit);
644
+ if (onRequest) {
645
+ request = await onRequest(url, requestInit);
646
+ }
647
+ const _fetch = options.fetch ?? globalThis.fetch;
648
+ const response = await _fetch(request);
649
+ if (!response.ok) throw new Error(`SSE failed: ${response.status} ${response.statusText}`);
650
+ if (!response.body) throw new Error("No body in SSE response");
651
+ const reader = response.body.pipeThrough(new TextDecoderStream()).getReader();
652
+ let buffer = "";
653
+ const abortHandler = /* @__PURE__ */ __name(() => {
654
+ try {
655
+ reader.cancel();
656
+ } catch {
657
+ }
658
+ }, "abortHandler");
659
+ signal.addEventListener("abort", abortHandler);
660
+ try {
661
+ while (true) {
662
+ const { done, value } = await reader.read();
663
+ if (done) break;
664
+ buffer += value;
665
+ buffer = buffer.replace(/\r\n?/g, "\n");
666
+ const chunks = buffer.split("\n\n");
667
+ buffer = chunks.pop() ?? "";
668
+ for (const chunk of chunks) {
669
+ const lines = chunk.split("\n");
670
+ const dataLines = [];
671
+ let eventName;
672
+ for (const line of lines) {
673
+ if (line.startsWith("data:")) {
674
+ dataLines.push(line.replace(/^data:\s*/, ""));
675
+ } else if (line.startsWith("event:")) {
676
+ eventName = line.replace(/^event:\s*/, "");
677
+ } else if (line.startsWith("id:")) {
678
+ lastEventId = line.replace(/^id:\s*/, "");
679
+ } else if (line.startsWith("retry:")) {
680
+ const parsed = Number.parseInt(line.replace(/^retry:\s*/, ""), 10);
681
+ if (!Number.isNaN(parsed)) {
682
+ retryDelay = parsed;
683
+ }
684
+ }
685
+ }
686
+ let data;
687
+ let parsedJson = false;
688
+ if (dataLines.length) {
689
+ const rawData = dataLines.join("\n");
690
+ try {
691
+ data = JSON.parse(rawData);
692
+ parsedJson = true;
693
+ } catch {
694
+ data = rawData;
695
+ }
696
+ }
697
+ if (parsedJson) {
698
+ if (responseValidator) {
699
+ await responseValidator(data);
700
+ }
701
+ if (responseTransformer) {
702
+ data = await responseTransformer(data);
703
+ }
704
+ }
705
+ onSseEvent?.({
706
+ data,
707
+ event: eventName,
708
+ id: lastEventId,
709
+ retry: retryDelay
710
+ });
711
+ if (dataLines.length) {
712
+ yield data;
713
+ }
714
+ }
715
+ }
716
+ } finally {
717
+ signal.removeEventListener("abort", abortHandler);
718
+ reader.releaseLock();
719
+ }
720
+ break;
721
+ } catch (error) {
722
+ onSseError?.(error);
723
+ if (sseMaxRetryAttempts !== void 0 && attempt >= sseMaxRetryAttempts) {
724
+ break;
725
+ }
726
+ const backoff = Math.min(retryDelay * 2 ** (attempt - 1), sseMaxRetryDelay ?? 3e4);
727
+ await sleep(backoff);
728
+ }
729
+ }
730
+ }, "createStream");
731
+ const stream = createStream();
732
+ return { stream };
733
+ }
734
+ __name(createSseClient, "createSseClient");
735
+
736
+ // src/_api/generated/core/pathSerializer.gen.ts
737
+ var separatorArrayExplode = /* @__PURE__ */ __name((style) => {
738
+ switch (style) {
739
+ case "label":
740
+ return ".";
741
+ case "matrix":
742
+ return ";";
743
+ case "simple":
744
+ return ",";
745
+ default:
746
+ return "&";
1147
747
  }
1148
- setRefreshToken(token) {
1149
- auth.setRefreshToken(token);
748
+ }, "separatorArrayExplode");
749
+ var separatorArrayNoExplode = /* @__PURE__ */ __name((style) => {
750
+ switch (style) {
751
+ case "form":
752
+ return ",";
753
+ case "pipeDelimited":
754
+ return "|";
755
+ case "spaceDelimited":
756
+ return "%20";
757
+ default:
758
+ return ",";
1150
759
  }
1151
- clearToken() {
1152
- auth.clearTokens();
760
+ }, "separatorArrayNoExplode");
761
+ var separatorObjectExplode = /* @__PURE__ */ __name((style) => {
762
+ switch (style) {
763
+ case "label":
764
+ return ".";
765
+ case "matrix":
766
+ return ";";
767
+ case "simple":
768
+ return ",";
769
+ default:
770
+ return "&";
1153
771
  }
1154
- isAuthenticated() {
1155
- return auth.isAuthenticated();
772
+ }, "separatorObjectExplode");
773
+ var serializeArrayParam = /* @__PURE__ */ __name(({
774
+ allowReserved,
775
+ explode,
776
+ name,
777
+ style,
778
+ value
779
+ }) => {
780
+ if (!explode) {
781
+ const joinedValues2 = (allowReserved ? value : value.map((v) => encodeURIComponent(v))).join(separatorArrayNoExplode(style));
782
+ switch (style) {
783
+ case "label":
784
+ return `.${joinedValues2}`;
785
+ case "matrix":
786
+ return `;${name}=${joinedValues2}`;
787
+ case "simple":
788
+ return joinedValues2;
789
+ default:
790
+ return `${name}=${joinedValues2}`;
791
+ }
1156
792
  }
1157
- // ── Locale / API key ────────────────────────────────────────────────────
1158
- getLocale() {
1159
- return auth.getLocale();
793
+ const separator = separatorArrayExplode(style);
794
+ const joinedValues = value.map((v) => {
795
+ if (style === "label" || style === "simple") {
796
+ return allowReserved ? v : encodeURIComponent(v);
797
+ }
798
+ return serializePrimitiveParam({
799
+ allowReserved,
800
+ name,
801
+ value: v
802
+ });
803
+ }).join(separator);
804
+ return style === "label" || style === "matrix" ? separator + joinedValues : joinedValues;
805
+ }, "serializeArrayParam");
806
+ var serializePrimitiveParam = /* @__PURE__ */ __name(({
807
+ allowReserved,
808
+ name,
809
+ value
810
+ }) => {
811
+ if (value === void 0 || value === null) {
812
+ return "";
1160
813
  }
1161
- setLocale(locale) {
1162
- auth.setLocale(locale);
814
+ if (typeof value === "object") {
815
+ throw new Error(
816
+ "Deeply-nested arrays/objects aren\u2019t supported. Provide your own `querySerializer()` to handle these."
817
+ );
1163
818
  }
1164
- getApiKey() {
1165
- return auth.getApiKey();
819
+ return `${name}=${allowReserved ? value : encodeURIComponent(value)}`;
820
+ }, "serializePrimitiveParam");
821
+ var serializeObjectParam = /* @__PURE__ */ __name(({
822
+ allowReserved,
823
+ explode,
824
+ name,
825
+ style,
826
+ value,
827
+ valueOnly
828
+ }) => {
829
+ if (value instanceof Date) {
830
+ return valueOnly ? value.toISOString() : `${name}=${value.toISOString()}`;
1166
831
  }
1167
- setApiKey(key) {
1168
- auth.setApiKey(key);
832
+ if (style !== "deepObject" && !explode) {
833
+ let values = [];
834
+ Object.entries(value).forEach(([key, v]) => {
835
+ values = [...values, key, allowReserved ? v : encodeURIComponent(v)];
836
+ });
837
+ const joinedValues2 = values.join(",");
838
+ switch (style) {
839
+ case "form":
840
+ return `${name}=${joinedValues2}`;
841
+ case "label":
842
+ return `.${joinedValues2}`;
843
+ case "matrix":
844
+ return `;${name}=${joinedValues2}`;
845
+ default:
846
+ return joinedValues2;
847
+ }
1169
848
  }
1170
- };
849
+ const separator = separatorObjectExplode(style);
850
+ const joinedValues = Object.entries(value).map(
851
+ ([key, v]) => serializePrimitiveParam({
852
+ allowReserved,
853
+ name: style === "deepObject" ? `${name}[${key}]` : key,
854
+ value: v
855
+ })
856
+ ).join(separator);
857
+ return style === "label" || style === "matrix" ? separator + joinedValues : joinedValues;
858
+ }, "serializeObjectParam");
1171
859
 
1172
- // src/_api/generated/_cfg_centrifugo/api.ts
1173
- var API2 = class {
1174
- static {
1175
- __name(this, "API");
860
+ // src/_api/generated/core/utils.gen.ts
861
+ var PATH_PARAM_RE = /\{[^{}]+\}/g;
862
+ var defaultPathSerializer = /* @__PURE__ */ __name(({ path, url: _url }) => {
863
+ let url = _url;
864
+ const matches = _url.match(PATH_PARAM_RE);
865
+ if (matches) {
866
+ for (const match of matches) {
867
+ let explode = false;
868
+ let name = match.substring(1, match.length - 1);
869
+ let style = "simple";
870
+ if (name.endsWith("*")) {
871
+ explode = true;
872
+ name = name.substring(0, name.length - 1);
873
+ }
874
+ if (name.startsWith(".")) {
875
+ name = name.substring(1);
876
+ style = "label";
877
+ } else if (name.startsWith(";")) {
878
+ name = name.substring(1);
879
+ style = "matrix";
880
+ }
881
+ const value = path[name];
882
+ if (value === void 0 || value === null) {
883
+ continue;
884
+ }
885
+ if (Array.isArray(value)) {
886
+ url = url.replace(match, serializeArrayParam({ explode, name, style, value }));
887
+ continue;
888
+ }
889
+ if (typeof value === "object") {
890
+ url = url.replace(
891
+ match,
892
+ serializeObjectParam({
893
+ explode,
894
+ name,
895
+ style,
896
+ value,
897
+ valueOnly: true
898
+ })
899
+ );
900
+ continue;
901
+ }
902
+ if (style === "matrix") {
903
+ url = url.replace(
904
+ match,
905
+ `;${serializePrimitiveParam({
906
+ name,
907
+ value
908
+ })}`
909
+ );
910
+ continue;
911
+ }
912
+ const replaceValue = encodeURIComponent(
913
+ style === "label" ? `.${value}` : value
914
+ );
915
+ url = url.replace(match, replaceValue);
916
+ }
1176
917
  }
1177
- logger;
1178
- constructor(_baseUrl, opts = {}) {
1179
- this.logger = new APILogger(opts.logger);
1180
- if (_baseUrl) auth.setBaseUrl(_baseUrl);
1181
- if (opts.locale !== void 0) auth.setLocale(opts.locale);
1182
- if (opts.apiKey !== void 0) auth.setApiKey(opts.apiKey);
1183
- if (opts.withCredentials !== void 0) auth.setWithCredentials(opts.withCredentials);
918
+ return url;
919
+ }, "defaultPathSerializer");
920
+ var getUrl = /* @__PURE__ */ __name(({
921
+ baseUrl,
922
+ path,
923
+ query,
924
+ querySerializer,
925
+ url: _url
926
+ }) => {
927
+ const pathUrl = _url.startsWith("/") ? _url : `/${_url}`;
928
+ let url = (baseUrl ?? "") + pathUrl;
929
+ if (path) {
930
+ url = defaultPathSerializer({ path, url });
1184
931
  }
1185
- // ── Base URL ────────────────────────────────────────────────────────────
1186
- getBaseUrl() {
1187
- return auth.getBaseUrl();
932
+ let search = query ? querySerializer(query) : "";
933
+ if (search.startsWith("?")) {
934
+ search = search.substring(1);
1188
935
  }
1189
- setBaseUrl(url) {
1190
- auth.setBaseUrl(url);
936
+ if (search) {
937
+ url += `?${search}`;
1191
938
  }
1192
- // ── Tokens ──────────────────────────────────────────────────────────────
1193
- getToken() {
1194
- return auth.getToken();
939
+ return url;
940
+ }, "getUrl");
941
+ function getValidRequestBody(options) {
942
+ const hasBody = options.body !== void 0;
943
+ const isSerializedBody = hasBody && options.bodySerializer;
944
+ if (isSerializedBody) {
945
+ if ("serializedBody" in options) {
946
+ const hasSerializedBody = options.serializedBody !== void 0 && options.serializedBody !== "";
947
+ return hasSerializedBody ? options.serializedBody : null;
948
+ }
949
+ return options.body !== "" ? options.body : null;
1195
950
  }
1196
- setToken(token) {
1197
- auth.setToken(token);
951
+ if (hasBody) {
952
+ return options.body;
1198
953
  }
1199
- getRefreshToken() {
1200
- return auth.getRefreshToken();
954
+ return void 0;
955
+ }
956
+ __name(getValidRequestBody, "getValidRequestBody");
957
+
958
+ // src/_api/generated/core/auth.gen.ts
959
+ var getAuthToken = /* @__PURE__ */ __name(async (auth2, callback) => {
960
+ const token = typeof callback === "function" ? await callback(auth2) : callback;
961
+ if (!token) {
962
+ return;
1201
963
  }
1202
- setRefreshToken(token) {
1203
- auth.setRefreshToken(token);
964
+ if (auth2.scheme === "bearer") {
965
+ return `Bearer ${token}`;
1204
966
  }
1205
- clearToken() {
1206
- auth.clearTokens();
967
+ if (auth2.scheme === "basic") {
968
+ return `Basic ${btoa(token)}`;
1207
969
  }
1208
- isAuthenticated() {
1209
- return auth.isAuthenticated();
970
+ return token;
971
+ }, "getAuthToken");
972
+
973
+ // src/_api/generated/client/utils.gen.ts
974
+ var createQuerySerializer = /* @__PURE__ */ __name(({
975
+ parameters = {},
976
+ ...args
977
+ } = {}) => {
978
+ const querySerializer = /* @__PURE__ */ __name((queryParams) => {
979
+ const search = [];
980
+ if (queryParams && typeof queryParams === "object") {
981
+ for (const name in queryParams) {
982
+ const value = queryParams[name];
983
+ if (value === void 0 || value === null) {
984
+ continue;
985
+ }
986
+ const options = parameters[name] || args;
987
+ if (Array.isArray(value)) {
988
+ const serializedArray = serializeArrayParam({
989
+ allowReserved: options.allowReserved,
990
+ explode: true,
991
+ name,
992
+ style: "form",
993
+ value,
994
+ ...options.array
995
+ });
996
+ if (serializedArray) search.push(serializedArray);
997
+ } else if (typeof value === "object") {
998
+ const serializedObject = serializeObjectParam({
999
+ allowReserved: options.allowReserved,
1000
+ explode: true,
1001
+ name,
1002
+ style: "deepObject",
1003
+ value,
1004
+ ...options.object
1005
+ });
1006
+ if (serializedObject) search.push(serializedObject);
1007
+ } else {
1008
+ const serializedPrimitive = serializePrimitiveParam({
1009
+ allowReserved: options.allowReserved,
1010
+ name,
1011
+ value
1012
+ });
1013
+ if (serializedPrimitive) search.push(serializedPrimitive);
1014
+ }
1015
+ }
1016
+ }
1017
+ return search.join("&");
1018
+ }, "querySerializer");
1019
+ return querySerializer;
1020
+ }, "createQuerySerializer");
1021
+ var getParseAs = /* @__PURE__ */ __name((contentType) => {
1022
+ if (!contentType) {
1023
+ return "stream";
1210
1024
  }
1211
- // ── Locale / API key ────────────────────────────────────────────────────
1212
- getLocale() {
1213
- return auth.getLocale();
1025
+ const cleanContent = contentType.split(";")[0]?.trim();
1026
+ if (!cleanContent) {
1027
+ return;
1214
1028
  }
1215
- setLocale(locale) {
1216
- auth.setLocale(locale);
1029
+ if (cleanContent.startsWith("application/json") || cleanContent.endsWith("+json")) {
1030
+ return "json";
1217
1031
  }
1218
- getApiKey() {
1219
- return auth.getApiKey();
1032
+ if (cleanContent === "multipart/form-data") {
1033
+ return "formData";
1220
1034
  }
1221
- setApiKey(key) {
1222
- auth.setApiKey(key);
1035
+ if (["application/", "audio/", "image/", "video/"].some((type) => cleanContent.startsWith(type))) {
1036
+ return "blob";
1223
1037
  }
1224
- };
1225
-
1226
- // src/_api/generated/_cfg_totp/api.ts
1227
- var API3 = class {
1228
- static {
1229
- __name(this, "API");
1038
+ if (cleanContent.startsWith("text/")) {
1039
+ return "text";
1230
1040
  }
1231
- logger;
1232
- constructor(_baseUrl, opts = {}) {
1233
- this.logger = new APILogger(opts.logger);
1234
- if (_baseUrl) auth.setBaseUrl(_baseUrl);
1235
- if (opts.locale !== void 0) auth.setLocale(opts.locale);
1236
- if (opts.apiKey !== void 0) auth.setApiKey(opts.apiKey);
1237
- if (opts.withCredentials !== void 0) auth.setWithCredentials(opts.withCredentials);
1041
+ return;
1042
+ }, "getParseAs");
1043
+ var checkForExistence = /* @__PURE__ */ __name((options, name) => {
1044
+ if (!name) {
1045
+ return false;
1238
1046
  }
1239
- // ── Base URL ────────────────────────────────────────────────────────────
1240
- getBaseUrl() {
1241
- return auth.getBaseUrl();
1047
+ if (options.headers.has(name) || options.query?.[name] || options.headers.get("Cookie")?.includes(`${name}=`)) {
1048
+ return true;
1242
1049
  }
1243
- setBaseUrl(url) {
1244
- auth.setBaseUrl(url);
1050
+ return false;
1051
+ }, "checkForExistence");
1052
+ var setAuthParams = /* @__PURE__ */ __name(async ({
1053
+ security,
1054
+ ...options
1055
+ }) => {
1056
+ for (const auth2 of security) {
1057
+ if (checkForExistence(options, auth2.name)) {
1058
+ continue;
1059
+ }
1060
+ const token = await getAuthToken(auth2, options.auth);
1061
+ if (!token) {
1062
+ continue;
1063
+ }
1064
+ const name = auth2.name ?? "Authorization";
1065
+ switch (auth2.in) {
1066
+ case "query":
1067
+ if (!options.query) {
1068
+ options.query = {};
1069
+ }
1070
+ options.query[name] = token;
1071
+ break;
1072
+ case "cookie":
1073
+ options.headers.append("Cookie", `${name}=${token}`);
1074
+ break;
1075
+ case "header":
1076
+ default:
1077
+ options.headers.set(name, token);
1078
+ break;
1079
+ }
1245
1080
  }
1246
- // ── Tokens ──────────────────────────────────────────────────────────────
1247
- getToken() {
1248
- return auth.getToken();
1081
+ }, "setAuthParams");
1082
+ var buildUrl = /* @__PURE__ */ __name((options) => getUrl({
1083
+ baseUrl: options.baseUrl,
1084
+ path: options.path,
1085
+ query: options.query,
1086
+ querySerializer: typeof options.querySerializer === "function" ? options.querySerializer : createQuerySerializer(options.querySerializer),
1087
+ url: options.url
1088
+ }), "buildUrl");
1089
+ var mergeConfigs = /* @__PURE__ */ __name((a, b) => {
1090
+ const config = { ...a, ...b };
1091
+ if (config.baseUrl?.endsWith("/")) {
1092
+ config.baseUrl = config.baseUrl.substring(0, config.baseUrl.length - 1);
1249
1093
  }
1250
- setToken(token) {
1251
- auth.setToken(token);
1094
+ config.headers = mergeHeaders(a.headers, b.headers);
1095
+ return config;
1096
+ }, "mergeConfigs");
1097
+ var headersEntries = /* @__PURE__ */ __name((headers) => {
1098
+ const entries = [];
1099
+ headers.forEach((value, key) => {
1100
+ entries.push([key, value]);
1101
+ });
1102
+ return entries;
1103
+ }, "headersEntries");
1104
+ var mergeHeaders = /* @__PURE__ */ __name((...headers) => {
1105
+ const mergedHeaders = new Headers();
1106
+ for (const header of headers) {
1107
+ if (!header) {
1108
+ continue;
1109
+ }
1110
+ const iterator = header instanceof Headers ? headersEntries(header) : Object.entries(header);
1111
+ for (const [key, value] of iterator) {
1112
+ if (value === null) {
1113
+ mergedHeaders.delete(key);
1114
+ } else if (Array.isArray(value)) {
1115
+ for (const v of value) {
1116
+ mergedHeaders.append(key, v);
1117
+ }
1118
+ } else if (value !== void 0) {
1119
+ mergedHeaders.set(
1120
+ key,
1121
+ typeof value === "object" ? JSON.stringify(value) : value
1122
+ );
1123
+ }
1124
+ }
1252
1125
  }
1253
- getRefreshToken() {
1254
- return auth.getRefreshToken();
1126
+ return mergedHeaders;
1127
+ }, "mergeHeaders");
1128
+ var Interceptors = class {
1129
+ static {
1130
+ __name(this, "Interceptors");
1255
1131
  }
1256
- setRefreshToken(token) {
1257
- auth.setRefreshToken(token);
1132
+ fns = [];
1133
+ clear() {
1134
+ this.fns = [];
1258
1135
  }
1259
- clearToken() {
1260
- auth.clearTokens();
1136
+ eject(id) {
1137
+ const index = this.getInterceptorIndex(id);
1138
+ if (this.fns[index]) {
1139
+ this.fns[index] = null;
1140
+ }
1261
1141
  }
1262
- isAuthenticated() {
1263
- return auth.isAuthenticated();
1142
+ exists(id) {
1143
+ const index = this.getInterceptorIndex(id);
1144
+ return Boolean(this.fns[index]);
1264
1145
  }
1265
- // ── Locale / API key ────────────────────────────────────────────────────
1266
- getLocale() {
1267
- return auth.getLocale();
1146
+ getInterceptorIndex(id) {
1147
+ if (typeof id === "number") {
1148
+ return this.fns[id] ? id : -1;
1149
+ }
1150
+ return this.fns.indexOf(id);
1268
1151
  }
1269
- setLocale(locale) {
1270
- auth.setLocale(locale);
1152
+ update(id, fn) {
1153
+ const index = this.getInterceptorIndex(id);
1154
+ if (this.fns[index]) {
1155
+ this.fns[index] = fn;
1156
+ return id;
1157
+ }
1158
+ return false;
1271
1159
  }
1272
- getApiKey() {
1273
- return auth.getApiKey();
1160
+ use(fn) {
1161
+ this.fns.push(fn);
1162
+ return this.fns.length - 1;
1274
1163
  }
1275
- setApiKey(key) {
1276
- auth.setApiKey(key);
1164
+ };
1165
+ var createInterceptors = /* @__PURE__ */ __name(() => ({
1166
+ error: new Interceptors(),
1167
+ request: new Interceptors(),
1168
+ response: new Interceptors()
1169
+ }), "createInterceptors");
1170
+ var defaultQuerySerializer = createQuerySerializer({
1171
+ allowReserved: false,
1172
+ array: {
1173
+ explode: true,
1174
+ style: "form"
1175
+ },
1176
+ object: {
1177
+ explode: true,
1178
+ style: "deepObject"
1277
1179
  }
1180
+ });
1181
+ var defaultHeaders = {
1182
+ "Content-Type": "application/json"
1278
1183
  };
1184
+ var createConfig = /* @__PURE__ */ __name((override = {}) => ({
1185
+ ...jsonBodySerializer,
1186
+ headers: defaultHeaders,
1187
+ parseAs: "auto",
1188
+ querySerializer: defaultQuerySerializer,
1189
+ ...override
1190
+ }), "createConfig");
1279
1191
 
1280
- // src/_api/generated/index.ts
1281
- var CfgAccountsApi = new API();
1282
- var CfgCentrifugoApi = new API2();
1283
- var CfgTotpApi = new API3();
1192
+ // src/_api/generated/client/client.gen.ts
1193
+ var createClient = /* @__PURE__ */ __name((config = {}) => {
1194
+ let _config = mergeConfigs(createConfig(), config);
1195
+ const getConfig = /* @__PURE__ */ __name(() => ({ ..._config }), "getConfig");
1196
+ const setConfig = /* @__PURE__ */ __name((config2) => {
1197
+ _config = mergeConfigs(_config, config2);
1198
+ return getConfig();
1199
+ }, "setConfig");
1200
+ const interceptors = createInterceptors();
1201
+ const beforeRequest = /* @__PURE__ */ __name(async (options) => {
1202
+ const opts = {
1203
+ ..._config,
1204
+ ...options,
1205
+ fetch: options.fetch ?? _config.fetch ?? globalThis.fetch,
1206
+ headers: mergeHeaders(_config.headers, options.headers),
1207
+ serializedBody: void 0
1208
+ };
1209
+ if (opts.security) {
1210
+ await setAuthParams({
1211
+ ...opts,
1212
+ security: opts.security
1213
+ });
1214
+ }
1215
+ if (opts.requestValidator) {
1216
+ await opts.requestValidator(opts);
1217
+ }
1218
+ if (opts.body !== void 0 && opts.bodySerializer) {
1219
+ opts.serializedBody = opts.bodySerializer(opts.body);
1220
+ }
1221
+ if (opts.body === void 0 || opts.serializedBody === "") {
1222
+ opts.headers.delete("Content-Type");
1223
+ }
1224
+ const resolvedOpts = opts;
1225
+ const url = buildUrl(resolvedOpts);
1226
+ return { opts: resolvedOpts, url };
1227
+ }, "beforeRequest");
1228
+ const request = /* @__PURE__ */ __name(async (options) => {
1229
+ const throwOnError = options.throwOnError ?? _config.throwOnError;
1230
+ const responseStyle = options.responseStyle ?? _config.responseStyle;
1231
+ let request2;
1232
+ let response;
1233
+ try {
1234
+ const { opts, url } = await beforeRequest(options);
1235
+ const requestInit = {
1236
+ redirect: "follow",
1237
+ ...opts,
1238
+ body: getValidRequestBody(opts)
1239
+ };
1240
+ request2 = new Request(url, requestInit);
1241
+ for (const fn of interceptors.request.fns) {
1242
+ if (fn) {
1243
+ request2 = await fn(request2, opts);
1244
+ }
1245
+ }
1246
+ const _fetch = opts.fetch;
1247
+ response = await _fetch(request2);
1248
+ for (const fn of interceptors.response.fns) {
1249
+ if (fn) {
1250
+ response = await fn(response, request2, opts);
1251
+ }
1252
+ }
1253
+ const result = {
1254
+ request: request2,
1255
+ response
1256
+ };
1257
+ if (response.ok) {
1258
+ const parseAs = (opts.parseAs === "auto" ? getParseAs(response.headers.get("Content-Type")) : opts.parseAs) ?? "json";
1259
+ if (response.status === 204 || response.headers.get("Content-Length") === "0") {
1260
+ let emptyData;
1261
+ switch (parseAs) {
1262
+ case "arrayBuffer":
1263
+ case "blob":
1264
+ case "text":
1265
+ emptyData = await response[parseAs]();
1266
+ break;
1267
+ case "formData":
1268
+ emptyData = new FormData();
1269
+ break;
1270
+ case "stream":
1271
+ emptyData = response.body;
1272
+ break;
1273
+ case "json":
1274
+ default:
1275
+ emptyData = {};
1276
+ break;
1277
+ }
1278
+ return opts.responseStyle === "data" ? emptyData : {
1279
+ data: emptyData,
1280
+ ...result
1281
+ };
1282
+ }
1283
+ let data;
1284
+ switch (parseAs) {
1285
+ case "arrayBuffer":
1286
+ case "blob":
1287
+ case "formData":
1288
+ case "text":
1289
+ data = await response[parseAs]();
1290
+ break;
1291
+ case "json": {
1292
+ const text = await response.text();
1293
+ data = text ? JSON.parse(text) : {};
1294
+ break;
1295
+ }
1296
+ case "stream":
1297
+ return opts.responseStyle === "data" ? response.body : {
1298
+ data: response.body,
1299
+ ...result
1300
+ };
1301
+ }
1302
+ if (parseAs === "json") {
1303
+ if (opts.responseValidator) {
1304
+ await opts.responseValidator(data);
1305
+ }
1306
+ if (opts.responseTransformer) {
1307
+ data = await opts.responseTransformer(data);
1308
+ }
1309
+ }
1310
+ return opts.responseStyle === "data" ? data : {
1311
+ data,
1312
+ ...result
1313
+ };
1314
+ }
1315
+ const textError = await response.text();
1316
+ let jsonError;
1317
+ try {
1318
+ jsonError = JSON.parse(textError);
1319
+ } catch {
1320
+ }
1321
+ throw jsonError ?? textError;
1322
+ } catch (error) {
1323
+ let finalError = error;
1324
+ for (const fn of interceptors.error.fns) {
1325
+ if (fn) {
1326
+ finalError = await fn(finalError, response, request2, options);
1327
+ }
1328
+ }
1329
+ finalError = finalError || {};
1330
+ if (throwOnError) {
1331
+ throw finalError;
1332
+ }
1333
+ return responseStyle === "data" ? void 0 : {
1334
+ error: finalError,
1335
+ request: request2,
1336
+ response
1337
+ };
1338
+ }
1339
+ }, "request");
1340
+ const makeMethodFn = /* @__PURE__ */ __name((method) => (options) => request({ ...options, method }), "makeMethodFn");
1341
+ const makeSseFn = /* @__PURE__ */ __name((method) => async (options) => {
1342
+ const { opts, url } = await beforeRequest(options);
1343
+ return createSseClient({
1344
+ ...opts,
1345
+ body: opts.body,
1346
+ method,
1347
+ onRequest: /* @__PURE__ */ __name(async (url2, init) => {
1348
+ let request2 = new Request(url2, init);
1349
+ for (const fn of interceptors.request.fns) {
1350
+ if (fn) {
1351
+ request2 = await fn(request2, opts);
1352
+ }
1353
+ }
1354
+ return request2;
1355
+ }, "onRequest"),
1356
+ serializedBody: getValidRequestBody(opts),
1357
+ url
1358
+ });
1359
+ }, "makeSseFn");
1360
+ const _buildUrl = /* @__PURE__ */ __name((options) => buildUrl({ ..._config, ...options }), "_buildUrl");
1361
+ return {
1362
+ buildUrl: _buildUrl,
1363
+ connect: makeMethodFn("CONNECT"),
1364
+ delete: makeMethodFn("DELETE"),
1365
+ get: makeMethodFn("GET"),
1366
+ getConfig,
1367
+ head: makeMethodFn("HEAD"),
1368
+ interceptors,
1369
+ options: makeMethodFn("OPTIONS"),
1370
+ patch: makeMethodFn("PATCH"),
1371
+ post: makeMethodFn("POST"),
1372
+ put: makeMethodFn("PUT"),
1373
+ request,
1374
+ setConfig,
1375
+ sse: {
1376
+ connect: makeSseFn("CONNECT"),
1377
+ delete: makeSseFn("DELETE"),
1378
+ get: makeSseFn("GET"),
1379
+ head: makeSseFn("HEAD"),
1380
+ options: makeSseFn("OPTIONS"),
1381
+ patch: makeSseFn("PATCH"),
1382
+ post: makeSseFn("POST"),
1383
+ put: makeSseFn("PUT"),
1384
+ trace: makeSseFn("TRACE")
1385
+ },
1386
+ trace: makeMethodFn("TRACE")
1387
+ };
1388
+ }, "createClient");
1389
+
1390
+ // src/_api/generated/client.gen.ts
1391
+ var client = createClient(createConfig({ baseUrl: "http://localhost:8000" }));
1392
+ installAuthOnClient(client);
1284
1393
 
1285
1394
  // src/_api/generated/sdk.gen.ts
1286
1395
  var Auth = class {