woodsportal-client-sdk 4.0.7-dev.9 → 4.0.8-dev.0
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.
- package/README.md +26 -0
- package/dist/adapters/angular/index.js +7 -5
- package/dist/adapters/angular/index.js.map +1 -1
- package/dist/adapters/native/index.d.ts +3 -0
- package/dist/adapters/native/index.js +11 -0
- package/dist/adapters/native/index.js.map +1 -0
- package/dist/adapters/react/index.d.ts +1 -1
- package/dist/adapters/react/index.js +8 -18
- package/dist/adapters/react/index.js.map +1 -1
- package/dist/adapters/vue/index.js +7 -5
- package/dist/adapters/vue/index.js.map +1 -1
- package/dist/auth-interceptor-policy-RGQ26NWR.js +6 -0
- package/dist/{auth-interceptor-policy-CKXBTGBT.js.map → auth-interceptor-policy-RGQ26NWR.js.map} +1 -1
- package/dist/auth-utils-T4FIBK3O.js +7 -0
- package/dist/{auth-utils-LT4JXJER.js.map → auth-utils-T4FIBK3O.js.map} +1 -1
- package/dist/{http-errors-CCCQECil.d.ts → build-error-description-DUXvNW7O.d.ts} +57 -6
- package/dist/{chunk-GKSO3757.js → chunk-5LISZE2R.js} +10 -6
- package/dist/chunk-5LISZE2R.js.map +1 -0
- package/dist/{chunk-Q7Y4HMVO.js → chunk-AVMMEQLO.js} +3 -3
- package/dist/{chunk-Q7Y4HMVO.js.map → chunk-AVMMEQLO.js.map} +1 -1
- package/dist/{chunk-WDCI5FXV.js → chunk-C73AH5CW.js} +173 -102
- package/dist/chunk-C73AH5CW.js.map +1 -0
- package/dist/chunk-DB6W3CJT.js +73 -0
- package/dist/chunk-DB6W3CJT.js.map +1 -0
- package/dist/{chunk-7AAQISX7.js → chunk-ETYE73AH.js} +35 -8
- package/dist/chunk-ETYE73AH.js.map +1 -0
- package/dist/{chunk-PRGN3FF6.js → chunk-JG3TEXWP.js} +7 -11
- package/dist/chunk-JG3TEXWP.js.map +1 -0
- package/dist/{chunk-6XIX6R4X.js → chunk-KPHAQNS2.js} +50 -5
- package/dist/chunk-KPHAQNS2.js.map +1 -0
- package/dist/{chunk-5NONTYJA.js → chunk-NDDE6ZZ3.js} +272 -86
- package/dist/chunk-NDDE6ZZ3.js.map +1 -0
- package/dist/{chunk-N7TNFXKZ.js → chunk-QXUSO7MR.js} +15 -9
- package/dist/chunk-QXUSO7MR.js.map +1 -0
- package/dist/{chunk-3YGYCBUT.js → chunk-VN6VPM5C.js} +4 -4
- package/dist/{chunk-3YGYCBUT.js.map → chunk-VN6VPM5C.js.map} +1 -1
- package/dist/chunk-YJOQG7DQ.js +1272 -0
- package/dist/chunk-YJOQG7DQ.js.map +1 -0
- package/dist/chunk-ZEGKRQA4.js +16 -0
- package/dist/chunk-ZEGKRQA4.js.map +1 -0
- package/dist/cross-tab-session-B34BLQU4.js +11 -0
- package/dist/{cross-tab-session-2HVBZQD3.js.map → cross-tab-session-B34BLQU4.js.map} +1 -1
- package/dist/entries/auth.d.ts +4 -3
- package/dist/entries/auth.js +9 -8
- package/dist/entries/auth.js.map +1 -1
- package/dist/entries/crm.d.ts +3 -3
- package/dist/entries/crm.js +10 -9
- package/dist/entries/crm.js.map +1 -1
- package/dist/{index-Bh9eY8sA.d.ts → index-DhoGEpj3.d.ts} +9 -1
- package/dist/index.d.ts +44 -7
- package/dist/index.js +70 -17
- package/dist/index.js.map +1 -1
- package/dist/{pipeline-ui-DbEzI_v1.d.ts → pipeline-ui-Bdrqupf0.d.ts} +2 -2
- package/dist/storage-migration-2PF52ZSB.js +4 -0
- package/dist/{storage-migration-2NVJ3GNQ.js.map → storage-migration-2PF52ZSB.js.map} +1 -1
- package/package.json +6 -1
- package/dist/auth-interceptor-policy-CKXBTGBT.js +0 -5
- package/dist/auth-utils-LT4JXJER.js +0 -5
- package/dist/chunk-5NONTYJA.js.map +0 -1
- package/dist/chunk-6XIX6R4X.js.map +0 -1
- package/dist/chunk-7AAQISX7.js.map +0 -1
- package/dist/chunk-GKSO3757.js.map +0 -1
- package/dist/chunk-N7TNFXKZ.js.map +0 -1
- package/dist/chunk-PRGN3FF6.js.map +0 -1
- package/dist/chunk-WDCI5FXV.js.map +0 -1
- package/dist/chunk-YKYHYW5F.js +0 -737
- package/dist/chunk-YKYHYW5F.js.map +0 -1
- package/dist/cross-tab-session-2HVBZQD3.js +0 -9
- package/dist/storage-migration-2NVJ3GNQ.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-
|
|
3
|
-
import '../../chunk-
|
|
4
|
-
import '../../chunk-
|
|
5
|
-
import '../../chunk-
|
|
6
|
-
import '../../chunk-
|
|
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';
|
|
7
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":"
|
|
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,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 {
|
|
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
|
-
|
|
2
|
-
import '../../chunk-
|
|
3
|
-
import '../../chunk-
|
|
4
|
-
import '../../chunk-
|
|
5
|
-
import '../../chunk-
|
|
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';
|
|
6
8
|
import '../../chunk-UDAPRD7Z.js';
|
|
7
|
-
import
|
|
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 };
|
|
9
|
+
import '../../chunk-COHBSTHF.js';
|
|
20
10
|
//# sourceMappingURL=index.js.map
|
|
21
11
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":[
|
|
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-
|
|
3
|
-
import '../../chunk-
|
|
4
|
-
import '../../chunk-
|
|
5
|
-
import '../../chunk-
|
|
6
|
-
import '../../chunk-
|
|
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';
|
|
7
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":"
|
|
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
|
package/dist/{auth-interceptor-policy-CKXBTGBT.js.map → auth-interceptor-policy-RGQ26NWR.js.map}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":[],"names":[],"mappings":"","file":"auth-interceptor-policy-
|
|
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-
|
|
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,
|
|
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-DhoGEpj3.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
|
-
|
|
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,7 +1,7 @@
|
|
|
1
|
-
import { multiObjectStore } from './chunk-
|
|
2
|
-
import { actions2, tableStore, tableUiStore, noteStore, emailStore, userStore, syncStore, formStore, fileStore } from './chunk-
|
|
3
|
-
import { clearAccessToken, resetSessionAuthState, clearSessionRefreshExhaustedState } from './chunk-
|
|
4
|
-
import { clearClientAuthCookies, clearClientIframeRefreshLocalKeys } from './chunk-
|
|
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
5
|
import { WP_STORAGE_KEYS } from './chunk-UDAPRD7Z.js';
|
|
6
6
|
|
|
7
7
|
// src/main/core/http/session-teardown.ts
|
|
@@ -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-
|
|
163
|
-
//# sourceMappingURL=chunk-
|
|
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":";;;;;;;AAkBO,SAAS,kBAAA,GAA2B;AACvC,EAAAA,QAAA,CAAa,qBAAA,EAAsB;AACnC,EAAA,UAAA,CAAW,QAAA,CAAS;AAAA,IAChB,WAAA,EAAa,IAAA;AAAA,IACb,yBAAyB,EAAC;AAAA,IAC1B,WAAA,EAAa,IAAA;AAAA,IACb,WAAW,EAAC;AAAA,IACZ,kBAAkB,EAAC;AAAA,IACnB,mBAAA,EAAqB,EAAA;AAAA,IACrB,gBAAA,EAAkB,EAAA;AAAA,IAClB,QAAA,EAAU;AAAA,GACb,CAAA;AACD,EAAA,YAAA,CAAa,QAAA,CAAS;AAAA,IAClB,aAAA,EAAe,IAAA;AAAA,IACf,UAAU,EAAC;AAAA,IACX,IAAA,EAAM,gBAAA;AAAA,IACN,KAAA,EAAO,EAAA;AAAA,IACP,KAAA,EAAO,EAAA;AAAA,IACP,IAAA,EAAM,CAAA;AAAA,IACN,QAAA,EAAU,CAAA;AAAA,IACV,OAAA,EAAS,EAAA;AAAA,IACT,UAAA,EAAY,CAAA;AAAA,IACZ,UAAA,EAAY,CAAA;AAAA,IACZ,WAAA,EAAa,CAAA;AAAA,IACb,MAAA,EAAQ,EAAA;AAAA,IACR,kBAAA,EAAoB,aAAA;AAAA,IACpB,cAAA,EAAgB,IAAA;AAAA,IAChB,WAAA,EAAa,EAAA;AAAA,IACb,gBAAA,EAAkB,IAAA;AAAA,IAClB,IAAA,EAAM,IAAA;AAAA,IACN,gBAAA,EAAkB,EAAA;AAAA,IAClB,YAAY,EAAC;AAAA,IACb,qBAAqB;AAAC,GACzB,CAAA;AACD,EAAA,SAAA,CAAU,QAAA,CAAS,EAAE,KAAA,EAAO,EAAC,EAAG,YAAA,EAAc,EAAC,EAAG,EAAA,EAAI,EAAA,EAAI,WAAA,EAAa,IAAA,EAAM,CAAA;AAC7E,EAAA,UAAA,CAAW,QAAA,CAAS,EAAE,MAAA,EAAQ,EAAC,EAAG,aAAA,EAAe,EAAC,EAAG,EAAA,EAAI,EAAA,EAAI,WAAA,EAAa,IAAA,EAAM,CAAA;AAChF,EAAA,SAAA,CAAU,QAAA,CAAS,EAAE,OAAA,EAAS,IAAA,EAAM,CAAA;AACpC,EAAA,SAAA,CAAU,QAAA,CAAS;AAAA,IACf,OAAA,EAAS,KAAA;AAAA,IACT,IAAA,EAAM,KAAA;AAAA,IACN,aAAA,EAAe,KAAA;AAAA,IACf,aAAA,EAAe;AAAA,GAClB,CAAA;AACD,EAAA,SAAA,CAAU,QAAA,CAAS,EAAE,IAAA,EAAM,IAAA,EAAM,CAAA;AACjC,EAAA,SAAA,CAAU,QAAA,CAAS,EAAE,KAAA,EAAO,IAAA,EAAM,IAAI,EAAA,EAAI,WAAA,EAAa,MAAM,CAAA;AAC7D,EAAA,gBAAA,CAAiB,QAAA,CAAS,EAAE,OAAA,EAAS,EAAC,EAAG,kBAAA,EAAoB,EAAC,EAAG,IAAA,EAAM,EAAC,EAAG,CAAA;AAC/E;AAMO,SAAS,qBAAA,GAA8B;AAC1C,EAAA,uBAAA,EAAwB;AACxB,EAAA,sBAAA,EAAuB;AACvB,EAAA,iCAAA,EAAkC;AAClC,EAAA,gBAAA,EAAiB;AACjB,EAAA,kBAAA,EAAmB;AACnB,EAAA,qBAAA,EAAsB;AACtB,EAAA,iCAAA,EAAkC;AACtC;;;ACzEA,IAAM,OAAA,GAAU,eAAA,CAAgB,CAAA,CAAE,IAAA,CAAK,GAAA;AACvC,IAAM,YAAA,GAAe,0BAAA;AAIrB,SAAS,cAAA,GAAuB;AAC5B,EAAA,IAAI,OAAO,MAAA,KAAW,WAAA,IAAe,CAAC,OAAO,YAAA,EAAc;AACvD,IAAA;AAAA,EACJ;AACA,EAAA,IAAI;AACA,IAAA,MAAA,CAAO,aAAa,OAAA,CAAQ,OAAA,EAAS,OAAO,IAAA,CAAK,GAAA,EAAK,CAAC,CAAA;AAAA,EAC3D,CAAA,CAAA,MAAQ;AAAA,EAER;AACJ;AAEA,SAAS,mBAAA,GAA+C;AACpD,EAAA,IAAI,OAAO,qBAAqB,WAAA,EAAa;AACzC,IAAA,OAAO,IAAA;AAAA,EACX;AACA,EAAA,IAAI;AACA,IAAA,OAAO,IAAI,iBAAiB,YAAY,CAAA;AAAA,EAC5C,CAAA,CAAA,MAAQ;AACJ,IAAA,OAAO,IAAA;AAAA,EACX;AACJ;AAGO,SAAS,oBAAA,CAAqB,OAAwB,KAAA,EAAa;AACtE,EAAA,cAAA,EAAe;AACf,EAAA,MAAM,UAAU,mBAAA,EAAoB;AACpC,EAAA,IAAI,OAAA,EAAS;AACT,IAAA,MAAM,UAA8B,EAAE,IAAA,EAAM,MAAM,EAAA,EAAI,IAAA,CAAK,KAAI,EAAE;AACjE,IAAA,OAAA,CAAQ,YAAY,OAAO,CAAA;AAC3B,IAAA,OAAA,CAAQ,KAAA,EAAM;AAAA,EAClB;AACJ;AAIA,IAAI,iBAAA,GAAoB,KAAA;AACxB,IAAI,gBAAA,GAA4C,IAAA;AAChD,IAAM,SAAA,uBAAgB,GAAA,EAAyB;AAE/C,SAAS,SAAS,IAAA,EAA6B;AAC3C,EAAA,SAAA,CAAU,OAAA,CAAQ,CAAC,EAAA,KAAO;AACtB,IAAA,IAAI;AACA,MAAA,EAAA,CAAG,IAAI,CAAA;AAAA,IACX,CAAA,CAAA,MAAQ;AAAA,IAER;AAAA,EACJ,CAAC,CAAA;AACL;AAEA,SAAS,0BAA0B,IAAA,EAA6B;AAC5D,EAAA,IAAI,SAAS,KAAA,EAAO;AAChB,IAAA,gBAAA,EAAiB;AAAA,EACrB;AACA,EAAA,QAAA,CAAS,IAAI,CAAA;AACjB;AAMO,SAAS,+BAA+B,QAAA,EAA4C;AACvF,EAAA,IAAI,aAAA,OAAoB,QAAA,EAAU;AAC9B,IAAA,OAAO,MAAM,MAAA;AAAA,EACjB;AAEA,EAAA,IAAI,OAAO,WAAW,WAAA,EAAa;AAC/B,IAAA,OAAO,MAAM,MAAA;AAAA,EACjB;AAEA,EAAA,IAAI,QAAA,EAAU;AACV,IAAA,SAAA,CAAU,IAAI,QAAQ,CAAA;AAAA,EAC1B;AAEA,EAAA,IAAI,CAAC,iBAAA,EAAmB;AACpB,IAAA,iBAAA,GAAoB,IAAA;AAEpB,IAAA,MAAA,CAAO,gBAAA,CAAiB,SAAA,EAAW,CAAC,KAAA,KAAU;AAC1C,MAAA,IAAI,KAAA,CAAM,GAAA,KAAQ,OAAA,IAAW,KAAA,CAAM,YAAY,IAAA,EAAM;AACjD,QAAA;AAAA,MACJ;AACA,MAAA,yBAAA,CAA0B,KAAK,CAAA;AAAA,IACnC,CAAC,CAAA;AAED,IAAA,IAAI;AACA,MAAA,gBAAA,EAAkB,KAAA,EAAM;AACxB,MAAA,gBAAA,GAAmB,IAAI,iBAAiB,YAAY,CAAA;AACpD,MAAA,gBAAA,CAAiB,SAAA,GAAY,CAAC,KAAA,KAA4C;AACtE,QAAA,MAAM,IAAA,GAAO,KAAA,CAAM,IAAA,EAAM,IAAA,KAAS,UAAU,OAAA,GAAU,KAAA;AACtD,QAAA,yBAAA,CAA0B,IAAI,CAAA;AAAA,MAClC,CAAA;AAAA,IACJ,CAAA,CAAA,MAAQ;AAAA,IAER;AAEA,IAAA,MAAA,CAAO,gBAAA,CAAiB,UAAA,EAAY,CAAC,KAAA,KAAU;AAC3C,MAAA,IAAI,MAAM,SAAA,EAAW;AACjB,QAAA,yBAAA,CAA0B,KAAK,CAAA;AAAA,MACnC;AAAA,IACJ,CAAC,CAAA;AAAA,EACL;AAEA,EAAA,OAAO,MAAM;AACT,IAAA,IAAI,QAAA,EAAU;AACV,MAAA,SAAA,CAAU,OAAO,QAAQ,CAAA;AAAA,IAC7B;AAAA,EACJ,CAAA;AACJ;AAGO,SAAS,8BAAA,GAAuC;AACnD,EAAA,qBAAA,EAAsB;AAC1B;AAGO,SAAS,gCAAA,GAAyC;AACrD,EAAA,IAAI;AACA,IAAA,gBAAA,EAAkB,KAAA,EAAM;AAAA,EAC5B,CAAA,CAAA,MAAQ;AAAA,EAER;AACA,EAAA,gBAAA,GAAmB,IAAA;AACnB,EAAA,iBAAA,GAAoB,KAAA;AACpB,EAAA,SAAA,CAAU,KAAA,EAAM;AACpB","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-
|
|
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-
|
|
95
|
-
//# sourceMappingURL=chunk-
|
|
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":"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","file":"chunk-
|
|
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"]}
|