woodsportal-client-sdk 4.0.4-dev.2 → 4.0.4-dev.20

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 (49) hide show
  1. package/README.md +2 -0
  2. package/dist/adapters/angular/index.d.ts +2 -1
  3. package/dist/adapters/angular/index.js +4 -4
  4. package/dist/adapters/react/index.d.ts +2 -1
  5. package/dist/adapters/react/index.js +4 -4
  6. package/dist/adapters/vue/index.d.ts +2 -1
  7. package/dist/adapters/vue/index.js +4 -4
  8. package/dist/auth-error-codes-D7CXVBEN.js +3 -0
  9. package/dist/auth-error-codes-D7CXVBEN.js.map +1 -0
  10. package/dist/auth-interceptor-policy-F7JIJWSQ.js +4 -0
  11. package/dist/auth-interceptor-policy-F7JIJWSQ.js.map +1 -0
  12. package/dist/auth-utils-VTD5TFYE.js +3 -0
  13. package/dist/{auth-utils-MNMC2QGX.js.map → auth-utils-VTD5TFYE.js.map} +1 -1
  14. package/dist/{cache-purge-G5WkHckd.d.ts → cache-purge-Ca4idzyy.d.ts} +1 -1
  15. package/dist/{chunk-D7XKR2O7.js → chunk-BWZAX23E.js} +11 -10
  16. package/dist/chunk-BWZAX23E.js.map +1 -0
  17. package/dist/chunk-COHBSTHF.js +82 -0
  18. package/dist/chunk-COHBSTHF.js.map +1 -0
  19. package/dist/{chunk-YEUFUGGT.js → chunk-GLATNYVU.js} +159 -46
  20. package/dist/chunk-GLATNYVU.js.map +1 -0
  21. package/dist/{chunk-GO35W5PN.js → chunk-IUVL2E7K.js} +175 -17
  22. package/dist/chunk-IUVL2E7K.js.map +1 -0
  23. package/dist/{chunk-FDZNMZS4.js → chunk-LSRSCZBI.js} +507 -166
  24. package/dist/chunk-LSRSCZBI.js.map +1 -0
  25. package/dist/{chunk-VEJKNXUE.js → chunk-LYPJXG74.js} +4 -4
  26. package/dist/{chunk-VEJKNXUE.js.map → chunk-LYPJXG74.js.map} +1 -1
  27. package/dist/chunk-MFIGS74G.js +140 -0
  28. package/dist/chunk-MFIGS74G.js.map +1 -0
  29. package/dist/{chunk-6KKVGCXG.js → chunk-ND7HCTXC.js} +3 -3
  30. package/dist/{chunk-6KKVGCXG.js.map → chunk-ND7HCTXC.js.map} +1 -1
  31. package/dist/{chunk-QPSCMK4W.js → chunk-TVUBMDXX.js} +74 -13
  32. package/dist/chunk-TVUBMDXX.js.map +1 -0
  33. package/dist/entries/auth.d.ts +17 -4
  34. package/dist/entries/auth.js +7 -4
  35. package/dist/entries/auth.js.map +1 -1
  36. package/dist/entries/crm.d.ts +4 -3
  37. package/dist/entries/crm.js +5 -5
  38. package/dist/{http-errors-hlKcIsXD.d.ts → http-errors-B41BMjip.d.ts} +252 -15
  39. package/dist/{index-CCwMopD8.d.ts → index-Bh9eY8sA.d.ts} +5 -1
  40. package/dist/index.d.ts +36 -10
  41. package/dist/index.js +11 -8
  42. package/dist/index.js.map +1 -1
  43. package/package.json +4 -3
  44. package/dist/auth-utils-MNMC2QGX.js +0 -3
  45. package/dist/chunk-D7XKR2O7.js.map +0 -1
  46. package/dist/chunk-FDZNMZS4.js.map +0 -1
  47. package/dist/chunk-GO35W5PN.js.map +0 -1
  48. package/dist/chunk-QPSCMK4W.js.map +0 -1
  49. package/dist/chunk-YEUFUGGT.js.map +0 -1
