@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.cjs CHANGED
@@ -465,15 +465,15 @@ function getValidRequestBody(options) {
465
465
  __name(getValidRequestBody, "getValidRequestBody");
466
466
 
467
467
  // src/_api/generated/core/auth.gen.ts
468
- var getAuthToken = /* @__PURE__ */ __name(async (auth, callback) => {
469
- const token = typeof callback === "function" ? await callback(auth) : callback;
468
+ var getAuthToken = /* @__PURE__ */ __name(async (auth2, callback) => {
469
+ const token = typeof callback === "function" ? await callback(auth2) : callback;
470
470
  if (!token) {
471
471
  return;
472
472
  }
473
- if (auth.scheme === "bearer") {
473
+ if (auth2.scheme === "bearer") {
474
474
  return `Bearer ${token}`;
475
475
  }
476
- if (auth.scheme === "basic") {
476
+ if (auth2.scheme === "basic") {
477
477
  return `Basic ${btoa(token)}`;
478
478
  }
479
479
  return token;
@@ -562,16 +562,16 @@ var setAuthParams = /* @__PURE__ */ __name(async ({
562
562
  security,
563
563
  ...options
564
564
  }) => {
565
- for (const auth of security) {
566
- if (checkForExistence(options, auth.name)) {
565
+ for (const auth2 of security) {
566
+ if (checkForExistence(options, auth2.name)) {
567
567
  continue;
568
568
  }
569
- const token = await getAuthToken(auth, options.auth);
569
+ const token = await getAuthToken(auth2, options.auth);
570
570
  if (!token) {
571
571
  continue;
572
572
  }
573
- const name = auth.name ?? "Authorization";
574
- switch (auth.in) {
573
+ const name = auth2.name ?? "Authorization";
574
+ switch (auth2.in) {
575
575
  case "query":
576
576
  if (!options.query) {
577
577
  options.query = {};
@@ -900,59 +900,206 @@ var createClient = /* @__PURE__ */ __name((config = {}) => {
900
900
  // src/_api/generated/client.gen.ts
901
901
  var client = createClient(createConfig({ baseUrl: "http://localhost:8000" }));
902
902
 
903
- // src/_api/generated/helpers/storage.ts
904
- var _LocalStorageAdapter = class _LocalStorageAdapter {
905
- getItem(key) {
906
- if (typeof window === "undefined") return null;
903
+ // src/_api/generated/helpers/auth.ts
904
+ var ACCESS_KEY = "cfg.access_token";
905
+ var REFRESH_KEY = "cfg.refresh_token";
906
+ var API_KEY_KEY = "cfg.api_key";
907
+ var isBrowser = typeof window !== "undefined";
908
+ var localStorageBackend = {
909
+ get(key) {
910
+ if (!isBrowser) return null;
907
911
  try {
908
912
  return window.localStorage.getItem(key);
909
913
  } catch {
910
914
  return null;
911
915
  }
912
- }
913
- setItem(key, value) {
914
- if (typeof window === "undefined") return;
916
+ },
917
+ set(key, value) {
918
+ if (!isBrowser) return;
915
919
  try {
916
- window.localStorage.setItem(key, value);
920
+ if (value === null) window.localStorage.removeItem(key);
921
+ else window.localStorage.setItem(key, value);
917
922
  } catch {
918
923
  }
919
924
  }
920
- removeItem(key) {
921
- if (typeof window === "undefined") return;
925
+ };
926
+ var COOKIE_MAX_AGE2 = 60 * 60 * 24 * 30;
927
+ var cookieBackend = {
928
+ get(key) {
929
+ if (!isBrowser) return null;
922
930
  try {
923
- window.localStorage.removeItem(key);
931
+ const re = new RegExp(`(?:^|;\\s*)${encodeURIComponent(key)}=([^;]*)`);
932
+ const m = document.cookie.match(re);
933
+ return m ? decodeURIComponent(m[1]) : null;
924
934
  } catch {
935
+ return null;
925
936
  }
926
- }
927
- clear() {
928
- if (typeof window === "undefined") return;
937
+ },
938
+ set(key, value) {
939
+ if (!isBrowser) return;
929
940
  try {
930
- window.localStorage.clear();
941
+ const k = encodeURIComponent(key);
942
+ const secure = window.location.protocol === "https:" ? "; Secure" : "";
943
+ if (value === null) {
944
+ document.cookie = `${k}=; Path=/; Max-Age=0; SameSite=Lax${secure}`;
945
+ } else {
946
+ const v = encodeURIComponent(value);
947
+ document.cookie = `${k}=${v}; Path=/; Max-Age=${COOKIE_MAX_AGE2}; SameSite=Lax${secure}`;
948
+ }
931
949
  } catch {
932
950
  }
933
951
  }
934
952
  };
935
- __name(_LocalStorageAdapter, "LocalStorageAdapter");
936
- var LocalStorageAdapter = _LocalStorageAdapter;
937
- var _MemoryStorageAdapter = class _MemoryStorageAdapter {
938
- constructor() {
939
- __publicField(this, "store", /* @__PURE__ */ new Map());
940
- }
941
- getItem(key) {
942
- return this.store.get(key) ?? null;
953
+ var _storage = localStorageBackend;
954
+ var _storageMode = "localStorage";
955
+ function detectLocale() {
956
+ try {
957
+ if (typeof document !== "undefined") {
958
+ const m = document.cookie.match(/(?:^|;\s*)NEXT_LOCALE=([^;]*)/);
959
+ if (m) return decodeURIComponent(m[1]);
960
+ }
961
+ if (typeof navigator !== "undefined" && navigator.language) {
962
+ return navigator.language;
963
+ }
964
+ } catch {
943
965
  }
944
- setItem(key, value) {
945
- this.store.set(key, value);
966
+ return null;
967
+ }
968
+ __name(detectLocale, "detectLocale");
969
+ function defaultBaseUrl() {
970
+ try {
971
+ if (typeof process !== "undefined" && process.env) {
972
+ if (process.env.NEXT_PUBLIC_STATIC_BUILD === "true") return "";
973
+ return process.env.NEXT_PUBLIC_API_URL || "";
974
+ }
975
+ } catch {
946
976
  }
947
- removeItem(key) {
948
- this.store.delete(key);
977
+ return "";
978
+ }
979
+ __name(defaultBaseUrl, "defaultBaseUrl");
980
+ function defaultApiKey() {
981
+ try {
982
+ if (typeof process !== "undefined" && process.env?.NEXT_PUBLIC_API_KEY) {
983
+ return process.env.NEXT_PUBLIC_API_KEY;
984
+ }
985
+ } catch {
949
986
  }
950
- clear() {
951
- this.store.clear();
987
+ return null;
988
+ }
989
+ __name(defaultApiKey, "defaultApiKey");
990
+ var _localeOverride = null;
991
+ var _apiKeyOverride = null;
992
+ var _baseUrlOverride = null;
993
+ var _withCredentials = true;
994
+ var _onUnauthorized = null;
995
+ var auth = {
996
+ // ── Storage mode ──────────────────────────────────────────────────
997
+ getStorageMode() {
998
+ return _storageMode;
999
+ },
1000
+ /**
1001
+ * Switch the storage backend. Existing values in the *previous*
1002
+ * backend are NOT migrated — set fresh values after switching.
1003
+ */
1004
+ setStorageMode(mode) {
1005
+ _storageMode = mode;
1006
+ _storage = mode === "cookie" ? cookieBackend : localStorageBackend;
1007
+ },
1008
+ // ── Bearer token ──────────────────────────────────────────────────
1009
+ getToken() {
1010
+ return _storage.get(ACCESS_KEY);
1011
+ },
1012
+ setToken(token) {
1013
+ _storage.set(ACCESS_KEY, token);
1014
+ },
1015
+ getRefreshToken() {
1016
+ return _storage.get(REFRESH_KEY);
1017
+ },
1018
+ setRefreshToken(token) {
1019
+ _storage.set(REFRESH_KEY, token);
1020
+ },
1021
+ clearTokens() {
1022
+ _storage.set(ACCESS_KEY, null);
1023
+ _storage.set(REFRESH_KEY, null);
1024
+ },
1025
+ isAuthenticated() {
1026
+ return _storage.get(ACCESS_KEY) !== null;
1027
+ },
1028
+ // ── API key ───────────────────────────────────────────────────────
1029
+ /** In-memory API key. Falls back to storage, then NEXT_PUBLIC_API_KEY. */
1030
+ getApiKey() {
1031
+ return _apiKeyOverride ?? _storage.get(API_KEY_KEY) ?? defaultApiKey();
1032
+ },
1033
+ /** In-memory only (cleared on reload). */
1034
+ setApiKey(key) {
1035
+ _apiKeyOverride = key;
1036
+ },
1037
+ /** Persist to active storage backend (localStorage or cookie). */
1038
+ setApiKeyPersist(key) {
1039
+ _apiKeyOverride = key;
1040
+ _storage.set(API_KEY_KEY, key);
1041
+ },
1042
+ clearApiKey() {
1043
+ _apiKeyOverride = null;
1044
+ _storage.set(API_KEY_KEY, null);
1045
+ },
1046
+ // ── Locale ────────────────────────────────────────────────────────
1047
+ /** Override locale → falls back to NEXT_LOCALE cookie / navigator.language. */
1048
+ getLocale() {
1049
+ return _localeOverride ?? detectLocale();
1050
+ },
1051
+ setLocale(locale) {
1052
+ _localeOverride = locale;
1053
+ },
1054
+ // ── Base URL ──────────────────────────────────────────────────────
1055
+ getBaseUrl() {
1056
+ const url = _baseUrlOverride ?? defaultBaseUrl();
1057
+ return url.replace(/\/$/, "");
1058
+ },
1059
+ setBaseUrl(url) {
1060
+ _baseUrlOverride = url ? url.replace(/\/$/, "") : null;
1061
+ client.setConfig({ baseUrl: this.getBaseUrl() });
1062
+ },
1063
+ // ── Credentials toggle (Django session/CSRF cross-origin) ─────────
1064
+ getWithCredentials() {
1065
+ return _withCredentials;
1066
+ },
1067
+ setWithCredentials(value) {
1068
+ _withCredentials = value;
1069
+ client.setConfig({ credentials: value ? "include" : "same-origin" });
1070
+ },
1071
+ // ── 401 handler ───────────────────────────────────────────────────
1072
+ /**
1073
+ * Register a callback fired on every 401 response. Use this to wire
1074
+ * a token-refresh flow or a forced logout. Setting `null` removes
1075
+ * the handler.
1076
+ */
1077
+ onUnauthorized(cb) {
1078
+ _onUnauthorized = cb;
952
1079
  }
953
1080
  };
954
- __name(_MemoryStorageAdapter, "MemoryStorageAdapter");
955
- var MemoryStorageAdapter = _MemoryStorageAdapter;
1081
+ client.setConfig({
1082
+ baseUrl: auth.getBaseUrl(),
1083
+ credentials: _withCredentials ? "include" : "same-origin"
1084
+ });
1085
+ client.interceptors.request.use((request) => {
1086
+ const token = auth.getToken();
1087
+ if (token) request.headers.set("Authorization", `Bearer ${token}`);
1088
+ const locale = auth.getLocale();
1089
+ if (locale) request.headers.set("Accept-Language", locale);
1090
+ const apiKey = auth.getApiKey();
1091
+ if (apiKey) request.headers.set("X-API-Key", apiKey);
1092
+ return request;
1093
+ });
1094
+ client.interceptors.response.use((response) => {
1095
+ if (response.status === 401 && _onUnauthorized) {
1096
+ try {
1097
+ _onUnauthorized(response);
1098
+ } catch {
1099
+ }
1100
+ }
1101
+ return response;
1102
+ });
956
1103
 
957
1104
  // src/_api/generated/helpers/logger.ts
958
1105
  var import_consola = require("consola");
@@ -1048,94 +1195,60 @@ var APILogger = _APILogger;
1048
1195
  var defaultLogger = new APILogger();
1049
1196
 
1050
1197
  // src/_api/generated/_cfg_monitor/api.ts
1051
- var ACCESS_KEY = "cfg.access_token";
1052
- var REFRESH_KEY = "cfg.refresh_token";
1053
- function detectLocale() {
1054
- try {
1055
- if (typeof document !== "undefined") {
1056
- const m = document.cookie.match(/(?:^|;\s*)NEXT_LOCALE=([^;]*)/);
1057
- if (m) return decodeURIComponent(m[1]);
1058
- }
1059
- if (typeof navigator !== "undefined" && navigator.language) {
1060
- return navigator.language;
1061
- }
1062
- } catch {
1063
- }
1064
- return null;
1065
- }
1066
- __name(detectLocale, "detectLocale");
1067
1198
  var _API = class _API {
1068
- constructor(baseUrl, opts = {}) {
1069
- __publicField(this, "baseUrl");
1070
- __publicField(this, "storage");
1071
- __publicField(this, "locale");
1072
- __publicField(this, "apiKey");
1199
+ constructor(_baseUrl, opts = {}) {
1073
1200
  __publicField(this, "logger");
1074
- this.baseUrl = baseUrl.replace(/\/$/, "");
1075
- this.storage = opts.storage ?? new LocalStorageAdapter();
1076
1201
  this.logger = new APILogger(opts.logger);
1077
- this.locale = opts.locale ?? null;
1078
- this.apiKey = opts.apiKey ?? (typeof process !== "undefined" ? process.env?.NEXT_PUBLIC_API_KEY ?? null : null);
1079
- const credentials = opts.withCredentials ?? true ? "include" : "same-origin";
1080
- client.setConfig({ baseUrl: this.baseUrl, credentials });
1081
- client.interceptors.request.use((request) => {
1082
- const access = this.getToken();
1083
- if (access) request.headers.set("Authorization", `Bearer ${access}`);
1084
- const locale = this.locale ?? detectLocale();
1085
- if (locale) request.headers.set("Accept-Language", locale);
1086
- if (this.apiKey) request.headers.set("X-API-Key", this.apiKey);
1087
- return request;
1088
- });
1202
+ if (_baseUrl) auth.setBaseUrl(_baseUrl);
1203
+ if (opts.locale !== void 0) auth.setLocale(opts.locale);
1204
+ if (opts.apiKey !== void 0) auth.setApiKey(opts.apiKey);
1205
+ if (opts.withCredentials !== void 0) auth.setWithCredentials(opts.withCredentials);
1089
1206
  }
1090
1207
  // ── Base URL ────────────────────────────────────────────────────────────
1091
1208
  getBaseUrl() {
1092
- return this.baseUrl;
1209
+ return auth.getBaseUrl();
1093
1210
  }
1094
1211
  setBaseUrl(url) {
1095
- this.baseUrl = url.replace(/\/$/, "");
1096
- client.setConfig({ baseUrl: this.baseUrl });
1212
+ auth.setBaseUrl(url);
1097
1213
  }
1098
1214
  // ── Tokens ──────────────────────────────────────────────────────────────
1099
1215
  getToken() {
1100
- return this.storage.getItem(ACCESS_KEY);
1216
+ return auth.getToken();
1101
1217
  }
1102
1218
  setToken(token) {
1103
- if (token) this.storage.setItem(ACCESS_KEY, token);
1104
- else this.storage.removeItem(ACCESS_KEY);
1219
+ auth.setToken(token);
1105
1220
  }
1106
1221
  getRefreshToken() {
1107
- return this.storage.getItem(REFRESH_KEY);
1222
+ return auth.getRefreshToken();
1108
1223
  }
1109
1224
  setRefreshToken(token) {
1110
- if (token) this.storage.setItem(REFRESH_KEY, token);
1111
- else this.storage.removeItem(REFRESH_KEY);
1225
+ auth.setRefreshToken(token);
1112
1226
  }
1113
1227
  clearToken() {
1114
- this.storage.removeItem(ACCESS_KEY);
1115
- this.storage.removeItem(REFRESH_KEY);
1228
+ auth.clearTokens();
1116
1229
  }
1117
1230
  isAuthenticated() {
1118
- return this.getToken() !== null;
1231
+ return auth.isAuthenticated();
1119
1232
  }
1120
1233
  // ── Locale / API key ────────────────────────────────────────────────────
1121
1234
  getLocale() {
1122
- return this.locale ?? detectLocale();
1235
+ return auth.getLocale();
1123
1236
  }
1124
1237
  setLocale(locale) {
1125
- this.locale = locale;
1238
+ auth.setLocale(locale);
1126
1239
  }
1127
1240
  getApiKey() {
1128
- return this.apiKey;
1241
+ return auth.getApiKey();
1129
1242
  }
1130
1243
  setApiKey(key) {
1131
- this.apiKey = key;
1244
+ auth.setApiKey(key);
1132
1245
  }
1133
1246
  };
1134
1247
  __name(_API, "API");
1135
1248
  var API = _API;
1136
1249
 
1137
1250
  // src/_api/BaseClient.ts
1138
- var monitorApi = new API("", { storage: new MemoryStorageAdapter() });
1251
+ var monitorApi = new API("");
1139
1252
  function configureMonitorApi(baseUrl) {
1140
1253
  monitorApi.setBaseUrl(baseUrl);
1141
1254
  }
@@ -1205,7 +1318,7 @@ __name(sendBatch, "sendBatch");
1205
1318
  // src/client/utils/env.ts
1206
1319
  var isDevelopment = process.env.NODE_ENV === "development";
1207
1320
  var isProduction = !isDevelopment;
1208
- var MONITOR_VERSION = "2.1.331";
1321
+ var MONITOR_VERSION = "2.1.332";
1209
1322
 
1210
1323
  // src/client/constants.ts
1211
1324
  var MONITOR_INGEST_PATTERN = /cfg\/monitor\/ingest/;