woodsportal-client-sdk 4.0.8-dev.4 → 4.0.8-dev.6

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 (43) hide show
  1. package/dist/adapters/angular/index.d.ts +1 -1
  2. package/dist/adapters/angular/index.js +4 -4
  3. package/dist/adapters/native/index.d.ts +1 -1
  4. package/dist/adapters/native/index.js +5 -5
  5. package/dist/adapters/react/index.d.ts +1 -1
  6. package/dist/adapters/react/index.js +5 -5
  7. package/dist/adapters/vue/index.d.ts +1 -1
  8. package/dist/adapters/vue/index.js +4 -4
  9. package/dist/{auth-utils-E4QDYAEW.js → auth-utils-4HFJPASF.js} +3 -3
  10. package/dist/{auth-utils-E4QDYAEW.js.map → auth-utils-4HFJPASF.js.map} +1 -1
  11. package/dist/{chunk-BAESH6E2.js → chunk-4HFF7VEA.js} +5 -5
  12. package/dist/{chunk-BAESH6E2.js.map → chunk-4HFF7VEA.js.map} +1 -1
  13. package/dist/{chunk-B7ILWTB7.js → chunk-5LOW4BG4.js} +14 -5
  14. package/dist/chunk-5LOW4BG4.js.map +1 -0
  15. package/dist/{chunk-YZIKCAPA.js → chunk-G3WSU24Y.js} +12 -3
  16. package/dist/chunk-G3WSU24Y.js.map +1 -0
  17. package/dist/{chunk-56UA4D6A.js → chunk-HOUVOL2U.js} +9 -3
  18. package/dist/chunk-HOUVOL2U.js.map +1 -0
  19. package/dist/{chunk-6TX7N56D.js → chunk-KUQ35AVI.js} +3 -3
  20. package/dist/{chunk-6TX7N56D.js.map → chunk-KUQ35AVI.js.map} +1 -1
  21. package/dist/{chunk-5AXLES56.js → chunk-PHBLKSQL.js} +5 -5
  22. package/dist/{chunk-5AXLES56.js.map → chunk-PHBLKSQL.js.map} +1 -1
  23. package/dist/{chunk-LV4CHY5C.js → chunk-R2MUWV5I.js} +5 -5
  24. package/dist/{chunk-LV4CHY5C.js.map → chunk-R2MUWV5I.js.map} +1 -1
  25. package/dist/{chunk-4RLRHJCP.js → chunk-TOPDSDR7.js} +4 -4
  26. package/dist/{chunk-4RLRHJCP.js.map → chunk-TOPDSDR7.js.map} +1 -1
  27. package/dist/{chunk-F4QIIWJR.js → chunk-YBX4ZFZE.js} +3 -3
  28. package/dist/{chunk-F4QIIWJR.js.map → chunk-YBX4ZFZE.js.map} +1 -1
  29. package/dist/{cross-tab-session-HGVBEJCJ.js → cross-tab-session-EFVMEOMN.js} +6 -6
  30. package/dist/{cross-tab-session-HGVBEJCJ.js.map → cross-tab-session-EFVMEOMN.js.map} +1 -1
  31. package/dist/entries/auth.d.ts +2 -2
  32. package/dist/entries/auth.js +5 -5
  33. package/dist/entries/crm.d.ts +3 -3
  34. package/dist/entries/crm.js +7 -7
  35. package/dist/index.d.ts +13 -13
  36. package/dist/index.js +12 -12
  37. package/dist/{use-sync-DpazhM4d.d.ts → use-sync-Bc3XBQBA.d.ts} +12 -12
  38. package/package.json +12 -11
  39. package/dist/chunk-56UA4D6A.js.map +0 -1
  40. package/dist/chunk-B7ILWTB7.js.map +0 -1
  41. package/dist/chunk-YZIKCAPA.js.map +0 -1
  42. package/dist/{pipeline-ui-COO9b3x2.d.ts → cache-purge-rOALAcjJ.d.ts} +10 -10
  43. package/dist/{build-error-description-CZ4lztT8.d.ts → route-guard-contract-KaQaafb7.d.ts} +256 -256
