woodsportal-client-sdk 4.0.4-dev.13 → 4.0.4-dev.15
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/react/index.js +4 -4
- package/dist/adapters/vue/index.js +4 -4
- package/dist/auth-error-codes-D7CXVBEN.js +3 -0
- package/dist/auth-error-codes-D7CXVBEN.js.map +1 -0
- package/dist/auth-interceptor-policy-F7JIJWSQ.js +4 -0
- package/dist/auth-interceptor-policy-F7JIJWSQ.js.map +1 -0
- package/dist/auth-utils-VTD5TFYE.js +3 -0
- package/dist/{auth-utils-MNMC2QGX.js.map → auth-utils-VTD5TFYE.js.map} +1 -1
- package/dist/chunk-COHBSTHF.js +82 -0
- package/dist/chunk-COHBSTHF.js.map +1 -0
- package/dist/{chunk-ZMZPDWQL.js → chunk-FY7OTASP.js} +200 -34
- package/dist/chunk-FY7OTASP.js.map +1 -0
- package/dist/{chunk-Y3KEQ6U4.js → chunk-IQELV4FA.js} +4 -4
- package/dist/{chunk-Y3KEQ6U4.js.map → chunk-IQELV4FA.js.map} +1 -1
- package/dist/{chunk-VWVUW5QN.js → chunk-JQDLK3GN.js} +5 -5
- package/dist/{chunk-VWVUW5QN.js.map → chunk-JQDLK3GN.js.map} +1 -1
- package/dist/chunk-MFIGS74G.js +140 -0
- package/dist/chunk-MFIGS74G.js.map +1 -0
- package/dist/{chunk-PWTYQHOQ.js → chunk-O64WTOPM.js} +22 -6
- package/dist/chunk-O64WTOPM.js.map +1 -0
- package/dist/{chunk-6TWR2S4E.js → chunk-PKDLBVD7.js} +120 -7
- package/dist/chunk-PKDLBVD7.js.map +1 -0
- package/dist/{chunk-QPSCMK4W.js → chunk-TVUBMDXX.js} +74 -13
- package/dist/chunk-TVUBMDXX.js.map +1 -0
- package/dist/{chunk-S5NYXGLE.js → chunk-YLJINMP2.js} +3 -3
- package/dist/{chunk-S5NYXGLE.js.map → chunk-YLJINMP2.js.map} +1 -1
- package/dist/entries/auth.d.ts +11 -3
- package/dist/entries/auth.js +7 -4
- package/dist/entries/auth.js.map +1 -1
- package/dist/entries/crm.js +5 -5
- package/dist/{http-errors-DqdtoJ1y.d.ts → http-errors-D8bdo9vF.d.ts} +169 -7
- package/dist/index.d.ts +16 -3
- package/dist/index.js +11 -8
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/dist/auth-utils-MNMC2QGX.js +0 -3
- package/dist/chunk-6TWR2S4E.js.map +0 -1
- package/dist/chunk-PWTYQHOQ.js.map +0 -1
- package/dist/chunk-QPSCMK4W.js.map +0 -1
- package/dist/chunk-ZMZPDWQL.js.map +0 -1
|
@@ -218,12 +218,92 @@ interface RevokeSecuritySessionPayload {
|
|
|
218
218
|
refreshToken?: string;
|
|
219
219
|
}
|
|
220
220
|
|
|
221
|
-
declare
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
221
|
+
declare const AuthErrorCode: {
|
|
222
|
+
readonly AUTHENTICATION_FAILED: "AUTHENTICATION_FAILED";
|
|
223
|
+
readonly TOKEN_INVALID: "AUTH_TOKEN_INVALID";
|
|
224
|
+
readonly TOKEN_EXPIRED: "AUTH_TOKEN_EXPIRED";
|
|
225
|
+
readonly ACCOUNT_LOCKED: "AUTH_ACCOUNT_LOCKED";
|
|
226
|
+
readonly ACCOUNT_DISABLED: "AUTH_ACCOUNT_DISABLED";
|
|
227
|
+
readonly LOGIN_FAILED: "LOGIN_FAILED";
|
|
228
|
+
readonly INVALID_CREDENTIALS: "AUTH_INVALID_CREDENTIALS";
|
|
229
|
+
readonly TWO_FACTOR_REQUIRED: "AUTH_2FA_REQUIRED";
|
|
230
|
+
readonly EMAIL_NOT_VERIFIED: "AUTH_EMAIL_NOT_VERIFIED";
|
|
231
|
+
readonly ACCESS_DENIED: "ACCESS_DENIED";
|
|
232
|
+
readonly ACCESS_FORBIDDEN: "ACCESS_FORBIDDEN";
|
|
233
|
+
readonly ACCESS_UNAUTHORIZED: "ACCESS_UNAUTHORIZED";
|
|
234
|
+
readonly MISSING_REFRESH_TOKEN: "MISSING_REFRESH_TOKEN";
|
|
235
|
+
readonly MISSING_HEADERS: "MISSING_HEADERS";
|
|
236
|
+
readonly OAUTH_PROCESSING_ERROR: "OAUTH_PROCESSING_ERROR";
|
|
237
|
+
readonly HUBSPOT_REAUTH_REQUIRED: "HUBSPOT_REAUTH_REQUIRED";
|
|
238
|
+
readonly PORTAL_INACTIVE: "PORTAL_INACTIVE";
|
|
239
|
+
readonly AMBIGUOUS_HUB_ID: "AMBIGUOUS_HUB_ID";
|
|
240
|
+
readonly COMMERCIAL_ACCESS_EXPIRED: "COMMERCIAL_ACCESS_EXPIRED";
|
|
241
|
+
};
|
|
242
|
+
type AuthErrorCodeValue = (typeof AuthErrorCode)[keyof typeof AuthErrorCode];
|
|
243
|
+
type ApiErrorPayload = {
|
|
244
|
+
errorCode?: string;
|
|
245
|
+
errorMessage?: string;
|
|
246
|
+
detailedMessage?: string;
|
|
247
|
+
correlationId?: string;
|
|
248
|
+
statusCode?: number;
|
|
249
|
+
category?: string;
|
|
250
|
+
};
|
|
251
|
+
type StoredAuthError = ApiErrorPayload & {
|
|
252
|
+
ts?: number;
|
|
253
|
+
};
|
|
254
|
+
declare function parseApiErrorPayload(data: unknown): ApiErrorPayload;
|
|
255
|
+
type UnauthorizedPageCopy = {
|
|
256
|
+
title: string;
|
|
257
|
+
message: string;
|
|
258
|
+
buttonLabel: string;
|
|
259
|
+
clearSessionOnMount: boolean;
|
|
260
|
+
};
|
|
261
|
+
declare function getUnauthorizedPageCopy(errorCode?: string, fallbackMessage?: string): UnauthorizedPageCopy;
|
|
262
|
+
|
|
263
|
+
type WoodsportalRequestConfig = {
|
|
264
|
+
__isRetryRequest?: boolean;
|
|
265
|
+
skipGlobalAuthRedirect?: boolean;
|
|
266
|
+
url?: string;
|
|
267
|
+
};
|
|
268
|
+
type AuthErrorAction = {
|
|
269
|
+
kind: 'refresh_retry';
|
|
270
|
+
} | {
|
|
271
|
+
kind: 'reject';
|
|
272
|
+
} | {
|
|
273
|
+
kind: 'redirect';
|
|
274
|
+
route: string;
|
|
275
|
+
clearSession: boolean;
|
|
276
|
+
} | {
|
|
277
|
+
kind: 'logout';
|
|
278
|
+
route: string;
|
|
279
|
+
clearSession: boolean;
|
|
280
|
+
};
|
|
281
|
+
type AuthPolicyRoutes = {
|
|
282
|
+
unauthorized: string;
|
|
283
|
+
login: string;
|
|
284
|
+
twoFa: string;
|
|
285
|
+
resendEmail: string;
|
|
286
|
+
accountSelect: string;
|
|
287
|
+
};
|
|
288
|
+
type AuthInterceptorPolicyConfig = {
|
|
289
|
+
routes: AuthPolicyRoutes;
|
|
290
|
+
optionalAuthFailurePaths?: string[];
|
|
291
|
+
sessionProbePaths?: string[];
|
|
292
|
+
includeAdminMfaSecurityPrefixes?: boolean;
|
|
293
|
+
};
|
|
294
|
+
declare function isOptionalAuthFailureUrl(url: string | undefined, config: AuthInterceptorPolicyConfig): boolean;
|
|
295
|
+
declare function isSessionProbeUrl(url: string | undefined, config: AuthInterceptorPolicyConfig): boolean;
|
|
296
|
+
declare function persistAuthError(payload: ApiErrorPayload): ApiErrorPayload & {
|
|
297
|
+
ts: number;
|
|
298
|
+
};
|
|
299
|
+
declare function resolveAuthErrorAction(input: {
|
|
300
|
+
status: number;
|
|
301
|
+
errorCode?: string;
|
|
302
|
+
url?: string;
|
|
303
|
+
skipGlobalAuthRedirect?: boolean;
|
|
304
|
+
isRetryRequest?: boolean;
|
|
305
|
+
policy: AuthInterceptorPolicyConfig;
|
|
306
|
+
}): AuthErrorAction;
|
|
227
307
|
|
|
228
308
|
type LogLevel = 'debug' | 'info' | 'warn' | 'error' | 'silent';
|
|
229
309
|
type LogMeta = Record<string, unknown>;
|
|
@@ -265,7 +345,13 @@ interface HttpClientConfig {
|
|
|
265
345
|
routes?: {
|
|
266
346
|
unauthorized?: string;
|
|
267
347
|
login?: string;
|
|
348
|
+
twoFa?: string;
|
|
349
|
+
resendEmail?: string;
|
|
350
|
+
accountSelect?: string;
|
|
268
351
|
};
|
|
352
|
+
refreshBufferSeconds?: number;
|
|
353
|
+
authPolicy?: Partial<AuthInterceptorPolicyConfig>;
|
|
354
|
+
useCookieRefresh?: boolean;
|
|
269
355
|
hubId?: string;
|
|
270
356
|
devPortalId?: string;
|
|
271
357
|
onLogout?: () => void | Promise<void>;
|
|
@@ -283,6 +369,19 @@ declare function getAuthRefreshToken(refreshToken: string | null): Promise<{
|
|
|
283
369
|
success: boolean;
|
|
284
370
|
}>;
|
|
285
371
|
|
|
372
|
+
declare function getAccessToken(): string | null;
|
|
373
|
+
declare function clearAccessToken(): void;
|
|
374
|
+
declare function isExpiresAccessToken(): boolean;
|
|
375
|
+
type RefreshSessionOptions = {
|
|
376
|
+
force?: boolean;
|
|
377
|
+
};
|
|
378
|
+
declare function refreshSession(options?: RefreshSessionOptions): Promise<void>;
|
|
379
|
+
declare function isAuthenticateApp(): boolean;
|
|
380
|
+
declare function isAuthenticated(): boolean;
|
|
381
|
+
declare function isAccessTokenExpired(): boolean;
|
|
382
|
+
declare function hasRefreshSession(): boolean;
|
|
383
|
+
declare function hasValidAccessToken(): boolean;
|
|
384
|
+
|
|
286
385
|
declare function getRefreshToken(): string | null;
|
|
287
386
|
|
|
288
387
|
declare function getSsoDetails(options?: MutationOptions<any, any>): {
|
|
@@ -525,6 +624,11 @@ declare function clientSession(options?: MutationOptions<LoginResponseData, any>
|
|
|
525
624
|
clientSession: (payload?: ClientSessionPayload | undefined) => Promise<LoginResponseData>;
|
|
526
625
|
isLoading: () => boolean;
|
|
527
626
|
};
|
|
627
|
+
declare function register(options?: MutationOptions<any, any>): {
|
|
628
|
+
mutate: (payload?: any) => Promise<any>;
|
|
629
|
+
register: (payload?: any) => Promise<any>;
|
|
630
|
+
isLoading: () => boolean;
|
|
631
|
+
};
|
|
528
632
|
declare function verifyEmail(options?: MutationOptions<any, any>): {
|
|
529
633
|
mutate: (payload?: VerifyEmailPayload | undefined) => Promise<any>;
|
|
530
634
|
verifyEmail: (payload?: VerifyEmailPayload | undefined) => Promise<any>;
|
|
@@ -566,10 +670,68 @@ declare function resendEmail(options?: MutationOptions<any, any>): {
|
|
|
566
670
|
isLoading: () => boolean;
|
|
567
671
|
};
|
|
568
672
|
|
|
673
|
+
type SessionContractInput = {
|
|
674
|
+
hasAccessToken: () => boolean;
|
|
675
|
+
isAccessTokenExpired: () => boolean;
|
|
676
|
+
hasRefreshSession: () => boolean;
|
|
677
|
+
isMfaPending?: () => boolean;
|
|
678
|
+
};
|
|
679
|
+
declare function hasValidAccess(input: SessionContractInput): boolean;
|
|
680
|
+
declare function isFullyAuthenticated(input: SessionContractInput): boolean;
|
|
681
|
+
declare function isMfaPendingSession(input: SessionContractInput): boolean;
|
|
682
|
+
declare function hasAuthenticatedAccess(input: SessionContractInput): boolean;
|
|
683
|
+
|
|
684
|
+
type VisibilityRefreshOptions = {
|
|
685
|
+
shouldRefresh: () => boolean;
|
|
686
|
+
refresh: () => Promise<void>;
|
|
687
|
+
intervalMs?: number;
|
|
688
|
+
};
|
|
689
|
+
declare function startVisibilityRefreshScheduler(options: VisibilityRefreshOptions): () => void;
|
|
690
|
+
declare function stopVisibilityRefreshScheduler(): void;
|
|
691
|
+
|
|
692
|
+
type MfaBootRecoveryResult = 'pending' | 'orphan_cleared' | 'stale_token_cleared' | 'none';
|
|
693
|
+
type MfaBootRecoveryInput = {
|
|
694
|
+
hasMfaContext: () => boolean;
|
|
695
|
+
hasAccessToken: () => boolean;
|
|
696
|
+
hasRefreshToken: () => boolean;
|
|
697
|
+
clearMfaOrphan: () => void;
|
|
698
|
+
clearStaleAccessToken: () => void;
|
|
699
|
+
};
|
|
700
|
+
declare function recoverMfaGateOnBoot(input: MfaBootRecoveryInput): MfaBootRecoveryResult;
|
|
701
|
+
|
|
702
|
+
type AuthRouteAction = {
|
|
703
|
+
kind: 'allow';
|
|
704
|
+
} | {
|
|
705
|
+
kind: 'show_loader';
|
|
706
|
+
} | {
|
|
707
|
+
kind: 'redirect_login';
|
|
708
|
+
returnUrl?: string;
|
|
709
|
+
} | {
|
|
710
|
+
kind: 'redirect_mfa';
|
|
711
|
+
} | {
|
|
712
|
+
kind: 'redirect_funnel';
|
|
713
|
+
step: 'email_verify' | 'hub_select' | 'portal_select';
|
|
714
|
+
};
|
|
715
|
+
type AuthFunnelState = {
|
|
716
|
+
emailVerified?: boolean;
|
|
717
|
+
hubId?: number | string | null;
|
|
718
|
+
portalId?: number | string | null;
|
|
719
|
+
};
|
|
720
|
+
type ResolveAuthRouteActionInput = {
|
|
721
|
+
pathname: string;
|
|
722
|
+
isPublicAuthRoute: (pathname: string) => boolean;
|
|
723
|
+
session: SessionContractInput;
|
|
724
|
+
funnel?: AuthFunnelState;
|
|
725
|
+
mfaRoute: string;
|
|
726
|
+
previewMode?: boolean;
|
|
727
|
+
sessionRestoring?: boolean;
|
|
728
|
+
};
|
|
729
|
+
declare function resolveAuthRouteAction(input: ResolveAuthRouteActionInput): AuthRouteAction;
|
|
730
|
+
|
|
569
731
|
type HttpErrorKind = 'service_unavailable' | 'network' | 'timeout' | 'auth' | 'client' | 'server' | 'unknown';
|
|
570
732
|
declare const SERVICE_UNAVAILABLE_MESSAGE = "Service temporarily unavailable. Please try again in a few minutes.";
|
|
571
733
|
declare function classifyHttpError(error: unknown): HttpErrorKind;
|
|
572
734
|
declare function isServiceUnavailableError(error: unknown): boolean;
|
|
573
735
|
declare function getHttpErrorMessage(error: unknown): string;
|
|
574
736
|
|
|
575
|
-
export {
|
|
737
|
+
export { isAuthenticated as $, totpEnrollVerify as A, totpDisable as B, phoneUnverify as C, backupCodesRegenerate as D, mfaOptOut as E, webauthnRegisterOptions as F, webauthnRegisterVerify as G, webauthnAuthOptions as H, webauthnAuthVerify as I, listWebauthnCredentials as J, deleteWebauthnCredential as K, passkeyLoginOptions as L, passkeyLoginVerify as M, getSecurityOverview as N, getSecurityLoginActivity as O, getSecuritySessions as P, revokeSecuritySession as Q, revokeOtherSecuritySessions as R, getLoginBootstrap as S, getSsoDetails as T, generateSsoUrl as U, ssoCallback as V, getRefreshToken as W, refreshSession as X, getAuthRefreshToken as Y, getAccessToken as Z, clearAccessToken as _, logout as a, isMfaPendingSession as a$, isAuthenticateApp as a0, isAccessTokenExpired as a1, isExpiresAccessToken as a2, hasRefreshSession as a3, hasValidAccessToken as a4, type SessionContractInput as a5, type LoggerConfig as a6, type TwoFaVerificationRequest as a7, type MfaOtpSendRequest as a8, type MfaPendingPasskeyOptionsRequest as a9, type AuthRouteAction as aA, type HttpClientConfig as aB, type HttpErrorKind as aC, type LogLevel as aD, type LoginHistoryRow as aE, type LoginResponseData as aF, type MfaBootRecoveryResult as aG, type MfaEnrollmentStatus as aH, type MfaMethod as aI, type MfaMethodOption as aJ, type MfaPortalScopeContext as aK, type PaginationResponse as aL, SERVICE_UNAVAILABLE_MESSAGE as aM, type SecurityOverview as aN, type StorageKeyConfig as aO, type StoredAuthError as aP, type UnauthorizedPageCopy as aQ, type WoodsportalRequestConfig as aR, classifyHttpError as aS, getFieldErrors as aT, getFormErrors as aU, getHttpErrorMessage as aV, getUnauthorizedPageCopy as aW, hasAuthenticatedAccess as aX, hasValidAccess as aY, initializeHttpClient as aZ, isFullyAuthenticated as a_, type MfaPendingPasskeyVerifyRequest as aa, type MfaStatusQuery as ab, type MfaPreferenceRequest as ac, type PhoneVerifyStartRequest as ad, type PhoneVerifyConfirmRequest as ae, type TotpEnrollVerifyRequest as af, type TotpDisableRequest as ag, type PhoneUnverifyRequest as ah, type BackupCodesRegenerateRequest as ai, type MfaBackupCodesResponse as aj, type MfaOptOutRequest as ak, type WebAuthnVerifyRequest as al, type PasskeyLoginOptionsRequest as am, type PasskeyLoginVerifyRequest as an, type SecurityOverviewQuery as ao, type SecurityLoginActivityQuery as ap, type SecuritySessionsQuery as aq, type RevokeSecuritySessionPayload as ar, type ActiveSession as as, type ApiErrorPayload as at, type AuthErrorAction as au, AuthErrorCode as av, type AuthErrorCodeValue as aw, type AuthFunnelState as ax, type AuthInterceptorPolicyConfig as ay, type AuthPolicyRoutes as az, registerExistingUser as b, isOptionalAuthFailureUrl as b0, isServiceUnavailableError as b1, isSessionProbeUrl as b2, parseApiErrorPayload as b3, persistAuthError as b4, recoverMfaGateOnBoot as b5, resolveAuthErrorAction as b6, resolveAuthRouteAction as b7, startVisibilityRefreshScheduler as b8, stopVisibilityRefreshScheduler as b9, type EditorPreviewMockHandler as ba, type EditorPreviewMockResult as bb, type LoginBootstrapMfaPolicy as bc, type LoginBootstrapPortal as bd, type LoginBootstrapResponse as be, type LoginBootstrapSsoProvider as bf, setEditorPreviewMockHandler as bg, clientSession as c, resetPassword as d, resetPasswordVerifyToken as e, forgetPassword as f, verifyEmailResend as g, handoff as h, resendEmail as i, changePassword as j, profile as k, login as l, me as m, profileUpdate as n, verifyOtp as o, preLogin as p, pendingPasskeyOptions as q, register as r, sendMfaOtp as s, pendingPasskeyVerify as t, getMfaStatus as u, verifyEmail as v, setMfaPreferences as w, startPhoneVerify as x, confirmPhoneVerify as y, totpEnrollStart as z };
|
package/dist/index.d.ts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { T as TableUiState, a as TableState, U as UserState, N as NoteState, E as EmailState, S as SyncState } from './use-sync-DpazhM4d.js';
|
|
2
2
|
import { l as list, a as list$1, b as list$2, s as sideBarList, f as form, o as objectFormOptions, d as details, u as update, c as create, e as createExisting, r as removeExisting, g as list$3, h as create$1, i as update$1, j as list$4, k as create$2, m as update$2, n as list$5, p as details$1, q as download, t as addFolder, v as addFile, w as imageUpload, x as attachmentUpload, y as purge, z as purgeStatus, C as CachePurgeTarget, A as CachePurgeRequest, B as CachePurgeListQuery, D as CachePurgeView, E as CreateCachePurgeJobOptions, P as PurgeResult, F as CrmCachePurgeOptions } from './cache-purge-Ca4idzyy.js';
|
|
3
3
|
export { G as CachePurgeDomain, H as CachePurgeMode } from './cache-purge-Ca4idzyy.js';
|
|
4
|
-
import { p as preLogin, l as login, c as clientSession, h as handoff, a as logout, v as verifyEmail,
|
|
5
|
-
export {
|
|
4
|
+
import { p as preLogin, l as login, c as clientSession, h as handoff, a as logout, r as register, v as verifyEmail, b as registerExistingUser, f as forgetPassword, d as resetPassword, e as resetPasswordVerifyToken, g as verifyEmailResend, i as resendEmail, j as changePassword, m as me, k as profile, n as profileUpdate, o as verifyOtp, s as sendMfaOtp, q as pendingPasskeyOptions, t as pendingPasskeyVerify, u as getMfaStatus, w as setMfaPreferences, x as startPhoneVerify, y as confirmPhoneVerify, z as totpEnrollStart, A as totpEnrollVerify, B as totpDisable, C as phoneUnverify, D as backupCodesRegenerate, E as mfaOptOut, F as webauthnRegisterOptions, G as webauthnRegisterVerify, H as webauthnAuthOptions, I as webauthnAuthVerify, J as listWebauthnCredentials, K as deleteWebauthnCredential, L as passkeyLoginOptions, M as passkeyLoginVerify, N as getSecurityOverview, O as getSecurityLoginActivity, P as getSecuritySessions, Q as revokeSecuritySession, R as revokeOtherSecuritySessions, S as getLoginBootstrap, T as getSsoDetails, U as generateSsoUrl, V as ssoCallback, W as getRefreshToken, X as refreshSession, Y as getAuthRefreshToken, Z as getAccessToken, _ as clearAccessToken, $ as isAuthenticated, a0 as isAuthenticateApp, a1 as isAccessTokenExpired, a2 as isExpiresAccessToken, a3 as hasRefreshSession, a4 as hasValidAccessToken, a5 as SessionContractInput, a6 as LoggerConfig, a7 as TwoFaVerificationRequest, a8 as MfaOtpSendRequest, a9 as MfaPendingPasskeyOptionsRequest, aa as MfaPendingPasskeyVerifyRequest, ab as MfaStatusQuery, ac as MfaPreferenceRequest, ad as PhoneVerifyStartRequest, ae as PhoneVerifyConfirmRequest, af as TotpEnrollVerifyRequest, ag as TotpDisableRequest, ah as PhoneUnverifyRequest, ai as BackupCodesRegenerateRequest, aj as MfaBackupCodesResponse, ak as MfaOptOutRequest, al as WebAuthnVerifyRequest, am as PasskeyLoginOptionsRequest, an as PasskeyLoginVerifyRequest, ao as SecurityOverviewQuery, ap as SecurityLoginActivityQuery, aq as SecuritySessionsQuery, ar as RevokeSecuritySessionPayload } from './http-errors-D8bdo9vF.js';
|
|
5
|
+
export { as as ActiveSession, at as ApiErrorPayload, au as AuthErrorAction, av as AuthErrorCode, aw as AuthErrorCodeValue, ax as AuthFunnelState, ay as AuthInterceptorPolicyConfig, az as AuthPolicyRoutes, aA as AuthRouteAction, aB as HttpClientConfig, aC as HttpErrorKind, aD as LogLevel, aE as LoginHistoryRow, aF as LoginResponseData, aG as MfaBootRecoveryResult, aH as MfaEnrollmentStatus, aI as MfaMethod, aJ as MfaMethodOption, aK as MfaPortalScopeContext, aL as PaginationResponse, aM as SERVICE_UNAVAILABLE_MESSAGE, aN as SecurityOverview, aO as StorageKeyConfig, aP as StoredAuthError, aQ as UnauthorizedPageCopy, aR as WoodsportalRequestConfig, aS as classifyHttpError, aT as getFieldErrors, aU as getFormErrors, aV as getHttpErrorMessage, aW as getUnauthorizedPageCopy, aX as hasAuthenticatedAccess, aY as hasValidAccess, aZ as initializeHttpClient, a_ as isFullyAuthenticated, a$ as isMfaPendingSession, b0 as isOptionalAuthFailureUrl, b1 as isServiceUnavailableError, b2 as isSessionProbeUrl, b3 as parseApiErrorPayload, b4 as persistAuthError, b5 as recoverMfaGateOnBoot, b6 as resolveAuthErrorAction, b7 as resolveAuthRouteAction, b8 as startVisibilityRefreshScheduler, b9 as stopVisibilityRefreshScheduler } from './http-errors-D8bdo9vF.js';
|
|
6
6
|
import { P as PreLoginPayload, L as LoginPayload, V as VerifyEmailPayload, R as ResetPasswordVerifyTokenPayload, a as ResetPasswordPayload, F as ForgetPasswordPayload, C as ChangePasswordPayload } from './index-Bh9eY8sA.js';
|
|
7
7
|
export { b as Config, M as MutationOptions } from './index-Bh9eY8sA.js';
|
|
8
8
|
import 'axios';
|
|
@@ -14,6 +14,7 @@ declare const api: {
|
|
|
14
14
|
clientSession: typeof clientSession;
|
|
15
15
|
handoff: typeof handoff;
|
|
16
16
|
logout: typeof logout;
|
|
17
|
+
register: typeof register;
|
|
17
18
|
verifyEmail: typeof verifyEmail;
|
|
18
19
|
registerExistingUser: typeof registerExistingUser;
|
|
19
20
|
forgetPassword: typeof forgetPassword;
|
|
@@ -65,6 +66,7 @@ declare const api: {
|
|
|
65
66
|
};
|
|
66
67
|
session: {
|
|
67
68
|
getRefreshToken: typeof getRefreshToken;
|
|
69
|
+
refreshSession: typeof refreshSession;
|
|
68
70
|
refreshAccessToken: typeof getAuthRefreshToken;
|
|
69
71
|
getAccessToken: typeof getAccessToken;
|
|
70
72
|
clearAccessToken: typeof clearAccessToken;
|
|
@@ -73,6 +75,12 @@ declare const api: {
|
|
|
73
75
|
isAccessTokenExpired: typeof isAccessTokenExpired;
|
|
74
76
|
isExpiresAccessToken: typeof isExpiresAccessToken;
|
|
75
77
|
isCookieExpired: (key: string) => boolean;
|
|
78
|
+
hasRefreshSession: typeof hasRefreshSession;
|
|
79
|
+
hasValidAccessToken: typeof hasValidAccessToken;
|
|
80
|
+
contract: () => SessionContractInput;
|
|
81
|
+
isFullyAuthenticated: () => boolean;
|
|
82
|
+
hasAuthenticatedAccess: () => boolean;
|
|
83
|
+
hasValidAccess: () => boolean;
|
|
76
84
|
};
|
|
77
85
|
};
|
|
78
86
|
crm: {
|
|
@@ -313,6 +321,11 @@ declare const Client: {
|
|
|
313
321
|
login: (data: LoginPayload) => Promise<unknown>;
|
|
314
322
|
verifyOtp: (data: TwoFaVerificationRequest) => Promise<unknown>;
|
|
315
323
|
verifyEmail: (data: VerifyEmailPayload) => Promise<unknown>;
|
|
324
|
+
register: (data: {
|
|
325
|
+
name: string;
|
|
326
|
+
email: string;
|
|
327
|
+
password: string;
|
|
328
|
+
}) => Promise<unknown>;
|
|
316
329
|
resetPasswordVerifyToken: (data: ResetPasswordVerifyTokenPayload) => Promise<unknown>;
|
|
317
330
|
resetPassword: (data: ResetPasswordPayload) => Promise<unknown>;
|
|
318
331
|
forgetPassword: (data: ForgetPasswordPayload) => Promise<unknown>;
|
|
@@ -482,4 +495,4 @@ declare const store: {
|
|
|
482
495
|
};
|
|
483
496
|
};
|
|
484
497
|
|
|
485
|
-
export { CachePurgeListQuery, CachePurgeRequest, CachePurgeTarget, CachePurgeView, ChangePasswordPayload, Client, CreateCachePurgeJobOptions, CrmCachePurgeOptions, DEFAULT_HUBSPOT_TIMEZONE, ForgetPasswordPayload, type HubSpotActivityDateTimeParts, LoggerConfig, LoginPayload, PreLoginPayload, PurgeResult, ResetPasswordPayload, ResetPasswordVerifyTokenPayload, TwoFaVerificationRequest, VerifyEmailPayload, api, buildCachePurgeRequest, buildCrmListPurgeTarget, buildCrmSinglePurgeTarget, buildEngagementPurgeTarget, buildPortalConfigPurgeTarget, buildUserSessionPurgeTarget, configureLogger, createCachePurgeJob, extractEngagementItemIdFromWriteResponse, extractHubspotRecordIdFromWriteResponse, formatGmtOffset, formatHubSpotActivityDateTime, formatHubSpotActivityDateTimeParts, getCurrentTimeZone, config as hubContext, mergePurgeTargets, normalizeToTimestamp, purgeCrmCombined, purgeCrmDetailAndListAfterCrmWrite, purgeCrmListCache, purgeCrmListCacheAfterCrmWrite, purgeCrmObjectDataCache, purgeCrmRecordCache, purgeEngagementCaches, purgeEngagementCachesAfterCrmWrite, resolveCrmListPurgeQuery, setConfig as setHubContext, store, toCachePurgeListQuery };
|
|
498
|
+
export { CachePurgeListQuery, CachePurgeRequest, CachePurgeTarget, CachePurgeView, ChangePasswordPayload, Client, CreateCachePurgeJobOptions, CrmCachePurgeOptions, DEFAULT_HUBSPOT_TIMEZONE, ForgetPasswordPayload, type HubSpotActivityDateTimeParts, LoggerConfig, LoginPayload, PreLoginPayload, PurgeResult, ResetPasswordPayload, ResetPasswordVerifyTokenPayload, SessionContractInput, TwoFaVerificationRequest, VerifyEmailPayload, api, buildCachePurgeRequest, buildCrmListPurgeTarget, buildCrmSinglePurgeTarget, buildEngagementPurgeTarget, buildPortalConfigPurgeTarget, buildUserSessionPurgeTarget, configureLogger, createCachePurgeJob, extractEngagementItemIdFromWriteResponse, extractHubspotRecordIdFromWriteResponse, formatGmtOffset, formatHubSpotActivityDateTime, formatHubSpotActivityDateTimeParts, getCurrentTimeZone, config as hubContext, mergePurgeTargets, normalizeToTimestamp, purgeCrmCombined, purgeCrmDetailAndListAfterCrmWrite, purgeCrmListCache, purgeCrmListCacheAfterCrmWrite, purgeCrmObjectDataCache, purgeCrmRecordCache, purgeEngagementCaches, purgeEngagementCachesAfterCrmWrite, resolveCrmListPurgeQuery, setConfig as setHubContext, store, toCachePurgeListQuery };
|
package/dist/index.js
CHANGED
|
@@ -1,11 +1,14 @@
|
|
|
1
|
-
import { authApi } from './chunk-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
import './chunk-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
import './chunk-
|
|
1
|
+
import { authApi } from './chunk-PKDLBVD7.js';
|
|
2
|
+
export { hasAuthenticatedAccess, hasValidAccess, isFullyAuthenticated, isMfaPendingSession, recoverMfaGateOnBoot, resolveAuthRouteAction } from './chunk-PKDLBVD7.js';
|
|
3
|
+
export { isOptionalAuthFailureUrl, isSessionProbeUrl, persistAuthError, resolveAuthErrorAction } from './chunk-MFIGS74G.js';
|
|
4
|
+
import { crmApi } from './chunk-JQDLK3GN.js';
|
|
5
|
+
import { navigationApi, storage } from './chunk-FY7OTASP.js';
|
|
6
|
+
export { Client, SERVICE_UNAVAILABLE_MESSAGE, buildCachePurgeRequest, buildCrmListPurgeTarget, buildCrmSinglePurgeTarget, buildEngagementPurgeTarget, buildPortalConfigPurgeTarget, buildUserSessionPurgeTarget, classifyHttpError, createCachePurgeJob, extractEngagementItemIdFromWriteResponse, extractHubspotRecordIdFromWriteResponse, getFieldErrors, getFormErrors, getHttpErrorMessage, config as hubContext, initializeHttpClient, isServiceUnavailableError, mergePurgeTargets, purgeCrmCombined, purgeCrmDetailAndListAfterCrmWrite, purgeCrmListCache, purgeCrmListCacheAfterCrmWrite, purgeCrmObjectDataCache, purgeCrmRecordCache, purgeEngagementCaches, purgeEngagementCachesAfterCrmWrite, resolveCrmListPurgeQuery, setConfig as setHubContext, startVisibilityRefreshScheduler, stopVisibilityRefreshScheduler, toCachePurgeListQuery } from './chunk-FY7OTASP.js';
|
|
7
|
+
import './chunk-YLJINMP2.js';
|
|
8
|
+
import { actions8, syncStore, actions5, emailStore, actions4, noteStore, actions7, userStore, actions2, tableStore, tableUiActions, tableUiStore } from './chunk-O64WTOPM.js';
|
|
9
|
+
export { configureLogger } from './chunk-O64WTOPM.js';
|
|
10
|
+
import './chunk-TVUBMDXX.js';
|
|
11
|
+
export { AuthErrorCode, getUnauthorizedPageCopy, parseApiErrorPayload } from './chunk-COHBSTHF.js';
|
|
9
12
|
|
|
10
13
|
// src/main/api/compose-api.ts
|
|
11
14
|
var api = {
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/main/api/compose-api.ts","../src/main/core/utils/datetime.ts","../src/main/index.ts"],"names":["actions"],"mappings":"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","file":"index.js","sourcesContent":["import { authApi } from './nested-auth-api'\nimport { crmApi } from './nested-crm-api'\nimport { navigationApi } from './navigation-api'\n\n/** Public API — nested domains only (SDK 4.0). */\nexport const api = {\n auth: authApi,\n crm: crmApi,\n navigation: navigationApi\n}\n","/** HubSpot portal default; override when portal timezone is available from config. */\nexport const DEFAULT_HUBSPOT_TIMEZONE = 'Asia/Kolkata'\n\n/**\n * Detect the runtime/browser IANA timezone (e.g. `Asia/Kolkata`).\n * Falls back to the WoodsPortal default timezone when unavailable.\n */\nexport function getCurrentTimeZone(): string {\n try {\n return Intl.DateTimeFormat().resolvedOptions().timeZone || DEFAULT_HUBSPOT_TIMEZONE\n } catch {\n return DEFAULT_HUBSPOT_TIMEZONE\n }\n}\n\n/**\n * Coerce HubSpot-style timestamps (ms string/number) to epoch milliseconds.\n */\nexport function normalizeToTimestamp(value: unknown): number | null {\n if (value == null || value === '') return null\n\n if (typeof value === 'number') {\n return value > 100_000_000_000 ? value : null\n }\n\n if (typeof value === 'string' && /^\\d+$/.test(value)) {\n const n = Number(value)\n return n > 100_000_000_000 ? n : null\n }\n\n if (typeof value === 'string' || value instanceof Date) {\n const date = new Date(value)\n return Number.isNaN(date.getTime()) ? null : date.getTime()\n }\n\n return null\n}\n\n/**\n * GMT offset label aligned with HubSpot activity timeline (e.g. `GMT+5:30`).\n */\nexport function formatGmtOffset(timeZone: string = getCurrentTimeZone(), date: Date = new Date()): string {\n const raw = new Intl.DateTimeFormat('en-US', {\n timeZone,\n timeZoneName: 'longOffset'\n })\n .formatToParts(date)\n .find((part) => part.type === 'timeZoneName')?.value\n\n if (!raw) return ''\n\n // Intl may emit GMT+05:30; HubSpot uses GMT+5:30.\n return raw.replace(/GMT([+-])0(\\d)(?=:)/, 'GMT$1$2')\n}\n\nexport type HubSpotActivityDateTimeParts = {\n date: string\n time: string\n gmtOffset: string\n /** Full HubSpot-style label, e.g. `May 27, 2026 at 11:31 PM GMT+5:30`. */\n formatted: string\n}\n\n/**\n * Format a HubSpot epoch-ms timestamp like the CRM activity timeline.\n */\nexport function formatHubSpotActivityDateTimeParts(timestamp: unknown, timeZone: string = getCurrentTimeZone()): HubSpotActivityDateTimeParts | null {\n const ms = normalizeToTimestamp(timestamp)\n if (ms == null) return null\n\n const date = new Date(ms)\n const datePart = new Intl.DateTimeFormat('en-US', {\n timeZone,\n month: 'long',\n day: 'numeric',\n year: 'numeric'\n }).format(date)\n const timePart = new Intl.DateTimeFormat('en-US', {\n timeZone,\n hour: 'numeric',\n minute: '2-digit',\n hour12: true\n }).format(date)\n const gmtOffset = formatGmtOffset(timeZone, date)\n\n return {\n date: datePart,\n time: timePart,\n gmtOffset,\n formatted: `${datePart} at ${timePart} ${gmtOffset}`.trim()\n }\n}\n\n/**\n * @returns HubSpot activity string, e.g. `May 27, 2026 at 11:31 PM GMT+5:30`, or empty string.\n */\nexport function formatHubSpotActivityDateTime(timestamp: unknown, timeZone: string = getCurrentTimeZone()): string {\n return formatHubSpotActivityDateTimeParts(timestamp, timeZone)?.formatted ?? ''\n}\n","/**\n * WoodsPortal client SDK — public entry module.\n *\n * Configure HTTP once with {@link initializeHttpClient} in production, then use\n * {@link api}, {@link store}, and {@link api.navigation}.\n */\nimport { api } from './api/compose-api'\nimport {\n tableStore,\n tableActions,\n tableUiStore,\n tableUiActions,\n userStore,\n userActions,\n noteStore,\n noteActions,\n emailStore,\n emailActions,\n syncStore,\n syncActions\n} from './state'\nimport { storage } from './core/utils/localStorage'\n\nexport {\n DEFAULT_HUBSPOT_TIMEZONE,\n getCurrentTimeZone,\n formatGmtOffset,\n formatHubSpotActivityDateTime,\n formatHubSpotActivityDateTimeParts,\n normalizeToTimestamp\n} from './core/utils/datetime'\nexport type { HubSpotActivityDateTimeParts } from './core/utils/datetime'\nexport {\n purgeCrmObjectDataCache,\n purgeCrmListCache,\n purgeCrmListCacheAfterCrmWrite,\n purgeCrmDetailAndListAfterCrmWrite,\n purgeCrmRecordCache,\n purgeEngagementCaches,\n purgeEngagementCachesAfterCrmWrite,\n purgeCrmCombined,\n buildCachePurgeRequest,\n buildCrmListPurgeTarget,\n buildCrmSinglePurgeTarget,\n buildEngagementPurgeTarget,\n buildPortalConfigPurgeTarget,\n buildUserSessionPurgeTarget,\n mergePurgeTargets,\n createCachePurgeJob,\n extractHubspotRecordIdFromWriteResponse,\n extractEngagementItemIdFromWriteResponse,\n resolveCrmListPurgeQuery,\n toCachePurgeListQuery\n} from './core/utils/cache'\nexport type { CrmCachePurgeOptions } from './core/types/cache-purge'\nexport type {\n CachePurgeRequest,\n CachePurgeTarget,\n CachePurgeListQuery,\n CachePurgeView,\n CachePurgeDomain,\n CachePurgeMode,\n PurgeResult,\n CreateCachePurgeJobOptions\n} from './core/types/cache-purge'\n\n/** Axios setup, error helpers, and {@link HttpClientConfig}. */\nexport { initializeHttpClient, getFormErrors, getFieldErrors } from './core/http/http-client'\nexport type { HttpClientConfig, StorageKeyConfig } from './core/http/http-client'\nexport { classifyHttpError, getHttpErrorMessage, isServiceUnavailableError, SERVICE_UNAVAILABLE_MESSAGE } from './core/http/http-errors'\nexport type { HttpErrorKind } from './core/http/http-errors'\n\nexport { configureLogger } from './core/logging/logger'\nexport type { LogLevel, LoggerConfig } from './core/logging/logger-types'\n\nexport { Client } from './core/http/client-assembler'\nexport { config as hubContext, setConfig as setHubContext } from './core/utils/hub-context'\n\nexport type {\n Config,\n MutationOptions,\n PreLoginPayload,\n LoginPayload,\n VerifyEmailPayload,\n ResetPasswordVerifyTokenPayload,\n ResetPasswordPayload,\n ForgetPasswordPayload,\n ChangePasswordPayload,\n MfaMethod,\n MfaMethodOption,\n MfaPortalScopeContext,\n LoginResponseData,\n TwoFaVerificationRequest,\n MfaEnrollmentStatus,\n SecurityOverview,\n LoginHistoryRow,\n ActiveSession,\n PaginationResponse\n} from './core/types'\n\nexport { api }\n\n/** Storage helpers and CRM stores. */\nexport const store = {\n storage,\n tableUi: { store: tableUiStore, actions: tableUiActions },\n table: { store: tableStore, actions: tableActions },\n user: { store: userStore, actions: userActions },\n note: { store: noteStore, actions: noteActions },\n email: { store: emailStore, actions: emailActions },\n sync: { store: syncStore, actions: syncActions }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/main/api/compose-api.ts","../src/main/core/utils/datetime.ts","../src/main/index.ts"],"names":["actions"],"mappings":"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","file":"index.js","sourcesContent":["import { authApi } from './nested-auth-api'\nimport { crmApi } from './nested-crm-api'\nimport { navigationApi } from './navigation-api'\n\n/** Public API — nested domains only (SDK 4.0). */\nexport const api = {\n auth: authApi,\n crm: crmApi,\n navigation: navigationApi\n}\n","/** HubSpot portal default; override when portal timezone is available from config. */\nexport const DEFAULT_HUBSPOT_TIMEZONE = 'Asia/Kolkata'\n\n/**\n * Detect the runtime/browser IANA timezone (e.g. `Asia/Kolkata`).\n * Falls back to the WoodsPortal default timezone when unavailable.\n */\nexport function getCurrentTimeZone(): string {\n try {\n return Intl.DateTimeFormat().resolvedOptions().timeZone || DEFAULT_HUBSPOT_TIMEZONE\n } catch {\n return DEFAULT_HUBSPOT_TIMEZONE\n }\n}\n\n/**\n * Coerce HubSpot-style timestamps (ms string/number) to epoch milliseconds.\n */\nexport function normalizeToTimestamp(value: unknown): number | null {\n if (value == null || value === '') return null\n\n if (typeof value === 'number') {\n return value > 100_000_000_000 ? value : null\n }\n\n if (typeof value === 'string' && /^\\d+$/.test(value)) {\n const n = Number(value)\n return n > 100_000_000_000 ? n : null\n }\n\n if (typeof value === 'string' || value instanceof Date) {\n const date = new Date(value)\n return Number.isNaN(date.getTime()) ? null : date.getTime()\n }\n\n return null\n}\n\n/**\n * GMT offset label aligned with HubSpot activity timeline (e.g. `GMT+5:30`).\n */\nexport function formatGmtOffset(timeZone: string = getCurrentTimeZone(), date: Date = new Date()): string {\n const raw = new Intl.DateTimeFormat('en-US', {\n timeZone,\n timeZoneName: 'longOffset'\n })\n .formatToParts(date)\n .find((part) => part.type === 'timeZoneName')?.value\n\n if (!raw) return ''\n\n // Intl may emit GMT+05:30; HubSpot uses GMT+5:30.\n return raw.replace(/GMT([+-])0(\\d)(?=:)/, 'GMT$1$2')\n}\n\nexport type HubSpotActivityDateTimeParts = {\n date: string\n time: string\n gmtOffset: string\n /** Full HubSpot-style label, e.g. `May 27, 2026 at 11:31 PM GMT+5:30`. */\n formatted: string\n}\n\n/**\n * Format a HubSpot epoch-ms timestamp like the CRM activity timeline.\n */\nexport function formatHubSpotActivityDateTimeParts(timestamp: unknown, timeZone: string = getCurrentTimeZone()): HubSpotActivityDateTimeParts | null {\n const ms = normalizeToTimestamp(timestamp)\n if (ms == null) return null\n\n const date = new Date(ms)\n const datePart = new Intl.DateTimeFormat('en-US', {\n timeZone,\n month: 'long',\n day: 'numeric',\n year: 'numeric'\n }).format(date)\n const timePart = new Intl.DateTimeFormat('en-US', {\n timeZone,\n hour: 'numeric',\n minute: '2-digit',\n hour12: true\n }).format(date)\n const gmtOffset = formatGmtOffset(timeZone, date)\n\n return {\n date: datePart,\n time: timePart,\n gmtOffset,\n formatted: `${datePart} at ${timePart} ${gmtOffset}`.trim()\n }\n}\n\n/**\n * @returns HubSpot activity string, e.g. `May 27, 2026 at 11:31 PM GMT+5:30`, or empty string.\n */\nexport function formatHubSpotActivityDateTime(timestamp: unknown, timeZone: string = getCurrentTimeZone()): string {\n return formatHubSpotActivityDateTimeParts(timestamp, timeZone)?.formatted ?? ''\n}\n","/**\n * WoodsPortal client SDK — public entry module.\n *\n * Configure HTTP once with {@link initializeHttpClient} in production, then use\n * {@link api}, {@link store}, and {@link api.navigation}.\n */\nimport { api } from './api/compose-api'\nimport {\n tableStore,\n tableActions,\n tableUiStore,\n tableUiActions,\n userStore,\n userActions,\n noteStore,\n noteActions,\n emailStore,\n emailActions,\n syncStore,\n syncActions\n} from './state'\nimport { storage } from './core/utils/localStorage'\n\nexport {\n DEFAULT_HUBSPOT_TIMEZONE,\n getCurrentTimeZone,\n formatGmtOffset,\n formatHubSpotActivityDateTime,\n formatHubSpotActivityDateTimeParts,\n normalizeToTimestamp\n} from './core/utils/datetime'\nexport type { HubSpotActivityDateTimeParts } from './core/utils/datetime'\nexport {\n purgeCrmObjectDataCache,\n purgeCrmListCache,\n purgeCrmListCacheAfterCrmWrite,\n purgeCrmDetailAndListAfterCrmWrite,\n purgeCrmRecordCache,\n purgeEngagementCaches,\n purgeEngagementCachesAfterCrmWrite,\n purgeCrmCombined,\n buildCachePurgeRequest,\n buildCrmListPurgeTarget,\n buildCrmSinglePurgeTarget,\n buildEngagementPurgeTarget,\n buildPortalConfigPurgeTarget,\n buildUserSessionPurgeTarget,\n mergePurgeTargets,\n createCachePurgeJob,\n extractHubspotRecordIdFromWriteResponse,\n extractEngagementItemIdFromWriteResponse,\n resolveCrmListPurgeQuery,\n toCachePurgeListQuery\n} from './core/utils/cache'\nexport type { CrmCachePurgeOptions } from './core/types/cache-purge'\nexport type {\n CachePurgeRequest,\n CachePurgeTarget,\n CachePurgeListQuery,\n CachePurgeView,\n CachePurgeDomain,\n CachePurgeMode,\n PurgeResult,\n CreateCachePurgeJobOptions\n} from './core/types/cache-purge'\n\n/** Axios setup, error helpers, and {@link HttpClientConfig}. */\nexport { initializeHttpClient, getFormErrors, getFieldErrors } from './core/http/http-client'\nexport type { HttpClientConfig, StorageKeyConfig } from './core/http/http-client'\n\n/** Shared auth contract (client + admin consistency). */\nexport {\n AuthErrorCode,\n parseApiErrorPayload,\n getUnauthorizedPageCopy,\n resolveAuthErrorAction,\n isOptionalAuthFailureUrl,\n isSessionProbeUrl,\n persistAuthError,\n hasValidAccess,\n isFullyAuthenticated,\n isMfaPendingSession,\n hasAuthenticatedAccess,\n recoverMfaGateOnBoot,\n startVisibilityRefreshScheduler,\n stopVisibilityRefreshScheduler,\n resolveAuthRouteAction\n} from './core/auth/index.js'\nexport type {\n ApiErrorPayload,\n StoredAuthError,\n AuthErrorCodeValue,\n UnauthorizedPageCopy,\n AuthErrorAction,\n AuthPolicyRoutes,\n AuthInterceptorPolicyConfig,\n WoodsportalRequestConfig,\n SessionContractInput,\n MfaBootRecoveryResult,\n AuthRouteAction,\n AuthFunnelState\n} from './core/auth/index.js'\nexport { classifyHttpError, getHttpErrorMessage, isServiceUnavailableError, SERVICE_UNAVAILABLE_MESSAGE } from './core/http/http-errors'\nexport type { HttpErrorKind } from './core/http/http-errors'\n\nexport { configureLogger } from './core/logging/logger'\nexport type { LogLevel, LoggerConfig } from './core/logging/logger-types'\n\nexport { Client } from './core/http/client-assembler'\nexport { config as hubContext, setConfig as setHubContext } from './core/utils/hub-context'\n\nexport type {\n Config,\n MutationOptions,\n PreLoginPayload,\n LoginPayload,\n VerifyEmailPayload,\n ResetPasswordVerifyTokenPayload,\n ResetPasswordPayload,\n ForgetPasswordPayload,\n ChangePasswordPayload,\n MfaMethod,\n MfaMethodOption,\n MfaPortalScopeContext,\n LoginResponseData,\n TwoFaVerificationRequest,\n MfaEnrollmentStatus,\n SecurityOverview,\n LoginHistoryRow,\n ActiveSession,\n PaginationResponse\n} from './core/types'\n\nexport { api }\n\n/** Storage helpers and CRM stores. */\nexport const store = {\n storage,\n tableUi: { store: tableUiStore, actions: tableUiActions },\n table: { store: tableStore, actions: tableActions },\n user: { store: userStore, actions: userActions },\n note: { store: noteStore, actions: noteActions },\n email: { store: emailStore, actions: emailActions },\n sync: { store: syncStore, actions: syncActions }\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "woodsportal-client-sdk",
|
|
3
|
-
"version": "4.0.4-dev.
|
|
3
|
+
"version": "4.0.4-dev.15",
|
|
4
4
|
"description": "Official TypeScript/JavaScript SDK for WoodsPortal API - Authentication, user management, pipelines, and more",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
export { getPortal, getProfile, getRefreshToken, getSubscriptionType, setAccessToken, setLoggedInDetails, setPortal, setProfileDetails, setRefreshToken, setSubscriptionType } from './chunk-QPSCMK4W.js';
|
|
2
|
-
//# sourceMappingURL=auth-utils-MNMC2QGX.js.map
|
|
3
|
-
//# sourceMappingURL=auth-utils-MNMC2QGX.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/main/core/http/login-session.ts","../src/main/features/auth/api/authentication.ts","../src/main/features/auth/api/mfa.ts","../src/main/features/auth/api/security.ts","../src/main/features/auth/api/login-bootstrap.ts","../src/main/features/auth/api/sso.ts","../src/main/features/auth/api/users.ts","../src/main/api/nested-auth-api.ts"],"names":["actions"],"mappings":"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","file":"chunk-6TWR2S4E.js","sourcesContent":["import { setPortal, setSubscriptionType, setAccessToken, setRefreshToken, setLoggedInDetails } from './auth-utils'\nimport { setConfig } from '../utils/hub-context'\nimport { actions as userActions } from '../../state/crm/use-user'\n\nfunction unwrapLoginBody(response: any): Record<string, any> {\n return (response?.data ?? response ?? {}) as Record<string, any>\n}\n\n/**\n * Persists a full authenticated session (access + refresh tokens, portal, login details).\n * Use after successful login or MFA verify when `twoFactorRequired` is false.\n */\nexport async function completeLoginSession(response: any): Promise<any> {\n const body = unwrapLoginBody(response)\n const tokenData: any = body?.tokenData || {}\n const loggedInDetails: any = body?.loggedInDetails || {}\n const currentPortal: any = loggedInDetails?.currentPortal || {}\n const currentPortalId: any = currentPortal?.portalId || null\n const subscriptionType = loggedInDetails?.subscriptionType || 'BASIC'\n\n const token = tokenData?.token\n const refreshToken = tokenData?.refreshToken\n const expiresIn = tokenData?.expiresIn\n const refreshExpiresAt = tokenData?.refreshExpiresAt\n const rExpiresIn = tokenData?.refreshExpiresIn\n\n setPortal(currentPortal)\n setSubscriptionType(subscriptionType)\n await setAccessToken(token, expiresIn)\n await setRefreshToken(refreshToken, refreshExpiresAt ?? rExpiresIn)\n await setLoggedInDetails(body)\n userActions.setProfile(response?.data != null ? response : { data: body })\n\n setConfig.setDevPortalId(currentPortalId)\n\n return response\n}\n\n/**\n * Applies login/MFA-step response token rules:\n * - MFA pending: temp access JWT only (no refresh until verify completes)\n * - Full session: {@link completeLoginSession}\n */\nexport async function applyLoginResponse(response: any): Promise<any> {\n const data = unwrapLoginBody(response)\n if (data?.twoFactorRequired === true) {\n const tokenData: any = data?.tokenData || {}\n const token = tokenData?.token\n const expiresIn = tokenData?.expiresIn\n if (token) {\n await setAccessToken(token, expiresIn)\n }\n return response\n }\n return completeLoginSession(response)\n}\n","import { Client } from '../../../core/http/client-assembler'\nimport type {\n LoginPayload,\n LoginResponseData,\n MutationOptions,\n PreLoginPayload,\n ForgetPasswordPayload,\n VerifyEmailPayload,\n ResetPasswordVerifyTokenPayload,\n ResetPasswordPayload\n} from '../../../core/types'\nimport { createMutation } from '../../../core/mutation/createMutation'\nimport { applyLoginResponse } from '../../../core/http/login-session'\nimport { getParam } from '../../../core/utils/param'\nimport { clearClientAuthCookies } from '../../../core/utils/cookie'\nimport { clearAccessToken } from '../../../core/http/token-store'\n\nexport function preLogin(options?: MutationOptions<any, any>) {\n const { mutate, isLoading } = createMutation<PreLoginPayload, any>(async (payload: any) => {\n const response: any = await Client.authentication.preLogin(payload)\n return response\n }, options)\n\n return {\n mutate,\n preLogin: mutate,\n isLoading\n }\n}\n\n/**\n * Password login for the client portal.\n *\n * **API:** `POST /api/auth/login?hubId={hubId}`\n * **Session:** When `twoFactorRequired` is true, stores only the temp access JWT (no refresh until MFA completes).\n */\nexport function login(options?: MutationOptions<LoginResponseData, any>) {\n const { mutate, isLoading } = createMutation<LoginPayload, LoginResponseData>(async (payload: any) => {\n const response = (await Client.authentication.login(payload)) as LoginResponseData\n await applyLoginResponse(response)\n return response\n }, options)\n\n return {\n mutate,\n login: mutate,\n isLoading\n }\n}\n\nexport interface ClientSessionPayload {\n accessToken: string\n refreshToken?: string\n}\n\n/**\n * Exchange a management/deep-link token for a portal client session.\n *\n * **API:** `POST /api/auth/client-session`\n * **Auth:** Bearer access token header; optional refresh token in body.\n */\nexport interface AuthHandoffPayload {\n code: string\n hubId: number\n}\n\n/**\n * Redeem a one-time admin portal handoff code for a full client session.\n *\n * **API:** `POST /api/auth/handoff?hubId={hubId}`\n */\nexport function handoff(options?: MutationOptions<LoginResponseData, any>) {\n const { mutate, isLoading } = createMutation<AuthHandoffPayload, LoginResponseData>(async (payload) => {\n const response = (await Client.authentication.handoff(payload!)) as LoginResponseData\n await applyLoginResponse(response)\n return response\n }, options)\n\n return {\n mutate,\n handoff: mutate,\n isLoading\n }\n}\n\nexport function clientSession(options?: MutationOptions<LoginResponseData, any>) {\n const { mutate, isLoading } = createMutation<ClientSessionPayload, LoginResponseData>(async (payload?: ClientSessionPayload) => {\n const response = (await Client.authentication.clientSession(payload!)) as LoginResponseData\n await applyLoginResponse(response)\n return response\n }, options)\n\n return {\n mutate,\n clientSession: mutate,\n isLoading\n }\n}\n\nexport function verifyEmail(options?: MutationOptions<any, any>) {\n const { mutate, isLoading } = createMutation<VerifyEmailPayload, any>(async (payload: any) => {\n const verifyEmailPayload: VerifyEmailPayload = payload || {}\n const token: any = getParam('token')\n if (!verifyEmailPayload?.token) verifyEmailPayload.token = token\n const response: any = await Client.authentication.verifyEmail(verifyEmailPayload)\n return response\n }, options)\n\n return {\n mutate,\n verifyEmail: mutate,\n isLoading\n }\n}\n\nexport function resetPasswordVerifyToken(options?: MutationOptions<any, any>) {\n const { mutate, isLoading } = createMutation<ResetPasswordVerifyTokenPayload, any>(async (payload: any) => {\n const resetPasswordVerifyTokenPayload: ResetPasswordVerifyTokenPayload = payload || {}\n const token: any = getParam('token')\n if (!resetPasswordVerifyTokenPayload?.token) resetPasswordVerifyTokenPayload.token = token\n const response: any = await Client.authentication.resetPasswordVerifyToken(resetPasswordVerifyTokenPayload)\n return response\n }, options)\n\n return {\n mutate,\n resetPasswordVerifyToken: mutate,\n isLoading\n }\n}\n\nexport function resetPassword(options?: MutationOptions<any, any>) {\n const { mutate, isLoading } = createMutation<ResetPasswordPayload, any>(async (payload: any) => {\n const response: any = await Client.authentication.resetPassword(payload)\n return response\n }, options)\n\n return {\n mutate,\n resetPassword: mutate,\n isLoading\n }\n}\n\nexport function forgetPassword(options?: MutationOptions<any, any>) {\n const { mutate, isLoading } = createMutation<ForgetPasswordPayload, any>(async (payload: any) => {\n const response: any = await Client.authentication.forgetPassword(payload)\n return response\n }, options)\n\n return {\n mutate,\n forgetPassword: mutate,\n isLoading\n }\n}\n\nexport function logout(options?: MutationOptions<any, any>) {\n const { mutate, isLoading } = createMutation(async () => {\n const response: any = await Client.authentication.logout()\n\n clearAccessToken()\n clearClientAuthCookies()\n\n return response\n }, options)\n\n return {\n mutate,\n logout: mutate,\n isLoading\n }\n}\n\nexport function registerExistingUser(options?: MutationOptions<any, any>) {\n const { mutate, isLoading } = createMutation<any, any>(async (payload: any) => {\n const response: any = await Client.authentication.registerExistingUser(payload)\n return response\n }, options)\n\n return {\n mutate,\n registerExistingUser: mutate,\n isLoading\n }\n}\n\nexport function verifyEmailResend(options?: MutationOptions<any, any>) {\n const { mutate, isLoading } = createMutation<any, any>(async (payload: any) => {\n const response: any = await Client.authentication.verifyEmailResend(payload)\n return response\n }, options)\n\n return {\n mutate,\n verifyEmailResend: mutate,\n isLoading\n }\n}\n\nexport function resendEmail(options?: MutationOptions<any, any>) {\n const { mutate, isLoading } = createMutation<any, any>(async (payload: any) => {\n const response: any = await Client.authentication.resendEmail(payload)\n return response\n }, options)\n\n return {\n mutate,\n resendEmail: mutate,\n isLoading\n }\n}\n","import { Client } from '../../../core/http/client-assembler'\nimport { createMutation } from '../../../core/mutation/createMutation'\nimport { applyLoginResponse } from '../../../core/http/login-session'\nimport type {\n LoginResponseData,\n MfaEnrollmentStatus,\n MfaOtpSendRequest,\n MfaPendingPasskeyOptionsRequest,\n MfaPendingPasskeyVerifyRequest,\n MfaPreferenceRequest,\n MfaStatusQuery,\n MutationOptions,\n PasskeyLoginOptionsRequest,\n PasskeyLoginVerifyRequest,\n PhoneVerifyConfirmRequest,\n PhoneVerifyStartRequest,\n BackupCodesRegenerateRequest,\n MfaBackupCodesResponse,\n MfaOptOutRequest,\n PhoneUnverifyRequest,\n TotpDisableRequest,\n TotpEnrollVerifyRequest,\n TwoFaVerificationRequest,\n WebAuthnVerifyRequest\n} from '../../../core/types'\n\n/**\n * Complete the MFA login step after `api.login()` returned `twoFactorRequired: true`.\n *\n * **API:** `POST /api/auth/verify-otp?hubId={hubId}`\n * **Auth:** Bearer temp JWT; body `{ token, otp, method }` (`EMAIL_OTP` | `SMS_OTP` | `TOTP` | `BACKUP_CODE`).\n * **Session:** On success persists full access + refresh tokens (skips when still MFA-pending).\n */\nexport function verifyOtp(options?: MutationOptions<LoginResponseData, any>) {\n const { mutate, isLoading } = createMutation<TwoFaVerificationRequest, LoginResponseData>(async (payload?: TwoFaVerificationRequest) => {\n const response = (await Client.authentication.verifyOtp(payload!)) as LoginResponseData\n await applyLoginResponse(response)\n return response\n }, options)\n\n return { mutate, verifyOtp: mutate, isLoading }\n}\n\n/**\n * Resend OTP or switch to email/SMS on the MFA login gate.\n *\n * **API:** `POST /api/auth/mfa/pending/otp/send`\n * **Auth:** Bearer temp JWT; body `{ token, method }`.\n */\nexport function sendMfaOtp(options?: MutationOptions<any, any>) {\n const { mutate, isLoading } = createMutation<MfaOtpSendRequest, any>(\n async (payload?: MfaOtpSendRequest) => Client.mfa.sendPendingOtp(payload!),\n options\n )\n\n return { mutate, sendOtp: mutate, sendMfaOtp: mutate, isLoading }\n}\n\n/**\n * Start WebAuthn ceremony for passkey as second factor during login.\n *\n * **API:** `POST /api/auth/mfa/pending/passkey/authenticate/options`\n * **Auth:** Bearer temp JWT; body `{ token, portalId? }`.\n */\nexport function pendingPasskeyOptions(options?: MutationOptions<any, any>) {\n const { mutate, isLoading } = createMutation<MfaPendingPasskeyOptionsRequest, any>(\n async (payload?: MfaPendingPasskeyOptionsRequest) => Client.mfa.pendingPasskeyOptions(payload!),\n options\n )\n\n return { mutate, pendingPasskeyOptions: mutate, isLoading }\n}\n\n/**\n * Finish passkey MFA-step and complete login when successful.\n *\n * **API:** `POST /api/auth/mfa/pending/passkey/authenticate/verify?hubId={hubId}`\n * **Auth:** Bearer temp JWT; body `{ token, challengeId, credential, portalId? }`.\n * **Session:** On success persists full access + refresh tokens.\n */\nexport function pendingPasskeyVerify(options?: MutationOptions<LoginResponseData, any>) {\n const { mutate, isLoading } = createMutation<MfaPendingPasskeyVerifyRequest, LoginResponseData>(\n async (payload?: MfaPendingPasskeyVerifyRequest) => {\n const response = (await Client.mfa.pendingPasskeyVerify(payload!)) as LoginResponseData\n await applyLoginResponse(response)\n return response\n },\n options\n )\n\n return { mutate, pendingPasskeyVerify: mutate, isLoading }\n}\n\n/**\n * MFA enrollment and policy snapshot for the security settings UI.\n *\n * **API:** `GET /api/auth/mfa/status?portalId={portalId}`\n * **Auth:** Bearer access JWT (full session).\n */\nexport function getMfaStatus(options?: MutationOptions<MfaEnrollmentStatus, any>) {\n const { mutate, isLoading } = createMutation<MfaStatusQuery | undefined, MfaEnrollmentStatus>(\n async (payload) => (await Client.mfa.getStatus(payload)) as MfaEnrollmentStatus,\n options\n )\n\n return { mutate, getStatus: mutate, getMfaStatus: mutate, isLoading }\n}\n\n/**\n * Set the user's default MFA method for this hub/portal scope.\n *\n * **API:** `PUT /api/auth/mfa/preferences?portalId={portalId}`\n * **Auth:** Bearer access JWT; body `{ defaultMethod }`.\n */\nexport function setMfaPreferences(options?: MutationOptions<any, any>) {\n const { mutate, isLoading } = createMutation<MfaPreferenceRequest & MfaStatusQuery, any>(\n async (payload?: MfaPreferenceRequest & MfaStatusQuery) => {\n const { portalId, ...data } = payload!\n return Client.mfa.setPreferences(data, { portalId })\n },\n options\n )\n\n return { mutate, setPreferences: mutate, setMfaPreferences: mutate, isLoading }\n}\n\n/**\n * Send OTP to verify the user's phone number (enables SMS OTP at login).\n *\n * **API:** `POST /api/auth/mfa/phone/verify/start?portalId={portalId}`\n * **Auth:** Bearer access JWT; body `{ phone }` (E.164, e.g. `+14155552671`).\n */\nexport function startPhoneVerify(options?: MutationOptions<any, any>) {\n const { mutate, isLoading } = createMutation<PhoneVerifyStartRequest & MfaStatusQuery, any>(async (payload) => {\n const { portalId, ...data } = payload ?? { phone: '' }\n return Client.mfa.startPhoneVerify(data, portalId != null ? { portalId } : undefined)\n }, options)\n\n return { mutate, startPhoneVerify: mutate, isLoading }\n}\n\n/**\n * Confirm phone verification with the OTP code.\n *\n * **API:** `POST /api/auth/mfa/phone/verify/confirm?portalId={portalId}`\n * **Auth:** Bearer access JWT; body `{ phone, code }`.\n */\nexport function confirmPhoneVerify(options?: MutationOptions<any, any>) {\n const { mutate, isLoading } = createMutation<PhoneVerifyConfirmRequest & MfaStatusQuery, any>(async (payload) => {\n const { portalId, ...data } = payload ?? { phone: '', code: '' }\n return Client.mfa.confirmPhoneVerify(data, portalId != null ? { portalId } : undefined)\n }, options)\n\n return { mutate, confirmPhoneVerify: mutate, isLoading }\n}\n\n/**\n * Start TOTP authenticator enrollment for the current portal scope.\n *\n * **API:** `POST /api/auth/mfa/totp/enroll/start?portalId={portalId}`\n * **Auth:** Bearer access JWT. Returns `secret`, `otpauthUri`, `scopeKey`.\n */\nexport function totpEnrollStart(options?: MutationOptions<any, any>) {\n const { mutate, isLoading } = createMutation<MfaStatusQuery | undefined, any>(async (payload) => Client.mfa.totpEnrollStart(payload), options)\n\n return { mutate, totpEnrollStart: mutate, isLoading }\n}\n\n/**\n * Confirm TOTP enrollment and receive one-time backup codes.\n *\n * **API:** `POST /api/auth/mfa/totp/enroll/verify?portalId={portalId}`\n * **Auth:** Bearer access JWT; body `{ code, portalId? }`.\n */\nexport function totpEnrollVerify(options?: MutationOptions<any, any>) {\n const { mutate, isLoading } = createMutation<TotpEnrollVerifyRequest, any>(\n async (payload?: TotpEnrollVerifyRequest) => Client.mfa.totpEnrollVerify(payload!),\n options\n )\n\n return { mutate, totpEnrollVerify: mutate, isLoading }\n}\n\n/**\n * Disable TOTP for the current scope (requires current password).\n *\n * **API:** `POST /api/auth/mfa/totp/disable`\n * **Auth:** Bearer access JWT; body `{ password }`.\n */\nexport function totpDisable(options?: MutationOptions<any, any>) {\n const { mutate, isLoading } = createMutation<TotpDisableRequest & MfaStatusQuery, any>(async (payload?: TotpDisableRequest & MfaStatusQuery) => {\n const { portalId, ...data } = payload!\n return Client.mfa.totpDisable(data, { portalId })\n }, options)\n\n return { mutate, totpDisable: mutate, isLoading }\n}\n\n/**\n * Remove SMS MFA by clearing phone verification for the current scope.\n *\n * **API:** `POST /api/auth/mfa/phone/unverify?portalId={portalId}`\n */\nexport function phoneUnverify(options?: MutationOptions<any, any>) {\n const { mutate, isLoading } = createMutation<PhoneUnverifyRequest & MfaStatusQuery, any>(\n async (payload?: PhoneUnverifyRequest & MfaStatusQuery) => {\n const { portalId, ...data } = payload!\n return Client.mfa.phoneUnverify(data, { portalId })\n },\n options\n )\n\n return { mutate, phoneUnverify: mutate, isLoading }\n}\n\n/**\n * Regenerate backup codes (password + TOTP step-up). Plaintext codes returned once.\n *\n * **API:** `POST /api/auth/mfa/backup-codes/regenerate?portalId={portalId}`\n */\nexport function backupCodesRegenerate(options?: MutationOptions<MfaBackupCodesResponse, any>) {\n const { mutate, isLoading } = createMutation<BackupCodesRegenerateRequest & MfaStatusQuery, MfaBackupCodesResponse>(\n async (payload?: BackupCodesRegenerateRequest & MfaStatusQuery) => {\n const { portalId, ...data } = payload!\n return Client.mfa.backupCodesRegenerate(data, { portalId })\n },\n options\n )\n\n return { mutate, backupCodesRegenerate: mutate, isLoading }\n}\n\n/**\n * Turn off all voluntary MFA enrollments when policy allows.\n *\n * **API:** `POST /api/auth/mfa/opt-out?portalId={portalId}`\n */\nexport function mfaOptOut(options?: MutationOptions<any, any>) {\n const { mutate, isLoading } = createMutation<MfaOptOutRequest & MfaStatusQuery, any>(async (payload?: MfaOptOutRequest & MfaStatusQuery) => {\n const { portalId, ...data } = payload!\n return Client.mfa.optOut(data, { portalId })\n }, options)\n\n return { mutate, optOut: mutate, mfaOptOut: mutate, isLoading }\n}\n\n/**\n * Start passkey (WebAuthn) registration ceremony.\n *\n * **API:** `POST /api/auth/mfa/webauthn/register/options?portalId={portalId}`\n * **Auth:** Bearer access JWT.\n */\nexport function webauthnRegisterOptions(options?: MutationOptions<any, any>) {\n const { mutate, isLoading } = createMutation<MfaStatusQuery | undefined, any>(\n async (payload) => Client.mfa.webauthnRegisterOptions(payload),\n options\n )\n\n return { mutate, webauthnRegisterOptions: mutate, isLoading }\n}\n\n/**\n * Complete passkey registration after `@simplewebauthn/browser` ceremony.\n *\n * **API:** `POST /api/auth/mfa/webauthn/register/verify?portalId={portalId}`\n * **Auth:** Bearer access JWT; body `{ challengeId, credential, nickname?, portalId? }`.\n */\nexport function webauthnRegisterVerify(options?: MutationOptions<any, any>) {\n const { mutate, isLoading } = createMutation<WebAuthnVerifyRequest, any>(\n async (payload?: WebAuthnVerifyRequest) => Client.mfa.webauthnRegisterVerify(payload!),\n options\n )\n\n return { mutate, webauthnRegisterVerify: mutate, isLoading }\n}\n\n/**\n * Start passkey authentication ceremony while logged in (re-verify).\n *\n * **API:** `POST /api/auth/mfa/webauthn/authenticate/options?portalId={portalId}`\n * **Auth:** Bearer access JWT.\n */\nexport function webauthnAuthOptions(options?: MutationOptions<any, any>) {\n const { mutate, isLoading } = createMutation<MfaStatusQuery | undefined, any>(async (payload) => Client.mfa.webauthnAuthOptions(payload), options)\n\n return { mutate, webauthnAuthOptions: mutate, isLoading }\n}\n\n/**\n * Complete logged-in passkey re-verification.\n *\n * **API:** `POST /api/auth/mfa/webauthn/authenticate/verify?portalId={portalId}`\n * **Auth:** Bearer access JWT; body `{ challengeId, credential, portalId? }`.\n */\nexport function webauthnAuthVerify(options?: MutationOptions<any, any>) {\n const { mutate, isLoading } = createMutation<WebAuthnVerifyRequest, any>(\n async (payload?: WebAuthnVerifyRequest) => Client.mfa.webauthnAuthVerify(payload!),\n options\n )\n\n return { mutate, webauthnAuthVerify: mutate, isLoading }\n}\n\n/**\n * List passkeys registered for the portal scope.\n *\n * **API:** `GET /api/auth/mfa/webauthn/credentials?portalId={portalId}`\n * **Auth:** Bearer access JWT.\n */\nexport function listWebauthnCredentials(options?: MutationOptions<any, any>) {\n const { mutate, isLoading } = createMutation<MfaStatusQuery | undefined, any>(\n async (payload) => Client.mfa.listWebauthnCredentials(payload),\n options\n )\n\n return { mutate, listWebauthnCredentials: mutate, isLoading }\n}\n\n/**\n * Remove a registered passkey.\n *\n * **API:** `DELETE /api/auth/mfa/webauthn/credentials/{credentialRecordId}?portalId={portalId}`\n * **Auth:** Bearer access JWT.\n */\nexport function deleteWebauthnCredential(options?: MutationOptions<any, any>) {\n const { mutate, isLoading } = createMutation<{ credentialRecordId: string | number } & MfaStatusQuery, any>(\n async (payload?: { credentialRecordId: string | number } & MfaStatusQuery) => {\n const { credentialRecordId, portalId } = payload!\n return Client.mfa.deleteWebauthnCredential(credentialRecordId, { portalId })\n },\n options\n )\n\n return { mutate, deleteWebauthnCredential: mutate, isLoading }\n}\n\n/**\n * Start passwordless passkey login (when `PASSKEY_PRIMARY` is allowed).\n *\n * **API:** `POST /api/auth/passkey/login/options?hubId={hubId}`\n * **Auth:** Public; body `{ email, hubId?, portalId? }`.\n */\nexport function passkeyLoginOptions(options?: MutationOptions<any, any>) {\n const { mutate, isLoading } = createMutation<PasskeyLoginOptionsRequest, any>(\n async (payload?: PasskeyLoginOptionsRequest) => Client.mfa.passkeyLoginOptions(payload!),\n options\n )\n\n return { mutate, passkeyLoginOptions: mutate, isLoading }\n}\n\n/**\n * Finish passwordless passkey login; may return `twoFactorRequired` if policy requires MFA.\n *\n * **API:** `POST /api/auth/passkey/login/verify?hubId={hubId}`\n * **Auth:** Public; body `{ challengeId, credential, portalId? }`.\n * **Session:** Applies MFA-aware token rules via {@link applyLoginResponse}.\n */\nexport function passkeyLoginVerify(options?: MutationOptions<LoginResponseData, any>) {\n const { mutate, isLoading } = createMutation<PasskeyLoginVerifyRequest, LoginResponseData>(async (payload?: PasskeyLoginVerifyRequest) => {\n const response = (await Client.mfa.passkeyLoginVerify(payload!)) as LoginResponseData\n await applyLoginResponse(response)\n return response\n }, options)\n\n return { mutate, passkeyLoginVerify: mutate, isLoading }\n}\n","import { Client } from '../../../core/http/client-assembler'\nimport { createMutation } from '../../../core/mutation/createMutation'\nimport type {\n MutationOptions,\n RevokeSecuritySessionPayload,\n SecurityLoginActivityQuery,\n SecurityOverviewQuery,\n SecuritySessionsQuery\n} from '../../../core/types'\n\n/**\n * Security settings overview (password age, MFA methods, policy flags).\n * Use this for the Security page — not `api.me()` + `api.getMfaStatus()`.\n *\n * **API:** `GET /api/auth/security/overview?portalId={portalId}`\n * **Auth:** Bearer access JWT.\n */\nexport function getSecurityOverview(options?: MutationOptions<any, any>) {\n const { mutate, isLoading } = createMutation<SecurityOverviewQuery | undefined, any>(\n async (payload) => Client.security.getOverview(payload),\n options\n )\n\n return { mutate, getOverview: mutate, getSecurityOverview: mutate, isLoading }\n}\n\n/**\n * Paginated login activity for the Security page.\n *\n * **API:** `GET /api/auth/security/login-activity?page=&limit=&sort=`\n * **Auth:** Bearer access JWT.\n */\nexport function getSecurityLoginActivity(options?: MutationOptions<any, any>) {\n const { mutate, isLoading } = createMutation<SecurityLoginActivityQuery | undefined, any>(\n async (payload) => Client.security.getLoginActivity(payload),\n options\n )\n\n return { mutate, getLoginActivity: mutate, getSecurityLoginActivity: mutate, isLoading }\n}\n\n/**\n * List active sessions (refresh-token families) for the Security page.\n *\n * **API:** `GET /api/auth/security/sessions?currentFamilyId=`\n * **Auth:** Bearer access JWT; optional `refreshToken` in payload → `X-Refresh-Token` header to mark current session.\n */\nexport function getSecuritySessions(options?: MutationOptions<any, any>) {\n const { mutate, isLoading } = createMutation<SecuritySessionsQuery | undefined, any>(\n async (payload) => Client.security.getSessions(payload),\n options\n )\n\n return { mutate, getSessions: mutate, getSecuritySessions: mutate, isLoading }\n}\n\n/**\n * Sign out a single device/session by `familyId`.\n *\n * **API:** `POST /api/auth/security/sessions/{familyId}/revoke`\n * **Auth:** Bearer access JWT; optional `refreshToken` in payload.\n */\nexport function revokeSecuritySession(options?: MutationOptions<any, any>) {\n const { mutate, isLoading } = createMutation<RevokeSecuritySessionPayload, any>(\n async (payload?: RevokeSecuritySessionPayload) => Client.security.revokeSession(payload!),\n options\n )\n\n return { mutate, revokeSession: mutate, revokeSecuritySession: mutate, isLoading }\n}\n\n/**\n * Sign out all other devices; keeps the current session when `refreshToken` is provided.\n *\n * **API:** `POST /api/auth/security/sessions/revoke-others`\n * **Auth:** Bearer access JWT; optional `refreshToken` in payload → `X-Refresh-Token` header.\n */\nexport function revokeOtherSecuritySessions(options?: MutationOptions<any, any>) {\n const { mutate, isLoading } = createMutation<{ refreshToken?: string } | undefined, any>(\n async (payload) => Client.security.revokeOtherSessions(payload?.refreshToken),\n options\n )\n\n return { mutate, revokeOtherSessions: mutate, revokeOtherSecuritySessions: mutate, isLoading }\n}\n","import { Client } from '../../../core/http/client-assembler'\nimport type { MutationOptions } from '../../../core/types'\nimport { createMutation } from '../../../core/mutation/createMutation'\n\nexport function getLoginBootstrap(options?: MutationOptions<any, { hubId?: number; portalId?: number } | void>) {\n const { mutate, isLoading } = createMutation(async (payload?: { hubId?: number; portalId?: number }) => {\n const response: any = await Client.authentication.getLoginBootstrap(payload)\n return response\n }, options)\n\n return {\n mutate,\n getLoginBootstrap: mutate,\n isLoading\n }\n}\n","import { Client } from '../../../core/http/client-assembler'\nimport type { MutationOptions, PreLoginPayload } from '../../../core/types'\nimport { createMutation } from '../../../core/mutation/createMutation'\nimport { applyLoginResponse } from '../../../core/http/login-session'\n\nexport function getSsoDetails(options?: MutationOptions<any, any>) {\n const { mutate, isLoading } = createMutation(async () => {\n const response: any = await Client.sso.getSsoDetails()\n return response\n }, options)\n\n return {\n mutate,\n getDetails: mutate,\n getSsoDetails: mutate,\n isLoading\n }\n}\n\nexport function generateSsoUrl(options?: MutationOptions<any, any>) {\n const { mutate, isLoading } = createMutation<PreLoginPayload, any>(async (payload: any) => {\n const response: any = await Client.sso.generateSsoUrl(payload)\n return response\n }, options)\n\n return {\n mutate,\n generateUrl: mutate,\n generateSsoUrl: mutate,\n isLoading\n }\n}\n\nexport function ssoCallback(options?: MutationOptions<any, any>) {\n const { mutate, isLoading } = createMutation<PreLoginPayload, any>(async (payload: any) => {\n const response: any = await Client.sso.ssoCallback(payload)\n await applyLoginResponse(response)\n return response\n }, options)\n\n return {\n mutate,\n callback: mutate,\n ssoCallback: mutate,\n isLoading\n }\n}\n","import { Client } from '../../../core/http/client-assembler'\nimport type { ChangePasswordPayload, MutationOptions } from '../../../core/types'\nimport { createMutation } from '../../../core/mutation/createMutation'\nimport { actions as userActions } from '../../../state/crm/use-user'\n\nlet meRequestInFlight: Promise<any> | null = null\n\nasync function fetchMeOnce() {\n if (!meRequestInFlight) {\n meRequestInFlight = Client.user.me().finally(() => {\n meRequestInFlight = null\n })\n }\n return meRequestInFlight\n}\n\nexport function me(options?: MutationOptions<any, any>) {\n const { mutate, isLoading } = createMutation(async () => {\n const response: any = await fetchMeOnce()\n userActions.setProfile(response)\n return response?.data\n }, options)\n\n return {\n mutate,\n me: mutate,\n isLoading\n }\n}\n\nexport function profile(options?: MutationOptions<any, any>) {\n const { mutate, isLoading } = createMutation(async (paylaod: any) => {\n const response: any = await Client.user.profile(paylaod)\n return response\n }, options)\n\n return {\n mutate,\n profile: mutate,\n isLoading\n }\n}\n\nexport function profileUpdate(options?: MutationOptions<any, any>) {\n const { mutate, isLoading } = createMutation(async (paylaod: any) => {\n const response: any = await Client.user.profileUpdate(paylaod)\n return response\n }, options)\n\n return {\n mutate,\n updateProfile: mutate,\n profileUpdate: mutate,\n isLoading\n }\n}\n\n/** @deprecated Use {@link profileUpdate} — same factory; 3.0 nested key is `updateProfile`. */\nexport const updateProfile = profileUpdate\n\nexport function changePassword(options?: MutationOptions<any, any>) {\n const { mutate, isLoading } = createMutation<ChangePasswordPayload, any>(async (payload: any) => {\n const response: any = await Client.user.changePassword(payload)\n return response\n }, options)\n\n return {\n mutate,\n changePassword: mutate,\n isLoading\n }\n}\n","import {\n preLogin,\n login,\n clientSession,\n handoff,\n verifyEmail,\n forgetPassword,\n logout,\n resetPasswordVerifyToken,\n resetPassword,\n registerExistingUser,\n verifyEmailResend,\n resendEmail\n} from '../features/auth/api/authentication'\nimport {\n verifyOtp,\n sendMfaOtp,\n pendingPasskeyOptions,\n pendingPasskeyVerify,\n getMfaStatus,\n setMfaPreferences,\n startPhoneVerify,\n confirmPhoneVerify,\n totpEnrollStart,\n totpEnrollVerify,\n totpDisable,\n phoneUnverify,\n backupCodesRegenerate,\n mfaOptOut,\n webauthnRegisterOptions,\n webauthnRegisterVerify,\n webauthnAuthOptions,\n webauthnAuthVerify,\n listWebauthnCredentials,\n deleteWebauthnCredential,\n passkeyLoginOptions,\n passkeyLoginVerify\n} from '../features/auth/api/mfa'\nimport {\n getSecurityOverview,\n getSecurityLoginActivity,\n getSecuritySessions,\n revokeSecuritySession,\n revokeOtherSecuritySessions\n} from '../features/auth/api/security'\nimport { getLoginBootstrap } from '../features/auth/api/login-bootstrap'\nimport { getSsoDetails, generateSsoUrl, ssoCallback } from '../features/auth/api/sso'\nimport { changePassword, me, profile, profileUpdate } from '../features/auth/api/users'\nimport { getRefreshToken } from '../core/http/auth-utils'\nimport { getAuthRefreshToken } from '../core/http/http-client'\nimport {\n clearAccessToken,\n getAccessToken,\n isAuthenticateApp,\n isAuthenticated,\n isExpiresAccessToken,\n isAccessTokenExpired\n} from '../core/http/token-store'\nimport { isCookieExpired } from '../core/utils/cookie'\n\n/** Canonical nested auth API (SDK 3.0). */\nexport const authApi = {\n preLogin,\n login,\n clientSession,\n handoff,\n logout,\n verifyEmail,\n registerExistingUser,\n forgetPassword,\n resetPassword,\n resetPasswordVerifyToken,\n verifyEmailResend,\n resendEmail,\n changePassword,\n me,\n profile,\n updateProfile: profileUpdate,\n mfa: {\n verifyOtp,\n sendOtp: sendMfaOtp,\n pendingPasskeyOptions,\n pendingPasskeyVerify,\n getStatus: getMfaStatus,\n setPreferences: setMfaPreferences,\n startPhoneVerify,\n confirmPhoneVerify,\n totpEnrollStart,\n totpEnrollVerify,\n totpDisable,\n phoneUnverify,\n backupCodesRegenerate,\n optOut: mfaOptOut,\n mfaOptOut,\n webauthnRegisterOptions,\n webauthnRegisterVerify,\n webauthnAuthOptions,\n webauthnAuthVerify,\n listWebauthnCredentials,\n deleteWebauthnCredential,\n passkeyLoginOptions,\n passkeyLoginVerify\n },\n security: {\n getOverview: getSecurityOverview,\n getLoginActivity: getSecurityLoginActivity,\n getSessions: getSecuritySessions,\n revokeSession: revokeSecuritySession,\n revokeOtherSessions: revokeOtherSecuritySessions\n },\n loginBootstrap: getLoginBootstrap,\n sso: {\n getDetails: getSsoDetails,\n generateUrl: generateSsoUrl,\n callback: ssoCallback\n },\n session: {\n getRefreshToken,\n refreshAccessToken: getAuthRefreshToken,\n getAccessToken,\n clearAccessToken,\n isAuthenticated,\n isAuthenticateApp,\n isAccessTokenExpired,\n isExpiresAccessToken,\n isCookieExpired\n }\n}\n"]}
|