woodsportal-client-sdk 4.1.0-dev.3 → 4.1.0-dev.4

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.
@@ -1,7 +1,7 @@
1
- import { authApi } from '../chunk-KMPTAGIW.js';
2
- export { API_ERROR_CATEGORY_FALLBACK, API_ERROR_DISPLAY_CONFIG, WOODSPORTAL_API_ACTIVE_ERROR_CODES, buildErrorDescription, getApiErrorFromUnknown, hasAuthenticatedAccess, hasValidAccess, isFullyAuthenticated, isMfaPendingSession, recoverMfaGateOnBoot, resolveApiErrorDisplay, resolveAuthRouteAction } from '../chunk-KMPTAGIW.js';
1
+ import { authApi } from '../chunk-TIQZXED6.js';
2
+ export { API_ERROR_CATEGORY_FALLBACK, API_ERROR_DISPLAY_CONFIG, WOODSPORTAL_API_ACTIVE_ERROR_CODES, buildErrorDescription, getApiErrorFromUnknown, hasAuthenticatedAccess, hasValidAccess, isFullyAuthenticated, isMfaPendingSession, recoverMfaGateOnBoot, resolveApiErrorDisplay, resolveAuthRouteAction } from '../chunk-TIQZXED6.js';
3
3
  export { isOptionalAuthFailureUrl, isSessionProbeUrl, persistAuthError, readPersistedAuthError, resolveAuthErrorAction } from '../chunk-JG3TEXWP.js';
4
- export { getFieldErrors, getFormErrors, initializeHttpClient, setEditorPreviewMockHandler, startVisibilityRefreshScheduler, stopVisibilityRefreshScheduler } from '../chunk-AB5HNVRX.js';
4
+ export { getFieldErrors, getFormErrors, initializeHttpClient, setEditorPreviewMockHandler, startVisibilityRefreshScheduler, stopVisibilityRefreshScheduler } from '../chunk-72J2YIJW.js';
5
5
  import '../chunk-VLUJUKZM.js';
6
6
  export { SERVICE_UNAVAILABLE_MESSAGE, SessionRefreshDeferredError, SessionRefreshFailedError, classifyHttpError, clearMfaPendingAccessToken, getHttpErrorMessage, hydrateMfaPendingAccessToken, isMfaPendingAccessSession, isServiceUnavailableError, isSessionRefreshDeferredError, isSessionRefreshFailedError, readMfaPendingAccessToken, setSessionLifecycleListener, storeMfaPendingAccessToken } from '../chunk-XD2VPUML.js';
7
7
  import '../chunk-KPHAQNS2.js';
@@ -1,7 +1,7 @@
1
- import { crmApi } from '../chunk-R4IKHQVC.js';
2
- export { isPipelineBoardObjectType, shouldShowPipelineSelector, supportsBoardView } from '../chunk-R4IKHQVC.js';
1
+ import { crmApi } from '../chunk-52MGERAH.js';
2
+ export { isPipelineBoardObjectType, shouldShowPipelineSelector, supportsBoardView } from '../chunk-52MGERAH.js';
3
3
  import '../chunk-55MIERLJ.js';
4
- import { navigationApi } from '../chunk-AB5HNVRX.js';
4
+ import { navigationApi } from '../chunk-72J2YIJW.js';
5
5
  import '../chunk-3GOXOYKI.js';
6
6
  import { actions8, syncStore, actions5, emailStore, actions4, noteStore, actions6, userStore, actions2, tableStore, tableUiActions, tableUiStore } from '../chunk-VLUJUKZM.js';
7
7
  export { HUBSPOT_DEALS_OBJECT_TYPE_ID, HUBSPOT_TICKETS_OBJECT_TYPE_ID, PIPELINE_BOARD_OBJECT_TYPE_IDS, PIPELINE_REQUIRED_MANAGED_OBJECT_TYPE_IDS, isPipelineBoardObjectTypeId } from '../chunk-VLUJUKZM.js';
package/dist/index.d.ts CHANGED
@@ -1,10 +1,10 @@
1
1
  import { a as TableUiState, T as TableState, U as UserState, N as NoteState, E as EmailState, S as SyncState } from './use-sync-B4xio81b.js';
2
+ import { M as MutationOptions, P as PreLoginPayload, L as LoginPayload, V as VerifyEmailPayload, a as ResetPasswordVerifyTokenPayload, R as ResetPasswordPayload, F as ForgetPasswordPayload, b as ForgetPasswordOtpVerifyPayload, C as ChangePasswordPayload } from './index-CWYPrDBp.js';
3
+ export { c as Config } from './index-CWYPrDBp.js';
2
4
  import { l as list, a as list$1, b as list$2, e as existingList, c as addExistingList, s as sideBarList, f as form, o as objectFormOptions, d as details, u as update, g as create, h as createExisting, r as removeExisting, i as list$3, j as create$1, k as update$1, m as list$4, n as create$2, p as update$2, q as list$5, t as details$1, v as download, w as addFolder, x as addFile, y as imageUpload, z as attachmentUpload, A as purge, B as purgeStatus, G as CachePurgeTarget, F as CachePurgeRequest, D as CachePurgeListQuery, H as CachePurgeView, I as CreateCachePurgeJobOptions, N as PurgeResult, J as CrmCachePurgeOptions } from './cache-purge-CokkqLSk.js';
3
5
  export { C as CachePurgeDomain, E as CachePurgeMode, K as HUBSPOT_DEALS_OBJECT_TYPE_ID, L as HUBSPOT_TICKETS_OBJECT_TYPE_ID, P as PIPELINE_BOARD_OBJECT_TYPE_IDS, M as PIPELINE_REQUIRED_MANAGED_OBJECT_TYPE_IDS, O as isPipelineBoardObjectType, Q as isPipelineBoardObjectTypeId, R as shouldShowPipelineSelector, S as supportsBoardView } from './cache-purge-CokkqLSk.js';