@@ -1,3 +1,14 @@
1
+ interface TableState {
2
+ queryParams: any;
3
+ multiObjectsQueryParams: Record<string, any>;
4
+ objectsData: any;
5
+ tableData: any;
6
+ tablePrependData: any[];
7
+ hubspotObjectTypeId: string;
8
+ selectedPipeline: string;
9
+ viewType: string;
10
+ }
11
+
1
12
  interface TableUiState {
2
13
  tableUniqueId: string | null;
3
14
  gridData: any[];
@@ -21,17 +32,6 @@ interface TableUiState {
21
32
  tableDefPermissions: Record<string, unknown>;
22
33
  }
23
34
 
24
- interface TableState {
25
- queryParams: any;
26
- multiObjectsQueryParams: Record<string, any>;
27
- objectsData: any;
28
- tableData: any;
29
- tablePrependData: any[];
30
- hubspotObjectTypeId: string;
31
- selectedPipeline: string;
32
- viewType: string;
33
- }
34
-
35
35
  interface NoteState {
36
36
  notes: any;
37
37
  prependNotes: any[];
@@ -57,4 +57,4 @@ interface SyncState {
57
57
  isSyncDisable: boolean;
58
58
  }
59
59
 
60
- export type { EmailState as E, NoteState as N, SyncState as S, TableUiState as T, UserState as U, TableState as a };
60
+ export type { EmailState as E, NoteState as N, SyncState as S, TableState as T, UserState as U, TableUiState as a };
package/package.json CHANGED
@@ -1,6 +1,7 @@
1
1
  {
2
2
  "name": "woodsportal-client-sdk",
3
- "version": "4.0.8-dev.4",
3
+ "version": "4.0.8-dev.6",
4
+ "packageManager": "pnpm@10.12.1",
4
5
  "description": "Official TypeScript/JavaScript SDK for WoodsPortal API - Authentication, user management, pipelines, and more",
5
6
  "type": "module",
6
7
  "main": "./dist/index.js",
@@ -51,30 +52,30 @@
51
52
  },
52
53
  "scripts": {
53
54
  "local": "node scripts/dev-watch.mjs",
54
- "dev": "npm run local",
55
- "dev:watch": "npm run local",
55
+ "dev": "pnpm run local",
56
+ "dev:watch": "pnpm run local",
56
57
  "start": "nodemon --watch src/main --ext ts --exec tsx src/main/index.ts",
57
58
  "clean": "rimraf dist",
58
- "build": "npm run clean && tsup",
59
+ "build": "pnpm run clean && tsup",
59
60
  "size:check": "node scripts/check-bundle-size.mjs",
60
61
  "type-check": "tsc --noEmit",
61
62
  "lint": "eslint .",
62
63
  "format:check": "prettier --check \"src/**/*.ts\" \"examples/smoke-consumer/*.{ts,mjs}\" \"docs/**/*.md\"",
63
- "audit:prod": "npm audit --omit=dev --audit-level=high",
64
+ "audit:prod": "pnpm audit --omit=dev --audit-level=high",
64
65
  "test": "node scripts/run-unit-tests.mjs",
65
66
  "test:watch": "node --import tsx --import ./src/test/register-test-hooks.ts --watch --test src/test/**/*.test.ts",
66
67
  "test:coverage": "c8 node scripts/run-unit-tests.mjs",
67
- "test:consumer": "cd examples/smoke-consumer && (npm ci || npm install) && npm run smoke",
68
- "test:consumer:live": "npm run build && cd examples/smoke-consumer && npm ci && npm run smoke:live",
68
+ "test:consumer": "cd examples/smoke-consumer && (pnpm install --frozen-lockfile || pnpm install) && pnpm run smoke",
69
+ "test:consumer:live": "pnpm run build && cd examples/smoke-consumer && pnpm install --frozen-lockfile && pnpm run smoke:live",
69
70
  "check:publint": "publint run --pack npm",
70
71
  "check:types-pack": "node scripts/check-types-pack.mjs",
71
- "check:exports": "publint run --pack npm && npm run check:types-pack",
72
+ "check:exports": "publint run --pack npm && pnpm run check:types-pack",
72
73
  "check:deps": "depcruise src/main --config .dependency-cruiser.cjs",
73
74
  "check:knip": "knip",
74
- "verify": "npm run type-check && npm run lint && npm run format:check && npm test && npm run build && npm run size:check && npm run check:exports && npm run check:deps",
75
- "verify:full": "npm run verify && npm run test:consumer",
75
+ "verify": "pnpm run type-check && pnpm run lint && pnpm run format:check && pnpm test && pnpm run build && pnpm run size:check && pnpm run check:exports && pnpm run check:deps",
76
+ "verify:full": "pnpm run verify && pnpm run test:consumer",
76
77
  "prepare": "husky",
77
- "prepublishOnly": "npm run build && npm run type-check && npm run test:consumer"
78
+ "prepublishOnly": "pnpm run build && pnpm run type-check && pnpm run test:consumer"
78
79
  },
79
80
  "lint-staged": {
80
81
  "src/**/*.ts": [
@@ -1 +0,0 @@
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/auth/mfa-pending-token-storage.ts","../src/main/core/http/refresh-lock.ts","../src/main/core/http/http-errors.ts","../src/main/core/http/refresh-failure-policy.ts","../src/main/core/http/session-refresh-errors.ts","../src/main/core/http/token-store.ts","../src/main/core/http/auth-utils.ts"],"names":["axios","config","getRefreshToken"],"mappings":"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","file":"chunk-56UA4D6A.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 const portal = readStorageField(PORTAL_ID)\n if (portal) return portal\n return readStorageField(DEV_PORTAL_ID) || getRuntimeHttpClientDevPortalId()\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","import { WP_STORAGE_KEYS } from '../utils/wp-storage-keys.js'\nimport { readSessionScopedItem, removeSessionScopedItem, writeSessionScopedItem } from '../storage/session-scoped-storage.js'\n\nexport type MfaStorageLane = 'c' | 'a'\n\ntype MfaPendingTokenKeys = {\n token: string\n exp: string\n}\n\nfunction keysForLane(lane: MfaStorageLane): MfaPendingTokenKeys {\n const mfa = lane === 'a' ? WP_STORAGE_KEYS.a.mfa : WP_STORAGE_KEYS.c.mfa\n return {\n token: mfa.pendingToken,\n exp: mfa.pendingTokenExp\n }\n}\n\nexport type MfaPendingAccessToken = {\n token: string\n expiresAt: number\n}\n\nfunction readExpiresAt(raw: string | null): number | null {\n if (raw == null || raw === '') {\n return null\n }\n const parsed = Number(raw)\n return Number.isFinite(parsed) ? parsed : null\n}\n\nfunction readScoped(key: string): string | null {\n return readSessionScopedItem(key)\n}\n\nfunction writeScoped(key: string, value: string): void {\n writeSessionScopedItem(key, value)\n}\n\nfunction removeScoped(key: string): void {\n removeSessionScopedItem(key)\n}\n\n/** Persist temp MFA access JWT for mid-gate page refresh (tab-scoped sessionStorage). */\nexport function storeMfaPendingAccessToken(token: string, expiresInSeconds: number | undefined, lane: MfaStorageLane = 'c'): void {\n if (!token || typeof token !== 'string') {\n return\n }\n\n const keys = keysForLane(lane)\n const expiresAt =\n typeof expiresInSeconds === 'number' && expiresInSeconds > 0 ? Date.now() + expiresInSeconds * 1000 : Date.now() + 15 * 60 * 1000\n\n writeScoped(keys.token, token)\n writeScoped(keys.exp, String(expiresAt))\n}\n\n/** Read temp MFA JWT if present and not expired. */\nexport function readMfaPendingAccessToken(lane: MfaStorageLane = 'c'): MfaPendingAccessToken | null {\n const keys = keysForLane(lane)\n const token = readScoped(keys.token)\n if (!token) {\n return null\n }\n\n const expiresAt = readExpiresAt(readScoped(keys.exp))\n if (expiresAt == null || Date.now() >= expiresAt) {\n clearMfaPendingAccessToken(lane)\n return null\n }\n\n return { token, expiresAt }\n}\n\nexport function clearMfaPendingAccessToken(lane: MfaStorageLane = 'c'): void {\n const keys = keysForLane(lane)\n removeScoped(keys.token)\n removeScoped(keys.exp)\n}\n\n/** True when sessionStorage holds a valid temp MFA access JWT for the lane. */\nexport function isMfaPendingAccessSession(lane: MfaStorageLane = 'c'): boolean {\n return readMfaPendingAccessToken(lane) != null\n}\n\nexport type HydrateMfaPendingAccessTokenInput = {\n lane?: MfaStorageLane\n setAccessToken: (token: string, expiresInSeconds?: number) => void | Promise<void>\n}\n\n/** Restore in-memory MFA temp JWT from sessionStorage after refresh. Returns true when hydrated. */\nexport async function hydrateMfaPendingAccessToken(input: HydrateMfaPendingAccessTokenInput): Promise<boolean> {\n const lane = input.lane ?? 'c'\n const pending = readMfaPendingAccessToken(lane)\n if (!pending) {\n return false\n }\n\n const ttlSeconds = Math.max(1, Math.floor((pending.expiresAt - Date.now()) / 1000))\n await input.setAccessToken(pending.token, ttlSeconds)\n return true\n}\n","import { WP_STORAGE_KEYS } from '../utils/wp-storage-keys'\n\nconst LOCK_NAME = 'wp.client.auth.refresh'\nconst STORAGE_LOCK_KEY = WP_STORAGE_KEYS.c.auth.refreshLock\nconst LOCK_TTL_MS = 30_000\n\nasync function withNavigatorLock<T>(fn: () => Promise<T>): Promise<T> {\n if (typeof navigator !== 'undefined' && navigator.locks?.request) {\n return navigator.locks.request(LOCK_NAME, fn)\n }\n return fn()\n}\n\nfunction tryAcquireStorageLock(): boolean {\n if (typeof window === 'undefined' || !window.localStorage) {\n return true\n }\n try {\n const raw = window.localStorage.getItem(STORAGE_LOCK_KEY)\n const now = Date.now()\n if (raw) {\n const ts = Number(raw)\n if (Number.isFinite(ts) && now - ts < LOCK_TTL_MS) {\n return false\n }\n }\n window.localStorage.setItem(STORAGE_LOCK_KEY, String(now))\n return true\n } catch {\n return true\n }\n}\n\nfunction releaseStorageLock(): void {\n if (typeof window === 'undefined' || !window.localStorage) {\n return\n }\n try {\n window.localStorage.removeItem(STORAGE_LOCK_KEY)\n } catch {\n // ignore\n }\n}\n\nasync function waitForStorageLock(maxWaitMs = LOCK_TTL_MS): Promise<void> {\n const start = Date.now()\n while (Date.now() - start < maxWaitMs) {\n if (tryAcquireStorageLock()) {\n return\n }\n await new Promise((r) => setTimeout(r, 200))\n }\n}\n\n/**\n * Cross-tab singleflight around refresh token rotation.\n */\nexport async function withRefreshLock<T>(fn: () => Promise<T>): Promise<T> {\n return withNavigatorLock(async () => {\n await waitForStorageLock()\n try {\n return await fn()\n } finally {\n releaseStorageLock()\n }\n })\n}\n\n/** Test-only: drop stale cross-tab refresh lock from localStorage. */\nexport function clearRefreshLockForTests(): void {\n try {\n if (typeof window === 'undefined' || !window.localStorage) {\n return\n }\n window.localStorage.removeItem(STORAGE_LOCK_KEY)\n } catch {\n // ignore — jsdom may be torn down between files\n }\n}\n","import axios from 'axios'\n\nexport type HttpErrorKind = 'service_unavailable' | 'network' | 'timeout' | 'auth' | 'client' | 'server' | 'unknown'\n\nexport const SERVICE_UNAVAILABLE_MESSAGE = 'Service temporarily unavailable. Please try again in a few minutes.'\n\nconst SERVICE_UNAVAILABLE_STATUSES = new Set([502, 503, 504])\n\n/**\n * Classifies axios and browser network failures for user-facing handling.\n *\n * When the API edge returns 503 without CORS headers, browsers surface ERR_NETWORK\n * with no response — treat that as service unavailable for WoodsPortal API calls.\n */\nexport function classifyHttpError(error: unknown): HttpErrorKind {\n if (!axios.isAxiosError(error)) {\n return 'unknown'\n }\n\n const status = error.response?.status\n if (status != null) {\n if (SERVICE_UNAVAILABLE_STATUSES.has(status)) return 'service_unavailable'\n if (status === 401 || status === 403) return 'auth'\n if (status >= 400 && status < 500) return 'client'\n if (status >= 500) return 'server'\n }\n\n if (error.code === 'ECONNABORTED' || error.message.toLowerCase().includes('timeout')) {\n return 'timeout'\n }\n\n if (\n error.code === 'ERR_NETWORK' ||\n error.code === 'ECONNREFUSED' ||\n error.message === 'Network Error' ||\n error.message.includes('ERR_CONNECTION_REFUSED')\n ) {\n return 'service_unavailable'\n }\n\n return 'network'\n}\n\nexport function isServiceUnavailableError(error: unknown): boolean {\n return classifyHttpError(error) === 'service_unavailable'\n}\n\nexport function getHttpErrorMessage(error: unknown): string {\n const kind = classifyHttpError(error)\n\n switch (kind) {\n case 'service_unavailable':\n return SERVICE_UNAVAILABLE_MESSAGE\n case 'timeout':\n return 'The request timed out. Please check your connection and try again.'\n case 'auth':\n return 'Your session has expired. Please sign in again.'\n case 'network':\n return 'Unable to reach the server. Please check your connection and try again.'\n case 'client':\n case 'server':\n case 'unknown': {\n if (axios.isAxiosError(error)) {\n const payload = error.response?.data as Record<string, unknown> | undefined\n const apiMessage = payload?.errorMessage ?? payload?.message\n if (typeof apiMessage === 'string' && apiMessage.trim() !== '') {\n return apiMessage\n }\n }\n return 'Something went wrong. Please try again.'\n }\n }\n}\n","import axios from 'axios'\nimport { AuthErrorCode, parseApiErrorPayload } from '../auth/auth-error-codes.js'\nimport { classifyHttpError } from './http-errors.js'\n\nexport type RefreshFailureKind = 'transient' | 'missing_context' | 'missing_refresh_token' | 'auth_invalid'\n\nexport type RefreshCallbackResult = {\n token: string | null\n success: boolean\n failureKind?: RefreshFailureKind\n}\n\nconst DEFINITIVE_REFRESH_AUTH_CODES = new Set<string>([\n AuthErrorCode.TOKEN_INVALID,\n AuthErrorCode.TOKEN_EXPIRED,\n AuthErrorCode.MISSING_REFRESH_TOKEN,\n AuthErrorCode.AUTHENTICATION_FAILED,\n AuthErrorCode.INVALID_CREDENTIALS,\n AuthErrorCode.ACCOUNT_LOCKED,\n AuthErrorCode.ACCOUNT_DISABLED\n])\n\nexport function isDefinitiveRefreshAuthError(errorCode?: string, status?: number): boolean {\n const code = (errorCode ?? '').trim().toUpperCase()\n if (code && DEFINITIVE_REFRESH_AUTH_CODES.has(code)) {\n return true\n }\n if (status === 401 && !code) {\n return true\n }\n return false\n}\n\nexport function classifyRefreshHttpError(error: unknown): RefreshFailureKind {\n if (!axios.isAxiosError(error)) {\n return 'transient'\n }\n\n const status = error.response?.status\n const payload = parseApiErrorPayload(error.response?.data)\n\n if (status === 429) {\n return 'transient'\n }\n\n if (status != null && status >= 500) {\n return 'transient'\n }\n\n const httpKind = classifyHttpError(error)\n if (httpKind === 'network' || httpKind === 'timeout' || httpKind === 'service_unavailable') {\n return 'transient'\n }\n\n if (status === 401 || status === 403) {\n if (isDefinitiveRefreshAuthError(payload.errorCode, status)) {\n return 'auth_invalid'\n }\n return 'transient'\n }\n\n return 'transient'\n}\n\nexport function classifyRefreshResponseWithoutToken(response: unknown): RefreshFailureKind {\n if (!response || typeof response !== 'object') {\n return 'transient'\n }\n\n const record = response as { status?: number; data?: unknown }\n const status = record.status\n const payload = parseApiErrorPayload(record.data)\n\n if (isDefinitiveRefreshAuthError(payload.errorCode, status)) {\n return 'auth_invalid'\n }\n\n return 'transient'\n}\n\nexport function isTransientRefreshFailure(kind?: RefreshFailureKind): boolean {\n return kind === 'transient' || kind === 'missing_context'\n}\n\nexport function shouldLogoutAfterRefreshFailure(kind?: RefreshFailureKind): boolean {\n return kind === 'auth_invalid' || kind === 'missing_refresh_token'\n}\n","import type { RefreshFailureKind } from './refresh-failure-policy.js'\n\n/** Transient refresh failure — session cookies remain valid; retry later. */\nexport class SessionRefreshDeferredError extends Error {\n readonly failureKind: RefreshFailureKind | undefined\n\n constructor(failureKind?: RefreshFailureKind, cause?: unknown) {\n super('Session refresh deferred')\n this.name = 'SessionRefreshDeferredError'\n this.failureKind = failureKind\n if (cause !== undefined) {\n ;(this as Error & { cause?: unknown }).cause = cause\n }\n }\n}\n\n/** Definitive auth refresh failure — session should be cleared. */\nexport class SessionRefreshFailedError extends Error {\n readonly failureKind: RefreshFailureKind | undefined\n\n constructor(failureKind?: RefreshFailureKind, cause?: unknown) {\n super('Session refresh failed')\n this.name = 'SessionRefreshFailedError'\n this.failureKind = failureKind\n if (cause !== undefined) {\n ;(this as Error & { cause?: unknown }).cause = cause\n }\n }\n}\n\nexport function isSessionRefreshDeferredError(error: unknown): error is SessionRefreshDeferredError {\n if (error instanceof SessionRefreshDeferredError) {\n return true\n }\n return error instanceof Error && error.message === 'Session refresh deferred'\n}\n\nexport function isSessionRefreshFailedError(error: unknown): error is SessionRefreshFailedError {\n if (error instanceof SessionRefreshFailedError) {\n return true\n }\n return error instanceof Error && error.message === 'Session refresh failed'\n}\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 { getSessionStorageAdapter } from '../storage/session-storage-registry.js'\nimport { WP_STORAGE_KEYS } from '../utils/wp-storage-keys.js'\nimport { readSessionScopedItem, removeSessionScopedItem, writeSessionScopedItem } from '../storage/session-scoped-storage.js'\nimport { isIframeStorageMode, readIframeRefreshToken } from './iframe-session-storage.js'\nimport { logger } from '../logging/logger.js'\nimport { isMfaPendingAccessSession } from '../auth/mfa-pending-token-storage.js'\nimport { withRefreshLock } from './refresh-lock.js'\nimport { isTransientRefreshFailure, shouldLogoutAfterRefreshFailure, type RefreshCallbackResult } from './refresh-failure-policy.js'\nimport { SessionRefreshDeferredError, SessionRefreshFailedError } from './session-refresh-errors.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<RefreshCallbackResult>) | 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\nconst REFRESH_RETRY_BACKOFF_MS = [0, 500, 1500]\n\nconst REFRESH_MAX_ATTEMPTS = 3\n\nfunction delay(ms: number): Promise<void> {\n return new Promise((resolve) => {\n setTimeout(resolve, ms)\n })\n}\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 try {\n writeSessionScopedItem(WP_STORAGE_KEYS.c.auth.refreshExhausted, JSON.stringify({ ts: Date.now() }))\n } catch {\n // ignore\n }\n}\n\nfunction clearPersistedRefreshExhausted(): void {\n try {\n removeSessionScopedItem(WP_STORAGE_KEYS.c.auth.refreshExhausted)\n } catch {\n // ignore\n }\n}\n\nfunction readPersistedRefreshExhausted(): boolean {\n try {\n return Boolean(readSessionScopedItem(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<RefreshCallbackResult>): 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 (isMfaPendingAccessSession('c') || isMfaPendingAccessSession('a')) {\n return\n }\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 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 let lastFailureKind: RefreshCallbackResult['failureKind']\n\n for (let attempt = 0; attempt < REFRESH_MAX_ATTEMPTS; attempt += 1) {\n if (attempt > 0) {\n await delay(REFRESH_RETRY_BACKOFF_MS[attempt] ?? REFRESH_RETRY_BACKOFF_MS.at(-1)!)\n }\n\n const result = await refreshCallback!(refreshToken)\n if (result.success && result.token) {\n lastRefreshFailed = false\n lastSuccessfulRefreshAt = Date.now()\n return\n }\n\n lastFailureKind = result.failureKind\n\n if (!isTransientRefreshFailure(result.failureKind)) {\n break\n }\n }\n\n if (shouldLogoutAfterRefreshFailure(lastFailureKind)) {\n markRefreshFailed()\n throw new SessionRefreshFailedError(lastFailureKind)\n }\n\n throw new SessionRefreshDeferredError(lastFailureKind)\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 (isMfaPendingAccessSession('c') || isMfaPendingAccessSession('a')) {\n return\n }\n\n // Anonymous / pre-auth calls (pre-login, login bootstrap, etc.) — no refresh attempt.\n if (!getAccessToken() && !hasRefreshSession()) {\n return\n }\n\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 (getSessionStorageAdapter()) {\n if (hasRefreshSession()) {\n return true\n }\n return false\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 adapter = getSessionStorageAdapter()\n if (adapter) {\n if (!adapter.getRefreshToken()) {\n return false\n }\n } else {\n const refreshKey = getStorageKeys().refreshToken\n if (!refreshKey || isCookieExpired(refreshKey)) {\n return false\n }\n if (!readRefreshTokenValue()) {\n return false\n }\n }\n if (lastRefreshFailed && !accessToken) {\n return false\n }\n return true\n}\n\nfunction readRefreshTokenValue(): string | null {\n const adapter = getSessionStorageAdapter()\n if (adapter) {\n return adapter.getRefreshToken()\n }\n\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, removeCookie } from '../utils/cookie'\n\nimport { getStorageKeys } from '../utils/storage-keys'\nimport { WP_STORAGE_KEYS } from '../utils/wp-storage-keys'\n\nimport { getSessionStorageAdapter } from '../storage/session-storage-registry'\n\nimport { storAccessToken } from './token-store'\n\nimport { isIframeStorageMode, readIframeRefreshToken, writeIframeRefreshToken } from './iframe-session-storage'\n\nfunction readStoredJson<T>(key: string | null | undefined): T | null {\n if (key == null || key === '') {\n return null\n }\n\n const adapter = getSessionStorageAdapter()\n if (adapter) {\n const raw = adapter.getItem(key)\n if (isCorruptCookieRawValue(raw)) {\n if (raw === 'undefined' || raw === 'null') {\n adapter.removeItem(key)\n }\n return null\n }\n try {\n return JSON.parse(raw!) as T\n } catch {\n return raw as unknown as T\n }\n }\n\n return parseCookieJson<T>(key)\n}\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 const adapter = getSessionStorageAdapter()\n if (adapter) {\n adapter.setItem(key, serialized)\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\nfunction resolveRefreshExpiryMs(expiresAt: number): number {\n if (typeof expiresAt === 'number' && expiresAt > 1_000_000_000_000) {\n return expiresAt\n }\n if (typeof expiresAt === 'number' && expiresAt > 1_000_000_000) {\n return expiresAt * 1000\n }\n return Date.now() + (expiresAt || 0) * 1000\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 const expiresMs = resolveRefreshExpiryMs(expiresAt)\n const adapter = getSessionStorageAdapter()\n\n if (adapter) {\n adapter.setRefreshToken(token, expiresMs)\n resolve()\n return\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 readStoredJson(getStorageKeys().loginDetails)\n}\n\nexport function getRefreshToken(): string | null {\n const adapter = getSessionStorageAdapter()\n if (adapter) {\n return adapter.getRefreshToken()\n }\n\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\n/** Clears stored refresh token (e.g. when entering MFA pending gate). */\nexport function clearRefreshToken(): void {\n const adapter = getSessionStorageAdapter()\n if (adapter) {\n adapter.removeRefreshToken()\n return\n }\n\n const key = getStorageKeys().refreshToken\n if (key) {\n removeCookie(key)\n }\n if (isIframeStorageMode()) {\n writeIframeRefreshToken('', 0)\n }\n}\n\nexport function getPortal(): any | null {\n return readStoredJson(getStorageKeys().portal)\n}\n\nexport function getSubscriptionType(): string | null {\n return readStoredJson<string>(getStorageKeys().subscriptionType)\n}\n\n/** Clears adapter-backed session keys on native/mobile hosts. */\nexport function clearAdapterSessionData(): void {\n const adapter = getSessionStorageAdapter()\n if (!adapter) {\n return\n }\n\n const keys = getStorageKeys()\n adapter.removeRefreshToken()\n for (const key of [\n keys.loginDetails,\n keys.portal,\n keys.subscriptionType,\n keys.authUser,\n WP_STORAGE_KEYS.c.mfa.pendingToken,\n WP_STORAGE_KEYS.c.mfa.pendingTokenExp,\n WP_STORAGE_KEYS.c.auth.refreshExhausted,\n WP_STORAGE_KEYS.c.auth.err\n ]) {\n if (key) {\n adapter.removeItem(key)\n }\n }\n}\n"]}