woodsportal-client-sdk 4.0.4-dev.9 → 4.0.7-dev.1

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.
Files changed (65) hide show
  1. package/dist/adapters/angular/index.d.ts +1 -0
  2. package/dist/adapters/angular/index.js +6 -4
  3. package/dist/adapters/angular/index.js.map +1 -1
  4. package/dist/adapters/react/index.d.ts +1 -0
  5. package/dist/adapters/react/index.js +6 -4
  6. package/dist/adapters/react/index.js.map +1 -1
  7. package/dist/adapters/vue/index.d.ts +1 -0
  8. package/dist/adapters/vue/index.js +6 -4
  9. package/dist/adapters/vue/index.js.map +1 -1
  10. package/dist/auth-error-codes-D7CXVBEN.js +3 -0
  11. package/dist/auth-error-codes-D7CXVBEN.js.map +1 -0
  12. package/dist/auth-interceptor-policy-LU2L5NJM.js +5 -0
  13. package/dist/auth-interceptor-policy-LU2L5NJM.js.map +1 -0
  14. package/dist/auth-utils-Z5P6SMLJ.js +5 -0
  15. package/dist/{auth-utils-MNMC2QGX.js.map → auth-utils-Z5P6SMLJ.js.map} +1 -1
  16. package/dist/chunk-55MIERLJ.js +3 -0
  17. package/dist/chunk-55MIERLJ.js.map +1 -0
  18. package/dist/chunk-6YOL5LPB.js +163 -0
  19. package/dist/chunk-6YOL5LPB.js.map +1 -0
  20. package/dist/chunk-B2OVKOJU.js +633 -0
  21. package/dist/chunk-B2OVKOJU.js.map +1 -0
  22. package/dist/chunk-BKT4MFQM.js +161 -0
  23. package/dist/chunk-BKT4MFQM.js.map +1 -0
  24. package/dist/{chunk-7Q6HRCUA.js → chunk-BURJ2NUL.js} +3 -3
  25. package/dist/{chunk-7Q6HRCUA.js.map → chunk-BURJ2NUL.js.map} +1 -1
  26. package/dist/chunk-COHBSTHF.js +82 -0
  27. package/dist/chunk-COHBSTHF.js.map +1 -0
  28. package/dist/{chunk-2TG7X2ML.js → chunk-FJAOCLB4.js} +12 -11
  29. package/dist/chunk-FJAOCLB4.js.map +1 -0
  30. package/dist/chunk-GUYIJ4ZE.js +165 -0
  31. package/dist/chunk-GUYIJ4ZE.js.map +1 -0
  32. package/dist/{chunk-VCYJAVD3.js → chunk-HAXXPW65.js} +167 -13
  33. package/dist/chunk-HAXXPW65.js.map +1 -0
  34. package/dist/{chunk-IBKBTIT6.js → chunk-OFPD644E.js} +6 -6
  35. package/dist/{chunk-IBKBTIT6.js.map → chunk-OFPD644E.js.map} +1 -1
  36. package/dist/{chunk-ZEJGWZK3.js → chunk-PFOSN7EB.js} +1242 -1269
  37. package/dist/chunk-PFOSN7EB.js.map +1 -0
  38. package/dist/{chunk-4AMFPSO2.js → chunk-WNE4LSVH.js} +465 -258
  39. package/dist/chunk-WNE4LSVH.js.map +1 -0
  40. package/dist/chunk-YNOZWRK3.js +306 -0
  41. package/dist/chunk-YNOZWRK3.js.map +1 -0
  42. package/dist/cross-tab-session-TUFJ6KU7.js +9 -0
  43. package/dist/cross-tab-session-TUFJ6KU7.js.map +1 -0
  44. package/dist/entries/auth.d.ts +17 -3
  45. package/dist/entries/auth.js +9 -4
  46. package/dist/entries/auth.js.map +1 -1
  47. package/dist/entries/crm.d.ts +1 -0
  48. package/dist/entries/crm.js +10 -6
  49. package/dist/entries/crm.js.map +1 -1
  50. package/dist/{http-errors-DqdtoJ1y.d.ts → http-errors-Bwhj6cfB.d.ts} +192 -9
  51. package/dist/index.d.ts +141 -3
  52. package/dist/index.js +16 -9
  53. package/dist/index.js.map +1 -1
  54. package/dist/refresh-lock-JQVP4YOS.js +72 -0
  55. package/dist/refresh-lock-JQVP4YOS.js.map +1 -0
  56. package/dist/storage-migration-BY2QL6YD.js +4 -0
  57. package/dist/storage-migration-BY2QL6YD.js.map +1 -0
  58. package/package.json +11 -9
  59. package/dist/auth-utils-MNMC2QGX.js +0 -3
  60. package/dist/chunk-2TG7X2ML.js.map +0 -1
  61. package/dist/chunk-4AMFPSO2.js.map +0 -1
  62. package/dist/chunk-QPSCMK4W.js +0 -237
  63. package/dist/chunk-QPSCMK4W.js.map +0 -1
  64. package/dist/chunk-VCYJAVD3.js.map +0 -1
  65. package/dist/chunk-ZEJGWZK3.js.map +0 -1