4
6
  import { aO as ResolvedApiErrorDisplay, bt as ApiContentVariant, bu as ApiErrorSeverity, aN as ResolveApiErrorDisplayOptions, 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 verifyForgotPasswordOtp, e as resetPassword, g as resetPasswordVerifyToken, i as verifyEmailResend, j as resendEmail, s as signInLinkSend, k as signInLinkVerify, m as signInLinkValidateToken, n as changePassword, o as me, q as profile, t as profileUpdate, u as verifyOtp, w as sendMfaOtp, x as pendingPasskeyOptions, y as pendingPasskeyVerify, z as getMfaStatus, A as setMfaPreferences, B as startPhoneVerify, C as confirmPhoneVerify, D as totpEnrollStart, E as totpEnrollVerify, F as totpDisable, G as phoneUnverify, H as backupCodesRegenerate, I as mfaOptOut, J as webauthnRegisterOptions, K as webauthnRegisterVerify, L as webauthnAuthOptions, M as webauthnAuthVerify, N as listWebauthnCredentials, O as deleteWebauthnCredential, P as passkeyLoginOptions, Q as passkeyLoginVerify, R as getSecurityOverview, S as getSecurityLoginActivity, T as getSecuritySessions, U as revokeSecuritySession, V as revokeOtherSecuritySessions, W as getLoginBootstrap, X as getSsoDetails, Y as generateSsoUrl, Z as ssoCallback, _ as getRefreshToken, $ as refreshSession, a0 as getAuthRefreshToken, a1 as getAccessToken, a2 as setAccessToken, a3 as clearAccessToken, a4 as isAuthenticated, a5 as isAuthenticateApp, a6 as isAccessTokenExpired, a7 as isExpiresAccessToken, a8 as hasRefreshSession, a9 as hasValidAccessToken, aa as didLastRefreshFail, ab as isSessionRefreshExhausted, ac as isRefreshInFlight, ad as resetSessionAuthState, ae as clearSessionRefreshExhaustedState, af as hydrateSessionRefreshState, ag as SessionContractInput, aw as HttpClientConfig, bv as LoggerConfig, aU as TwoFaVerificationRequest, bw as MfaOtpSendRequest, bx as MfaPendingPasskeyOptionsRequest, by as MfaPendingPasskeyVerifyRequest, bz as MfaStatusQuery, bA as MfaPreferenceRequest, bB as PhoneVerifyStartRequest, bC as PhoneVerifyConfirmRequest, bD as TotpEnrollVerifyRequest, bE as TotpDisableRequest, bF as PhoneUnverifyRequest, bG as BackupCodesRegenerateRequest, bH as MfaBackupCodesResponse, bI as MfaOptOutRequest, bJ as WebAuthnVerifyRequest, bK as PasskeyLoginOptionsRequest, bL as PasskeyLoginVerifyRequest, bM as SecurityOverviewQuery, bN as SecurityLoginActivityQuery, bO as SecuritySessionsQuery, bP as RevokeSecuritySessionPayload } from './route-guard-contract-C6Gbvr5x.js';
5
7
  export { ah as API_ERROR_CATEGORY_FALLBACK, ai as API_ERROR_DISPLAY_CONFIG, aj as ActiveSession, ak as ApiErrorDisplayConfig, al as ApiErrorPayload, am as ApiErrorVariant, an as AuthErrorAction, ao as AuthErrorCode, ap as AuthErrorCodeValue, aq as AuthFunnelState, ar as AuthInterceptorPolicyConfig, as as AuthPolicyRoutes, at as AuthRouteAction, ax as HttpErrorKind, ay as HydrateMfaPendingAccessTokenInput, bQ as LogLevel, bR as LogMeta, aD as LoginHistoryRow, aE as LoginResponseData, aF as MfaBootRecoveryResult, aG as MfaEnrollmentStatus, aH as MfaMethod, aI as MfaMethodOption, aJ as MfaPendingAccessToken, aK as MfaPortalScopeContext, aL as MfaStorageLane, aM as PaginationResponse, aP as SERVICE_UNAVAILABLE_MESSAGE, aQ as SecurityOverview, aR as SessionRefreshDeferredError, aS as SessionRefreshFailedError, bS as StorageKeyConfig, aT as StoredAuthError, aV as UnauthorizedPageCopy, aW as WOODSPORTAL_API_ACTIVE_ERROR_CODES, aX as WoodsportalRequestConfig, aY as buildErrorDescription, aZ as classifyHttpError, a_ as clearMfaPendingAccessToken, bT as configureStorageKeys, a$ as getApiErrorFromUnknown, b0 as getFieldErrors, b1 as getFormErrors, b2 as getHttpErrorMessage, bU as getStorageKeys, b3 as getUnauthorizedPageCopy, b4 as hasAuthenticatedAccess, b5 as hasValidAccess, b6 as hydrateMfaPendingAccessToken, b7 as initializeHttpClient, b8 as isFullyAuthenticated, b9 as isMfaPendingAccessSession, ba as isMfaPendingSession, bb as isOptionalAuthFailureUrl, bc as isServiceUnavailableError, bd as isSessionProbeUrl, be as isSessionRefreshDeferredError, bf as isSessionRefreshFailedError, bg as parseApiErrorPayload, bh as persistAuthError, bi as readMfaPendingAccessToken, bj as readPersistedAuthError, bk as recoverMfaGateOnBoot, bV as resetStorageKeysForTests, bl as resolveApiErrorDisplay, bm as resolveAuthErrorAction, bn as resolveAuthRouteAction, bp as setSessionLifecycleListener, bq as startVisibilityRefreshScheduler, br as stopVisibilityRefreshScheduler, bs as storeMfaPendingAccessToken } from './route-guard-contract-C6Gbvr5x.js';
