woodsportal-client-sdk 4.0.7-dev.0 → 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 (53) hide show
  1. package/dist/adapters/angular/index.js +6 -6
  2. package/dist/adapters/react/index.js +6 -6
  3. package/dist/adapters/vue/index.js +6 -6
  4. package/dist/auth-interceptor-policy-LU2L5NJM.js +5 -0
  5. package/dist/{auth-interceptor-policy-BSY5KIIA.js.map → auth-interceptor-policy-LU2L5NJM.js.map} +1 -1
  6. package/dist/auth-utils-Z5P6SMLJ.js +5 -0
  7. package/dist/{auth-utils-XIHNYE63.js.map → auth-utils-Z5P6SMLJ.js.map} +1 -1
  8. package/dist/{chunk-J33YFZCS.js → chunk-6YOL5LPB.js} +8 -7
  9. package/dist/chunk-6YOL5LPB.js.map +1 -0
  10. package/dist/{chunk-ADOV2R3A.js → chunk-B2OVKOJU.js} +73 -11
  11. package/dist/chunk-B2OVKOJU.js.map +1 -0
  12. package/dist/{chunk-6ROV3EE2.js → chunk-BKT4MFQM.js} +3 -2
  13. package/dist/chunk-BKT4MFQM.js.map +1 -0
  14. package/dist/{chunk-OF5OLEE5.js → chunk-BURJ2NUL.js} +3 -3
  15. package/dist/{chunk-OF5OLEE5.js.map → chunk-BURJ2NUL.js.map} +1 -1
  16. package/dist/{chunk-GVXA7OKY.js → chunk-FJAOCLB4.js} +5 -5
  17. package/dist/{chunk-GVXA7OKY.js.map → chunk-FJAOCLB4.js.map} +1 -1
  18. package/dist/{chunk-DZC3DJUO.js → chunk-GUYIJ4ZE.js} +13 -4
  19. package/dist/chunk-GUYIJ4ZE.js.map +1 -0
  20. package/dist/{chunk-WNBF6FKG.js → chunk-HAXXPW65.js} +8 -6
  21. package/dist/chunk-HAXXPW65.js.map +1 -0
  22. package/dist/{chunk-7OGXVANB.js → chunk-OFPD644E.js} +4 -4
  23. package/dist/{chunk-7OGXVANB.js.map → chunk-OFPD644E.js.map} +1 -1
  24. package/dist/{chunk-U66LWTVC.js → chunk-PFOSN7EB.js} +4 -4
  25. package/dist/{chunk-U66LWTVC.js.map → chunk-PFOSN7EB.js.map} +1 -1
  26. package/dist/{chunk-4IKGBHFJ.js → chunk-WNE4LSVH.js} +23 -9
  27. package/dist/chunk-WNE4LSVH.js.map +1 -0
  28. package/dist/{chunk-YOT5RW3R.js → chunk-YNOZWRK3.js} +4 -4
  29. package/dist/chunk-YNOZWRK3.js.map +1 -0
  30. package/dist/cross-tab-session-TUFJ6KU7.js +9 -0
  31. package/dist/{cross-tab-session-OJKWJSNT.js.map → cross-tab-session-TUFJ6KU7.js.map} +1 -1
  32. package/dist/entries/auth.d.ts +4 -2
  33. package/dist/entries/auth.js +8 -8
  34. package/dist/entries/crm.js +7 -7
  35. package/dist/{http-errors-_XPPqJ_a.d.ts → http-errors-Bwhj6cfB.d.ts} +3 -1
  36. package/dist/index.d.ts +5 -2
  37. package/dist/index.js +13 -13
  38. package/dist/{refresh-lock-UW5RRRTD.js → refresh-lock-JQVP4YOS.js} +3 -3
  39. package/dist/{refresh-lock-UW5RRRTD.js.map → refresh-lock-JQVP4YOS.js.map} +1 -1
  40. package/dist/storage-migration-BY2QL6YD.js +4 -0
  41. package/dist/{storage-migration-OCOML7VA.js.map → storage-migration-BY2QL6YD.js.map} +1 -1
  42. package/package.json +1 -1
  43. package/dist/auth-interceptor-policy-BSY5KIIA.js +0 -5
  44. package/dist/auth-utils-XIHNYE63.js +0 -5
  45. package/dist/chunk-4IKGBHFJ.js.map +0 -1
  46. package/dist/chunk-6ROV3EE2.js.map +0 -1
  47. package/dist/chunk-ADOV2R3A.js.map +0 -1
  48. package/dist/chunk-DZC3DJUO.js.map +0 -1
  49. package/dist/chunk-J33YFZCS.js.map +0 -1
  50. package/dist/chunk-WNBF6FKG.js.map +0 -1
  51. package/dist/chunk-YOT5RW3R.js.map +0 -1
  52. package/dist/cross-tab-session-OJKWJSNT.js +0 -9
  53. package/dist/storage-migration-OCOML7VA.js +0 -4
@@ -1,10 +1,10 @@
1
1
  import { bindStoreWithActions } from '../../chunk-AYTO6ND7.js';
2
- import { createAdapterHooks } from '../../chunk-7OGXVANB.js';
3
- import '../../chunk-OF5OLEE5.js';
4
- import '../../chunk-U66LWTVC.js';
5
- import '../../chunk-ADOV2R3A.js';
6
- import '../../chunk-YOT5RW3R.js';
7
- import '../../chunk-6ROV3EE2.js';
2
+ import { createAdapterHooks } from '../../chunk-OFPD644E.js';
3
+ import '../../chunk-BURJ2NUL.js';
4
+ import '../../chunk-PFOSN7EB.js';
5
+ import '../../chunk-B2OVKOJU.js';
6
+ import '../../chunk-YNOZWRK3.js';
7
+ import '../../chunk-BKT4MFQM.js';
8
8
  import { inject, DestroyRef, signal } from '@angular/core';
9
9
 
