woodsportal-client-sdk 1.1.5-dev.0 → 2.0.705

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 (82) hide show
  1. package/CHANGELOG.md +128 -0
  2. package/README.md +199 -77
  3. package/dist/adapters/angular/index.d.ts +88 -5
  4. package/dist/adapters/angular/index.js +12 -7
  5. package/dist/adapters/angular/index.js.map +1 -1
  6. package/dist/adapters/native/index.d.ts +3 -0
  7. package/dist/adapters/native/index.js +11 -0
  8. package/dist/adapters/native/index.js.map +1 -0
  9. package/dist/adapters/react/index.d.ts +88 -5
  10. package/dist/adapters/react/index.js +9 -16
  11. package/dist/adapters/react/index.js.map +1 -1
  12. package/dist/adapters/vue/index.d.ts +88 -5
  13. package/dist/adapters/vue/index.js +12 -7
  14. package/dist/adapters/vue/index.js.map +1 -1
  15. package/dist/auth-error-codes-D7CXVBEN.js +3 -0
  16. package/dist/auth-error-codes-D7CXVBEN.js.map +1 -0
  17. package/dist/auth-interceptor-policy-K46P4VM4.js +6 -0
  18. package/dist/auth-interceptor-policy-K46P4VM4.js.map +1 -0
  19. package/dist/auth-utils-JGNW73IJ.js +7 -0
  20. package/dist/{auth-utils-A4WPJMPK.js.map → auth-utils-JGNW73IJ.js.map} +1 -1
  21. package/dist/chunk-2OLIVT2F.js +343 -0
  22. package/dist/chunk-2OLIVT2F.js.map +1 -0
  23. package/dist/chunk-32ERSTFY.js +354 -0
  24. package/dist/chunk-32ERSTFY.js.map +1 -0
  25. package/dist/{chunk-Y5MRAAGK.js → chunk-AYTO6ND7.js} +3 -3
  26. package/dist/chunk-AYTO6ND7.js.map +1 -0
  27. package/dist/chunk-BXHEEGBF.js +2747 -0
  28. package/dist/chunk-BXHEEGBF.js.map +1 -0
  29. package/dist/chunk-COHBSTHF.js +82 -0
  30. package/dist/chunk-COHBSTHF.js.map +1 -0
  31. package/dist/chunk-CUVU6DCT.js +3 -0
  32. package/dist/chunk-CUVU6DCT.js.map +1 -0
  33. package/dist/chunk-D5GHE2CO.js +172 -0
  34. package/dist/chunk-D5GHE2CO.js.map +1 -0
  35. package/dist/chunk-DB6W3CJT.js +73 -0
  36. package/dist/chunk-DB6W3CJT.js.map +1 -0
  37. package/dist/chunk-ITBMRGCP.js +16 -0
  38. package/dist/chunk-ITBMRGCP.js.map +1 -0
  39. package/dist/chunk-JRT5XSVY.js +161 -0
  40. package/dist/chunk-JRT5XSVY.js.map +1 -0
  41. package/dist/chunk-JSXP2F2H.js +1849 -0
  42. package/dist/chunk-JSXP2F2H.js.map +1 -0
  43. package/dist/chunk-KGNMN7B3.js +173 -0
  44. package/dist/chunk-KGNMN7B3.js.map +1 -0
  45. package/dist/chunk-MLBZ5FQA.js +1305 -0
  46. package/dist/chunk-MLBZ5FQA.js.map +1 -0
  47. package/dist/chunk-OH7VT6MX.js +22 -0
  48. package/dist/chunk-OH7VT6MX.js.map +1 -0
  49. package/dist/chunk-VDMDWMMX.js +519 -0
  50. package/dist/chunk-VDMDWMMX.js.map +1 -0
  51. package/dist/chunk-XDYXEYDM.js +1081 -0
  52. package/dist/chunk-XDYXEYDM.js.map +1 -0
  53. package/dist/crmCacheRefresh-B9sAQzI7.d.ts +292 -0
  54. package/dist/cross-tab-session-FCAQTXUB.js +11 -0
  55. package/dist/cross-tab-session-FCAQTXUB.js.map +1 -0
  56. package/dist/entries/auth.d.ts +96 -0
  57. package/dist/entries/auth.js +19 -0
  58. package/dist/entries/auth.js.map +1 -0
  59. package/dist/entries/crm.d.ts +239 -0
  60. package/dist/entries/crm.js +33 -0
  61. package/dist/entries/crm.js.map +1 -0
  62. package/dist/index-CWYPrDBp.d.ts +56 -0
  63. package/dist/index.d.ts +642 -394
  64. package/dist/index.js +96 -1698
  65. package/dist/index.js.map +1 -1
  66. package/dist/route-guard-contract-CSJMmfDA.d.ts +856 -0
  67. package/dist/storage-migration-CWOS6CNV.js +4 -0
  68. package/dist/storage-migration-CWOS6CNV.js.map +1 -0
  69. package/dist/use-file-BcO5l-Zf.d.ts +29 -0
  70. package/dist/use-sync-BQfzHacf.d.ts +66 -0
  71. package/package.json +155 -110
  72. package/dist/auth-utils-A4WPJMPK.js +0 -4
  73. package/dist/chunk-J7MDPY5P.js +0 -54
  74. package/dist/chunk-J7MDPY5P.js.map +0 -1
  75. package/dist/chunk-NB7AINV4.js +0 -35
  76. package/dist/chunk-NB7AINV4.js.map +0 -1
  77. package/dist/chunk-RDCT25UV.js +0 -1066
  78. package/dist/chunk-RDCT25UV.js.map +0 -1
  79. package/dist/chunk-Y5MRAAGK.js.map +0 -1
  80. package/dist/chunk-YLZA5S7A.js +0 -102
  81. package/dist/chunk-YLZA5S7A.js.map +0 -1
  82. package/dist/use-sync-LbURBOs_.d.ts +0 -29
