woodsportal-client-sdk 4.0.7 → 4.0.8-dev.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (72) hide show
  1. package/README.md +26 -0
  2. package/dist/adapters/angular/index.js +8 -6
  3. package/dist/adapters/angular/index.js.map +1 -1
  4. package/dist/adapters/native/index.d.ts +3 -0
  5. package/dist/adapters/native/index.js +11 -0
  6. package/dist/adapters/native/index.js.map +1 -0
  7. package/dist/adapters/react/index.d.ts +1 -1
  8. package/dist/adapters/react/index.js +9 -19
  9. package/dist/adapters/react/index.js.map +1 -1
  10. package/dist/adapters/vue/index.js +8 -6
  11. package/dist/adapters/vue/index.js.map +1 -1
  12. package/dist/auth-interceptor-policy-RGQ26NWR.js +6 -0
  13. package/dist/{auth-interceptor-policy-ACKZEQ6J.js.map → auth-interceptor-policy-RGQ26NWR.js.map} +1 -1
  14. package/dist/auth-utils-T4FIBK3O.js +7 -0
  15. package/dist/{auth-utils-CPO4LG4K.js.map → auth-utils-T4FIBK3O.js.map} +1 -1
  16. package/dist/{http-errors-CCCQECil.d.ts → build-error-description-XKI8vhGv.d.ts} +57 -6
  17. package/dist/{chunk-YZPW5F6U.js → chunk-5LISZE2R.js} +11 -7
  18. package/dist/chunk-5LISZE2R.js.map +1 -0
  19. package/dist/{chunk-BGUHACLT.js → chunk-AVMMEQLO.js} +3 -3
  20. package/dist/{chunk-BGUHACLT.js.map → chunk-AVMMEQLO.js.map} +1 -1
  21. package/dist/chunk-BXKFJ5NQ.js +1272 -0
  22. package/dist/chunk-BXKFJ5NQ.js.map +1 -0
  23. package/dist/chunk-DB6W3CJT.js +73 -0
  24. package/dist/chunk-DB6W3CJT.js.map +1 -0
  25. package/dist/{chunk-BKDJOWLW.js → chunk-ETYE73AH.js} +35 -8
  26. package/dist/chunk-ETYE73AH.js.map +1 -0
  27. package/dist/{chunk-ZQTCAG6K.js → chunk-JG3TEXWP.js} +7 -11
  28. package/dist/chunk-JG3TEXWP.js.map +1 -0
  29. package/dist/{chunk-WSUXZOHL.js → chunk-KPHAQNS2.js} +51 -6
  30. package/dist/chunk-KPHAQNS2.js.map +1 -0
  31. package/dist/{chunk-7J265W43.js → chunk-NDDE6ZZ3.js} +273 -87
  32. package/dist/chunk-NDDE6ZZ3.js.map +1 -0
  33. package/dist/{chunk-OAFDB4TJ.js → chunk-PVX6FWCW.js} +184 -104
  34. package/dist/chunk-PVX6FWCW.js.map +1 -0
  35. package/dist/{chunk-MO22VWRI.js → chunk-S3CVZTU4.js} +15 -9
  36. package/dist/chunk-S3CVZTU4.js.map +1 -0
  37. package/dist/{chunk-EFEBZBMU.js → chunk-UDAPRD7Z.js} +3 -2
  38. package/dist/chunk-UDAPRD7Z.js.map +1 -0
  39. package/dist/{chunk-TYJO2PSR.js → chunk-VN6VPM5C.js} +4 -4
  40. package/dist/{chunk-TYJO2PSR.js.map → chunk-VN6VPM5C.js.map} +1 -1
  41. package/dist/chunk-ZEGKRQA4.js +16 -0
  42. package/dist/chunk-ZEGKRQA4.js.map +1 -0
  43. package/dist/cross-tab-session-B34BLQU4.js +11 -0
  44. package/dist/{cross-tab-session-AGJVA2UZ.js.map → cross-tab-session-B34BLQU4.js.map} +1 -1
  45. package/dist/entries/auth.d.ts +4 -3
  46. package/dist/entries/auth.js +9 -8
  47. package/dist/entries/auth.js.map +1 -1
  48. package/dist/entries/crm.d.ts +3 -3
  49. package/dist/entries/crm.js +10 -9
  50. package/dist/entries/crm.js.map +1 -1
  51. package/dist/{index-Bh9eY8sA.d.ts → index-B-IGDI9L.d.ts} +11 -2
  52. package/dist/index.d.ts +45 -7
  53. package/dist/index.js +70 -17
  54. package/dist/index.js.map +1 -1
  55. package/dist/{pipeline-ui-DbEzI_v1.d.ts → pipeline-ui-COO9b3x2.d.ts} +2 -2
  56. package/dist/storage-migration-2PF52ZSB.js +4 -0
  57. package/dist/{storage-migration-CZTBKXQV.js.map → storage-migration-2PF52ZSB.js.map} +1 -1
  58. package/package.json +6 -1
  59. package/dist/auth-interceptor-policy-ACKZEQ6J.js +0 -5
  60. package/dist/auth-utils-CPO4LG4K.js +0 -5
  61. package/dist/chunk-7J265W43.js.map +0 -1
  62. package/dist/chunk-BKDJOWLW.js.map +0 -1
  63. package/dist/chunk-EFEBZBMU.js.map +0 -1
  64. package/dist/chunk-MO22VWRI.js.map +0 -1
  65. package/dist/chunk-OAFDB4TJ.js.map +0 -1
  66. package/dist/chunk-PK7GZY5P.js +0 -737
  67. package/dist/chunk-PK7GZY5P.js.map +0 -1
  68. package/dist/chunk-WSUXZOHL.js.map +0 -1
  69. package/dist/chunk-YZPW5F6U.js.map +0 -1
  70. package/dist/chunk-ZQTCAG6K.js.map +0 -1
  71. package/dist/cross-tab-session-AGJVA2UZ.js +0 -9
  72. package/dist/storage-migration-CZTBKXQV.js +0 -4