@@ -0,0 +1,633 @@
1
+ import { getStorageKeys, isCookieExpired, getCookie, isCorruptCookieRawValue, stringifyCookieValue, setCookie, parseCookieJson } from './chunk-YNOZWRK3.js';
2
+ import { WP_STORAGE_KEYS, wpClientIframeRefreshKey, wpClientIframeRefreshExpKey } from './chunk-BKT4MFQM.js';
3
+ import axios from 'axios';
4
+
5
+ // src/main/core/utils/constants.ts
6
+ WP_STORAGE_KEYS.c.auth.login;
7
+ WP_STORAGE_KEYS.c.auth.refresh;
8
+ WP_STORAGE_KEYS.c.auth.portal;
9
+ WP_STORAGE_KEYS.c.auth.sub;
10
+ var HUBSPOT_DATA = WP_STORAGE_KEYS.c.hub;
11
+ var HUB_ID = "hubId";
12
+ var DEV_PORTAL_ID = "devPortalId";
13
+ var PORTAL_ID = "portalId";
14
+ var DEV_API_URL = "devApiUrl";
15
+
16
+ // src/main/core/utils/localStorage.ts
17
+ var memory = /* @__PURE__ */ new Map();
18
+ var memoryStore = {
19
+ getItem(key) {
20
+ return memory.has(key) ? memory.get(key) : null;
21
+ },
22
+ setItem(key, value) {
23
+ memory.set(key, value);
24
+ },
25
+ removeItem(key) {
26
+ memory.delete(key);
27
+ }
28
+ };
29
+ function resolveStore() {
30
+ if (typeof globalThis === "undefined") {
31
+ return memoryStore;
32
+ }
33
+ const ls = globalThis.localStorage;
34
+ if (!ls || typeof ls.getItem !== "function") {
35
+ return memoryStore;
36
+ }
37
+ try {
38
+ const probeKey = "__woodsportal_client_sdk_ls_probe__";
39
+ ls.setItem(probeKey, "1");
40
+ ls.removeItem(probeKey);
41
+ return ls;
42
+ } catch {
43
+ return memoryStore;
44
+ }
45
+ }
46
+ var storage = {
47
+ set: (key, value) => {
48
+ resolveStore().setItem(key, JSON.stringify(value));
49
+ },
50
+ get: (key) => {
51
+ const item = resolveStore().getItem(key);
52
+ return item ? JSON.parse(item) : null;
53
+ },
54
+ remove: (key) => {
55
+ resolveStore().removeItem(key);
56
+ }
57
+ };
58
+
59
+ // src/main/core/utils/runtime-hub-context.ts
60
+ var initializedHubId = "";
61
+ var initializedDevPortalId = "";
62
+ var initializedDevApiUrl = "";
63
+ function setRuntimeHttpClientHubContext(partial) {
64
+ if (partial.hubId != null) {
65
+ initializedHubId = partial.hubId;
66
+ }
67
+ if (partial.devPortalId != null) {
68
+ initializedDevPortalId = partial.devPortalId;
69
+ }
70
+ if (partial.devApiUrl != null) {
71
+ initializedDevApiUrl = partial.devApiUrl;
72
+ }
73
+ }
74
+ function getRuntimeHttpClientHubId() {
75
+ return initializedHubId;
76
+ }
77
+ function getRuntimeHttpClientDevPortalId() {
78
+ return initializedDevPortalId;
79
+ }
80
+ function getRuntimeHttpClientDevApiUrl() {
81
+ return initializedDevApiUrl;
82
+ }
83
+
84
+ // src/main/core/utils/hub-context.ts
85
+ function readStorageField(key) {
86
+ const hubSpotData = storage.get(HUBSPOT_DATA);
87
+ const value = hubSpotData?.[key];
88
+ return value != null && String(value).trim() !== "" ? String(value) : "";
89
+ }
90
+ var config = {
91
+ get hubId() {
92
+ return readStorageField(HUB_ID) || getRuntimeHttpClientHubId();
93
+ },
94
+ get devPortalId() {
95
+ return readStorageField(DEV_PORTAL_ID) || getRuntimeHttpClientDevPortalId();
96
+ },
97
+ get portalId() {
98
+ return readStorageField(PORTAL_ID);
99
+ },
100
+ get devApiUrl() {
101
+ return readStorageField(DEV_API_URL) || getRuntimeHttpClientDevApiUrl();
102
+ }
103
+ };
104
+ var setConfig = {
105
+ setDevPortalId(portalId) {
106
+ const existing = storage.get(HUBSPOT_DATA) || {};
107
+ storage.set(HUBSPOT_DATA, {
108
+ ...existing,
109
+ [PORTAL_ID]: portalId
110
+ });
111
+ }
112
+ };
113
+
114
+ // src/main/core/http/iframe-session-storage.ts
115
+ var iframeStorageMode = false;
116
+ function setIframeStorageMode(enabled) {
117
+ iframeStorageMode = enabled;
118
+ }
119
+ function isIframeStorageMode() {
120
+ return iframeStorageMode;
121
+ }
122
+ function resolveHubId() {
123
+ const fromWindow = typeof window !== "undefined" ? window.hubSpotData?.hubId : void 0;
124
+ const fromConfig = config.hubId;
125
+ return fromWindow ?? fromConfig ?? "default";
126
+ }
127
+ function iframeKey() {
128
+ return wpClientIframeRefreshKey(resolveHubId());
129
+ }
130
+ function iframeExpKey() {
131
+ return wpClientIframeRefreshExpKey(resolveHubId());
132
+ }
133
+ function readIframeRefreshToken() {
134
+ if (typeof window === "undefined" || !window.localStorage) {
135
+ return null;
136
+ }
137
+ try {
138
+ const raw = window.localStorage.getItem(iframeKey());
139
+ return raw ? JSON.parse(raw) : null;
140
+ } catch {
141
+ return null;
142
+ }
143
+ }
144
+ function writeIframeRefreshToken(token, expiresAtMs) {
145
+ if (typeof window === "undefined" || !window.localStorage) {
146
+ return;
147
+ }
148
+ try {
149
+ window.localStorage.setItem(iframeKey(), JSON.stringify(token));
150
+ if (expiresAtMs != null) {
151
+ window.localStorage.setItem(iframeExpKey(), String(expiresAtMs));
152
+ }
153
+ } catch {
154
+ }
155
+ }
156
+
157
+ // src/main/core/utils/error-log-sanitize.ts
158
+ var SENSITIVE_FIELD_NAMES = /* @__PURE__ */ new Set(["token", "refreshtoken", "accesstoken", "password", "secret", "authorization", "otp", "code"]);
159
+ function isSensitiveField(name) {
160
+ const normalized = name.toLowerCase();
161
+ return SENSITIVE_FIELD_NAMES.has(normalized) || normalized.includes("password");
162
+ }
163
+ function redactValue(value) {
164
+ if (value == null || typeof value !== "object") {
165
+ return value;
166
+ }
167
+ if (Array.isArray(value)) {
168
+ return value.map(redactValue);
169
+ }
170
+ const input = value;
171
+ const output = {};
172
+ for (const [key, nested] of Object.entries(input)) {
173
+ output[key] = isSensitiveField(key) ? "[redacted]" : redactValue(nested);
174
+ }
175
+ return output;
176
+ }
177
+ function sanitizeAxiosErrorData(data) {
178
+ if (data == null || typeof data !== "object") {
179
+ return data;
180
+ }
181
+ const payload = data;
182
+ const safeFields = ["errorCode", "message", "errorMessage", "detailedMessage", "correlationId", "category", "statusCode"];
183
+ const summary = {};
184
+ for (const field of safeFields) {
185
+ if (field in payload) {
186
+ summary[field] = payload[field];
187
+ }
188
+ }
189
+ if (Object.keys(summary).length > 0) {
190
+ return summary;
191
+ }
192
+ return redactValue(payload);
193
+ }
194
+ function redactLogMeta(meta) {
195
+ if (meta == null) {
196
+ return meta;
197
+ }
198
+ return redactValue(meta);
199
+ }
200
+
201
+ // src/main/core/logging/logger.ts
202
+ var LEVEL_RANK = {
203
+ debug: 0,
204
+ info: 1,
205
+ warn: 2,
206
+ error: 3,
207
+ silent: 4
208
+ };
209
+ var DEFAULT_CONFIG = {
210
+ level: "info",
211
+ namespace: "woodsportal-sdk",
212
+ enabled: true,
213
+ httpTracing: true
214
+ };
215
+ var runtimeConfig = { ...DEFAULT_CONFIG };
216
+ var customSinks;
217
+ function shouldEmit(level) {
218
+ if (!runtimeConfig.enabled || runtimeConfig.level === "silent") {
219
+ return false;
220
+ }
221
+ return LEVEL_RANK[level] >= LEVEL_RANK[runtimeConfig.level];
222
+ }
223
+ function formatPrefix(context) {
224
+ return `[${runtimeConfig.namespace}] ${context}`;
225
+ }
226
+ function defaultDebug(context, message, meta) {
227
+ if (meta != null) {
228
+ console.debug(formatPrefix(context), message, meta);
229
+ return;
230
+ }
231
+ console.debug(formatPrefix(context), message);
232
+ }
233
+ function defaultInfo(context, message, meta) {
234
+ if (meta != null) {
235
+ console.info(formatPrefix(context), message, meta);
236
+ return;
237
+ }
238
+ console.info(formatPrefix(context), message);
239
+ }
240
+ function defaultWarn(context, message, meta) {
241
+ if (meta != null) {
242
+ console.warn(formatPrefix(context), message, meta);
243
+ return;
244
+ }
245
+ console.warn(formatPrefix(context), message);
246
+ }
247
+ function defaultError(context, error, meta) {
248
+ if (axios.isAxiosError(error)) {
249
+ const payload = {
250
+ message: error.message,
251
+ status: error.response?.status,
252
+ statusText: error.response?.statusText,
253
+ data: sanitizeAxiosErrorData(error.response?.data),
254
+ url: error.config?.url,
255
+ method: error.config?.method,
256
+ ...redactLogMeta(meta)
257
+ };
258
+ console.error(formatPrefix(context), payload);
259
+ return;
260
+ }
261
+ if (error instanceof Error) {
262
+ if (meta != null) {
263
+ console.error(formatPrefix(context), error.message, error, redactLogMeta(meta));
264
+ return;
265
+ }
266
+ console.error(formatPrefix(context), error.message, error);
267
+ return;
268
+ }
269
+ if (meta != null) {
270
+ console.error(formatPrefix(context), error, redactLogMeta(meta));
271
+ return;
272
+ }
273
+ console.error(formatPrefix(context), error);
274
+ }
275
+ function configureLogger(config2 = {}) {
276
+ runtimeConfig = {
277
+ level: config2.level ?? DEFAULT_CONFIG.level,
278
+ namespace: config2.namespace ?? DEFAULT_CONFIG.namespace,
279
+ enabled: config2.enabled ?? DEFAULT_CONFIG.enabled,
280
+ httpTracing: config2.httpTracing ?? DEFAULT_CONFIG.httpTracing
281
+ };
282
+ customSinks = config2.sinks;
283
+ }
284
+ function isHttpTracingEnabled() {
285
+ return runtimeConfig.enabled && runtimeConfig.httpTracing && shouldEmit("debug");
286
+ }
287
+ var logger = {
288
+ debug(context, message, meta) {
289
+ if (!shouldEmit("debug")) return;
290
+ const sink = customSinks?.debug ?? defaultDebug;
291
+ sink(context, message, redactLogMeta(meta));
292
+ },
293
+ info(context, message, meta) {
294
+ if (!shouldEmit("info")) return;
295
+ const sink = customSinks?.info ?? defaultInfo;
296
+ sink(context, message, redactLogMeta(meta));
297
+ },
298
+ warn(context, message, meta) {
299
+ if (!shouldEmit("warn")) return;
300
+ const sink = customSinks?.warn ?? defaultWarn;
301
+ sink(context, message, redactLogMeta(meta));
302
+ },
303
+ error(context, error, meta) {
304
+ if (!shouldEmit("error")) return;
305
+ const sink = customSinks?.error ?? defaultError;
306
+ sink(context, error, redactLogMeta(meta));
307
+ }
308
+ };
309
+
310
+ // src/main/core/http/token-store.ts
311
+ var accessToken = null;
312
+ var tokenExpiresAt = null;
313
+ var accessTtlMs = null;
314
+ var refreshCallback = null;
315
+ var refreshBufferSeconds = 60;
316
+ var refreshPromise = null;
317
+ var lastRefreshFailed = false;
318
+ var lastSuccessfulRefreshAt = null;
319
+ var sessionLifecycleListener = null;
320
+ var MIN_SHORT_TTL_BUFFER_MS = 5e3;
321
+ var MIN_PROACTIVE_REFRESH_INTERVAL_MS = 3e4;
322
+ function getEffectiveBufferMs(ttlMs) {
323
+ const capMs = refreshBufferSeconds * 1e3;
324
+ let buffer;
325
+ if (ttlMs <= capMs) {
326
+ buffer = Math.max(MIN_SHORT_TTL_BUFFER_MS, Math.floor(ttlMs * 0.2));
327
+ } else {
328
+ buffer = capMs;
329
+ }
330
+ const maxBuffer = Math.max(0, ttlMs - 1e3);
331
+ return Math.min(buffer, maxBuffer);
332
+ }
333
+ function getCurrentBufferMs() {
334
+ if (accessTtlMs != null && accessTtlMs > 0) {
335
+ return getEffectiveBufferMs(accessTtlMs);
336
+ }
337
+ return refreshBufferSeconds * 1e3;
338
+ }
339
+ function getAccessToken() {
340
+ return accessToken;
341
+ }
342
+ function setSessionLifecycleListener(listener) {
343
+ sessionLifecycleListener = listener;
344
+ }
345
+ function notifySessionLifecycleChange() {
346
+ try {
347
+ sessionLifecycleListener?.();
348
+ } catch {
349
+ }
350
+ }
351
+ function persistRefreshExhausted() {
352
+ if (typeof window === "undefined" || !window.sessionStorage) {
353
+ return;
354
+ }
355
+ try {
356
+ window.sessionStorage.setItem(WP_STORAGE_KEYS.c.auth.refreshExhausted, JSON.stringify({ ts: Date.now() }));
357
+ } catch {
358
+ }
359
+ }
360
+ function clearPersistedRefreshExhausted() {
361
+ if (typeof window === "undefined" || !window.sessionStorage) {
362
+ return;
363
+ }
364
+ try {
365
+ window.sessionStorage.removeItem(WP_STORAGE_KEYS.c.auth.refreshExhausted);
366
+ } catch {
367
+ }
368
+ }
369
+ function readPersistedRefreshExhausted() {
370
+ if (typeof window === "undefined" || !window.sessionStorage) {
371
+ return false;
372
+ }
373
+ try {
374
+ return Boolean(window.sessionStorage.getItem(WP_STORAGE_KEYS.c.auth.refreshExhausted));
375
+ } catch {
376
+ return false;
377
+ }
378
+ }
379
+ function hydrateSessionRefreshState() {
380
+ if (readPersistedRefreshExhausted()) {
381
+ lastRefreshFailed = true;
382
+ }
383
+ }
384
+ function clearSessionRefreshExhaustedState() {
385
+ lastRefreshFailed = false;
386
+ clearPersistedRefreshExhausted();
387
+ }
388
+ function markRefreshFailed() {
389
+ lastRefreshFailed = true;
390
+ persistRefreshExhausted();
391
+ clearAccessToken();
392
+ notifySessionLifecycleChange();
393
+ }
394
+ function storAccessToken(token, expiresIn) {
395
+ accessToken = token;
396
+ clearSessionRefreshExhaustedState();
397
+ if (expiresIn != null && expiresIn > 0) {
398
+ accessTtlMs = expiresIn * 1e3;
399
+ tokenExpiresAt = Date.now() + accessTtlMs;
400
+ } else {
401
+ accessTtlMs = null;
402
+ tokenExpiresAt = null;
403
+ }
404
+ notifySessionLifecycleChange();
405
+ }
406
+ function clearAccessToken() {
407
+ accessToken = null;
408
+ tokenExpiresAt = null;
409
+ accessTtlMs = null;
410
+ lastSuccessfulRefreshAt = null;
411
+ }
412
+ function resetSessionAuthState() {
413
+ lastSuccessfulRefreshAt = null;
414
+ }
415
+ function setRefreshBufferSeconds(seconds) {
416
+ refreshBufferSeconds = Math.max(0, seconds);
417
+ }
418
+ function didLastRefreshFail() {
419
+ return lastRefreshFailed;
420
+ }
421
+ function isSessionRefreshExhausted() {
422
+ if (lastRefreshFailed) {
423
+ return true;
424
+ }
425
+ if (readPersistedRefreshExhausted()) {
426
+ lastRefreshFailed = true;
427
+ return true;
428
+ }
429
+ return false;
430
+ }
431
+ function isExpiresAccessToken() {
432
+ if (!accessToken) return true;
433
+ if (tokenExpiresAt === null) return false;
434
+ const bufferMs = getCurrentBufferMs();
435
+ return Date.now() >= tokenExpiresAt - bufferMs;
436
+ }
437
+ function setRefreshCallback(callback) {
438
+ refreshCallback = callback;
439
+ }
440
+ function isRefreshInFlight() {
441
+ return refreshPromise != null;
442
+ }
443
+ async function refreshSession(options = {}) {
444
+ const { force = false } = options;
445
+ if (!force && lastSuccessfulRefreshAt != null && Date.now() - lastSuccessfulRefreshAt < MIN_PROACTIVE_REFRESH_INTERVAL_MS) {
446
+ return;
447
+ }
448
+ if (!refreshCallback) {
449
+ return;
450
+ }
451
+ if (!refreshPromise) {
452
+ refreshPromise = (async () => {
453
+ const { withRefreshLock } = await import('./refresh-lock-JQVP4YOS.js');
454
+ await withRefreshLock(async () => {
455
+ const { getRefreshToken: getRefreshToken2 } = await import('./auth-utils-Z5P6SMLJ.js');
456
+ const refreshToken = getRefreshToken2();
457
+ if (!refreshToken) {
458
+ markRefreshFailed();
459
+ const storageKey = getStorageKeys().refreshToken;
460
+ const hasCookieKey = typeof document !== "undefined" && typeof storageKey === "string" && storageKey.length > 0 && document.cookie.includes(`${storageKey}=`);
461
+ logger.warn("auth", "refresh session aborted: missing refresh token", {
462
+ operation: "refreshSession",
463
+ storageKey,
464
+ hasCookieKey,
465
+ iframeStorageMode: isIframeStorageMode()
466
+ });
467
+ throw new Error("Session expired: missing refresh token");
468
+ }
469
+ const result = await refreshCallback(refreshToken);
470
+ if (!result.success || !result.token) {
471
+ markRefreshFailed();
472
+ throw new Error("Session refresh failed");
473
+ }
474
+ lastRefreshFailed = false;
475
+ lastSuccessfulRefreshAt = Date.now();
476
+ });
477
+ })().finally(() => {
478
+ refreshPromise = null;
479
+ });
480
+ }
481
+ await refreshPromise;
482
+ }
483
+ async function ensureValidRefresh() {
484
+ if (!isExpiresAccessToken()) {
485
+ return;
486
+ }
487
+ await refreshSession({ force: true });
488
+ }
489
+ function isAuthenticateApp() {
490
+ const token = getAccessToken();
491
+ if (token) {
492
+ const bufferMs = getCurrentBufferMs();
493
+ if (tokenExpiresAt === null || Date.now() < tokenExpiresAt - bufferMs) {
494
+ return true;
495
+ }
496
+ }
497
+ if (!isCookieExpired(getStorageKeys().refreshToken)) {
498
+ if (lastRefreshFailed && !token) {
499
+ return false;
500
+ }
501
+ return true;
502
+ }
503
+ return false;
504
+ }
505
+ function isAuthenticated() {
506
+ return isAuthenticateApp();
507
+ }
508
+ function isAccessTokenExpired() {
509
+ return isExpiresAccessToken();
510
+ }
511
+ function hasRefreshSession() {
512
+ if (isSessionRefreshExhausted() && !accessToken) {
513
+ return false;
514
+ }
515
+ const refreshKey = getStorageKeys().refreshToken;
516
+ if (!refreshKey || isCookieExpired(refreshKey)) {
517
+ return false;
518
+ }
519
+ if (!readRefreshTokenValue()) {
520
+ return false;
521
+ }
522
+ if (lastRefreshFailed && !accessToken) {
523
+ return false;
524
+ }
525
+ return true;
526
+ }
527
+ function readRefreshTokenValue() {
528
+ const key = getStorageKeys().refreshToken;
529
+ const raw = getCookie(key);
530
+ if (!isCorruptCookieRawValue(raw)) {
531
+ return raw;
532
+ }
533
+ if (isIframeStorageMode()) {
534
+ return readIframeRefreshToken();
535
+ }
536
+ return null;
537
+ }
538
+ function hasValidAccessToken() {
539
+ return Boolean(getAccessToken()) && !isExpiresAccessToken();
540
+ }
541
+
542
+ // src/main/core/http/auth-utils.ts
543
+ function writeJsonCookie(key, data, expire) {
544
+ if (!key) {
545
+ return;
546
+ }
547
+ const serialized = stringifyCookieValue(data);
548
+ if (serialized == null) {
549
+ return;
550
+ }
551
+ setCookie(key, serialized, expire);
552
+ }
553
+ var setLoggedInDetails = async (data) => {
554
+ return new Promise((resolve) => {
555
+ const keys = getStorageKeys();
556
+ writeJsonCookie(keys.loginDetails, data);
557
+ if (keys.authUser !== keys.loginDetails) {
558
+ writeJsonCookie(keys.authUser, data);
559
+ }
560
+ resolve();
561
+ });
562
+ };
563
+ var setProfileDetails = async (data) => {
564
+ return new Promise((resolve) => {
565
+ writeJsonCookie(getStorageKeys().loginDetails, data);
566
+ resolve();
567
+ });
568
+ };
569
+ function setRefreshToken(token, expiresAt) {
570
+ return new Promise((resolve) => {
571
+ if (!token || typeof token !== "string") {
572
+ resolve();
573
+ return;
574
+ }
575
+ let expiresMs;
576
+ if (typeof expiresAt === "number" && expiresAt > 1e12) {
577
+ expiresMs = expiresAt;
578
+ } else if (typeof expiresAt === "number" && expiresAt > 1e9) {
579
+ expiresMs = expiresAt * 1e3;
580
+ } else {
581
+ expiresMs = Date.now() + (expiresAt || 0) * 1e3;
582
+ }
583
+ const serialized = stringifyCookieValue(token);
584
+ if (serialized != null) {
585
+ setCookie(getStorageKeys().refreshToken, serialized, new Date(expiresMs));
586
+ }
587
+ if (isIframeStorageMode()) {
588
+ writeIframeRefreshToken(token, expiresMs);
589
+ }
590
+ resolve();
591
+ });
592
+ }
593
+ function setAccessToken(token, expiresIn) {
594
+ return new Promise((resolve) => {
595
+ storAccessToken(token, expiresIn);
596
+ resolve();
597
+ });
598
+ }
599
+ var setPortal = async (data) => {
600
+ return new Promise((resolve) => {
601
+ writeJsonCookie(getStorageKeys().portal, data ?? {});
602
+ resolve();
603
+ });
604
+ };
605
+ var setSubscriptionType = async (data) => {
606
+ return new Promise((resolve) => {
607
+ writeJsonCookie(getStorageKeys().subscriptionType, data ?? "BASIC");
608
+ resolve();
609
+ });
610
+ };
611
+ function getProfile() {
612
+ return parseCookieJson(getStorageKeys().loginDetails);
613
+ }
614
+ function getRefreshToken() {
615
+ const raw = getCookie(getStorageKeys().refreshToken);
616
+ if (!isCorruptCookieRawValue(raw)) {
617
+ return raw;
618
+ }
619
+ if (isIframeStorageMode()) {
620
+ return readIframeRefreshToken();
621
+ }
622
+ return null;
623
+ }
624
+ function getPortal() {
625
+ return parseCookieJson(getStorageKeys().portal);
626
+ }
627
+ function getSubscriptionType() {
628
+ return parseCookieJson(getStorageKeys().subscriptionType);
629
+ }
630
+
631
+ export { DEV_API_URL, DEV_PORTAL_ID, HUBSPOT_DATA, HUB_ID, clearAccessToken, clearSessionRefreshExhaustedState, config, configureLogger, didLastRefreshFail, ensureValidRefresh, getAccessToken, getPortal, getProfile, getRefreshToken, getSubscriptionType, hasRefreshSession, hasValidAccessToken, hydrateSessionRefreshState, isAccessTokenExpired, isAuthenticateApp, isAuthenticated, isExpiresAccessToken, isHttpTracingEnabled, isRefreshInFlight, isSessionRefreshExhausted, logger, refreshSession, resetSessionAuthState, sanitizeAxiosErrorData, setAccessToken, setConfig, setIframeStorageMode, setLoggedInDetails, setPortal, setProfileDetails, setRefreshBufferSeconds, setRefreshCallback, setRefreshToken, setRuntimeHttpClientHubContext, setSessionLifecycleListener, setSubscriptionType, storAccessToken, storage };
632
+ //# sourceMappingURL=chunk-B2OVKOJU.js.map
633
+ //# sourceMappingURL=chunk-B2OVKOJU.js.map