@@ -0,0 +1,140 @@
1
+ import { AuthErrorCode } from './chunk-COHBSTHF.js';
2
+
3
+ // src/main/core/auth/auth-interceptor-policy.ts
4
+ var DEFAULT_SESSION_PROBE_SUFFIXES = ["/auth/me"];
5
+ function normalizeRequestUrl(url) {
6
+ if (!url) return "";
7
+ try {
8
+ if (url.startsWith("http")) {
9
+ return new URL(url).pathname;
10
+ }
11
+ } catch {
12
+ }
13
+ return url.split("?")[0] ?? url;
14
+ }
15
+ function isOptionalAuthFailureUrl(url, config) {
16
+ const path = normalizeRequestUrl(url);
17
+ if (!path) return false;
18
+ if (config.optionalAuthFailurePaths?.includes(path)) {
19
+ return true;
20
+ }
21
+ if (config.includeAdminMfaSecurityPrefixes) {
22
+ if (path.includes("/api/admin/auth/security/")) return true;
23
+ if (path.includes("/api/admin/auth/mfa/webauthn/")) return true;
24
+ if (path.includes("/api/auth/security/")) return true;
25
+ if (path.includes("/api/auth/mfa/webauthn/")) return true;
26
+ }
27
+ return false;
28
+ }
29
+ function isSessionProbeUrl(url, config) {
30
+ const path = normalizeRequestUrl(url);
31
+ if (!path) return false;
32
+ if (config.sessionProbePaths?.includes(path)) return true;
33
+ return DEFAULT_SESSION_PROBE_SUFFIXES.some((suffix) => path.endsWith(suffix));
34
+ }
35
+ function persistAuthError(payload) {
36
+ const data = {
37
+ ...payload,
38
+ ts: Date.now()
39
+ };
40
+ if (typeof window !== "undefined" && window.sessionStorage) {
41
+ sessionStorage.setItem("authError", JSON.stringify(data));
42
+ }
43
+ return data;
44
+ }
45
+ function logoutAction(errorCode, routes) {
46
+ if (errorCode === AuthErrorCode.HUBSPOT_REAUTH_REQUIRED) {
47
+ return {
48
+ kind: "redirect",
49
+ route: routes.accountSelect,
50
+ clearSession: false
51
+ };
52
+ }
53
+ return {
54
+ kind: "logout",
55
+ route: routes.unauthorized,
56
+ clearSession: true
57
+ };
58
+ }
59
+ function resolveByErrorCode(errorCode, status, url, isRetryRequest, policy) {
60
+ const { routes } = policy;
61
+ switch (errorCode) {
62
+ case AuthErrorCode.TOKEN_EXPIRED:
63
+ case AuthErrorCode.TOKEN_INVALID:
64
+ case AuthErrorCode.AUTHENTICATION_FAILED:
65
+ return isRetryRequest ? logoutAction(errorCode, routes) : { kind: "refresh_retry" };
66
+ case AuthErrorCode.MISSING_REFRESH_TOKEN:
67
+ case AuthErrorCode.ACCESS_UNAUTHORIZED:
68
+ return logoutAction(errorCode, routes);
69
+ case AuthErrorCode.ACCOUNT_LOCKED:
70
+ case AuthErrorCode.ACCOUNT_DISABLED:
71
+ return {
72
+ kind: "redirect",
73
+ route: routes.unauthorized,
74
+ clearSession: true
75
+ };
76
+ case AuthErrorCode.LOGIN_FAILED:
77
+ case AuthErrorCode.INVALID_CREDENTIALS:
78
+ return { kind: "reject" };
79
+ case AuthErrorCode.EMAIL_NOT_VERIFIED:
80
+ return {
81
+ kind: "redirect",
82
+ route: routes.resendEmail,
83
+ clearSession: false
84
+ };
85
+ case AuthErrorCode.TWO_FACTOR_REQUIRED:
86
+ return {
87
+ kind: "redirect",
88
+ route: routes.twoFa,
89
+ clearSession: false
90
+ };
91
+ case AuthErrorCode.HUBSPOT_REAUTH_REQUIRED:
92
+ return {
93
+ kind: "redirect",
94
+ route: routes.accountSelect,
95
+ clearSession: false
96
+ };
97
+ case AuthErrorCode.OAUTH_PROCESSING_ERROR:
98
+ case AuthErrorCode.PORTAL_INACTIVE:
99
+ case AuthErrorCode.AMBIGUOUS_HUB_ID:
100
+ case AuthErrorCode.MISSING_HEADERS:
101
+ case AuthErrorCode.COMMERCIAL_ACCESS_EXPIRED:
102
+ return { kind: "reject" };
103
+ case AuthErrorCode.ACCESS_DENIED:
104
+ case AuthErrorCode.ACCESS_FORBIDDEN:
105
+ if (isSessionProbeUrl(url, policy)) {
106
+ return {
107
+ kind: "redirect",
108
+ route: routes.unauthorized,
109
+ clearSession: false
110
+ };
111
+ }
112
+ return { kind: "reject" };
113
+ default:
114
+ if (status === 401) {
115
+ return isRetryRequest ? logoutAction(errorCode, routes) : { kind: "refresh_retry" };
116
+ }
117
+ if (status === 403) {
118
+ return isSessionProbeUrl(url, policy) ? {
119
+ kind: "redirect",
120
+ route: routes.unauthorized,
121
+ clearSession: false
122
+ } : { kind: "reject" };
123
+ }
124
+ return { kind: "reject" };
125
+ }
126
+ }
127
+ function resolveAuthErrorAction(input) {
128
+ const { status, errorCode, url, skipGlobalAuthRedirect, isRetryRequest, policy } = input;
129
+ if (status !== 401 && status !== 403) {
130
+ return { kind: "reject" };
131
+ }
132
+ if (skipGlobalAuthRedirect || isOptionalAuthFailureUrl(url, policy)) {
133
+ return { kind: "reject" };
134
+ }
135
+ return resolveByErrorCode(errorCode, status, url ?? "", isRetryRequest, policy);
136
+ }
137
+
138
+ export { isOptionalAuthFailureUrl, isSessionProbeUrl, persistAuthError, resolveAuthErrorAction };
139
+ //# sourceMappingURL=chunk-MFIGS74G.js.map
140
+ //# sourceMappingURL=chunk-MFIGS74G.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/main/core/auth/auth-interceptor-policy.ts"],"names":[],"mappings":"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","file":"chunk-MFIGS74G.js","sourcesContent":["import { AuthErrorCode, type ApiErrorPayload } from './auth-error-codes.js'\n\nexport type WoodsportalRequestConfig = {\n __isRetryRequest?: boolean\n skipGlobalAuthRedirect?: boolean\n url?: string\n}\n\nexport type AuthErrorAction =\n | { kind: 'refresh_retry' }\n | { kind: 'reject' }\n | { kind: 'redirect'; route: string; clearSession: boolean }\n | { kind: 'logout'; route: string; clearSession: boolean }\n\n/** Lane-specific routes for auth error redirects (hash or path prefixes supplied by each app). */\nexport type AuthPolicyRoutes = {\n unauthorized: string\n login: string\n twoFa: string\n resendEmail: string\n accountSelect: string\n}\n\nexport type AuthInterceptorPolicyConfig = {\n routes: AuthPolicyRoutes\n /** Request paths that must not trigger global logout (e.g. MFA enrollment). */\n optionalAuthFailurePaths?: string[]\n /** Paths treated as session probes (401/403 → unauthorized page). */\n sessionProbePaths?: string[]\n /** When true, optional MFA/security path prefixes match. */\n includeAdminMfaSecurityPrefixes?: boolean\n}\n\nconst DEFAULT_SESSION_PROBE_SUFFIXES = ['/auth/me']\n\nfunction normalizeRequestUrl(url?: string): string {\n if (!url) return ''\n try {\n if (url.startsWith('http')) {\n return new URL(url).pathname\n }\n } catch {\n // fall through\n }\n return url.split('?')[0] ?? url\n}\n\nexport function isOptionalAuthFailureUrl(url: string | undefined, config: AuthInterceptorPolicyConfig): boolean {\n const path = normalizeRequestUrl(url)\n if (!path) return false\n\n if (config.optionalAuthFailurePaths?.includes(path)) {\n return true\n }\n\n if (config.includeAdminMfaSecurityPrefixes) {\n if (path.includes('/api/admin/auth/security/')) return true\n if (path.includes('/api/admin/auth/mfa/webauthn/')) return true\n if (path.includes('/api/auth/security/')) return true\n if (path.includes('/api/auth/mfa/webauthn/')) return true\n }\n\n return false\n}\n\nexport function isSessionProbeUrl(url: string | undefined, config: AuthInterceptorPolicyConfig): boolean {\n const path = normalizeRequestUrl(url)\n if (!path) return false\n if (config.sessionProbePaths?.includes(path)) return true\n return DEFAULT_SESSION_PROBE_SUFFIXES.some((suffix) => path.endsWith(suffix))\n}\n\nexport function persistAuthError(payload: ApiErrorPayload): ApiErrorPayload & { ts: number } {\n const data = {\n ...payload,\n ts: Date.now()\n }\n if (typeof window !== 'undefined' && window.sessionStorage) {\n sessionStorage.setItem('authError', JSON.stringify(data))\n }\n return data\n}\n\nfunction logoutAction(errorCode: string | undefined, routes: AuthPolicyRoutes): AuthErrorAction {\n if (errorCode === AuthErrorCode.HUBSPOT_REAUTH_REQUIRED) {\n return {\n kind: 'redirect',\n route: routes.accountSelect,\n clearSession: false\n }\n }\n return {\n kind: 'logout',\n route: routes.unauthorized,\n clearSession: true\n }\n}\n\nfunction resolveByErrorCode(\n errorCode: string | undefined,\n status: number,\n url: string,\n isRetryRequest: boolean | undefined,\n policy: AuthInterceptorPolicyConfig\n): AuthErrorAction {\n const { routes } = policy\n\n switch (errorCode) {\n case AuthErrorCode.TOKEN_EXPIRED:\n case AuthErrorCode.TOKEN_INVALID:\n case AuthErrorCode.AUTHENTICATION_FAILED:\n return isRetryRequest ? logoutAction(errorCode, routes) : { kind: 'refresh_retry' }\n\n case AuthErrorCode.MISSING_REFRESH_TOKEN:\n case AuthErrorCode.ACCESS_UNAUTHORIZED:\n return logoutAction(errorCode, routes)\n\n case AuthErrorCode.ACCOUNT_LOCKED:\n case AuthErrorCode.ACCOUNT_DISABLED:\n return {\n kind: 'redirect',\n route: routes.unauthorized,\n clearSession: true\n }\n\n case AuthErrorCode.LOGIN_FAILED:\n case AuthErrorCode.INVALID_CREDENTIALS:\n return { kind: 'reject' }\n\n case AuthErrorCode.EMAIL_NOT_VERIFIED:\n return {\n kind: 'redirect',\n route: routes.resendEmail,\n clearSession: false\n }\n\n case AuthErrorCode.TWO_FACTOR_REQUIRED:\n return {\n kind: 'redirect',\n route: routes.twoFa,\n clearSession: false\n }\n\n case AuthErrorCode.HUBSPOT_REAUTH_REQUIRED:\n return {\n kind: 'redirect',\n route: routes.accountSelect,\n clearSession: false\n }\n\n case AuthErrorCode.OAUTH_PROCESSING_ERROR:\n case AuthErrorCode.PORTAL_INACTIVE:\n case AuthErrorCode.AMBIGUOUS_HUB_ID:\n case AuthErrorCode.MISSING_HEADERS:\n case AuthErrorCode.COMMERCIAL_ACCESS_EXPIRED:\n return { kind: 'reject' }\n\n case AuthErrorCode.ACCESS_DENIED:\n case AuthErrorCode.ACCESS_FORBIDDEN:\n if (isSessionProbeUrl(url, policy)) {\n return {\n kind: 'redirect',\n route: routes.unauthorized,\n clearSession: false\n }\n }\n return { kind: 'reject' }\n\n default:\n if (status === 401) {\n return isRetryRequest ? logoutAction(errorCode, routes) : { kind: 'refresh_retry' }\n }\n if (status === 403) {\n return isSessionProbeUrl(url, policy)\n ? {\n kind: 'redirect',\n route: routes.unauthorized,\n clearSession: false\n }\n : { kind: 'reject' }\n }\n return { kind: 'reject' }\n }\n}\n\nexport function resolveAuthErrorAction(input: {\n status: number\n errorCode?: string\n url?: string\n skipGlobalAuthRedirect?: boolean\n isRetryRequest?: boolean\n policy: AuthInterceptorPolicyConfig\n}): AuthErrorAction {\n const { status, errorCode, url, skipGlobalAuthRedirect, isRetryRequest, policy } = input\n\n if (status !== 401 && status !== 403) {\n return { kind: 'reject' }\n }\n\n if (skipGlobalAuthRedirect || isOptionalAuthFailureUrl(url, policy)) {\n return { kind: 'reject' }\n }\n\n return resolveByErrorCode(errorCode, status, url ?? '', isRetryRequest, policy)\n}\n"]}
@@ -1,4 +1,4 @@
1
- import { createStore } from './chunk-YEUFUGGT.js';
1
+ import { createStore } from './chunk-GLATNYVU.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-6KKVGCXG.js.map
95
- //# sourceMappingURL=chunk-6KKVGCXG.js.map
94
+ //# sourceMappingURL=chunk-ND7HCTXC.js.map
95
+ //# sourceMappingURL=chunk-ND7HCTXC.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/main/state/crm/use-multi-object.ts"],"names":[],"mappings":"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","file":"chunk-6KKVGCXG.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-ND7HCTXC.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"]}
@@ -71,43 +71,98 @@ var isCookieExpired = (key) => {
71
71
  // src/main/core/http/token-store.ts
72
72
  var accessToken = null;
73
73
  var tokenExpiresAt = null;
74
+ var accessTtlMs = null;
74
75
  var refreshCallback = null;
76
+ var refreshBufferSeconds = 60;
77
+ var refreshPromise = null;
78
+ var lastSuccessfulRefreshAt = null;
79
+ var MIN_SHORT_TTL_BUFFER_MS = 5e3;
80
+ var MIN_PROACTIVE_REFRESH_INTERVAL_MS = 3e4;
81
+ function getEffectiveBufferMs(ttlMs) {
82
+ const capMs = refreshBufferSeconds * 1e3;
83
+ let buffer;
84
+ if (ttlMs <= capMs) {
85
+ buffer = Math.max(MIN_SHORT_TTL_BUFFER_MS, Math.floor(ttlMs * 0.2));
86
+ } else {
87
+ buffer = capMs;
88
+ }
89
+ const maxBuffer = Math.max(0, ttlMs - 1e3);
90
+ return Math.min(buffer, maxBuffer);
91
+ }
92
+ function getCurrentBufferMs() {
93
+ if (accessTtlMs != null && accessTtlMs > 0) {
94
+ return getEffectiveBufferMs(accessTtlMs);
95
+ }
96
+ return refreshBufferSeconds * 1e3;
97
+ }
75
98
  function getAccessToken() {
76
99
  return accessToken;
77
100
  }
78
101
  function storAccessToken(token, expiresIn) {
79
102
  accessToken = token;
80
- if (expiresIn) {
81
- tokenExpiresAt = Date.now() + expiresIn * 1e3;
103
+ if (expiresIn != null && expiresIn > 0) {
104
+ accessTtlMs = expiresIn * 1e3;
105
+ tokenExpiresAt = Date.now() + accessTtlMs;
82
106
  } else {
107
+ accessTtlMs = null;
83
108
  tokenExpiresAt = null;
84
109
  }
85
110
  }
86
111
  function clearAccessToken() {
87
112
  accessToken = null;
88
113
  tokenExpiresAt = null;
114
+ accessTtlMs = null;
115
+ lastSuccessfulRefreshAt = null;
116
+ }
117
+ function setRefreshBufferSeconds(seconds) {
118
+ refreshBufferSeconds = Math.max(0, seconds);
89
119
  }
90
120
  function isExpiresAccessToken() {
91
121
  if (!accessToken) return true;
92
122
  if (tokenExpiresAt === null) return false;
93
- return Date.now() >= tokenExpiresAt;
123
+ const bufferMs = getCurrentBufferMs();
124
+ return Date.now() >= tokenExpiresAt - bufferMs;
94
125
  }
95
126
  function setRefreshCallback(callback) {
96
127
  refreshCallback = callback;
97
128
  }
129
+ async function refreshSession(options = {}) {
130
+ const { force = false } = options;
131
+ if (!force && lastSuccessfulRefreshAt != null && Date.now() - lastSuccessfulRefreshAt < MIN_PROACTIVE_REFRESH_INTERVAL_MS) {
132
+ return;
133
+ }
134
+ if (!refreshCallback) {
135
+ return;
136
+ }
137
+ if (!refreshPromise) {
138
+ refreshPromise = (async () => {
139
+ const { getRefreshToken: getRefreshToken2 } = await import('./auth-utils-VTD5TFYE.js');
140
+ const refreshToken = getRefreshToken2();
141
+ if (!refreshToken) {
142
+ throw new Error("Session expired: missing refresh token");
143
+ }
144
+ const result = await refreshCallback(refreshToken);
145
+ if (!result.success || !result.token) {
146
+ throw new Error("Session refresh failed");
147
+ }
148
+ lastSuccessfulRefreshAt = Date.now();
149
+ })().finally(() => {
150
+ refreshPromise = null;
151
+ });
152
+ }
153
+ await refreshPromise;
154
+ }
98
155
  async function ensureValidRefresh() {
99
- if (isExpiresAccessToken() && refreshCallback) {
100
- const { getRefreshToken: getRefreshToken2 } = await import('./auth-utils-MNMC2QGX.js');
101
- const refreshToken = getRefreshToken2();
102
- if (refreshToken) {
103
- await refreshCallback(refreshToken);
104
- }
156
+ if (!isExpiresAccessToken()) {
157
+ return;
105
158
  }
159
+ await refreshSession({ force: true });
106
160
  }
107
161
  function isAuthenticateApp() {
108
162
  const token = getAccessToken();
109
163
  if (token) {
110
- if (tokenExpiresAt === null || Date.now() < tokenExpiresAt) {
164
+ const bufferMs = getCurrentBufferMs();
165
+ if (tokenExpiresAt === null || Date.now() < tokenExpiresAt - bufferMs) {
111
166
  return true;
112
167
  }
113
168
  }
@@ -122,6 +177,12 @@ function isAuthenticated() {
122
177
  function isAccessTokenExpired() {
123
178
  return isExpiresAccessToken();
124
179
  }
180
+ function hasRefreshSession() {
181
+ return !isCookieExpired(getStorageKeys().refreshToken);
182
+ }
183
+ function hasValidAccessToken() {
184
+ return Boolean(getAccessToken()) && !isExpiresAccessToken();
185
+ }
125
186
 
126
187
  // src/main/core/http/iframe-session-storage.ts
127
188
  var IFRAME_RT_PREFIX = "wp_iframe_rt_";
@@ -232,6 +293,6 @@ function getSubscriptionType() {
232
293
  return JSON.parse(getCookie(getStorageKeys().subscriptionType || null) || null);
233
294
  }
234
295
 
235
- export { DEV_API_URL, DEV_PORTAL_ID, HUBSPOT_DATA, HUB_ID, PORTAL_ID, clearAccessToken, clearClientAuthCookies, configureStorageKeys, ensureValidRefresh, getAccessToken, getCookie, getPortal, getProfile, getRefreshToken, getSubscriptionType, isAccessTokenExpired, isAuthenticateApp, isAuthenticated, isCookieExpired, isExpiresAccessToken, setAccessToken, setIframeStorageMode, setLoggedInDetails, setPortal, setProfileDetails, setRefreshCallback, setRefreshToken, setSubscriptionType };
236
- //# sourceMappingURL=chunk-QPSCMK4W.js.map
237
- //# sourceMappingURL=chunk-QPSCMK4W.js.map
296
+ export { DEV_API_URL, DEV_PORTAL_ID, HUBSPOT_DATA, HUB_ID, PORTAL_ID, clearAccessToken, clearClientAuthCookies, configureStorageKeys, ensureValidRefresh, getAccessToken, getCookie, getPortal, getProfile, getRefreshToken, getSubscriptionType, hasRefreshSession, hasValidAccessToken, isAccessTokenExpired, isAuthenticateApp, isAuthenticated, isCookieExpired, isExpiresAccessToken, refreshSession, setAccessToken, setIframeStorageMode, setLoggedInDetails, setPortal, setProfileDetails, setRefreshBufferSeconds, setRefreshCallback, setRefreshToken, setSubscriptionType, storAccessToken };
297
+ //# sourceMappingURL=chunk-TVUBMDXX.js.map
298
+ //# sourceMappingURL=chunk-TVUBMDXX.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/main/core/utils/constants.ts","../src/main/core/utils/storage-keys.ts","../src/main/core/utils/cookie.ts","../src/main/core/http/token-store.ts","../src/main/core/http/iframe-session-storage.ts","../src/main/core/http/auth-utils.ts"],"names":["getRefreshToken"],"mappings":"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","file":"chunk-TVUBMDXX.js","sourcesContent":["// cookies\nexport const LOGIN_DETAILS = 'loginDetails'\nexport const REFRESH_TOKEN = 'refreshToken'\nexport const PORTAL = 'portal'\nexport const SUBSCRIPTION_TYPE = 'subscriptionType'\n\n// variables\nexport const HUBSPOT_DATA = 'hubSpotData'\nexport const HUB_ID = 'hubId'\nexport const DEV_PORTAL_ID = 'devPortalId'\nexport const PORTAL_ID = 'portalId'\nexport const DEV_API_URL = 'devApiUrl'\n","import { LOGIN_DETAILS, PORTAL, REFRESH_TOKEN, SUBSCRIPTION_TYPE } from './constants'\n\nexport interface StorageKeyConfig {\n loginDetails?: string\n refreshToken?: string\n portal?: string\n subscriptionType?: string\n authUser?: string\n}\n\nconst defaults: Required<StorageKeyConfig> = {\n loginDetails: LOGIN_DETAILS,\n refreshToken: REFRESH_TOKEN,\n portal: PORTAL,\n subscriptionType: SUBSCRIPTION_TYPE,\n authUser: LOGIN_DETAILS\n}\n\nlet runtimeKeys: Required<StorageKeyConfig> = { ...defaults }\n\nexport function configureStorageKeys(overrides: StorageKeyConfig = {}): void {\n runtimeKeys = { ...defaults, ...runtimeKeys, ...overrides }\n}\n\n/** Test helper — restore default cookie key names. */\nexport function resetStorageKeysForTests(): void {\n runtimeKeys = { ...defaults }\n}\n\nexport function getStorageKeys(): Readonly<Required<StorageKeyConfig>> {\n return runtimeKeys\n}\n","import Cookies from 'js-cookie'\nimport { getStorageKeys } from './storage-keys'\n\nfunction cookieSecureFlag(): boolean {\n if (typeof window === 'undefined') return true\n return window.location.protocol === 'https:'\n}\n\nexport const setCookie = (key: string, value: string, expire?: number | Date) => {\n return Cookies.set(key, value, {\n expires: expire,\n sameSite: cookieSecureFlag() ? 'none' : 'lax',\n secure: cookieSecureFlag()\n })\n}\n\nexport const getCookie: any = (key: any) => {\n return Cookies.get(key)\n}\n\nexport const removeCookie = (key: any) => {\n return Cookies.remove(key)\n}\n\n/** Clears client-portal session cookies only (does not wipe admin cookies on shared localhost). */\nexport const clearClientAuthCookies = () => {\n const keys = getStorageKeys()\n const names = new Set(\n [keys.loginDetails, keys.refreshToken, keys.portal, keys.subscriptionType, keys.authUser].filter((name): name is string => Boolean(name))\n )\n names.forEach((name) => Cookies.remove(name))\n}\n\n/** @deprecated Prefer {@link clearClientAuthCookies} */\nexport const removeAllCookie = clearClientAuthCookies\n\n// export const isCookieExpired = (key: string): boolean => {\n// const value = Cookies.get(key);\n// return value === undefined; // true means expired or never set\n// };\n\nexport const isCookieExpired = (key: string): boolean => {\n const value = Cookies.get(key)\n if (value === undefined) {\n return true\n }\n try {\n const parsed = JSON.parse(value)\n if (parsed && typeof parsed === 'object' && 'expiresAt' in parsed) {\n const expiresAt = (parsed as { expiresAt?: number }).expiresAt\n return typeof expiresAt === 'number' && Date.now() > expiresAt\n }\n // Refresh/auth cookies store a JSON-encoded string token; rely on browser cookie expiry.\n return false\n } catch {\n return true\n }\n}\n","/**\n\n * Token storage utilities\n\n * These functions handle access token management\n\n */\n\nimport { isCookieExpired } from '../utils/cookie.js'\n\nimport { getStorageKeys } from '../utils/storage-keys'\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\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 storAccessToken(token: string, expiresIn?: number): void {\n accessToken = token\n\n lastRefreshFailed = false\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\nexport function clearAccessToken(): void {\n accessToken = null\n\n tokenExpiresAt = null\n\n accessTtlMs = null\n\n lastRefreshFailed = false\n\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\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 { getRefreshToken } = await import('./auth-utils.js')\n const refreshToken = getRefreshToken()\n\n if (!refreshToken) {\n lastRefreshFailed = true\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 lastRefreshFailed = true\n\n throw new Error('Session refresh failed')\n }\n\n lastRefreshFailed = false\n\n lastSuccessfulRefreshAt = Date.now()\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 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 return !isCookieExpired(getStorageKeys().refreshToken)\n}\n\nexport function hasValidAccessToken(): boolean {\n return Boolean(getAccessToken()) && !isExpiresAccessToken()\n}\n","/**\n * Iframe-safe refresh token persistence (HubSpot CMS editor third-party cookie fallback).\n */\n\nconst IFRAME_RT_PREFIX = 'wp_iframe_rt_'\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 iframeKey(): string {\n const hubId = typeof window !== 'undefined' ? (window as Window & { hubSpotData?: { hubId?: string | number } }).hubSpotData?.hubId : undefined\n return `${IFRAME_RT_PREFIX}${hubId ?? 'default'}`\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(`${iframeKey()}_exp`, 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(`${iframeKey()}_exp`)\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(`${iframeKey()}_exp`)\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","/**\n * Authentication utility functions\n * These handle refresh token management\n */\n\nimport { setCookie, getCookie } from '../utils/cookie'\nimport { getStorageKeys } from '../utils/storage-keys'\nimport { storAccessToken } from './token-store'\nimport { isIframeStorageMode, readIframeRefreshToken, writeIframeRefreshToken } from './iframe-session-storage'\n\n// Set data\nexport const setLoggedInDetails = async (data: any) => {\n return new Promise((resolve: any) => {\n const keys = getStorageKeys()\n setCookie(keys.loginDetails, JSON.stringify(data))\n if (keys.authUser !== keys.loginDetails) {\n setCookie(keys.authUser, JSON.stringify(data))\n }\n resolve()\n })\n}\n\nexport const setProfileDetails = async (data: any) => {\n return new Promise((resolve: any) => {\n setCookie(getStorageKeys().loginDetails, JSON.stringify(data))\n resolve()\n })\n}\n\nexport function setRefreshToken(token: string, expiresAt: number) {\n return new Promise((resolve: any) => {\n let expiresMs: number\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 setCookie(getStorageKeys().refreshToken, JSON.stringify(token), new Date(expiresMs))\n if (isIframeStorageMode()) {\n writeIframeRefreshToken(token, expiresMs)\n }\n resolve()\n })\n}\n\nexport function setAccessToken(token: string, expiresIn?: number) {\n return new Promise((resolve: any) => {\n storAccessToken(token, expiresIn)\n resolve()\n })\n}\n\nexport const setPortal = async (data: any) => {\n return new Promise((resolve: any) => {\n setCookie(getStorageKeys().portal, JSON.stringify(data))\n resolve()\n })\n}\n\nexport const setSubscriptionType = async (data: any) => {\n return new Promise((resolve: any) => {\n setCookie(getStorageKeys().subscriptionType, JSON.stringify(data))\n resolve()\n })\n}\n\n// Get data\nexport function getProfile(): string | null {\n return JSON.parse(getCookie(getStorageKeys().loginDetails || null) || null)\n}\n\nexport function getRefreshToken(): string | null {\n const fromCookie = JSON.parse(getCookie(getStorageKeys().refreshToken || null) || null)\n if (fromCookie) {\n return fromCookie\n }\n if (isIframeStorageMode()) {\n return readIframeRefreshToken()\n }\n return null\n}\n\nexport function getPortal(): any | null {\n return JSON.parse(getCookie(getStorageKeys().portal || null) || null)\n}\n\nexport function getSubscriptionType(): string | null {\n return JSON.parse(getCookie(getStorageKeys().subscriptionType || null) || null)\n}\n"]}
@@ -1,6 +1,6 @@
1
- import { p as preLogin, l as login, c as clientSession, h as handoff, a as logout, v as verifyEmail, r as registerExistingUser, f as forgetPassword, b as resetPassword, d as resetPasswordVerifyToken, e as verifyEmailResend, g as resendEmail, i as changePassword, m as me, j as profile, k as profileUpdate, n as verifyOtp, s as sendMfaOtp, o as pendingPasskeyOptions, q as pendingPasskeyVerify, t as getMfaStatus, u as setMfaPreferences, w as startPhoneVerify, x as confirmPhoneVerify, y as totpEnrollStart, z as totpEnrollVerify, A as totpDisable, B as webauthnRegisterOptions, C as webauthnRegisterVerify, D as webauthnAuthOptions, E as webauthnAuthVerify, F as listWebauthnCredentials, G as deleteWebauthnCredential, H as passkeyLoginOptions, I as passkeyLoginVerify, J as getSecurityOverview, K as getSecurityLoginActivity, L as getSecuritySessions, M as revokeSecuritySession, N as revokeOtherSecuritySessions, O as getSsoDetails, P as generateSsoUrl, Q as ssoCallback, R as getRefreshToken, S as getAuthRefreshToken, T as getAccessToken, U as clearAccessToken, V as isAuthenticated, W as isAuthenticateApp, X as isAccessTokenExpired, Y as isExpiresAccessToken } from '../http-errors-hlKcIsXD.js';
2
- export { af as ActiveSession, az as EditorPreviewMockHandler, aA as EditorPreviewMockResult, ag as HttpClientConfig, ah as HttpErrorKind, aj as LoginHistoryRow, ak as LoginResponseData, al as MfaEnrollmentStatus, am as MfaMethod, an as MfaMethodOption, ao as MfaPortalScopeContext, ap as PaginationResponse, aq as SERVICE_UNAVAILABLE_MESSAGE, ar as SecurityOverview, _ as TwoFaVerificationRequest, at as classifyHttpError, au as getFieldErrors, av as getFormErrors, aw as getHttpErrorMessage, ax as initializeHttpClient, ay as isServiceUnavailableError, aB as setEditorPreviewMockHandler } from '../http-errors-hlKcIsXD.js';
3
- export { C as ChangePasswordPayload, F as ForgetPasswordPayload, L as LoginPayload, P as PreLoginPayload, a as ResetPasswordPayload, R as ResetPasswordVerifyTokenPayload, V as VerifyEmailPayload } from '../index-CCwMopD8.js';
1
+ import { p as preLogin, l as login, c as clientSession, h as handoff, a as logout, r as register, v as verifyEmail, b as registerExistingUser, f as forgetPassword, d as resetPassword, e as resetPasswordVerifyToken, g as verifyEmailResend, i as resendEmail, j as changePassword, m as me, k as profile, n as profileUpdate, o as verifyOtp, s as sendMfaOtp, q as pendingPasskeyOptions, t as pendingPasskeyVerify, u as getMfaStatus, w as setMfaPreferences, x as startPhoneVerify, y as confirmPhoneVerify, z as totpEnrollStart, A as totpEnrollVerify, B as totpDisable, C as phoneUnverify, D as backupCodesRegenerate, E as mfaOptOut, F as webauthnRegisterOptions, G as webauthnRegisterVerify, H as webauthnAuthOptions, I as webauthnAuthVerify, J as listWebauthnCredentials, K as deleteWebauthnCredential, L as passkeyLoginOptions, M as passkeyLoginVerify, N as getSecurityOverview, O as getSecurityLoginActivity, P as getSecuritySessions, Q as revokeSecuritySession, R as revokeOtherSecuritySessions, S as getLoginBootstrap, T as getSsoDetails, U as generateSsoUrl, V as ssoCallback, W as getRefreshToken, X as refreshSession, Y as getAuthRefreshToken, Z as getAccessToken, _ as clearAccessToken, $ as isAuthenticated, a0 as isAuthenticateApp, a1 as isAccessTokenExpired, a2 as isExpiresAccessToken, a3 as hasRefreshSession, a4 as hasValidAccessToken, a5 as SessionContractInput } from '../http-errors-B41BMjip.js';
2
+ export { as as ActiveSession, at as ApiErrorPayload, au as AuthErrorAction, av as AuthErrorCode, aw as AuthErrorCodeValue, ax as AuthFunnelState, ay as AuthInterceptorPolicyConfig, az as AuthPolicyRoutes, aA as AuthRouteAction, ba as EditorPreviewMockHandler, bb as EditorPreviewMockResult, aB as HttpClientConfig, aC as HttpErrorKind, bc as LoginBootstrapMfaPolicy, bd as LoginBootstrapPortal, be as LoginBootstrapResponse, bf as LoginBootstrapSsoProvider, aE as LoginHistoryRow, aF as LoginResponseData, aG as MfaBootRecoveryResult, aH as MfaEnrollmentStatus, aI as MfaMethod, aJ as MfaMethodOption, aK as MfaPortalScopeContext, aL as PaginationResponse, aM as SERVICE_UNAVAILABLE_MESSAGE, aN as SecurityOverview, aP as StoredAuthError, a7 as TwoFaVerificationRequest, aQ as UnauthorizedPageCopy, aR as WoodsportalRequestConfig, aS as classifyHttpError, aT as getFieldErrors, aU as getFormErrors, aV as getHttpErrorMessage, aW as getUnauthorizedPageCopy, aX as hasAuthenticatedAccess, aY as hasValidAccess, aZ as initializeHttpClient, a_ as isFullyAuthenticated, a$ as isMfaPendingSession, b0 as isOptionalAuthFailureUrl, b1 as isServiceUnavailableError, b2 as isSessionProbeUrl, b3 as parseApiErrorPayload, b4 as persistAuthError, b5 as recoverMfaGateOnBoot, b6 as resolveAuthErrorAction, b7 as resolveAuthRouteAction, bg as setEditorPreviewMockHandler, b8 as startVisibilityRefreshScheduler, b9 as stopVisibilityRefreshScheduler } from '../http-errors-B41BMjip.js';
3
+ export { C as ChangePasswordPayload, F as ForgetPasswordPayload, L as LoginPayload, P as PreLoginPayload, a as ResetPasswordPayload, R as ResetPasswordVerifyTokenPayload, V as VerifyEmailPayload } from '../index-Bh9eY8sA.js';
4
4
  import 'axios';
5
5
 
6
6
  declare const api: {
@@ -10,6 +10,7 @@ declare const api: {
10
10
  clientSession: typeof clientSession;
11
11
  handoff: typeof handoff;
12
12
  logout: typeof logout;
13
+ register: typeof register;
13
14
  verifyEmail: typeof verifyEmail;
14
15
  registerExistingUser: typeof registerExistingUser;
15
16
  forgetPassword: typeof forgetPassword;
@@ -33,6 +34,10 @@ declare const api: {
33
34
  totpEnrollStart: typeof totpEnrollStart;
34
35
  totpEnrollVerify: typeof totpEnrollVerify;
35
36
  totpDisable: typeof totpDisable;
37
+ phoneUnverify: typeof phoneUnverify;
38
+ backupCodesRegenerate: typeof backupCodesRegenerate;
39
+ optOut: typeof mfaOptOut;
40
+ mfaOptOut: typeof mfaOptOut;
36
41
  webauthnRegisterOptions: typeof webauthnRegisterOptions;
37
42
  webauthnRegisterVerify: typeof webauthnRegisterVerify;
38
43
  webauthnAuthOptions: typeof webauthnAuthOptions;
@@ -49,6 +54,7 @@ declare const api: {
49
54
  revokeSession: typeof revokeSecuritySession;
50
55
  revokeOtherSessions: typeof revokeOtherSecuritySessions;
51
56
  };
57
+ loginBootstrap: typeof getLoginBootstrap;
52
58
  sso: {
53
59
  getDetails: typeof getSsoDetails;
54
60
  generateUrl: typeof generateSsoUrl;
@@ -56,6 +62,7 @@ declare const api: {
56
62
  };
57
63
  session: {
58
64
  getRefreshToken: typeof getRefreshToken;
65
+ refreshSession: typeof refreshSession;
59
66
  refreshAccessToken: typeof getAuthRefreshToken;
60
67
  getAccessToken: typeof getAccessToken;
61
68
  clearAccessToken: typeof clearAccessToken;
@@ -64,8 +71,14 @@ declare const api: {
64
71
  isAccessTokenExpired: typeof isAccessTokenExpired;
65
72
  isExpiresAccessToken: typeof isExpiresAccessToken;
66
73
  isCookieExpired: (key: string) => boolean;
74
+ hasRefreshSession: typeof hasRefreshSession;
75
+ hasValidAccessToken: typeof hasValidAccessToken;
76
+ contract: () => SessionContractInput;
77
+ isFullyAuthenticated: () => boolean;
78
+ hasAuthenticatedAccess: () => boolean;
79
+ hasValidAccess: () => boolean;
67
80
  };
68
81
  };
69
82
  };
70
83
 
71
- export { api };
84
+ export { SessionContractInput, api };
@@ -1,7 +1,10 @@
1
- import { authApi } from '../chunk-GO35W5PN.js';
2
- export { SERVICE_UNAVAILABLE_MESSAGE, classifyHttpError, getFieldErrors, getFormErrors, getHttpErrorMessage, initializeHttpClient, isServiceUnavailableError, setEditorPreviewMockHandler } from '../chunk-FDZNMZS4.js';
3
- import '../chunk-YEUFUGGT.js';
4
- import '../chunk-QPSCMK4W.js';
1
+ import { authApi } from '../chunk-IUVL2E7K.js';
2
+ export { hasAuthenticatedAccess, hasValidAccess, isFullyAuthenticated, isMfaPendingSession, recoverMfaGateOnBoot, resolveAuthRouteAction } from '../chunk-IUVL2E7K.js';
3
+ export { isOptionalAuthFailureUrl, isSessionProbeUrl, persistAuthError, resolveAuthErrorAction } from '../chunk-MFIGS74G.js';
4
+ export { SERVICE_UNAVAILABLE_MESSAGE, classifyHttpError, getFieldErrors, getFormErrors, getHttpErrorMessage, initializeHttpClient, isServiceUnavailableError, setEditorPreviewMockHandler, startVisibilityRefreshScheduler, stopVisibilityRefreshScheduler } from '../chunk-LSRSCZBI.js';
5
+ import '../chunk-GLATNYVU.js';
6
+ import '../chunk-TVUBMDXX.js';
7
+ export { AuthErrorCode, getUnauthorizedPageCopy, parseApiErrorPayload } from '../chunk-COHBSTHF.js';
5
8
 
6
9
  // src/main/entries/auth.ts
7
10
  var api = {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/main/entries/auth.ts"],"names":[],"mappings":";;;;;;AAgCO,IAAM,GAAA,GAAM;AAAA,EACf,IAAA,EAAM;AACV","file":"auth.js","sourcesContent":["/**\n * Auth-only subpath export — login, MFA, security, SSO, token helpers.\n * Does not import CRM feature modules.\n */\nimport { authApi } from '../api/nested-auth-api'\n\nexport { initializeHttpClient, getFormErrors, getFieldErrors, setEditorPreviewMockHandler } from '../core/http/http-client'\nexport type { HttpClientConfig, EditorPreviewMockHandler, EditorPreviewMockResult } from '../core/http/http-client'\n\nexport { classifyHttpError, getHttpErrorMessage, isServiceUnavailableError, SERVICE_UNAVAILABLE_MESSAGE } from '../core/http/http-errors'\nexport type { HttpErrorKind } from '../core/http/http-errors'\n\nexport type {\n PreLoginPayload,\n LoginPayload,\n VerifyEmailPayload,\n ResetPasswordVerifyTokenPayload,\n ResetPasswordPayload,\n ForgetPasswordPayload,\n ChangePasswordPayload,\n MfaMethod,\n MfaMethodOption,\n MfaPortalScopeContext,\n LoginResponseData,\n TwoFaVerificationRequest,\n MfaEnrollmentStatus,\n SecurityOverview,\n LoginHistoryRow,\n ActiveSession,\n PaginationResponse\n} from '../core/types'\n\nexport const api = {\n auth: authApi\n}\n"]}
1
+ {"version":3,"sources":["../../src/main/entries/auth.ts"],"names":[],"mappings":";;;;;;;;;AAoEO,IAAM,GAAA,GAAM;AAAA,EACf,IAAA,EAAM;AACV","file":"auth.js","sourcesContent":["/**\n * Auth-only subpath export — login, MFA, security, SSO, token helpers.\n * Does not import CRM feature modules.\n */\nimport { authApi } from '../api/nested-auth-api'\n\nexport { initializeHttpClient, getFormErrors, getFieldErrors, setEditorPreviewMockHandler } from '../core/http/http-client'\nexport type { HttpClientConfig, EditorPreviewMockHandler, EditorPreviewMockResult } from '../core/http/http-client'\n\nexport { classifyHttpError, getHttpErrorMessage, isServiceUnavailableError, SERVICE_UNAVAILABLE_MESSAGE } from '../core/http/http-errors'\nexport type { HttpErrorKind } from '../core/http/http-errors'\n\nexport {\n AuthErrorCode,\n parseApiErrorPayload,\n getUnauthorizedPageCopy,\n resolveAuthErrorAction,\n isOptionalAuthFailureUrl,\n isSessionProbeUrl,\n persistAuthError,\n hasValidAccess,\n isFullyAuthenticated,\n isMfaPendingSession,\n hasAuthenticatedAccess,\n recoverMfaGateOnBoot,\n startVisibilityRefreshScheduler,\n stopVisibilityRefreshScheduler,\n resolveAuthRouteAction\n} from '../core/auth/index.js'\nexport type {\n ApiErrorPayload,\n StoredAuthError,\n AuthErrorCodeValue,\n UnauthorizedPageCopy,\n AuthErrorAction,\n AuthPolicyRoutes,\n AuthInterceptorPolicyConfig,\n WoodsportalRequestConfig,\n SessionContractInput,\n MfaBootRecoveryResult,\n AuthRouteAction,\n AuthFunnelState\n} from '../core/auth/index.js'\n\nexport type {\n PreLoginPayload,\n LoginPayload,\n VerifyEmailPayload,\n ResetPasswordVerifyTokenPayload,\n ResetPasswordPayload,\n ForgetPasswordPayload,\n ChangePasswordPayload,\n MfaMethod,\n MfaMethodOption,\n MfaPortalScopeContext,\n LoginBootstrapResponse,\n LoginBootstrapMfaPolicy,\n LoginBootstrapPortal,\n LoginBootstrapSsoProvider,\n LoginResponseData,\n TwoFaVerificationRequest,\n MfaEnrollmentStatus,\n SecurityOverview,\n LoginHistoryRow,\n ActiveSession,\n PaginationResponse\n} from '../core/types'\n\nexport const api = {\n auth: authApi\n}\n"]}
@@ -1,7 +1,7 @@
1
1
  import { T as TableUiState, a as TableState, U as UserState, N as NoteState, E as EmailState, S as SyncState } from '../use-sync-DpazhM4d.js';
2
- import { l as list, a as list$1, b as list$2, s as sideBarList, f as form, o as objectFormOptions, d as details, u as update, c as create, e as createExisting, r as removeExisting, g as list$3, h as create$1, i as update$1, j as list$4, k as create$2, m as update$2, n as list$5, p as details$1, q as download, t as addFolder, v as addFile, w as imageUpload, x as attachmentUpload, y as purge, z as purgeStatus } from '../cache-purge-G5WkHckd.js';
3
- export { G as CachePurgeDomain, B as CachePurgeListQuery, H as CachePurgeMode, A as CachePurgeRequest, C as CachePurgeTarget, D as CachePurgeView, E as CreateCachePurgeJobOptions, F as CrmCachePurgeOptions, P as PurgeResult } from '../cache-purge-G5WkHckd.js';
4
- import '../index-CCwMopD8.js';
2
+ import { l as list, a as list$1, b as list$2, s as sideBarList, f as form, o as objectFormOptions, d as details, u as update, c as create, e as createExisting, r as removeExisting, g as list$3, h as create$1, i as update$1, j as list$4, k as create$2, m as update$2, n as list$5, p as details$1, q as download, t as addFolder, v as addFile, w as imageUpload, x as attachmentUpload, y as purge, z as purgeStatus } from '../cache-purge-Ca4idzyy.js';
3
+ export { G as CachePurgeDomain, B as CachePurgeListQuery, H as CachePurgeMode, A as CachePurgeRequest, C as CachePurgeTarget, D as CachePurgeView, E as CreateCachePurgeJobOptions, F as CrmCachePurgeOptions, P as PurgeResult } from '../cache-purge-Ca4idzyy.js';
4
+ import '../index-Bh9eY8sA.js';
5
5
 
6
6
  declare const api: {
7
7
  crm: {
@@ -160,6 +160,7 @@ declare const store: {
160
160
  modifiedObjectsData(results: any): void;
161
161
  clearTablePrependData(): void;
162
162
  setTablePrependData(response: any, props?: any): Promise<void>;
163
+ updateTablePrependData(response: any, payload?: any): any;
163
164
  };
164
165
  };
165
166
  user: {
@@ -1,8 +1,8 @@
1
- import { crmApi } from '../chunk-D7XKR2O7.js';
2
- import { navigationApi, storage } from '../chunk-FDZNMZS4.js';
3
- import '../chunk-6KKVGCXG.js';
4
- import { actions8, syncStore, actions5, emailStore, actions4, noteStore, actions7, userStore, actions2, tableStore, tableUiActions, tableUiStore } from '../chunk-YEUFUGGT.js';
5
- import '../chunk-QPSCMK4W.js';
1
+ import { crmApi } from '../chunk-BWZAX23E.js';
2
+ import { navigationApi, storage } from '../chunk-LSRSCZBI.js';
3
+ import '../chunk-ND7HCTXC.js';
4
+ import { actions8, syncStore, actions5, emailStore, actions4, noteStore, actions7, userStore, actions2, tableStore, tableUiActions, tableUiStore } from '../chunk-GLATNYVU.js';
5
+ import '../chunk-TVUBMDXX.js';
6
6
 
7
7
  // src/main/entries/crm.ts
8
8
  var api = {