@@ -0,0 +1,354 @@
1
+ import { WP_STORAGE_KEYS, CLIENT_COOKIE_MIGRATIONS, CLIENT_SESSION_STORAGE_MIGRATIONS, LEGACY_CLIENT_AUTH_COOKIES, LEGACY_CLIENT_SESSION_EXACT, wpClientIframeRefreshKey, wpClientIframeRefreshExpKey, WP_UI_THEME } from './chunk-KGNMN7B3.js';
2
+ import Cookies from 'js-cookie';
3
+
4
+ // src/main/core/http/client-type.ts
5
+ var clientType = "web";
6
+ function setClientType(type) {
7
+ clientType = type;
8
+ }
9
+ function getClientType() {
10
+ return clientType;
11
+ }
12
+
13
+ // src/main/core/utils/storage-keys.ts
14
+ var defaults = {
15
+ loginDetails: WP_STORAGE_KEYS.c.auth.login,
16
+ refreshToken: WP_STORAGE_KEYS.c.auth.refresh,
17
+ portal: WP_STORAGE_KEYS.c.auth.portal,
18
+ subscriptionType: WP_STORAGE_KEYS.c.auth.sub,
19
+ authUser: WP_STORAGE_KEYS.c.auth.login,
20
+ pagination: WP_STORAGE_KEYS.c.ui.pag,
21
+ routeMenu: WP_STORAGE_KEYS.c.ui.menu,
22
+ associationView: WP_STORAGE_KEYS.c.ui.assoc,
23
+ emailVerified: WP_STORAGE_KEYS.c.auth.emailOk
24
+ };
25
+ var runtimeKeys = { ...defaults };
26
+ function configureStorageKeys(overrides = {}) {
27
+ runtimeKeys = { ...defaults, ...runtimeKeys, ...overrides };
28
+ if (overrides.authUser === void 0) {
29
+ runtimeKeys.authUser = runtimeKeys.loginDetails;
30
+ }
31
+ }
32
+ function resetStorageKeysForTests() {
33
+ runtimeKeys = { ...defaults };
34
+ }
35
+ function getStorageKeys() {
36
+ return runtimeKeys;
37
+ }
38
+ function hasWindowLocation() {
39
+ if (typeof window === "undefined") {
40
+ return false;
41
+ }
42
+ try {
43
+ return window.location != null && typeof window.location.protocol === "string";
44
+ } catch {
45
+ return false;
46
+ }
47
+ }
48
+ function isBrowserCookieContextAvailable() {
49
+ if (getClientType() === "mobile") {
50
+ return false;
51
+ }
52
+ if (typeof document === "undefined") {
53
+ return false;
54
+ }
55
+ return hasWindowLocation();
56
+ }
57
+ function cookieSecureFlag() {
58
+ if (!hasWindowLocation()) {
59
+ return true;
60
+ }
61
+ return window.location.protocol === "https:";
62
+ }
63
+ function isCorruptCookieRawValue(raw) {
64
+ return raw == null || raw === "" || raw === "undefined" || raw === "null";
65
+ }
66
+ function stringifyCookieValue(value) {
67
+ if (value === void 0 || value === null) {
68
+ return null;
69
+ }
70
+ if (typeof value === "string") {
71
+ return isCorruptCookieRawValue(value) ? null : value;
72
+ }
73
+ const serialized = JSON.stringify(value);
74
+ if (serialized === void 0 || isCorruptCookieRawValue(serialized)) {
75
+ return null;
76
+ }
77
+ return serialized;
78
+ }
79
+ var setCookie = (key, value, expire) => {
80
+ if (!key || isCorruptCookieRawValue(value) || !isBrowserCookieContextAvailable()) {
81
+ return void 0;
82
+ }
83
+ return Cookies.set(key, value, {
84
+ expires: expire,
85
+ sameSite: cookieSecureFlag() ? "none" : "lax",
86
+ secure: cookieSecureFlag()
87
+ });
88
+ };
89
+ var getCookie = (key) => {
90
+ if (!isBrowserCookieContextAvailable()) {
91
+ return void 0;
92
+ }
93
+ return Cookies.get(key);
94
+ };
95
+ function parseCookieJson(key) {
96
+ if (key == null || key === "") {
97
+ return null;
98
+ }
99
+ const raw = getCookie(key);
100
+ if (isCorruptCookieRawValue(raw)) {
101
+ if (raw === "undefined" || raw === "null") {
102
+ Cookies.remove(key);
103
+ }
104
+ return null;
105
+ }
106
+ try {
107
+ return JSON.parse(raw);
108
+ } catch {
109
+ Cookies.remove(key);
110
+ return null;
111
+ }
112
+ }
113
+ var removeCookie = (key) => {
114
+ if (!isBrowserCookieContextAvailable()) {
115
+ return void 0;
116
+ }
117
+ return Cookies.remove(key);
118
+ };
119
+ var clearClientAuthCookies = () => {
120
+ if (!isBrowserCookieContextAvailable()) {
121
+ return;
122
+ }
123
+ getClientAuthCookieNamesToClear().forEach((name) => Cookies.remove(name));
124
+ for (const legacyAccess of ["woodsportal_access_token", "AUTH_CRED"]) {
125
+ Cookies.remove(legacyAccess);
126
+ }
127
+ };
128
+ var isCookieExpired = (key) => {
129
+ if (!isBrowserCookieContextAvailable()) {
130
+ return true;
131
+ }
132
+ const value = Cookies.get(key);
133
+ if (value === void 0) {
134
+ return true;
135
+ }
136
+ try {
137
+ const parsed = JSON.parse(value);
138
+ if (parsed && typeof parsed === "object" && "expiresAt" in parsed) {
139
+ const expiresAt = parsed.expiresAt;
140
+ return typeof expiresAt === "number" && Date.now() > expiresAt;
141
+ }
142
+ return false;
143
+ } catch {
144
+ return false;
145
+ }
146
+ };
147
+
148
+ // src/main/core/utils/storage-migration.ts
149
+ function migrateCookiePair(legacy, canonical) {
150
+ const value = Cookies.get(legacy);
151
+ if (value === void 0) {
152
+ return;
153
+ }
154
+ if (isCorruptCookieRawValue(value)) {
155
+ Cookies.remove(legacy);
156
+ return;
157
+ }
158
+ if (!Cookies.get(canonical)) {
159
+ Cookies.set(canonical, value);
160
+ }
161
+ Cookies.remove(legacy);
162
+ }
163
+ function migrateLocalStoragePair(legacy, canonical) {
164
+ if (typeof window === "undefined" || !window.localStorage) {
165
+ return;
166
+ }
167
+ try {
168
+ const value = window.localStorage.getItem(legacy);
169
+ if (value == null) {
170
+ return;
171
+ }
172
+ if (!window.localStorage.getItem(canonical)) {
173
+ window.localStorage.setItem(canonical, value);
174
+ }
175
+ window.localStorage.removeItem(legacy);
176
+ } catch {
177
+ }
178
+ }
179
+ function migrateSessionStoragePair(legacy, canonical) {
180
+ if (typeof window === "undefined" || !window.sessionStorage) {
181
+ return;
182
+ }
183
+ try {
184
+ const value = window.sessionStorage.getItem(legacy);
185
+ if (value == null) {
186
+ return;
187
+ }
188
+ if (!window.sessionStorage.getItem(canonical)) {
189
+ window.sessionStorage.setItem(canonical, value);
190
+ }
191
+ window.sessionStorage.removeItem(legacy);
192
+ } catch {
193
+ }
194
+ }
195
+ function migrateIframeRefreshKeys() {
196
+ if (typeof window === "undefined" || !window.localStorage) {
197
+ return;
198
+ }
199
+ try {
200
+ const keys = Object.keys(window.localStorage).filter((k) => k.startsWith("wp_iframe_rt_"));
201
+ for (const legacyKey of keys) {
202
+ const suffix = legacyKey.slice("wp_iframe_rt_".length);
203
+ if (suffix.endsWith("_exp")) {
204
+ continue;
205
+ }
206
+ const hubId = suffix;
207
+ const token = window.localStorage.getItem(legacyKey);
208
+ const exp = window.localStorage.getItem(`${legacyKey}_exp`);
209
+ const newKey = wpClientIframeRefreshKey(hubId);
210
+ const newExpKey = wpClientIframeRefreshExpKey(hubId);
211
+ if (token != null && !window.localStorage.getItem(newKey)) {
212
+ window.localStorage.setItem(newKey, token);
213
+ }
214
+ if (exp != null && !window.localStorage.getItem(newExpKey)) {
215
+ window.localStorage.setItem(newExpKey, exp);
216
+ }
217
+ window.localStorage.removeItem(legacyKey);
218
+ window.localStorage.removeItem(`${legacyKey}_exp`);
219
+ }
220
+ } catch {
221
+ }
222
+ }
223
+ function removeLegacyAccessTokenCookies() {
224
+ const keys = getStorageKeys();
225
+ const legacyAccess = ["woodsportal_access_token", "AUTH_CRED"];
226
+ for (const name of legacyAccess) {
227
+ Cookies.remove(name);
228
+ }
229
+ if (keys.authUser && keys.authUser !== keys.loginDetails) {
230
+ Cookies.remove(keys.authUser);
231
+ }
232
+ }
233
+ function migrateLegacyStorageKeys() {
234
+ if (getClientType() === "mobile") {
235
+ return;
236
+ }
237
+ if (typeof window === "undefined") {
238
+ return;
239
+ }
240
+ for (const [legacy, canonical] of CLIENT_COOKIE_MIGRATIONS) {
241
+ migrateCookiePair(legacy, canonical);
242
+ }
243
+ migrateLocalStoragePair("hubSpotData", WP_STORAGE_KEYS.c.hub);
244
+ migrateLocalStoragePair("theme", WP_UI_THEME);
245
+ for (const [legacy, canonical] of CLIENT_SESSION_STORAGE_MIGRATIONS) {
246
+ migrateSessionStoragePair(legacy, canonical);
247
+ }
248
+ migrateIframeRefreshKeys();
249
+ removeLegacyAccessTokenCookies();
250
+ try {
251
+ window.sessionStorage?.removeItem("entredEmail");
252
+ } catch {
253
+ }
254
+ }
255
+ function getClientAuthCookieNamesToClear() {
256
+ const keys = getStorageKeys();
257
+ const configured = [
258
+ keys.loginDetails,
259
+ keys.refreshToken,
260
+ keys.portal,
261
+ keys.subscriptionType,
262
+ keys.authUser,
263
+ keys.pagination,
264
+ keys.routeMenu,
265
+ keys.associationView,
266
+ keys.emailVerified
267
+ ].filter((name) => Boolean(name));
268
+ const canonical = [
269
+ WP_STORAGE_KEYS.c.auth.login,
270
+ WP_STORAGE_KEYS.c.auth.refresh,
271
+ WP_STORAGE_KEYS.c.auth.portal,
272
+ WP_STORAGE_KEYS.c.auth.sub,
273
+ WP_STORAGE_KEYS.c.auth.emailOk,
274
+ WP_STORAGE_KEYS.c.ui.pag,
275
+ WP_STORAGE_KEYS.c.ui.menu,
276
+ WP_STORAGE_KEYS.c.ui.assoc
277
+ ];
278
+ return [.../* @__PURE__ */ new Set([...configured, ...canonical, ...LEGACY_CLIENT_AUTH_COOKIES])];
279
+ }
280
+ function clearClientSessionStorageKeys() {
281
+ if (typeof window === "undefined" || !window.sessionStorage) {
282
+ return;
283
+ }
284
+ try {
285
+ for (const [legacy, canonical] of CLIENT_SESSION_STORAGE_MIGRATIONS) {
286
+ if (canonical === WP_STORAGE_KEYS.c.login.email || canonical === WP_STORAGE_KEYS.c.login.force || canonical === WP_STORAGE_KEYS.c.login.passkey || canonical === WP_STORAGE_KEYS.c.login.done) {
287
+ continue;
288
+ }
289
+ window.sessionStorage.removeItem(legacy);
290
+ window.sessionStorage.removeItem(canonical);
291
+ }
292
+ for (const key of LEGACY_CLIENT_SESSION_EXACT) {
293
+ if (key === "entredEmail") {
294
+ window.sessionStorage.removeItem(key);
295
+ }
296
+ }
297
+ const preservedLoginKeys = /* @__PURE__ */ new Set([
298
+ WP_STORAGE_KEYS.c.login.email,
299
+ WP_STORAGE_KEYS.c.login.force,
300
+ WP_STORAGE_KEYS.c.login.passkey,
301
+ WP_STORAGE_KEYS.c.login.done,
302
+ "woodsportal.login.email",
303
+ "woodsportal.login.forcePreLogin",
304
+ "woodsportal.login.passkeyPrimaryEnrolled",
305
+ "woodsportal.login.preLoginCompletedKey"
306
+ ]);
307
+ const keysToRemove = [];
308
+ for (let i = 0; i < window.sessionStorage.length; i++) {
309
+ const key = window.sessionStorage.key(i);
310
+ if (!key || preservedLoginKeys.has(key)) continue;
311
+ if (key.startsWith("woodsportal.mfa.") || key.startsWith("wp.c.mfa.")) {
312
+ keysToRemove.push(key);
313
+ }
314
+ if (key === WP_STORAGE_KEYS.c.auth.err || key === WP_STORAGE_KEYS.c.auth.refreshExhausted || key === "authError") {
315
+ keysToRemove.push(key);
316
+ }
317
+ if (key === WP_STORAGE_KEYS.c.sso.cb || key === "sso_callback_processed") {
318
+ keysToRemove.push(key);
319
+ }
320
+ }
321
+ keysToRemove.forEach((k) => window.sessionStorage.removeItem(k));
322
+ } catch {
323
+ }
324
+ }
325
+ function clearClientIframeRefreshLocalKeys() {
326
+ if (typeof window === "undefined" || !window.localStorage) {
327
+ return;
328
+ }
329
+ try {
330
+ const keys = Object.keys(window.localStorage).filter(
331
+ (k) => k.startsWith("wp_iframe_rt_") || k.startsWith(WP_STORAGE_KEYS.c.auth.iframeRtPrefix)
332
+ );
333
+ keys.forEach((k) => window.localStorage.removeItem(k));
334
+ } catch {
335
+ }
336
+ }
337
+ function clearStaleIframeRefreshForOtherHubs(activeHubId) {
338
+ if (activeHubId == null || typeof window === "undefined" || !window.localStorage) {
339
+ return;
340
+ }
341
+ const activePrefix = WP_STORAGE_KEYS.c.auth.iframeRtPrefix;
342
+ const activeKey = wpClientIframeRefreshKey(activeHubId);
343
+ try {
344
+ const keys = Object.keys(window.localStorage).filter(
345
+ (k) => (k.startsWith("wp_iframe_rt_") || k.startsWith(activePrefix)) && k !== activeKey && k !== wpClientIframeRefreshExpKey(activeHubId)
346
+ );
347
+ keys.forEach((k) => window.localStorage.removeItem(k));
348
+ } catch {
349
+ }
350
+ }
351
+
352
+ export { clearClientAuthCookies, clearClientIframeRefreshLocalKeys, clearClientSessionStorageKeys, clearStaleIframeRefreshForOtherHubs, configureStorageKeys, getClientAuthCookieNamesToClear, getClientType, getCookie, getStorageKeys, isBrowserCookieContextAvailable, isCookieExpired, isCorruptCookieRawValue, migrateLegacyStorageKeys, parseCookieJson, removeCookie, resetStorageKeysForTests, setClientType, setCookie, stringifyCookieValue };
353
+ //# sourceMappingURL=chunk-32ERSTFY.js.map
354
+ //# sourceMappingURL=chunk-32ERSTFY.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/main/core/http/client-type.ts","../src/main/core/utils/storage-keys.ts","../src/main/core/utils/cookie.ts","../src/main/core/utils/storage-migration.ts"],"names":["Cookies"],"mappings":"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","file":"chunk-32ERSTFY.js","sourcesContent":["export type SdkClientType = 'web' | 'mobile'\n\nlet clientType: SdkClientType = 'web'\n\nexport function setClientType(type: SdkClientType): void {\n clientType = type\n}\n\nexport function getClientType(): SdkClientType {\n return clientType\n}\n\n/** Test helper — restore default web client type. */\nexport function resetClientTypeForTests(): void {\n clientType = 'web'\n}\n","import { WP_STORAGE_KEYS } from './wp-storage-keys'\n\nexport interface StorageKeyConfig {\n loginDetails?: string\n refreshToken?: string\n portal?: string\n subscriptionType?: string\n authUser?: string\n pagination?: string\n routeMenu?: string\n associationView?: string\n emailVerified?: string\n}\n\nconst defaults: Required<StorageKeyConfig> = {\n loginDetails: WP_STORAGE_KEYS.c.auth.login,\n refreshToken: WP_STORAGE_KEYS.c.auth.refresh,\n portal: WP_STORAGE_KEYS.c.auth.portal,\n subscriptionType: WP_STORAGE_KEYS.c.auth.sub,\n authUser: WP_STORAGE_KEYS.c.auth.login,\n pagination: WP_STORAGE_KEYS.c.ui.pag,\n routeMenu: WP_STORAGE_KEYS.c.ui.menu,\n associationView: WP_STORAGE_KEYS.c.ui.assoc,\n emailVerified: WP_STORAGE_KEYS.c.auth.emailOk\n}\n\nlet runtimeKeys: Required<StorageKeyConfig> = { ...defaults }\n\nexport function configureStorageKeys(overrides: StorageKeyConfig = {}): void {\n runtimeKeys = { ...defaults, ...runtimeKeys, ...overrides }\n if (overrides.authUser === undefined) {\n runtimeKeys.authUser = runtimeKeys.loginDetails\n }\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\nexport { WP_STORAGE_KEYS } from './wp-storage-keys'\n","import Cookies from 'js-cookie'\nimport { getClientType } from '../http/client-type'\nimport { getClientAuthCookieNamesToClear } from './storage-migration'\n\nfunction hasWindowLocation(): boolean {\n if (typeof window === 'undefined') {\n return false\n }\n try {\n return window.location != null && typeof window.location.protocol === 'string'\n } catch {\n return false\n }\n}\n\n/** True when js-cookie can read/write `document.cookie` (browser hosts only). */\nexport function isBrowserCookieContextAvailable(): boolean {\n if (getClientType() === 'mobile') {\n return false\n }\n if (typeof document === 'undefined') {\n return false\n }\n return hasWindowLocation()\n}\n\nfunction cookieSecureFlag(): boolean {\n if (!hasWindowLocation()) {\n return true\n }\n return window.location!.protocol === 'https:'\n}\n\n/** Values that must never be persisted in readable cookies. */\nexport function isCorruptCookieRawValue(raw: string | null | undefined): boolean {\n return raw == null || raw === '' || raw === 'undefined' || raw === 'null'\n}\n\n/** Serialize a value for cookie storage; returns null when write should be skipped. */\nexport function stringifyCookieValue(value: unknown): string | null {\n if (value === undefined || value === null) {\n return null\n }\n if (typeof value === 'string') {\n return isCorruptCookieRawValue(value) ? null : value\n }\n const serialized = JSON.stringify(value)\n if (serialized === undefined || isCorruptCookieRawValue(serialized)) {\n return null\n }\n return serialized\n}\n\nexport const setCookie = (key: string, value: string, expire?: number | Date) => {\n if (!key || isCorruptCookieRawValue(value) || !isBrowserCookieContextAvailable()) {\n return undefined\n }\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 if (!isBrowserCookieContextAvailable()) {\n return undefined\n }\n return Cookies.get(key)\n}\n\n/** Parse JSON stored in a cookie; removes corrupt values on read (self-heal). */\nexport function parseCookieJson<T = unknown>(key: string | null | undefined): T | null {\n if (key == null || key === '') {\n return null\n }\n const raw = getCookie(key)\n if (isCorruptCookieRawValue(raw)) {\n if (raw === 'undefined' || raw === 'null') {\n Cookies.remove(key)\n }\n return null\n }\n try {\n return JSON.parse(raw) as T\n } catch {\n Cookies.remove(key)\n return null\n }\n}\n\nexport const removeCookie = (key: any) => {\n if (!isBrowserCookieContextAvailable()) {\n return undefined\n }\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 if (!isBrowserCookieContextAvailable()) {\n return\n }\n getClientAuthCookieNamesToClear().forEach((name) => Cookies.remove(name))\n for (const legacyAccess of ['woodsportal_access_token', 'AUTH_CRED']) {\n Cookies.remove(legacyAccess)\n }\n}\n\n/** @deprecated Prefer {@link clearClientAuthCookies} */\nexport const removeAllCookie = clearClientAuthCookies\n\nexport const isCookieExpired = (key: string): boolean => {\n if (!isBrowserCookieContextAvailable()) {\n return true\n }\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 return false\n } catch {\n // Plain string values (e.g. refresh token) rely on browser cookie expiry.\n return false\n }\n}\n","import Cookies from 'js-cookie'\nimport { getClientType } from '../http/client-type'\nimport {\n CLIENT_COOKIE_MIGRATIONS,\n CLIENT_SESSION_STORAGE_MIGRATIONS,\n LEGACY_CLIENT_AUTH_COOKIES,\n LEGACY_CLIENT_SESSION_EXACT,\n WP_STORAGE_KEYS,\n WP_UI_THEME,\n wpClientIframeRefreshKey,\n wpClientIframeRefreshExpKey\n} from './wp-storage-keys'\nimport { getStorageKeys } from './storage-keys'\nimport { isCorruptCookieRawValue } from './cookie'\n\nfunction migrateCookiePair(legacy: string, canonical: string): void {\n const value = Cookies.get(legacy)\n if (value === undefined) {\n return\n }\n if (isCorruptCookieRawValue(value)) {\n Cookies.remove(legacy)\n return\n }\n if (!Cookies.get(canonical)) {\n Cookies.set(canonical, value)\n }\n Cookies.remove(legacy)\n}\n\nfunction migrateLocalStoragePair(legacy: string, canonical: string): void {\n if (typeof window === 'undefined' || !window.localStorage) {\n return\n }\n try {\n const value = window.localStorage.getItem(legacy)\n if (value == null) {\n return\n }\n if (!window.localStorage.getItem(canonical)) {\n window.localStorage.setItem(canonical, value)\n }\n window.localStorage.removeItem(legacy)\n } catch {\n // private mode\n }\n}\n\nfunction migrateSessionStoragePair(legacy: string, canonical: string): void {\n if (typeof window === 'undefined' || !window.sessionStorage) {\n return\n }\n try {\n const value = window.sessionStorage.getItem(legacy)\n if (value == null) {\n return\n }\n if (!window.sessionStorage.getItem(canonical)) {\n window.sessionStorage.setItem(canonical, value)\n }\n window.sessionStorage.removeItem(legacy)\n } catch {\n // ignore\n }\n}\n\nfunction migrateIframeRefreshKeys(): void {\n if (typeof window === 'undefined' || !window.localStorage) {\n return\n }\n try {\n const keys = Object.keys(window.localStorage).filter((k) => k.startsWith('wp_iframe_rt_'))\n for (const legacyKey of keys) {\n const suffix = legacyKey.slice('wp_iframe_rt_'.length)\n if (suffix.endsWith('_exp')) {\n continue\n }\n const hubId = suffix\n const token = window.localStorage.getItem(legacyKey)\n const exp = window.localStorage.getItem(`${legacyKey}_exp`)\n const newKey = wpClientIframeRefreshKey(hubId)\n const newExpKey = wpClientIframeRefreshExpKey(hubId)\n if (token != null && !window.localStorage.getItem(newKey)) {\n window.localStorage.setItem(newKey, token)\n }\n if (exp != null && !window.localStorage.getItem(newExpKey)) {\n window.localStorage.setItem(newExpKey, exp)\n }\n window.localStorage.removeItem(legacyKey)\n window.localStorage.removeItem(`${legacyKey}_exp`)\n }\n } catch {\n // ignore\n }\n}\n\nfunction removeLegacyAccessTokenCookies(): void {\n const keys = getStorageKeys()\n const legacyAccess = ['woodsportal_access_token', 'AUTH_CRED']\n for (const name of legacyAccess) {\n Cookies.remove(name)\n }\n if (keys.authUser && keys.authUser !== keys.loginDetails) {\n // legacy duplicate profile mirror — uplift handled by migration; drop separate user cookie\n Cookies.remove(keys.authUser)\n }\n}\n\n/**\n * One-time uplift: read legacy browser keys, write canonical `wp.*` keys, delete legacy.\n * Safe to call on every boot (idempotent).\n */\nexport function migrateLegacyStorageKeys(): void {\n if (getClientType() === 'mobile') {\n return\n }\n\n if (typeof window === 'undefined') {\n return\n }\n\n for (const [legacy, canonical] of CLIENT_COOKIE_MIGRATIONS) {\n migrateCookiePair(legacy, canonical)\n }\n\n migrateLocalStoragePair('hubSpotData', WP_STORAGE_KEYS.c.hub)\n migrateLocalStoragePair('theme', WP_UI_THEME)\n\n for (const [legacy, canonical] of CLIENT_SESSION_STORAGE_MIGRATIONS) {\n migrateSessionStoragePair(legacy, canonical)\n }\n\n migrateIframeRefreshKeys()\n removeLegacyAccessTokenCookies()\n\n // Drop dead forget-password key\n try {\n window.sessionStorage?.removeItem('entredEmail')\n } catch {\n // ignore\n }\n}\n\n/** All client auth cookie names to remove on logout (canonical + legacy + configured). */\nexport function getClientAuthCookieNamesToClear(): string[] {\n const keys = getStorageKeys()\n const configured = [\n keys.loginDetails,\n keys.refreshToken,\n keys.portal,\n keys.subscriptionType,\n keys.authUser,\n keys.pagination,\n keys.routeMenu,\n keys.associationView,\n keys.emailVerified\n ].filter((name): name is string => Boolean(name))\n\n const canonical = [\n WP_STORAGE_KEYS.c.auth.login,\n WP_STORAGE_KEYS.c.auth.refresh,\n WP_STORAGE_KEYS.c.auth.portal,\n WP_STORAGE_KEYS.c.auth.sub,\n WP_STORAGE_KEYS.c.auth.emailOk,\n WP_STORAGE_KEYS.c.ui.pag,\n WP_STORAGE_KEYS.c.ui.menu,\n WP_STORAGE_KEYS.c.ui.assoc\n ]\n\n return [...new Set([...configured, ...canonical, ...LEGACY_CLIENT_AUTH_COOKIES])]\n}\n\nexport function clearClientSessionStorageKeys(): void {\n if (typeof window === 'undefined' || !window.sessionStorage) {\n return\n }\n try {\n for (const [legacy, canonical] of CLIENT_SESSION_STORAGE_MIGRATIONS) {\n if (\n canonical === WP_STORAGE_KEYS.c.login.email ||\n canonical === WP_STORAGE_KEYS.c.login.force ||\n canonical === WP_STORAGE_KEYS.c.login.passkey ||\n canonical === WP_STORAGE_KEYS.c.login.done\n ) {\n continue\n }\n window.sessionStorage.removeItem(legacy)\n window.sessionStorage.removeItem(canonical)\n }\n for (const key of LEGACY_CLIENT_SESSION_EXACT) {\n if (key === 'entredEmail') {\n window.sessionStorage.removeItem(key)\n }\n }\n const preservedLoginKeys = new Set([\n WP_STORAGE_KEYS.c.login.email,\n WP_STORAGE_KEYS.c.login.force,\n WP_STORAGE_KEYS.c.login.passkey,\n WP_STORAGE_KEYS.c.login.done,\n 'woodsportal.login.email',\n 'woodsportal.login.forcePreLogin',\n 'woodsportal.login.passkeyPrimaryEnrolled',\n 'woodsportal.login.preLoginCompletedKey'\n ])\n const keysToRemove: string[] = []\n for (let i = 0; i < window.sessionStorage.length; i++) {\n const key = window.sessionStorage.key(i)\n if (!key || preservedLoginKeys.has(key)) continue\n if (key.startsWith('woodsportal.mfa.') || key.startsWith('wp.c.mfa.')) {\n keysToRemove.push(key)\n }\n if (key === WP_STORAGE_KEYS.c.auth.err || key === WP_STORAGE_KEYS.c.auth.refreshExhausted || key === 'authError') {\n keysToRemove.push(key)\n }\n if (key === WP_STORAGE_KEYS.c.sso.cb || key === 'sso_callback_processed') {\n keysToRemove.push(key)\n }\n }\n keysToRemove.forEach((k) => window.sessionStorage.removeItem(k))\n } catch {\n // ignore\n }\n}\n\nexport function clearClientIframeRefreshLocalKeys(): void {\n if (typeof window === 'undefined' || !window.localStorage) {\n return\n }\n try {\n const keys = Object.keys(window.localStorage).filter(\n (k) => k.startsWith('wp_iframe_rt_') || k.startsWith(WP_STORAGE_KEYS.c.auth.iframeRtPrefix)\n )\n keys.forEach((k) => window.localStorage.removeItem(k))\n } catch {\n // ignore\n }\n}\n\nexport function clearStaleIframeRefreshForOtherHubs(activeHubId: string | number | undefined): void {\n if (activeHubId == null || typeof window === 'undefined' || !window.localStorage) {\n return\n }\n const activePrefix = WP_STORAGE_KEYS.c.auth.iframeRtPrefix\n const activeKey = wpClientIframeRefreshKey(activeHubId)\n try {\n const keys = Object.keys(window.localStorage).filter(\n (k) => (k.startsWith('wp_iframe_rt_') || k.startsWith(activePrefix)) && k !== activeKey && k !== wpClientIframeRefreshExpKey(activeHubId)\n )\n keys.forEach((k) => window.localStorage.removeItem(k))\n } catch {\n // ignore\n }\n}\n"]}
@@ -1,4 +1,4 @@
1
- // src/adapters/shared/bindStoreWithActions.ts
1
+ // src/main/adapters/shared/bindStoreWithActions.ts
2
2
  function bindStoreWithActions(store, actions) {
3
3
  const getSnapshot = () => ({ ...store.getState(), ...actions });
4
4
  const subscribe = (onStoreChange) => store.subscribe(() => onStoreChange());
@@ -6,5 +6,5 @@ function bindStoreWithActions(store, actions) {
6
6
  }
7
7
 
8
8
  export { bindStoreWithActions };
9
- //# sourceMappingURL=chunk-Y5MRAAGK.js.map
10
- //# sourceMappingURL=chunk-Y5MRAAGK.js.map
9
+ //# sourceMappingURL=chunk-AYTO6ND7.js.map
10
+ //# sourceMappingURL=chunk-AYTO6ND7.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/main/adapters/shared/bindStoreWithActions.ts"],"names":[],"mappings":";AAKO,SAAS,oBAAA,CAAqE,OAAkC,OAAA,EAAmB;AACtI,EAAA,MAAM,WAAA,GAAc,OAAO,EAAE,GAAG,MAAM,QAAA,EAAS,EAAG,GAAG,OAAA,EAAQ,CAAA;AAE7D,EAAA,MAAM,YAAY,CAAC,aAAA,KAA8B,MAAM,SAAA,CAAU,MAAM,eAAe,CAAA;AAEtF,EAAA,OAAO,EAAE,aAAa,SAAA,EAAU;AACpC","file":"chunk-AYTO6ND7.js","sourcesContent":["export interface SubscribableStore<TState> {\n getState(): TState\n subscribe(listener: (state: TState) => void): () => void\n}\n\nexport function bindStoreWithActions<TState extends object, TActions extends object>(store: SubscribableStore<TState>, actions: TActions) {\n const getSnapshot = () => ({ ...store.getState(), ...actions }) as TState & TActions\n\n const subscribe = (onStoreChange: () => void) => store.subscribe(() => onStoreChange())\n\n return { getSnapshot, subscribe }\n}\n"]}