@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/server.cjs CHANGED
@@ -391,15 +391,15 @@ function getValidRequestBody(options) {
391
391
  __name(getValidRequestBody, "getValidRequestBody");
392
392
 
393
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;
394
+ var getAuthToken = /* @__PURE__ */ __name(async (auth2, callback) => {
395
+ const token = typeof callback === "function" ? await callback(auth2) : callback;
396
396
  if (!token) {
397
397
  return;
398
398
  }
399
- if (auth.scheme === "bearer") {
399
+ if (auth2.scheme === "bearer") {
400
400
  return `Bearer ${token}`;
401
401
  }
402
- if (auth.scheme === "basic") {
402
+ if (auth2.scheme === "basic") {
403
403
  return `Basic ${btoa(token)}`;
404
404
  }
405
405
  return token;
@@ -488,16 +488,16 @@ var setAuthParams = /* @__PURE__ */ __name(async ({
488
488
  security,
489
489
  ...options
490
490
  }) => {
491
- for (const auth of security) {
492
- if (checkForExistence(options, auth.name)) {
491
+ for (const auth2 of security) {
492
+ if (checkForExistence(options, auth2.name)) {
493
493
  continue;
494
494
  }
495
- const token = await getAuthToken(auth, options.auth);
495
+ const token = await getAuthToken(auth2, options.auth);
496
496
  if (!token) {
497
497
  continue;
498
498
  }
499
- const name = auth.name ?? "Authorization";
500
- switch (auth.in) {
499
+ const name = auth2.name ?? "Authorization";
500
+ switch (auth2.in) {
501
501
  case "query":
502
502
  if (!options.query) {
503
503
  options.query = {};
@@ -826,59 +826,206 @@ var createClient = /* @__PURE__ */ __name((config = {}) => {
826
826
  // src/_api/generated/client.gen.ts
827
827
  var client = createClient(createConfig({ baseUrl: "http://localhost:8000" }));
828
828
 
829
- // src/_api/generated/helpers/storage.ts
830
- var _LocalStorageAdapter = class _LocalStorageAdapter {
831
- getItem(key) {
832
- if (typeof window === "undefined") return null;
829
+ // src/_api/generated/helpers/auth.ts
830
+ var ACCESS_KEY = "cfg.access_token";
831
+ var REFRESH_KEY = "cfg.refresh_token";
832
+ var API_KEY_KEY = "cfg.api_key";
833
+ var isBrowser = typeof window !== "undefined";
834
+ var localStorageBackend = {
835
+ get(key) {
836
+ if (!isBrowser) return null;
833
837
  try {
834
838
  return window.localStorage.getItem(key);
835
839
  } catch {
836
840
  return null;
837
841
  }
838
- }
839
- setItem(key, value) {
840
- if (typeof window === "undefined") return;
842
+ },
843
+ set(key, value) {
844
+ if (!isBrowser) return;
841
845
  try {
842
- window.localStorage.setItem(key, value);
846
+ if (value === null) window.localStorage.removeItem(key);
847
+ else window.localStorage.setItem(key, value);
843
848
  } catch {
844
849
  }
845
850
  }
846
- removeItem(key) {
847
- if (typeof window === "undefined") return;
851
+ };
852
+ var COOKIE_MAX_AGE = 60 * 60 * 24 * 30;
853
+ var cookieBackend = {
854
+ get(key) {
855
+ if (!isBrowser) return null;
848
856
  try {
849
- window.localStorage.removeItem(key);
857
+ const re = new RegExp(`(?:^|;\\s*)${encodeURIComponent(key)}=([^;]*)`);
858
+ const m = document.cookie.match(re);
859
+ return m ? decodeURIComponent(m[1]) : null;
850
860
  } catch {
861
+ return null;
851
862
  }
852
- }
853
- clear() {
854
- if (typeof window === "undefined") return;
863
+ },
864
+ set(key, value) {
865
+ if (!isBrowser) return;
855
866
  try {
856
- window.localStorage.clear();
867
+ const k = encodeURIComponent(key);
868
+ const secure = window.location.protocol === "https:" ? "; Secure" : "";
869
+ if (value === null) {
870
+ document.cookie = `${k}=; Path=/; Max-Age=0; SameSite=Lax${secure}`;
871
+ } else {
872
+ const v = encodeURIComponent(value);
873
+ document.cookie = `${k}=${v}; Path=/; Max-Age=${COOKIE_MAX_AGE}; SameSite=Lax${secure}`;
874
+ }
857
875
  } catch {
858
876
  }
859
877
  }
860
878
  };
861
- __name(_LocalStorageAdapter, "LocalStorageAdapter");
862
- var LocalStorageAdapter = _LocalStorageAdapter;
863
- var _MemoryStorageAdapter = class _MemoryStorageAdapter {
864
- constructor() {
865
- __publicField(this, "store", /* @__PURE__ */ new Map());
866
- }
867
- getItem(key) {
868
- return this.store.get(key) ?? null;
879
+ var _storage = localStorageBackend;
880
+ var _storageMode = "localStorage";
881
+ function detectLocale() {
882
+ try {
883
+ if (typeof document !== "undefined") {
884
+ const m = document.cookie.match(/(?:^|;\s*)NEXT_LOCALE=([^;]*)/);
885
+ if (m) return decodeURIComponent(m[1]);
886
+ }
887
+ if (typeof navigator !== "undefined" && navigator.language) {
888
+ return navigator.language;
889
+ }
890
+ } catch {
869
891
  }
870
- setItem(key, value) {
871
- this.store.set(key, value);
892
+ return null;
893
+ }
894
+ __name(detectLocale, "detectLocale");
895
+ function defaultBaseUrl() {
896
+ try {
897
+ if (typeof process !== "undefined" && process.env) {
898
+ if (process.env.NEXT_PUBLIC_STATIC_BUILD === "true") return "";
899
+ return process.env.NEXT_PUBLIC_API_URL || "";
900
+ }
901
+ } catch {
872
902
  }
873
- removeItem(key) {
874
- this.store.delete(key);
903
+ return "";
904
+ }
905
+ __name(defaultBaseUrl, "defaultBaseUrl");
906
+ function defaultApiKey() {
907
+ try {
908
+ if (typeof process !== "undefined" && process.env?.NEXT_PUBLIC_API_KEY) {
909
+ return process.env.NEXT_PUBLIC_API_KEY;
910
+ }
911
+ } catch {
875
912
  }
876
- clear() {
877
- this.store.clear();
913
+ return null;
914
+ }
915
+ __name(defaultApiKey, "defaultApiKey");
916
+ var _localeOverride = null;
917
+ var _apiKeyOverride = null;
918
+ var _baseUrlOverride = null;
919
+ var _withCredentials = true;
920
+ var _onUnauthorized = null;
921
+ var auth = {
922
+ // ── Storage mode ──────────────────────────────────────────────────
923
+ getStorageMode() {
924
+ return _storageMode;
925
+ },
926
+ /**
927
+ * Switch the storage backend. Existing values in the *previous*
928
+ * backend are NOT migrated — set fresh values after switching.
929
+ */
930
+ setStorageMode(mode) {
931
+ _storageMode = mode;
932
+ _storage = mode === "cookie" ? cookieBackend : localStorageBackend;
933
+ },
934
+ // ── Bearer token ──────────────────────────────────────────────────
935
+ getToken() {
936
+ return _storage.get(ACCESS_KEY);
937
+ },
938
+ setToken(token) {
939
+ _storage.set(ACCESS_KEY, token);
940
+ },
941
+ getRefreshToken() {
942
+ return _storage.get(REFRESH_KEY);
943
+ },
944
+ setRefreshToken(token) {
945
+ _storage.set(REFRESH_KEY, token);
946
+ },
947
+ clearTokens() {
948
+ _storage.set(ACCESS_KEY, null);
949
+ _storage.set(REFRESH_KEY, null);
950
+ },
951
+ isAuthenticated() {
952
+ return _storage.get(ACCESS_KEY) !== null;
953
+ },
954
+ // ── API key ───────────────────────────────────────────────────────
955
+ /** In-memory API key. Falls back to storage, then NEXT_PUBLIC_API_KEY. */
956
+ getApiKey() {
957
+ return _apiKeyOverride ?? _storage.get(API_KEY_KEY) ?? defaultApiKey();
958
+ },
959
+ /** In-memory only (cleared on reload). */
960
+ setApiKey(key) {
961
+ _apiKeyOverride = key;
962
+ },
963
+ /** Persist to active storage backend (localStorage or cookie). */
964
+ setApiKeyPersist(key) {
965
+ _apiKeyOverride = key;
966
+ _storage.set(API_KEY_KEY, key);
967
+ },
968
+ clearApiKey() {
969
+ _apiKeyOverride = null;
970
+ _storage.set(API_KEY_KEY, null);
971
+ },
972
+ // ── Locale ────────────────────────────────────────────────────────
973
+ /** Override locale → falls back to NEXT_LOCALE cookie / navigator.language. */
974
+ getLocale() {
975
+ return _localeOverride ?? detectLocale();
976
+ },
977
+ setLocale(locale) {
978
+ _localeOverride = locale;
979
+ },
980
+ // ── Base URL ──────────────────────────────────────────────────────
981
+ getBaseUrl() {
982
+ const url = _baseUrlOverride ?? defaultBaseUrl();
983
+ return url.replace(/\/$/, "");
984
+ },
985
+ setBaseUrl(url) {
986
+ _baseUrlOverride = url ? url.replace(/\/$/, "") : null;
987
+ client.setConfig({ baseUrl: this.getBaseUrl() });
988
+ },
989
+ // ── Credentials toggle (Django session/CSRF cross-origin) ─────────
990
+ getWithCredentials() {
991
+ return _withCredentials;
992
+ },
993
+ setWithCredentials(value) {
994
+ _withCredentials = value;
995
+ client.setConfig({ credentials: value ? "include" : "same-origin" });
996
+ },
997
+ // ── 401 handler ───────────────────────────────────────────────────
998
+ /**
999
+ * Register a callback fired on every 401 response. Use this to wire
1000
+ * a token-refresh flow or a forced logout. Setting `null` removes
1001
+ * the handler.
1002
+ */
1003
+ onUnauthorized(cb) {
1004
+ _onUnauthorized = cb;
878
1005
  }
879
1006
  };
880
- __name(_MemoryStorageAdapter, "MemoryStorageAdapter");
881
- var MemoryStorageAdapter = _MemoryStorageAdapter;
1007
+ client.setConfig({
1008
+ baseUrl: auth.getBaseUrl(),
1009
+ credentials: _withCredentials ? "include" : "same-origin"
1010
+ });
1011
+ client.interceptors.request.use((request) => {
1012
+ const token = auth.getToken();
1013
+ if (token) request.headers.set("Authorization", `Bearer ${token}`);
1014
+ const locale = auth.getLocale();
1015
+ if (locale) request.headers.set("Accept-Language", locale);
1016
+ const apiKey = auth.getApiKey();
1017
+ if (apiKey) request.headers.set("X-API-Key", apiKey);
1018
+ return request;
1019
+ });
1020
+ client.interceptors.response.use((response) => {
1021
+ if (response.status === 401 && _onUnauthorized) {
1022
+ try {
1023
+ _onUnauthorized(response);
1024
+ } catch {
1025
+ }
1026
+ }
1027
+ return response;
1028
+ });
882
1029
 
883
1030
  // src/_api/generated/helpers/logger.ts
884
1031
  var import_consola = require("consola");
@@ -974,94 +1121,60 @@ var APILogger = _APILogger;
974
1121
  var defaultLogger = new APILogger();
975
1122
 
976
1123
  // src/_api/generated/_cfg_monitor/api.ts
977
- var ACCESS_KEY = "cfg.access_token";
978
- var REFRESH_KEY = "cfg.refresh_token";
979
- function detectLocale() {
980
- try {
981
- if (typeof document !== "undefined") {
982
- const m = document.cookie.match(/(?:^|;\s*)NEXT_LOCALE=([^;]*)/);
983
- if (m) return decodeURIComponent(m[1]);
984
- }
985
- if (typeof navigator !== "undefined" && navigator.language) {
986
- return navigator.language;
987
- }
988
- } catch {
989
- }
990
- return null;
991
- }
992
- __name(detectLocale, "detectLocale");
993
1124
  var _API = class _API {
994
- constructor(baseUrl, opts = {}) {
995
- __publicField(this, "baseUrl");
996
- __publicField(this, "storage");
997
- __publicField(this, "locale");
998
- __publicField(this, "apiKey");
1125
+ constructor(_baseUrl, opts = {}) {
999
1126
  __publicField(this, "logger");
1000
- this.baseUrl = baseUrl.replace(/\/$/, "");
1001
- this.storage = opts.storage ?? new LocalStorageAdapter();
1002
1127
  this.logger = new APILogger(opts.logger);
1003
- this.locale = opts.locale ?? null;
1004
- this.apiKey = opts.apiKey ?? (typeof process !== "undefined" ? process.env?.NEXT_PUBLIC_API_KEY ?? null : null);
1005
- const credentials = opts.withCredentials ?? true ? "include" : "same-origin";
1006
- client.setConfig({ baseUrl: this.baseUrl, credentials });
1007
- client.interceptors.request.use((request) => {
1008
- const access = this.getToken();
1009
- if (access) request.headers.set("Authorization", `Bearer ${access}`);
1010
- const locale = this.locale ?? detectLocale();
1011
- if (locale) request.headers.set("Accept-Language", locale);
1012
- if (this.apiKey) request.headers.set("X-API-Key", this.apiKey);
1013
- return request;
1014
- });
1128
+ if (_baseUrl) auth.setBaseUrl(_baseUrl);
1129
+ if (opts.locale !== void 0) auth.setLocale(opts.locale);
1130
+ if (opts.apiKey !== void 0) auth.setApiKey(opts.apiKey);
1131
+ if (opts.withCredentials !== void 0) auth.setWithCredentials(opts.withCredentials);
1015
1132
  }
1016
1133
  // ── Base URL ────────────────────────────────────────────────────────────
1017
1134
  getBaseUrl() {
1018
- return this.baseUrl;
1135
+ return auth.getBaseUrl();
1019
1136
  }
1020
1137
  setBaseUrl(url) {
1021
- this.baseUrl = url.replace(/\/$/, "");
1022
- client.setConfig({ baseUrl: this.baseUrl });
1138
+ auth.setBaseUrl(url);
1023
1139
  }
1024
1140
  // ── Tokens ──────────────────────────────────────────────────────────────
1025
1141
  getToken() {
1026
- return this.storage.getItem(ACCESS_KEY);
1142
+ return auth.getToken();
1027
1143
  }
1028
1144
  setToken(token) {
1029
- if (token) this.storage.setItem(ACCESS_KEY, token);
1030
- else this.storage.removeItem(ACCESS_KEY);
1145
+ auth.setToken(token);
1031
1146
  }
1032
1147
  getRefreshToken() {
1033
- return this.storage.getItem(REFRESH_KEY);
1148
+ return auth.getRefreshToken();
1034
1149
  }
1035
1150
  setRefreshToken(token) {
1036
- if (token) this.storage.setItem(REFRESH_KEY, token);
1037
- else this.storage.removeItem(REFRESH_KEY);
1151
+ auth.setRefreshToken(token);
1038
1152
  }
1039
1153
  clearToken() {
1040
- this.storage.removeItem(ACCESS_KEY);
1041
- this.storage.removeItem(REFRESH_KEY);
1154
+ auth.clearTokens();
1042
1155
  }
1043
1156
  isAuthenticated() {
1044
- return this.getToken() !== null;
1157
+ return auth.isAuthenticated();
1045
1158
  }
1046
1159
  // ── Locale / API key ────────────────────────────────────────────────────
1047
1160
  getLocale() {
1048
- return this.locale ?? detectLocale();
1161
+ return auth.getLocale();
1049
1162
  }
1050
1163
  setLocale(locale) {
1051
- this.locale = locale;
1164
+ auth.setLocale(locale);
1052
1165
  }
1053
1166
  getApiKey() {
1054
- return this.apiKey;
1167
+ return auth.getApiKey();
1055
1168
  }
1056
1169
  setApiKey(key) {
1057
- this.apiKey = key;
1170
+ auth.setApiKey(key);
1058
1171
  }
1059
1172
  };
1060
1173
  __name(_API, "API");
1061
1174
  var API = _API;
1062
1175
 
1063
1176
  // src/_api/BaseClient.ts
1064
- var monitorApi = new API("", { storage: new MemoryStorageAdapter() });
1177
+ var monitorApi = new API("");
1065
1178
  function configureMonitorApi(baseUrl) {
1066
1179
  monitorApi.setBaseUrl(baseUrl);
1067
1180
  }