@djangocfg/monitor 2.1.331 → 2.1.332

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/client.mjs CHANGED
@@ -431,15 +431,15 @@ function getValidRequestBody(options) {
431
431
  __name(getValidRequestBody, "getValidRequestBody");
432
432
 
433
433
  // src/_api/generated/core/auth.gen.ts
434
- var getAuthToken = /* @__PURE__ */ __name(async (auth, callback) => {
435
- const token = typeof callback === "function" ? await callback(auth) : callback;
434
+ var getAuthToken = /* @__PURE__ */ __name(async (auth2, callback) => {
435
+ const token = typeof callback === "function" ? await callback(auth2) : callback;
436
436
  if (!token) {
437
437
  return;
438
438
  }
439
- if (auth.scheme === "bearer") {
439
+ if (auth2.scheme === "bearer") {
440
440
  return `Bearer ${token}`;
441
441
  }
442
- if (auth.scheme === "basic") {
442
+ if (auth2.scheme === "basic") {
443
443
  return `Basic ${btoa(token)}`;
444
444
  }
445
445
  return token;
@@ -528,16 +528,16 @@ var setAuthParams = /* @__PURE__ */ __name(async ({
528
528
  security,
529
529
  ...options
530
530
  }) => {
531
- for (const auth of security) {
532
- if (checkForExistence(options, auth.name)) {
531
+ for (const auth2 of security) {
532
+ if (checkForExistence(options, auth2.name)) {
533
533
  continue;
534
534
  }
535
- const token = await getAuthToken(auth, options.auth);
535
+ const token = await getAuthToken(auth2, options.auth);
536
536
  if (!token) {
537
537
  continue;
538
538
  }
539
- const name = auth.name ?? "Authorization";
540
- switch (auth.in) {
539
+ const name = auth2.name ?? "Authorization";
540
+ switch (auth2.in) {
541
541
  case "query":
542
542
  if (!options.query) {
543
543
  options.query = {};
@@ -866,59 +866,206 @@ var createClient = /* @__PURE__ */ __name((config = {}) => {
866
866
  // src/_api/generated/client.gen.ts
867
867
  var client = createClient(createConfig({ baseUrl: "http://localhost:8000" }));
868
868
 
869
- // src/_api/generated/helpers/storage.ts
870
- var _LocalStorageAdapter = class _LocalStorageAdapter {
871
- getItem(key) {
872
- if (typeof window === "undefined") return null;
869
+ // src/_api/generated/helpers/auth.ts
870
+ var ACCESS_KEY = "cfg.access_token";
871
+ var REFRESH_KEY = "cfg.refresh_token";
872
+ var API_KEY_KEY = "cfg.api_key";
873
+ var isBrowser = typeof window !== "undefined";
874
+ var localStorageBackend = {
875
+ get(key) {
876
+ if (!isBrowser) return null;
873
877
  try {
874
878
  return window.localStorage.getItem(key);
875
879
  } catch {
876
880
  return null;
877
881
  }
878
- }
879
- setItem(key, value) {
880
- if (typeof window === "undefined") return;
882
+ },
883
+ set(key, value) {
884
+ if (!isBrowser) return;
881
885
  try {
882
- window.localStorage.setItem(key, value);
886
+ if (value === null) window.localStorage.removeItem(key);
887
+ else window.localStorage.setItem(key, value);
883
888
  } catch {
884
889
  }
885
890
  }
886
- removeItem(key) {
887
- if (typeof window === "undefined") return;
891
+ };
892
+ var COOKIE_MAX_AGE2 = 60 * 60 * 24 * 30;
893
+ var cookieBackend = {
894
+ get(key) {
895
+ if (!isBrowser) return null;
888
896
  try {
889
- window.localStorage.removeItem(key);
897
+ const re = new RegExp(`(?:^|;\\s*)${encodeURIComponent(key)}=([^;]*)`);
898
+ const m = document.cookie.match(re);
899
+ return m ? decodeURIComponent(m[1]) : null;
890
900
  } catch {
901
+ return null;
891
902
  }
892
- }
893
- clear() {
894
- if (typeof window === "undefined") return;
903
+ },
904
+ set(key, value) {
905
+ if (!isBrowser) return;
895
906
  try {
896
- window.localStorage.clear();
907
+ const k = encodeURIComponent(key);
908
+ const secure = window.location.protocol === "https:" ? "; Secure" : "";
909
+ if (value === null) {
910
+ document.cookie = `${k}=; Path=/; Max-Age=0; SameSite=Lax${secure}`;
911
+ } else {
912
+ const v = encodeURIComponent(value);
913
+ document.cookie = `${k}=${v}; Path=/; Max-Age=${COOKIE_MAX_AGE2}; SameSite=Lax${secure}`;
914
+ }
897
915
  } catch {
898
916
  }
899
917
  }
900
918
  };
901
- __name(_LocalStorageAdapter, "LocalStorageAdapter");
902
- var LocalStorageAdapter = _LocalStorageAdapter;
903
- var _MemoryStorageAdapter = class _MemoryStorageAdapter {
904
- constructor() {
905
- __publicField(this, "store", /* @__PURE__ */ new Map());
906
- }
907
- getItem(key) {
908
- return this.store.get(key) ?? null;
919
+ var _storage = localStorageBackend;
920
+ var _storageMode = "localStorage";
921
+ function detectLocale() {
922
+ try {
923
+ if (typeof document !== "undefined") {
924
+ const m = document.cookie.match(/(?:^|;\s*)NEXT_LOCALE=([^;]*)/);
925
+ if (m) return decodeURIComponent(m[1]);
926
+ }
927
+ if (typeof navigator !== "undefined" && navigator.language) {
928
+ return navigator.language;
929
+ }
930
+ } catch {
909
931
  }
910
- setItem(key, value) {
911
- this.store.set(key, value);
932
+ return null;
933
+ }
934
+ __name(detectLocale, "detectLocale");
935
+ function defaultBaseUrl() {
936
+ try {
937
+ if (typeof process !== "undefined" && process.env) {
938
+ if (process.env.NEXT_PUBLIC_STATIC_BUILD === "true") return "";
939
+ return process.env.NEXT_PUBLIC_API_URL || "";
940
+ }
941
+ } catch {
912
942
  }
913
- removeItem(key) {
914
- this.store.delete(key);
943
+ return "";
944
+ }
945
+ __name(defaultBaseUrl, "defaultBaseUrl");
946
+ function defaultApiKey() {
947
+ try {
948
+ if (typeof process !== "undefined" && process.env?.NEXT_PUBLIC_API_KEY) {
949
+ return process.env.NEXT_PUBLIC_API_KEY;
950
+ }
951
+ } catch {
915
952
  }
916
- clear() {
917
- this.store.clear();
953
+ return null;
954
+ }
955
+ __name(defaultApiKey, "defaultApiKey");
956
+ var _localeOverride = null;
957
+ var _apiKeyOverride = null;
958
+ var _baseUrlOverride = null;
959
+ var _withCredentials = true;
960
+ var _onUnauthorized = null;
961
+ var auth = {
962
+ // ── Storage mode ──────────────────────────────────────────────────
963
+ getStorageMode() {
964
+ return _storageMode;
965
+ },
966
+ /**
967
+ * Switch the storage backend. Existing values in the *previous*
968
+ * backend are NOT migrated — set fresh values after switching.
969
+ */
970
+ setStorageMode(mode) {
971
+ _storageMode = mode;
972
+ _storage = mode === "cookie" ? cookieBackend : localStorageBackend;
973
+ },
974
+ // ── Bearer token ──────────────────────────────────────────────────
975
+ getToken() {
976
+ return _storage.get(ACCESS_KEY);
977
+ },
978
+ setToken(token) {
979
+ _storage.set(ACCESS_KEY, token);
980
+ },
981
+ getRefreshToken() {
982
+ return _storage.get(REFRESH_KEY);
983
+ },
984
+ setRefreshToken(token) {
985
+ _storage.set(REFRESH_KEY, token);
986
+ },
987
+ clearTokens() {
988
+ _storage.set(ACCESS_KEY, null);
989
+ _storage.set(REFRESH_KEY, null);
990
+ },
991
+ isAuthenticated() {
992
+ return _storage.get(ACCESS_KEY) !== null;
993
+ },
994
+ // ── API key ───────────────────────────────────────────────────────
995
+ /** In-memory API key. Falls back to storage, then NEXT_PUBLIC_API_KEY. */
996
+ getApiKey() {
997
+ return _apiKeyOverride ?? _storage.get(API_KEY_KEY) ?? defaultApiKey();
998
+ },
999
+ /** In-memory only (cleared on reload). */
1000
+ setApiKey(key) {
1001
+ _apiKeyOverride = key;
1002
+ },
1003
+ /** Persist to active storage backend (localStorage or cookie). */
1004
+ setApiKeyPersist(key) {
1005
+ _apiKeyOverride = key;
1006
+ _storage.set(API_KEY_KEY, key);
1007
+ },
1008
+ clearApiKey() {
1009
+ _apiKeyOverride = null;
1010
+ _storage.set(API_KEY_KEY, null);
1011
+ },
1012
+ // ── Locale ────────────────────────────────────────────────────────
1013
+ /** Override locale → falls back to NEXT_LOCALE cookie / navigator.language. */
1014
+ getLocale() {
1015
+ return _localeOverride ?? detectLocale();
1016
+ },
1017
+ setLocale(locale) {
1018
+ _localeOverride = locale;
1019
+ },
1020
+ // ── Base URL ──────────────────────────────────────────────────────
1021
+ getBaseUrl() {
1022
+ const url = _baseUrlOverride ?? defaultBaseUrl();
1023
+ return url.replace(/\/$/, "");
1024
+ },
1025
+ setBaseUrl(url) {
1026
+ _baseUrlOverride = url ? url.replace(/\/$/, "") : null;
1027
+ client.setConfig({ baseUrl: this.getBaseUrl() });
1028
+ },
1029
+ // ── Credentials toggle (Django session/CSRF cross-origin) ─────────
1030
+ getWithCredentials() {
1031
+ return _withCredentials;
1032
+ },
1033
+ setWithCredentials(value) {
1034
+ _withCredentials = value;
1035
+ client.setConfig({ credentials: value ? "include" : "same-origin" });
1036
+ },
1037
+ // ── 401 handler ───────────────────────────────────────────────────
1038
+ /**
1039
+ * Register a callback fired on every 401 response. Use this to wire
1040
+ * a token-refresh flow or a forced logout. Setting `null` removes
1041
+ * the handler.
1042
+ */
1043
+ onUnauthorized(cb) {
1044
+ _onUnauthorized = cb;
918
1045
  }
919
1046
  };
920
- __name(_MemoryStorageAdapter, "MemoryStorageAdapter");
921
- var MemoryStorageAdapter = _MemoryStorageAdapter;
1047
+ client.setConfig({
1048
+ baseUrl: auth.getBaseUrl(),
1049
+ credentials: _withCredentials ? "include" : "same-origin"
1050
+ });
1051
+ client.interceptors.request.use((request) => {
1052
+ const token = auth.getToken();
1053
+ if (token) request.headers.set("Authorization", `Bearer ${token}`);
1054
+ const locale = auth.getLocale();
1055
+ if (locale) request.headers.set("Accept-Language", locale);
1056
+ const apiKey = auth.getApiKey();
1057
+ if (apiKey) request.headers.set("X-API-Key", apiKey);
1058
+ return request;
1059
+ });
1060
+ client.interceptors.response.use((response) => {
1061
+ if (response.status === 401 && _onUnauthorized) {
1062
+ try {
1063
+ _onUnauthorized(response);
1064
+ } catch {
1065
+ }
1066
+ }
1067
+ return response;
1068
+ });
922
1069
 
923
1070
  // src/_api/generated/helpers/logger.ts
924
1071
  import { createConsola } from "consola";
@@ -1014,94 +1161,60 @@ var APILogger = _APILogger;
1014
1161
  var defaultLogger = new APILogger();
1015
1162
 
1016
1163
  // src/_api/generated/_cfg_monitor/api.ts
1017
- var ACCESS_KEY = "cfg.access_token";
1018
- var REFRESH_KEY = "cfg.refresh_token";
1019
- function detectLocale() {
1020
- try {
1021
- if (typeof document !== "undefined") {
1022
- const m = document.cookie.match(/(?:^|;\s*)NEXT_LOCALE=([^;]*)/);
1023
- if (m) return decodeURIComponent(m[1]);
1024
- }
1025
- if (typeof navigator !== "undefined" && navigator.language) {
1026
- return navigator.language;
1027
- }
1028
- } catch {
1029
- }
1030
- return null;
1031
- }
1032
- __name(detectLocale, "detectLocale");
1033
1164
  var _API = class _API {
1034
- constructor(baseUrl, opts = {}) {
1035
- __publicField(this, "baseUrl");
1036
- __publicField(this, "storage");
1037
- __publicField(this, "locale");
1038
- __publicField(this, "apiKey");
1165
+ constructor(_baseUrl, opts = {}) {
1039
1166
  __publicField(this, "logger");
1040
- this.baseUrl = baseUrl.replace(/\/$/, "");
1041
- this.storage = opts.storage ?? new LocalStorageAdapter();
1042
1167
  this.logger = new APILogger(opts.logger);
1043
- this.locale = opts.locale ?? null;
1044
- this.apiKey = opts.apiKey ?? (typeof process !== "undefined" ? process.env?.NEXT_PUBLIC_API_KEY ?? null : null);
1045
- const credentials = opts.withCredentials ?? true ? "include" : "same-origin";
1046
- client.setConfig({ baseUrl: this.baseUrl, credentials });
1047
- client.interceptors.request.use((request) => {
1048
- const access = this.getToken();
1049
- if (access) request.headers.set("Authorization", `Bearer ${access}`);
1050
- const locale = this.locale ?? detectLocale();
1051
- if (locale) request.headers.set("Accept-Language", locale);
1052
- if (this.apiKey) request.headers.set("X-API-Key", this.apiKey);
1053
- return request;
1054
- });
1168
+ if (_baseUrl) auth.setBaseUrl(_baseUrl);
1169
+ if (opts.locale !== void 0) auth.setLocale(opts.locale);
1170
+ if (opts.apiKey !== void 0) auth.setApiKey(opts.apiKey);
1171
+ if (opts.withCredentials !== void 0) auth.setWithCredentials(opts.withCredentials);
1055
1172
  }
1056
1173
  // ── Base URL ────────────────────────────────────────────────────────────
1057
1174
  getBaseUrl() {
1058
- return this.baseUrl;
1175
+ return auth.getBaseUrl();
1059
1176
  }
1060
1177
  setBaseUrl(url) {
1061
- this.baseUrl = url.replace(/\/$/, "");
1062
- client.setConfig({ baseUrl: this.baseUrl });
1178
+ auth.setBaseUrl(url);
1063
1179
  }
1064
1180
  // ── Tokens ──────────────────────────────────────────────────────────────
1065
1181
  getToken() {
1066
- return this.storage.getItem(ACCESS_KEY);
1182
+ return auth.getToken();
1067
1183
  }
1068
1184
  setToken(token) {
1069
- if (token) this.storage.setItem(ACCESS_KEY, token);
1070
- else this.storage.removeItem(ACCESS_KEY);
1185
+ auth.setToken(token);
1071
1186
  }
1072
1187
  getRefreshToken() {
1073
- return this.storage.getItem(REFRESH_KEY);
1188
+ return auth.getRefreshToken();
1074
1189
  }
1075
1190
  setRefreshToken(token) {
1076
- if (token) this.storage.setItem(REFRESH_KEY, token);
1077
- else this.storage.removeItem(REFRESH_KEY);
1191
+ auth.setRefreshToken(token);
1078
1192
  }
1079
1193
  clearToken() {
1080
- this.storage.removeItem(ACCESS_KEY);
1081
- this.storage.removeItem(REFRESH_KEY);
1194
+ auth.clearTokens();
1082
1195
  }
1083
1196
  isAuthenticated() {
1084
- return this.getToken() !== null;
1197
+ return auth.isAuthenticated();
1085
1198
  }
1086
1199
  // ── Locale / API key ────────────────────────────────────────────────────
1087
1200
  getLocale() {
1088
- return this.locale ?? detectLocale();
1201
+ return auth.getLocale();
1089
1202
  }
1090
1203
  setLocale(locale) {
1091
- this.locale = locale;
1204
+ auth.setLocale(locale);
1092
1205
  }
1093
1206
  getApiKey() {
1094
- return this.apiKey;
1207
+ return auth.getApiKey();
1095
1208
  }
1096
1209
  setApiKey(key) {
1097
- this.apiKey = key;
1210
+ auth.setApiKey(key);
1098
1211
  }
1099
1212
  };
1100
1213
  __name(_API, "API");
1101
1214
  var API = _API;
1102
1215
 
1103
1216
  // src/_api/BaseClient.ts
1104
- var monitorApi = new API("", { storage: new MemoryStorageAdapter() });
1217
+ var monitorApi = new API("");
1105
1218
  function configureMonitorApi(baseUrl) {
1106
1219
  monitorApi.setBaseUrl(baseUrl);
1107
1220
  }
@@ -1171,7 +1284,7 @@ __name(sendBatch, "sendBatch");
1171
1284
  // src/client/utils/env.ts
1172
1285
  var isDevelopment = process.env.NODE_ENV === "development";
1173
1286
  var isProduction = !isDevelopment;
1174
- var MONITOR_VERSION = "2.1.331";
1287
+ var MONITOR_VERSION = "2.1.332";
1175
1288
 
1176
1289
  // src/client/constants.ts
1177
1290
  var MONITOR_INGEST_PATTERN = /cfg\/monitor\/ingest/;