woodsportal-client-sdk 4.0.8-dev.0 → 4.0.8-dev.2
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/dist/adapters/angular/index.js +4 -4
- package/dist/adapters/native/index.js +5 -5
- package/dist/adapters/react/index.js +5 -5
- package/dist/adapters/vue/index.js +4 -4
- package/dist/{auth-utils-T4FIBK3O.js → auth-utils-E4QDYAEW.js} +3 -3
- package/dist/{auth-utils-T4FIBK3O.js.map → auth-utils-E4QDYAEW.js.map} +1 -1
- package/dist/{build-error-description-DUXvNW7O.d.ts → build-error-description-DME5DFxq.d.ts} +13 -2
- package/dist/{chunk-VN6VPM5C.js → chunk-4RLRHJCP.js} +4 -4
- package/dist/{chunk-VN6VPM5C.js.map → chunk-4RLRHJCP.js.map} +1 -1
- package/dist/{chunk-NDDE6ZZ3.js → chunk-56UA4D6A.js} +43 -7
- package/dist/chunk-56UA4D6A.js.map +1 -0
- package/dist/{chunk-QXUSO7MR.js → chunk-5AXLES56.js} +5 -5
- package/dist/{chunk-QXUSO7MR.js.map → chunk-5AXLES56.js.map} +1 -1
- package/dist/{chunk-AVMMEQLO.js → chunk-6TX7N56D.js} +3 -3
- package/dist/{chunk-AVMMEQLO.js.map → chunk-6TX7N56D.js.map} +1 -1
- package/dist/{chunk-C73AH5CW.js → chunk-B7ILWTB7.js} +16 -7
- package/dist/chunk-B7ILWTB7.js.map +1 -0
- package/dist/{chunk-YJOQG7DQ.js → chunk-BAESH6E2.js} +5 -5
- package/dist/{chunk-YJOQG7DQ.js.map → chunk-BAESH6E2.js.map} +1 -1
- package/dist/{chunk-ZEGKRQA4.js → chunk-F4QIIWJR.js} +3 -3
- package/dist/{chunk-ZEGKRQA4.js.map → chunk-F4QIIWJR.js.map} +1 -1
- package/dist/{chunk-5LISZE2R.js → chunk-LV4CHY5C.js} +5 -5
- package/dist/{chunk-5LISZE2R.js.map → chunk-LV4CHY5C.js.map} +1 -1
- package/dist/{chunk-ETYE73AH.js → chunk-YZIKCAPA.js} +3 -3
- package/dist/{chunk-ETYE73AH.js.map → chunk-YZIKCAPA.js.map} +1 -1
- package/dist/{cross-tab-session-B34BLQU4.js → cross-tab-session-HGVBEJCJ.js} +6 -6
- package/dist/{cross-tab-session-B34BLQU4.js.map → cross-tab-session-HGVBEJCJ.js.map} +1 -1
- package/dist/entries/auth.d.ts +3 -3
- package/dist/entries/auth.js +5 -5
- package/dist/entries/auth.js.map +1 -1
- package/dist/entries/crm.d.ts +3 -3
- package/dist/entries/crm.js +7 -7
- package/dist/{index-DhoGEpj3.d.ts → index-B-IGDI9L.d.ts} +2 -1
- package/dist/index.d.ts +6 -6
- package/dist/index.js +12 -12
- package/dist/index.js.map +1 -1
- package/dist/{pipeline-ui-Bdrqupf0.d.ts → pipeline-ui-COO9b3x2.d.ts} +1 -1
- package/package.json +1 -1
- package/dist/chunk-C73AH5CW.js.map +0 -1
- package/dist/chunk-NDDE6ZZ3.js.map +0 -1
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { bindStoreWithActions } from '../../chunk-AYTO6ND7.js';
|
|
2
|
-
import { createAdapterHooks } from '../../chunk-
|
|
3
|
-
import '../../chunk-
|
|
4
|
-
import '../../chunk-
|
|
5
|
-
import '../../chunk-
|
|
2
|
+
import { createAdapterHooks } from '../../chunk-4RLRHJCP.js';
|
|
3
|
+
import '../../chunk-6TX7N56D.js';
|
|
4
|
+
import '../../chunk-YZIKCAPA.js';
|
|
5
|
+
import '../../chunk-56UA4D6A.js';
|
|
6
6
|
import '../../chunk-KPHAQNS2.js';
|
|
7
7
|
import '../../chunk-DB6W3CJT.js';
|
|
8
8
|
import '../../chunk-UDAPRD7Z.js';
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
export { useTable, useTableUi, useUser } from '../../chunk-
|
|
2
|
-
import '../../chunk-
|
|
3
|
-
import '../../chunk-
|
|
4
|
-
import '../../chunk-
|
|
5
|
-
import '../../chunk-
|
|
1
|
+
export { useTable, useTableUi, useUser } from '../../chunk-F4QIIWJR.js';
|
|
2
|
+
import '../../chunk-4RLRHJCP.js';
|
|
3
|
+
import '../../chunk-6TX7N56D.js';
|
|
4
|
+
import '../../chunk-YZIKCAPA.js';
|
|
5
|
+
import '../../chunk-56UA4D6A.js';
|
|
6
6
|
import '../../chunk-KPHAQNS2.js';
|
|
7
7
|
import '../../chunk-DB6W3CJT.js';
|
|
8
8
|
import '../../chunk-UDAPRD7Z.js';
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
export { useEmail, useFile, useMultiObjectActions, useNote, useSync, useTable, useTableUi, useUploader, useUser } from '../../chunk-
|
|
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-F4QIIWJR.js';
|
|
2
|
+
import '../../chunk-4RLRHJCP.js';
|
|
3
|
+
import '../../chunk-6TX7N56D.js';
|
|
4
|
+
import '../../chunk-YZIKCAPA.js';
|
|
5
|
+
import '../../chunk-56UA4D6A.js';
|
|
6
6
|
import '../../chunk-KPHAQNS2.js';
|
|
7
7
|
import '../../chunk-DB6W3CJT.js';
|
|
8
8
|
import '../../chunk-UDAPRD7Z.js';
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { bindStoreWithActions } from '../../chunk-AYTO6ND7.js';
|
|
2
|
-
import { createAdapterHooks } from '../../chunk-
|
|
3
|
-
import '../../chunk-
|
|
4
|
-
import '../../chunk-
|
|
5
|
-
import '../../chunk-
|
|
2
|
+
import { createAdapterHooks } from '../../chunk-4RLRHJCP.js';
|
|
3
|
+
import '../../chunk-6TX7N56D.js';
|
|
4
|
+
import '../../chunk-YZIKCAPA.js';
|
|
5
|
+
import '../../chunk-56UA4D6A.js';
|
|
6
6
|
import '../../chunk-KPHAQNS2.js';
|
|
7
7
|
import '../../chunk-DB6W3CJT.js';
|
|
8
8
|
import '../../chunk-UDAPRD7Z.js';
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
export { clearAdapterSessionData, clearRefreshToken, getPortal, getProfile, getRefreshToken, getSubscriptionType, setAccessToken, setLoggedInDetails, setPortal, setProfileDetails, setRefreshToken, setSubscriptionType } from './chunk-
|
|
1
|
+
export { clearAdapterSessionData, clearRefreshToken, getPortal, getProfile, getRefreshToken, getSubscriptionType, setAccessToken, setLoggedInDetails, setPortal, setProfileDetails, setRefreshToken, setSubscriptionType } from './chunk-56UA4D6A.js';
|
|
2
2
|
import './chunk-KPHAQNS2.js';
|
|
3
3
|
import './chunk-DB6W3CJT.js';
|
|
4
4
|
import './chunk-UDAPRD7Z.js';
|
|
5
5
|
import './chunk-COHBSTHF.js';
|
|
6
|
-
//# sourceMappingURL=auth-utils-
|
|
7
|
-
//# sourceMappingURL=auth-utils-
|
|
6
|
+
//# sourceMappingURL=auth-utils-E4QDYAEW.js.map
|
|
7
|
+
//# sourceMappingURL=auth-utils-E4QDYAEW.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":[],"names":[],"mappings":"","file":"auth-utils-
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"auth-utils-E4QDYAEW.js"}
|
package/dist/{build-error-description-DUXvNW7O.d.ts → build-error-description-DME5DFxq.d.ts}
RENAMED
|
@@ -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, d as ForgetPasswordOtpVerifyResponse, b as ForgetPasswordOtpVerifyPayload, R as ResetPasswordPayload, a as ResetPasswordVerifyTokenPayload } from './index-
|
|
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';
|
|
@@ -781,6 +781,17 @@ declare function classifyHttpError(error: unknown): HttpErrorKind;
|
|
|
781
781
|
declare function isServiceUnavailableError(error: unknown): boolean;
|
|
782
782
|
declare function getHttpErrorMessage(error: unknown): string;
|
|
783
783
|
|
|
784
|
+
declare class SessionRefreshDeferredError extends Error {
|
|
785
|
+
readonly failureKind: RefreshFailureKind | undefined;
|
|
786
|
+
constructor(failureKind?: RefreshFailureKind, cause?: unknown);
|
|
787
|
+
}
|
|
788
|
+
declare class SessionRefreshFailedError extends Error {
|
|
789
|
+
readonly failureKind: RefreshFailureKind | undefined;
|
|
790
|
+
constructor(failureKind?: RefreshFailureKind, cause?: unknown);
|
|
791
|
+
}
|
|
792
|
+
declare function isSessionRefreshDeferredError(error: unknown): error is SessionRefreshDeferredError;
|
|
793
|
+
declare function isSessionRefreshFailedError(error: unknown): error is SessionRefreshFailedError;
|
|
794
|
+
|
|
784
795
|
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
796
|
type ApiErrorSeverity = 'informational' | 'recoverable' | 'auth' | 'fatal';
|
|
786
797
|
|
|
@@ -823,4 +834,4 @@ declare function buildErrorDescription({ errorMessage, detailedMessage, fallback
|
|
|
823
834
|
errorCode?: string;
|
|
824
835
|
}): string;
|
|
825
836
|
|
|
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,
|
|
837
|
+
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, getHttpErrorMessage 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, SessionRefreshDeferredError as aO, SessionRefreshFailedError as aP, type StoredAuthError as aQ, type TwoFaVerificationRequest as aR, type UnauthorizedPageCopy as aS, WOODSPORTAL_API_ACTIVE_ERROR_CODES as aT, type WoodsportalRequestConfig as aU, buildErrorDescription as aV, classifyHttpError as aW, clearMfaPendingAccessToken as aX, getApiErrorFromUnknown as aY, getFieldErrors as aZ, getFormErrors 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, getUnauthorizedPageCopy as b0, hasAuthenticatedAccess as b1, hasValidAccess as b2, hydrateMfaPendingAccessToken as b3, initializeHttpClient as b4, isFullyAuthenticated as b5, isMfaPendingAccessSession as b6, isMfaPendingSession as b7, isOptionalAuthFailureUrl as b8, isServiceUnavailableError as b9, type TotpEnrollVerifyRequest as bA, type TotpDisableRequest as bB, type PhoneUnverifyRequest as bC, type BackupCodesRegenerateRequest as bD, type MfaBackupCodesResponse as bE, type MfaOptOutRequest as bF, type WebAuthnVerifyRequest as bG, type PasskeyLoginOptionsRequest as bH, type PasskeyLoginVerifyRequest as bI, type SecurityOverviewQuery as bJ, type SecurityLoginActivityQuery as bK, type SecuritySessionsQuery as bL, type RevokeSecuritySessionPayload as bM, type LogLevel as bN, type StorageKeyConfig as bO, configureStorageKeys as bP, getStorageKeys as bQ, resetStorageKeysForTests as bR, isSessionProbeUrl as ba, isSessionRefreshDeferredError as bb, isSessionRefreshFailedError as bc, parseApiErrorPayload as bd, persistAuthError as be, readMfaPendingAccessToken as bf, readPersistedAuthError as bg, recoverMfaGateOnBoot as bh, resolveApiErrorDisplay as bi, resolveAuthErrorAction as bj, resolveAuthRouteAction as bk, setEditorPreviewMockHandler as bl, setSessionLifecycleListener as bm, startVisibilityRefreshScheduler as bn, stopVisibilityRefreshScheduler as bo, storeMfaPendingAccessToken as bp, type ApiContentVariant as bq, type ApiErrorSeverity as br, type LoggerConfig as bs, type MfaOtpSendRequest as bt, type MfaPendingPasskeyOptionsRequest as bu, type MfaPendingPasskeyVerifyRequest as bv, type MfaStatusQuery as bw, type MfaPreferenceRequest as bx, type PhoneVerifyStartRequest as by, type PhoneVerifyConfirmRequest 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,5 +1,5 @@
|
|
|
1
|
-
import { multiObjectStore, actions } from './chunk-
|
|
2
|
-
import { fileStore, actions7, uploaderStore, actions3, syncStore, actions8, userStore, actions6, emailStore, actions5, noteStore, actions4, tableUiStore, tableUiActions, tableStore, actions2 } from './chunk-
|
|
1
|
+
import { multiObjectStore, actions } from './chunk-6TX7N56D.js';
|
|
2
|
+
import { fileStore, actions7, uploaderStore, actions3, syncStore, actions8, userStore, actions6, emailStore, actions5, noteStore, actions4, tableUiStore, tableUiActions, tableStore, actions2 } from './chunk-YZIKCAPA.js';
|
|
3
3
|
|
|
4
4
|
// src/main/adapters/shared/createAdapterHooks.ts
|
|
5
5
|
function createAdapterHooks(createComposable) {
|
|
@@ -17,5 +17,5 @@ function createAdapterHooks(createComposable) {
|
|
|
17
17
|
}
|
|
18
18
|
|
|
19
19
|
export { createAdapterHooks };
|
|
20
|
-
//# sourceMappingURL=chunk-
|
|
21
|
-
//# sourceMappingURL=chunk-
|
|
20
|
+
//# sourceMappingURL=chunk-4RLRHJCP.js.map
|
|
21
|
+
//# sourceMappingURL=chunk-4RLRHJCP.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/main/adapters/shared/createAdapterHooks.ts"],"names":["actions"],"mappings":";;;;AAmCO,SAAS,mBAAmB,gBAAA,EAAqC;AACpE,EAAA,OAAO;AAAA,IACH,QAAA,EAAU,gBAAA,CAAkD,UAAA,EAAYA,QAAY,CAAA;AAAA,IACpF,UAAA,EAAY,gBAAA,CAAsD,YAAA,EAAc,cAAc,CAAA;AAAA,IAC9F,qBAAA,EAAuB,gBAAA,CAAiB,gBAAA,EAAkBA,OAAkB,CAAA;AAAA,IAC5E,OAAA,EAAS,gBAAA,CAAgD,SAAA,EAAWA,QAAW,CAAA;AAAA,IAC/E,QAAA,EAAU,gBAAA,CAAkD,UAAA,EAAYA,QAAY,CAAA;AAAA,IACpF,OAAA,EAAS,gBAAA,CAAgD,SAAA,EAAWA,QAAW,CAAA;AAAA,IAC/E,OAAA,EAAS,gBAAA,CAAgD,SAAA,EAAWA,QAAW,CAAA;AAAA,IAC/E,WAAA,EAAa,gBAAA,CAAwD,aAAA,EAAeA,QAAe,CAAA;AAAA,IACnG,OAAA,EAAS,gBAAA,CAAgD,SAAA,EAAWA,QAAW;AAAA,GACnF;AACJ","file":"chunk-
|
|
1
|
+
{"version":3,"sources":["../src/main/adapters/shared/createAdapterHooks.ts"],"names":["actions"],"mappings":";;;;AAmCO,SAAS,mBAAmB,gBAAA,EAAqC;AACpE,EAAA,OAAO;AAAA,IACH,QAAA,EAAU,gBAAA,CAAkD,UAAA,EAAYA,QAAY,CAAA;AAAA,IACpF,UAAA,EAAY,gBAAA,CAAsD,YAAA,EAAc,cAAc,CAAA;AAAA,IAC9F,qBAAA,EAAuB,gBAAA,CAAiB,gBAAA,EAAkBA,OAAkB,CAAA;AAAA,IAC5E,OAAA,EAAS,gBAAA,CAAgD,SAAA,EAAWA,QAAW,CAAA;AAAA,IAC/E,QAAA,EAAU,gBAAA,CAAkD,UAAA,EAAYA,QAAY,CAAA;AAAA,IACpF,OAAA,EAAS,gBAAA,CAAgD,SAAA,EAAWA,QAAW,CAAA;AAAA,IAC/E,OAAA,EAAS,gBAAA,CAAgD,SAAA,EAAWA,QAAW,CAAA;AAAA,IAC/E,WAAA,EAAa,gBAAA,CAAwD,aAAA,EAAeA,QAAe,CAAA;AAAA,IACnG,OAAA,EAAS,gBAAA,CAAgD,SAAA,EAAWA,QAAW;AAAA,GACnF;AACJ","file":"chunk-4RLRHJCP.js","sourcesContent":["import type { SubscribableStore } from './bindStoreWithActions'\nimport {\n tableStore,\n tableActions,\n type TableState,\n tableUiStore,\n tableUiActions,\n type TableUiState,\n multiObjectStore,\n multiObjectActions,\n noteStore,\n noteActions,\n type NoteState,\n emailStore,\n emailActions,\n type EmailState,\n userStore,\n userActions,\n type UserState,\n syncStore,\n syncActions,\n type SyncState,\n uploaderStore,\n uploaderActions,\n type UploaderState,\n fileStore,\n fileActions,\n type FileState\n} from './stores'\n\ntype ComposableFactory = <TState extends object, TActions extends object>(\n store: SubscribableStore<TState>,\n actions: TActions\n) => () => TState & TActions\n\nexport function createAdapterHooks(createComposable: ComposableFactory) {\n return {\n useTable: createComposable<TableState, typeof tableActions>(tableStore, tableActions),\n useTableUi: createComposable<TableUiState, typeof tableUiActions>(tableUiStore, tableUiActions),\n useMultiObjectActions: createComposable(multiObjectStore, multiObjectActions),\n useNote: createComposable<NoteState, typeof noteActions>(noteStore, noteActions),\n useEmail: createComposable<EmailState, typeof emailActions>(emailStore, emailActions),\n useUser: createComposable<UserState, typeof userActions>(userStore, userActions),\n useSync: createComposable<SyncState, typeof syncActions>(syncStore, syncActions),\n useUploader: createComposable<UploaderState, typeof uploaderActions>(uploaderStore, uploaderActions),\n useFile: createComposable<FileState, typeof fileActions>(fileStore, fileActions)\n }\n}\n"]}
|
|
@@ -449,7 +449,7 @@ function classifyHttpError(error) {
|
|
|
449
449
|
if (error.code === "ECONNABORTED" || error.message.toLowerCase().includes("timeout")) {
|
|
450
450
|
return "timeout";
|
|
451
451
|
}
|
|
452
|
-
if (error.code === "ERR_NETWORK" || error.message === "Network Error") {
|
|
452
|
+
if (error.code === "ERR_NETWORK" || error.code === "ECONNREFUSED" || error.message === "Network Error" || error.message.includes("ERR_CONNECTION_REFUSED")) {
|
|
453
453
|
return "service_unavailable";
|
|
454
454
|
}
|
|
455
455
|
return "network";
|
|
@@ -546,6 +546,42 @@ function shouldLogoutAfterRefreshFailure(kind) {
|
|
|
546
546
|
return kind === "auth_invalid" || kind === "missing_refresh_token";
|
|
547
547
|
}
|
|
548
548
|
|
|
549
|
+
// src/main/core/http/session-refresh-errors.ts
|
|
550
|
+
var SessionRefreshDeferredError = class extends Error {
|
|
551
|
+
failureKind;
|
|
552
|
+
constructor(failureKind, cause) {
|
|
553
|
+
super("Session refresh deferred");
|
|
554
|
+
this.name = "SessionRefreshDeferredError";
|
|
555
|
+
this.failureKind = failureKind;
|
|
556
|
+
if (cause !== void 0) {
|
|
557
|
+
this.cause = cause;
|
|
558
|
+
}
|
|
559
|
+
}
|
|
560
|
+
};
|
|
561
|
+
var SessionRefreshFailedError = class extends Error {
|
|
562
|
+
failureKind;
|
|
563
|
+
constructor(failureKind, cause) {
|
|
564
|
+
super("Session refresh failed");
|
|
565
|
+
this.name = "SessionRefreshFailedError";
|
|
566
|
+
this.failureKind = failureKind;
|
|
567
|
+
if (cause !== void 0) {
|
|
568
|
+
this.cause = cause;
|
|
569
|
+
}
|
|
570
|
+
}
|
|
571
|
+
};
|
|
572
|
+
function isSessionRefreshDeferredError(error) {
|
|
573
|
+
if (error instanceof SessionRefreshDeferredError) {
|
|
574
|
+
return true;
|
|
575
|
+
}
|
|
576
|
+
return error instanceof Error && error.message === "Session refresh deferred";
|
|
577
|
+
}
|
|
578
|
+
function isSessionRefreshFailedError(error) {
|
|
579
|
+
if (error instanceof SessionRefreshFailedError) {
|
|
580
|
+
return true;
|
|
581
|
+
}
|
|
582
|
+
return error instanceof Error && error.message === "Session refresh failed";
|
|
583
|
+
}
|
|
584
|
+
|
|
549
585
|
// src/main/core/http/token-store.ts
|
|
550
586
|
var accessToken = null;
|
|
551
587
|
var tokenExpiresAt = null;
|
|
@@ -691,7 +727,7 @@ async function refreshSession(options = {}) {
|
|
|
691
727
|
if (!refreshPromise) {
|
|
692
728
|
refreshPromise = (async () => {
|
|
693
729
|
await withRefreshLock(async () => {
|
|
694
|
-
const { getRefreshToken: getRefreshToken2 } = await import('./auth-utils-
|
|
730
|
+
const { getRefreshToken: getRefreshToken2 } = await import('./auth-utils-E4QDYAEW.js');
|
|
695
731
|
const refreshToken = getRefreshToken2();
|
|
696
732
|
if (!refreshToken) {
|
|
697
733
|
markRefreshFailed();
|
|
@@ -723,9 +759,9 @@ async function refreshSession(options = {}) {
|
|
|
723
759
|
}
|
|
724
760
|
if (shouldLogoutAfterRefreshFailure(lastFailureKind)) {
|
|
725
761
|
markRefreshFailed();
|
|
726
|
-
throw new
|
|
762
|
+
throw new SessionRefreshFailedError(lastFailureKind);
|
|
727
763
|
}
|
|
728
|
-
throw new
|
|
764
|
+
throw new SessionRefreshDeferredError(lastFailureKind);
|
|
729
765
|
});
|
|
730
766
|
})().finally(() => {
|
|
731
767
|
refreshPromise = null;
|
|
@@ -978,6 +1014,6 @@ function clearAdapterSessionData() {
|
|
|
978
1014
|
}
|
|
979
1015
|
}
|
|
980
1016
|
|
|
981
|
-
export { DEV_API_URL, DEV_PORTAL_ID, HUBSPOT_DATA, HUB_ID, PORTAL_ID, SERVICE_UNAVAILABLE_MESSAGE, classifyHttpError, classifyRefreshHttpError, classifyRefreshResponseWithoutToken, clearAccessToken, clearAdapterSessionData, clearMfaPendingAccessToken, clearRefreshToken, clearSessionRefreshExhaustedState, config, configureLogger, didLastRefreshFail, ensureValidRefresh, getAccessToken, getHttpErrorMessage, getPortal, getProfile, getRefreshToken, getSubscriptionType, hasRefreshSession, hasValidAccessToken, hydrateMfaPendingAccessToken, hydrateSessionRefreshState, isAccessTokenExpired, isAuthenticateApp, isAuthenticated, isExpiresAccessToken, isHttpTracingEnabled, isMfaPendingAccessSession, isRefreshInFlight, isServiceUnavailableError, isSessionRefreshExhausted, logger, readMfaPendingAccessToken, refreshSession, resetSessionAuthState, sanitizeAxiosErrorData, setAccessToken, setConfig, setIframeStorageMode, setLoggedInDetails, setPortal, setProfileDetails, setRefreshBufferSeconds, setRefreshCallback, setRefreshToken, setRuntimeHttpClientHubContext, setSessionLifecycleListener, setSubscriptionType, shouldLogoutAfterRefreshFailure, storAccessToken, storage, storeMfaPendingAccessToken };
|
|
982
|
-
//# sourceMappingURL=chunk-
|
|
983
|
-
//# sourceMappingURL=chunk-
|
|
1017
|
+
export { DEV_API_URL, DEV_PORTAL_ID, HUBSPOT_DATA, HUB_ID, PORTAL_ID, SERVICE_UNAVAILABLE_MESSAGE, SessionRefreshDeferredError, SessionRefreshFailedError, classifyHttpError, classifyRefreshHttpError, classifyRefreshResponseWithoutToken, clearAccessToken, clearAdapterSessionData, clearMfaPendingAccessToken, clearRefreshToken, clearSessionRefreshExhaustedState, config, configureLogger, didLastRefreshFail, ensureValidRefresh, getAccessToken, getHttpErrorMessage, getPortal, getProfile, getRefreshToken, getSubscriptionType, hasRefreshSession, hasValidAccessToken, hydrateMfaPendingAccessToken, hydrateSessionRefreshState, isAccessTokenExpired, isAuthenticateApp, isAuthenticated, isExpiresAccessToken, isHttpTracingEnabled, isMfaPendingAccessSession, isRefreshInFlight, isServiceUnavailableError, isSessionRefreshDeferredError, isSessionRefreshExhausted, isSessionRefreshFailedError, logger, readMfaPendingAccessToken, refreshSession, resetSessionAuthState, sanitizeAxiosErrorData, setAccessToken, setConfig, setIframeStorageMode, setLoggedInDetails, setPortal, setProfileDetails, setRefreshBufferSeconds, setRefreshCallback, setRefreshToken, setRuntimeHttpClientHubContext, setSessionLifecycleListener, setSubscriptionType, shouldLogoutAfterRefreshFailure, storAccessToken, storage, storeMfaPendingAccessToken };
|
|
1018
|
+
//# sourceMappingURL=chunk-56UA4D6A.js.map
|
|
1019
|
+
//# sourceMappingURL=chunk-56UA4D6A.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/main/core/utils/constants.ts","../src/main/core/utils/localStorage.ts","../src/main/core/utils/runtime-hub-context.ts","../src/main/core/utils/hub-context.ts","../src/main/core/http/iframe-session-storage.ts","../src/main/core/utils/error-log-sanitize.ts","../src/main/core/logging/logger.ts","../src/main/core/auth/mfa-pending-token-storage.ts","../src/main/core/http/refresh-lock.ts","../src/main/core/http/http-errors.ts","../src/main/core/http/refresh-failure-policy.ts","../src/main/core/http/session-refresh-errors.ts","../src/main/core/http/token-store.ts","../src/main/core/http/auth-utils.ts"],"names":["axios","config","getRefreshToken"],"mappings":";;;;;;;AAG6B,eAAA,CAAgB,CAAA,CAAE,IAAA,CAAK;AACvB,eAAA,CAAgB,CAAA,CAAE,IAAA,CAAK;AAC9B,eAAA,CAAgB,CAAA,CAAE,IAAA,CAAK;AACZ,eAAA,CAAgB,CAAA,CAAE,IAAA,CAAK;AAGjD,IAAM,YAAA,GAAe,gBAAgB,CAAA,CAAE;AACvC,IAAM,MAAA,GAAS;AACf,IAAM,aAAA,GAAgB;AACtB,IAAM,SAAA,GAAY;AAClB,IAAM,WAAA,GAAc;;;ACP3B,IAAM,MAAA,uBAAa,GAAA,EAAoB;AAEvC,IAAM,WAAA,GAA2B;AAAA,EAC7B,QAAQ,GAAA,EAAa;AACjB,IAAA,OAAO,OAAO,GAAA,CAAI,GAAG,IAAI,MAAA,CAAO,GAAA,CAAI,GAAG,CAAA,GAAK,IAAA;AAAA,EAChD,CAAA;AAAA,EACA,OAAA,CAAQ,KAAa,KAAA,EAAe;AAChC,IAAA,MAAA,CAAO,GAAA,CAAI,KAAK,KAAK,CAAA;AAAA,EACzB,CAAA;AAAA,EACA,WAAW,GAAA,EAAa;AACpB,IAAA,MAAA,CAAO,OAAO,GAAG,CAAA;AAAA,EACrB;AACJ,CAAA;AAEA,SAAS,YAAA,GAA4B;AACjC,EAAA,IAAI,OAAO,eAAe,WAAA,EAAa;AACnC,IAAA,OAAO,WAAA;AAAA,EACX;AACA,EAAA,MAAM,KAAM,UAAA,CAAyD,YAAA;AACrE,EAAA,IAAI,CAAC,EAAA,IAAM,OAAO,EAAA,CAAG,YAAY,UAAA,EAAY;AACzC,IAAA,OAAO,WAAA;AAAA,EACX;AACA,EAAA,IAAI;AACA,IAAA,MAAM,QAAA,GAAW,qCAAA;AACjB,IAAA,EAAA,CAAG,OAAA,CAAQ,UAAU,GAAG,CAAA;AACxB,IAAA,EAAA,CAAG,WAAW,QAAQ,CAAA;AACtB,IAAA,OAAO,EAAA;AAAA,EACX,CAAA,CAAA,MAAQ;AACJ,IAAA,OAAO,WAAA;AAAA,EACX;AACJ;AAEO,IAAM,OAAA,GAAU;AAAA,EACnB,GAAA,EAAK,CAAC,GAAA,EAAa,KAAA,KAAmB;AAClC,IAAA,YAAA,GAAe,OAAA,CAAQ,GAAA,EAAK,IAAA,CAAK,SAAA,CAAU,KAAK,CAAC,CAAA;AAAA,EACrD,CAAA;AAAA,EAEA,GAAA,EAAK,CAAI,GAAA,KAA0B;AAC/B,IAAA,MAAM,IAAA,GAAO,YAAA,EAAa,CAAE,OAAA,CAAQ,GAAG,CAAA;AACvC,IAAA,OAAO,IAAA,GAAQ,IAAA,CAAK,KAAA,CAAM,IAAI,CAAA,GAAU,IAAA;AAAA,EAC5C,CAAA;AAAA,EAEA,MAAA,EAAQ,CAAC,GAAA,KAAgB;AACrB,IAAA,YAAA,EAAa,CAAE,WAAW,GAAG,CAAA;AAAA,EACjC;AACJ;;;AClDA,IAAI,gBAAA,GAAmB,EAAA;AACvB,IAAI,sBAAA,GAAyB,EAAA;AAC7B,IAAI,oBAAA,GAAuB,EAAA;AAEpB,SAAS,+BAA+B,OAAA,EAA6E;AACxH,EAAA,IAAI,OAAA,CAAQ,SAAS,IAAA,EAAM;AACvB,IAAA,gBAAA,GAAmB,OAAA,CAAQ,KAAA;AAAA,EAC/B;AACA,EAAA,IAAI,OAAA,CAAQ,eAAe,IAAA,EAAM;AAC7B,IAAA,sBAAA,GAAyB,OAAA,CAAQ,WAAA;AAAA,EACrC;AACA,EAAA,IAAI,OAAA,CAAQ,aAAa,IAAA,EAAM;AAC3B,IAAA,oBAAA,GAAuB,OAAA,CAAQ,SAAA;AAAA,EACnC;AACJ;AAEO,SAAS,yBAAA,GAAoC;AAChD,EAAA,OAAO,gBAAA;AACX;AAEO,SAAS,+BAAA,GAA0C;AACtD,EAAA,OAAO,sBAAA;AACX;AAEO,SAAS,6BAAA,GAAwC;AACpD,EAAA,OAAO,oBAAA;AACX;;;ACtBA,SAAS,iBAAiB,GAAA,EAAqB;AAC3C,EAAA,MAAM,WAAA,GAAc,OAAA,CAAQ,GAAA,CAA4B,YAAY,CAAA;AACpE,EAAA,MAAM,KAAA,GAAQ,cAAc,GAAG,CAAA;AAC/B,EAAA,OAAO,KAAA,IAAS,IAAA,IAAQ,MAAA,CAAO,KAAK,CAAA,CAAE,MAAK,KAAM,EAAA,GAAK,MAAA,CAAO,KAAK,CAAA,GAAI,EAAA;AAC1E;AAEO,IAAM,MAAA,GAAS;AAAA,EAClB,IAAI,KAAA,GAAQ;AACR,IAAA,OAAO,gBAAA,CAAiB,MAAM,CAAA,IAAK,yBAAA,EAA0B;AAAA,EACjE,CAAA;AAAA,EACA,IAAI,WAAA,GAAc;AACd,IAAA,OAAO,gBAAA,CAAiB,aAAa,CAAA,IAAK,+BAAA,EAAgC;AAAA,EAC9E,CAAA;AAAA,EACA,IAAI,QAAA,GAAW;AACX,IAAA,MAAM,MAAA,GAAS,iBAAiB,SAAS,CAAA;AACzC,IAAA,IAAI,QAAQ,OAAO,MAAA;AACnB,IAAA,OAAO,gBAAA,CAAiB,aAAa,CAAA,IAAK,+BAAA,EAAgC;AAAA,EAC9E,CAAA;AAAA,EACA,IAAI,SAAA,GAAY;AACZ,IAAA,OAAO,gBAAA,CAAiB,WAAW,CAAA,IAAK,6BAAA,EAA8B;AAAA,EAC1E;AACJ;AAEO,IAAM,SAAA,GAAY;AAAA,EACrB,eAAe,QAAA,EAAkB;AAC7B,IAAA,MAAM,QAAA,GAAW,OAAA,CAAQ,GAAA,CAAoB,YAAY,KAAK,EAAC;AAE/D,IAAA,OAAA,CAAQ,IAAI,YAAA,EAAc;AAAA,MACtB,GAAG,QAAA;AAAA,MACH,CAAC,SAAS,GAAG;AAAA,KAChB,CAAA;AAAA,EACL;AACJ;;;AC9BA,IAAI,iBAAA,GAAoB,KAAA;AAEjB,SAAS,qBAAqB,OAAA,EAAwB;AACzD,EAAA,iBAAA,GAAoB,OAAA;AACxB;AAEO,SAAS,mBAAA,GAA+B;AAC3C,EAAA,OAAO,iBAAA;AACX;AAEA,SAAS,YAAA,GAAgC;AACrC,EAAA,MAAM,aACF,OAAO,MAAA,KAAW,WAAA,GAAe,MAAA,CAAkE,aAAa,KAAA,GAAQ,MAAA;AAC5H,EAAA,MAAM,aAAa,MAAA,CAAO,KAAA;AAC1B,EAAA,OAAO,cAAc,UAAA,IAAc,SAAA;AACvC;AAEA,SAAS,SAAA,GAAoB;AACzB,EAAA,OAAO,wBAAA,CAAyB,cAAc,CAAA;AAClD;AAEA,SAAS,YAAA,GAAuB;AAC5B,EAAA,OAAO,2BAAA,CAA4B,cAAc,CAAA;AACrD;AAEO,SAAS,sBAAA,GAAwC;AACpD,EAAA,IAAI,OAAO,MAAA,KAAW,WAAA,IAAe,CAAC,OAAO,YAAA,EAAc;AACvD,IAAA,OAAO,IAAA;AAAA,EACX;AACA,EAAA,IAAI;AACA,IAAA,MAAM,GAAA,GAAM,MAAA,CAAO,YAAA,CAAa,OAAA,CAAQ,WAAW,CAAA;AACnD,IAAA,OAAO,GAAA,GAAO,IAAA,CAAK,KAAA,CAAM,GAAG,CAAA,GAAe,IAAA;AAAA,EAC/C,CAAA,CAAA,MAAQ;AACJ,IAAA,OAAO,IAAA;AAAA,EACX;AACJ;AAEO,SAAS,uBAAA,CAAwB,OAAe,WAAA,EAA4B;AAC/E,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,SAAA,IAAa,IAAA,CAAK,SAAA,CAAU,KAAK,CAAC,CAAA;AAC9D,IAAA,IAAI,eAAe,IAAA,EAAM;AACrB,MAAA,MAAA,CAAO,aAAa,OAAA,CAAQ,YAAA,EAAa,EAAG,MAAA,CAAO,WAAW,CAAC,CAAA;AAAA,IACnE;AAAA,EACJ,CAAA,CAAA,MAAQ;AAAA,EAER;AACJ;;;ACxDA,IAAM,qBAAA,mBAAwB,IAAI,GAAA,CAAI,CAAC,OAAA,EAAS,cAAA,EAAgB,aAAA,EAAe,UAAA,EAAY,QAAA,EAAU,eAAA,EAAiB,KAAA,EAAO,MAAM,CAAC,CAAA;AAEpI,SAAS,iBAAiB,IAAA,EAAuB;AAC7C,EAAA,MAAM,UAAA,GAAa,KAAK,WAAA,EAAY;AACpC,EAAA,OAAO,sBAAsB,GAAA,CAAI,UAAU,CAAA,IAAK,UAAA,CAAW,SAAS,UAAU,CAAA;AAClF;AAEA,SAAS,YAAY,KAAA,EAAyB;AAC1C,EAAA,IAAI,KAAA,IAAS,IAAA,IAAQ,OAAO,KAAA,KAAU,QAAA,EAAU;AAC5C,IAAA,OAAO,KAAA;AAAA,EACX;AACA,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AACtB,IAAA,OAAO,KAAA,CAAM,IAAI,WAAW,CAAA;AAAA,EAChC;AAEA,EAAA,MAAM,KAAA,GAAQ,KAAA;AACd,EAAA,MAAM,SAAkC,EAAC;AACzC,EAAA,KAAA,MAAW,CAAC,GAAA,EAAK,MAAM,KAAK,MAAA,CAAO,OAAA,CAAQ,KAAK,CAAA,EAAG;AAC/C,IAAA,MAAA,CAAO,GAAG,CAAA,GAAI,gBAAA,CAAiB,GAAG,CAAA,GAAI,YAAA,GAAe,YAAY,MAAM,CAAA;AAAA,EAC3E;AACA,EAAA,OAAO,MAAA;AACX;AAGO,SAAS,uBAAuB,IAAA,EAAwB;AAC3D,EAAA,IAAI,IAAA,IAAQ,IAAA,IAAQ,OAAO,IAAA,KAAS,QAAA,EAAU;AAC1C,IAAA,OAAO,IAAA;AAAA,EACX;AAEA,EAAA,MAAM,OAAA,GAAU,IAAA;AAChB,EAAA,MAAM,UAAA,GAAa,CAAC,WAAA,EAAa,SAAA,EAAW,gBAAgB,iBAAA,EAAmB,eAAA,EAAiB,YAAY,YAAY,CAAA;AAExH,EAAA,MAAM,UAAmC,EAAC;AAC1C,EAAA,KAAA,MAAW,SAAS,UAAA,EAAY;AAC5B,IAAA,IAAI,SAAS,OAAA,EAAS;AAClB,MAAA,OAAA,CAAQ,KAAK,CAAA,GAAI,OAAA,CAAQ,KAAK,CAAA;AAAA,IAClC;AAAA,EACJ;AAEA,EAAA,IAAI,MAAA,CAAO,IAAA,CAAK,OAAO,CAAA,CAAE,SAAS,CAAA,EAAG;AACjC,IAAA,OAAO,OAAA;AAAA,EACX;AAEA,EAAA,OAAO,YAAY,OAAO,CAAA;AAC9B;AAGO,SAAS,cAAc,IAAA,EAAgF;AAC1G,EAAA,IAAI,QAAQ,IAAA,EAAM;AACd,IAAA,OAAO,IAAA;AAAA,EACX;AACA,EAAA,OAAO,YAAY,IAAI,CAAA;AAC3B;;;AChDA,IAAM,UAAA,GAAuC;AAAA,EACzC,KAAA,EAAO,CAAA;AAAA,EACP,IAAA,EAAM,CAAA;AAAA,EACN,IAAA,EAAM,CAAA;AAAA,EACN,KAAA,EAAO,CAAA;AAAA,EACP,MAAA,EAAQ;AACZ,CAAA;AAEA,IAAM,cAAA,GAAiB;AAAA,EACnB,KAAA,EAAO,MAAA;AAAA,EACP,SAAA,EAAW,iBAAA;AAAA,EACX,OAAA,EAAS,IAAA;AAAA,EACT,WAAA,EAAa;AACjB,CAAA;AAEA,IAAI,aAAA,GAAgB,EAAE,GAAG,cAAA,EAAe;AACxC,IAAI,WAAA;AAEJ,SAAS,WAAW,KAAA,EAA0B;AAC1C,EAAA,IAAI,CAAC,aAAA,CAAc,OAAA,IAAW,aAAA,CAAc,UAAU,QAAA,EAAU;AAC5D,IAAA,OAAO,KAAA;AAAA,EACX;AACA,EAAA,OAAO,UAAA,CAAW,KAAK,CAAA,IAAK,UAAA,CAAW,cAAc,KAAK,CAAA;AAC9D;AAEA,SAAS,aAAa,OAAA,EAAyB;AAC3C,EAAA,OAAO,CAAA,CAAA,EAAI,aAAA,CAAc,SAAS,CAAA,EAAA,EAAK,OAAO,CAAA,CAAA;AAClD;AAEA,SAAS,YAAA,CAAa,OAAA,EAAiB,OAAA,EAAiB,IAAA,EAAsB;AAC1E,EAAA,IAAI,QAAQ,IAAA,EAAM;AACd,IAAA,OAAA,CAAQ,KAAA,CAAM,YAAA,CAAa,OAAO,CAAA,EAAG,SAAS,IAAI,CAAA;AAClD,IAAA;AAAA,EACJ;AACA,EAAA,OAAA,CAAQ,KAAA,CAAM,YAAA,CAAa,OAAO,CAAA,EAAG,OAAO,CAAA;AAChD;AAEA,SAAS,WAAA,CAAY,OAAA,EAAiB,OAAA,EAAiB,IAAA,EAAsB;AACzE,EAAA,IAAI,QAAQ,IAAA,EAAM;AACd,IAAA,OAAA,CAAQ,IAAA,CAAK,YAAA,CAAa,OAAO,CAAA,EAAG,SAAS,IAAI,CAAA;AACjD,IAAA;AAAA,EACJ;AACA,EAAA,OAAA,CAAQ,IAAA,CAAK,YAAA,CAAa,OAAO,CAAA,EAAG,OAAO,CAAA;AAC/C;AAEA,SAAS,WAAA,CAAY,OAAA,EAAiB,OAAA,EAAiB,IAAA,EAAsB;AACzE,EAAA,IAAI,QAAQ,IAAA,EAAM;AACd,IAAA,OAAA,CAAQ,IAAA,CAAK,YAAA,CAAa,OAAO,CAAA,EAAG,SAAS,IAAI,CAAA;AACjD,IAAA;AAAA,EACJ;AACA,EAAA,OAAA,CAAQ,IAAA,CAAK,YAAA,CAAa,OAAO,CAAA,EAAG,OAAO,CAAA;AAC/C;AAEA,SAAS,YAAA,CAAa,OAAA,EAAiB,KAAA,EAAgB,IAAA,EAAsB;AACzE,EAAA,IAAIA,MAAA,CAAM,YAAA,CAAa,KAAK,CAAA,EAAG;AAC3B,IAAA,MAAM,OAAA,GAAU;AAAA,MACZ,SAAS,KAAA,CAAM,OAAA;AAAA,MACf,MAAA,EAAQ,MAAM,QAAA,EAAU,MAAA;AAAA,MACxB,UAAA,EAAY,MAAM,QAAA,EAAU,UAAA;AAAA,MAC5B,IAAA,EAAM,sBAAA,CAAuB,KAAA,CAAM,QAAA,EAAU,IAAI,CAAA;AAAA,MACjD,GAAA,EAAK,MAAM,MAAA,EAAQ,GAAA;AAAA,MACnB,MAAA,EAAQ,MAAM,MAAA,EAAQ,MAAA;AAAA,MACtB,GAAG,cAAc,IAAI;AAAA,KACzB;AACA,IAAA,OAAA,CAAQ,KAAA,CAAM,YAAA,CAAa,OAAO,CAAA,EAAG,OAAO,CAAA;AAC5C,IAAA;AAAA,EACJ;AAEA,EAAA,IAAI,iBAAiB,KAAA,EAAO;AACxB,IAAA,IAAI,QAAQ,IAAA,EAAM;AACd,MAAA,OAAA,CAAQ,KAAA,CAAM,aAAa,OAAO,CAAA,EAAG,MAAM,OAAA,EAAS,KAAA,EAAO,aAAA,CAAc,IAAI,CAAC,CAAA;AAC9E,MAAA;AAAA,IACJ;AACA,IAAA,OAAA,CAAQ,MAAM,YAAA,CAAa,OAAO,CAAA,EAAG,KAAA,CAAM,SAAS,KAAK,CAAA;AACzD,IAAA;AAAA,EACJ;AAEA,EAAA,IAAI,QAAQ,IAAA,EAAM;AACd,IAAA,OAAA,CAAQ,MAAM,YAAA,CAAa,OAAO,GAAG,KAAA,EAAO,aAAA,CAAc,IAAI,CAAC,CAAA;AAC/D,IAAA;AAAA,EACJ;AACA,EAAA,OAAA,CAAQ,KAAA,CAAM,YAAA,CAAa,OAAO,CAAA,EAAG,KAAK,CAAA;AAC9C;AAEO,SAAS,eAAA,CAAgBC,OAAAA,GAAuB,EAAC,EAAS;AAC7D,EAAA,aAAA,GAAgB;AAAA,IACZ,KAAA,EAAOA,OAAAA,CAAO,KAAA,IAAS,cAAA,CAAe,KAAA;AAAA,IACtC,SAAA,EAAWA,OAAAA,CAAO,SAAA,IAAa,cAAA,CAAe,SAAA;AAAA,IAC9C,OAAA,EAASA,OAAAA,CAAO,OAAA,IAAW,cAAA,CAAe,OAAA;AAAA,IAC1C,WAAA,EAAaA,OAAAA,CAAO,WAAA,IAAe,cAAA,CAAe;AAAA,GACtD;AACA,EAAA,WAAA,GAAcA,OAAAA,CAAO,KAAA;AACzB;AAQO,SAAS,oBAAA,GAAgC;AAC5C,EAAA,OAAO,aAAA,CAAc,OAAA,IAAW,aAAA,CAAc,WAAA,IAAe,WAAW,OAAO,CAAA;AACnF;AAMO,IAAM,MAAA,GAAoB;AAAA,EAC7B,KAAA,CAAM,OAAA,EAAS,OAAA,EAAS,IAAA,EAAM;AAC1B,IAAA,IAAI,CAAC,UAAA,CAAW,OAAO,CAAA,EAAG;AAC1B,IAAA,MAAM,IAAA,GAAO,aAAa,KAAA,IAAS,YAAA;AACnC,IAAA,IAAA,CAAK,OAAA,EAAS,OAAA,EAAS,aAAA,CAAc,IAAI,CAAC,CAAA;AAAA,EAC9C,CAAA;AAAA,EACA,IAAA,CAAK,OAAA,EAAS,OAAA,EAAS,IAAA,EAAM;AACzB,IAAA,IAAI,CAAC,UAAA,CAAW,MAAM,CAAA,EAAG;AACzB,IAAA,MAAM,IAAA,GAAO,aAAa,IAAA,IAAQ,WAAA;AAClC,IAAA,IAAA,CAAK,OAAA,EAAS,OAAA,EAAS,aAAA,CAAc,IAAI,CAAC,CAAA;AAAA,EAC9C,CAAA;AAAA,EACA,IAAA,CAAK,OAAA,EAAS,OAAA,EAAS,IAAA,EAAM;AACzB,IAAA,IAAI,CAAC,UAAA,CAAW,MAAM,CAAA,EAAG;AACzB,IAAA,MAAM,IAAA,GAAO,aAAa,IAAA,IAAQ,WAAA;AAClC,IAAA,IAAA,CAAK,OAAA,EAAS,OAAA,EAAS,aAAA,CAAc,IAAI,CAAC,CAAA;AAAA,EAC9C,CAAA;AAAA,EACA,KAAA,CAAM,OAAA,EAAS,KAAA,EAAO,IAAA,EAAM;AACxB,IAAA,IAAI,CAAC,UAAA,CAAW,OAAO,CAAA,EAAG;AAC1B,IAAA,MAAM,IAAA,GAAO,aAAa,KAAA,IAAS,YAAA;AACnC,IAAA,IAAA,CAAK,OAAA,EAAS,KAAA,EAAO,aAAA,CAAc,IAAI,CAAC,CAAA;AAAA,EAC5C;AACJ;;;AC3HA,SAAS,YAAY,IAAA,EAA2C;AAC5D,EAAA,MAAM,MAAM,IAAA,KAAS,GAAA,GAAM,gBAAgB,CAAA,CAAE,GAAA,GAAM,gBAAgB,CAAA,CAAE,GAAA;AACrE,EAAA,OAAO;AAAA,IACH,OAAO,GAAA,CAAI,YAAA;AAAA,IACX,KAAK,GAAA,CAAI;AAAA,GACb;AACJ;AAOA,SAAS,cAAc,GAAA,EAAmC;AACtD,EAAA,IAAI,GAAA,IAAO,IAAA,IAAQ,GAAA,KAAQ,EAAA,EAAI;AAC3B,IAAA,OAAO,IAAA;AAAA,EACX;AACA,EAAA,MAAM,MAAA,GAAS,OAAO,GAAG,CAAA;AACzB,EAAA,OAAO,MAAA,CAAO,QAAA,CAAS,MAAM,CAAA,GAAI,MAAA,GAAS,IAAA;AAC9C;AAEA,SAAS,WAAW,GAAA,EAA4B;AAC5C,EAAA,OAAO,sBAAsB,GAAG,CAAA;AACpC;AAEA,SAAS,WAAA,CAAY,KAAa,KAAA,EAAqB;AACnD,EAAA,sBAAA,CAAuB,KAAK,KAAK,CAAA;AACrC;AAEA,SAAS,aAAa,GAAA,EAAmB;AACrC,EAAA,uBAAA,CAAwB,GAAG,CAAA;AAC/B;AAGO,SAAS,0BAAA,CAA2B,KAAA,EAAe,gBAAA,EAAsC,IAAA,GAAuB,GAAA,EAAW;AAC9H,EAAA,IAAI,CAAC,KAAA,IAAS,OAAO,KAAA,KAAU,QAAA,EAAU;AACrC,IAAA;AAAA,EACJ;AAEA,EAAA,MAAM,IAAA,GAAO,YAAY,IAAI,CAAA;AAC7B,EAAA,MAAM,SAAA,GACF,OAAO,gBAAA,KAAqB,QAAA,IAAY,mBAAmB,CAAA,GAAI,IAAA,CAAK,GAAA,EAAI,GAAI,mBAAmB,GAAA,GAAO,IAAA,CAAK,GAAA,EAAI,GAAI,KAAK,EAAA,GAAK,GAAA;AAEjI,EAAA,WAAA,CAAY,IAAA,CAAK,OAAO,KAAK,CAAA;AAC7B,EAAA,WAAA,CAAY,IAAA,CAAK,GAAA,EAAK,MAAA,CAAO,SAAS,CAAC,CAAA;AAC3C;AAGO,SAAS,yBAAA,CAA0B,OAAuB,GAAA,EAAmC;AAChG,EAAA,MAAM,IAAA,GAAO,YAAY,IAAI,CAAA;AAC7B,EAAA,MAAM,KAAA,GAAQ,UAAA,CAAW,IAAA,CAAK,KAAK,CAAA;AACnC,EAAA,IAAI,CAAC,KAAA,EAAO;AACR,IAAA,OAAO,IAAA;AAAA,EACX;AAEA,EAAA,MAAM,SAAA,GAAY,aAAA,CAAc,UAAA,CAAW,IAAA,CAAK,GAAG,CAAC,CAAA;AACpD,EAAA,IAAI,SAAA,IAAa,IAAA,IAAQ,IAAA,CAAK,GAAA,MAAS,SAAA,EAAW;AAC9C,IAAA,0BAAA,CAA2B,IAAI,CAAA;AAC/B,IAAA,OAAO,IAAA;AAAA,EACX;AAEA,EAAA,OAAO,EAAE,OAAO,SAAA,EAAU;AAC9B;AAEO,SAAS,0BAAA,CAA2B,OAAuB,GAAA,EAAW;AACzE,EAAA,MAAM,IAAA,GAAO,YAAY,IAAI,CAAA;AAC7B,EAAA,YAAA,CAAa,KAAK,KAAK,CAAA;AACvB,EAAA,YAAA,CAAa,KAAK,GAAG,CAAA;AACzB;AAGO,SAAS,yBAAA,CAA0B,OAAuB,GAAA,EAAc;AAC3E,EAAA,OAAO,yBAAA,CAA0B,IAAI,CAAA,IAAK,IAAA;AAC9C;AAQA,eAAsB,6BAA6B,KAAA,EAA4D;AAC3G,EAAA,MAAM,IAAA,GAAO,MAAM,IAAA,IAAQ,GAAA;AAC3B,EAAA,MAAM,OAAA,GAAU,0BAA0B,IAAI,CAAA;AAC9C,EAAA,IAAI,CAAC,OAAA,EAAS;AACV,IAAA,OAAO,KAAA;AAAA,EACX;AAEA,EAAA,MAAM,UAAA,GAAa,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,IAAA,CAAK,KAAA,CAAA,CAAO,OAAA,CAAQ,SAAA,GAAY,IAAA,CAAK,GAAA,EAAI,IAAK,GAAI,CAAC,CAAA;AAClF,EAAA,MAAM,KAAA,CAAM,cAAA,CAAe,OAAA,CAAQ,KAAA,EAAO,UAAU,CAAA;AACpD,EAAA,OAAO,IAAA;AACX;;;ACnGA,IAAM,SAAA,GAAY,wBAAA;AAClB,IAAM,gBAAA,GAAmB,eAAA,CAAgB,CAAA,CAAE,IAAA,CAAK,WAAA;AAChD,IAAM,WAAA,GAAc,GAAA;AAEpB,eAAe,kBAAqB,EAAA,EAAkC;AAClE,EAAA,IAAI,OAAO,SAAA,KAAc,WAAA,IAAe,SAAA,CAAU,OAAO,OAAA,EAAS;AAC9D,IAAA,OAAO,SAAA,CAAU,KAAA,CAAM,OAAA,CAAQ,SAAA,EAAW,EAAE,CAAA;AAAA,EAChD;AACA,EAAA,OAAO,EAAA,EAAG;AACd;AAEA,SAAS,qBAAA,GAAiC;AACtC,EAAA,IAAI,OAAO,MAAA,KAAW,WAAA,IAAe,CAAC,OAAO,YAAA,EAAc;AACvD,IAAA,OAAO,IAAA;AAAA,EACX;AACA,EAAA,IAAI;AACA,IAAA,MAAM,GAAA,GAAM,MAAA,CAAO,YAAA,CAAa,OAAA,CAAQ,gBAAgB,CAAA;AACxD,IAAA,MAAM,GAAA,GAAM,KAAK,GAAA,EAAI;AACrB,IAAA,IAAI,GAAA,EAAK;AACL,MAAA,MAAM,EAAA,GAAK,OAAO,GAAG,CAAA;AACrB,MAAA,IAAI,OAAO,QAAA,CAAS,EAAE,CAAA,IAAK,GAAA,GAAM,KAAK,WAAA,EAAa;AAC/C,QAAA,OAAO,KAAA;AAAA,MACX;AAAA,IACJ;AACA,IAAA,MAAA,CAAO,YAAA,CAAa,OAAA,CAAQ,gBAAA,EAAkB,MAAA,CAAO,GAAG,CAAC,CAAA;AACzD,IAAA,OAAO,IAAA;AAAA,EACX,CAAA,CAAA,MAAQ;AACJ,IAAA,OAAO,IAAA;AAAA,EACX;AACJ;AAEA,SAAS,kBAAA,GAA2B;AAChC,EAAA,IAAI,OAAO,MAAA,KAAW,WAAA,IAAe,CAAC,OAAO,YAAA,EAAc;AACvD,IAAA;AAAA,EACJ;AACA,EAAA,IAAI;AACA,IAAA,MAAA,CAAO,YAAA,CAAa,WAAW,gBAAgB,CAAA;AAAA,EACnD,CAAA,CAAA,MAAQ;AAAA,EAER;AACJ;AAEA,eAAe,kBAAA,CAAmB,YAAY,WAAA,EAA4B;AACtE,EAAA,MAAM,KAAA,GAAQ,KAAK,GAAA,EAAI;AACvB,EAAA,OAAO,IAAA,CAAK,GAAA,EAAI,GAAI,KAAA,GAAQ,SAAA,EAAW;AACnC,IAAA,IAAI,uBAAsB,EAAG;AACzB,MAAA;AAAA,IACJ;AACA,IAAA,MAAM,IAAI,OAAA,CAAQ,CAAC,MAAM,UAAA,CAAW,CAAA,EAAG,GAAG,CAAC,CAAA;AAAA,EAC/C;AACJ;AAKA,eAAsB,gBAAmB,EAAA,EAAkC;AACvE,EAAA,OAAO,kBAAkB,YAAY;AACjC,IAAA,MAAM,kBAAA,EAAmB;AACzB,IAAA,IAAI;AACA,MAAA,OAAO,MAAM,EAAA,EAAG;AAAA,IACpB,CAAA,SAAE;AACE,MAAA,kBAAA,EAAmB;AAAA,IACvB;AAAA,EACJ,CAAC,CAAA;AACL;AC9DO,IAAM,2BAAA,GAA8B;AAE3C,IAAM,+CAA+B,IAAI,GAAA,CAAI,CAAC,GAAA,EAAK,GAAA,EAAK,GAAG,CAAC,CAAA;AAQrD,SAAS,kBAAkB,KAAA,EAA+B;AAC7D,EAAA,IAAI,CAACD,MAAAA,CAAM,YAAA,CAAa,KAAK,CAAA,EAAG;AAC5B,IAAA,OAAO,SAAA;AAAA,EACX;AAEA,EAAA,MAAM,MAAA,GAAS,MAAM,QAAA,EAAU,MAAA;AAC/B,EAAA,IAAI,UAAU,IAAA,EAAM;AAChB,IAAA,IAAI,4BAAA,CAA6B,GAAA,CAAI,MAAM,CAAA,EAAG,OAAO,qBAAA;AACrD,IAAA,IAAI,MAAA,KAAW,GAAA,IAAO,MAAA,KAAW,GAAA,EAAK,OAAO,MAAA;AAC7C,IAAA,IAAI,MAAA,IAAU,GAAA,IAAO,MAAA,GAAS,GAAA,EAAK,OAAO,QAAA;AAC1C,IAAA,IAAI,MAAA,IAAU,KAAK,OAAO,QAAA;AAAA,EAC9B;AAEA,EAAA,IAAI,KAAA,CAAM,SAAS,cAAA,IAAkB,KAAA,CAAM,QAAQ,WAAA,EAAY,CAAE,QAAA,CAAS,SAAS,CAAA,EAAG;AAClF,IAAA,OAAO,SAAA;AAAA,EACX;AAEA,EAAA,IACI,KAAA,CAAM,IAAA,KAAS,aAAA,IACf,KAAA,CAAM,IAAA,KAAS,cAAA,IACf,KAAA,CAAM,OAAA,KAAY,eAAA,IAClB,KAAA,CAAM,OAAA,CAAQ,QAAA,CAAS,wBAAwB,CAAA,EACjD;AACE,IAAA,OAAO,qBAAA;AAAA,EACX;AAEA,EAAA,OAAO,SAAA;AACX;AAEO,SAAS,0BAA0B,KAAA,EAAyB;AAC/D,EAAA,OAAO,iBAAA,CAAkB,KAAK,CAAA,KAAM,qBAAA;AACxC;AAEO,SAAS,oBAAoB,KAAA,EAAwB;AACxD,EAAA,MAAM,IAAA,GAAO,kBAAkB,KAAK,CAAA;AAEpC,EAAA,QAAQ,IAAA;AAAM,IACV,KAAK,qBAAA;AACD,MAAA,OAAO,2BAAA;AAAA,IACX,KAAK,SAAA;AACD,MAAA,OAAO,oEAAA;AAAA,IACX,KAAK,MAAA;AACD,MAAA,OAAO,iDAAA;AAAA,IACX,KAAK,SAAA;AACD,MAAA,OAAO,yEAAA;AAAA,IACX,KAAK,QAAA;AAAA,IACL,KAAK,QAAA;AAAA,IACL,KAAK,SAAA,EAAW;AACZ,MAAA,IAAIA,MAAAA,CAAM,YAAA,CAAa,KAAK,CAAA,EAAG;AAC3B,QAAA,MAAM,OAAA,GAAU,MAAM,QAAA,EAAU,IAAA;AAChC,QAAA,MAAM,UAAA,GAAa,OAAA,EAAS,YAAA,IAAgB,OAAA,EAAS,OAAA;AACrD,QAAA,IAAI,OAAO,UAAA,KAAe,QAAA,IAAY,UAAA,CAAW,IAAA,OAAW,EAAA,EAAI;AAC5D,UAAA,OAAO,UAAA;AAAA,QACX;AAAA,MACJ;AACA,MAAA,OAAO,yCAAA;AAAA,IACX;AAAA;AAER;;;AC5DA,IAAM,6BAAA,uBAAoC,GAAA,CAAY;AAAA,EAClD,aAAA,CAAc,aAAA;AAAA,EACd,aAAA,CAAc,aAAA;AAAA,EACd,aAAA,CAAc,qBAAA;AAAA,EACd,aAAA,CAAc,qBAAA;AAAA,EACd,aAAA,CAAc,mBAAA;AAAA,EACd,aAAA,CAAc,cAAA;AAAA,EACd,aAAA,CAAc;AAClB,CAAC,CAAA;AAEM,SAAS,4BAAA,CAA6B,WAAoB,MAAA,EAA0B;AACvF,EAAA,MAAM,IAAA,GAAA,CAAQ,SAAA,IAAa,EAAA,EAAI,IAAA,GAAO,WAAA,EAAY;AAClD,EAAA,IAAI,IAAA,IAAQ,6BAAA,CAA8B,GAAA,CAAI,IAAI,CAAA,EAAG;AACjD,IAAA,OAAO,IAAA;AAAA,EACX;AACA,EAAA,IAAI,MAAA,KAAW,GAAA,IAAO,CAAC,IAAA,EAAM;AACzB,IAAA,OAAO,IAAA;AAAA,EACX;AACA,EAAA,OAAO,KAAA;AACX;AAEO,SAAS,yBAAyB,KAAA,EAAoC;AACzE,EAAA,IAAI,CAACA,MAAAA,CAAM,YAAA,CAAa,KAAK,CAAA,EAAG;AAC5B,IAAA,OAAO,WAAA;AAAA,EACX;AAEA,EAAA,MAAM,MAAA,GAAS,MAAM,QAAA,EAAU,MAAA;AAC/B,EAAA,MAAM,OAAA,GAAU,oBAAA,CAAqB,KAAA,CAAM,QAAA,EAAU,IAAI,CAAA;AAEzD,EAAA,IAAI,WAAW,GAAA,EAAK;AAChB,IAAA,OAAO,WAAA;AAAA,EACX;AAEA,EAAA,IAAI,MAAA,IAAU,IAAA,IAAQ,MAAA,IAAU,GAAA,EAAK;AACjC,IAAA,OAAO,WAAA;AAAA,EACX;AAEA,EAAA,MAAM,QAAA,GAAW,kBAAkB,KAAK,CAAA;AACxC,EAAA,IAAI,QAAA,KAAa,SAAA,IAAa,QAAA,KAAa,SAAA,IAAa,aAAa,qBAAA,EAAuB;AACxF,IAAA,OAAO,WAAA;AAAA,EACX;AAEA,EAAA,IAAI,MAAA,KAAW,GAAA,IAAO,MAAA,KAAW,GAAA,EAAK;AAClC,IAAA,IAAI,4BAAA,CAA6B,OAAA,CAAQ,SAAA,EAAW,MAAM,CAAA,EAAG;AACzD,MAAA,OAAO,cAAA;AAAA,IACX;AACA,IAAA,OAAO,WAAA;AAAA,EACX;AAEA,EAAA,OAAO,WAAA;AACX;AAEO,SAAS,oCAAoC,QAAA,EAAuC;AACvF,EAAA,IAAI,CAAC,QAAA,IAAY,OAAO,QAAA,KAAa,QAAA,EAAU;AAC3C,IAAA,OAAO,WAAA;AAAA,EACX;AAEA,EAAA,MAAM,MAAA,GAAS,QAAA;AACf,EAAA,MAAM,SAAS,MAAA,CAAO,MAAA;AACtB,EAAA,MAAM,OAAA,GAAU,oBAAA,CAAqB,MAAA,CAAO,IAAI,CAAA;AAEhD,EAAA,IAAI,4BAAA,CAA6B,OAAA,CAAQ,SAAA,EAAW,MAAM,CAAA,EAAG;AACzD,IAAA,OAAO,cAAA;AAAA,EACX;AAEA,EAAA,OAAO,WAAA;AACX;AAEO,SAAS,0BAA0B,IAAA,EAAoC;AAC1E,EAAA,OAAO,IAAA,KAAS,eAAe,IAAA,KAAS,iBAAA;AAC5C;AAEO,SAAS,gCAAgC,IAAA,EAAoC;AAChF,EAAA,OAAO,IAAA,KAAS,kBAAkB,IAAA,KAAS,uBAAA;AAC/C;;;ACnFO,IAAM,2BAAA,GAAN,cAA0C,KAAA,CAAM;AAAA,EAC1C,WAAA;AAAA,EAET,WAAA,CAAY,aAAkC,KAAA,EAAiB;AAC3D,IAAA,KAAA,CAAM,0BAA0B,CAAA;AAChC,IAAA,IAAA,CAAK,IAAA,GAAO,6BAAA;AACZ,IAAA,IAAA,CAAK,WAAA,GAAc,WAAA;AACnB,IAAA,IAAI,UAAU,MAAA,EAAW;AACpB,MAAC,KAAqC,KAAA,GAAQ,KAAA;AAAA,IACnD;AAAA,EACJ;AACJ;AAGO,IAAM,yBAAA,GAAN,cAAwC,KAAA,CAAM;AAAA,EACxC,WAAA;AAAA,EAET,WAAA,CAAY,aAAkC,KAAA,EAAiB;AAC3D,IAAA,KAAA,CAAM,wBAAwB,CAAA;AAC9B,IAAA,IAAA,CAAK,IAAA,GAAO,2BAAA;AACZ,IAAA,IAAA,CAAK,WAAA,GAAc,WAAA;AACnB,IAAA,IAAI,UAAU,MAAA,EAAW;AACpB,MAAC,KAAqC,KAAA,GAAQ,KAAA;AAAA,IACnD;AAAA,EACJ;AACJ;AAEO,SAAS,8BAA8B,KAAA,EAAsD;AAChG,EAAA,IAAI,iBAAiB,2BAAA,EAA6B;AAC9C,IAAA,OAAO,IAAA;AAAA,EACX;AACA,EAAA,OAAO,KAAA,YAAiB,KAAA,IAAS,KAAA,CAAM,OAAA,KAAY,0BAAA;AACvD;AAEO,SAAS,4BAA4B,KAAA,EAAoD;AAC5F,EAAA,IAAI,iBAAiB,yBAAA,EAA2B;AAC5C,IAAA,OAAO,IAAA;AAAA,EACX;AACA,EAAA,OAAO,KAAA,YAAiB,KAAA,IAAS,KAAA,CAAM,OAAA,KAAY,wBAAA;AACvD;;;ACrBA,IAAI,WAAA,GAA6B,IAAA;AAEjC,IAAI,cAAA,GAAgC,IAAA;AAEpC,IAAI,WAAA,GAA6B,IAAA;AAEjC,IAAI,eAAA,GAAqF,IAAA;AAEzF,IAAI,oBAAA,GAAuB,EAAA;AAE3B,IAAI,cAAA,GAAuC,IAAA;AAE3C,IAAI,iBAAA,GAAoB,KAAA;AAExB,IAAI,uBAAA,GAAyC,IAAA;AAE7C,IAAI,wBAAA,GAAgD,IAAA;AAEpD,IAAM,uBAAA,GAA0B,GAAA;AAEhC,IAAM,iCAAA,GAAoC,GAAA;AAE1C,IAAM,wBAAA,GAA2B,CAAC,CAAA,EAAG,GAAA,EAAK,IAAI,CAAA;AAE9C,IAAM,oBAAA,GAAuB,CAAA;AAE7B,SAAS,MAAM,EAAA,EAA2B;AACtC,EAAA,OAAO,IAAI,OAAA,CAAQ,CAAC,OAAA,KAAY;AAC5B,IAAA,UAAA,CAAW,SAAS,EAAE,CAAA;AAAA,EAC1B,CAAC,CAAA;AACL;AAIO,SAAS,qBAAqB,KAAA,EAAuB;AACxD,EAAA,MAAM,QAAQ,oBAAA,GAAuB,GAAA;AAErC,EAAA,IAAI,MAAA;AACJ,EAAA,IAAI,SAAS,KAAA,EAAO;AAChB,IAAA,MAAA,GAAS,KAAK,GAAA,CAAI,uBAAA,EAAyB,KAAK,KAAA,CAAM,KAAA,GAAQ,GAAG,CAAC,CAAA;AAAA,EACtE,CAAA,MAAO;AACH,IAAA,MAAA,GAAS,KAAA;AAAA,EACb;AAGA,EAAA,MAAM,SAAA,GAAY,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,QAAQ,GAAK,CAAA;AAC3C,EAAA,OAAO,IAAA,CAAK,GAAA,CAAI,MAAA,EAAQ,SAAS,CAAA;AACrC;AAEA,SAAS,kBAAA,GAA6B;AAClC,EAAA,IAAI,WAAA,IAAe,IAAA,IAAQ,WAAA,GAAc,CAAA,EAAG;AACxC,IAAA,OAAO,qBAAqB,WAAW,CAAA;AAAA,EAC3C;AAEA,EAAA,OAAO,oBAAA,GAAuB,GAAA;AAClC;AAEO,SAAS,cAAA,GAAgC;AAC5C,EAAA,OAAO,WAAA;AACX;AAEO,SAAS,4BAA4B,QAAA,EAAqC;AAC7E,EAAA,wBAAA,GAA2B,QAAA;AAC/B;AAEA,SAAS,4BAAA,GAAqC;AAC1C,EAAA,IAAI;AACA,IAAA,wBAAA,IAA2B;AAAA,EAC/B,CAAA,CAAA,MAAQ;AAAA,EAER;AACJ;AAEA,SAAS,uBAAA,GAAgC;AACrC,EAAA,IAAI;AACA,IAAA,sBAAA,CAAuB,eAAA,CAAgB,CAAA,CAAE,IAAA,CAAK,gBAAA,EAAkB,IAAA,CAAK,SAAA,CAAU,EAAE,EAAA,EAAI,IAAA,CAAK,GAAA,EAAI,EAAG,CAAC,CAAA;AAAA,EACtG,CAAA,CAAA,MAAQ;AAAA,EAER;AACJ;AAEA,SAAS,8BAAA,GAAuC;AAC5C,EAAA,IAAI;AACA,IAAA,uBAAA,CAAwB,eAAA,CAAgB,CAAA,CAAE,IAAA,CAAK,gBAAgB,CAAA;AAAA,EACnE,CAAA,CAAA,MAAQ;AAAA,EAER;AACJ;AAEA,SAAS,6BAAA,GAAyC;AAC9C,EAAA,IAAI;AACA,IAAA,OAAO,QAAQ,qBAAA,CAAsB,eAAA,CAAgB,CAAA,CAAE,IAAA,CAAK,gBAAgB,CAAC,CAAA;AAAA,EACjF,CAAA,CAAA,MAAQ;AACJ,IAAA,OAAO,KAAA;AAAA,EACX;AACJ;AAGO,SAAS,0BAAA,GAAmC;AAC/C,EAAA,IAAI,+BAA8B,EAAG;AACjC,IAAA,iBAAA,GAAoB,IAAA;AAAA,EACxB;AACJ;AAEO,SAAS,iCAAA,GAA0C;AACtD,EAAA,iBAAA,GAAoB,KAAA;AACpB,EAAA,8BAAA,EAA+B;AACnC;AAEA,SAAS,iBAAA,GAA0B;AAC/B,EAAA,iBAAA,GAAoB,IAAA;AACpB,EAAA,uBAAA,EAAwB;AACxB,EAAA,gBAAA,EAAiB;AACjB,EAAA,4BAAA,EAA6B;AACjC;AAEO,SAAS,eAAA,CAAgB,OAAe,SAAA,EAA0B;AACrE,EAAA,WAAA,GAAc,KAAA;AAEd,EAAA,iCAAA,EAAkC;AAElC,EAAA,IAAI,SAAA,IAAa,IAAA,IAAQ,SAAA,GAAY,CAAA,EAAG;AACpC,IAAA,WAAA,GAAc,SAAA,GAAY,GAAA;AAE1B,IAAA,cAAA,GAAiB,IAAA,CAAK,KAAI,GAAI,WAAA;AAAA,EAClC,CAAA,MAAO;AACH,IAAA,WAAA,GAAc,IAAA;AAEd,IAAA,cAAA,GAAiB,IAAA;AAAA,EACrB;AAEA,EAAA,4BAAA,EAA6B;AACjC;AAEO,SAAS,gBAAA,GAAyB;AACrC,EAAA,WAAA,GAAc,IAAA;AAEd,EAAA,cAAA,GAAiB,IAAA;AAEjB,EAAA,WAAA,GAAc,IAAA;AAEd,EAAA,uBAAA,GAA0B,IAAA;AAC9B;AAGO,SAAS,qBAAA,GAA8B;AAC1C,EAAA,uBAAA,GAA0B,IAAA;AAC9B;AAEO,SAAS,wBAAwB,OAAA,EAAuB;AAC3D,EAAA,oBAAA,GAAuB,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,OAAO,CAAA;AAC9C;AAMO,SAAS,kBAAA,GAA8B;AAC1C,EAAA,OAAO,iBAAA;AACX;AAGO,SAAS,yBAAA,GAAqC;AACjD,EAAA,IAAI,iBAAA,EAAmB;AACnB,IAAA,OAAO,IAAA;AAAA,EACX;AACA,EAAA,IAAI,+BAA8B,EAAG;AACjC,IAAA,iBAAA,GAAoB,IAAA;AACpB,IAAA,OAAO,IAAA;AAAA,EACX;AACA,EAAA,OAAO,KAAA;AACX;AAEO,SAAS,oBAAA,GAAgC;AAC5C,EAAA,IAAI,CAAC,aAAa,OAAO,IAAA;AAEzB,EAAA,IAAI,cAAA,KAAmB,MAAM,OAAO,KAAA;AAEpC,EAAA,MAAM,WAAW,kBAAA,EAAmB;AAEpC,EAAA,OAAO,IAAA,CAAK,GAAA,EAAI,IAAK,cAAA,GAAiB,QAAA;AAC1C;AAUO,SAAS,mBAAmB,QAAA,EAA0E;AACzG,EAAA,eAAA,GAAkB,QAAA;AACtB;AAEO,SAAS,iBAAA,GAA6B;AACzC,EAAA,OAAO,cAAA,IAAkB,IAAA;AAC7B;AAUA,eAAsB,cAAA,CAAe,OAAA,GAAiC,EAAC,EAAkB;AACrF,EAAA,MAAM,EAAE,KAAA,GAAQ,KAAA,EAAM,GAAI,OAAA;AAE1B,EAAA,IAAI,yBAAA,CAA0B,GAAG,CAAA,IAAK,yBAAA,CAA0B,GAAG,CAAA,EAAG;AAClE,IAAA;AAAA,EACJ;AAEA,EAAA,IAAI,CAAC,SAAS,uBAAA,IAA2B,IAAA,IAAQ,KAAK,GAAA,EAAI,GAAI,0BAA0B,iCAAA,EAAmC;AACvH,IAAA;AAAA,EACJ;AAEA,EAAA,IAAI,CAAC,eAAA,EAAiB;AAClB,IAAA;AAAA,EACJ;AAEA,EAAA,IAAI,CAAC,cAAA,EAAgB;AACjB,IAAA,cAAA,GAAA,CAAkB,YAAY;AAC1B,MAAA,MAAM,gBAAgB,YAAY;AAC9B,QAAA,MAAM,EAAE,eAAA,EAAAE,gBAAAA,EAAgB,GAAI,MAAM,OAAO,0BAAiB,CAAA;AAC1D,QAAA,MAAM,eAAeA,gBAAAA,EAAgB;AAErC,QAAA,IAAI,CAAC,YAAA,EAAc;AACf,UAAA,iBAAA,EAAkB;AAElB,UAAA,MAAM,UAAA,GAAa,gBAAe,CAAE,YAAA;AACpC,UAAA,MAAM,YAAA,GACF,OAAO,QAAA,KAAa,WAAA,IACpB,OAAO,UAAA,KAAe,QAAA,IACtB,UAAA,CAAW,MAAA,GAAS,KACpB,QAAA,CAAS,MAAA,CAAO,QAAA,CAAS,CAAA,EAAG,UAAU,CAAA,CAAA,CAAG,CAAA;AAE7C,UAAA,MAAA,CAAO,IAAA,CAAK,QAAQ,gDAAA,EAAkD;AAAA,YAClE,SAAA,EAAW,gBAAA;AAAA,YACX,UAAA;AAAA,YACA,YAAA;AAAA,YACA,mBAAmB,mBAAA;AAAoB,WAC1C,CAAA;AAED,UAAA,MAAM,IAAI,MAAM,wCAAwC,CAAA;AAAA,QAC5D;AAEA,QAAA,IAAI,eAAA;AAEJ,QAAA,KAAA,IAAS,OAAA,GAAU,CAAA,EAAG,OAAA,GAAU,oBAAA,EAAsB,WAAW,CAAA,EAAG;AAChE,UAAA,IAAI,UAAU,CAAA,EAAG;AACb,YAAA,MAAM,MAAM,wBAAA,CAAyB,OAAO,KAAK,wBAAA,CAAyB,EAAA,CAAG,EAAE,CAAE,CAAA;AAAA,UACrF;AAEA,UAAA,MAAM,MAAA,GAAS,MAAM,eAAA,CAAiB,YAAY,CAAA;AAClD,UAAA,IAAI,MAAA,CAAO,OAAA,IAAW,MAAA,CAAO,KAAA,EAAO;AAChC,YAAA,iBAAA,GAAoB,KAAA;AACpB,YAAA,uBAAA,GAA0B,KAAK,GAAA,EAAI;AACnC,YAAA;AAAA,UACJ;AAEA,UAAA,eAAA,GAAkB,MAAA,CAAO,WAAA;AAEzB,UAAA,IAAI,CAAC,yBAAA,CAA0B,MAAA,CAAO,WAAW,CAAA,EAAG;AAChD,YAAA;AAAA,UACJ;AAAA,QACJ;AAEA,QAAA,IAAI,+BAAA,CAAgC,eAAe,CAAA,EAAG;AAClD,UAAA,iBAAA,EAAkB;AAClB,UAAA,MAAM,IAAI,0BAA0B,eAAe,CAAA;AAAA,QACvD;AAEA,QAAA,MAAM,IAAI,4BAA4B,eAAe,CAAA;AAAA,MACzD,CAAC,CAAA;AAAA,IACL,CAAA,GAAG,CAAE,OAAA,CAAQ,MAAM;AACf,MAAA,cAAA,GAAiB,IAAA;AAAA,IACrB,CAAC,CAAA;AAAA,EACL;AAEA,EAAA,MAAM,cAAA;AACV;AAUA,eAAsB,kBAAA,GAAoC;AACtD,EAAA,IAAI,yBAAA,CAA0B,GAAG,CAAA,IAAK,yBAAA,CAA0B,GAAG,CAAA,EAAG;AAClE,IAAA;AAAA,EACJ;AAGA,EAAA,IAAI,CAAC,cAAA,EAAe,IAAK,CAAC,mBAAkB,EAAG;AAC3C,IAAA;AAAA,EACJ;AAEA,EAAA,IAAI,CAAC,sBAAqB,EAAG;AACzB,IAAA;AAAA,EACJ;AAGA,EAAA,MAAM,cAAA,CAAe,EAAE,KAAA,EAAO,IAAA,EAAM,CAAA;AACxC;AAEO,SAAS,iBAAA,GAAoB;AAChC,EAAA,MAAM,QAAQ,cAAA,EAAe;AAE7B,EAAA,IAAI,KAAA,EAAO;AACP,IAAA,MAAM,WAAW,kBAAA,EAAmB;AAEpC,IAAA,IAAI,mBAAmB,IAAA,IAAQ,IAAA,CAAK,GAAA,EAAI,GAAI,iBAAiB,QAAA,EAAU;AACnE,MAAA,OAAO,IAAA;AAAA,IACX;AAAA,EACJ;AAEA,EAAA,IAAI,0BAAyB,EAAG;AAC5B,IAAA,IAAI,mBAAkB,EAAG;AACrB,MAAA,OAAO,IAAA;AAAA,IACX;AACA,IAAA,OAAO,KAAA;AAAA,EACX;AAEA,EAAA,IAAI,CAAC,eAAA,CAAgB,cAAA,EAAe,CAAE,YAAY,CAAA,EAAG;AACjD,IAAA,IAAI,iBAAA,IAAqB,CAAC,KAAA,EAAO;AAC7B,MAAA,OAAO,KAAA;AAAA,IACX;AACA,IAAA,OAAO,IAAA;AAAA,EACX;AAEA,EAAA,OAAO,KAAA;AACX;AAIO,SAAS,eAAA,GAAkB;AAC9B,EAAA,OAAO,iBAAA,EAAkB;AAC7B;AAIO,SAAS,oBAAA,GAAuB;AACnC,EAAA,OAAO,oBAAA,EAAqB;AAChC;AAEO,SAAS,iBAAA,GAA6B;AACzC,EAAA,IAAI,yBAAA,EAA0B,IAAK,CAAC,WAAA,EAAa;AAC7C,IAAA,OAAO,KAAA;AAAA,EACX;AACA,EAAA,MAAM,UAAU,wBAAA,EAAyB;AACzC,EAAA,IAAI,OAAA,EAAS;AACT,IAAA,IAAI,CAAC,OAAA,CAAQ,eAAA,EAAgB,EAAG;AAC5B,MAAA,OAAO,KAAA;AAAA,IACX;AAAA,EACJ,CAAA,MAAO;AACH,IAAA,MAAM,UAAA,GAAa,gBAAe,CAAE,YAAA;AACpC,IAAA,IAAI,CAAC,UAAA,IAAc,eAAA,CAAgB,UAAU,CAAA,EAAG;AAC5C,MAAA,OAAO,KAAA;AAAA,IACX;AACA,IAAA,IAAI,CAAC,uBAAsB,EAAG;AAC1B,MAAA,OAAO,KAAA;AAAA,IACX;AAAA,EACJ;AACA,EAAA,IAAI,iBAAA,IAAqB,CAAC,WAAA,EAAa;AACnC,IAAA,OAAO,KAAA;AAAA,EACX;AACA,EAAA,OAAO,IAAA;AACX;AAEA,SAAS,qBAAA,GAAuC;AAC5C,EAAA,MAAM,UAAU,wBAAA,EAAyB;AACzC,EAAA,IAAI,OAAA,EAAS;AACT,IAAA,OAAO,QAAQ,eAAA,EAAgB;AAAA,EACnC;AAEA,EAAA,MAAM,GAAA,GAAM,gBAAe,CAAE,YAAA;AAC7B,EAAA,MAAM,GAAA,GAAM,UAAU,GAAG,CAAA;AACzB,EAAA,IAAI,CAAC,uBAAA,CAAwB,GAAG,CAAA,EAAG;AAC/B,IAAA,OAAO,GAAA;AAAA,EACX;AACA,EAAA,IAAI,qBAAoB,EAAG;AACvB,IAAA,OAAO,sBAAA,EAAuB;AAAA,EAClC;AACA,EAAA,OAAO,IAAA;AACX;AAEO,SAAS,mBAAA,GAA+B;AAC3C,EAAA,OAAO,OAAA,CAAQ,cAAA,EAAgB,CAAA,IAAK,CAAC,oBAAA,EAAqB;AAC9D;;;AC3YA,SAAS,eAAkB,GAAA,EAA0C;AACjE,EAAA,IAAI,GAAA,IAAO,IAAA,IAAQ,GAAA,KAAQ,EAAA,EAAI;AAC3B,IAAA,OAAO,IAAA;AAAA,EACX;AAEA,EAAA,MAAM,UAAU,wBAAA,EAAyB;AACzC,EAAA,IAAI,OAAA,EAAS;AACT,IAAA,MAAM,GAAA,GAAM,OAAA,CAAQ,OAAA,CAAQ,GAAG,CAAA;AAC/B,IAAA,IAAI,uBAAA,CAAwB,GAAG,CAAA,EAAG;AAC9B,MAAA,IAAI,GAAA,KAAQ,WAAA,IAAe,GAAA,KAAQ,MAAA,EAAQ;AACvC,QAAA,OAAA,CAAQ,WAAW,GAAG,CAAA;AAAA,MAC1B;AACA,MAAA,OAAO,IAAA;AAAA,IACX;AACA,IAAA,IAAI;AACA,MAAA,OAAO,IAAA,CAAK,MAAM,GAAI,CAAA;AAAA,IAC1B,CAAA,CAAA,MAAQ;AACJ,MAAA,OAAO,GAAA;AAAA,IACX;AAAA,EACJ;AAEA,EAAA,OAAO,gBAAmB,GAAG,CAAA;AACjC;AAEA,SAAS,eAAA,CAAgB,GAAA,EAAyB,IAAA,EAAe,MAAA,EAA8B;AAC3F,EAAA,IAAI,CAAC,GAAA,EAAK;AACN,IAAA;AAAA,EACJ;AAEA,EAAA,MAAM,UAAA,GAAa,qBAAqB,IAAI,CAAA;AAE5C,EAAA,IAAI,cAAc,IAAA,EAAM;AACpB,IAAA;AAAA,EACJ;AAEA,EAAA,MAAM,UAAU,wBAAA,EAAyB;AACzC,EAAA,IAAI,OAAA,EAAS;AACT,IAAA,OAAA,CAAQ,OAAA,CAAQ,KAAK,UAAU,CAAA;AAC/B,IAAA;AAAA,EACJ;AAEA,EAAA,SAAA,CAAU,GAAA,EAAK,YAAY,MAAM,CAAA;AACrC;AAIO,IAAM,kBAAA,GAAqB,OAAO,IAAA,KAAc;AACnD,EAAA,OAAO,IAAI,OAAA,CAAQ,CAAC,OAAA,KAAiB;AACjC,IAAA,MAAM,OAAO,cAAA,EAAe;AAE5B,IAAA,eAAA,CAAgB,IAAA,CAAK,cAAc,IAAI,CAAA;AAEvC,IAAA,IAAI,IAAA,CAAK,QAAA,KAAa,IAAA,CAAK,YAAA,EAAc;AACrC,MAAA,eAAA,CAAgB,IAAA,CAAK,UAAU,IAAI,CAAA;AAAA,IACvC;AAEA,IAAA,OAAA,EAAQ;AAAA,EACZ,CAAC,CAAA;AACL;AAEO,IAAM,iBAAA,GAAoB,OAAO,IAAA,KAAc;AAClD,EAAA,OAAO,IAAI,OAAA,CAAQ,CAAC,OAAA,KAAiB;AACjC,IAAA,eAAA,CAAgB,cAAA,EAAe,CAAE,YAAA,EAAc,IAAI,CAAA;AAEnD,IAAA,OAAA,EAAQ;AAAA,EACZ,CAAC,CAAA;AACL;AAEA,SAAS,uBAAuB,SAAA,EAA2B;AACvD,EAAA,IAAI,OAAO,SAAA,KAAc,QAAA,IAAY,SAAA,GAAY,IAAA,EAAmB;AAChE,IAAA,OAAO,SAAA;AAAA,EACX;AACA,EAAA,IAAI,OAAO,SAAA,KAAc,QAAA,IAAY,SAAA,GAAY,GAAA,EAAe;AAC5D,IAAA,OAAO,SAAA,GAAY,GAAA;AAAA,EACvB;AACA,EAAA,OAAO,IAAA,CAAK,GAAA,EAAI,GAAA,CAAK,SAAA,IAAa,CAAA,IAAK,GAAA;AAC3C;AAEO,SAAS,eAAA,CAAgB,OAAe,SAAA,EAAmB;AAC9D,EAAA,OAAO,IAAI,OAAA,CAAQ,CAAC,OAAA,KAAiB;AACjC,IAAA,IAAI,CAAC,KAAA,IAAS,OAAO,KAAA,KAAU,QAAA,EAAU;AACrC,MAAA,OAAA,EAAQ;AAER,MAAA;AAAA,IACJ;AAEA,IAAA,MAAM,SAAA,GAAY,uBAAuB,SAAS,CAAA;AAClD,IAAA,MAAM,UAAU,wBAAA,EAAyB;AAEzC,IAAA,IAAI,OAAA,EAAS;AACT,MAAA,OAAA,CAAQ,eAAA,CAAgB,OAAO,SAAS,CAAA;AACxC,MAAA,OAAA,EAAQ;AACR,MAAA;AAAA,IACJ;AAEA,IAAA,MAAM,UAAA,GAAa,qBAAqB,KAAK,CAAA;AAE7C,IAAA,IAAI,cAAc,IAAA,EAAM;AACpB,MAAA,SAAA,CAAU,gBAAe,CAAE,YAAA,EAAc,YAAY,IAAI,IAAA,CAAK,SAAS,CAAC,CAAA;AAAA,IAC5E;AAEA,IAAA,IAAI,qBAAoB,EAAG;AACvB,MAAA,uBAAA,CAAwB,OAAO,SAAS,CAAA;AAAA,IAC5C;AAEA,IAAA,OAAA,EAAQ;AAAA,EACZ,CAAC,CAAA;AACL;AAEO,SAAS,cAAA,CAAe,OAAe,SAAA,EAAoB;AAC9D,EAAA,OAAO,IAAI,OAAA,CAAQ,CAAC,OAAA,KAAiB;AACjC,IAAA,eAAA,CAAgB,OAAO,SAAS,CAAA;AAEhC,IAAA,OAAA,EAAQ;AAAA,EACZ,CAAC,CAAA;AACL;AAEO,IAAM,SAAA,GAAY,OAAO,IAAA,KAAc;AAC1C,EAAA,OAAO,IAAI,OAAA,CAAQ,CAAC,OAAA,KAAiB;AACjC,IAAA,eAAA,CAAgB,cAAA,EAAe,CAAE,MAAA,EAAQ,IAAA,IAAQ,EAAE,CAAA;AAEnD,IAAA,OAAA,EAAQ;AAAA,EACZ,CAAC,CAAA;AACL;AAEO,IAAM,mBAAA,GAAsB,OAAO,IAAA,KAAc;AACpD,EAAA,OAAO,IAAI,OAAA,CAAQ,CAAC,OAAA,KAAiB;AACjC,IAAA,eAAA,CAAgB,cAAA,EAAe,CAAE,gBAAA,EAAkB,IAAA,IAAQ,OAAO,CAAA;AAElE,IAAA,OAAA,EAAQ;AAAA,EACZ,CAAC,CAAA;AACL;AAIO,SAAS,UAAA,GAA4B;AACxC,EAAA,OAAO,cAAA,CAAe,cAAA,EAAe,CAAE,YAAY,CAAA;AACvD;AAEO,SAAS,eAAA,GAAiC;AAC7C,EAAA,MAAM,UAAU,wBAAA,EAAyB;AACzC,EAAA,IAAI,OAAA,EAAS;AACT,IAAA,OAAO,QAAQ,eAAA,EAAgB;AAAA,EACnC;AAEA,EAAA,MAAM,GAAA,GAAM,SAAA,CAAU,cAAA,EAAe,CAAE,YAAY,CAAA;AAEnD,EAAA,IAAI,CAAC,uBAAA,CAAwB,GAAG,CAAA,EAAG;AAC/B,IAAA,OAAO,GAAA;AAAA,EACX;AAEA,EAAA,IAAI,qBAAoB,EAAG;AACvB,IAAA,OAAO,sBAAA,EAAuB;AAAA,EAClC;AAEA,EAAA,OAAO,IAAA;AACX;AAGO,SAAS,iBAAA,GAA0B;AACtC,EAAA,MAAM,UAAU,wBAAA,EAAyB;AACzC,EAAA,IAAI,OAAA,EAAS;AACT,IAAA,OAAA,CAAQ,kBAAA,EAAmB;AAC3B,IAAA;AAAA,EACJ;AAEA,EAAA,MAAM,GAAA,GAAM,gBAAe,CAAE,YAAA;AAC7B,EAAA,IAAI,GAAA,EAAK;AACL,IAAA,YAAA,CAAa,GAAG,CAAA;AAAA,EACpB;AACA,EAAA,IAAI,qBAAoB,EAAG;AACvB,IAAA,uBAAA,CAAwB,IAAI,CAAC,CAAA;AAAA,EACjC;AACJ;AAEO,SAAS,SAAA,GAAwB;AACpC,EAAA,OAAO,cAAA,CAAe,cAAA,EAAe,CAAE,MAAM,CAAA;AACjD;AAEO,SAAS,mBAAA,GAAqC;AACjD,EAAA,OAAO,cAAA,CAAuB,cAAA,EAAe,CAAE,gBAAgB,CAAA;AACnE;AAGO,SAAS,uBAAA,GAAgC;AAC5C,EAAA,MAAM,UAAU,wBAAA,EAAyB;AACzC,EAAA,IAAI,CAAC,OAAA,EAAS;AACV,IAAA;AAAA,EACJ;AAEA,EAAA,MAAM,OAAO,cAAA,EAAe;AAC5B,EAAA,OAAA,CAAQ,kBAAA,EAAmB;AAC3B,EAAA,KAAA,MAAW,GAAA,IAAO;AAAA,IACd,IAAA,CAAK,YAAA;AAAA,IACL,IAAA,CAAK,MAAA;AAAA,IACL,IAAA,CAAK,gBAAA;AAAA,IACL,IAAA,CAAK,QAAA;AAAA,IACL,eAAA,CAAgB,EAAE,GAAA,CAAI,YAAA;AAAA,IACtB,eAAA,CAAgB,EAAE,GAAA,CAAI,eAAA;AAAA,IACtB,eAAA,CAAgB,EAAE,IAAA,CAAK,gBAAA;AAAA,IACvB,eAAA,CAAgB,EAAE,IAAA,CAAK;AAAA,GAC3B,EAAG;AACC,IAAA,IAAI,GAAA,EAAK;AACL,MAAA,OAAA,CAAQ,WAAW,GAAG,CAAA;AAAA,IAC1B;AAAA,EACJ;AACJ","file":"chunk-56UA4D6A.js","sourcesContent":["import { WP_STORAGE_KEYS } from './wp-storage-keys'\n\n// cookies (canonical wp.c.* names)\nexport const LOGIN_DETAILS = WP_STORAGE_KEYS.c.auth.login\nexport const REFRESH_TOKEN = WP_STORAGE_KEYS.c.auth.refresh\nexport const PORTAL = WP_STORAGE_KEYS.c.auth.portal\nexport const SUBSCRIPTION_TYPE = WP_STORAGE_KEYS.c.auth.sub\n\n// hub context fields inside wp.c.hub JSON blob\nexport const HUBSPOT_DATA = WP_STORAGE_KEYS.c.hub\nexport const HUB_ID = 'hubId'\nexport const DEV_PORTAL_ID = 'devPortalId'\nexport const PORTAL_ID = 'portalId'\nexport const DEV_API_URL = 'devApiUrl'\n","type StringStore = {\n getItem(key: string): string | null\n setItem(key: string, value: string): void\n removeItem(key: string): void\n}\n\nconst memory = new Map<string, string>()\n\nconst memoryStore: StringStore = {\n getItem(key: string) {\n return memory.has(key) ? memory.get(key)! : null\n },\n setItem(key: string, value: string) {\n memory.set(key, value)\n },\n removeItem(key: string) {\n memory.delete(key)\n }\n}\n\nfunction resolveStore(): StringStore {\n if (typeof globalThis === 'undefined') {\n return memoryStore\n }\n const ls = (globalThis as unknown as { localStorage?: StringStore }).localStorage\n if (!ls || typeof ls.getItem !== 'function') {\n return memoryStore\n }\n try {\n const probeKey = '__woodsportal_client_sdk_ls_probe__'\n ls.setItem(probeKey, '1')\n ls.removeItem(probeKey)\n return ls\n } catch {\n return memoryStore\n }\n}\n\nexport const storage = {\n set: (key: string, value: unknown) => {\n resolveStore().setItem(key, JSON.stringify(value))\n },\n\n get: <T>(key: string): T | null => {\n const item = resolveStore().getItem(key)\n return item ? (JSON.parse(item) as T) : null\n },\n\n remove: (key: string) => {\n resolveStore().removeItem(key)\n }\n}\n","/** Initialized HTTP client hub context — fallback when storage is empty (avoids import cycles). */\nlet initializedHubId = ''\nlet initializedDevPortalId = ''\nlet initializedDevApiUrl = ''\n\nexport function setRuntimeHttpClientHubContext(partial: { hubId?: string; devPortalId?: string; devApiUrl?: string }): void {\n if (partial.hubId != null) {\n initializedHubId = partial.hubId\n }\n if (partial.devPortalId != null) {\n initializedDevPortalId = partial.devPortalId\n }\n if (partial.devApiUrl != null) {\n initializedDevApiUrl = partial.devApiUrl\n }\n}\n\nexport function getRuntimeHttpClientHubId(): string {\n return initializedHubId\n}\n\nexport function getRuntimeHttpClientDevPortalId(): string {\n return initializedDevPortalId\n}\n\nexport function getRuntimeHttpClientDevApiUrl(): string {\n return initializedDevApiUrl\n}\n\n/** @internal Vitest only */\nexport function resetRuntimeHttpClientHubContextForTests(): void {\n initializedHubId = ''\n initializedDevPortalId = ''\n initializedDevApiUrl = ''\n}\n","import { Config, HubspotStorage } from '../types'\nimport { HUBSPOT_DATA, HUB_ID, DEV_PORTAL_ID, PORTAL_ID, DEV_API_URL } from './constants'\nimport { storage } from './localStorage'\nimport { getRuntimeHttpClientDevApiUrl, getRuntimeHttpClientDevPortalId, getRuntimeHttpClientHubId } from './runtime-hub-context'\n\nfunction readStorageField(key: string): string {\n const hubSpotData = storage.get<Record<string, string>>(HUBSPOT_DATA)\n const value = hubSpotData?.[key]\n return value != null && String(value).trim() !== '' ? String(value) : ''\n}\n\nexport const config = {\n get hubId() {\n return readStorageField(HUB_ID) || getRuntimeHttpClientHubId()\n },\n get devPortalId() {\n return readStorageField(DEV_PORTAL_ID) || getRuntimeHttpClientDevPortalId()\n },\n get portalId() {\n const portal = readStorageField(PORTAL_ID)\n if (portal) return portal\n return readStorageField(DEV_PORTAL_ID) || getRuntimeHttpClientDevPortalId()\n },\n get devApiUrl() {\n return readStorageField(DEV_API_URL) || getRuntimeHttpClientDevApiUrl()\n }\n} satisfies Config\n\nexport const setConfig = {\n setDevPortalId(portalId: string) {\n const existing = storage.get<HubspotStorage>(HUBSPOT_DATA) || {}\n\n storage.set(HUBSPOT_DATA, {\n ...existing,\n [PORTAL_ID]: portalId\n })\n }\n}\n","/**\n * Iframe-safe refresh token persistence (HubSpot CMS editor third-party cookie fallback).\n */\n\nimport { wpClientIframeRefreshExpKey, wpClientIframeRefreshKey, WP_STORAGE_KEYS } from '../utils/wp-storage-keys'\nimport { config } from '../utils/hub-context'\n\nlet iframeStorageMode = false\n\nexport function setIframeStorageMode(enabled: boolean): void {\n iframeStorageMode = enabled\n}\n\nexport function isIframeStorageMode(): boolean {\n return iframeStorageMode\n}\n\nfunction resolveHubId(): string | number {\n const fromWindow =\n typeof window !== 'undefined' ? (window as Window & { hubSpotData?: { hubId?: string | number } }).hubSpotData?.hubId : undefined\n const fromConfig = config.hubId\n return fromWindow ?? fromConfig ?? 'default'\n}\n\nfunction iframeKey(): string {\n return wpClientIframeRefreshKey(resolveHubId())\n}\n\nfunction iframeExpKey(): string {\n return wpClientIframeRefreshExpKey(resolveHubId())\n}\n\nexport function readIframeRefreshToken(): string | null {\n if (typeof window === 'undefined' || !window.localStorage) {\n return null\n }\n try {\n const raw = window.localStorage.getItem(iframeKey())\n return raw ? (JSON.parse(raw) as string) : null\n } catch {\n return null\n }\n}\n\nexport function writeIframeRefreshToken(token: string, expiresAtMs?: number): void {\n if (typeof window === 'undefined' || !window.localStorage) {\n return\n }\n try {\n window.localStorage.setItem(iframeKey(), JSON.stringify(token))\n if (expiresAtMs != null) {\n window.localStorage.setItem(iframeExpKey(), String(expiresAtMs))\n }\n } catch {\n // private mode / blocked storage\n }\n}\n\nexport function clearIframeRefreshToken(): void {\n if (typeof window === 'undefined' || !window.localStorage) {\n return\n }\n try {\n window.localStorage.removeItem(iframeKey())\n window.localStorage.removeItem(iframeExpKey())\n } catch {\n // ignore\n }\n}\n\nexport function iframeRefreshTokenExpired(): boolean {\n if (typeof window === 'undefined' || !window.localStorage) {\n return true\n }\n try {\n const expRaw = window.localStorage.getItem(iframeExpKey())\n if (!expRaw) {\n return false\n }\n const exp = Number(expRaw)\n return Number.isFinite(exp) && Date.now() > exp\n } catch {\n return true\n }\n}\n\nexport function listIframeRefreshKeyPrefixes(): string[] {\n return ['wp_iframe_rt_', WP_STORAGE_KEYS.c.auth.iframeRtPrefix]\n}\n","const SENSITIVE_FIELD_NAMES = new Set(['token', 'refreshtoken', 'accesstoken', 'password', 'secret', 'authorization', 'otp', 'code'])\n\nfunction isSensitiveField(name: string): boolean {\n const normalized = name.toLowerCase()\n return SENSITIVE_FIELD_NAMES.has(normalized) || normalized.includes('password')\n}\n\nfunction redactValue(value: unknown): unknown {\n if (value == null || typeof value !== 'object') {\n return value\n }\n if (Array.isArray(value)) {\n return value.map(redactValue)\n }\n\n const input = value as Record<string, unknown>\n const output: Record<string, unknown> = {}\n for (const [key, nested] of Object.entries(input)) {\n output[key] = isSensitiveField(key) ? '[redacted]' : redactValue(nested)\n }\n return output\n}\n\n/** Prefer structured API error fields; fall back to redacted payload. */\nexport function sanitizeAxiosErrorData(data: unknown): unknown {\n if (data == null || typeof data !== 'object') {\n return data\n }\n\n const payload = data as Record<string, unknown>\n const safeFields = ['errorCode', 'message', 'errorMessage', 'detailedMessage', 'correlationId', 'category', 'statusCode'] as const\n\n const summary: Record<string, unknown> = {}\n for (const field of safeFields) {\n if (field in payload) {\n summary[field] = payload[field]\n }\n }\n\n if (Object.keys(summary).length > 0) {\n return summary\n }\n\n return redactValue(payload)\n}\n\n/** Redact sensitive keys from arbitrary log metadata. */\nexport function redactLogMeta(meta: Record<string, unknown> | undefined): Record<string, unknown> | undefined {\n if (meta == null) {\n return meta\n }\n return redactValue(meta) as Record<string, unknown>\n}\n","import axios from 'axios'\nimport { sanitizeAxiosErrorData, redactLogMeta } from '../utils/error-log-sanitize'\nimport type { LogLevel, LogMeta, LoggerConfig, SdkLogger } from './logger-types'\n\nconst LEVEL_RANK: Record<LogLevel, number> = {\n debug: 0,\n info: 1,\n warn: 2,\n error: 3,\n silent: 4\n}\n\nconst DEFAULT_CONFIG = {\n level: 'info' as LogLevel,\n namespace: 'woodsportal-sdk',\n enabled: true,\n httpTracing: true\n}\n\nlet runtimeConfig = { ...DEFAULT_CONFIG }\nlet customSinks: LoggerConfig['sinks']\n\nfunction shouldEmit(level: LogLevel): boolean {\n if (!runtimeConfig.enabled || runtimeConfig.level === 'silent') {\n return false\n }\n return LEVEL_RANK[level] >= LEVEL_RANK[runtimeConfig.level]\n}\n\nfunction formatPrefix(context: string): string {\n return `[${runtimeConfig.namespace}] ${context}`\n}\n\nfunction defaultDebug(context: string, message: string, meta?: LogMeta): void {\n if (meta != null) {\n console.debug(formatPrefix(context), message, meta)\n return\n }\n console.debug(formatPrefix(context), message)\n}\n\nfunction defaultInfo(context: string, message: string, meta?: LogMeta): void {\n if (meta != null) {\n console.info(formatPrefix(context), message, meta)\n return\n }\n console.info(formatPrefix(context), message)\n}\n\nfunction defaultWarn(context: string, message: string, meta?: LogMeta): void {\n if (meta != null) {\n console.warn(formatPrefix(context), message, meta)\n return\n }\n console.warn(formatPrefix(context), message)\n}\n\nfunction defaultError(context: string, error: unknown, meta?: LogMeta): void {\n if (axios.isAxiosError(error)) {\n const payload = {\n message: error.message,\n status: error.response?.status,\n statusText: error.response?.statusText,\n data: sanitizeAxiosErrorData(error.response?.data),\n url: error.config?.url,\n method: error.config?.method,\n ...redactLogMeta(meta)\n }\n console.error(formatPrefix(context), payload)\n return\n }\n\n if (error instanceof Error) {\n if (meta != null) {\n console.error(formatPrefix(context), error.message, error, redactLogMeta(meta))\n return\n }\n console.error(formatPrefix(context), error.message, error)\n return\n }\n\n if (meta != null) {\n console.error(formatPrefix(context), error, redactLogMeta(meta))\n return\n }\n console.error(formatPrefix(context), error)\n}\n\nexport function configureLogger(config: LoggerConfig = {}): void {\n runtimeConfig = {\n level: config.level ?? DEFAULT_CONFIG.level,\n namespace: config.namespace ?? DEFAULT_CONFIG.namespace,\n enabled: config.enabled ?? DEFAULT_CONFIG.enabled,\n httpTracing: config.httpTracing ?? DEFAULT_CONFIG.httpTracing\n }\n customSinks = config.sinks\n}\n\n/** Test helper — restore defaults between test files. */\nexport function resetLoggerForTests(): void {\n runtimeConfig = { ...DEFAULT_CONFIG }\n customSinks = undefined\n}\n\nexport function isHttpTracingEnabled(): boolean {\n return runtimeConfig.enabled && runtimeConfig.httpTracing && shouldEmit('debug')\n}\n\nexport function getLoggerLevel(): LogLevel {\n return runtimeConfig.level\n}\n\nexport const logger: SdkLogger = {\n debug(context, message, meta) {\n if (!shouldEmit('debug')) return\n const sink = customSinks?.debug ?? defaultDebug\n sink(context, message, redactLogMeta(meta))\n },\n info(context, message, meta) {\n if (!shouldEmit('info')) return\n const sink = customSinks?.info ?? defaultInfo\n sink(context, message, redactLogMeta(meta))\n },\n warn(context, message, meta) {\n if (!shouldEmit('warn')) return\n const sink = customSinks?.warn ?? defaultWarn\n sink(context, message, redactLogMeta(meta))\n },\n error(context, error, meta) {\n if (!shouldEmit('error')) return\n const sink = customSinks?.error ?? defaultError\n sink(context, error, redactLogMeta(meta))\n }\n}\n\nexport type { LogLevel, LogMeta, LoggerConfig, SdkLogger } from './logger-types'\n","import { WP_STORAGE_KEYS } from '../utils/wp-storage-keys.js'\nimport { readSessionScopedItem, removeSessionScopedItem, writeSessionScopedItem } from '../storage/session-scoped-storage.js'\n\nexport type MfaStorageLane = 'c' | 'a'\n\ntype MfaPendingTokenKeys = {\n token: string\n exp: string\n}\n\nfunction keysForLane(lane: MfaStorageLane): MfaPendingTokenKeys {\n const mfa = lane === 'a' ? WP_STORAGE_KEYS.a.mfa : WP_STORAGE_KEYS.c.mfa\n return {\n token: mfa.pendingToken,\n exp: mfa.pendingTokenExp\n }\n}\n\nexport type MfaPendingAccessToken = {\n token: string\n expiresAt: number\n}\n\nfunction readExpiresAt(raw: string | null): number | null {\n if (raw == null || raw === '') {\n return null\n }\n const parsed = Number(raw)\n return Number.isFinite(parsed) ? parsed : null\n}\n\nfunction readScoped(key: string): string | null {\n return readSessionScopedItem(key)\n}\n\nfunction writeScoped(key: string, value: string): void {\n writeSessionScopedItem(key, value)\n}\n\nfunction removeScoped(key: string): void {\n removeSessionScopedItem(key)\n}\n\n/** Persist temp MFA access JWT for mid-gate page refresh (tab-scoped sessionStorage). */\nexport function storeMfaPendingAccessToken(token: string, expiresInSeconds: number | undefined, lane: MfaStorageLane = 'c'): void {\n if (!token || typeof token !== 'string') {\n return\n }\n\n const keys = keysForLane(lane)\n const expiresAt =\n typeof expiresInSeconds === 'number' && expiresInSeconds > 0 ? Date.now() + expiresInSeconds * 1000 : Date.now() + 15 * 60 * 1000\n\n writeScoped(keys.token, token)\n writeScoped(keys.exp, String(expiresAt))\n}\n\n/** Read temp MFA JWT if present and not expired. */\nexport function readMfaPendingAccessToken(lane: MfaStorageLane = 'c'): MfaPendingAccessToken | null {\n const keys = keysForLane(lane)\n const token = readScoped(keys.token)\n if (!token) {\n return null\n }\n\n const expiresAt = readExpiresAt(readScoped(keys.exp))\n if (expiresAt == null || Date.now() >= expiresAt) {\n clearMfaPendingAccessToken(lane)\n return null\n }\n\n return { token, expiresAt }\n}\n\nexport function clearMfaPendingAccessToken(lane: MfaStorageLane = 'c'): void {\n const keys = keysForLane(lane)\n removeScoped(keys.token)\n removeScoped(keys.exp)\n}\n\n/** True when sessionStorage holds a valid temp MFA access JWT for the lane. */\nexport function isMfaPendingAccessSession(lane: MfaStorageLane = 'c'): boolean {\n return readMfaPendingAccessToken(lane) != null\n}\n\nexport type HydrateMfaPendingAccessTokenInput = {\n lane?: MfaStorageLane\n setAccessToken: (token: string, expiresInSeconds?: number) => void | Promise<void>\n}\n\n/** Restore in-memory MFA temp JWT from sessionStorage after refresh. Returns true when hydrated. */\nexport async function hydrateMfaPendingAccessToken(input: HydrateMfaPendingAccessTokenInput): Promise<boolean> {\n const lane = input.lane ?? 'c'\n const pending = readMfaPendingAccessToken(lane)\n if (!pending) {\n return false\n }\n\n const ttlSeconds = Math.max(1, Math.floor((pending.expiresAt - Date.now()) / 1000))\n await input.setAccessToken(pending.token, ttlSeconds)\n return true\n}\n","import { WP_STORAGE_KEYS } from '../utils/wp-storage-keys'\n\nconst LOCK_NAME = 'wp.client.auth.refresh'\nconst STORAGE_LOCK_KEY = WP_STORAGE_KEYS.c.auth.refreshLock\nconst LOCK_TTL_MS = 30_000\n\nasync function withNavigatorLock<T>(fn: () => Promise<T>): Promise<T> {\n if (typeof navigator !== 'undefined' && navigator.locks?.request) {\n return navigator.locks.request(LOCK_NAME, fn)\n }\n return fn()\n}\n\nfunction tryAcquireStorageLock(): boolean {\n if (typeof window === 'undefined' || !window.localStorage) {\n return true\n }\n try {\n const raw = window.localStorage.getItem(STORAGE_LOCK_KEY)\n const now = Date.now()\n if (raw) {\n const ts = Number(raw)\n if (Number.isFinite(ts) && now - ts < LOCK_TTL_MS) {\n return false\n }\n }\n window.localStorage.setItem(STORAGE_LOCK_KEY, String(now))\n return true\n } catch {\n return true\n }\n}\n\nfunction releaseStorageLock(): void {\n if (typeof window === 'undefined' || !window.localStorage) {\n return\n }\n try {\n window.localStorage.removeItem(STORAGE_LOCK_KEY)\n } catch {\n // ignore\n }\n}\n\nasync function waitForStorageLock(maxWaitMs = LOCK_TTL_MS): Promise<void> {\n const start = Date.now()\n while (Date.now() - start < maxWaitMs) {\n if (tryAcquireStorageLock()) {\n return\n }\n await new Promise((r) => setTimeout(r, 200))\n }\n}\n\n/**\n * Cross-tab singleflight around refresh token rotation.\n */\nexport async function withRefreshLock<T>(fn: () => Promise<T>): Promise<T> {\n return withNavigatorLock(async () => {\n await waitForStorageLock()\n try {\n return await fn()\n } finally {\n releaseStorageLock()\n }\n })\n}\n\n/** Test-only: drop stale cross-tab refresh lock from localStorage. */\nexport function clearRefreshLockForTests(): void {\n try {\n if (typeof window === 'undefined' || !window.localStorage) {\n return\n }\n window.localStorage.removeItem(STORAGE_LOCK_KEY)\n } catch {\n // ignore — jsdom may be torn down between files\n }\n}\n","import axios from 'axios'\n\nexport type HttpErrorKind = 'service_unavailable' | 'network' | 'timeout' | 'auth' | 'client' | 'server' | 'unknown'\n\nexport const SERVICE_UNAVAILABLE_MESSAGE = 'Service temporarily unavailable. Please try again in a few minutes.'\n\nconst SERVICE_UNAVAILABLE_STATUSES = new Set([502, 503, 504])\n\n/**\n * Classifies axios and browser network failures for user-facing handling.\n *\n * When the API edge returns 503 without CORS headers, browsers surface ERR_NETWORK\n * with no response — treat that as service unavailable for WoodsPortal API calls.\n */\nexport function classifyHttpError(error: unknown): HttpErrorKind {\n if (!axios.isAxiosError(error)) {\n return 'unknown'\n }\n\n const status = error.response?.status\n if (status != null) {\n if (SERVICE_UNAVAILABLE_STATUSES.has(status)) return 'service_unavailable'\n if (status === 401 || status === 403) return 'auth'\n if (status >= 400 && status < 500) return 'client'\n if (status >= 500) return 'server'\n }\n\n if (error.code === 'ECONNABORTED' || error.message.toLowerCase().includes('timeout')) {\n return 'timeout'\n }\n\n if (\n error.code === 'ERR_NETWORK' ||\n error.code === 'ECONNREFUSED' ||\n error.message === 'Network Error' ||\n error.message.includes('ERR_CONNECTION_REFUSED')\n ) {\n return 'service_unavailable'\n }\n\n return 'network'\n}\n\nexport function isServiceUnavailableError(error: unknown): boolean {\n return classifyHttpError(error) === 'service_unavailable'\n}\n\nexport function getHttpErrorMessage(error: unknown): string {\n const kind = classifyHttpError(error)\n\n switch (kind) {\n case 'service_unavailable':\n return SERVICE_UNAVAILABLE_MESSAGE\n case 'timeout':\n return 'The request timed out. Please check your connection and try again.'\n case 'auth':\n return 'Your session has expired. Please sign in again.'\n case 'network':\n return 'Unable to reach the server. Please check your connection and try again.'\n case 'client':\n case 'server':\n case 'unknown': {\n if (axios.isAxiosError(error)) {\n const payload = error.response?.data as Record<string, unknown> | undefined\n const apiMessage = payload?.errorMessage ?? payload?.message\n if (typeof apiMessage === 'string' && apiMessage.trim() !== '') {\n return apiMessage\n }\n }\n return 'Something went wrong. Please try again.'\n }\n }\n}\n","import axios from 'axios'\nimport { AuthErrorCode, parseApiErrorPayload } from '../auth/auth-error-codes.js'\nimport { classifyHttpError } from './http-errors.js'\n\nexport type RefreshFailureKind = 'transient' | 'missing_context' | 'missing_refresh_token' | 'auth_invalid'\n\nexport type RefreshCallbackResult = {\n token: string | null\n success: boolean\n failureKind?: RefreshFailureKind\n}\n\nconst DEFINITIVE_REFRESH_AUTH_CODES = new Set<string>([\n AuthErrorCode.TOKEN_INVALID,\n AuthErrorCode.TOKEN_EXPIRED,\n AuthErrorCode.MISSING_REFRESH_TOKEN,\n AuthErrorCode.AUTHENTICATION_FAILED,\n AuthErrorCode.INVALID_CREDENTIALS,\n AuthErrorCode.ACCOUNT_LOCKED,\n AuthErrorCode.ACCOUNT_DISABLED\n])\n\nexport function isDefinitiveRefreshAuthError(errorCode?: string, status?: number): boolean {\n const code = (errorCode ?? '').trim().toUpperCase()\n if (code && DEFINITIVE_REFRESH_AUTH_CODES.has(code)) {\n return true\n }\n if (status === 401 && !code) {\n return true\n }\n return false\n}\n\nexport function classifyRefreshHttpError(error: unknown): RefreshFailureKind {\n if (!axios.isAxiosError(error)) {\n return 'transient'\n }\n\n const status = error.response?.status\n const payload = parseApiErrorPayload(error.response?.data)\n\n if (status === 429) {\n return 'transient'\n }\n\n if (status != null && status >= 500) {\n return 'transient'\n }\n\n const httpKind = classifyHttpError(error)\n if (httpKind === 'network' || httpKind === 'timeout' || httpKind === 'service_unavailable') {\n return 'transient'\n }\n\n if (status === 401 || status === 403) {\n if (isDefinitiveRefreshAuthError(payload.errorCode, status)) {\n return 'auth_invalid'\n }\n return 'transient'\n }\n\n return 'transient'\n}\n\nexport function classifyRefreshResponseWithoutToken(response: unknown): RefreshFailureKind {\n if (!response || typeof response !== 'object') {\n return 'transient'\n }\n\n const record = response as { status?: number; data?: unknown }\n const status = record.status\n const payload = parseApiErrorPayload(record.data)\n\n if (isDefinitiveRefreshAuthError(payload.errorCode, status)) {\n return 'auth_invalid'\n }\n\n return 'transient'\n}\n\nexport function isTransientRefreshFailure(kind?: RefreshFailureKind): boolean {\n return kind === 'transient' || kind === 'missing_context'\n}\n\nexport function shouldLogoutAfterRefreshFailure(kind?: RefreshFailureKind): boolean {\n return kind === 'auth_invalid' || kind === 'missing_refresh_token'\n}\n","import type { RefreshFailureKind } from './refresh-failure-policy.js'\n\n/** Transient refresh failure — session cookies remain valid; retry later. */\nexport class SessionRefreshDeferredError extends Error {\n readonly failureKind: RefreshFailureKind | undefined\n\n constructor(failureKind?: RefreshFailureKind, cause?: unknown) {\n super('Session refresh deferred')\n this.name = 'SessionRefreshDeferredError'\n this.failureKind = failureKind\n if (cause !== undefined) {\n ;(this as Error & { cause?: unknown }).cause = cause\n }\n }\n}\n\n/** Definitive auth refresh failure — session should be cleared. */\nexport class SessionRefreshFailedError extends Error {\n readonly failureKind: RefreshFailureKind | undefined\n\n constructor(failureKind?: RefreshFailureKind, cause?: unknown) {\n super('Session refresh failed')\n this.name = 'SessionRefreshFailedError'\n this.failureKind = failureKind\n if (cause !== undefined) {\n ;(this as Error & { cause?: unknown }).cause = cause\n }\n }\n}\n\nexport function isSessionRefreshDeferredError(error: unknown): error is SessionRefreshDeferredError {\n if (error instanceof SessionRefreshDeferredError) {\n return true\n }\n return error instanceof Error && error.message === 'Session refresh deferred'\n}\n\nexport function isSessionRefreshFailedError(error: unknown): error is SessionRefreshFailedError {\n if (error instanceof SessionRefreshFailedError) {\n return true\n }\n return error instanceof Error && error.message === 'Session refresh failed'\n}\n","/**\n\n * Token storage utilities\n\n * These functions handle access token management\n\n */\n\nimport { getCookie, isCookieExpired, isCorruptCookieRawValue } from '../utils/cookie.js'\n\nimport { getStorageKeys } from '../utils/storage-keys'\nimport { getSessionStorageAdapter } from '../storage/session-storage-registry.js'\nimport { WP_STORAGE_KEYS } from '../utils/wp-storage-keys.js'\nimport { readSessionScopedItem, removeSessionScopedItem, writeSessionScopedItem } from '../storage/session-scoped-storage.js'\nimport { isIframeStorageMode, readIframeRefreshToken } from './iframe-session-storage.js'\nimport { logger } from '../logging/logger.js'\nimport { isMfaPendingAccessSession } from '../auth/mfa-pending-token-storage.js'\nimport { withRefreshLock } from './refresh-lock.js'\nimport { isTransientRefreshFailure, shouldLogoutAfterRefreshFailure, type RefreshCallbackResult } from './refresh-failure-policy.js'\nimport { SessionRefreshDeferredError, SessionRefreshFailedError } from './session-refresh-errors.js'\n\nlet accessToken: string | null = null\n\nlet tokenExpiresAt: number | null = null\n\nlet accessTtlMs: number | null = null\n\nlet refreshCallback: ((refreshToken: string) => Promise<RefreshCallbackResult>) | null = null\n\nlet refreshBufferSeconds = 60\n\nlet refreshPromise: Promise<void> | null = null\n\nlet lastRefreshFailed = false\n\nlet lastSuccessfulRefreshAt: number | null = null\n\nlet sessionLifecycleListener: (() => void) | null = null\n\nconst MIN_SHORT_TTL_BUFFER_MS = 5_000\n\nconst MIN_PROACTIVE_REFRESH_INTERVAL_MS = 30_000\n\nconst REFRESH_RETRY_BACKOFF_MS = [0, 500, 1500]\n\nconst REFRESH_MAX_ATTEMPTS = 3\n\nfunction delay(ms: number): Promise<void> {\n return new Promise((resolve) => {\n setTimeout(resolve, ms)\n })\n}\n\n/** Exported for unit tests. */\n\nexport function getEffectiveBufferMs(ttlMs: number): number {\n const capMs = refreshBufferSeconds * 1000\n\n let buffer: number\n if (ttlMs <= capMs) {\n buffer = Math.max(MIN_SHORT_TTL_BUFFER_MS, Math.floor(ttlMs * 0.2))\n } else {\n buffer = capMs\n }\n\n // Buffer must stay inside the token lifetime — otherwise every request looks \"expired\".\n const maxBuffer = Math.max(0, ttlMs - 1_000)\n return Math.min(buffer, maxBuffer)\n}\n\nfunction getCurrentBufferMs(): number {\n if (accessTtlMs != null && accessTtlMs > 0) {\n return getEffectiveBufferMs(accessTtlMs)\n }\n\n return refreshBufferSeconds * 1000\n}\n\nexport function getAccessToken(): string | null {\n return accessToken\n}\n\nexport function setSessionLifecycleListener(listener: (() => void) | null): void {\n sessionLifecycleListener = listener\n}\n\nfunction notifySessionLifecycleChange(): void {\n try {\n sessionLifecycleListener?.()\n } catch {\n // ignore listener errors\n }\n}\n\nfunction persistRefreshExhausted(): void {\n try {\n writeSessionScopedItem(WP_STORAGE_KEYS.c.auth.refreshExhausted, JSON.stringify({ ts: Date.now() }))\n } catch {\n // ignore\n }\n}\n\nfunction clearPersistedRefreshExhausted(): void {\n try {\n removeSessionScopedItem(WP_STORAGE_KEYS.c.auth.refreshExhausted)\n } catch {\n // ignore\n }\n}\n\nfunction readPersistedRefreshExhausted(): boolean {\n try {\n return Boolean(readSessionScopedItem(WP_STORAGE_KEYS.c.auth.refreshExhausted))\n } catch {\n return false\n }\n}\n\n/** Restore in-memory refresh-failure state after a full page reload (same tab). */\nexport function hydrateSessionRefreshState(): void {\n if (readPersistedRefreshExhausted()) {\n lastRefreshFailed = true\n }\n}\n\nexport function clearSessionRefreshExhaustedState(): void {\n lastRefreshFailed = false\n clearPersistedRefreshExhausted()\n}\n\nfunction markRefreshFailed(): void {\n lastRefreshFailed = true\n persistRefreshExhausted()\n clearAccessToken()\n notifySessionLifecycleChange()\n}\n\nexport function storAccessToken(token: string, expiresIn?: number): void {\n accessToken = token\n\n clearSessionRefreshExhaustedState()\n\n if (expiresIn != null && expiresIn > 0) {\n accessTtlMs = expiresIn * 1000\n\n tokenExpiresAt = Date.now() + accessTtlMs\n } else {\n accessTtlMs = null\n\n tokenExpiresAt = null\n }\n\n notifySessionLifecycleChange()\n}\n\nexport function clearAccessToken(): void {\n accessToken = null\n\n tokenExpiresAt = null\n\n accessTtlMs = null\n\n lastSuccessfulRefreshAt = null\n}\n\n/** Clears proactive refresh throttle only — refresh exhaustion survives until login or T3 sessionStorage clear. */\nexport function resetSessionAuthState(): void {\n lastSuccessfulRefreshAt = null\n}\n\nexport function setRefreshBufferSeconds(seconds: number): void {\n refreshBufferSeconds = Math.max(0, seconds)\n}\n\nexport function getRefreshBufferSeconds(): number {\n return refreshBufferSeconds\n}\n\nexport function didLastRefreshFail(): boolean {\n return lastRefreshFailed\n}\n\n/** Alias for route guards — refresh was attempted and failed with no new access JWT. */\nexport function isSessionRefreshExhausted(): boolean {\n if (lastRefreshFailed) {\n return true\n }\n if (readPersistedRefreshExhausted()) {\n lastRefreshFailed = true\n return true\n }\n return false\n}\n\nexport function isExpiresAccessToken(): boolean {\n if (!accessToken) return true\n\n if (tokenExpiresAt === null) return false\n\n const bufferMs = getCurrentBufferMs()\n\n return Date.now() >= tokenExpiresAt - bufferMs\n}\n\n/**\n\n * Set the refresh callback function\n\n * This is called by the HTTP client during initialization\n\n */\n\nexport function setRefreshCallback(callback: (refreshToken: string) => Promise<RefreshCallbackResult>): void {\n refreshCallback = callback\n}\n\nexport function isRefreshInFlight(): boolean {\n return refreshPromise != null\n}\n\nexport type RefreshSessionOptions = {\n /** Bypass min proactive refresh interval (e.g. 401 retry, cold bootstrap). */\n\n force?: boolean\n}\n\n/** Single deduped refresh entry point for bootstrap, HTTP client, and visibility handlers. */\n\nexport async function refreshSession(options: RefreshSessionOptions = {}): Promise<void> {\n const { force = false } = options\n\n if (isMfaPendingAccessSession('c') || isMfaPendingAccessSession('a')) {\n return\n }\n\n if (!force && lastSuccessfulRefreshAt != null && Date.now() - lastSuccessfulRefreshAt < MIN_PROACTIVE_REFRESH_INTERVAL_MS) {\n return\n }\n\n if (!refreshCallback) {\n return\n }\n\n if (!refreshPromise) {\n refreshPromise = (async () => {\n await withRefreshLock(async () => {\n const { getRefreshToken } = await import('./auth-utils.js')\n const refreshToken = getRefreshToken()\n\n if (!refreshToken) {\n markRefreshFailed()\n\n const storageKey = getStorageKeys().refreshToken\n const hasCookieKey =\n typeof document !== 'undefined' &&\n typeof storageKey === 'string' &&\n storageKey.length > 0 &&\n document.cookie.includes(`${storageKey}=`)\n\n logger.warn('auth', 'refresh session aborted: missing refresh token', {\n operation: 'refreshSession',\n storageKey,\n hasCookieKey,\n iframeStorageMode: isIframeStorageMode()\n })\n\n throw new Error('Session expired: missing refresh token')\n }\n\n let lastFailureKind: RefreshCallbackResult['failureKind']\n\n for (let attempt = 0; attempt < REFRESH_MAX_ATTEMPTS; attempt += 1) {\n if (attempt > 0) {\n await delay(REFRESH_RETRY_BACKOFF_MS[attempt] ?? REFRESH_RETRY_BACKOFF_MS.at(-1)!)\n }\n\n const result = await refreshCallback!(refreshToken)\n if (result.success && result.token) {\n lastRefreshFailed = false\n lastSuccessfulRefreshAt = Date.now()\n return\n }\n\n lastFailureKind = result.failureKind\n\n if (!isTransientRefreshFailure(result.failureKind)) {\n break\n }\n }\n\n if (shouldLogoutAfterRefreshFailure(lastFailureKind)) {\n markRefreshFailed()\n throw new SessionRefreshFailedError(lastFailureKind)\n }\n\n throw new SessionRefreshDeferredError(lastFailureKind)\n })\n })().finally(() => {\n refreshPromise = null\n })\n }\n\n await refreshPromise\n}\n\n/**\n\n * Ensures the access token is valid, refreshing if necessary.\n\n * Throws when refresh is required but fails (avoids bearer-less 401 loops).\n\n */\n\nexport async function ensureValidRefresh(): Promise<void> {\n if (isMfaPendingAccessSession('c') || isMfaPendingAccessSession('a')) {\n return\n }\n\n // Anonymous / pre-auth calls (pre-login, login bootstrap, etc.) — no refresh attempt.\n if (!getAccessToken() && !hasRefreshSession()) {\n return\n }\n\n if (!isExpiresAccessToken()) {\n return\n }\n\n // Pre-request refresh must not be throttled by the proactive min interval.\n await refreshSession({ force: true })\n}\n\nexport function isAuthenticateApp() {\n const token = getAccessToken()\n\n if (token) {\n const bufferMs = getCurrentBufferMs()\n\n if (tokenExpiresAt === null || Date.now() < tokenExpiresAt - bufferMs) {\n return true\n }\n }\n\n if (getSessionStorageAdapter()) {\n if (hasRefreshSession()) {\n return true\n }\n return false\n }\n\n if (!isCookieExpired(getStorageKeys().refreshToken)) {\n if (lastRefreshFailed && !token) {\n return false\n }\n return true\n }\n\n return false\n}\n\n/** Preferred 3.0 name for {@link isAuthenticateApp}. */\n\nexport function isAuthenticated() {\n return isAuthenticateApp()\n}\n\n/** Preferred 3.0 name for {@link isExpiresAccessToken}. */\n\nexport function isAccessTokenExpired() {\n return isExpiresAccessToken()\n}\n\nexport function hasRefreshSession(): boolean {\n if (isSessionRefreshExhausted() && !accessToken) {\n return false\n }\n const adapter = getSessionStorageAdapter()\n if (adapter) {\n if (!adapter.getRefreshToken()) {\n return false\n }\n } else {\n const refreshKey = getStorageKeys().refreshToken\n if (!refreshKey || isCookieExpired(refreshKey)) {\n return false\n }\n if (!readRefreshTokenValue()) {\n return false\n }\n }\n if (lastRefreshFailed && !accessToken) {\n return false\n }\n return true\n}\n\nfunction readRefreshTokenValue(): string | null {\n const adapter = getSessionStorageAdapter()\n if (adapter) {\n return adapter.getRefreshToken()\n }\n\n const key = getStorageKeys().refreshToken\n const raw = getCookie(key)\n if (!isCorruptCookieRawValue(raw)) {\n return raw\n }\n if (isIframeStorageMode()) {\n return readIframeRefreshToken()\n }\n return null\n}\n\nexport function hasValidAccessToken(): boolean {\n return Boolean(getAccessToken()) && !isExpiresAccessToken()\n}\n","/**\n\n * Authentication utility functions\n\n * These handle refresh token management\n\n */\n\nimport { setCookie, parseCookieJson, stringifyCookieValue, getCookie, isCorruptCookieRawValue, removeCookie } from '../utils/cookie'\n\nimport { getStorageKeys } from '../utils/storage-keys'\nimport { WP_STORAGE_KEYS } from '../utils/wp-storage-keys'\n\nimport { getSessionStorageAdapter } from '../storage/session-storage-registry'\n\nimport { storAccessToken } from './token-store'\n\nimport { isIframeStorageMode, readIframeRefreshToken, writeIframeRefreshToken } from './iframe-session-storage'\n\nfunction readStoredJson<T>(key: string | null | undefined): T | null {\n if (key == null || key === '') {\n return null\n }\n\n const adapter = getSessionStorageAdapter()\n if (adapter) {\n const raw = adapter.getItem(key)\n if (isCorruptCookieRawValue(raw)) {\n if (raw === 'undefined' || raw === 'null') {\n adapter.removeItem(key)\n }\n return null\n }\n try {\n return JSON.parse(raw!) as T\n } catch {\n return raw as unknown as T\n }\n }\n\n return parseCookieJson<T>(key)\n}\n\nfunction writeJsonCookie(key: string | undefined, data: unknown, expire?: number | Date): void {\n if (!key) {\n return\n }\n\n const serialized = stringifyCookieValue(data)\n\n if (serialized == null) {\n return\n }\n\n const adapter = getSessionStorageAdapter()\n if (adapter) {\n adapter.setItem(key, serialized)\n return\n }\n\n setCookie(key, serialized, expire)\n}\n\n// Set data\n\nexport const setLoggedInDetails = async (data: any) => {\n return new Promise((resolve: any) => {\n const keys = getStorageKeys()\n\n writeJsonCookie(keys.loginDetails, data)\n\n if (keys.authUser !== keys.loginDetails) {\n writeJsonCookie(keys.authUser, data)\n }\n\n resolve()\n })\n}\n\nexport const setProfileDetails = async (data: any) => {\n return new Promise((resolve: any) => {\n writeJsonCookie(getStorageKeys().loginDetails, data)\n\n resolve()\n })\n}\n\nfunction resolveRefreshExpiryMs(expiresAt: number): number {\n if (typeof expiresAt === 'number' && expiresAt > 1_000_000_000_000) {\n return expiresAt\n }\n if (typeof expiresAt === 'number' && expiresAt > 1_000_000_000) {\n return expiresAt * 1000\n }\n return Date.now() + (expiresAt || 0) * 1000\n}\n\nexport function setRefreshToken(token: string, expiresAt: number) {\n return new Promise((resolve: any) => {\n if (!token || typeof token !== 'string') {\n resolve()\n\n return\n }\n\n const expiresMs = resolveRefreshExpiryMs(expiresAt)\n const adapter = getSessionStorageAdapter()\n\n if (adapter) {\n adapter.setRefreshToken(token, expiresMs)\n resolve()\n return\n }\n\n const serialized = stringifyCookieValue(token)\n\n if (serialized != null) {\n setCookie(getStorageKeys().refreshToken, serialized, new Date(expiresMs))\n }\n\n if (isIframeStorageMode()) {\n writeIframeRefreshToken(token, expiresMs)\n }\n\n resolve()\n })\n}\n\nexport function setAccessToken(token: string, expiresIn?: number) {\n return new Promise((resolve: any) => {\n storAccessToken(token, expiresIn)\n\n resolve()\n })\n}\n\nexport const setPortal = async (data: any) => {\n return new Promise((resolve: any) => {\n writeJsonCookie(getStorageKeys().portal, data ?? {})\n\n resolve()\n })\n}\n\nexport const setSubscriptionType = async (data: any) => {\n return new Promise((resolve: any) => {\n writeJsonCookie(getStorageKeys().subscriptionType, data ?? 'BASIC')\n\n resolve()\n })\n}\n\n// Get data\n\nexport function getProfile(): string | null {\n return readStoredJson(getStorageKeys().loginDetails)\n}\n\nexport function getRefreshToken(): string | null {\n const adapter = getSessionStorageAdapter()\n if (adapter) {\n return adapter.getRefreshToken()\n }\n\n const raw = getCookie(getStorageKeys().refreshToken)\n\n if (!isCorruptCookieRawValue(raw)) {\n return raw\n }\n\n if (isIframeStorageMode()) {\n return readIframeRefreshToken()\n }\n\n return null\n}\n\n/** Clears stored refresh token (e.g. when entering MFA pending gate). */\nexport function clearRefreshToken(): void {\n const adapter = getSessionStorageAdapter()\n if (adapter) {\n adapter.removeRefreshToken()\n return\n }\n\n const key = getStorageKeys().refreshToken\n if (key) {\n removeCookie(key)\n }\n if (isIframeStorageMode()) {\n writeIframeRefreshToken('', 0)\n }\n}\n\nexport function getPortal(): any | null {\n return readStoredJson(getStorageKeys().portal)\n}\n\nexport function getSubscriptionType(): string | null {\n return readStoredJson<string>(getStorageKeys().subscriptionType)\n}\n\n/** Clears adapter-backed session keys on native/mobile hosts. */\nexport function clearAdapterSessionData(): void {\n const adapter = getSessionStorageAdapter()\n if (!adapter) {\n return\n }\n\n const keys = getStorageKeys()\n adapter.removeRefreshToken()\n for (const key of [\n keys.loginDetails,\n keys.portal,\n keys.subscriptionType,\n keys.authUser,\n WP_STORAGE_KEYS.c.mfa.pendingToken,\n WP_STORAGE_KEYS.c.mfa.pendingTokenExp,\n WP_STORAGE_KEYS.c.auth.refreshExhausted,\n WP_STORAGE_KEYS.c.auth.err\n ]) {\n if (key) {\n adapter.removeItem(key)\n }\n }\n}\n"]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { createMutation, resolveListTableParams, Client } from './chunk-
|
|
2
|
-
import { actions } from './chunk-
|
|
3
|
-
import { actions2, actions as actions$1, actions4, actions5, actions3, actions7, isPipelineBoardObjectTypeId } from './chunk-
|
|
1
|
+
import { createMutation, resolveListTableParams, Client } from './chunk-B7ILWTB7.js';
|
|
2
|
+
import { actions } from './chunk-6TX7N56D.js';
|
|
3
|
+
import { actions2, actions as actions$1, actions4, actions5, actions3, actions7, isPipelineBoardObjectTypeId } from './chunk-YZIKCAPA.js';
|
|
4
4
|
import { getClientType } from './chunk-KPHAQNS2.js';
|
|
5
5
|
|
|
6
6
|
// src/main/features/crm/api/pipeline.ts
|
|
@@ -429,5 +429,5 @@ function shouldShowPipelineSelector(objectTypeId, pipelineCount) {
|
|
|
429
429
|
}
|
|
430
430
|
|
|
431
431
|
export { crmApi, isPipelineBoardObjectType, shouldShowPipelineSelector, supportsBoardView };
|
|
432
|
-
//# sourceMappingURL=chunk-
|
|
433
|
-
//# sourceMappingURL=chunk-
|
|
432
|
+
//# sourceMappingURL=chunk-5AXLES56.js.map
|
|
433
|
+
//# sourceMappingURL=chunk-5AXLES56.js.map
|