@djangocfg/api 2.1.331 → 2.1.333

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