10
10
  function createAngularStoreComposable(store, actions) {
@@ -1,9 +1,9 @@
1
- import { createAdapterHooks } from '../../chunk-7OGXVANB.js';
2
- import '../../chunk-OF5OLEE5.js';
3
- import '../../chunk-U66LWTVC.js';
4
- import '../../chunk-ADOV2R3A.js';
5
- import '../../chunk-YOT5RW3R.js';
6
- import '../../chunk-6ROV3EE2.js';
1
+ import { createAdapterHooks } from '../../chunk-OFPD644E.js';
2
+ import '../../chunk-BURJ2NUL.js';
3
+ import '../../chunk-PFOSN7EB.js';
4
+ import '../../chunk-B2OVKOJU.js';
5
+ import '../../chunk-YNOZWRK3.js';
6
+ import '../../chunk-BKT4MFQM.js';
7
7
  import { useSyncExternalStore } from 'react';
8
8
 
9
9
  function createReactStoreComposable(store, actions) {
@@ -1,10 +1,10 @@
1
1
  import { bindStoreWithActions } from '../../chunk-AYTO6ND7.js';
2
- import { createAdapterHooks } from '../../chunk-7OGXVANB.js';
3
- import '../../chunk-OF5OLEE5.js';
4
- import '../../chunk-U66LWTVC.js';
5
- import '../../chunk-ADOV2R3A.js';
6
- import '../../chunk-YOT5RW3R.js';
7
- import '../../chunk-6ROV3EE2.js';
2
+ import { createAdapterHooks } from '../../chunk-OFPD644E.js';
3
+ import '../../chunk-BURJ2NUL.js';
4
+ import '../../chunk-PFOSN7EB.js';
5
+ import '../../chunk-B2OVKOJU.js';
6
+ import '../../chunk-YNOZWRK3.js';
7
+ import '../../chunk-BKT4MFQM.js';
8
8
  import { reactive, onScopeDispose } from 'vue';
9
9
 
10
10
  function createVueStoreComposable(store, actions) {
@@ -0,0 +1,5 @@
1
+ export { isOptionalAuthFailureUrl, isRefreshEndpointUrl, isSessionProbeUrl, persistAuthError, readPersistedAuthError, resolveAuthErrorAction } from './chunk-GUYIJ4ZE.js';
2
+ import './chunk-COHBSTHF.js';
3
+ import './chunk-BKT4MFQM.js';
4
+ //# sourceMappingURL=auth-interceptor-policy-LU2L5NJM.js.map
5
+ //# sourceMappingURL=auth-interceptor-policy-LU2L5NJM.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":[],"names":[],"mappings":"","file":"auth-interceptor-policy-BSY5KIIA.js"}
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"auth-interceptor-policy-LU2L5NJM.js"}
@@ -0,0 +1,5 @@
1
+ export { getPortal, getProfile, getRefreshToken, getSubscriptionType, setAccessToken, setLoggedInDetails, setPortal, setProfileDetails, setRefreshToken, setSubscriptionType } from './chunk-B2OVKOJU.js';
2
+ import './chunk-YNOZWRK3.js';
3
+ import './chunk-BKT4MFQM.js';
4
+ //# sourceMappingURL=auth-utils-Z5P6SMLJ.js.map
5
+ //# sourceMappingURL=auth-utils-Z5P6SMLJ.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":[],"names":[],"mappings":"","file":"auth-utils-XIHNYE63.js"}
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"auth-utils-Z5P6SMLJ.js"}
@@ -1,8 +1,8 @@
1
- import { multiObjectStore } from './chunk-OF5OLEE5.js';
2
- import { actions2, tableStore, tableUiStore, noteStore, emailStore, userStore, syncStore, formStore, fileStore } from './chunk-U66LWTVC.js';
3
- import { clearAccessToken, resetSessionAuthState } from './chunk-ADOV2R3A.js';
4
- import { clearClientAuthCookies, clearClientIframeRefreshLocalKeys } from './chunk-YOT5RW3R.js';
5
- import { WP_STORAGE_KEYS } from './chunk-6ROV3EE2.js';
1
+ import { multiObjectStore } from './chunk-BURJ2NUL.js';
2
+ import { actions2, tableStore, tableUiStore, noteStore, emailStore, userStore, syncStore, formStore, fileStore } from './chunk-PFOSN7EB.js';
3
+ import { clearAccessToken, resetSessionAuthState, clearSessionRefreshExhaustedState } from './chunk-B2OVKOJU.js';
4
+ import { clearClientAuthCookies, clearClientIframeRefreshLocalKeys } from './chunk-YNOZWRK3.js';
5
+ import { WP_STORAGE_KEYS } from './chunk-BKT4MFQM.js';
6
6
 
7
7
  // src/main/core/http/session-teardown.ts
8
8
  function resetSessionStores() {
@@ -58,6 +58,7 @@ function clearClientSdkSession() {
58
58
  clearAccessToken();
59
59
  resetSessionStores();
60
60
  resetSessionAuthState();
61
+ clearSessionRefreshExhaustedState();
61
62
  }
62
63
 
63
64
  // src/main/core/http/cross-tab-session.ts
@@ -158,5 +159,5 @@ function resetCrossTabSessionSyncForTests() {
158
159
  }
159
160
 
160
161
  export { applyCrossTabSessionRevocation, clearClientSdkSession, installCrossTabSessionListener, resetCrossTabSessionSyncForTests, resetSessionStores, signalSessionChanged };
161
- //# sourceMappingURL=chunk-J33YFZCS.js.map
162
- //# sourceMappingURL=chunk-J33YFZCS.js.map
162
+ //# sourceMappingURL=chunk-6YOL5LPB.js.map
163
+ //# sourceMappingURL=chunk-6YOL5LPB.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/main/core/http/session-teardown.ts","../src/main/core/http/cross-tab-session.ts"],"names":["actions"],"mappings":"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","file":"chunk-6YOL5LPB.js","sourcesContent":["import { clearAccessToken, clearSessionRefreshExhaustedState, resetSessionAuthState } from './token-store'\nimport { clearClientAuthCookies } from '../utils/cookie'\nimport { clearClientIframeRefreshLocalKeys } from '../utils/storage-migration'\nimport {\n tableStore,\n tableActions,\n tableUiStore,\n noteStore,\n emailStore,\n userStore,\n syncStore,\n formStore,\n fileStore,\n multiObjectStore\n} from '../../state/index.js'\n\n/** Reset CRM nanostores to empty session state (logout / forced 401). */\nexport function resetSessionStores(): void {\n tableActions.clearTablePrependData()\n tableStore.setState({\n queryParams: null,\n multiObjectsQueryParams: {},\n objectsData: null,\n tableData: [],\n tablePrependData: [],\n hubspotObjectTypeId: '',\n selectedPipeline: '',\n viewType: ''\n })\n tableUiStore.setState({\n tableUniqueId: null,\n gridData: [],\n sort: '-hs_createdate',\n limit: 10,\n after: '',\n page: 1,\n nextPage: 1,\n stageId: '',\n totalItems: 1,\n numOfPages: 1,\n currentPage: 1,\n search: '',\n filterPropertyName: 'hs_pipeline',\n filterOperator: 'eq',\n filterValue: '',\n isPrimaryCompany: null,\n view: null,\n selectedPipeline: '',\n tableParam: {},\n tableDefPermissions: {}\n })\n noteStore.setState({ notes: [], prependNotes: [], id: '', queryParams: null })\n emailStore.setState({ emails: [], prependEmails: [], id: '', queryParams: null })\n userStore.setState({ profile: null })\n syncStore.setState({\n apiSync: false,\n sync: false,\n isSyncLoading: false,\n isSyncDisable: false\n })\n formStore.setState({ form: null })\n fileStore.setState({ files: null, id: '', queryParams: null })\n multiObjectStore.setState({ objects: {}, objectsPrependData: {}, meta: {} })\n}\n\n/**\n * Full client SDK session teardown (cookies, sessionStorage, iframe keys, memory token, CRM stores).\n * Consumer apps should also clear TanStack Query + local UI state after calling this.\n */\nexport function clearClientSdkSession(): void {\n clearClientAuthCookies()\n clearClientIframeRefreshLocalKeys()\n clearAccessToken()\n resetSessionStores()\n resetSessionAuthState()\n clearSessionRefreshExhaustedState()\n}\n","import { WP_STORAGE_KEYS } from '../utils/wp-storage-keys'\nimport { clearClientSdkSession } from './session-teardown'\nimport { clearAccessToken } from './token-store'\n\nconst REV_KEY = WP_STORAGE_KEYS.c.auth.rev\nconst CHANNEL_NAME = 'woodsportal:session-sync'\n\ntype SessionSyncMessage = { type: 'rev' | 'login'; ts: number }\n\nfunction writeRevSignal(): void {\n if (typeof window === 'undefined' || !window.localStorage) {\n return\n }\n try {\n window.localStorage.setItem(REV_KEY, String(Date.now()))\n } catch {\n // ignore\n }\n}\n\nfunction getBroadcastChannel(): BroadcastChannel | null {\n if (typeof BroadcastChannel === 'undefined') {\n return null\n }\n try {\n return new BroadcastChannel(CHANNEL_NAME)\n } catch {\n return null\n }\n}\n\n/** Notify other tabs that session ended or restarted. */\nexport function signalSessionChanged(kind: 'rev' | 'login' = 'rev'): void {\n writeRevSignal()\n const channel = getBroadcastChannel()\n if (channel) {\n const message: SessionSyncMessage = { type: kind, ts: Date.now() }\n channel.postMessage(message)\n channel.close()\n }\n}\n\nexport type SessionSyncListener = (kind: 'rev' | 'login') => void\n\nlet listenerInstalled = false\nlet broadcastChannel: BroadcastChannel | null = null\nconst listeners = new Set<SessionSyncListener>()\n\nfunction dispatch(kind: 'rev' | 'login'): void {\n listeners.forEach((fn) => {\n try {\n fn(kind)\n } catch {\n // consumer error\n }\n })\n}\n\nfunction handleRemoteSessionChange(kind: 'rev' | 'login'): void {\n if (kind === 'rev') {\n clearAccessToken()\n }\n dispatch(kind)\n}\n\n/**\n * Listen for logout/login in other tabs (localStorage + BroadcastChannel).\n * Returns unsubscribe function.\n */\nexport function installCrossTabSessionListener(onChange?: SessionSyncListener): () => void {\n if (typeof window === 'undefined') {\n return () => undefined\n }\n\n if (onChange) {\n listeners.add(onChange)\n }\n\n if (!listenerInstalled) {\n listenerInstalled = true\n\n window.addEventListener('storage', (event) => {\n if (event.key !== REV_KEY || event.newValue == null) {\n return\n }\n handleRemoteSessionChange('rev')\n })\n\n try {\n broadcastChannel?.close()\n broadcastChannel = new BroadcastChannel(CHANNEL_NAME)\n broadcastChannel.onmessage = (event: MessageEvent<SessionSyncMessage>) => {\n const kind = event.data?.type === 'login' ? 'login' : 'rev'\n handleRemoteSessionChange(kind)\n }\n } catch {\n // BroadcastChannel unavailable\n }\n\n window.addEventListener('pageshow', (event) => {\n if (event.persisted) {\n handleRemoteSessionChange('rev')\n }\n })\n }\n\n return () => {\n if (onChange) {\n listeners.delete(onChange)\n }\n }\n}\n\n/** Remote tab signalled logout — clear readable session artifacts. */\nexport function applyCrossTabSessionRevocation(): void {\n clearClientSdkSession()\n}\n\n/** Test-only: close BroadcastChannel and allow listener reinstall (prevents open-handle hangs). */\nexport function resetCrossTabSessionSyncForTests(): void {\n try {\n broadcastChannel?.close()\n } catch {\n // ignore\n }\n broadcastChannel = null\n listenerInstalled = false\n listeners.clear()\n}\n"]}
@@ -1,5 +1,5 @@
1
- import { getStorageKeys, isCookieExpired, stringifyCookieValue, setCookie, parseCookieJson, getCookie, isCorruptCookieRawValue } from './chunk-YOT5RW3R.js';
2
- import { WP_STORAGE_KEYS, wpClientIframeRefreshKey, wpClientIframeRefreshExpKey } from './chunk-6ROV3EE2.js';
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
3
  import axios from 'axios';
4
4
 
5
5
  // src/main/core/utils/constants.ts
@@ -348,14 +348,52 @@ function notifySessionLifecycleChange() {
348
348
  } catch {
349
349
  }
350
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
+ }
351
388
  function markRefreshFailed() {
352
389
  lastRefreshFailed = true;
390
+ persistRefreshExhausted();
353
391
  clearAccessToken();
354
392
  notifySessionLifecycleChange();
355
393
  }
356
394
  function storAccessToken(token, expiresIn) {
357
395
  accessToken = token;
358
- lastRefreshFailed = false;
396
+ clearSessionRefreshExhaustedState();
359
397
  if (expiresIn != null && expiresIn > 0) {
360
398
  accessTtlMs = expiresIn * 1e3;
361
399
  tokenExpiresAt = Date.now() + accessTtlMs;
@@ -372,7 +410,6 @@ function clearAccessToken() {
372
410
  lastSuccessfulRefreshAt = null;
373
411
  }
374
412
  function resetSessionAuthState() {
375
- lastRefreshFailed = false;
376
413
  lastSuccessfulRefreshAt = null;
377
414
  }
378
415
  function setRefreshBufferSeconds(seconds) {
@@ -382,7 +419,14 @@ function didLastRefreshFail() {
382
419
  return lastRefreshFailed;
383
420
  }
384
421
  function isSessionRefreshExhausted() {
385
- return lastRefreshFailed;
422
+ if (lastRefreshFailed) {
423
+ return true;
424
+ }
425
+ if (readPersistedRefreshExhausted()) {
426
+ lastRefreshFailed = true;
427
+ return true;
428
+ }
429
+ return false;
386
430
  }
387
431
  function isExpiresAccessToken() {
388
432
  if (!accessToken) return true;
@@ -406,9 +450,9 @@ async function refreshSession(options = {}) {
406
450
  }
407
451
  if (!refreshPromise) {
408
452
  refreshPromise = (async () => {
409
- const { withRefreshLock } = await import('./refresh-lock-UW5RRRTD.js');
453
+ const { withRefreshLock } = await import('./refresh-lock-JQVP4YOS.js');
410
454
  await withRefreshLock(async () => {
411
- const { getRefreshToken: getRefreshToken2 } = await import('./auth-utils-XIHNYE63.js');
455
+ const { getRefreshToken: getRefreshToken2 } = await import('./auth-utils-Z5P6SMLJ.js');
412
456
  const refreshToken = getRefreshToken2();
413
457
  if (!refreshToken) {
414
458
  markRefreshFailed();
@@ -465,7 +509,14 @@ function isAccessTokenExpired() {
465
509
  return isExpiresAccessToken();
466
510
  }
467
511
  function hasRefreshSession() {
468
- if (isCookieExpired(getStorageKeys().refreshToken)) {
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()) {
469
520
  return false;
470
521
  }
471
522
  if (lastRefreshFailed && !accessToken) {
@@ -473,6 +524,17 @@ function hasRefreshSession() {
473
524
  }
474
525
  return true;
475
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
+ }
476
538
  function hasValidAccessToken() {
477
539
  return Boolean(getAccessToken()) && !isExpiresAccessToken();
478
540
  }
@@ -566,6 +628,6 @@ function getSubscriptionType() {
566
628
  return parseCookieJson(getStorageKeys().subscriptionType);
567
629
  }
568
630
 
569
- export { DEV_API_URL, DEV_PORTAL_ID, HUBSPOT_DATA, HUB_ID, clearAccessToken, config, configureLogger, didLastRefreshFail, ensureValidRefresh, getAccessToken, getPortal, getProfile, getRefreshToken, getSubscriptionType, hasRefreshSession, hasValidAccessToken, 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 };
570
- //# sourceMappingURL=chunk-ADOV2R3A.js.map
571
- //# sourceMappingURL=chunk-ADOV2R3A.js.map
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
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/main/core/utils/constants.ts","../src/main/core/utils/localStorage.ts","../src/main/core/utils/runtime-hub-context.ts","../src/main/core/utils/hub-context.ts","../src/main/core/http/iframe-session-storage.ts","../src/main/core/utils/error-log-sanitize.ts","../src/main/core/logging/logger.ts","../src/main/core/http/token-store.ts","../src/main/core/http/auth-utils.ts"],"names":["config","getRefreshToken"],"mappings":"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","file":"chunk-B2OVKOJU.js","sourcesContent":["import { WP_STORAGE_KEYS } from './wp-storage-keys'\n\n// cookies (canonical wp.c.* names)\nexport const LOGIN_DETAILS = WP_STORAGE_KEYS.c.auth.login\nexport const REFRESH_TOKEN = WP_STORAGE_KEYS.c.auth.refresh\nexport const PORTAL = WP_STORAGE_KEYS.c.auth.portal\nexport const SUBSCRIPTION_TYPE = WP_STORAGE_KEYS.c.auth.sub\n\n// hub context fields inside wp.c.hub JSON blob\nexport const HUBSPOT_DATA = WP_STORAGE_KEYS.c.hub\nexport const HUB_ID = 'hubId'\nexport const DEV_PORTAL_ID = 'devPortalId'\nexport const PORTAL_ID = 'portalId'\nexport const DEV_API_URL = 'devApiUrl'\n","type StringStore = {\n getItem(key: string): string | null\n setItem(key: string, value: string): void\n removeItem(key: string): void\n}\n\nconst memory = new Map<string, string>()\n\nconst memoryStore: StringStore = {\n getItem(key: string) {\n return memory.has(key) ? memory.get(key)! : null\n },\n setItem(key: string, value: string) {\n memory.set(key, value)\n },\n removeItem(key: string) {\n memory.delete(key)\n }\n}\n\nfunction resolveStore(): StringStore {\n if (typeof globalThis === 'undefined') {\n return memoryStore\n }\n const ls = (globalThis as unknown as { localStorage?: StringStore }).localStorage\n if (!ls || typeof ls.getItem !== 'function') {\n return memoryStore\n }\n try {\n const probeKey = '__woodsportal_client_sdk_ls_probe__'\n ls.setItem(probeKey, '1')\n ls.removeItem(probeKey)\n return ls\n } catch {\n return memoryStore\n }\n}\n\nexport const storage = {\n set: (key: string, value: unknown) => {\n resolveStore().setItem(key, JSON.stringify(value))\n },\n\n get: <T>(key: string): T | null => {\n const item = resolveStore().getItem(key)\n return item ? (JSON.parse(item) as T) : null\n },\n\n remove: (key: string) => {\n resolveStore().removeItem(key)\n }\n}\n","/** Initialized HTTP client hub context — fallback when storage is empty (avoids import cycles). */\nlet initializedHubId = ''\nlet initializedDevPortalId = ''\nlet initializedDevApiUrl = ''\n\nexport function setRuntimeHttpClientHubContext(partial: { hubId?: string; devPortalId?: string; devApiUrl?: string }): void {\n if (partial.hubId != null) {\n initializedHubId = partial.hubId\n }\n if (partial.devPortalId != null) {\n initializedDevPortalId = partial.devPortalId\n }\n if (partial.devApiUrl != null) {\n initializedDevApiUrl = partial.devApiUrl\n }\n}\n\nexport function getRuntimeHttpClientHubId(): string {\n return initializedHubId\n}\n\nexport function getRuntimeHttpClientDevPortalId(): string {\n return initializedDevPortalId\n}\n\nexport function getRuntimeHttpClientDevApiUrl(): string {\n return initializedDevApiUrl\n}\n\n/** @internal Vitest only */\nexport function resetRuntimeHttpClientHubContextForTests(): void {\n initializedHubId = ''\n initializedDevPortalId = ''\n initializedDevApiUrl = ''\n}\n","import { Config, HubspotStorage } from '../types'\nimport { HUBSPOT_DATA, HUB_ID, DEV_PORTAL_ID, PORTAL_ID, DEV_API_URL } from './constants'\nimport { storage } from './localStorage'\nimport { getRuntimeHttpClientDevApiUrl, getRuntimeHttpClientDevPortalId, getRuntimeHttpClientHubId } from './runtime-hub-context'\n\nfunction readStorageField(key: string): string {\n const hubSpotData = storage.get<Record<string, string>>(HUBSPOT_DATA)\n const value = hubSpotData?.[key]\n return value != null && String(value).trim() !== '' ? String(value) : ''\n}\n\nexport const config = {\n get hubId() {\n return readStorageField(HUB_ID) || getRuntimeHttpClientHubId()\n },\n get devPortalId() {\n return readStorageField(DEV_PORTAL_ID) || getRuntimeHttpClientDevPortalId()\n },\n get portalId() {\n return readStorageField(PORTAL_ID)\n },\n get devApiUrl() {\n return readStorageField(DEV_API_URL) || getRuntimeHttpClientDevApiUrl()\n }\n} satisfies Config\n\nexport const setConfig = {\n setDevPortalId(portalId: string) {\n const existing = storage.get<HubspotStorage>(HUBSPOT_DATA) || {}\n\n storage.set(HUBSPOT_DATA, {\n ...existing,\n [PORTAL_ID]: portalId\n })\n }\n}\n","/**\n * Iframe-safe refresh token persistence (HubSpot CMS editor third-party cookie fallback).\n */\n\nimport { wpClientIframeRefreshExpKey, wpClientIframeRefreshKey, WP_STORAGE_KEYS } from '../utils/wp-storage-keys'\nimport { config } from '../utils/hub-context'\n\nlet iframeStorageMode = false\n\nexport function setIframeStorageMode(enabled: boolean): void {\n iframeStorageMode = enabled\n}\n\nexport function isIframeStorageMode(): boolean {\n return iframeStorageMode\n}\n\nfunction resolveHubId(): string | number {\n const fromWindow =\n typeof window !== 'undefined' ? (window as Window & { hubSpotData?: { hubId?: string | number } }).hubSpotData?.hubId : undefined\n const fromConfig = config.hubId\n return fromWindow ?? fromConfig ?? 'default'\n}\n\nfunction iframeKey(): string {\n return wpClientIframeRefreshKey(resolveHubId())\n}\n\nfunction iframeExpKey(): string {\n return wpClientIframeRefreshExpKey(resolveHubId())\n}\n\nexport function readIframeRefreshToken(): string | null {\n if (typeof window === 'undefined' || !window.localStorage) {\n return null\n }\n try {\n const raw = window.localStorage.getItem(iframeKey())\n return raw ? (JSON.parse(raw) as string) : null\n } catch {\n return null\n }\n}\n\nexport function writeIframeRefreshToken(token: string, expiresAtMs?: number): void {\n if (typeof window === 'undefined' || !window.localStorage) {\n return\n }\n try {\n window.localStorage.setItem(iframeKey(), JSON.stringify(token))\n if (expiresAtMs != null) {\n window.localStorage.setItem(iframeExpKey(), String(expiresAtMs))\n }\n } catch {\n // private mode / blocked storage\n }\n}\n\nexport function clearIframeRefreshToken(): void {\n if (typeof window === 'undefined' || !window.localStorage) {\n return\n }\n try {\n window.localStorage.removeItem(iframeKey())\n window.localStorage.removeItem(iframeExpKey())\n } catch {\n // ignore\n }\n}\n\nexport function iframeRefreshTokenExpired(): boolean {\n if (typeof window === 'undefined' || !window.localStorage) {\n return true\n }\n try {\n const expRaw = window.localStorage.getItem(iframeExpKey())\n if (!expRaw) {\n return false\n }\n const exp = Number(expRaw)\n return Number.isFinite(exp) && Date.now() > exp\n } catch {\n return true\n }\n}\n\nexport function listIframeRefreshKeyPrefixes(): string[] {\n return ['wp_iframe_rt_', WP_STORAGE_KEYS.c.auth.iframeRtPrefix]\n}\n","const SENSITIVE_FIELD_NAMES = new Set(['token', 'refreshtoken', 'accesstoken', 'password', 'secret', 'authorization', 'otp', 'code'])\n\nfunction isSensitiveField(name: string): boolean {\n const normalized = name.toLowerCase()\n return SENSITIVE_FIELD_NAMES.has(normalized) || normalized.includes('password')\n}\n\nfunction redactValue(value: unknown): unknown {\n if (value == null || typeof value !== 'object') {\n return value\n }\n if (Array.isArray(value)) {\n return value.map(redactValue)\n }\n\n const input = value as Record<string, unknown>\n const output: Record<string, unknown> = {}\n for (const [key, nested] of Object.entries(input)) {\n output[key] = isSensitiveField(key) ? '[redacted]' : redactValue(nested)\n }\n return output\n}\n\n/** Prefer structured API error fields; fall back to redacted payload. */\nexport function sanitizeAxiosErrorData(data: unknown): unknown {\n if (data == null || typeof data !== 'object') {\n return data\n }\n\n const payload = data as Record<string, unknown>\n const safeFields = ['errorCode', 'message', 'errorMessage', 'detailedMessage', 'correlationId', 'category', 'statusCode'] as const\n\n const summary: Record<string, unknown> = {}\n for (const field of safeFields) {\n if (field in payload) {\n summary[field] = payload[field]\n }\n }\n\n if (Object.keys(summary).length > 0) {\n return summary\n }\n\n return redactValue(payload)\n}\n\n/** Redact sensitive keys from arbitrary log metadata. */\nexport function redactLogMeta(meta: Record<string, unknown> | undefined): Record<string, unknown> | undefined {\n if (meta == null) {\n return meta\n }\n return redactValue(meta) as Record<string, unknown>\n}\n","import axios from 'axios'\nimport { sanitizeAxiosErrorData, redactLogMeta } from '../utils/error-log-sanitize'\nimport type { LogLevel, LogMeta, LoggerConfig, SdkLogger } from './logger-types'\n\nconst LEVEL_RANK: Record<LogLevel, number> = {\n debug: 0,\n info: 1,\n warn: 2,\n error: 3,\n silent: 4\n}\n\nconst DEFAULT_CONFIG = {\n level: 'info' as LogLevel,\n namespace: 'woodsportal-sdk',\n enabled: true,\n httpTracing: true\n}\n\nlet runtimeConfig = { ...DEFAULT_CONFIG }\nlet customSinks: LoggerConfig['sinks']\n\nfunction shouldEmit(level: LogLevel): boolean {\n if (!runtimeConfig.enabled || runtimeConfig.level === 'silent') {\n return false\n }\n return LEVEL_RANK[level] >= LEVEL_RANK[runtimeConfig.level]\n}\n\nfunction formatPrefix(context: string): string {\n return `[${runtimeConfig.namespace}] ${context}`\n}\n\nfunction defaultDebug(context: string, message: string, meta?: LogMeta): void {\n if (meta != null) {\n console.debug(formatPrefix(context), message, meta)\n return\n }\n console.debug(formatPrefix(context), message)\n}\n\nfunction defaultInfo(context: string, message: string, meta?: LogMeta): void {\n if (meta != null) {\n console.info(formatPrefix(context), message, meta)\n return\n }\n console.info(formatPrefix(context), message)\n}\n\nfunction defaultWarn(context: string, message: string, meta?: LogMeta): void {\n if (meta != null) {\n console.warn(formatPrefix(context), message, meta)\n return\n }\n console.warn(formatPrefix(context), message)\n}\n\nfunction defaultError(context: string, error: unknown, meta?: LogMeta): void {\n if (axios.isAxiosError(error)) {\n const payload = {\n message: error.message,\n status: error.response?.status,\n statusText: error.response?.statusText,\n data: sanitizeAxiosErrorData(error.response?.data),\n url: error.config?.url,\n method: error.config?.method,\n ...redactLogMeta(meta)\n }\n console.error(formatPrefix(context), payload)\n return\n }\n\n if (error instanceof Error) {\n if (meta != null) {\n console.error(formatPrefix(context), error.message, error, redactLogMeta(meta))\n return\n }\n console.error(formatPrefix(context), error.message, error)\n return\n }\n\n if (meta != null) {\n console.error(formatPrefix(context), error, redactLogMeta(meta))\n return\n }\n console.error(formatPrefix(context), error)\n}\n\nexport function configureLogger(config: LoggerConfig = {}): void {\n runtimeConfig = {\n level: config.level ?? DEFAULT_CONFIG.level,\n namespace: config.namespace ?? DEFAULT_CONFIG.namespace,\n enabled: config.enabled ?? DEFAULT_CONFIG.enabled,\n httpTracing: config.httpTracing ?? DEFAULT_CONFIG.httpTracing\n }\n customSinks = config.sinks\n}\n\n/** Test helper — restore defaults between test files. */\nexport function resetLoggerForTests(): void {\n runtimeConfig = { ...DEFAULT_CONFIG }\n customSinks = undefined\n}\n\nexport function isHttpTracingEnabled(): boolean {\n return runtimeConfig.enabled && runtimeConfig.httpTracing && shouldEmit('debug')\n}\n\nexport function getLoggerLevel(): LogLevel {\n return runtimeConfig.level\n}\n\nexport const logger: SdkLogger = {\n debug(context, message, meta) {\n if (!shouldEmit('debug')) return\n const sink = customSinks?.debug ?? defaultDebug\n sink(context, message, redactLogMeta(meta))\n },\n info(context, message, meta) {\n if (!shouldEmit('info')) return\n const sink = customSinks?.info ?? defaultInfo\n sink(context, message, redactLogMeta(meta))\n },\n warn(context, message, meta) {\n if (!shouldEmit('warn')) return\n const sink = customSinks?.warn ?? defaultWarn\n sink(context, message, redactLogMeta(meta))\n },\n error(context, error, meta) {\n if (!shouldEmit('error')) return\n const sink = customSinks?.error ?? defaultError\n sink(context, error, redactLogMeta(meta))\n }\n}\n\nexport type { LogLevel, LogMeta, LoggerConfig, SdkLogger } from './logger-types'\n","/**\n\n * Token storage utilities\n\n * These functions handle access token management\n\n */\n\nimport { getCookie, isCookieExpired, isCorruptCookieRawValue } from '../utils/cookie.js'\n\nimport { getStorageKeys } from '../utils/storage-keys'\nimport { WP_STORAGE_KEYS } from '../utils/wp-storage-keys.js'\nimport { isIframeStorageMode, readIframeRefreshToken } from './iframe-session-storage.js'\nimport { logger } from '../logging/logger.js'\n\nlet accessToken: string | null = null\n\nlet tokenExpiresAt: number | null = null\n\nlet accessTtlMs: number | null = null\n\nlet refreshCallback: ((refreshToken: string) => Promise<{ token: string | null; success: boolean }>) | null = null\n\nlet refreshBufferSeconds = 60\n\nlet refreshPromise: Promise<void> | null = null\n\nlet lastRefreshFailed = false\n\nlet lastSuccessfulRefreshAt: number | null = null\n\nlet sessionLifecycleListener: (() => void) | null = null\n\nconst MIN_SHORT_TTL_BUFFER_MS = 5_000\n\nconst MIN_PROACTIVE_REFRESH_INTERVAL_MS = 30_000\n\n/** Exported for unit tests. */\n\nexport function getEffectiveBufferMs(ttlMs: number): number {\n const capMs = refreshBufferSeconds * 1000\n\n let buffer: number\n if (ttlMs <= capMs) {\n buffer = Math.max(MIN_SHORT_TTL_BUFFER_MS, Math.floor(ttlMs * 0.2))\n } else {\n buffer = capMs\n }\n\n // Buffer must stay inside the token lifetime — otherwise every request looks \"expired\".\n const maxBuffer = Math.max(0, ttlMs - 1_000)\n return Math.min(buffer, maxBuffer)\n}\n\nfunction getCurrentBufferMs(): number {\n if (accessTtlMs != null && accessTtlMs > 0) {\n return getEffectiveBufferMs(accessTtlMs)\n }\n\n return refreshBufferSeconds * 1000\n}\n\nexport function getAccessToken(): string | null {\n return accessToken\n}\n\nexport function setSessionLifecycleListener(listener: (() => void) | null): void {\n sessionLifecycleListener = listener\n}\n\nfunction notifySessionLifecycleChange(): void {\n try {\n sessionLifecycleListener?.()\n } catch {\n // ignore listener errors\n }\n}\n\nfunction persistRefreshExhausted(): void {\n if (typeof window === 'undefined' || !window.sessionStorage) {\n return\n }\n try {\n window.sessionStorage.setItem(WP_STORAGE_KEYS.c.auth.refreshExhausted, JSON.stringify({ ts: Date.now() }))\n } catch {\n // ignore quota / private mode\n }\n}\n\nfunction clearPersistedRefreshExhausted(): void {\n if (typeof window === 'undefined' || !window.sessionStorage) {\n return\n }\n try {\n window.sessionStorage.removeItem(WP_STORAGE_KEYS.c.auth.refreshExhausted)\n } catch {\n // ignore\n }\n}\n\nfunction readPersistedRefreshExhausted(): boolean {\n if (typeof window === 'undefined' || !window.sessionStorage) {\n return false\n }\n try {\n return Boolean(window.sessionStorage.getItem(WP_STORAGE_KEYS.c.auth.refreshExhausted))\n } catch {\n return false\n }\n}\n\n/** Restore in-memory refresh-failure state after a full page reload (same tab). */\nexport function hydrateSessionRefreshState(): void {\n if (readPersistedRefreshExhausted()) {\n lastRefreshFailed = true\n }\n}\n\nexport function clearSessionRefreshExhaustedState(): void {\n lastRefreshFailed = false\n clearPersistedRefreshExhausted()\n}\n\nfunction markRefreshFailed(): void {\n lastRefreshFailed = true\n persistRefreshExhausted()\n clearAccessToken()\n notifySessionLifecycleChange()\n}\n\nexport function storAccessToken(token: string, expiresIn?: number): void {\n accessToken = token\n\n clearSessionRefreshExhaustedState()\n\n if (expiresIn != null && expiresIn > 0) {\n accessTtlMs = expiresIn * 1000\n\n tokenExpiresAt = Date.now() + accessTtlMs\n } else {\n accessTtlMs = null\n\n tokenExpiresAt = null\n }\n\n notifySessionLifecycleChange()\n}\n\nexport function clearAccessToken(): void {\n accessToken = null\n\n tokenExpiresAt = null\n\n accessTtlMs = null\n\n lastSuccessfulRefreshAt = null\n}\n\n/** Clears proactive refresh throttle only — refresh exhaustion survives until login or T3 sessionStorage clear. */\nexport function resetSessionAuthState(): void {\n lastSuccessfulRefreshAt = null\n}\n\nexport function setRefreshBufferSeconds(seconds: number): void {\n refreshBufferSeconds = Math.max(0, seconds)\n}\n\nexport function getRefreshBufferSeconds(): number {\n return refreshBufferSeconds\n}\n\nexport function didLastRefreshFail(): boolean {\n return lastRefreshFailed\n}\n\n/** Alias for route guards — refresh was attempted and failed with no new access JWT. */\nexport function isSessionRefreshExhausted(): boolean {\n if (lastRefreshFailed) {\n return true\n }\n if (readPersistedRefreshExhausted()) {\n lastRefreshFailed = true\n return true\n }\n return false\n}\n\nexport function isExpiresAccessToken(): boolean {\n if (!accessToken) return true\n\n if (tokenExpiresAt === null) return false\n\n const bufferMs = getCurrentBufferMs()\n\n return Date.now() >= tokenExpiresAt - bufferMs\n}\n\n/**\n\n * Set the refresh callback function\n\n * This is called by the HTTP client during initialization\n\n */\n\nexport function setRefreshCallback(callback: (refreshToken: string) => Promise<{ token: string | null; success: boolean }>): void {\n refreshCallback = callback\n}\n\nexport function isRefreshInFlight(): boolean {\n return refreshPromise != null\n}\n\nexport type RefreshSessionOptions = {\n /** Bypass min proactive refresh interval (e.g. 401 retry, cold bootstrap). */\n\n force?: boolean\n}\n\n/** Single deduped refresh entry point for bootstrap, HTTP client, and visibility handlers. */\n\nexport async function refreshSession(options: RefreshSessionOptions = {}): Promise<void> {\n const { force = false } = options\n\n if (!force && lastSuccessfulRefreshAt != null && Date.now() - lastSuccessfulRefreshAt < MIN_PROACTIVE_REFRESH_INTERVAL_MS) {\n return\n }\n\n if (!refreshCallback) {\n return\n }\n\n if (!refreshPromise) {\n refreshPromise = (async () => {\n const { withRefreshLock } = await import('./refresh-lock.js')\n await withRefreshLock(async () => {\n const { getRefreshToken } = await import('./auth-utils.js')\n const refreshToken = getRefreshToken()\n\n if (!refreshToken) {\n markRefreshFailed()\n\n const storageKey = getStorageKeys().refreshToken\n const hasCookieKey =\n typeof document !== 'undefined' &&\n typeof storageKey === 'string' &&\n storageKey.length > 0 &&\n document.cookie.includes(`${storageKey}=`)\n\n logger.warn('auth', 'refresh session aborted: missing refresh token', {\n operation: 'refreshSession',\n storageKey,\n hasCookieKey,\n iframeStorageMode: isIframeStorageMode()\n })\n\n throw new Error('Session expired: missing refresh token')\n }\n\n const result = await refreshCallback!(refreshToken)\n\n if (!result.success || !result.token) {\n markRefreshFailed()\n\n throw new Error('Session refresh failed')\n }\n\n lastRefreshFailed = false\n\n lastSuccessfulRefreshAt = Date.now()\n })\n })().finally(() => {\n refreshPromise = null\n })\n }\n\n await refreshPromise\n}\n\n/**\n\n * Ensures the access token is valid, refreshing if necessary.\n\n * Throws when refresh is required but fails (avoids bearer-less 401 loops).\n\n */\n\nexport async function ensureValidRefresh(): Promise<void> {\n if (!isExpiresAccessToken()) {\n return\n }\n\n // Pre-request refresh must not be throttled by the proactive min interval.\n await refreshSession({ force: true })\n}\n\nexport function isAuthenticateApp() {\n const token = getAccessToken()\n\n if (token) {\n const bufferMs = getCurrentBufferMs()\n\n if (tokenExpiresAt === null || Date.now() < tokenExpiresAt - bufferMs) {\n return true\n }\n }\n\n if (!isCookieExpired(getStorageKeys().refreshToken)) {\n if (lastRefreshFailed && !token) {\n return false\n }\n return true\n }\n\n return false\n}\n\n/** Preferred 3.0 name for {@link isAuthenticateApp}. */\n\nexport function isAuthenticated() {\n return isAuthenticateApp()\n}\n\n/** Preferred 3.0 name for {@link isExpiresAccessToken}. */\n\nexport function isAccessTokenExpired() {\n return isExpiresAccessToken()\n}\n\nexport function hasRefreshSession(): boolean {\n if (isSessionRefreshExhausted() && !accessToken) {\n return false\n }\n const refreshKey = getStorageKeys().refreshToken\n if (!refreshKey || isCookieExpired(refreshKey)) {\n return false\n }\n if (!readRefreshTokenValue()) {\n return false\n }\n if (lastRefreshFailed && !accessToken) {\n return false\n }\n return true\n}\n\nfunction readRefreshTokenValue(): string | null {\n const key = getStorageKeys().refreshToken\n const raw = getCookie(key)\n if (!isCorruptCookieRawValue(raw)) {\n return raw\n }\n if (isIframeStorageMode()) {\n return readIframeRefreshToken()\n }\n return null\n}\n\nexport function hasValidAccessToken(): boolean {\n return Boolean(getAccessToken()) && !isExpiresAccessToken()\n}\n","/**\n\n * Authentication utility functions\n\n * These handle refresh token management\n\n */\n\nimport { setCookie, parseCookieJson, stringifyCookieValue, getCookie, isCorruptCookieRawValue } from '../utils/cookie'\n\nimport { getStorageKeys } from '../utils/storage-keys'\n\nimport { storAccessToken } from './token-store'\n\nimport { isIframeStorageMode, readIframeRefreshToken, writeIframeRefreshToken } from './iframe-session-storage'\n\nfunction writeJsonCookie(key: string | undefined, data: unknown, expire?: number | Date): void {\n if (!key) {\n return\n }\n\n const serialized = stringifyCookieValue(data)\n\n if (serialized == null) {\n return\n }\n\n setCookie(key, serialized, expire)\n}\n\n// Set data\n\nexport const setLoggedInDetails = async (data: any) => {\n return new Promise((resolve: any) => {\n const keys = getStorageKeys()\n\n writeJsonCookie(keys.loginDetails, data)\n\n if (keys.authUser !== keys.loginDetails) {\n writeJsonCookie(keys.authUser, data)\n }\n\n resolve()\n })\n}\n\nexport const setProfileDetails = async (data: any) => {\n return new Promise((resolve: any) => {\n writeJsonCookie(getStorageKeys().loginDetails, data)\n\n resolve()\n })\n}\n\nexport function setRefreshToken(token: string, expiresAt: number) {\n return new Promise((resolve: any) => {\n if (!token || typeof token !== 'string') {\n resolve()\n\n return\n }\n\n let expiresMs: number\n\n if (typeof expiresAt === 'number' && expiresAt > 1_000_000_000_000) {\n expiresMs = expiresAt\n } else if (typeof expiresAt === 'number' && expiresAt > 1_000_000_000) {\n expiresMs = expiresAt * 1000\n } else {\n expiresMs = Date.now() + (expiresAt || 0) * 1000\n }\n\n const serialized = stringifyCookieValue(token)\n\n if (serialized != null) {\n setCookie(getStorageKeys().refreshToken, serialized, new Date(expiresMs))\n }\n\n if (isIframeStorageMode()) {\n writeIframeRefreshToken(token, expiresMs)\n }\n\n resolve()\n })\n}\n\nexport function setAccessToken(token: string, expiresIn?: number) {\n return new Promise((resolve: any) => {\n storAccessToken(token, expiresIn)\n\n resolve()\n })\n}\n\nexport const setPortal = async (data: any) => {\n return new Promise((resolve: any) => {\n writeJsonCookie(getStorageKeys().portal, data ?? {})\n\n resolve()\n })\n}\n\nexport const setSubscriptionType = async (data: any) => {\n return new Promise((resolve: any) => {\n writeJsonCookie(getStorageKeys().subscriptionType, data ?? 'BASIC')\n\n resolve()\n })\n}\n\n// Get data\n\nexport function getProfile(): string | null {\n return parseCookieJson(getStorageKeys().loginDetails)\n}\n\nexport function getRefreshToken(): string | null {\n const raw = getCookie(getStorageKeys().refreshToken)\n\n if (!isCorruptCookieRawValue(raw)) {\n return raw\n }\n\n if (isIframeStorageMode()) {\n return readIframeRefreshToken()\n }\n\n return null\n}\n\nexport function getPortal(): any | null {\n return parseCookieJson(getStorageKeys().portal)\n}\n\nexport function getSubscriptionType(): string | null {\n return parseCookieJson<string>(getStorageKeys().subscriptionType)\n}\n"]}
@@ -10,6 +10,7 @@ var WP_STORAGE_KEYS = {
10
10
  sub: "wp.c.auth.sub",
11
11
  emailOk: "wp.c.auth.emailOk",
12
12
  err: "wp.c.auth.err",
13
+ refreshExhausted: "wp.c.auth.refreshExhausted",
13
14
  rev: "wp.c.auth.rev",
14
15
  refreshLock: "wp.c.auth.refreshLock",
15
16
  iframeRtPrefix: "wp.c.auth.rt."
@@ -156,5 +157,5 @@ var CLIENT_COOKIE_MIGRATIONS = [
156
157
  ];
157
158
 
158
159
  export { CLIENT_COOKIE_MIGRATIONS, CLIENT_SESSION_STORAGE_MIGRATIONS, LEGACY_CLIENT_AUTH_COOKIES, LEGACY_CLIENT_SESSION_EXACT, WP_STORAGE_KEYS, WP_UI_THEME, wpClientIframeRefreshExpKey, wpClientIframeRefreshKey };
159
- //# sourceMappingURL=chunk-6ROV3EE2.js.map
160
- //# sourceMappingURL=chunk-6ROV3EE2.js.map
160
+ //# sourceMappingURL=chunk-BKT4MFQM.js.map
161
+ //# sourceMappingURL=chunk-BKT4MFQM.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/main/core/utils/wp-storage-keys.ts"],"names":[],"mappings":"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","file":"chunk-BKT4MFQM.js","sourcesContent":["/**\n * Canonical WoodsPortal browser storage key names (`wp.{lane}.{domain}.{name}`).\n * Import from here — do not scatter string literals in app code.\n */\n\nexport const WP_UI_THEME = 'wp.ui.theme'\n\nexport const WP_STORAGE_KEYS = {\n c: {\n hub: 'wp.c.hub',\n auth: {\n login: 'wp.c.auth.login',\n refresh: 'wp.c.auth.refresh',\n portal: 'wp.c.auth.portal',\n sub: 'wp.c.auth.sub',\n emailOk: 'wp.c.auth.emailOk',\n err: 'wp.c.auth.err',\n refreshExhausted: 'wp.c.auth.refreshExhausted',\n rev: 'wp.c.auth.rev',\n refreshLock: 'wp.c.auth.refreshLock',\n iframeRtPrefix: 'wp.c.auth.rt.'\n },\n ui: {\n pag: 'wp.c.ui.pag',\n menu: 'wp.c.ui.menu',\n assoc: 'wp.c.ui.assoc'\n },\n login: {\n email: 'wp.c.login.email',\n force: 'wp.c.login.force',\n passkey: 'wp.c.login.passkey',\n done: 'wp.c.login.done'\n },\n mfa: {\n methods: 'wp.c.mfa.methods',\n default: 'wp.c.mfa.default',\n otp: 'wp.c.mfa.otp',\n scope: 'wp.c.mfa.scope',\n portalId: 'wp.c.mfa.portalId',\n portalName: 'wp.c.mfa.portalName',\n portalUrl: 'wp.c.mfa.portalUrl',\n enrolled: 'wp.c.mfa.enrolled',\n emailOk: 'wp.c.mfa.emailOk',\n phoneOk: 'wp.c.mfa.phoneOk'\n },\n sso: {\n cb: 'wp.c.sso.cb'\n }\n },\n a: {\n auth: {\n login: 'wp.a.auth.login',\n emailOk: 'wp.a.auth.emailOk',\n mfa: 'wp.a.auth.mfa',\n portalId: 'wp.a.auth.portalId',\n portal: 'wp.a.auth.portal',\n accT: 'wp.a.auth.accT',\n sesT: 'wp.a.auth.sesT',\n err: 'wp.a.auth.err',\n noBoot: 'wp.a.auth.noBoot',\n refreshLock: 'wp.a.auth.refreshLock',\n rev: 'wp.a.auth.rev'\n },\n hub: {\n id: 'wp.a.hub.id',\n acct: 'wp.a.hub.acct',\n cfg: 'wp.a.hub.cfg'\n },\n sync: {\n create: 'wp.a.sync.create',\n state: 'wp.a.sync.state',\n jobId: 'wp.a.sync.jobId',\n jobType: 'wp.a.sync.jobType'\n },\n ui: {\n loading: 'wp.a.ui.loading',\n intTabPrefix: 'wp.a.ui.intTab.'\n },\n mfa: {\n methods: 'wp.a.mfa.methods',\n default: 'wp.a.mfa.default',\n otp: 'wp.a.mfa.otp',\n scope: 'wp.a.mfa.scope',\n portalId: 'wp.a.mfa.portalId',\n portalName: 'wp.a.mfa.portalName',\n portalUrl: 'wp.a.mfa.portalUrl',\n enrolled: 'wp.a.mfa.enrolled',\n emailOk: 'wp.a.mfa.emailOk',\n phoneOk: 'wp.a.mfa.phoneOk'\n },\n sso: {\n cbPrefix: 'wp.a.sso.cb.'\n },\n bill: {\n result: 'wp.a.bill.result'\n }\n },\n d: {\n log: 'wp.d.log',\n cfg: {\n theme: 'wp.d.cfg.theme',\n side: 'wp.d.cfg.side'\n }\n }\n} as const\n\n/** Dynamic iframe refresh localStorage key for a hub. */\nexport function wpClientIframeRefreshKey(hubId: string | number): string {\n return `${WP_STORAGE_KEYS.c.auth.iframeRtPrefix}${hubId}`\n}\n\nexport function wpClientIframeRefreshExpKey(hubId: string | number): string {\n return `${wpClientIframeRefreshKey(hubId)}.exp`\n}\n\nexport function wpAdminIntegrationTabKey(hubId: string | number, portalId: string | number): string {\n return `${WP_STORAGE_KEYS.a.ui.intTabPrefix}${hubId}.${portalId}`\n}\n\nexport function wpAdminSsoCallbackKey(code: string, state: string): string {\n return `${WP_STORAGE_KEYS.a.sso.cbPrefix}${code}.${state}`\n}\n\n/** Legacy client cookie names cleared during logout (two release cycles). */\nexport const LEGACY_CLIENT_AUTH_COOKIES = [\n 'woodsportal_login',\n 'woodsportal_user',\n 'woodsportal_refresh',\n 'woodsportal_portal',\n 'woodsportal_subscription',\n 'woodsportal_pagination',\n 'woodsportal_route_menu',\n 'woodsportal_association_view',\n 'woodsportal_access_token',\n 'IS_EMAIL_VERIFY',\n 'loginDetails',\n 'refreshToken',\n 'portal',\n 'subscriptionType'\n] as const\n\n/** Legacy client localStorage keys. */\nexport const LEGACY_CLIENT_LOCAL_KEYS = ['hubSpotData', 'theme', 'wp_iframe_rt_'] as const\n\n/** Legacy client sessionStorage key prefixes / exact names. */\nexport const LEGACY_CLIENT_SESSION_EXACT = ['authError', 'sso_callback_processed', 'entredEmail'] as const\n\nexport const LEGACY_CLIENT_SESSION_PREFIXES = ['woodsportal.login.', 'woodsportal.mfa.'] as const\n\n/** Pairs of [legacy, canonical] for exact sessionStorage keys. */\nexport const CLIENT_SESSION_STORAGE_MIGRATIONS: ReadonlyArray<readonly [string, string]> = [\n ['woodsportal.login.email', WP_STORAGE_KEYS.c.login.email],\n ['woodsportal.login.forcePreLogin', WP_STORAGE_KEYS.c.login.force],\n ['woodsportal.login.passkeyPrimaryEnrolled', WP_STORAGE_KEYS.c.login.passkey],\n ['woodsportal.login.preLoginCompletedKey', WP_STORAGE_KEYS.c.login.done],\n ['authError', WP_STORAGE_KEYS.c.auth.err],\n ['sso_callback_processed', WP_STORAGE_KEYS.c.sso.cb],\n ['woodsportal.mfa.methods', WP_STORAGE_KEYS.c.mfa.methods],\n ['woodsportal.mfa.defaultMethod', WP_STORAGE_KEYS.c.mfa.default],\n ['woodsportal.mfa.otpDelivery', WP_STORAGE_KEYS.c.mfa.otp],\n ['woodsportal.mfa.otpDestinationMasked', WP_STORAGE_KEYS.c.mfa.otp],\n ['woodsportal.mfa.scopeKey', WP_STORAGE_KEYS.c.mfa.scope],\n ['woodsportal.mfa.portalId', WP_STORAGE_KEYS.c.mfa.portalId],\n ['woodsportal.mfa.portalName', WP_STORAGE_KEYS.c.mfa.portalName],\n ['woodsportal.mfa.portalUrl', WP_STORAGE_KEYS.c.mfa.portalUrl],\n ['woodsportal.mfa.enrolledForThisPortal', WP_STORAGE_KEYS.c.mfa.enrolled],\n ['woodsportal.mfa.emailVerifiedForThisPortal', WP_STORAGE_KEYS.c.mfa.emailOk],\n ['woodsportal.mfa.phoneVerifiedForThisPortal', WP_STORAGE_KEYS.c.mfa.phoneOk]\n]\n\n/** Cookie migration pairs [legacy, canonical]. */\nexport const CLIENT_COOKIE_MIGRATIONS: ReadonlyArray<readonly [string, string]> = [\n ['woodsportal_login', WP_STORAGE_KEYS.c.auth.login],\n ['loginDetails', WP_STORAGE_KEYS.c.auth.login],\n ['woodsportal_user', WP_STORAGE_KEYS.c.auth.login],\n ['woodsportal_refresh', WP_STORAGE_KEYS.c.auth.refresh],\n ['refreshToken', WP_STORAGE_KEYS.c.auth.refresh],\n ['woodsportal_portal', WP_STORAGE_KEYS.c.auth.portal],\n ['portal', WP_STORAGE_KEYS.c.auth.portal],\n ['woodsportal_subscription', WP_STORAGE_KEYS.c.auth.sub],\n ['subscriptionType', WP_STORAGE_KEYS.c.auth.sub],\n ['woodsportal_pagination', WP_STORAGE_KEYS.c.ui.pag],\n ['woodsportal_route_menu', WP_STORAGE_KEYS.c.ui.menu],\n ['woodsportal_association_view', WP_STORAGE_KEYS.c.ui.assoc],\n ['IS_EMAIL_VERIFY', WP_STORAGE_KEYS.c.auth.emailOk]\n]\n"]}
@@ -1,4 +1,4 @@
1
- import { createStore } from './chunk-U66LWTVC.js';
1
+ import { createStore } from './chunk-PFOSN7EB.js';
2
2
 
3
3
  // src/main/state/crm/use-multi-object.ts
4
4
  var multiObjectStore = createStore({
@@ -91,5 +91,5 @@ var actions = {
91
91
  };
92
92
 
93
93
  export { actions, multiObjectStore };
94
- //# sourceMappingURL=chunk-OF5OLEE5.js.map
95
- //# sourceMappingURL=chunk-OF5OLEE5.js.map
94
+ //# sourceMappingURL=chunk-BURJ2NUL.js.map
95
+ //# sourceMappingURL=chunk-BURJ2NUL.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/main/state/crm/use-multi-object.ts"],"names":[],"mappings":"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","file":"chunk-OF5OLEE5.js","sourcesContent":["import { createStore } from './store'\n\nexport interface MultiObjectTableState {\n objects: Record<string, any>\n objectsPrependData: Record<string, any[]>\n meta: Record<string, { selectedPipeline: string; viewType: string }>\n}\n\nexport const multiObjectStore = createStore<MultiObjectTableState>({\n objects: {},\n objectsPrependData: {},\n meta: {}\n})\n\nfunction getObjectKey(payload: any): string {\n return String(payload?.hubspotObjectTypeId ?? '')\n}\n\nexport const actions = {\n setMultiObjectData(response: any, payload: any) {\n const key = getObjectKey(payload)\n const state = multiObjectStore.getState()\n\n const rows = response?.data?.results?.rows ?? []\n const rowIds = new Set(\n rows\n .map((row: any) => row.id ?? row.hs_object_id)\n .filter((id: unknown) => id != null && id !== '')\n .map((id: unknown) => String(id))\n )\n\n let newPrependForKey = (state.objectsPrependData[key] ?? []).filter((item: any) => {\n const itemId = item.id ?? item.hs_object_id\n if (itemId == null || itemId === '') return true\n return !rowIds.has(String(itemId))\n })\n\n const selectedPipeline = payload?.selectedPipeline ?? ''\n const viewType = response?.info?.viewType ?? ''\n const prevMeta = state.meta[key]\n\n if (response?.data?.total < 1 || payload?.componentName) {\n newPrependForKey = []\n }\n\n if (prevMeta?.viewType && prevMeta.viewType !== viewType) {\n newPrependForKey = []\n }\n\n if (prevMeta?.selectedPipeline && prevMeta.selectedPipeline !== selectedPipeline) {\n newPrependForKey = []\n }\n\n multiObjectStore.setState({\n objects: { ...state.objects, [key]: response },\n objectsPrependData: { ...state.objectsPrependData, [key]: newPrependForKey },\n meta: {\n ...state.meta,\n [key]: { selectedPipeline, viewType }\n }\n })\n },\n\n clearMultiObjectPrependData(hubspotObjectTypeId?: string) {\n const state = multiObjectStore.getState()\n\n if (!hubspotObjectTypeId) {\n multiObjectStore.setState({ objectsPrependData: {} })\n return\n }\n\n const key = String(hubspotObjectTypeId)\n const { [key]: _, ...rest } = state.objectsPrependData\n multiObjectStore.setState({ objectsPrependData: rest })\n },\n\n async setMultiObjectPrependData(response: any, props?: any) {\n const key = getObjectKey(props)\n const state = multiObjectStore.getState()\n const tableResponse = state.objects[key]\n let rows: any[] = state.objectsPrependData[key] ?? []\n\n if (tableResponse?.data?.total > 1) {\n if (response === 'loading') {\n const row = tableResponse?.data?.results?.columns.reduce((acc: any, item: any) => {\n if (!item.hidden) {\n acc[item.key] = 'loading'\n }\n return acc\n }, {})\n rows = [row, ...rows]\n } else if (response?.data) {\n const data = response?.data\n if (!data) {\n multiObjectStore.setState({\n objectsPrependData: { ...state.objectsPrependData, [key]: [] }\n })\n return\n }\n\n const row = Object.fromEntries(Object.entries(data).map(([k, value]: any) => [k, value?.value ?? value]))\n\n rows = [...rows]\n if (rows.length > 0) {\n rows[0] = row\n } else {\n rows.push(row)\n }\n }\n }\n\n multiObjectStore.setState({\n objectsPrependData: { ...state.objectsPrependData, [key]: rows }\n })\n }\n}\n"]}
1
+ {"version":3,"sources":["../src/main/state/crm/use-multi-object.ts"],"names":[],"mappings":"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","file":"chunk-BURJ2NUL.js","sourcesContent":["import { createStore } from './store'\n\nexport interface MultiObjectTableState {\n objects: Record<string, any>\n objectsPrependData: Record<string, any[]>\n meta: Record<string, { selectedPipeline: string; viewType: string }>\n}\n\nexport const multiObjectStore = createStore<MultiObjectTableState>({\n objects: {},\n objectsPrependData: {},\n meta: {}\n})\n\nfunction getObjectKey(payload: any): string {\n return String(payload?.hubspotObjectTypeId ?? '')\n}\n\nexport const actions = {\n setMultiObjectData(response: any, payload: any) {\n const key = getObjectKey(payload)\n const state = multiObjectStore.getState()\n\n const rows = response?.data?.results?.rows ?? []\n const rowIds = new Set(\n rows\n .map((row: any) => row.id ?? row.hs_object_id)\n .filter((id: unknown) => id != null && id !== '')\n .map((id: unknown) => String(id))\n )\n\n let newPrependForKey = (state.objectsPrependData[key] ?? []).filter((item: any) => {\n const itemId = item.id ?? item.hs_object_id\n if (itemId == null || itemId === '') return true\n return !rowIds.has(String(itemId))\n })\n\n const selectedPipeline = payload?.selectedPipeline ?? ''\n const viewType = response?.info?.viewType ?? ''\n const prevMeta = state.meta[key]\n\n if (response?.data?.total < 1 || payload?.componentName) {\n newPrependForKey = []\n }\n\n if (prevMeta?.viewType && prevMeta.viewType !== viewType) {\n newPrependForKey = []\n }\n\n if (prevMeta?.selectedPipeline && prevMeta.selectedPipeline !== selectedPipeline) {\n newPrependForKey = []\n }\n\n multiObjectStore.setState({\n objects: { ...state.objects, [key]: response },\n objectsPrependData: { ...state.objectsPrependData, [key]: newPrependForKey },\n meta: {\n ...state.meta,\n [key]: { selectedPipeline, viewType }\n }\n })\n },\n\n clearMultiObjectPrependData(hubspotObjectTypeId?: string) {\n const state = multiObjectStore.getState()\n\n if (!hubspotObjectTypeId) {\n multiObjectStore.setState({ objectsPrependData: {} })\n return\n }\n\n const key = String(hubspotObjectTypeId)\n const { [key]: _, ...rest } = state.objectsPrependData\n multiObjectStore.setState({ objectsPrependData: rest })\n },\n\n async setMultiObjectPrependData(response: any, props?: any) {\n const key = getObjectKey(props)\n const state = multiObjectStore.getState()\n const tableResponse = state.objects[key]\n let rows: any[] = state.objectsPrependData[key] ?? []\n\n if (tableResponse?.data?.total > 1) {\n if (response === 'loading') {\n const row = tableResponse?.data?.results?.columns.reduce((acc: any, item: any) => {\n if (!item.hidden) {\n acc[item.key] = 'loading'\n }\n return acc\n }, {})\n rows = [row, ...rows]\n } else if (response?.data) {\n const data = response?.data\n if (!data) {\n multiObjectStore.setState({\n objectsPrependData: { ...state.objectsPrependData, [key]: [] }\n })\n return\n }\n\n const row = Object.fromEntries(Object.entries(data).map(([k, value]: any) => [k, value?.value ?? value]))\n\n rows = [...rows]\n if (rows.length > 0) {\n rows[0] = row\n } else {\n rows.push(row)\n }\n }\n }\n\n multiObjectStore.setState({\n objectsPrependData: { ...state.objectsPrependData, [key]: rows }\n })\n }\n}\n"]}
@@ -1,6 +1,6 @@
1
- import { createMutation, resolveListTableParams, Client } from './chunk-4IKGBHFJ.js';
2
- import { actions } from './chunk-OF5OLEE5.js';
3
- import { actions2, actions as actions$1, actions4, actions5, actions3, actions7 } from './chunk-U66LWTVC.js';
1
+ import { createMutation, resolveListTableParams, Client } from './chunk-WNE4LSVH.js';
2
+ import { actions } from './chunk-BURJ2NUL.js';
3
+ import { actions2, actions as actions$1, actions4, actions5, actions3, actions7 } from './chunk-PFOSN7EB.js';
4
4
 
5
5
  // src/main/features/crm/api/pipeline.ts
6
6
  function list(options) {
@@ -406,5 +406,5 @@ var crmApi = {
406
406
  };
407
407
 
408
408
  export { crmApi };
409
- //# sourceMappingURL=chunk-GVXA7OKY.js.map
410
- //# sourceMappingURL=chunk-GVXA7OKY.js.map
409
+ //# sourceMappingURL=chunk-FJAOCLB4.js.map
410
+ //# sourceMappingURL=chunk-FJAOCLB4.js.map