6
- import { P as PreLoginPayload, L as LoginPayload, V as VerifyEmailPayload, a as ResetPasswordVerifyTokenPayload, R as ResetPasswordPayload, F as ForgetPasswordPayload, b as ForgetPasswordOtpVerifyPayload, C as ChangePasswordPayload } from './index-CWYPrDBp.js';
7
- export { c as Config, M as MutationOptions } from './index-CWYPrDBp.js';
8
8
  import 'axios';
9
9
 
10
10
  declare const WP_UI_THEME = "wp.ui.theme";
@@ -119,6 +119,11 @@ declare const WP_STORAGE_KEYS: {
119
119
  declare function wpClientIframeRefreshKey(hubId: string | number): string;
120
120
  declare function wpClientIframeRefreshExpKey(hubId: string | number): string;
121
121
 
122
+ interface NotificationPreference {
123
+ emailProductAnnouncements: boolean;
124
+ emailJobErrors: boolean;
125
+ }
126
+
122
127
  type ResolvedApiContentState = ResolvedApiErrorDisplay & {
123
128
  contentVariant: ApiContentVariant;
124
129
  severity: ApiErrorSeverity;
@@ -127,6 +132,17 @@ type ResolvedApiContentState = ResolvedApiErrorDisplay & {
127
132
  declare function resolveApiContentState(error: unknown, options?: ResolveApiErrorDisplayOptions): ResolvedApiContentState;
128
133
  declare function isExpectedApiError(error: unknown): boolean;
129
134
 
135
+ declare function getPreferences(options?: MutationOptions<NotificationPreference, any>): {
136
+ mutate: (payload?: void | undefined) => Promise<NotificationPreference>;
137
+ getPreferences: (payload?: void | undefined) => Promise<NotificationPreference>;
138
+ isLoading: () => boolean;
139
+ };
140
+ declare function updatePreferences(options?: MutationOptions<NotificationPreference, any>): {
141
+ mutate: (payload?: NotificationPreference | undefined) => Promise<NotificationPreference>;
142
+ updatePreferences: (payload?: NotificationPreference | undefined) => Promise<NotificationPreference>;
143
+ isLoading: () => boolean;
144
+ };
145
+
130
146
  declare const api: {
131
147
  auth: {
132
148
  preLogin: typeof preLogin;
@@ -311,6 +327,10 @@ declare const api: {
311
327
  putNavigation: (payload: unknown) => Promise<unknown>;
312
328
  importFromWebMenu: (payload: unknown) => Promise<unknown>;
313
329
  };
330
+ notifications: {
331
+ getPreferences: typeof getPreferences;
332
+ updatePreferences: typeof updatePreferences;
333
+ };
314
334
  };
315
335
 
316
336
  declare const DEFAULT_HUBSPOT_TIMEZONE = "Asia/Kolkata";
@@ -694,4 +714,4 @@ declare const store: {
694
714
  };
695
715
  };
696
716
 
697
- export { ApiContentVariant, ApiErrorSeverity, CachePurgeListQuery, CachePurgeRequest, CachePurgeTarget, CachePurgeView, ChangePasswordPayload, Client, CreateCachePurgeJobOptions, CrmCachePurgeOptions, DEFAULT_HUBSPOT_TIMEZONE, ForgetPasswordPayload, HttpClientConfig, type HubSpotActivityDateTimeParts, LoggerConfig, LoginPayload, type MobileClientConfig, PreLoginPayload, PurgeResult, ResetPasswordPayload, ResetPasswordVerifyTokenPayload, ResolveApiErrorDisplayOptions, type ResolvedApiContentState, ResolvedApiErrorDisplay, SessionContractInput, type SessionStorageAdapter, TwoFaVerificationRequest, VerifyEmailPayload, WP_STORAGE_KEYS, WP_UI_THEME, api, applyContractApiDate, applyCrossTabSessionRevocation, buildCachePurgeRequest, buildCrmListPurgeTarget, buildCrmSinglePurgeTarget, buildEngagementPurgeTarget, buildPortalConfigPurgeTarget, buildUserSessionPurgeTarget, clearClientAuthCookies, clearClientIframeRefreshLocalKeys, clearClientSdkSession, clearClientSessionStorageKeys, clearStaleIframeRefreshForOtherHubs, configureLogger, createCachePurgeJob, extractEngagementItemIdFromWriteResponse, extractHubspotRecordIdFromWriteResponse, formatGmtOffset, formatHubSpotActivityDateTime, formatHubSpotActivityDateTimeParts, getClientAuthCookieNamesToClear, getClientType, getConfiguredContractApiDate, getCurrentTimeZone, config as hubContext, initializeMobileClient, installCrossTabSessionListener, isExpectedApiError, mergePurgeTargets, migrateLegacyStorageKeys, normalizeToTimestamp, purgeCrmCombined, purgeCrmDetailAndListAfterCrmWrite, purgeCrmListCache, purgeCrmListCacheAfterCrmWrite, purgeCrmObjectDataCache, purgeCrmRecordCache, purgeEngagementCaches, purgeEngagementCachesAfterCrmWrite, resetSessionStores, resolveApiContentState, resolveCrmListPurgeQuery, setConfig as setHubContext, signalSessionChanged, store, toCachePurgeListQuery, wpClientIframeRefreshExpKey, wpClientIframeRefreshKey };
717
+ export { ApiContentVariant, ApiErrorSeverity, CachePurgeListQuery, CachePurgeRequest, CachePurgeTarget, CachePurgeView, ChangePasswordPayload, Client, CreateCachePurgeJobOptions, CrmCachePurgeOptions, DEFAULT_HUBSPOT_TIMEZONE, ForgetPasswordPayload, HttpClientConfig, type HubSpotActivityDateTimeParts, LoggerConfig, LoginPayload, type MobileClientConfig, MutationOptions, PreLoginPayload, PurgeResult, ResetPasswordPayload, ResetPasswordVerifyTokenPayload, ResolveApiErrorDisplayOptions, type ResolvedApiContentState, ResolvedApiErrorDisplay, SessionContractInput, type SessionStorageAdapter, TwoFaVerificationRequest, VerifyEmailPayload, WP_STORAGE_KEYS, WP_UI_THEME, api, applyContractApiDate, applyCrossTabSessionRevocation, buildCachePurgeRequest, buildCrmListPurgeTarget, buildCrmSinglePurgeTarget, buildEngagementPurgeTarget, buildPortalConfigPurgeTarget, buildUserSessionPurgeTarget, clearClientAuthCookies, clearClientIframeRefreshLocalKeys, clearClientSdkSession, clearClientSessionStorageKeys, clearStaleIframeRefreshForOtherHubs, configureLogger, createCachePurgeJob, extractEngagementItemIdFromWriteResponse, extractHubspotRecordIdFromWriteResponse, formatGmtOffset, formatHubSpotActivityDateTime, formatHubSpotActivityDateTimeParts, getClientAuthCookieNamesToClear, getClientType, getConfiguredContractApiDate, getCurrentTimeZone, config as hubContext, initializeMobileClient, installCrossTabSessionListener, isExpectedApiError, mergePurgeTargets, migrateLegacyStorageKeys, normalizeToTimestamp, purgeCrmCombined, purgeCrmDetailAndListAfterCrmWrite, purgeCrmListCache, purgeCrmListCacheAfterCrmWrite, purgeCrmObjectDataCache, purgeCrmRecordCache, purgeEngagementCaches, purgeEngagementCachesAfterCrmWrite, resetSessionStores, resolveApiContentState, resolveCrmListPurgeQuery, setConfig as setHubContext, signalSessionChanged, store, toCachePurgeListQuery, wpClientIframeRefreshExpKey, wpClientIframeRefreshKey };
package/dist/index.js CHANGED
@@ -1,12 +1,12 @@
1
1
  export { applyCrossTabSessionRevocation, clearClientSdkSession, installCrossTabSessionListener, resetSessionStores, signalSessionChanged } from './chunk-JUGKGKUN.js';
2
- import { authApi } from './chunk-KMPTAGIW.js';
3
- export { API_ERROR_CATEGORY_FALLBACK, API_ERROR_DISPLAY_CONFIG, WOODSPORTAL_API_ACTIVE_ERROR_CODES, buildErrorDescription, getApiErrorFromUnknown, hasAuthenticatedAccess, hasValidAccess, isExpectedApiError, isFullyAuthenticated, isMfaPendingSession, recoverMfaGateOnBoot, resolveApiContentState, resolveApiErrorDisplay, resolveAuthRouteAction } from './chunk-KMPTAGIW.js';
2
+ import { authApi } from './chunk-TIQZXED6.js';
3
+ export { API_ERROR_CATEGORY_FALLBACK, API_ERROR_DISPLAY_CONFIG, WOODSPORTAL_API_ACTIVE_ERROR_CODES, buildErrorDescription, getApiErrorFromUnknown, hasAuthenticatedAccess, hasValidAccess, isExpectedApiError, isFullyAuthenticated, isMfaPendingSession, recoverMfaGateOnBoot, resolveApiContentState, resolveApiErrorDisplay, resolveAuthRouteAction } from './chunk-TIQZXED6.js';
4
4
  export { isOptionalAuthFailureUrl, isSessionProbeUrl, persistAuthError, readPersistedAuthError, resolveAuthErrorAction } from './chunk-JG3TEXWP.js';
5
- import { crmApi } from './chunk-R4IKHQVC.js';
6
- export { isPipelineBoardObjectType, shouldShowPipelineSelector, supportsBoardView } from './chunk-R4IKHQVC.js';
5
+ import { crmApi } from './chunk-52MGERAH.js';
6
+ export { isPipelineBoardObjectType, shouldShowPipelineSelector, supportsBoardView } from './chunk-52MGERAH.js';
7
7
  import './chunk-55MIERLJ.js';
8
- import { navigationApi, HttpClient, API_ENDPOINTS, generateApiUrl, initializeHttpClient } from './chunk-AB5HNVRX.js';
9
- export { Client, applyContractApiDate, buildCachePurgeRequest, buildCrmListPurgeTarget, buildCrmSinglePurgeTarget, buildEngagementPurgeTarget, buildPortalConfigPurgeTarget, buildUserSessionPurgeTarget, createCachePurgeJob, extractEngagementItemIdFromWriteResponse, extractHubspotRecordIdFromWriteResponse, getConfiguredContractApiDate, getFieldErrors, getFormErrors, initializeHttpClient, mergePurgeTargets, purgeCrmCombined, purgeCrmDetailAndListAfterCrmWrite, purgeCrmListCache, purgeCrmListCacheAfterCrmWrite, purgeCrmObjectDataCache, purgeCrmRecordCache, purgeEngagementCaches, purgeEngagementCachesAfterCrmWrite, resolveCrmListPurgeQuery, startVisibilityRefreshScheduler, stopVisibilityRefreshScheduler, toCachePurgeListQuery } from './chunk-AB5HNVRX.js';
8
+ import { navigationApi, HttpClient, API_ENDPOINTS, generateApiUrl, createMutation, initializeHttpClient } from './chunk-72J2YIJW.js';
9
+ export { Client, applyContractApiDate, buildCachePurgeRequest, buildCrmListPurgeTarget, buildCrmSinglePurgeTarget, buildEngagementPurgeTarget, buildPortalConfigPurgeTarget, buildUserSessionPurgeTarget, createCachePurgeJob, extractEngagementItemIdFromWriteResponse, extractHubspotRecordIdFromWriteResponse, getConfiguredContractApiDate, getFieldErrors, getFormErrors, initializeHttpClient, mergePurgeTargets, purgeCrmCombined, purgeCrmDetailAndListAfterCrmWrite, purgeCrmListCache, purgeCrmListCacheAfterCrmWrite, purgeCrmObjectDataCache, purgeCrmRecordCache, purgeEngagementCaches, purgeEngagementCachesAfterCrmWrite, resolveCrmListPurgeQuery, startVisibilityRefreshScheduler, stopVisibilityRefreshScheduler, toCachePurgeListQuery } from './chunk-72J2YIJW.js';
10
10
  import './chunk-3GOXOYKI.js';
11
11
  import { actions8, syncStore, actions5, emailStore, actions4, noteStore, actions6, userStore, actions2, tableStore, tableUiActions, tableUiStore, hydrateUserStoreFromSession } from './chunk-VLUJUKZM.js';
12
12
  export { HUBSPOT_DEALS_OBJECT_TYPE_ID, HUBSPOT_TICKETS_OBJECT_TYPE_ID, PIPELINE_BOARD_OBJECT_TYPE_IDS, PIPELINE_REQUIRED_MANAGED_OBJECT_TYPE_IDS, isPipelineBoardObjectTypeId } from './chunk-VLUJUKZM.js';
@@ -46,13 +46,45 @@ var mobileApi = {
46
46
  importFromWebMenu: mobileNavigationClient.importFromWebMenu
47
47
  };
48
48
 
49
+ // src/main/features/notifications/client/notification-preferences-client.ts
50
+ var notificationPreferencesClient = {
51
+ getPreferences: () => HttpClient.get(generateApiUrl({ route: API_ENDPOINTS.NOTIFICATION_PREFERENCES })),
52
+ updatePreferences: (payload) => HttpClient.put(
53
+ generateApiUrl({ route: API_ENDPOINTS.NOTIFICATION_PREFERENCES }),
54
+ payload
55
+ )
56
+ };
57
+
58
+ // src/main/features/notifications/api/preferences.ts
59
+ function getPreferences(options) {
60
+ const { mutate, isLoading } = createMutation(
61
+ async () => await notificationPreferencesClient.getPreferences(),
62
+ options
63
+ );
64
+ return { mutate, getPreferences: mutate, isLoading };
65
+ }
66
+ function updatePreferences(options) {
67
+ const { mutate, isLoading } = createMutation(
68
+ async (payload) => await notificationPreferencesClient.updatePreferences(payload),
69
+ options
70
+ );
71
+ return { mutate, updatePreferences: mutate, isLoading };
72
+ }
73
+
74
+ // src/main/api/nested-notifications-api.ts
75
+ var notificationsApi = {
76
+ getPreferences,
77
+ updatePreferences
78
+ };
79
+
49
80
  // src/main/api/compose-api.ts
50
81
  var api = {
51
82
  auth: authApi,
52
83
  crm: crmApi,
53
84
  navigation: navigationApi,
54
85
  accounts: accountsApi,
55
- mobile: mobileApi
86
+ mobile: mobileApi,
87
+ notifications: notificationsApi
56
88
  };
57
89
 
58
90
  // src/main/core/utils/datetime.ts
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/main/features/accounts/client/accounts-client.ts","../src/main/api/nested-accounts-api.ts","../src/main/features/mobile/client/mobile-navigation-client.ts","../src/main/api/nested-mobile-api.ts","../src/main/api/compose-api.ts","../src/main/core/utils/datetime.ts","../src/main/core/http/mobile-client-config.ts","../src/main/index.ts"],"names":["storage","actions"],"mappings":"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","file":"index.js","sourcesContent":["import { API_ENDPOINTS, HttpClient } from '../../../core/http/client-context'\n\nexport const accountsClient = {\n listHubspots: () => HttpClient.get(API_ENDPOINTS.HUBSPOTS),\n listPortals: (hubId: number) => HttpClient.get(API_ENDPOINTS.PORTALS, { hubId })\n}\n","import { accountsClient } from '../features/accounts/client/accounts-client'\n\n/** Client account listing (hubspots / portals) for mobile and multi-account flows. */\nexport const accountsApi = {\n listHubspots: accountsClient.listHubspots,\n listPortals: accountsClient.listPortals\n}\n","import { generateApiUrl, API_ENDPOINTS, HttpClient } from '../../../core/http/client-context'\n\nexport const mobileNavigationClient = {\n getNavigation: () => HttpClient.get(generateApiUrl({ route: API_ENDPOINTS.MOBILE_NAVIGATION })),\n getAppConfig: () => HttpClient.get(generateApiUrl({ route: API_ENDPOINTS.MOBILE_APP_CONFIG })),\n putNavigation: (payload: unknown) => HttpClient.put(generateApiUrl({ route: API_ENDPOINTS.MOBILE_NAVIGATION }), payload),\n importFromWebMenu: (payload: unknown) => HttpClient.post(generateApiUrl({ route: API_ENDPOINTS.MOBILE_NAVIGATION_IMPORT_WEB_MENU }), payload)\n}\n","import { mobileNavigationClient } from '../features/mobile/client/mobile-navigation-client'\n\n/** Mobile-specific API surface (navigation config, etc.). */\nexport const mobileApi = {\n getNavigation: mobileNavigationClient.getNavigation,\n getAppConfig: mobileNavigationClient.getAppConfig,\n putNavigation: mobileNavigationClient.putNavigation,\n importFromWebMenu: mobileNavigationClient.importFromWebMenu\n}\n","import { authApi } from './nested-auth-api'\nimport { crmApi } from './nested-crm-api'\nimport { navigationApi } from './navigation-api'\nimport { accountsApi } from './nested-accounts-api'\nimport { mobileApi } from './nested-mobile-api'\n\n/** Public API — nested domains only (SDK 4.0). */\nexport const api = {\n auth: authApi,\n crm: crmApi,\n navigation: navigationApi,\n accounts: accountsApi,\n mobile: mobileApi\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","import type { SessionStorageAdapter } from '../storage/session-storage-adapter'\nimport { registerSessionStorageAdapter } from '../storage/session-storage-registry'\nimport { setClientType } from './client-type'\nimport { initializeHttpClient, type HttpClientConfig } from './http-client'\nimport { hydrateSessionRefreshState } from './token-store'\nimport { hydrateMfaPendingAccessToken } from '../auth/mfa-pending-token-storage'\nimport { storAccessToken } from './token-store'\nimport { hydrateUserStoreFromSession } from '../../state/crm/use-user'\n\nexport type MobileClientConfig = HttpClientConfig & {\n storage: SessionStorageAdapter\n}\n\n/**\n * Configure the SDK for native/mobile hosts: pluggable storage, client type `mobile`,\n * and `X-Client-Type: mobile` on all HTTP requests.\n */\nexport function initializeMobileClient({ storage, ...httpConfig }: MobileClientConfig): void {\n registerSessionStorageAdapter(storage)\n setClientType('mobile')\n hydrateSessionRefreshState()\n void hydrateMfaPendingAccessToken({\n lane: 'c',\n setAccessToken: (token, expiresIn) => {\n storAccessToken(token, expiresIn)\n }\n })\n hydrateUserStoreFromSession()\n initializeHttpClient({\n ...httpConfig,\n headers: {\n 'X-Client-Type': 'mobile',\n ...httpConfig.headers\n }\n })\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 { initializeMobileClient } from './core/http/mobile-client-config'\nexport type { MobileClientConfig } from './core/http/mobile-client-config'\nexport type { SessionStorageAdapter } from './core/storage/session-storage-adapter'\nexport { getClientType } from './core/http/client-type'\n\n/** Shared auth contract (client + admin consistency). */\nexport {\n AuthErrorCode,\n parseApiErrorPayload,\n getUnauthorizedPageCopy,\n resolveAuthErrorAction,\n isOptionalAuthFailureUrl,\n isSessionProbeUrl,\n persistAuthError,\n readPersistedAuthError,\n hasValidAccess,\n isFullyAuthenticated,\n isMfaPendingSession,\n hasAuthenticatedAccess,\n recoverMfaGateOnBoot,\n startVisibilityRefreshScheduler,\n stopVisibilityRefreshScheduler,\n resolveAuthRouteAction,\n storeMfaPendingAccessToken,\n readMfaPendingAccessToken,\n clearMfaPendingAccessToken,\n hydrateMfaPendingAccessToken,\n isMfaPendingAccessSession\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 MfaStorageLane,\n MfaPendingAccessToken,\n HydrateMfaPendingAccessTokenInput\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'\nexport {\n SessionRefreshDeferredError,\n SessionRefreshFailedError,\n isSessionRefreshDeferredError,\n isSessionRefreshFailedError\n} from './core/http/session-refresh-errors'\n\nexport {\n API_ERROR_DISPLAY_CONFIG,\n API_ERROR_CATEGORY_FALLBACK,\n WOODSPORTAL_API_ACTIVE_ERROR_CODES,\n buildErrorDescription,\n getApiErrorFromUnknown,\n resolveApiErrorDisplay,\n resolveApiContentState,\n isExpectedApiError\n} from './core/errors/index.js'\nexport type {\n ApiErrorVariant,\n ApiContentVariant,\n ApiErrorSeverity,\n ApiErrorDisplayConfig,\n ResolvedApiErrorDisplay,\n ResolvedApiContentState,\n ResolveApiErrorDisplayOptions\n} from './core/errors/index.js'\n\nexport { configureLogger } from './core/logging/logger'\nexport type { LogLevel, LogMeta, 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'\nexport {\n applyContractApiDate,\n getConfiguredContractApiDate,\n} from './core/utils/generateApiUrl'\n\nexport { WP_STORAGE_KEYS, WP_UI_THEME, wpClientIframeRefreshKey, wpClientIframeRefreshExpKey } from './core/utils/wp-storage-keys'\nexport {\n migrateLegacyStorageKeys,\n getClientAuthCookieNamesToClear,\n clearClientSessionStorageKeys,\n clearClientIframeRefreshLocalKeys,\n clearStaleIframeRefreshForOtherHubs\n} from './core/utils/storage-migration'\nexport { clearClientAuthCookies } from './core/utils/cookie'\nexport { clearClientSdkSession, resetSessionStores } from './core/http/session-teardown'\nexport { setSessionLifecycleListener } from './core/http/token-store'\nexport { signalSessionChanged, installCrossTabSessionListener, applyCrossTabSessionRevocation } from './core/http/cross-tab-session'\nexport { configureStorageKeys, getStorageKeys, resetStorageKeysForTests } from './core/utils/storage-keys'\n\nexport {\n HUBSPOT_DEALS_OBJECT_TYPE_ID,\n HUBSPOT_TICKETS_OBJECT_TYPE_ID,\n PIPELINE_REQUIRED_MANAGED_OBJECT_TYPE_IDS,\n PIPELINE_BOARD_OBJECT_TYPE_IDS,\n isPipelineBoardObjectTypeId\n} from './core/constants/hubspot-object-type-ids'\nexport { isPipelineBoardObjectType, supportsBoardView, shouldShowPipelineSelector } from './core/constants/pipeline-ui'\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/features/accounts/client/accounts-client.ts","../src/main/api/nested-accounts-api.ts","../src/main/features/mobile/client/mobile-navigation-client.ts","../src/main/api/nested-mobile-api.ts","../src/main/features/notifications/client/notification-preferences-client.ts","../src/main/features/notifications/api/preferences.ts","../src/main/api/nested-notifications-api.ts","../src/main/api/compose-api.ts","../src/main/core/utils/datetime.ts","../src/main/core/http/mobile-client-config.ts","../src/main/index.ts"],"names":["storage","actions"],"mappings":"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","file":"index.js","sourcesContent":["import { API_ENDPOINTS, HttpClient } from '../../../core/http/client-context'\n\nexport const accountsClient = {\n listHubspots: () => HttpClient.get(API_ENDPOINTS.HUBSPOTS),\n listPortals: (hubId: number) => HttpClient.get(API_ENDPOINTS.PORTALS, { hubId })\n}\n","import { accountsClient } from '../features/accounts/client/accounts-client'\n\n/** Client account listing (hubspots / portals) for mobile and multi-account flows. */\nexport const accountsApi = {\n listHubspots: accountsClient.listHubspots,\n listPortals: accountsClient.listPortals\n}\n","import { generateApiUrl, API_ENDPOINTS, HttpClient } from '../../../core/http/client-context'\n\nexport const mobileNavigationClient = {\n getNavigation: () => HttpClient.get(generateApiUrl({ route: API_ENDPOINTS.MOBILE_NAVIGATION })),\n getAppConfig: () => HttpClient.get(generateApiUrl({ route: API_ENDPOINTS.MOBILE_APP_CONFIG })),\n putNavigation: (payload: unknown) => HttpClient.put(generateApiUrl({ route: API_ENDPOINTS.MOBILE_NAVIGATION }), payload),\n importFromWebMenu: (payload: unknown) => HttpClient.post(generateApiUrl({ route: API_ENDPOINTS.MOBILE_NAVIGATION_IMPORT_WEB_MENU }), payload)\n}\n","import { mobileNavigationClient } from '../features/mobile/client/mobile-navigation-client'\n\n/** Mobile-specific API surface (navigation config, etc.). */\nexport const mobileApi = {\n getNavigation: mobileNavigationClient.getNavigation,\n getAppConfig: mobileNavigationClient.getAppConfig,\n putNavigation: mobileNavigationClient.putNavigation,\n importFromWebMenu: mobileNavigationClient.importFromWebMenu\n}\n","import { generateApiUrl, API_ENDPOINTS, HttpClient } from '../../../core/http/client-context'\nimport type { NotificationPreference } from '../../../core/types/notification'\n\nexport const notificationPreferencesClient = {\n getPreferences: () =>\n HttpClient.get<NotificationPreference>(generateApiUrl({ route: API_ENDPOINTS.NOTIFICATION_PREFERENCES })),\n updatePreferences: (payload: NotificationPreference) =>\n HttpClient.put<NotificationPreference>(\n generateApiUrl({ route: API_ENDPOINTS.NOTIFICATION_PREFERENCES }),\n payload\n )\n}\n","import { createMutation } from '../../../core/mutation/createMutation'\nimport type { MutationOptions } from '../../../core/types'\nimport type { NotificationPreference } from '../../../core/types/notification'\nimport { notificationPreferencesClient } from '../client/notification-preferences-client'\n\n/**\n * Load the signed-in portal user's email notification preferences.\n *\n * **API:** `GET /api/{hubId}/{portalId}/notification-preferences`\n * **Auth:** Bearer portal client JWT (`PROFILE_READ`).\n * **Defaults:** both flags `true` until the user saves.\n */\nexport function getPreferences(options?: MutationOptions<NotificationPreference, any>) {\n const { mutate, isLoading } = createMutation<void, NotificationPreference>(\n async () => (await notificationPreferencesClient.getPreferences()) as NotificationPreference,\n options\n )\n\n return { mutate, getPreferences: mutate, isLoading }\n}\n\n/**\n * Upsert email notification preferences for the signed-in portal user.\n *\n * **API:** `PUT /api/{hubId}/{portalId}/notification-preferences`\n * **Auth:** Bearer portal client JWT (`PROFILE_WRITE`).\n * **Body:** `{ emailProductAnnouncements, emailJobErrors }` (both required booleans).\n */\nexport function updatePreferences(options?: MutationOptions<NotificationPreference, any>) {\n const { mutate, isLoading } = createMutation<NotificationPreference, NotificationPreference>(\n async (payload?: NotificationPreference) =>\n (await notificationPreferencesClient.updatePreferences(payload!)) as NotificationPreference,\n options\n )\n\n return { mutate, updatePreferences: mutate, isLoading }\n}\n","import { getPreferences, updatePreferences } from '../features/notifications/api/preferences'\n\n/** Portal client notification preferences (email product announcements / job errors). */\nexport const notificationsApi = {\n getPreferences,\n updatePreferences\n}\n","import { authApi } from './nested-auth-api'\nimport { crmApi } from './nested-crm-api'\nimport { navigationApi } from './navigation-api'\nimport { accountsApi } from './nested-accounts-api'\nimport { mobileApi } from './nested-mobile-api'\nimport { notificationsApi } from './nested-notifications-api'\n\n/** Public API — nested domains only (SDK 4.0). */\nexport const api = {\n auth: authApi,\n crm: crmApi,\n navigation: navigationApi,\n accounts: accountsApi,\n mobile: mobileApi,\n notifications: notificationsApi\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","import type { SessionStorageAdapter } from '../storage/session-storage-adapter'\nimport { registerSessionStorageAdapter } from '../storage/session-storage-registry'\nimport { setClientType } from './client-type'\nimport { initializeHttpClient, type HttpClientConfig } from './http-client'\nimport { hydrateSessionRefreshState } from './token-store'\nimport { hydrateMfaPendingAccessToken } from '../auth/mfa-pending-token-storage'\nimport { storAccessToken } from './token-store'\nimport { hydrateUserStoreFromSession } from '../../state/crm/use-user'\n\nexport type MobileClientConfig = HttpClientConfig & {\n storage: SessionStorageAdapter\n}\n\n/**\n * Configure the SDK for native/mobile hosts: pluggable storage, client type `mobile`,\n * and `X-Client-Type: mobile` on all HTTP requests.\n */\nexport function initializeMobileClient({ storage, ...httpConfig }: MobileClientConfig): void {\n registerSessionStorageAdapter(storage)\n setClientType('mobile')\n hydrateSessionRefreshState()\n void hydrateMfaPendingAccessToken({\n lane: 'c',\n setAccessToken: (token, expiresIn) => {\n storAccessToken(token, expiresIn)\n }\n })\n hydrateUserStoreFromSession()\n initializeHttpClient({\n ...httpConfig,\n headers: {\n 'X-Client-Type': 'mobile',\n ...httpConfig.headers\n }\n })\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 { initializeMobileClient } from './core/http/mobile-client-config'\nexport type { MobileClientConfig } from './core/http/mobile-client-config'\nexport type { SessionStorageAdapter } from './core/storage/session-storage-adapter'\nexport { getClientType } from './core/http/client-type'\n\n/** Shared auth contract (client + admin consistency). */\nexport {\n AuthErrorCode,\n parseApiErrorPayload,\n getUnauthorizedPageCopy,\n resolveAuthErrorAction,\n isOptionalAuthFailureUrl,\n isSessionProbeUrl,\n persistAuthError,\n readPersistedAuthError,\n hasValidAccess,\n isFullyAuthenticated,\n isMfaPendingSession,\n hasAuthenticatedAccess,\n recoverMfaGateOnBoot,\n startVisibilityRefreshScheduler,\n stopVisibilityRefreshScheduler,\n resolveAuthRouteAction,\n storeMfaPendingAccessToken,\n readMfaPendingAccessToken,\n clearMfaPendingAccessToken,\n hydrateMfaPendingAccessToken,\n isMfaPendingAccessSession\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 MfaStorageLane,\n MfaPendingAccessToken,\n HydrateMfaPendingAccessTokenInput\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'\nexport {\n SessionRefreshDeferredError,\n SessionRefreshFailedError,\n isSessionRefreshDeferredError,\n isSessionRefreshFailedError\n} from './core/http/session-refresh-errors'\n\nexport {\n API_ERROR_DISPLAY_CONFIG,\n API_ERROR_CATEGORY_FALLBACK,\n WOODSPORTAL_API_ACTIVE_ERROR_CODES,\n buildErrorDescription,\n getApiErrorFromUnknown,\n resolveApiErrorDisplay,\n resolveApiContentState,\n isExpectedApiError\n} from './core/errors/index.js'\nexport type {\n ApiErrorVariant,\n ApiContentVariant,\n ApiErrorSeverity,\n ApiErrorDisplayConfig,\n ResolvedApiErrorDisplay,\n ResolvedApiContentState,\n ResolveApiErrorDisplayOptions\n} from './core/errors/index.js'\n\nexport { configureLogger } from './core/logging/logger'\nexport type { LogLevel, LogMeta, 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'\nexport {\n applyContractApiDate,\n getConfiguredContractApiDate,\n} from './core/utils/generateApiUrl'\n\nexport { WP_STORAGE_KEYS, WP_UI_THEME, wpClientIframeRefreshKey, wpClientIframeRefreshExpKey } from './core/utils/wp-storage-keys'\nexport {\n migrateLegacyStorageKeys,\n getClientAuthCookieNamesToClear,\n clearClientSessionStorageKeys,\n clearClientIframeRefreshLocalKeys,\n clearStaleIframeRefreshForOtherHubs\n} from './core/utils/storage-migration'\nexport { clearClientAuthCookies } from './core/utils/cookie'\nexport { clearClientSdkSession, resetSessionStores } from './core/http/session-teardown'\nexport { setSessionLifecycleListener } from './core/http/token-store'\nexport { signalSessionChanged, installCrossTabSessionListener, applyCrossTabSessionRevocation } from './core/http/cross-tab-session'\nexport { configureStorageKeys, getStorageKeys, resetStorageKeysForTests } from './core/utils/storage-keys'\n\nexport {\n HUBSPOT_DEALS_OBJECT_TYPE_ID,\n HUBSPOT_TICKETS_OBJECT_TYPE_ID,\n PIPELINE_REQUIRED_MANAGED_OBJECT_TYPE_IDS,\n PIPELINE_BOARD_OBJECT_TYPE_IDS,\n isPipelineBoardObjectTypeId\n} from './core/constants/hubspot-object-type-ids'\nexport { isPipelineBoardObjectType, supportsBoardView, shouldShowPipelineSelector } from './core/constants/pipeline-ui'\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.1.0-dev.3",
3
+ "version": "4.1.0-dev.4",
4
4
  "packageManager": "pnpm@10.12.1",
5
5
  "description": "Official TypeScript/JavaScript SDK for WoodsPortal API - Authentication, user management, pipelines, and more",
6
6
  "type": "module",