package/README.md CHANGED
@@ -94,6 +94,7 @@ Hub and dev-portal identifiers are **also** read from browser storage in `core/u
94
94
  | **`hubContext`** | Hub / portal identifiers from browser storage. |
95
95
  | **`initializeHttpClient`** | Axios base URL, timeouts, hub headers, auth callbacks. |
96
96
  | **`getFormErrors`**, **`getFieldErrors`** | Map Axios errors to form-level / field-level messages. |
97
+ | **`resolveApiErrorDisplay`** | Map API / transport errors to user-facing title, description, variant, retry/support (see below). |
97
98
 
98
99
  **4.0:** nested `api.*` only; `useTableUi()` + required `tableParams` on list mutations. See [CHANGELOG.md](./CHANGELOG.md).
99
100
 
@@ -101,6 +102,31 @@ Naming rules and migration: [docs/PUBLIC-API-NAMING.md](./docs/PUBLIC-API-NAMING
101
102
 
102
103
  ---
103
104
 
105
+ ## API error resolver (`resolveApiErrorDisplay`)
106
+
107
+ WoodsPortal HTTP errors return `errorCode`, `category`, and `errorMessage` (see woodsportal-api `docs/API-ERROR-CODES.md`). **`resolveApiErrorDisplay(error, options?)`** turns any thrown value into stable UI copy:
108
+
109
+ ```typescript
110
+ import { resolveApiErrorDisplay } from 'woodsportal-client-sdk'
111
+
112
+ const display = resolveApiErrorDisplay(err)
113
+ // display.title, display.description, display.variant, display.showRetry, display.showSupport
114
+ // display.errorCode, display.correlationId (when present)
115
+ ```
116
+
117
+ **Behavior:**
118
+
119
+ 1. Non-HTTP failures (timeout, offline, 503) → transport variants via `classifyHttpError`.
120
+ 2. API responses → `parseApiErrorPayload` + lookup in `API_ERROR_DISPLAY_CONFIG` (all active codes + reserved fallbacks).
121
+ 3. Unknown `errorCode` → fallback by `category` (`AUTH`, `ACCESS`, `VALIDATION`, `FILE`, `RATE_LIMIT`, …).
122
+ 4. **Description:** prefers API `errorMessage` (server i18n); uses config `fallbackDescription` only when the API message is empty. Does **not** surface `detailedMessage` to end users.
123
+
124
+ Auth-specific full-page copy (`HUBSPOT_REAUTH_REQUIRED`, `PORTAL_INACTIVE`, …) remains in **`getUnauthorizedPageCopy`**; the resolver delegates where appropriate.
125
+
126
+ **When API adds a code:** update `ErrorCode.java`, `API-ERROR-CODES.md`, and `src/main/core/errors/api-error-display-config.ts` together. The sync guard test in `src/test/core/errors/` fails if an active code lacks config.
127
+
128
+ ---
129
+
104
130
  ## Mutation-style methods (`api.auth.login`, …)
105
131
 
106
132
  Most nested factories wrap **`createMutation`**: invoke once with optional **`MutationOptions`**, then call the returned **`mutate`** or the **leaf alias** (e.g. **`login`**, **`list`**).
@@ -1,10 +1,12 @@
1
1
  import { bindStoreWithActions } from '../../chunk-AYTO6ND7.js';
2
- import { createAdapterHooks } from '../../chunk-TYJO2PSR.js';
3
- import '../../chunk-BGUHACLT.js';
4
- import '../../chunk-BKDJOWLW.js';
5
- import '../../chunk-7J265W43.js';
6
- import '../../chunk-WSUXZOHL.js';
7
- import '../../chunk-EFEBZBMU.js';
2
+ import { createAdapterHooks } from '../../chunk-VN6VPM5C.js';
3
+ import '../../chunk-AVMMEQLO.js';
4
+ import '../../chunk-ETYE73AH.js';
5
+ import '../../chunk-NDDE6ZZ3.js';
6
+ import '../../chunk-KPHAQNS2.js';
7
+ import '../../chunk-DB6W3CJT.js';
8
+ import '../../chunk-UDAPRD7Z.js';
9
+ import '../../chunk-COHBSTHF.js';
8
10
  import { inject, DestroyRef, signal } from '@angular/core';
9
11
 
10
12
  function createAngularStoreComposable(store, actions) {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/main/adapters/shared/createAngularComposable.ts","../../../src/main/adapters/angular/index.ts"],"names":[],"mappings":";;;;;;;;;AAGO,SAAS,4BAAA,CAA6E,OAAkC,OAAA,EAAmB;AAC9I,EAAA,OAAO,SAAS,QAAA,GAA8B;AAC1C,IAAA,MAAM,UAAA,GAAa,OAAO,UAAU,CAAA;AACpC,IAAA,MAAM,OAAA,GAAU,oBAAA,CAAqB,KAAA,EAAO,OAAO,CAAA;AACnD,IAAA,MAAM,QAAA,GAAW,MAAA,CAAO,OAAA,CAAQ,WAAA,EAAa,CAAA;AAE7C,IAAA,UAAA,CAAW,SAAA;AAAA,MACP,OAAA,CAAQ,UAAU,MAAM;AACpB,QAAA,QAAA,CAAS,GAAA,CAAI,OAAA,CAAQ,WAAA,EAAa,CAAA;AAAA,MACtC,CAAC;AAAA,KACL;AAEA,IAAA,OAAO,IAAI,KAAA,CAAM,EAAC,EAAwB;AAAA,MACtC,GAAA,CAAI,SAAS,IAAA,EAAM;AACf,QAAA,MAAM,GAAA,GAAM,OAAO,IAAI,CAAA;AACvB,QAAA,IAAI,OAAO,OAAA,EAAS;AAChB,UAAA,OAAQ,QAAoC,GAAG,CAAA;AAAA,QACnD;AACA,QAAA,OAAO,QAAA,GAAW,GAAmB,CAAA;AAAA,MACzC;AAAA,KACH,CAAA;AAAA,EACL,CAAA;AACJ;;;ACtBO,IAAM,EAAE,QAAA,EAAU,UAAA,EAAY,qBAAA,EAAuB,OAAA,EAAS,QAAA,EAAU,OAAA,EAAS,OAAA,EAAS,WAAA,EAAa,OAAA,EAAQ,GAClH,kBAAA,CAAmB,4BAA4B","file":"index.js","sourcesContent":["import { DestroyRef, inject, signal } from '@angular/core'\nimport { bindStoreWithActions, type SubscribableStore } from './bindStoreWithActions'\n\nexport function createAngularStoreComposable<TState extends object, TActions extends object>(store: SubscribableStore<TState>, actions: TActions) {\n return function useStore(): TState & TActions {\n const destroyRef = inject(DestroyRef)\n const binding = bindStoreWithActions(store, actions)\n const snapshot = signal(binding.getSnapshot())\n\n destroyRef.onDestroy(\n binding.subscribe(() => {\n snapshot.set(binding.getSnapshot())\n })\n )\n\n return new Proxy({} as TState & TActions, {\n get(_target, prop) {\n const key = String(prop)\n if (key in actions) {\n return (actions as Record<string, unknown>)[key]\n }\n return snapshot()[key as keyof TState]\n }\n })\n }\n}\n","import { createAdapterHooks } from '../shared/createAdapterHooks'\nimport { createAngularStoreComposable } from '../shared/createAngularComposable'\n\nexport const { useTable, useTableUi, useMultiObjectActions, useNote, useEmail, useUser, useSync, useUploader, useFile } =\n createAdapterHooks(createAngularStoreComposable)\n"]}
1
+ {"version":3,"sources":["../../../src/main/adapters/shared/createAngularComposable.ts","../../../src/main/adapters/angular/index.ts"],"names":[],"mappings":";;;;;;;;;;;AAGO,SAAS,4BAAA,CAA6E,OAAkC,OAAA,EAAmB;AAC9I,EAAA,OAAO,SAAS,QAAA,GAA8B;AAC1C,IAAA,MAAM,UAAA,GAAa,OAAO,UAAU,CAAA;AACpC,IAAA,MAAM,OAAA,GAAU,oBAAA,CAAqB,KAAA,EAAO,OAAO,CAAA;AACnD,IAAA,MAAM,QAAA,GAAW,MAAA,CAAO,OAAA,CAAQ,WAAA,EAAa,CAAA;AAE7C,IAAA,UAAA,CAAW,SAAA;AAAA,MACP,OAAA,CAAQ,UAAU,MAAM;AACpB,QAAA,QAAA,CAAS,GAAA,CAAI,OAAA,CAAQ,WAAA,EAAa,CAAA;AAAA,MACtC,CAAC;AAAA,KACL;AAEA,IAAA,OAAO,IAAI,KAAA,CAAM,EAAC,EAAwB;AAAA,MACtC,GAAA,CAAI,SAAS,IAAA,EAAM;AACf,QAAA,MAAM,GAAA,GAAM,OAAO,IAAI,CAAA;AACvB,QAAA,IAAI,OAAO,OAAA,EAAS;AAChB,UAAA,OAAQ,QAAoC,GAAG,CAAA;AAAA,QACnD;AACA,QAAA,OAAO,QAAA,GAAW,GAAmB,CAAA;AAAA,MACzC;AAAA,KACH,CAAA;AAAA,EACL,CAAA;AACJ;;;ACtBO,IAAM,EAAE,QAAA,EAAU,UAAA,EAAY,qBAAA,EAAuB,OAAA,EAAS,QAAA,EAAU,OAAA,EAAS,OAAA,EAAS,WAAA,EAAa,OAAA,EAAQ,GAClH,kBAAA,CAAmB,4BAA4B","file":"index.js","sourcesContent":["import { DestroyRef, inject, signal } from '@angular/core'\nimport { bindStoreWithActions, type SubscribableStore } from './bindStoreWithActions'\n\nexport function createAngularStoreComposable<TState extends object, TActions extends object>(store: SubscribableStore<TState>, actions: TActions) {\n return function useStore(): TState & TActions {\n const destroyRef = inject(DestroyRef)\n const binding = bindStoreWithActions(store, actions)\n const snapshot = signal(binding.getSnapshot())\n\n destroyRef.onDestroy(\n binding.subscribe(() => {\n snapshot.set(binding.getSnapshot())\n })\n )\n\n return new Proxy({} as TState & TActions, {\n get(_target, prop) {\n const key = String(prop)\n if (key in actions) {\n return (actions as Record<string, unknown>)[key]\n }\n return snapshot()[key as keyof TState]\n }\n })\n }\n}\n","import { createAdapterHooks } from '../shared/createAdapterHooks'\nimport { createAngularStoreComposable } from '../shared/createAngularComposable'\n\nexport const { useTable, useTableUi, useMultiObjectActions, useNote, useEmail, useUser, useSync, useUploader, useFile } =\n createAdapterHooks(createAngularStoreComposable)\n"]}
@@ -0,0 +1,3 @@
1
+ export { useTable, useTableUi, useUser } from '../react/index.js';
2
+ import '../../use-file-BcO5l-Zf.js';
3
+ import '../../use-sync-DpazhM4d.js';
@@ -0,0 +1,11 @@
1
+ export { useTable, useTableUi, useUser } from '../../chunk-ZEGKRQA4.js';
2
+ import '../../chunk-VN6VPM5C.js';
3
+ import '../../chunk-AVMMEQLO.js';
4
+ import '../../chunk-ETYE73AH.js';
5
+ import '../../chunk-NDDE6ZZ3.js';
6
+ import '../../chunk-KPHAQNS2.js';
7
+ import '../../chunk-DB6W3CJT.js';
8
+ import '../../chunk-UDAPRD7Z.js';
9
+ import '../../chunk-COHBSTHF.js';
10
+ //# sourceMappingURL=index.js.map
11
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"index.js"}
@@ -1,5 +1,5 @@
1
1
  import { F as FileState, M as MultiObjectTableState, U as UploaderState } from '../../use-file-BcO5l-Zf.js';
2
- import { E as EmailState, N as NoteState, S as SyncState, a as TableState, T as TableUiState, U as UserState } from '../../use-sync-DpazhM4d.js';
2
+ import { a as TableState, T as TableUiState, U as UserState, E as EmailState, N as NoteState, S as SyncState } from '../../use-sync-DpazhM4d.js';
3
3
 
4
4
  declare const useTable: () => TableState & {
5
5
  setObjectsQueryParams(params: any): void;
@@ -1,21 +1,11 @@
1
- import { createAdapterHooks } from '../../chunk-TYJO2PSR.js';
2
- import '../../chunk-BGUHACLT.js';
3
- import '../../chunk-BKDJOWLW.js';
4
- import '../../chunk-7J265W43.js';
5
- import '../../chunk-WSUXZOHL.js';
6
- import '../../chunk-EFEBZBMU.js';
7
- import { useSyncExternalStore } from 'react';
8
-
9
- function createReactStoreComposable(store, actions) {
10
- return function useStore() {
11
- const state = useSyncExternalStore(store.subscribe, store.getState, store.getState);
12
- return { ...state, ...actions };
13
- };
14
- }
15
-
16
- // src/main/adapters/react/index.ts
17
- var { useTable, useTableUi, useMultiObjectActions, useNote, useEmail, useUser, useSync, useUploader, useFile } = createAdapterHooks(createReactStoreComposable);
18
-
19
- export { useEmail, useFile, useMultiObjectActions, useNote, useSync, useTable, useTableUi, useUploader, useUser };
1
+ export { useEmail, useFile, useMultiObjectActions, useNote, useSync, useTable, useTableUi, useUploader, useUser } from '../../chunk-ZEGKRQA4.js';
2
+ import '../../chunk-VN6VPM5C.js';
3
+ import '../../chunk-AVMMEQLO.js';
4
+ import '../../chunk-ETYE73AH.js';
5
+ import '../../chunk-NDDE6ZZ3.js';
6
+ import '../../chunk-KPHAQNS2.js';
7
+ import '../../chunk-DB6W3CJT.js';
8
+ import '../../chunk-UDAPRD7Z.js';
9
+ import '../../chunk-COHBSTHF.js';
20
10
  //# sourceMappingURL=index.js.map
21
11
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/main/adapters/shared/createReactComposable.ts","../../../src/main/adapters/react/index.ts"],"names":[],"mappings":";;;;;;;;AAGO,SAAS,0BAAA,CAA2E,OAAkC,OAAA,EAAmB;AAC5I,EAAA,OAAO,SAAS,QAAA,GAA8B;AAC1C,IAAA,MAAM,QAAQ,oBAAA,CAAqB,KAAA,CAAM,WAAW,KAAA,CAAM,QAAA,EAAU,MAAM,QAAQ,CAAA;AAClF,IAAA,OAAO,EAAE,GAAG,KAAA,EAAO,GAAG,OAAA,EAAQ;AAAA,EAClC,CAAA;AACJ;;;ACLO,IAAM,EAAE,QAAA,EAAU,UAAA,EAAY,qBAAA,EAAuB,OAAA,EAAS,QAAA,EAAU,OAAA,EAAS,OAAA,EAAS,WAAA,EAAa,OAAA,EAAQ,GAClH,kBAAA,CAAmB,0BAA0B","file":"index.js","sourcesContent":["import { useSyncExternalStore } from 'react'\nimport type { SubscribableStore } from './bindStoreWithActions'\n\nexport function createReactStoreComposable<TState extends object, TActions extends object>(store: SubscribableStore<TState>, actions: TActions) {\n return function useStore(): TState & TActions {\n const state = useSyncExternalStore(store.subscribe, store.getState, store.getState)\n return { ...state, ...actions }\n }\n}\n","import { createAdapterHooks } from '../shared/createAdapterHooks'\nimport { createReactStoreComposable } from '../shared/createReactComposable'\n\nexport const { useTable, useTableUi, useMultiObjectActions, useNote, useEmail, useUser, useSync, useUploader, useFile } =\n createAdapterHooks(createReactStoreComposable)\n"]}
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"index.js"}
@@ -1,10 +1,12 @@
1
1
  import { bindStoreWithActions } from '../../chunk-AYTO6ND7.js';
2
- import { createAdapterHooks } from '../../chunk-TYJO2PSR.js';
3
- import '../../chunk-BGUHACLT.js';
4
- import '../../chunk-BKDJOWLW.js';
5
- import '../../chunk-7J265W43.js';
6
- import '../../chunk-WSUXZOHL.js';
7
- import '../../chunk-EFEBZBMU.js';
2
+ import { createAdapterHooks } from '../../chunk-VN6VPM5C.js';
3
+ import '../../chunk-AVMMEQLO.js';
4
+ import '../../chunk-ETYE73AH.js';
5
+ import '../../chunk-NDDE6ZZ3.js';
6
+ import '../../chunk-KPHAQNS2.js';
7
+ import '../../chunk-DB6W3CJT.js';
8
+ import '../../chunk-UDAPRD7Z.js';
9
+ import '../../chunk-COHBSTHF.js';
8
10
  import { reactive, onScopeDispose } from 'vue';
9
11
 
10
12
  function createVueStoreComposable(store, actions) {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/main/adapters/shared/createVueComposable.ts","../../../src/main/adapters/vue/index.ts"],"names":[],"mappings":";;;;;;;;;AAGO,SAAS,wBAAA,CAAyE,OAAkC,OAAA,EAAmB;AAC1I,EAAA,OAAO,SAAS,QAAA,GAA8B;AAC1C,IAAA,MAAM,OAAA,GAAU,oBAAA,CAAqB,KAAA,EAAO,OAAO,CAAA;AACnD,IAAA,MAAM,KAAA,GAAQ,QAAA,CAAS,OAAA,CAAQ,WAAA,EAAa,CAAA;AAE5C,IAAA,cAAA;AAAA,MACI,OAAA,CAAQ,UAAU,MAAM;AACpB,QAAA,MAAA,CAAO,MAAA,CAAO,KAAA,EAAO,OAAA,CAAQ,WAAA,EAAa,CAAA;AAAA,MAC9C,CAAC;AAAA,KACL;AAEA,IAAA,OAAO,KAAA;AAAA,EACX,CAAA;AACJ;;;ACbO,IAAM,EAAE,QAAA,EAAU,UAAA,EAAY,qBAAA,EAAuB,OAAA,EAAS,QAAA,EAAU,OAAA,EAAS,OAAA,EAAS,WAAA,EAAa,OAAA,EAAQ,GAClH,kBAAA,CAAmB,wBAAwB","file":"index.js","sourcesContent":["import { onScopeDispose, reactive } from 'vue'\nimport { bindStoreWithActions, type SubscribableStore } from './bindStoreWithActions'\n\nexport function createVueStoreComposable<TState extends object, TActions extends object>(store: SubscribableStore<TState>, actions: TActions) {\n return function useStore(): TState & TActions {\n const binding = bindStoreWithActions(store, actions)\n const state = reactive(binding.getSnapshot()) as TState & TActions\n\n onScopeDispose(\n binding.subscribe(() => {\n Object.assign(state, binding.getSnapshot())\n })\n )\n\n return state\n }\n}\n","import { createAdapterHooks } from '../shared/createAdapterHooks'\nimport { createVueStoreComposable } from '../shared/createVueComposable'\n\nexport const { useTable, useTableUi, useMultiObjectActions, useNote, useEmail, useUser, useSync, useUploader, useFile } =\n createAdapterHooks(createVueStoreComposable)\n"]}
1
+ {"version":3,"sources":["../../../src/main/adapters/shared/createVueComposable.ts","../../../src/main/adapters/vue/index.ts"],"names":[],"mappings":";;;;;;;;;;;AAGO,SAAS,wBAAA,CAAyE,OAAkC,OAAA,EAAmB;AAC1I,EAAA,OAAO,SAAS,QAAA,GAA8B;AAC1C,IAAA,MAAM,OAAA,GAAU,oBAAA,CAAqB,KAAA,EAAO,OAAO,CAAA;AACnD,IAAA,MAAM,KAAA,GAAQ,QAAA,CAAS,OAAA,CAAQ,WAAA,EAAa,CAAA;AAE5C,IAAA,cAAA;AAAA,MACI,OAAA,CAAQ,UAAU,MAAM;AACpB,QAAA,MAAA,CAAO,MAAA,CAAO,KAAA,EAAO,OAAA,CAAQ,WAAA,EAAa,CAAA;AAAA,MAC9C,CAAC;AAAA,KACL;AAEA,IAAA,OAAO,KAAA;AAAA,EACX,CAAA;AACJ;;;ACbO,IAAM,EAAE,QAAA,EAAU,UAAA,EAAY,qBAAA,EAAuB,OAAA,EAAS,QAAA,EAAU,OAAA,EAAS,OAAA,EAAS,WAAA,EAAa,OAAA,EAAQ,GAClH,kBAAA,CAAmB,wBAAwB","file":"index.js","sourcesContent":["import { onScopeDispose, reactive } from 'vue'\nimport { bindStoreWithActions, type SubscribableStore } from './bindStoreWithActions'\n\nexport function createVueStoreComposable<TState extends object, TActions extends object>(store: SubscribableStore<TState>, actions: TActions) {\n return function useStore(): TState & TActions {\n const binding = bindStoreWithActions(store, actions)\n const state = reactive(binding.getSnapshot()) as TState & TActions\n\n onScopeDispose(\n binding.subscribe(() => {\n Object.assign(state, binding.getSnapshot())\n })\n )\n\n return state\n }\n}\n","import { createAdapterHooks } from '../shared/createAdapterHooks'\nimport { createVueStoreComposable } from '../shared/createVueComposable'\n\nexport const { useTable, useTableUi, useMultiObjectActions, useNote, useEmail, useUser, useSync, useUploader, useFile } =\n createAdapterHooks(createVueStoreComposable)\n"]}
@@ -0,0 +1,6 @@
1
+ export { isOptionalAuthFailureUrl, isRefreshEndpointUrl, isSessionProbeUrl, persistAuthError, readPersistedAuthError, resolveAuthErrorAction } from './chunk-JG3TEXWP.js';
2
+ import './chunk-DB6W3CJT.js';
3
+ import './chunk-UDAPRD7Z.js';
4
+ import './chunk-COHBSTHF.js';
5
+ //# sourceMappingURL=auth-interceptor-policy-RGQ26NWR.js.map
6
+ //# sourceMappingURL=auth-interceptor-policy-RGQ26NWR.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":[],"names":[],"mappings":"","file":"auth-interceptor-policy-ACKZEQ6J.js"}
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"auth-interceptor-policy-RGQ26NWR.js"}
@@ -0,0 +1,7 @@
1
+ export { clearAdapterSessionData, clearRefreshToken, getPortal, getProfile, getRefreshToken, getSubscriptionType, setAccessToken, setLoggedInDetails, setPortal, setProfileDetails, setRefreshToken, setSubscriptionType } from './chunk-NDDE6ZZ3.js';
2
+ import './chunk-KPHAQNS2.js';
3
+ import './chunk-DB6W3CJT.js';
4
+ import './chunk-UDAPRD7Z.js';
5
+ import './chunk-COHBSTHF.js';
6
+ //# sourceMappingURL=auth-utils-T4FIBK3O.js.map
7
+ //# sourceMappingURL=auth-utils-T4FIBK3O.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":[],"names":[],"mappings":"","file":"auth-utils-CPO4LG4K.js"}
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"auth-utils-T4FIBK3O.js"}
@@ -1,5 +1,5 @@
1
1
  import { InternalAxiosRequestConfig } from 'axios';
2
- import { M as MutationOptions, P as PreLoginPayload, C as ChangePasswordPayload, L as LoginPayload, V as VerifyEmailPayload, F as ForgetPasswordPayload, a as ResetPasswordPayload, R as ResetPasswordVerifyTokenPayload } from './index-Bh9eY8sA.js';
2
+ import { M as MutationOptions, P as PreLoginPayload, C as ChangePasswordPayload, L as LoginPayload, V as VerifyEmailPayload, F as ForgetPasswordPayload, d as ForgetPasswordOtpVerifyResponse, b as ForgetPasswordOtpVerifyPayload, R as ResetPasswordPayload, a as ResetPasswordVerifyTokenPayload } from './index-B-IGDI9L.js';
3
3
 
4
4
  type MfaMethod = 'EMAIL_OTP' | 'SMS_OTP' | 'TOTP' | 'BACKUP_CODE' | 'PASSKEY' | 'PASSKEY_PRIMARY';
5
5
  type MfaMethodStatus = 'READY' | 'NOT_ENROLLED';
@@ -342,6 +342,13 @@ declare function configureStorageKeys(overrides?: StorageKeyConfig): void;
342
342
  declare function resetStorageKeysForTests(): void;
343
343
  declare function getStorageKeys(): Readonly<Required<StorageKeyConfig>>;
344
344
 
345
+ type RefreshFailureKind = 'transient' | 'missing_context' | 'missing_refresh_token' | 'auth_invalid';
346
+ type RefreshCallbackResult = {
347
+ token: string | null;
348
+ success: boolean;
349
+ failureKind?: RefreshFailureKind;
350
+ };
351
+
345
352
  type EditorPreviewMockResult = {
346
353
  data: unknown;
347
354
  status?: number;
@@ -377,10 +384,7 @@ interface HttpClientConfig {
377
384
  declare function initializeHttpClient(clientConfig: HttpClientConfig): void;
378
385
  declare function getFormErrors(error: unknown): string | null;
379
386
  declare function getFieldErrors(error: unknown): any;
380
- declare function getAuthRefreshToken(refreshToken: string | null): Promise<{
381
- token: string | null;
382
- success: boolean;
383
- }>;
387
+ declare function getAuthRefreshToken(refreshToken: string | null): Promise<RefreshCallbackResult>;
384
388
 
385
389
  declare function getAccessToken(): string | null;
386
390
  declare function setSessionLifecycleListener(listener: (() => void) | null): void;
@@ -670,6 +674,11 @@ declare function forgetPassword(options?: MutationOptions<any, any>): {
670
674
  forgetPassword: (payload?: ForgetPasswordPayload | undefined) => Promise<any>;
671
675
  isLoading: () => boolean;
672
676
  };
677
+ declare function verifyForgotPasswordOtp(options?: MutationOptions<ForgetPasswordOtpVerifyResponse, any>): {
678
+ mutate: (payload?: ForgetPasswordOtpVerifyPayload | undefined) => Promise<ForgetPasswordOtpVerifyResponse>;
679
+ verifyForgotPasswordOtp: (payload?: ForgetPasswordOtpVerifyPayload | undefined) => Promise<ForgetPasswordOtpVerifyResponse>;
680
+ isLoading: () => boolean;
681
+ };
673
682
  declare function logout(options?: MutationOptions<any, any>): {
674
683
  mutate: (payload?: unknown) => Promise<any>;
675
684
  logout: (payload?: unknown) => Promise<any>;
@@ -772,4 +781,46 @@ declare function classifyHttpError(error: unknown): HttpErrorKind;
772
781
  declare function isServiceUnavailableError(error: unknown): boolean;
773
782
  declare function getHttpErrorMessage(error: unknown): string;
774
783
 
775
- export { clearAccessToken as $, totpEnrollVerify as A, totpDisable as B, phoneUnverify as C, backupCodesRegenerate as D, mfaOptOut as E, webauthnRegisterOptions as F, webauthnRegisterVerify as G, webauthnAuthOptions as H, webauthnAuthVerify as I, listWebauthnCredentials as J, deleteWebauthnCredential as K, passkeyLoginOptions as L, passkeyLoginVerify as M, getSecurityOverview as N, getSecurityLoginActivity as O, getSecuritySessions as P, revokeSecuritySession as Q, revokeOtherSecuritySessions as R, getLoginBootstrap as S, getSsoDetails as T, generateSsoUrl as U, ssoCallback as V, getRefreshToken as W, refreshSession as X, getAuthRefreshToken as Y, getAccessToken as Z, setAccessToken as _, logout as a, type WoodsportalRequestConfig as a$, isAuthenticated as a0, isAuthenticateApp as a1, isAccessTokenExpired as a2, isExpiresAccessToken as a3, hasRefreshSession as a4, hasValidAccessToken as a5, didLastRefreshFail as a6, isSessionRefreshExhausted as a7, isRefreshInFlight as a8, resetSessionAuthState as a9, type ApiErrorPayload as aA, type AuthErrorAction as aB, AuthErrorCode as aC, type AuthErrorCodeValue as aD, type AuthFunnelState as aE, type AuthInterceptorPolicyConfig as aF, type AuthPolicyRoutes as aG, type AuthRouteAction as aH, type HttpClientConfig as aI, type HttpErrorKind as aJ, type HydrateMfaPendingAccessTokenInput as aK, type LogLevel as aL, type LoginHistoryRow as aM, type LoginResponseData as aN, type MfaBootRecoveryResult as aO, type MfaEnrollmentStatus as aP, type MfaMethod as aQ, type MfaMethodOption as aR, type MfaPendingAccessToken as aS, type MfaPortalScopeContext as aT, type MfaStorageLane as aU, type PaginationResponse as aV, SERVICE_UNAVAILABLE_MESSAGE as aW, type SecurityOverview as aX, type StorageKeyConfig as aY, type StoredAuthError as aZ, type UnauthorizedPageCopy as a_, clearSessionRefreshExhaustedState as aa, hydrateSessionRefreshState as ab, type SessionContractInput as ac, type LoggerConfig as ad, type TwoFaVerificationRequest as ae, type MfaOtpSendRequest as af, type MfaPendingPasskeyOptionsRequest as ag, type MfaPendingPasskeyVerifyRequest as ah, type MfaStatusQuery as ai, type MfaPreferenceRequest as aj, type PhoneVerifyStartRequest as ak, type PhoneVerifyConfirmRequest as al, type TotpEnrollVerifyRequest as am, type TotpDisableRequest as an, type PhoneUnverifyRequest as ao, type BackupCodesRegenerateRequest as ap, type MfaBackupCodesResponse as aq, type MfaOptOutRequest as ar, type WebAuthnVerifyRequest as as, type PasskeyLoginOptionsRequest as at, type PasskeyLoginVerifyRequest as au, type SecurityOverviewQuery as av, type SecurityLoginActivityQuery as aw, type SecuritySessionsQuery as ax, type RevokeSecuritySessionPayload as ay, type ActiveSession as az, registerExistingUser as b, classifyHttpError as b0, clearMfaPendingAccessToken as b1, configureStorageKeys as b2, getFieldErrors as b3, getFormErrors as b4, getHttpErrorMessage as b5, getStorageKeys as b6, getUnauthorizedPageCopy as b7, hasAuthenticatedAccess as b8, hasValidAccess as b9, setEditorPreviewMockHandler as bA, hydrateMfaPendingAccessToken as ba, initializeHttpClient as bb, isFullyAuthenticated as bc, isMfaPendingAccessSession as bd, isMfaPendingSession as be, isOptionalAuthFailureUrl as bf, isServiceUnavailableError as bg, isSessionProbeUrl as bh, parseApiErrorPayload as bi, persistAuthError as bj, readMfaPendingAccessToken as bk, readPersistedAuthError as bl, recoverMfaGateOnBoot as bm, resetStorageKeysForTests as bn, resolveAuthErrorAction as bo, resolveAuthRouteAction as bp, setSessionLifecycleListener as bq, startVisibilityRefreshScheduler as br, stopVisibilityRefreshScheduler as bs, storeMfaPendingAccessToken as bt, type EditorPreviewMockHandler as bu, type EditorPreviewMockResult as bv, type LoginBootstrapMfaPolicy as bw, type LoginBootstrapPortal as bx, type LoginBootstrapResponse as by, type LoginBootstrapSsoProvider as bz, clientSession as c, resetPassword as d, resetPasswordVerifyToken as e, forgetPassword as f, verifyEmailResend as g, handoff as h, resendEmail as i, changePassword as j, profile as k, login as l, me as m, profileUpdate as n, verifyOtp as o, preLogin as p, pendingPasskeyOptions as q, register as r, sendMfaOtp as s, pendingPasskeyVerify as t, getMfaStatus as u, verifyEmail as v, setMfaPreferences as w, startPhoneVerify as x, confirmPhoneVerify as y, totpEnrollStart as z };
784
+ type ApiContentVariant = 'error' | 'empty' | 'association-not-found' | 'association-empty' | 'no-permission' | 'action-denied' | 'unsupported-file' | 'access' | 'actionDenied' | 'association' | 'validation' | 'auth' | 'rateLimit' | 'commercial' | 'file' | 'integration' | 'network';
785
+ type ApiErrorSeverity = 'informational' | 'recoverable' | 'auth' | 'fatal';
786
+
787
+ type ApiErrorVariant = 'error' | 'access' | 'actionDenied' | 'association' | 'validation' | 'auth' | 'rateLimit' | 'commercial' | 'file' | 'integration' | 'network';
788
+
789
+ type ApiErrorDisplayConfig = {
790
+ variant: ApiErrorVariant;
791
+ title: string;
792
+ fallbackDescription: string;
793
+ retry?: boolean;
794
+ support?: boolean;
795
+ contentVariant?: ApiContentVariant;
796
+ severity?: ApiErrorSeverity;
797
+ };
798
+ declare const API_ERROR_DISPLAY_CONFIG: Record<string, ApiErrorDisplayConfig>;
799
+ declare const API_ERROR_CATEGORY_FALLBACK: Record<string, ApiErrorDisplayConfig>;
800
+
801
+ type ResolvedApiErrorDisplay = {
802
+ variant: ApiErrorVariant;
803
+ title: string;
804
+ description: string;
805
+ errorCode?: string;
806
+ correlationId?: string;
807
+ showRetry: boolean;
808
+ showSupport: boolean;
809
+ };
810
+ type ResolveApiErrorDisplayOptions = {
811
+ allowRetry?: boolean;
812
+ };
813
+ declare function getApiErrorFromUnknown(error: unknown): ReturnType<typeof parseApiErrorPayload>;
814
+ declare function resolveApiErrorDisplay(error: unknown, options?: ResolveApiErrorDisplayOptions): ResolvedApiErrorDisplay;
815
+
816
+ declare const WOODSPORTAL_API_ACTIVE_ERROR_CODES: readonly ["ACCESS_DENIED", "ACCESS_FORBIDDEN", "ACTION_NOT_ACCESSIBLE", "AMBIGUOUS_HUB_ID", "API_EXCEPTION", "ASSOCIATION_LABEL_NOT_FOUND", "AUTHENTICATION_FAILED", "AUTH_ACCOUNT_LOCKED", "AUTH_TOKEN_EXPIRED", "AUTH_TOKEN_INVALID", "BAD_REQUEST", "COMMERCIAL_ACCESS_EXPIRED", "DATA_CONFLICT", "DATA_FETCH_FAILED", "DATA_PROCESSING_FAILED", "DECRYPTION_FAILED", "EMAIL_SENDING_FAILED", "ENCRYPTION_FAILED", "ENTITLEMENT_USAGE_EXCEEDED", "EXTERNAL_API_CLIENT_ERROR", "FILE_UNSUPPORTED_TYPE", "FILE_UPLOAD_FAILED", "GRAPHQL_API_EXCEPTION", "HUBSPOT_OBJECT_NOT_FOUND", "HUBSPOT_REAUTH_REQUIRED", "HUBSPOT_SYNC_FAILED", "ILLEGAL_STATE", "INTERNAL_ERROR", "INVALID_ARGUMENT", "JSON_PARSE_FAILED", "JWT_SECRET_INVALID", "LAST_ACTIVE_PIPELINE_REQUIRED", "LOGIN_FAILED", "MALFORMED_JSON", "METHOD_NOT_ALLOWED", "MISSING_HEADERS", "MISSING_REFRESH_TOKEN", "MISSING_REQUIRED_DATA", "OAUTH_PROCESSING_ERROR", "OBJECT_ASSOCIATION_NOT_FOUND", "OBJECT_INACTIVE", "PORTAL_INACTIVE", "PRIMARY_COMPANY_NOT_FOUND", "PRODUCT_INSTALL_FAILED", "RATE_LIMIT_EXCEEDED", "RESOURCE_ALREADY_EXISTS", "RESOURCE_CREATION_FAILED", "RESOURCE_DELETION_FAILED", "RESOURCE_MISSING_ASSOCIATION", "RESOURCE_NOT_FOUND", "RESOURCE_UPDATE_FAILED", "RESOURCE_USER_NOT_FOUND", "SQS_PROCESSING_FAILED", "SUBSCRIPTION_ERROR", "SYSTEM_INTERNAL_ERROR", "TOO_MANY_REQUESTS", "USERNAME_NOT_FOUND", "VALIDATION_FAILED", "WARM_FAILED"];
817
+
818
+ declare function buildErrorDescription({ errorMessage, detailedMessage, fallbackDescription, preferDetailedMessage, errorCode }: {
819
+ errorMessage?: string;
820
+ detailedMessage?: string;
821
+ fallbackDescription?: string;
822
+ preferDetailedMessage?: boolean;
823
+ errorCode?: string;
824
+ }): string;
825
+
826
+ export { setAccessToken as $, totpEnrollStart as A, totpEnrollVerify as B, totpDisable as C, phoneUnverify as D, backupCodesRegenerate as E, mfaOptOut as F, webauthnRegisterOptions as G, webauthnRegisterVerify as H, webauthnAuthOptions as I, webauthnAuthVerify as J, listWebauthnCredentials as K, deleteWebauthnCredential as L, passkeyLoginOptions as M, passkeyLoginVerify as N, getSecurityOverview as O, getSecurityLoginActivity as P, getSecuritySessions as Q, revokeSecuritySession as R, revokeOtherSecuritySessions as S, getLoginBootstrap as T, getSsoDetails as U, generateSsoUrl as V, ssoCallback as W, getRefreshToken as X, refreshSession as Y, getAuthRefreshToken as Z, getAccessToken as _, logout as a, hasAuthenticatedAccess as a$, clearAccessToken as a0, isAuthenticated as a1, isAuthenticateApp as a2, isAccessTokenExpired as a3, isExpiresAccessToken as a4, hasRefreshSession as a5, hasValidAccessToken as a6, didLastRefreshFail as a7, isSessionRefreshExhausted as a8, isRefreshInFlight as a9, type LoginHistoryRow as aA, type LoginResponseData as aB, type MfaBootRecoveryResult as aC, type MfaEnrollmentStatus as aD, type MfaMethod as aE, type MfaMethodOption as aF, type MfaPendingAccessToken as aG, type MfaPortalScopeContext as aH, type MfaStorageLane as aI, type PaginationResponse as aJ, type ResolveApiErrorDisplayOptions as aK, type ResolvedApiErrorDisplay as aL, SERVICE_UNAVAILABLE_MESSAGE as aM, type SecurityOverview as aN, type StoredAuthError as aO, type TwoFaVerificationRequest as aP, type UnauthorizedPageCopy as aQ, WOODSPORTAL_API_ACTIVE_ERROR_CODES as aR, type WoodsportalRequestConfig as aS, buildErrorDescription as aT, classifyHttpError as aU, clearMfaPendingAccessToken as aV, getApiErrorFromUnknown as aW, getFieldErrors as aX, getFormErrors as aY, getHttpErrorMessage as aZ, getUnauthorizedPageCopy as a_, resetSessionAuthState as aa, clearSessionRefreshExhaustedState as ab, hydrateSessionRefreshState as ac, type SessionContractInput as ad, API_ERROR_CATEGORY_FALLBACK as ae, API_ERROR_DISPLAY_CONFIG as af, type ActiveSession as ag, type ApiErrorDisplayConfig as ah, type ApiErrorPayload as ai, type ApiErrorVariant as aj, type AuthErrorAction as ak, AuthErrorCode as al, type AuthErrorCodeValue as am, type AuthFunnelState as an, type AuthInterceptorPolicyConfig as ao, type AuthPolicyRoutes as ap, type AuthRouteAction as aq, type EditorPreviewMockHandler as ar, type EditorPreviewMockResult as as, type HttpClientConfig as at, type HttpErrorKind as au, type HydrateMfaPendingAccessTokenInput as av, type LoginBootstrapMfaPolicy as aw, type LoginBootstrapPortal as ax, type LoginBootstrapResponse as ay, type LoginBootstrapSsoProvider as az, registerExistingUser as b, hasValidAccess as b0, hydrateMfaPendingAccessToken as b1, initializeHttpClient as b2, isFullyAuthenticated as b3, isMfaPendingAccessSession as b4, isMfaPendingSession as b5, isOptionalAuthFailureUrl as b6, isServiceUnavailableError as b7, isSessionProbeUrl as b8, parseApiErrorPayload as b9, type MfaBackupCodesResponse as bA, type MfaOptOutRequest as bB, type WebAuthnVerifyRequest as bC, type PasskeyLoginOptionsRequest as bD, type PasskeyLoginVerifyRequest as bE, type SecurityOverviewQuery as bF, type SecurityLoginActivityQuery as bG, type SecuritySessionsQuery as bH, type RevokeSecuritySessionPayload as bI, type LogLevel as bJ, type StorageKeyConfig as bK, configureStorageKeys as bL, getStorageKeys as bM, resetStorageKeysForTests as bN, persistAuthError as ba, readMfaPendingAccessToken as bb, readPersistedAuthError as bc, recoverMfaGateOnBoot as bd, resolveApiErrorDisplay as be, resolveAuthErrorAction as bf, resolveAuthRouteAction as bg, setEditorPreviewMockHandler as bh, setSessionLifecycleListener as bi, startVisibilityRefreshScheduler as bj, stopVisibilityRefreshScheduler as bk, storeMfaPendingAccessToken as bl, type ApiContentVariant as bm, type ApiErrorSeverity as bn, type LoggerConfig as bo, type MfaOtpSendRequest as bp, type MfaPendingPasskeyOptionsRequest as bq, type MfaPendingPasskeyVerifyRequest as br, type MfaStatusQuery as bs, type MfaPreferenceRequest as bt, type PhoneVerifyStartRequest as bu, type PhoneVerifyConfirmRequest as bv, type TotpEnrollVerifyRequest as bw, type TotpDisableRequest as bx, type PhoneUnverifyRequest as by, type BackupCodesRegenerateRequest as bz, clientSession as c, verifyForgotPasswordOtp as d, resetPassword as e, forgetPassword as f, resetPasswordVerifyToken as g, handoff as h, verifyEmailResend as i, resendEmail as j, changePassword as k, login as l, me as m, profile as n, profileUpdate as o, preLogin as p, verifyOtp as q, register as r, sendMfaOtp as s, pendingPasskeyOptions as t, pendingPasskeyVerify as u, verifyEmail as v, getMfaStatus as w, setMfaPreferences as x, startPhoneVerify as y, confirmPhoneVerify as z };
@@ -1,8 +1,8 @@
1
- import { multiObjectStore } from './chunk-BGUHACLT.js';
2
- import { actions2, tableStore, tableUiStore, noteStore, emailStore, userStore, syncStore, formStore, fileStore } from './chunk-BKDJOWLW.js';
3
- import { clearAccessToken, resetSessionAuthState, clearSessionRefreshExhaustedState } from './chunk-7J265W43.js';
4
- import { clearClientAuthCookies, clearClientIframeRefreshLocalKeys } from './chunk-WSUXZOHL.js';
5
- import { WP_STORAGE_KEYS } from './chunk-EFEBZBMU.js';
1
+ import { multiObjectStore } from './chunk-AVMMEQLO.js';
2
+ import { actions2, tableStore, tableUiStore, noteStore, emailStore, userStore, syncStore, formStore, fileStore } from './chunk-ETYE73AH.js';
3
+ import { clearAdapterSessionData, clearAccessToken, resetSessionAuthState, clearSessionRefreshExhaustedState } from './chunk-NDDE6ZZ3.js';
4
+ import { clearClientAuthCookies, clearClientIframeRefreshLocalKeys, getClientType } from './chunk-KPHAQNS2.js';
5
+ import { WP_STORAGE_KEYS } from './chunk-UDAPRD7Z.js';
6
6
 
7
7
  // src/main/core/http/session-teardown.ts
8
8
  function resetSessionStores() {
@@ -53,6 +53,7 @@ function resetSessionStores() {
53
53
  multiObjectStore.setState({ objects: {}, objectsPrependData: {}, meta: {} });
54
54
  }
55
55
  function clearClientSdkSession() {
56
+ clearAdapterSessionData();
56
57
  clearClientAuthCookies();
57
58
  clearClientIframeRefreshLocalKeys();
58
59
  clearAccessToken();
@@ -110,6 +111,9 @@ function handleRemoteSessionChange(kind) {
110
111
  dispatch(kind);
111
112
  }
112
113
  function installCrossTabSessionListener(onChange) {
114
+ if (getClientType() === "mobile") {
115
+ return () => void 0;
116
+ }
113
117
  if (typeof window === "undefined") {
114
118
  return () => void 0;
115
119
  }
@@ -159,5 +163,5 @@ function resetCrossTabSessionSyncForTests() {
159
163
  }
160
164
 
161
165
  export { applyCrossTabSessionRevocation, clearClientSdkSession, installCrossTabSessionListener, resetCrossTabSessionSyncForTests, resetSessionStores, signalSessionChanged };
162
- //# sourceMappingURL=chunk-YZPW5F6U.js.map
163
- //# sourceMappingURL=chunk-YZPW5F6U.js.map
166
+ //# sourceMappingURL=chunk-5LISZE2R.js.map
167
+ //# sourceMappingURL=chunk-5LISZE2R.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/main/core/http/session-teardown.ts","../src/main/core/http/cross-tab-session.ts"],"names":["actions"],"mappings":"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","file":"chunk-5LISZE2R.js","sourcesContent":["import { clearAccessToken, clearSessionRefreshExhaustedState, resetSessionAuthState } from './token-store'\nimport { clearAdapterSessionData } from './auth-utils'\nimport { clearClientAuthCookies } from '../utils/cookie'\nimport { clearClientIframeRefreshLocalKeys } from '../utils/storage-migration'\nimport {\n tableStore,\n tableActions,\n tableUiStore,\n noteStore,\n emailStore,\n userStore,\n syncStore,\n formStore,\n fileStore,\n multiObjectStore\n} from '../../state/index.js'\n\n/** Reset CRM nanostores to empty session state (logout / forced 401). */\nexport function resetSessionStores(): void {\n tableActions.clearTablePrependData()\n tableStore.setState({\n queryParams: null,\n multiObjectsQueryParams: {},\n objectsData: null,\n tableData: [],\n tablePrependData: [],\n hubspotObjectTypeId: '',\n selectedPipeline: '',\n viewType: ''\n })\n tableUiStore.setState({\n tableUniqueId: null,\n gridData: [],\n sort: '-hs_createdate',\n limit: 10,\n after: '',\n page: 1,\n nextPage: 1,\n stageId: '',\n totalItems: 1,\n numOfPages: 1,\n currentPage: 1,\n search: '',\n filterPropertyName: 'hs_pipeline',\n filterOperator: 'eq',\n filterValue: '',\n isPrimaryCompany: null,\n view: null,\n selectedPipeline: '',\n tableParam: {},\n tableDefPermissions: {}\n })\n noteStore.setState({ notes: [], prependNotes: [], id: '', queryParams: null })\n emailStore.setState({ emails: [], prependEmails: [], id: '', queryParams: null })\n userStore.setState({ profile: null })\n syncStore.setState({\n apiSync: false,\n sync: false,\n isSyncLoading: false,\n isSyncDisable: false\n })\n formStore.setState({ form: null })\n fileStore.setState({ files: null, id: '', queryParams: null })\n multiObjectStore.setState({ objects: {}, objectsPrependData: {}, meta: {} })\n}\n\n/**\n * Full client SDK session teardown (cookies, sessionStorage, iframe keys, memory token, CRM stores).\n * Consumer apps should also clear TanStack Query + local UI state after calling this.\n */\nexport function clearClientSdkSession(): void {\n clearAdapterSessionData()\n clearClientAuthCookies()\n clearClientIframeRefreshLocalKeys()\n clearAccessToken()\n resetSessionStores()\n resetSessionAuthState()\n clearSessionRefreshExhaustedState()\n}\n","import { WP_STORAGE_KEYS } from '../utils/wp-storage-keys'\nimport { getClientType } from './client-type'\nimport { clearClientSdkSession } from './session-teardown'\nimport { clearAccessToken } from './token-store'\n\nconst REV_KEY = WP_STORAGE_KEYS.c.auth.rev\nconst CHANNEL_NAME = 'woodsportal:session-sync'\n\ntype SessionSyncMessage = { type: 'rev' | 'login'; ts: number }\n\nfunction writeRevSignal(): void {\n if (typeof window === 'undefined' || !window.localStorage) {\n return\n }\n try {\n window.localStorage.setItem(REV_KEY, String(Date.now()))\n } catch {\n // ignore\n }\n}\n\nfunction getBroadcastChannel(): BroadcastChannel | null {\n if (typeof BroadcastChannel === 'undefined') {\n return null\n }\n try {\n return new BroadcastChannel(CHANNEL_NAME)\n } catch {\n return null\n }\n}\n\n/** Notify other tabs that session ended or restarted. */\nexport function signalSessionChanged(kind: 'rev' | 'login' = 'rev'): void {\n writeRevSignal()\n const channel = getBroadcastChannel()\n if (channel) {\n const message: SessionSyncMessage = { type: kind, ts: Date.now() }\n channel.postMessage(message)\n channel.close()\n }\n}\n\nexport type SessionSyncListener = (kind: 'rev' | 'login') => void\n\nlet listenerInstalled = false\nlet broadcastChannel: BroadcastChannel | null = null\nconst listeners = new Set<SessionSyncListener>()\n\nfunction dispatch(kind: 'rev' | 'login'): void {\n listeners.forEach((fn) => {\n try {\n fn(kind)\n } catch {\n // consumer error\n }\n })\n}\n\nfunction handleRemoteSessionChange(kind: 'rev' | 'login'): void {\n if (kind === 'rev') {\n clearAccessToken()\n }\n dispatch(kind)\n}\n\n/**\n * Listen for logout/login in other tabs (localStorage + BroadcastChannel).\n * Returns unsubscribe function.\n */\nexport function installCrossTabSessionListener(onChange?: SessionSyncListener): () => void {\n if (getClientType() === 'mobile') {\n return () => undefined\n }\n\n if (typeof window === 'undefined') {\n return () => undefined\n }\n\n if (onChange) {\n listeners.add(onChange)\n }\n\n if (!listenerInstalled) {\n listenerInstalled = true\n\n window.addEventListener('storage', (event) => {\n if (event.key !== REV_KEY || event.newValue == null) {\n return\n }\n handleRemoteSessionChange('rev')\n })\n\n try {\n broadcastChannel?.close()\n broadcastChannel = new BroadcastChannel(CHANNEL_NAME)\n broadcastChannel.onmessage = (event: MessageEvent<SessionSyncMessage>) => {\n const kind = event.data?.type === 'login' ? 'login' : 'rev'\n handleRemoteSessionChange(kind)\n }\n } catch {\n // BroadcastChannel unavailable\n }\n\n window.addEventListener('pageshow', (event) => {\n if (event.persisted) {\n handleRemoteSessionChange('rev')\n }\n })\n }\n\n return () => {\n if (onChange) {\n listeners.delete(onChange)\n }\n }\n}\n\n/** Remote tab signalled logout — clear readable session artifacts. */\nexport function applyCrossTabSessionRevocation(): void {\n clearClientSdkSession()\n}\n\n/** Test-only: close BroadcastChannel and allow listener reinstall (prevents open-handle hangs). */\nexport function resetCrossTabSessionSyncForTests(): void {\n try {\n broadcastChannel?.close()\n } catch {\n // ignore\n }\n broadcastChannel = null\n listenerInstalled = false\n listeners.clear()\n}\n"]}
@@ -1,4 +1,4 @@
1
- import { createStore } from './chunk-BKDJOWLW.js';
1
+ import { createStore } from './chunk-ETYE73AH.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-BGUHACLT.js.map
95
- //# sourceMappingURL=chunk-BGUHACLT.js.map
94
+ //# sourceMappingURL=chunk-AVMMEQLO.js.map
95
+ //# sourceMappingURL=chunk-AVMMEQLO.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/main/state/crm/use-multi-object.ts"],"names":[],"mappings":";;;AAQO,IAAM,mBAAmB,WAAA,CAAmC;AAAA,EAC/D,SAAS,EAAC;AAAA,EACV,oBAAoB,EAAC;AAAA,EACrB,MAAM;AACV,CAAC;AAED,SAAS,aAAa,OAAA,EAAsB;AACxC,EAAA,OAAO,MAAA,CAAO,OAAA,EAAS,mBAAA,IAAuB,EAAE,CAAA;AACpD;AAEO,IAAM,OAAA,GAAU;AAAA,EACnB,kBAAA,CAAmB,UAAe,OAAA,EAAc;AAC5C,IAAA,MAAM,GAAA,GAAM,aAAa,OAAO,CAAA;AAChC,IAAA,MAAM,KAAA,GAAQ,iBAAiB,QAAA,EAAS;AAExC,IAAA,MAAM,IAAA,GAAO,QAAA,EAAU,IAAA,EAAM,OAAA,EAAS,QAAQ,EAAC;AAC/C,IAAA,MAAM,SAAS,IAAI,GAAA;AAAA,MACf,IAAA,CACK,IAAI,CAAC,GAAA,KAAa,IAAI,EAAA,IAAM,GAAA,CAAI,YAAY,CAAA,CAC5C,MAAA,CAAO,CAAC,OAAgB,EAAA,IAAM,IAAA,IAAQ,OAAO,EAAE,CAAA,CAC/C,IAAI,CAAC,EAAA,KAAgB,MAAA,CAAO,EAAE,CAAC;AAAA,KACxC;AAEA,IAAA,IAAI,gBAAA,GAAA,CAAoB,MAAM,kBAAA,CAAmB,GAAG,KAAK,EAAC,EAAG,MAAA,CAAO,CAAC,IAAA,KAAc;AAC/E,MAAA,MAAM,MAAA,GAAS,IAAA,CAAK,EAAA,IAAM,IAAA,CAAK,YAAA;AAC/B,MAAA,IAAI,MAAA,IAAU,IAAA,IAAQ,MAAA,KAAW,EAAA,EAAI,OAAO,IAAA;AAC5C,MAAA,OAAO,CAAC,MAAA,CAAO,GAAA,CAAI,MAAA,CAAO,MAAM,CAAC,CAAA;AAAA,IACrC,CAAC,CAAA;AAED,IAAA,MAAM,gBAAA,GAAmB,SAAS,gBAAA,IAAoB,EAAA;AACtD,IAAA,MAAM,QAAA,GAAW,QAAA,EAAU,IAAA,EAAM,QAAA,IAAY,EAAA;AAC7C,IAAA,MAAM,QAAA,GAAW,KAAA,CAAM,IAAA,CAAK,GAAG,CAAA;AAE/B,IAAA,IAAI,QAAA,EAAU,IAAA,EAAM,KAAA,GAAQ,CAAA,IAAK,SAAS,aAAA,EAAe;AACrD,MAAA,gBAAA,GAAmB,EAAC;AAAA,IACxB;AAEA,IAAA,IAAI,QAAA,EAAU,QAAA,IAAY,QAAA,CAAS,QAAA,KAAa,QAAA,EAAU;AACtD,MAAA,gBAAA,GAAmB,EAAC;AAAA,IACxB;AAEA,IAAA,IAAI,QAAA,EAAU,gBAAA,IAAoB,QAAA,CAAS,gBAAA,KAAqB,gBAAA,EAAkB;AAC9E,MAAA,gBAAA,GAAmB,EAAC;AAAA,IACxB;AAEA,IAAA,gBAAA,CAAiB,QAAA,CAAS;AAAA,MACtB,OAAA,EAAS,EAAE,GAAG,KAAA,CAAM,SAAS,CAAC,GAAG,GAAG,QAAA,EAAS;AAAA,MAC7C,kBAAA,EAAoB,EAAE,GAAG,KAAA,CAAM,oBAAoB,CAAC,GAAG,GAAG,gBAAA,EAAiB;AAAA,MAC3E,IAAA,EAAM;AAAA,QACF,GAAG,KAAA,CAAM,IAAA;AAAA,QACT,CAAC,GAAG,GAAG,EAAE,kBAAkB,QAAA;AAAS;AACxC,KACH,CAAA;AAAA,EACL,CAAA;AAAA,EAEA,4BAA4B,mBAAA,EAA8B;AACtD,IAAA,MAAM,KAAA,GAAQ,iBAAiB,QAAA,EAAS;AAExC,IAAA,IAAI,CAAC,mBAAA,EAAqB;AACtB,MAAA,gBAAA,CAAiB,QAAA,CAAS,EAAE,kBAAA,EAAoB,IAAI,CAAA;AACpD,MAAA;AAAA,IACJ;AAEA,IAAA,MAAM,GAAA,GAAM,OAAO,mBAAmB,CAAA;AACtC,IAAA,MAAM,EAAE,CAAC,GAAG,GAAG,GAAG,GAAG,IAAA,KAAS,KAAA,CAAM,kBAAA;AACpC,IAAA,gBAAA,CAAiB,QAAA,CAAS,EAAE,kBAAA,EAAoB,IAAA,EAAM,CAAA;AAAA,EAC1D,CAAA;AAAA,EAEA,MAAM,yBAAA,CAA0B,QAAA,EAAe,KAAA,EAAa;AACxD,IAAA,MAAM,GAAA,GAAM,aAAa,KAAK,CAAA;AAC9B,IAAA,MAAM,KAAA,GAAQ,iBAAiB,QAAA,EAAS;AACxC,IAAA,MAAM,aAAA,GAAgB,KAAA,CAAM,OAAA,CAAQ,GAAG,CAAA;AACvC,IAAA,IAAI,IAAA,GAAc,KAAA,CAAM,kBAAA,CAAmB,GAAG,KAAK,EAAC;AAEpD,IAAA,IAAI,aAAA,EAAe,IAAA,EAAM,KAAA,GAAQ,CAAA,EAAG;AAChC,MAAA,IAAI,aAAa,SAAA,EAAW;AACxB,QAAA,MAAM,GAAA,GAAM,eAAe,IAAA,EAAM,OAAA,EAAS,QAAQ,MAAA,CAAO,CAAC,KAAU,IAAA,KAAc;AAC9E,UAAA,IAAI,CAAC,KAAK,MAAA,EAAQ;AACd,YAAA,GAAA,CAAI,IAAA,CAAK,GAAG,CAAA,GAAI,SAAA;AAAA,UACpB;AACA,UAAA,OAAO,GAAA;AAAA,QACX,CAAA,EAAG,EAAE,CAAA;AACL,QAAA,IAAA,GAAO,CAAC,GAAA,EAAK,GAAG,IAAI,CAAA;AAAA,MACxB,CAAA,MAAA,IAAW,UAAU,IAAA,EAAM;AACvB,QAAA,MAAM,OAAO,QAAA,EAAU,IAAA;AACvB,QAAA,IAAI,CAAC,IAAA,EAAM;AACP,UAAA,gBAAA,CAAiB,QAAA,CAAS;AAAA,YACtB,kBAAA,EAAoB,EAAE,GAAG,KAAA,CAAM,oBAAoB,CAAC,GAAG,GAAG,EAAC;AAAE,WAChE,CAAA;AACD,UAAA;AAAA,QACJ;AAEA,QAAA,MAAM,MAAM,MAAA,CAAO,WAAA,CAAY,OAAO,OAAA,CAAQ,IAAI,EAAE,GAAA,CAAI,CAAC,CAAC,CAAA,EAAG,KAAK,MAAW,CAAC,CAAA,EAAG,OAAO,KAAA,IAAS,KAAK,CAAC,CAAC,CAAA;AAExG,QAAA,IAAA,GAAO,CAAC,GAAG,IAAI,CAAA;AACf,QAAA,IAAI,IAAA,CAAK,SAAS,CAAA,EAAG;AACjB,UAAA,IAAA,CAAK,CAAC,CAAA,GAAI,GAAA;AAAA,QACd,CAAA,MAAO;AACH,UAAA,IAAA,CAAK,KAAK,GAAG,CAAA;AAAA,QACjB;AAAA,MACJ;AAAA,IACJ;AAEA,IAAA,gBAAA,CAAiB,QAAA,CAAS;AAAA,MACtB,kBAAA,EAAoB,EAAE,GAAG,KAAA,CAAM,oBAAoB,CAAC,GAAG,GAAG,IAAA;AAAK,KAClE,CAAA;AAAA,EACL;AACJ","file":"chunk-BGUHACLT.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-AVMMEQLO.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"]}