@phygitallabs/tapquest-core 6.7.12 → 6.7.13
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/index.cjs +2 -2
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.mts +5 -26
- package/dist/index.d.ts +5 -26
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/src/modules/data-tracking/{GtagConsentSync.tsx → DataTrackingConsentSync.tsx} +14 -43
- package/src/modules/data-tracking/hooks/index.ts +82 -11
- package/src/modules/data-tracking/index.ts +1 -2
- package/src/providers/ServicesProvider.tsx +2 -4
- package/src/modules/data-tracking/GtagGtmScriptToggle.tsx +0 -73
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../index.ts","../src/index.ts","../src/modules/achievement/helpers/useClearAchievementProgressCache.tsx","../src/modules/achievement/helpers/index.ts","../src/modules/achievement/hooks/index.ts","../src/modules/achievement/types/index.ts","../src/modules/auth/constants/index.ts","../src/modules/auth/helpers/index.ts","../src/modules/session-replay/utils/index.ts","../src/modules/session-replay/providers/SessionReplayProvider.tsx","../src/modules/session-replay/hooks/useSessionReplay.ts","../src/modules/data-tracking/GtagConsentSync.tsx","../src/modules/data-tracking/GtagGtmScriptToggle.tsx","../src/modules/data-tracking/hooks/index.ts","../src/modules/notification/index.ts","../src/constants/service.ts","../src/modules/notification/providers/index.tsx","../src/modules/achievement-tracking/providers/AchievementTrackingProvider.tsx","../src/modules/reward/types/enums.ts","../src/modules/auth/store/authStore.ts","../src/modules/auth/utils/user.ts","../src/modules/auth/hooks/useTokenRefresher.ts","../src/modules/auth/providers/AuthProvider.tsx","../src/modules/auth/hooks/useGoogleLogin.ts","../src/modules/scan-chip/hooks/index.tsx","../src/modules/campaign/types/campaign.ts","../src/modules/location/utils/locationHelpers.ts","../src/providers/ServicesProvider.tsx","../src/providers/TapquestCoreProvider.tsx","../src/modules/achivementWithReward/hooks/achivementPlusRewardModel.ts","../src/types/common.ts"],"names":["index_exports","__export","ALLOWED_ORIGINS","AchievementRuleActionType","AchievementServiceProvider","AchievementTrackingProvider","AchievementType","AuthProvider","CALLBACK_URL","CampaignState","CmentityRewardType","CookieConsentBanner","Environment","GtagConsentSync","GtagGtmScriptToggle","GtagGtmScriptToggleFromConsent","NotificationProvider","PhygitalConsentProvider","RewardClaimStatus","SessionReplayProvider","TapquestCoreProvider","TaskType","TrackerContext","UserSourceType","accessTokenKey","checkDeviceUid","chipAuthTokenKey","cn","convertSnakeToCamel","decodeJWTToken","detectGtagGtmInDom","deviceUIDKey","fileToBase64","filterLocationsByProperty","generateDeviceId","getAccessToken","getActionsFromAchievementRule","getChipAuthToken","getDeviceUid","getLocationIdsFromAchievementRule","getRefreshToken","getRetryAttemptsRefreshToken","getSessionUserId","getSurveyIdsFromAchievementRule","getUserInfo","httpMaxRetries","isAchievementCompleted","isBrowser","locationQueryKeys","memoriesKey","parse","refreshTokenKey","removeAccessToken","removeChipAuthToken","removeDeviceUid","removeRefreshToken","removeUserInfo","resetMemoriesQuery","retryAttemptsRefreshToken","setAccessToken","setChipAuthToken","setDeviceUid","setRefreshToken","setRetryAttemptsRefreshToken","setUserInfo","sortLocationsByIndex","transformProtoUserData","useAchievementProgress","useAchievementTracking","achivementPlusRewardModel_default","useAddFrame","useAuth","useAuthStore","useOneCampaign","useCancelUserRewardsRequest","useChipScanStory","useClaimUserReward","useClearAchievementProgressCache","useClearUserRewardCache","useCreateCertificate","useCreateCertificateAnonymous","useCreateCertificateWithMask","useCreateClickButtonActionLog","useCreateMemory","useCreateModelGroupReward","useCreateRewardModel","useDataTracking","useDefaultServiceGetPollStats","useDefaultServicePostPoll","useDeleteRewardModel","useGenerateFansipanCertificate","useGenerateTemplateCertificate","useGenerateThaocamvienCertificate","useGetRewardModel","useGetUserRewards","useGoogleLogin","useInfiniteMemories","useListRewardModels","useOneLocation","useUserCampaignsCompletedLocation","useManyLocations","useManyAchievementProgress","useManyAchievementProgressCore","useManyAchievements","useManyAchievementsByLocation","useManyAchievementsRewardModels","useManyChildrenAchievements","useManyMemory","useManyUserActionLocations","useManyUserRewards","useMyProfile","useNotificationRewardHandler","useNotificationStore","useOneAchievement","useOneMemory","useOneUserCampaign","usePGLCoreService","usePageVisibility","usePhygitalConsent","useScanChip","useSendEmail","useSessionReplay","useSyncCheckin","useTCVNotificationRewardHandler","useTokenRefresher","useUpdateMyProfile","useUpdateRewardModel","useUploadMedia","useUserAchievementAction","useUserCampaignAction","useV1ListRewards","useWebSocket","userInfoKey","wrapTextWithFont","src_exports","queryClient","useQueryClient","useCallback","options","refetchActive","refetchInactive","query","queryKey","achievement","locationIds","ruleList","rule","filterList","filter","surveyIds","actions","_a","obj","item","converted","key","camelKey","_","letter","params","isLoggedIn","queryParams","data","useManyAchievementProgressByDeviceCore","generateDeviceFingerprint","error","uuidv4","timestamp","fingerprintRaw","hashBuffer","b","deviceId","deviceUID","value","userInfo","userData","userId","createContext","defaultGetUserId","uuidV4","newTracker","config","_b","_c","_d","_e","_f","_g","OpenReplay","getUserId","trackerConfig","tracker","reducer","state","action","debug","children","dispatch","useReducer","initTracker","startTracking","setUserId","setMetadata","metadata","jsx","context","useContext","GTAG_CONSENT_DENIED","GTAG_CONSENT_GRANTED_ADS","pushConsentUpdate","w","consent","isAnalyticsAllowed","isAdvertisingAllowed","useEffect","ph","posthog","SCRIPT_SELECTORS","GTM_SCRIPT_SELECTOR","GTAG_SCRIPT_SELECTOR","gtagScripts","gtmScripts","enabled","el","GTAG_ANALYTICS_GRANTED","GTAG_ADS_GRANTED","pushEventToDataLayer","event","pushEventToGA","eventName","eventData","pushEventToPosthog","useTools","notification_exports","__reExport","notification_api_star","serviceApiUrl","service_default","autoConnect","environment","user","onWebSocketOpen","onWebSocketClose","onWebSocketMessage","webSocketUrl","NotificationProviderApi","AchievementTrackingContext","achievements","trackEvent","trackedNotificationIds","useRef","challenges","quests","useMemo","challengesList","questsList","unsubscribe","notifications","latestNotification","notificationId","challengeType","trackChallengeStart","actionType","matchingAchievements","trackQuestStart","quest","isReady","contextValue","initialState","create","devtools","persist","subscribeWithSelector","immer","set","get","isLoading","newCleanupFunctions","callbacks","email","password","eventCallbacks","response","authService","tokenStorage","errorMessage","currentDomain","cleanupFunctions","refreshToken","cleanupError","verifyCodeService","refreshTokenResponse","isSignedIn","isInitialized","token","wasSignedIn","createJSONStorage","accessToken","tokenDecoded","jwtDecode","signOut","handleRefreshToken","useQuery","AuthStateManager","updateHeaders","useAuthenticationHeaders","updateHeadersPGL","coreApi","updateHeadersAchievement","useAchievementService","updateHeadersReward","useRewardService","updateHeadersGenerateCertificate","useGenerateCertificateService","previousIsSignedIn","unsub","userProfile","userService","transformedUserData","unsubTokenChange","TokenRefresher","baseURL","jsxs","AuthenticationProvider","onSuccess","onError","onPopupBlocked","onPopupClosed","signInWithGoogle","setIsSignedIn","setIsLoading","googleLink","setGoogleLink","useState","popupRef","gotDataRef","timerRef","errorRef","handleTokenRefresh","refresh","newToken","cleanup","handleMessage","allowedOrigins","signIn","left","top","id","onScanChipError","header","isError","isSuccess","locations","a","propertyName","location","ServicesProvider","apiConfig","version","commonServiceConfig","setCommonServiceConfig","deviceUid","originalRequest","retryAttempts","getFromLS","setToLS","result","axios","refreshError","PGLCoreServiceProvider","RewardServiceProvider","GenerateCertificateServiceProvider","Fragment","sessionReplayConfig","projectKey","buildMappedAchievements","groupRewardData","rewardModels","achievementIndex","parentReward","subAchievements","subId","subIndex","reward","useAchivementPlusRewardModel","campaignId","isLoadingAchievements","groupRewardIds","fetchGroupRewardModels","groupRewardModelsData","isPendingGroupRewardModels"],"mappings":"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","file":"index.cjs","sourcesContent":["export * from \"./src\";","// Export all modules\nexport * from \"./modules/achievement\";\nexport * from \"./modules/achievement-tracking\";\nexport * from \"./modules/reward\";\nexport * from \"./modules/notification\";\nexport * from \"./modules/memory\";\n\nexport * from \"./modules/auth\";\nexport * from \"./modules/user-profile\";\n\nexport * from \"./modules/scan-chip\";\nexport * from \"./modules/campaign\";\n\nexport * from \"./modules/location\";\n\nexport * from \"./modules/generate-certificate\";\n\nexport * from \"./modules/data-tracking\";\n\nexport * from \"./modules/session-replay\";\n\nexport * from \"./providers\";\n\nexport * from \"./modules/achivementWithReward\";\n\nexport * from \"./modules/send-email\";\n\nexport * from \"./modules/session-replay\";\n\nexport * from \"./helper\";\n\nexport * from \"./modules/session-replay\";\n\nexport * from \"./modules/action-logs\";\n\nexport * from \"./modules/consent\";\n\n// Export types\nexport * from \"./types/common\";\n","import { useQueryClient } from \"@tanstack/react-query\";\nimport { useCallback } from \"react\";\n\nexport function useClearAchievementProgressCache() {\n const queryClient = useQueryClient();\n\n const clearCache = useCallback(\n (options?: { refetchActive?: boolean; refetchInactive?: boolean }) => {\n const { refetchActive = true, refetchInactive = false } = options || {};\n\n // Clear all achievement progress related queries using predicate\n // Query keys from different packages:\n // 1. @phygitallabs/achievement (logged in): ['users', 'userAchievements', 'achievementProgressMany', ...]\n // 2. @phygitallabs/api-core (device UID): ['userAchievements', 'achievementProgress', deviceId, ...]\n // 3. @phygitallabs/achievement (device UID alt): ['deviceUidAchievementProgressMany', ...]\n\n queryClient.invalidateQueries({\n predicate: (query) => {\n const queryKey = query.queryKey as string[];\n return (\n queryKey.includes(\"achievementProgressMany\") || // For logged in users\n queryKey.includes(\"achievementProgress\") || // For device UID (api-core)\n queryKey.includes(\"deviceUidAchievementProgressMany\") // For device UID (achievement pkg)\n );\n },\n refetchType: refetchActive ? (refetchInactive ? \"all\" : \"active\") : \"none\",\n });\n\n console.log(\"🔄 Achievement progress cache cleared\");\n },\n [queryClient]\n );\n return {\n clearCache,\n };\n}\n","import { Achievement, UserAchievementProgress } from \"../types\";\n\nconst getLocationIdsFromAchievementRule = (achievement: Achievement) => {\n if (!achievement.rule) return [];\n const locationIds: string[] = [];\n Object.values(achievement.rule).forEach((ruleList) => {\n if (!ruleList.rules) return;\n ruleList.rules.forEach((rule) => {\n if (!rule.filter) return;\n Object.values(rule.filter).forEach((filterList) => {\n if (!filterList.filters) return;\n filterList.filters.forEach((filter) => {\n if (filter.label === \"location_id\" && filter.value) {\n if (Array.isArray(filter.value)) {\n locationIds.push(...filter.value);\n } else {\n locationIds.push(filter.value);\n }\n }\n });\n });\n });\n });\n return Array.from(new Set(locationIds)) as string[];\n};\n\nconst getSurveyIdsFromAchievementRule = (achievement: Achievement) => {\n if (!achievement.rule) return [];\n const surveyIds: string[] = [];\n Object.values(achievement.rule).forEach((ruleList) => {\n if (!ruleList.rules) return;\n ruleList.rules.forEach((rule) => {\n if (!rule.filter) return;\n Object.values(rule.filter).forEach((filterList) => {\n if (!filterList.filters) return;\n filterList.filters.forEach((filter) => {\n if (filter.label === \"survey_id\" && filter.value) {\n if (Array.isArray(filter.value)) {\n surveyIds.push(...filter.value);\n } else {\n surveyIds.push(filter.value);\n }\n }\n });\n });\n });\n });\n return Array.from(new Set(surveyIds)) as string[];\n};\n\nconst getActionsFromAchievementRule = (achievement: Achievement) => {\n if (!achievement?.rule) return [];\n const actions: string[] = [];\n Object.values(achievement?.rule || {}).forEach((ruleList) => {\n if (!ruleList?.rules) return;\n ruleList?.rules?.forEach((rule) => {\n if (rule?.action) {\n actions.push(rule?.action);\n }\n });\n });\n return Array.from(new Set(actions)) as string[];\n};\n\nconst isAchievementCompleted = (achievement: UserAchievementProgress) => {\n return achievement.isCompleted || achievement.overallPercentage === 100;\n};\n\ntype SnakeToCamelCase<S extends string> = S extends `${infer T}_${infer U}`\n ? `${T}${Capitalize<SnakeToCamelCase<U>>}`\n : S;\n\ntype ConvertSnakeToCamel<T> = T extends (infer U)[]\n ? ConvertSnakeToCamel<U>[]\n : T extends Record<string, unknown>\n ? {\n [K in keyof T as K extends string ? SnakeToCamelCase<K> : K]: ConvertSnakeToCamel<T[K]>;\n }\n : T;\n\n/**\n * Converts snake_case keys to camelCase keys in an object or array of objects\n */\nexport function convertSnakeToCamel<T>(obj: T): ConvertSnakeToCamel<T> {\n if (obj === null || obj === undefined) {\n return obj as ConvertSnakeToCamel<T>;\n }\n\n if (Array.isArray(obj)) {\n return obj.map((item) => convertSnakeToCamel(item)) as ConvertSnakeToCamel<T>;\n }\n\n if (typeof obj === \"object\" && obj.constructor === Object) {\n const converted: Record<string, unknown> = {};\n\n for (const key in obj) {\n if (obj.hasOwnProperty(key)) {\n const camelKey = key.replace(/_([a-z])/g, (_, letter) => letter.toUpperCase());\n converted[camelKey] = convertSnakeToCamel((obj as Record<string, unknown>)[key]);\n }\n }\n\n return converted as ConvertSnakeToCamel<T>;\n }\n\n return obj as ConvertSnakeToCamel<T>;\n}\n\nexport {\n getLocationIdsFromAchievementRule,\n getActionsFromAchievementRule,\n getSurveyIdsFromAchievementRule,\n isAchievementCompleted,\n};\n\nexport { useClearAchievementProgressCache } from \"./useClearAchievementProgressCache\";\n","import { GetManyAchievementProgressParams, GetManyDeviceUidAchievementProgressParams, GetManyUserOrDeviceAchievementProgressParams } from \"@phygitallabs/achievement\";\n\nimport {\n GetManyAchievementProgressByDeviceParams,\n} from \"@phygitallabs/api-core\";\n\nimport { useManyAchievementProgressByDevice as useManyAchievementProgressByDeviceCore } from \"@phygitallabs/api-core\";\n// Core react query hooks\nimport {\n useManyAchievementProgress as useManyAchievementProgressCore,\n useAchievementProgress,\n useManyAchievements,\n useUserAchievementAction,\n useOneAchievement,\n useManyAchievementsRewardModels,\n useManyAchievementsByLocation,\n useManyChildrenAchievements\n} from \"@phygitallabs/achievement\";\n\nimport { isAchievementCompleted, convertSnakeToCamel } from \"../helpers\";\n\nexport {\n useAchievementProgress,\n useManyAchievements,\n useUserAchievementAction,\n useManyChildrenAchievements,\n useManyAchievementProgressCore,\n useOneAchievement,\n useManyAchievementsRewardModels,\n useManyAchievementsByLocation\n}\n\n// Customize react query hooks\n\n// Get achievement progress list by userid or deviceuid base on login status\nexport const useManyAchievementProgress = (\n params: GetManyUserOrDeviceAchievementProgressParams,\n options?: any\n) => {\n\n const isLoggedIn = !!params.userId;\n\n const queryParams = isLoggedIn\n ? {\n achievementIds: params.achievementIds,\n userId: params.userId!,\n applicationId: params.applicationId,\n } as GetManyAchievementProgressParams\n : {\n achievement_ids: params.achievementIds,\n device_uid: params.deviceUid!,\n applicationId: params.applicationId,\n } as GetManyDeviceUidAchievementProgressParams;\n\n if (isLoggedIn) {\n return useManyAchievementProgressCore(queryParams as GetManyAchievementProgressParams,\n {\n ...options,\n select: (data) => data.map((item) => ({\n ...item,\n isCompleted: isAchievementCompleted(item),\n })),\n }\n );\n }\n\n return useManyAchievementProgressByDeviceCore(\n queryParams as GetManyAchievementProgressByDeviceParams, {\n ...options,\n select: (data) => {\n const camelCaseData = convertSnakeToCamel(data);\n return camelCaseData.map((item) => ({\n ...item,\n isCompleted: isAchievementCompleted(item),\n }));\n },\n });\n};\n\n","export {\n AchievementRuleActionType,\n AchievementServiceProvider,\n} from \"@phygitallabs/achievement\";\n\nimport type { Achievement, GetAchievementProgressResponse, UserAchievementProgress } from \"@phygitallabs/achievement\";\n\nexport {\n Achievement,\n GetAchievementProgressResponse,\n UserAchievementProgress,\n}\n\n// Combined types for hooks\nexport interface AchievementWithProgress {\n achievement: Achievement;\n progress: UserAchievementProgress | null;\n hasProgressError?: boolean;\n hasAchievementError?: boolean;\n}\n\nexport interface UseManyAchievementWithProgressParams {\n userId?: string;\n deviceUid?: string;\n applicationId?: string;\n achievementIds?: string[];\n}\n\nexport interface UseManyAchievementWithProgressReturn {\n data: AchievementWithProgress[];\n isLoading: boolean;\n isSuccess: boolean;\n achievementsError: Error | null;\n progressError: Error | null;\n refetchAchievements: () => void;\n refetchProgress: () => void;\n refetchAll: () => void;\n}\n\nexport enum AchievementType {\n DEFAULT = \"default\",\n MULTIPLE_CHECK_INS = \"multiple_check_ins\",\n RANDOM_CHECK_INS = \"random_check_ins\",\n GROUP_MISSION = \"group_mission\",\n SURVEY = \"survey\",\n}\n","export const userInfoKey = \"phygital-user-info\";\nexport const accessTokenKey = \"accessToken\";\nexport const refreshTokenKey = \"refreshToken\";\nexport const httpMaxRetries = 3;\nexport const retryAttemptsRefreshToken = \"retryAttemptsRefreshToken\";\n\nexport const deviceUIDKey = \"Device-UID\";\nexport const chipAuthTokenKey = \"chip-auth-token\";\n\nexport const CALLBACK_URL = \"https://s3-sgn10.fptcloud.com/nomion-assets/platform/callback.html\";\n\nexport const ALLOWED_ORIGINS = [\n \"https://s3-sgn10.fptcloud.com\",\n \"https://accounts.google.com/\",\n];","import {\n deviceUIDKey,\n chipAuthTokenKey,\n retryAttemptsRefreshToken,\n accessTokenKey,\n refreshTokenKey,\n userInfoKey,\n} from \"../constants\";\n\nimport { v4 as uuidv4 } from \"uuid\";\n\nexport const generateDeviceId = async (): Promise<string> => {\n try {\n const deviceFingerprint = await generateDeviceFingerprint();\n return deviceFingerprint;\n } catch (error) {\n console.error(\"Error generating device fingerprint:\", error);\n return uuidv4();\n }\n};\n\nconst generateDeviceFingerprint = async (): Promise<string> => {\n const timestamp = new Date().toISOString(); // UTC timestamp\n\n const fingerprintRaw = [\n navigator.userAgent,\n navigator.language,\n screen.width,\n screen.height,\n screen.colorDepth,\n Intl.DateTimeFormat().resolvedOptions().timeZone,\n navigator.platform,\n navigator.hardwareConcurrency,\n timestamp, // Include timestamp\n ].join(\"::\");\n\n const encoder = new TextEncoder();\n const data = encoder.encode(fingerprintRaw);\n const hashBuffer = await crypto.subtle.digest(\"SHA-256\", data);\n const hashArray = Array.from(new Uint8Array(hashBuffer));\n const fingerprint = hashArray\n .map((b) => b.toString(16).padStart(2, \"0\"))\n .join(\"\");\n return fingerprint;\n};\n\nexport default generateDeviceFingerprint;\n\n\nexport const getDeviceUid = () => {\n if (typeof window === \"undefined\") return null;\n return localStorage.getItem(deviceUIDKey);\n};\n\nexport const setDeviceUid = (deviceId: string) => {\n if (typeof window === \"undefined\") return;\n localStorage.setItem(deviceUIDKey, deviceId);\n};\n\nexport const removeDeviceUid = () => {\n if (typeof window === \"undefined\") return;\n localStorage.removeItem(deviceUIDKey);\n};\n\nexport const checkDeviceUid = async (): Promise<string> => {\n // if (typeof window === \"undefined\") return null;\n\n let deviceUID = getDeviceUid();\n\n if (!deviceUID) {\n deviceUID = await generateDeviceId();\n setDeviceUid(deviceUID);\n }\n\n return deviceUID;\n};\n\n// CHIP AUTH TOKEN\nexport const getChipAuthToken = () => {\n if (typeof window === \"undefined\") return null;\n return localStorage.getItem(chipAuthTokenKey);\n};\n\nexport const setChipAuthToken = (value: string) => {\n if (typeof window === \"undefined\") return;\n localStorage.setItem(chipAuthTokenKey, value);\n};\n\nexport const removeChipAuthToken = () => {\n if (typeof window === \"undefined\") return;\n localStorage.removeItem(chipAuthTokenKey);\n};\n\n// RETRY ATTEMPTS\nexport const getRetryAttemptsRefreshToken = () => {\n if (typeof window === \"undefined\") return null;\n return localStorage.getItem(retryAttemptsRefreshToken);\n};\n\nexport const setRetryAttemptsRefreshToken = (value: string) => {\n if (typeof window === \"undefined\") return;\n localStorage.setItem(retryAttemptsRefreshToken, value);\n};\n\n// ACCESS TOKEN\nexport const getAccessToken = () => {\n if (typeof window === \"undefined\") return null;\n return localStorage.getItem(accessTokenKey);\n};\n\nexport const setAccessToken = (value: string) => {\n if (typeof window === \"undefined\") return;\n localStorage.setItem(accessTokenKey, value);\n};\n\nexport const removeAccessToken = () => {\n if (typeof window === \"undefined\") return;\n localStorage.removeItem(accessTokenKey);\n};\n\n// REFRESH TOKEN\nexport const getRefreshToken = () => {\n if (typeof window === \"undefined\") return null;\n return localStorage.getItem(refreshTokenKey);\n};\n\nexport const setRefreshToken = (value: string) => {\n if (typeof window === \"undefined\") return;\n localStorage.setItem(refreshTokenKey, value);\n};\n\nexport const removeRefreshToken = () => {\n if (typeof window === \"undefined\") return;\n localStorage.removeItem(refreshTokenKey);\n};\n\n// USER INFO\nexport const getUserInfo = () => {\n if (typeof window === \"undefined\") return null;\n const userInfo = localStorage.getItem(userInfoKey);\n if (!userInfo) return null;\n try {\n return JSON.parse(userInfo);\n } catch (error) {\n console.error(\"Failed to parse stored user data:\", error);\n return null;\n }\n};\n\nexport const setUserInfo = (userData: any) => {\n if (typeof window === \"undefined\") return;\n localStorage.setItem(userInfoKey, JSON.stringify(userData));\n};\n\nexport const removeUserInfo = () => {\n if (typeof window === \"undefined\") return;\n localStorage.removeItem(userInfoKey);\n};","import { getDeviceUid } from \"../../auth/helpers\";\n\nexport const getSessionUserId = (userId?: string): string | null => {\n if (userId) {\n return userId;\n }\n return getDeviceUid();\n};\n\nexport const isBrowser = (): boolean => {\n return typeof window !== \"undefined\";\n};\n","import React, { createContext, useReducer } from \"react\";\nimport { v4 as uuidV4 } from \"uuid\";\n\nimport {\n SessionReplayProviderProps,\n TrackerState,\n TrackerAction,\n TrackerContextValue,\n OpenReplayConfig,\n} from \"../types\";\n\nimport {\n isBrowser\n} from \"../utils\";\n\nexport const TrackerContext = createContext<TrackerContextValue | null>(null);\n\nfunction defaultGetUserId(): string {\n return uuidV4();\n}\n\nasync function newTracker(config: OpenReplayConfig) {\n try {\n // Dynamic import for SSR compatibility\n const OpenReplay = (await import(\"@openreplay/tracker\")).default;\n\n // Get user ID function (custom or default UUID generator)\n const getUserId =\n config?.userIdEnabled && config?.getUserId\n ? config.getUserId\n : defaultGetUserId;\n\n // Build tracker configuration\n const trackerConfig: any = {\n projectKey:\n config?.projectKey || process.env.NEXT_PUBLIC_OPENREPLAY_PROJECT_KEY,\n ingestPoint: config?.ingestPoint,\n // Capture options\n captureExceptions: config.captureExceptions ?? true,\n capturePerformance: config.capturePerformance ?? true,\n // Network tracking\n network: config.network || {\n capturePayload: true,\n sanitizer: (data: any) => data,\n },\n // Console tracking\n console: config.console || {\n levels: [\"error\", \"warn\", \"log\"],\n },\n // Privacy settings\n obscureTextEmails: config.obscureTextEmails ?? true,\n obscureTextNumbers: config.obscureTextNumbers ?? false,\n obscureInputEmails: config.obscureInputEmails ?? true,\n // Development mode\n __DISABLE_SECURE_MODE:\n config.__DISABLE_SECURE_MODE ??\n (typeof process !== \"undefined\" && process.env?.NODE_ENV === \"development\"),\n };\n\n // Initialize tracker\n const tracker = new OpenReplay(trackerConfig);\n\n // Set user ID if enabled\n if (config?.userIdEnabled) {\n const userId = getUserId();\n tracker.setUserID(userId);\n console.log(\"User ID set:\", userId);\n }\n\n console.log(\"OpenReplay tracker initialized\");\n console.log(\"Project Key:\", trackerConfig.projectKey);\n console.log(\"Ingest Point:\", trackerConfig.ingestPoint);\n\n return tracker;\n } catch (error: any) {\n console.error(\"Failed to create tracker:\", error);\n throw error;\n }\n}\n\nfunction reducer(state: TrackerState, action: TrackerAction): TrackerState {\n const { debug = false } = state.config;\n\n switch (action.type) {\n case \"init\":\n // Only initialize if tracker doesn't exist and we're in browser\n if (!state.tracker && isBrowser()) {\n if (!state.config.projectKey && !process.env.NEXT_PUBLIC_OPENREPLAY_PROJECT_KEY) {\n console.warn(\n debug,\n \"Project key not found. Skipping session replay initialization.\"\n );\n return state;\n }\n\n // Return state with tracker promise\n // The tracker will be created asynchronously\n return {\n ...state,\n tracker: newTracker(state.config),\n };\n }\n return state;\n\n case \"start\":\n // Start tracking if tracker exists\n if (state.tracker) {\n Promise.resolve(state.tracker)\n .then((tracker) => {\n tracker.start();\n console.log(debug, \"Session replay tracker started\");\n })\n .catch((error) => {\n console.error(\"Failed to start tracker:\", error);\n });\n } else {\n console.warn(debug, \"Tracker not initialized. Call initTracker() first.\");\n }\n return state;\n\n case \"setUserId\":\n // Set or update user ID\n if (state.tracker) {\n Promise.resolve(state.tracker)\n .then((tracker) => {\n tracker.setUserID(action.payload);\n console.log(debug, \"User ID updated:\", action.payload);\n })\n .catch((error) => {\n console.error(\"Failed to set user ID:\", error);\n });\n } else {\n console.warn(debug, \"Tracker not initialized. Call initTracker() first.\");\n }\n return state;\n\n // Set metadata\n case \"setMetadata\":\n if (state.tracker) {\n Promise.resolve(state.tracker)\n .then((tracker) => {\n Object.entries(action.payload || {})?.forEach(([key, value]) => {\n tracker.setMetadata(key, value);\n });\n\n console.log(debug, \"Metadata updated:\", action.payload.metadata);\n })\n .catch((error) => {\n console.error(\"Failed to set metadata:\", error);\n });\n } else {\n console.warn(debug, \"Tracker not initialized. Call initTracker() first.\");\n }\n return state;\n\n default:\n return state;\n }\n}\n\nexport const SessionReplayProvider: React.FC<SessionReplayProviderProps> = ({\n children,\n config = {},\n}) => {\n const [, dispatch] = useReducer(reducer, {\n tracker: null,\n config,\n });\n\n const initTracker = () => dispatch({ type: \"init\" })\n const startTracking = () => dispatch({ type: \"start\" })\n const setUserId = (userId: string) => dispatch({ type: \"setUserId\", payload: userId })\n const setMetadata = (metadata: Record<string, any>) => dispatch({ type: \"setMetadata\", payload: metadata })\n\n // // init and start tracker\n // useEffect(() => {\n // initTracker();\n // startTracking();\n // }, []);\n\n return <TrackerContext.Provider value={{\n initTracker,\n startTracking,\n setUserId,\n setMetadata\n }}>{children}</TrackerContext.Provider>;\n};\n\nexport default SessionReplayProvider;\n","import { useContext } from \"react\";\nimport { TrackerContext } from \"../providers/SessionReplayProvider\";\nimport { TrackerContextValue } from \"../types\";\n\nexport function useSessionReplay(): TrackerContextValue {\n const context = useContext(TrackerContext);\n\n if (!context) {\n throw new Error(\n \"useSessionReplay must be used within a SessionReplayProvider. \" +\n \"Make sure your component is wrapped with <SessionReplayProvider>.\"\n );\n }\n\n return context;\n}\n","\"use client\";\n\nimport { usePhygitalConsent } from \"@phygitallabs/phygital-consent\";\nimport posthog from \"posthog-js\";\nimport { useEffect } from \"react\";\nimport { useSessionReplay } from \"../session-replay\";\n\ntype GtagConsent = (\n command: \"consent\",\n action: \"default\" | \"update\",\n params: Record<string, string>\n) => void;\n\n/** Consent Mode v2: block analytics and ad tags until user accepts. */\nconst GTAG_CONSENT_DENIED = {\n analytics_storage: \"denied\",\n ad_storage: \"denied\",\n ad_user_data: \"denied\",\n ad_personalization: \"denied\",\n} as const;\n\n// const GTAG_CONSENT_GRANTED_ANALYTICS = {\n// analytics_storage: \"granted\",\n// } as const;\n\nconst GTAG_CONSENT_GRANTED_ADS = {\n ad_storage: \"granted\",\n ad_user_data: \"granted\",\n ad_personalization: \"granted\",\n} as const;\n\nfunction pushConsentUpdate(params: Record<string, string>) {\n if (typeof window === \"undefined\") return;\n const w = window as Window & { gtag?: GtagConsent; dataLayer?: unknown[] };\n if (typeof w.gtag === \"function\") {\n w.gtag(\"consent\", \"update\", params);\n } else {\n w.dataLayer = w.dataLayer || [];\n (w.dataLayer as unknown[]).push([\"consent\", \"update\", params]);\n }\n}\n\n/**\n * Syncs cookie consent to GA, GTM, PostHog, OpenReplay, and Google AdSense.\n * - On mount: sets gtag/GTM consent default to denied.\n * - When analytics allowed: grants analytics_storage (GA/GTM), opts in PostHog, starts OpenReplay.\n * - When advertising allowed: grants ad_storage, ad_user_data, ad_personalization (AdSense).\n * Must be used under PhygitalConsentProvider; for OpenReplay also under SessionReplayProvider.\n * Renders nothing.\n */\nexport function GtagConsentSync() {\n const consent = usePhygitalConsent() as {\n isAnalyticsAllowed?: boolean;\n isAdvertisingAllowed?: boolean;\n };\n const isAnalyticsAllowed = consent.isAnalyticsAllowed ?? false;\n const isAdvertisingAllowed = consent.isAdvertisingAllowed ?? false;\n const { initTracker, startTracking } = useSessionReplay();\n\n // Default: deny all consent (run once on mount)\n useEffect(() => {\n if (typeof window === \"undefined\") return;\n const w = window as Window & { dataLayer?: unknown[]; gtag?: GtagConsent };\n w.dataLayer = w.dataLayer || [];\n if (typeof w.gtag === \"function\") {\n w.gtag(\"consent\", \"default\", { ...GTAG_CONSENT_DENIED });\n } else {\n (w.dataLayer as unknown[]).push([\"consent\", \"default\", { ...GTAG_CONSENT_DENIED }]);\n }\n }, []);\n\n // GA / GTM: grant analytics when user accepted analytics\n // useEffect(() => {\n // if (!isAnalyticsAllowed) return;\n // pushConsentUpdate({ ...GTAG_CONSENT_GRANTED_ANALYTICS });\n // }, [isAnalyticsAllowed]);\n\n // Google AdSense: grant ad consent when user accepted advertising\n useEffect(() => {\n if (!isAdvertisingAllowed) return;\n pushConsentUpdate({ ...GTAG_CONSENT_GRANTED_ADS });\n }, [isAdvertisingAllowed]);\n\n // PostHog: opt in when analytics allowed\n useEffect(() => {\n if (!isAnalyticsAllowed) return;\n const ph = posthog as { opt_in_capturing?: () => void };\n if (typeof ph.opt_in_capturing === \"function\") {\n ph.opt_in_capturing();\n }\n }, [isAnalyticsAllowed]);\n\n // OpenReplay: init and start when analytics allowed\n useEffect(() => {\n if (!isAnalyticsAllowed) return;\n initTracker();\n startTracking();\n }, [isAnalyticsAllowed, initTracker, startTracking]);\n\n return null;\n}\n","\"use client\";\n\nimport { usePhygitalConsent } from \"@phygitallabs/phygital-consent\";\nimport { useEffect } from \"react\";\n\n/** Selectors for gtag / GTM scripts in the DOM */\nconst SCRIPT_SELECTORS =\n 'script[src*=\"googletagmanager.com\"], script[src*=\"google-analytics.com\"], script[src*=\"gtag/js\"]';\n\nconst GTM_SCRIPT_SELECTOR = 'script[src*=\"googletagmanager.com/gtm.js\"]';\nconst GTAG_SCRIPT_SELECTOR =\n 'script[src*=\"gtag/js\"], script[src*=\"googletagmanager.com/gtag\"]';\n\n/** Detect if gtag/GTM scripts are present in the DOM */\nexport function detectGtagGtmInDom(): {\n gtag: boolean;\n gtm: boolean;\n any: boolean;\n gtagScripts: HTMLScriptElement[];\n gtmScripts: HTMLScriptElement[];\n} {\n if (typeof document === \"undefined\") {\n return { gtag: false, gtm: false, any: false, gtagScripts: [], gtmScripts: [] };\n }\n const gtagScripts = Array.from(document.querySelectorAll<HTMLScriptElement>(GTAG_SCRIPT_SELECTOR));\n const gtmScripts = Array.from(document.querySelectorAll<HTMLScriptElement>(GTM_SCRIPT_SELECTOR));\n return {\n gtag: gtagScripts.length > 0,\n gtm: gtmScripts.length > 0,\n any: gtagScripts.length > 0 || gtmScripts.length > 0,\n gtagScripts,\n gtmScripts,\n };\n}\n\nexport interface GtagGtmScriptToggleProps {\n /** When true, scripts stay. When false, detected GA/GTM scripts are removed from DOM. */\n enabled?: boolean;\n}\n\n/**\n * Detects GA/GTM scripts in the DOM and removes them when enabled is false.\n * When enabled is true, does nothing (scripts remain if already in the page).\n * No config: only detect and toggle (remove) based on condition.\n * Renders nothing.\n */\nexport function GtagGtmScriptToggle({ enabled = false }: GtagGtmScriptToggleProps) {\n useEffect(() => {\n if (typeof document === \"undefined\") return;\n\n if (!enabled) {\n const toRemove = document.querySelectorAll<HTMLScriptElement>(SCRIPT_SELECTORS);\n toRemove.forEach((el) => {\n el.parentNode?.removeChild(el);\n });\n const w = window as Window & { gtag?: unknown; dataLayer?: unknown[] };\n if (w.dataLayer && Array.isArray(w.dataLayer)) {\n w.dataLayer.length = 0;\n }\n w.gtag = undefined;\n }\n }, [enabled]);\n\n return null;\n}\n\n/** Reads consent from PhygitalConsentProvider; removes GA/GTM scripts when analytics not allowed. */\nexport function GtagGtmScriptToggleFromConsent() {\n const consent = usePhygitalConsent() as { isAnalyticsAllowed?: boolean };\n const enabled = consent.isAnalyticsAllowed ?? false;\n\n return <GtagGtmScriptToggle enabled={enabled} />;\n}\n","import { usePhygitalConsent } from \"@phygitallabs/phygital-consent\";\nimport posthog from \"posthog-js\";\nimport { useSessionReplay } from \"../../../modules/session-replay\";\n\ndeclare global {\n interface Window {\n dataLayer: unknown[];\n gtag?: GtagConsent;\n }\n}\n\ntype GtagConsent = (\n command: \"consent\",\n action: \"default\" | \"update\",\n params: Record<string, string>\n) => void;\n\nconst GTAG_ANALYTICS_GRANTED = { analytics_storage: \"granted\" } as const;\nconst GTAG_ADS_GRANTED = {\n ad_storage: \"granted\",\n ad_user_data: \"granted\",\n ad_personalization: \"granted\",\n} as const;\n\n// GTM\nconst pushEventToDataLayer = (event: string, data: Record<string, any>) => {\n try {\n if (typeof window === \"undefined\") return;\n window.dataLayer = window.dataLayer || [];\n (window.dataLayer as Record<string, unknown>[]).push({ event, ...data });\n } catch (error) {\n console.error(error);\n }\n};\n\n// GA event (gtag may be loaded by GA script)\nconst pushEventToGA = (eventName: string, eventData: Record<string, any>) => {\n if (typeof window === \"undefined\") return;\n const w = window as Window & { gtag?: (a: string, b: string, c?: Record<string, any>) => void };\n if (typeof w.gtag === \"function\") {\n w.gtag(\"event\", eventName, eventData);\n }\n};\n\n// Posthog\nconst pushEventToPosthog = (eventName: string, eventData: Record<string, any>) => {\n posthog.capture(eventName, eventData);\n};\n\n/** Consent flags from PhygitalConsentProvider (isAdvertisingAllowed may be added in newer versions). */\ninterface ConsentFlags {\n isAnalyticsAllowed: boolean;\n isAdvertisingAllowed?: boolean;\n}\n\nfunction useDataTracking() {\n const { initTracker, startTracking, setUserId, setMetadata } = useSessionReplay();\n const consent = usePhygitalConsent() as unknown as ConsentFlags;\n const isAnalyticsAllowed = consent.isAnalyticsAllowed ?? false;\n const isAdvertisingAllowed = consent.isAdvertisingAllowed ?? false;\n\n /** Enable GA (gtag analytics_storage). No-op if analytics consent is denied. */\n const toggleGA = () => {\n if (!isAnalyticsAllowed || typeof window === \"undefined\") return;\n const w = window as Window & { gtag?: GtagConsent; dataLayer?: unknown[] };\n if (typeof w.gtag === \"function\") {\n w.gtag(\"consent\", \"update\", { ...GTAG_ANALYTICS_GRANTED });\n } else if (Array.isArray(w.dataLayer)) {\n w.dataLayer.push([\"consent\", \"update\", { ...GTAG_ANALYTICS_GRANTED }]);\n }\n };\n\n /** Enable GTM consent for analytics. No-op if analytics consent is denied. */\n const toggleGTM = () => {\n if (!isAnalyticsAllowed || typeof window === \"undefined\") return;\n const w = window as Window & { gtag?: GtagConsent; dataLayer?: unknown[] };\n if (typeof w.gtag === \"function\") {\n w.gtag(\"consent\", \"update\", { ...GTAG_ANALYTICS_GRANTED });\n } else {\n w.dataLayer = w.dataLayer || [];\n (w.dataLayer as unknown[]).push([\"consent\", \"update\", { ...GTAG_ANALYTICS_GRANTED }]);\n }\n };\n\n /** Opt-in PostHog capturing. No-op if analytics consent is denied. */\n const togglePostHog = () => {\n if (!isAnalyticsAllowed) return;\n if (typeof (posthog as { opt_in_capturing?: () => void }).opt_in_capturing === \"function\") {\n (posthog as { opt_in_capturing: () => void }).opt_in_capturing();\n }\n };\n\n /** Init and start OpenReplay. No-op if analytics consent is denied. */\n const toggleOpenReplay = () => {\n if (!isAnalyticsAllowed) return;\n initTracker();\n startTracking();\n };\n\n /** Enable Google AdSense (gtag ad consent). No-op if advertising consent is denied. */\n const toggleGoogleAdSense = () => {\n if (!isAdvertisingAllowed || typeof window === \"undefined\") return;\n const w = window as Window & { gtag?: GtagConsent; dataLayer?: unknown[] };\n if (typeof w.gtag === \"function\") {\n w.gtag(\"consent\", \"update\", { ...GTAG_ADS_GRANTED });\n } else if (Array.isArray(w.dataLayer)) {\n w.dataLayer.push([\"consent\", \"update\", { ...GTAG_ADS_GRANTED }]);\n }\n };\n\n const trackEvent = (\n eventName: string,\n eventData: Record<string, any>,\n useTools?: (\"gtm\" | \"ga\" | \"posthog\")[]\n ) => {\n useTools = useTools || [\"gtm\"];\n if (useTools.includes(\"gtm\") && typeof window !== \"undefined\") {\n pushEventToDataLayer(eventName, eventData);\n }\n if (useTools.includes(\"ga\") && isAnalyticsAllowed) {\n pushEventToGA(eventName, eventData);\n }\n if (useTools.includes(\"posthog\") && isAnalyticsAllowed && typeof posthog?.capture === \"function\") {\n pushEventToPosthog(eventName, eventData);\n }\n };\n\n const trackUserIdentify = (userInfo: Record<string, any>) => {\n if (!isAnalyticsAllowed) return;\n if (typeof posthog?.identify === \"function\") {\n posthog.identify(userInfo.email, {\n email: userInfo.email,\n name: userInfo.name,\n avatar: userInfo.avatar,\n uid: userInfo.uid,\n });\n }\n setUserId(userInfo.id);\n setMetadata({ user_email: userInfo.email });\n };\n\n const trackLogoutEvent = () => {\n if (!isAnalyticsAllowed) return;\n if (typeof posthog?.capture === \"function\") {\n posthog.capture(\"user_signed_out\");\n }\n };\n\n return {\n trackEvent,\n trackUserIdentify,\n trackLogoutEvent,\n toggleGA,\n toggleGTM,\n togglePostHog,\n toggleOpenReplay,\n toggleGoogleAdSense,\n };\n}\n\nexport { useDataTracking };\n","export * from \"@phygitallabs/notification-api\";\nexport {\n useNotificationStore,\n useWebSocket,\n useNotificationRewardHandler,\n useTCVNotificationRewardHandler,\n useDefaultServiceGetPollStats,\n useDefaultServicePostPoll,\n usePageVisibility,\n} from \"@phygitallabs/notification-api\";\nexport { NotificationProvider } from \"./providers\";","const serviceApiUrl = {\n dev: {\n API_BASE_URL: \"https://backend-dev.nomion.io\",\n API_BASE_CORE_URL: \"https://backend-dev.nomion.io/core\",\n API_ACHIEVEMENT_URL: \"https://backend-dev.nomion.io/achievement\",\n API_REWARD_URL: \"https://backend-dev.nomion.io/reward\",\n API_GENERATE_CERTIFICATE_URL: \"https://media-prc-dev.nomion.io/api\",\n API_CONSENT_URL: \"https://backend-dev.nomion.io/consent\",\n API_NOTIFICATION_SOCKET_URL: \"https://backend-dev.nomion.io/notification-ws/ws\",\n },\n staging: {\n API_BASE_URL: \"https://backend-staging.nomion.io\",\n API_BASE_CORE_URL: \"https://backend-staging.nomion.io/core\",\n API_ACHIEVEMENT_URL: \"https://backend-staging.nomion.io/achievement\",\n API_REWARD_URL: \"https://backend-staging.nomion.io/reward\",\n API_GENERATE_CERTIFICATE_URL: \"https://media-prc-staging.nomion.io/api\",\n API_CONSENT_URL: \"https://backend-staging.nomion.io/consent\",\n API_NOTIFICATION_SOCKET_URL: \"https://backend-staging.nomion.io/notification-ws/ws\",\n\n },\n production: {\n API_BASE_URL: \"https://backend.nomion.io\",\n API_BASE_CORE_URL: \"https://backend.nomion.io/core\",\n API_ACHIEVEMENT_URL: \"https://backend.nomion.io/achievement\",\n API_REWARD_URL: \"https://backend.nomion.io/reward\",\n API_GENERATE_CERTIFICATE_URL: \"https://media-prc.nomion.io/api\",\n API_CONSENT_URL: \"https://backend.nomion.io/consent\",\n API_NOTIFICATION_SOCKET_URL: \"https://backend.nomion.io/notification-ws/ws\",\n\n },\n}\n\nexport default serviceApiUrl;","import React from \"react\";\nimport { NotificationProvider as NotificationProviderApi } from \"@phygitallabs/notification-api\";\n\nimport { EnvironmentType } from \"../../../types/common\";\n\nimport type { LPResponse } from \"@phygitallabs/notification-api\";\n\nimport serviceApiUrl from \"../../../constants/service\";\n\ninterface NotificationCallbacks {\n onWebSocketOpen?: (metadata: Record<string, any>) => void;\n onWebSocketClose?: (metadata: Record<string, any>) => void;\n onWebSocketMessage?: (data: LPResponse) => void;\n}\n\ninterface NotificationProviderProps extends NotificationCallbacks {\n children: React.ReactNode;\n autoConnect?: boolean;\n user: { id?: string ; accessToken?: string };\n environment?: EnvironmentType;\n}\n\nexport const NotificationProvider: React.FC<NotificationProviderProps> = ({\n children,\n autoConnect = true,\n environment = \"dev\",\n user,\n onWebSocketOpen,\n onWebSocketClose,\n onWebSocketMessage,\n}) => {\n\n const webSocketUrl = serviceApiUrl[environment]?.API_NOTIFICATION_SOCKET_URL;\n\n return (\n <NotificationProviderApi\n userUid={user?.id}\n accessToken={user?.accessToken ?? null}\n webSocketUrl={webSocketUrl}\n autoConnect={autoConnect}\n onWebSocketOpen={onWebSocketOpen}\n onWebSocketClose={onWebSocketClose}\n onWebSocketMessage={onWebSocketMessage}\n >\n {children}\n </NotificationProviderApi>\n );\n};\n\nexport default NotificationProvider;","import { createContext, useContext, useEffect, useMemo, useCallback, useRef } from \"react\";\nimport { useDataTracking } from \"../../data-tracking\";\nimport { useNotificationStore } from \"../../notification\";\nimport { getActionsFromAchievementRule, AchievementType } from \"../../achievement\";\nimport type {\n AchievementTrackingContextValue,\n AchievementTrackingProviderProps,\n AchievementActionType,\n} from \"../types\";\nimport type { Achievement } from \"../../achievement/types\";\n\nconst AchievementTrackingContext = createContext<AchievementTrackingContextValue | undefined>(\n undefined\n);\n\nexport function AchievementTrackingProvider({\n children,\n achievements,\n}: AchievementTrackingProviderProps) {\n const { trackEvent } = useDataTracking();\n const trackedNotificationIds = useRef(new Set<string>());\n\n const { challenges, quests } = useMemo(() => {\n const challengesList: Achievement[] = [];\n const questsList: Achievement[] = [];\n\n achievements.forEach((achievement) => {\n if (achievement.type === AchievementType.GROUP_MISSION) {\n questsList.push(achievement);\n } else {\n challengesList.push(achievement);\n }\n });\n\n return {\n challenges: challengesList,\n quests: questsList,\n };\n }, [achievements]);\n\n useEffect(() => {\n const unsubscribe = useNotificationStore.subscribe((state) => {\n const notifications = state.notifications;\n if (notifications.length === 0) return;\n\n const latestNotification = notifications[notifications.length - 1];\n\n if (!latestNotification?.data?.achievement) return;\n\n const notificationId = `${latestNotification.data.achievement.id}_${Date.now()}`;\n\n if (trackedNotificationIds.current.has(notificationId)) return;\n\n trackedNotificationIds.current.add(notificationId);\n\n const achievement = latestNotification.data.achievement;\n\n if (achievement.type === AchievementType.GROUP_MISSION) {\n trackEvent(\"quest_complete\", {\n quest_id: achievement.id,\n quest_name: achievement.name,\n });\n } else {\n const actions = getActionsFromAchievementRule(achievement);\n const challengeType = actions[0] || \"unknown\";\n\n trackEvent(\"challenge_complete\", {\n challenge_id: achievement.id,\n challenge_name: achievement.name,\n challenge_type: challengeType,\n });\n }\n });\n\n return () => {\n unsubscribe();\n };\n }, [trackEvent]);\n\n const trackChallengeStart = useCallback(\n (actionType: AchievementActionType) => {\n const matchingAchievements = challenges.filter((achievement) => {\n const actions = getActionsFromAchievementRule(achievement);\n return actions.includes(actionType);\n });\n\n if (matchingAchievements.length === 0) {\n console.error(`[AchievementTracking] No achievement found for action: ${actionType}`);\n return;\n }\n\n matchingAchievements.forEach((achievement) => {\n trackEvent(\"challenge_start\", {\n challenge_id: achievement.id,\n challenge_name: achievement.name,\n challenge_type: actionType,\n });\n });\n },\n [challenges, trackEvent]\n );\n\n const trackQuestStart = useCallback(() => {\n if (quests.length === 0) {\n console.error(`[AchievementTracking] No quests found`);\n return;\n }\n\n quests.forEach((quest) => {\n trackEvent(\"quest_start\", {\n quest_id: quest.id,\n quest_name: quest.name,\n });\n });\n }, [quests, trackEvent]);\n\n const isReady = achievements.length > 0;\n\n const contextValue: AchievementTrackingContextValue = {\n trackChallengeStart,\n trackQuestStart,\n isReady,\n };\n\n return (\n <AchievementTrackingContext.Provider value={contextValue}>\n {children}\n </AchievementTrackingContext.Provider>\n );\n}\n\nexport function useAchievementTracking(): AchievementTrackingContextValue {\n const context = useContext(AchievementTrackingContext);\n if (!context) {\n throw new Error(\"useAchievementTracking must be used within AchievementTrackingProvider\");\n }\n return context;\n}\n","// Re-export from @phygitallabs/reward package\nexport {\n CmentityRewardType,\n type CmentityStatus\n} from \"@phygitallabs/reward\";\n\n// Define RewardClaimStatus locally since it's not exported from reward package\nexport enum RewardClaimStatus {\n NOT_CLAIMED = \"not_claimed\",\n CLAIMED = \"claimed\",\n IN_PROGRESS = \"in_progress\",\n FAILED = \"failed\",\n}","import { create } from \"zustand\";\nimport { immer } from \"zustand/middleware/immer\";\nimport { UserData } from \"../types/user-data\";\nimport {\n createJSONStorage,\n devtools,\n persist,\n subscribeWithSelector,\n} from \"zustand/middleware\";\nimport { AuthEventCallbacks } from \"../types/auth\";\n\nimport {\n authService,\n ProtoSendVerifyCodeResponse,\n ProtoSignInResponse,\n ProtoSignUpResponse,\n ProtoVerifyEmailResponse,\n SendVerifyCodeRequest,\n verifyCodeService,\n VerifyEmailRequest,\n tokenStorage,\n ProtoRefreshTokenResponse,\n OAuthSignInResponse,\n ResetPasswordRequest,\n ProtoResetPasswordResponse,\n ChangePasswordRequest,\n ProtoChangePasswordResponse,\n} from \"@phygitallabs/authentication\";\n\nimport { CALLBACK_URL } from \"../constants\";\n\n// Cleanup functions interface\nexport interface AuthCleanupFunctions {\n clearQueryCache?: () => void;\n clearOrganization?: () => void;\n clearHeaders?: () => void;\n clearCustomData?: () => void;\n}\n\n// Simplified auth state interface\ninterface AuthState {\n // User data\n user: UserData | null;\n\n isSignedIn: boolean;\n isInitialized: boolean;\n\n // Single loading state\n isLoading: boolean;\n\n // Error state\n error: string | null;\n\n // Cleanup functions\n cleanupFunctions: AuthCleanupFunctions;\n\n // Event callbacks\n eventCallbacks: AuthEventCallbacks;\n}\n\n// Simplified actions interface\ninterface AuthActions {\n setCleanupFunctions: (\n cleanupFunctions: Partial<AuthCleanupFunctions>\n ) => void;\n\n // Event management\n addEventCallbacks: (callbacks: AuthEventCallbacks) => () => void;\n\n // Core auth actions\n signInWithEmail: (\n email: string,\n password: string,\n updateHeaders?: (headers: Record<string, string>) => void,\n updateAuthenticationHeaders?: (headers: Record<string, string>) => void\n ) => Promise<ProtoSignInResponse>;\n signInWithGoogle: () => Promise<OAuthSignInResponse>;\n signUpWithEmail: (\n email: string,\n password: string\n ) => Promise<ProtoSignUpResponse>;\n signOut: () => Promise<void>;\n sendPasswordResetEmail: (email: string) => Promise<void>;\n resetPassword: (\n data: ResetPasswordRequest\n ) => Promise<ProtoResetPasswordResponse>;\n changePassword: (\n data: ChangePasswordRequest\n ) => Promise<ProtoChangePasswordResponse>;\n verifyEmailCode: (\n data: VerifyEmailRequest\n ) => Promise<ProtoVerifyEmailResponse>;\n sendVerifyCode: (\n data: SendVerifyCodeRequest\n ) => Promise<ProtoSendVerifyCodeResponse>;\n refreshToken: (refreshToken?: string) => Promise<ProtoRefreshTokenResponse>;\n\n // Simple state management\n clearError: () => void;\n\n // Setters\n setUser: (user: UserData | null) => void;\n patchUser: (user: Partial<UserData>) => void;\n setIsSignedIn: (isSignedIn: boolean) => void;\n setIsInitialized: (isInitialized: boolean) => void;\n setIsLoading: (isLoading: boolean) => void;\n\n // Initialization\n initialize: () => void;\n syncAuthState: () => void;\n}\n\n// Store structure with actions grouped\ninterface AuthStoreState extends AuthState {\n actions: AuthActions;\n}\n\ntype AuthStore = AuthStoreState;\n\n// Initial state\nconst initialState: AuthState = {\n user: null,\n isSignedIn: false,\n isInitialized: false,\n isLoading: false,\n error: null,\n cleanupFunctions: {},\n eventCallbacks: {},\n};\n\n// Create the auth store\nexport const useAuthStore = create<AuthStore>()(\n devtools(\n persist(\n subscribeWithSelector(\n immer((set, get) => ({\n ...initialState,\n actions: {\n setIsLoading: (isLoading: boolean) =>\n set((state) => {\n state.isLoading = isLoading;\n }),\n\n setCleanupFunctions: (\n newCleanupFunctions: Partial<AuthCleanupFunctions>\n ) =>\n set((state) => {\n state.cleanupFunctions = {\n ...state.cleanupFunctions,\n ...newCleanupFunctions,\n };\n }),\n\n // Event management\n addEventCallbacks: (callbacks: AuthEventCallbacks) => {\n set((state) => {\n state.eventCallbacks = {\n ...state.eventCallbacks,\n ...callbacks,\n };\n });\n\n // Return cleanup function\n return () => {\n set((state) => {\n state.eventCallbacks = {\n ...state.eventCallbacks,\n ...callbacks,\n };\n });\n };\n },\n\n // Sign in with email and password\n signInWithEmail: async (email: string, password: string) => {\n const { eventCallbacks } = get();\n set((state) => {\n state.isLoading = true;\n state.error = null;\n });\n\n try {\n const response = await authService.signIn({\n email,\n password,\n });\n\n if (response?.data?.idToken && response?.data?.refreshToken) {\n // Store tokens in tokenStorage only\n tokenStorage.setTokens({\n idToken: response.data.idToken,\n refreshToken: response.data.refreshToken,\n });\n\n // Update auth state\n set((state) => {\n state.isSignedIn = true;\n });\n\n eventCallbacks.onLoginSuccess?.(response.data.idToken);\n }\n\n return response;\n } catch (error: any) {\n // Check if error has code 7 (email not verified)\n // if (error?.response?.data?.code === 7) {\n // // Return a special response for email verification needed\n // return {\n // data: undefined,\n // message: \"Email verification required\",\n // code: 7,\n // };\n // }\n\n const errorMessage =\n error instanceof Error ? error.message : \"Login failed\";\n\n set((state) => {\n state.error = errorMessage;\n });\n\n eventCallbacks.onLoginError?.(new Error(errorMessage));\n\n throw error;\n } finally {\n set((state) => {\n state.isLoading = false;\n });\n }\n },\n\n // Sign in with Google\n signInWithGoogle: async () => {\n const { eventCallbacks } = get();\n try {\n //get current domain\n const currentDomain = CALLBACK_URL;\n\n const userData =\n await authService.getOAuthSignInUrl(currentDomain);\n return userData;\n } catch (error) {\n const errorMessage =\n error instanceof Error\n ? error.message\n : \"Google sign in failed\";\n\n set((state) => {\n state.error = errorMessage;\n });\n\n eventCallbacks.onLoginError?.(new Error(errorMessage));\n\n throw error;\n }\n },\n\n // Sign up with email and password\n signUpWithEmail: async (email: string, password: string) => {\n const { eventCallbacks } = get();\n\n set((state) => {\n state.isLoading = true;\n state.error = null;\n });\n\n try {\n const response = await authService.signUp({\n email,\n password,\n });\n\n if (response.data) {\n eventCallbacks.onSignupSuccess?.();\n }\n\n return response;\n } catch (error) {\n const errorMessage =\n error instanceof Error ? error.message : \"Signup failed\";\n\n set((state) => {\n state.error = errorMessage;\n });\n\n eventCallbacks.onSignupError?.(new Error(errorMessage));\n\n throw error;\n } finally {\n set((state) => {\n state.isLoading = false;\n state.user = null;\n state.isSignedIn = false;\n });\n }\n },\n\n // Sign out\n signOut: async () => {\n const { eventCallbacks, cleanupFunctions } = get();\n set((state) => {\n state.isLoading = true;\n state.error = null;\n });\n\n try {\n set((state) => {\n state.user = null;\n state.isSignedIn = false;\n state.error = null;\n });\n\n const refreshToken = tokenStorage.getRefreshToken();\n const isTokenExpired = tokenStorage.isTokenExpired();\n\n if (isTokenExpired || !refreshToken) {\n tokenStorage.clearTokens();\n return;\n }\n\n await authService.logout({\n refreshToken,\n });\n tokenStorage.clearTokens();\n\n // Execute default cleanup functions\n try {\n cleanupFunctions.clearQueryCache?.();\n cleanupFunctions.clearOrganization?.();\n cleanupFunctions.clearCustomData?.();\n cleanupFunctions.clearHeaders?.();\n } catch (cleanupError) {\n console.warn(\"Error during logout cleanup:\", cleanupError);\n // Don't fail logout if cleanup fails\n }\n\n // Call onLogoutSuccess callback\n eventCallbacks.onLogoutSuccess?.();\n\n // Update state AFTER callback to prevent AuthLayout interference\n } catch (error) {\n console.log(error);\n const errorMessage =\n error instanceof Error ? error.message : \"Logout failed\";\n\n set((state) => {\n state.error = errorMessage;\n });\n\n eventCallbacks.onLogoutError?.(new Error(errorMessage));\n\n throw error;\n } finally {\n set((state) => {\n state.isLoading = false;\n });\n }\n },\n\n // Send password reset email\n sendPasswordResetEmail: async (email: string) => {\n set((state) => {\n state.isLoading = true;\n state.error = null;\n });\n\n try {\n await verifyCodeService.forgotPassword({\n email,\n });\n } catch (error) {\n const errorMessage =\n error instanceof Error\n ? error.message\n : \"Failed to send reset email\";\n set((state) => {\n state.error = errorMessage;\n });\n throw error;\n } finally {\n set((state) => {\n state.isLoading = false;\n });\n }\n },\n\n resetPassword: async (data: ResetPasswordRequest) => {\n set((state) => {\n state.isLoading = true;\n state.error = null;\n });\n\n try {\n const resetPasswordResponse =\n await verifyCodeService.resetPassword(data);\n return resetPasswordResponse;\n } catch (error) {\n const errorMessage =\n error instanceof Error\n ? error.message\n : \"Failed to reset password\";\n set((state) => {\n state.error = errorMessage;\n });\n throw error;\n } finally {\n set((state) => {\n state.isLoading = false;\n });\n }\n },\n\n changePassword: async (data: ChangePasswordRequest) => {\n set((state) => {\n state.isLoading = true;\n state.error = null;\n });\n\n try {\n const changePasswordResponse =\n await verifyCodeService.changePassword(data);\n return changePasswordResponse;\n } catch (error) {\n throw error;\n } finally {\n set((state) => {\n state.isLoading = false;\n });\n }\n },\n\n verifyEmailCode: async (data: VerifyEmailRequest) => {\n set((state) => {\n state.isLoading = true;\n state.error = null;\n });\n\n try {\n const verifyEmailResponse =\n await verifyCodeService.verifyEmail(data);\n return verifyEmailResponse;\n } catch (error) {\n const errorMessage =\n error instanceof Error\n ? error.message\n : \"Failed to send reset email\";\n set((state) => {\n state.error = errorMessage;\n });\n throw error;\n } finally {\n set((state) => {\n state.isLoading = false;\n });\n }\n },\n sendVerifyCode: async (data: SendVerifyCodeRequest) => {\n set((state) => {\n state.isLoading = true;\n state.error = null;\n });\n\n try {\n const sendVerifyCodeResponse =\n await verifyCodeService.sendVerifyCode(data);\n return sendVerifyCodeResponse;\n } catch (error) {\n const errorMessage =\n error instanceof Error\n ? error.message\n : \"Failed to send verify code\";\n set((state) => {\n state.error = errorMessage;\n });\n throw error;\n } finally {\n set((state) => {\n state.isLoading = false;\n });\n }\n },\n refreshToken: async (refreshToken?: string) => {\n const refreshTokenResponse = await authService.refreshToken({\n refreshToken:\n refreshToken ?? tokenStorage.getRefreshToken() ?? \"\",\n });\n\n if(refreshTokenResponse.data?.idToken && refreshTokenResponse.data?.refreshToken){\n tokenStorage.setTokens({\n idToken: refreshTokenResponse.data?.idToken,\n refreshToken: refreshTokenResponse.data?.refreshToken,\n });\n }\n\n return refreshTokenResponse;\n },\n\n // Clear error\n clearError: () =>\n set((state) => {\n state.error = null;\n }),\n\n setUser: (user: UserData | null) =>\n set((state) => {\n state.user = user;\n }),\n\n setIsSignedIn: (isSignedIn: boolean) =>\n set((state) => {\n state.isSignedIn = isSignedIn;\n }),\n\n setIsInitialized: (isInitialized: boolean) =>\n set((state) => {\n state.isInitialized = isInitialized;\n }),\n\n patchUser: (user: Partial<UserData>) =>\n set((state) => {\n if (state.user) {\n state.user = { ...state.user, ...user };\n } else {\n state.user = user as UserData;\n }\n }),\n\n // Initialize the store - check if user is already authenticated from tokenStorage\n initialize: () => {\n set((state) => {\n const token = tokenStorage.getAuthToken();\n state.isSignedIn = !!token;\n state.isInitialized = true;\n });\n },\n\n // Sync auth state from tokenStorage (called when axios interceptor updates tokens)\n syncAuthState: () => {\n set((state) => {\n const token = tokenStorage.getAuthToken();\n const wasSignedIn = state.isSignedIn;\n state.isSignedIn = !!token;\n\n // If auth state changed, trigger callbacks\n if (wasSignedIn !== state.isSignedIn) {\n if (state.isSignedIn) {\n state.eventCallbacks?.onAuthStateChange?.(state.user, true);\n } else {\n state.eventCallbacks?.onAuthStateChange?.(null, false);\n }\n }\n });\n },\n },\n }))\n ),\n {\n version: 1,\n name: \"auth-store\",\n storage: createJSONStorage(() => localStorage),\n partialize: (state) => ({\n isSignedIn: state.isSignedIn,\n user: state.user,\n }),\n }\n )\n )\n);\n\nexport const useAuth = () => {\n const user = useAuthStore((state) => state.user);\n const isSignedIn = useAuthStore((state) => state.isSignedIn);\n const isInitialized = useAuthStore((state) => state.isInitialized);\n const isLoading = useAuthStore((state) => state.isLoading);\n const error = useAuthStore((state) => state.error);\n const actions = useAuthStore((state) => state.actions);\n\n return {\n user,\n isSignedIn,\n isInitialized,\n isLoading,\n error,\n ...actions,\n };\n};\n","import { UserData, UserRole, UserType } from \"../types/user-data\";\nimport { UserModel } from \"@phygitallabs/api-core\";\nimport { jwtDecode } from \"jwt-decode\";\n\nexport const transformProtoUserData = (user: UserModel, accessToken: string): UserData => {\n const userData = { ...user } as UserData;\n let tokenDecoded: any = {};\n\n try {\n tokenDecoded = jwtDecode(accessToken);\n } catch (error) {\n console.warn(\"Failed to decode token in transformUserData:\", error);\n }\n\n userData.exp = tokenDecoded.exp || 0;\n userData.accessToken = accessToken || \"\";\n userData.roles = tokenDecoded?.roles || [UserRole.USER];\n userData.account_type = tokenDecoded?.account_type || UserType.C;\n userData.picture = user.picture || \"\";\n\n return userData;\n};\n\nexport const decodeJWTToken = (token: string): any => {\n try {\n return jwtDecode(token);\n } catch (error) {\n console.warn(\"Failed to decode token in decodeJWTToken:\", error);\n return null;\n }\n};\n","import { useQuery } from \"@tanstack/react-query\";\nimport { useAuth } from \"../store/authStore\";\nimport { tokenStorage } from \"@phygitallabs/authentication\";\n\nexport function useTokenRefresher() {\n const { refreshToken, signOut } = useAuth();\n\n const handleRefreshToken = async () => {\n try {\n const isTokenExpired = tokenStorage.isTokenExpired();\n\n if (!isTokenExpired) {\n return;\n }\n \n await refreshToken();\n\n } catch (error) {\n console.error(\"Failed to refresh token:\", error);\n signOut();\n }\n };\n\n // React Query handles refetching on interval + focus\n useQuery({\n queryKey: [\"refresh-token\"],\n queryFn: () => handleRefreshToken(),\n refetchInterval: 30 * 60 * 1000, // every 30 minutes\n refetchIntervalInBackground: false, // even when tab is hidden\n refetchOnWindowFocus: true, // also refresh when user returns to tab\n retry: false, // don't retry repeatedly if refresh fails\n enabled: !!tokenStorage.getAuthToken(), // only run if logged in\n });\n}\n","import {\n AuthenticationProvider,\n useAuthenticationHeaders,\n tokenStorage,\n} from \"@phygitallabs/authentication\";\nimport { useEffect } from \"react\";\nimport {useAuthStore} from \"../store/authStore\";\nimport { transformProtoUserData } from \"../utils/user\";\nimport { userService } from \"@phygitallabs/api-core\";\nimport { QueryClient } from \"@tanstack/react-query\";\n\nimport { usePGLCoreService } from \"@phygitallabs/api-core\";\nimport { useAchievementService } from \"@phygitallabs/achievement\";\nimport { useRewardService } from \"@phygitallabs/reward\";\nimport { useGenerateCertificateService } from \"@phygitallabs/generate-certificate\";\nimport { useTokenRefresher } from \"../hooks/useTokenRefresher\";\n\ninterface AuthProviderProps {\n children: React.ReactNode;\n baseURL: string;\n queryClient: QueryClient;\n}\n\n// Inner component that has access to the authentication context\nconst AuthStateManager = () => {\n const { updateHeaders } = useAuthenticationHeaders();\n\n const { updateHeaders: updateHeadersPGL, coreApi } = usePGLCoreService();\n const { updateHeaders: updateHeadersAchievement } = useAchievementService();\n const { updateHeaders: updateHeadersReward } = useRewardService();\n const { updateHeaders: updateHeadersGenerateCertificate } =\n useGenerateCertificateService();\n\n useEffect(() => {\n // Initialize the auth store to set isSignedIn based on persisted token\n useAuthStore.getState().actions.initialize();\n // Initial setup - set headers if token exists\n const token = tokenStorage.getAuthToken();\n if (token) {\n updateHeaders({\n Authorization: `Bearer ${token}`,\n });\n\n updateHeadersPGL({\n Authorization: `Bearer ${token}`,\n });\n\n updateHeadersAchievement({\n Authorization: `Bearer ${token}`,\n });\n\n updateHeadersReward({\n Authorization: `Bearer ${token}`,\n });\n\n updateHeadersGenerateCertificate({\n Authorization: `Bearer ${token}`,\n });\n\n // Sync user.accessToken with actual token from localStorage\n const { user } = useAuthStore.getState();\n if (user && user.accessToken !== token) {\n useAuthStore.getState().actions.setUser({\n ...user,\n accessToken: token,\n });\n }\n }\n\n let previousIsSignedIn = useAuthStore.getState().isSignedIn;\n\n const unsub = useAuthStore.subscribe(\n (state) => [state.isSignedIn, state.user],\n async ([isSignedIn]) => {\n // Only run when isSignedIn actually changes\n if (isSignedIn === previousIsSignedIn) {\n return;\n }\n\n previousIsSignedIn = isSignedIn as boolean;\n\n if (isSignedIn) {\n const token = tokenStorage.getAuthToken();\n\n if (token) {\n // Update API headers with the new token\n updateHeaders({\n Authorization: `Bearer ${token}`,\n });\n updateHeadersPGL({\n Authorization: `Bearer ${token}`,\n });\n\n updateHeadersAchievement({\n Authorization: `Bearer ${token}`,\n });\n\n updateHeadersReward({\n Authorization: `Bearer ${token}`,\n });\n\n updateHeadersGenerateCertificate({\n Authorization: `Bearer ${token}`,\n });\n\n try {\n // Fetch user profile when signed in\n const userApi = userService(coreApi);\n const userProfile = await userApi.getMyProfile();\n const transformedUserData = transformProtoUserData(\n userProfile,\n token\n );\n\n useAuthStore.getState().actions.setUser(transformedUserData);\n } catch (error) {\n useAuthStore.getState().actions.signOut();\n }\n }\n\n // Trigger auth state change event\n const { eventCallbacks, user } = useAuthStore.getState();\n eventCallbacks?.onAuthStateChange?.(user, true);\n } else {\n // Clear headers when logged out\n updateHeaders({});\n updateHeadersPGL({});\n updateHeadersAchievement({\n Authorization: ``,\n });\n updateHeadersReward({\n Authorization: ``,\n });\n updateHeadersGenerateCertificate({\n Authorization: ``,\n });\n\n // Trigger auth state change event\n const { eventCallbacks } = useAuthStore.getState();\n eventCallbacks?.onAuthStateChange?.(null, false);\n }\n }\n );\n\n // Listen for token changes (for refresh scenarios)\n const unsubTokenChange = tokenStorage.addTokenChangeListener(async () => {\n const { isSignedIn, user } = useAuthStore.getState();\n if (isSignedIn) {\n const token = tokenStorage.getAuthToken();\n if (token) {\n updateHeaders({\n Authorization: `Bearer ${token}`,\n });\n updateHeadersPGL({\n Authorization: `Bearer ${token}`,\n });\n updateHeadersAchievement({\n Authorization: `Bearer ${token}`,\n });\n updateHeadersReward({\n Authorization: `Bearer ${token}`,\n });\n updateHeadersGenerateCertificate({\n Authorization: `Bearer ${token}`,\n });\n\n // Sync user.accessToken with actual token from localStorage\n if (user && user.accessToken !== token) {\n useAuthStore.getState().actions.setUser({\n ...user,\n accessToken: token,\n });\n }\n } else {\n // Token was cleared, sign out\n useAuthStore.getState().actions.signOut();\n updateHeaders({});\n updateHeadersPGL({});\n updateHeadersAchievement({\n Authorization: ``,\n });\n updateHeadersReward({\n Authorization: ``,\n });\n updateHeadersGenerateCertificate({\n Authorization: ``,\n });\n }\n }\n });\n\n return () => {\n unsub();\n unsubTokenChange();\n };\n }, [\n updateHeaders,\n updateHeadersPGL,\n updateHeadersAchievement,\n updateHeadersReward,\n updateHeadersGenerateCertificate,\n coreApi,\n ]);\n\n return null;\n};\n\nconst TokenRefresher = () => {\n useTokenRefresher();\n return null;\n};\n\nexport const AuthProvider = ({\n children,\n baseURL,\n queryClient,\n}: AuthProviderProps) => {\n const axiosConfig = {\n headers: {\n \"Content-Type\": \"application/json\",\n },\n };\n\n return (\n <AuthenticationProvider\n axiosConfig={axiosConfig}\n baseURL={baseURL}\n queryClient={queryClient}\n >\n <AuthStateManager />\n <TokenRefresher />\n {children}\n </AuthenticationProvider>\n );\n};\n","import { useRef, useCallback, useEffect, useState } from \"react\";\nimport { useAuth } from \"../store/authStore\";\nimport { tokenStorage } from \"@phygitallabs/authentication\";\nimport { ALLOWED_ORIGINS } from \"../constants\";\nimport { decodeJWTToken } from \"../utils/user\";\n\nexport interface UseGoogleLoginOptions {\n onSuccess?: (userData: any) => void;\n onError?: (error: string) => void;\n onPopupBlocked?: () => void;\n onPopupClosed?: () => void;\n}\n\nexport interface UseGoogleLoginReturn {\n signIn: () => void;\n isLoading: boolean;\n error: string | null;\n}\n\nexport function useGoogleLogin(\n options: UseGoogleLoginOptions = {}\n): UseGoogleLoginReturn {\n const { onSuccess, onError, onPopupBlocked, onPopupClosed } = options;\n const {\n signInWithGoogle,\n refreshToken,\n setIsSignedIn,\n setIsLoading,\n isLoading,\n } = useAuth();\n const [googleLink, setGoogleLink] = useState<string | null>(null);\n\n const popupRef = useRef<Window | null>(null);\n const gotDataRef = useRef(false);\n const timerRef = useRef<NodeJS.Timeout | null>(null);\n const errorRef = useRef<string | null>(null);\n\n const handleTokenRefresh = useCallback(\n async (refresh: string) => {\n if (refresh) {\n try {\n const newToken = await refreshToken(refresh);\n if (newToken.data?.idToken && newToken.data?.refreshToken) {\n tokenStorage.setTokens({\n idToken: newToken.data.idToken,\n refreshToken: newToken.data.refreshToken,\n });\n\n const userData = decodeJWTToken(newToken.data.idToken);\n\n setIsSignedIn(true);\n setIsLoading(false);\n onSuccess?.(userData);\n }\n } catch (error) {\n const errorMessage =\n error instanceof Error ? error.message : \"Token refresh failed\";\n errorRef.current = errorMessage;\n onError?.(errorMessage);\n setIsLoading(false);\n }\n }\n },\n [refreshToken, setIsSignedIn, setIsLoading, onSuccess, onError]\n );\n\n const cleanup = useCallback(() => {\n if (timerRef.current) {\n clearInterval(timerRef.current);\n timerRef.current = null;\n }\n\n gotDataRef.current = false;\n }, []);\n\n const handleMessage = useCallback(\n (event: MessageEvent) => {\n // Allow specific origins for OAuth (adjust these based on your OAuth provider)\n const allowedOrigins = ALLOWED_ORIGINS.concat(window?.location?.origin);\n\n // Allow wildcard origin from callback.html (but validate message structure)\n if (\n event.origin !== \"*\" &&\n !allowedOrigins.includes(event.origin as string)\n ) {\n console.warn(\"Rejected message from untrusted origin:\", event.origin);\n return;\n }\n\n // Additional validation for message structure\n if (!event.data || typeof event.data !== \"object\") {\n console.warn(\"Invalid message data received\");\n return;\n }\n if (event.data.type === \"LOGIN_SUCCESS\") {\n const { refreshToken: refresh } = event.data;\n\n // Support both token formats from callback\n if (refresh) {\n handleTokenRefresh(refresh);\n }\n gotDataRef.current = true;\n cleanup();\n } else if (event.data.type === \"LOGIN_ERROR\") {\n const errorMessage = event.data.error || \"Login failed\";\n errorRef.current = errorMessage;\n onError?.(errorMessage);\n setIsLoading(false);\n gotDataRef.current = true;\n cleanup();\n }\n },\n [handleTokenRefresh, setIsLoading, cleanup, onError]\n );\n\n useEffect(() => {\n const fetchGoogleLink = async () => {\n try {\n const response = await signInWithGoogle();\n setGoogleLink(response.statusMessage || \"\");\n } catch (error) {\n console.error(\"error\", error);\n setGoogleLink(\"\");\n }\n };\n fetchGoogleLink();\n }, []);\n\n const signIn = useCallback((): void => {\n const width = 500;\n const height = 600;\n const left = window.screenX + (window.outerWidth - width) / 2;\n const top = window.screenY + (window.outerHeight - height) / 2;\n\n try {\n if (googleLink === null) return;\n if (googleLink === \"\") {\n const error = \"Google sign in failed. Please try again later.\";\n errorRef.current = error;\n onError?.(error);\n return;\n }\n\n errorRef.current = null;\n setIsLoading(true);\n\n popupRef.current = window.open(\n googleLink,\n \"oauthPopup\",\n `width=${width},height=${height},left=${left},top=${top},resizable,scrollbars`\n );\n\n // Ensure popup opened successfully\n if (!popupRef.current) {\n setIsLoading(false);\n const error = \"Popup blocked. Please allow popups for this site.\";\n errorRef.current = error;\n onPopupBlocked?.();\n onError?.(error);\n return;\n }\n\n timerRef.current = setInterval(() => {\n if (popupRef.current && popupRef.current.closed) {\n if (timerRef.current) {\n clearInterval(timerRef.current);\n timerRef.current = null;\n }\n if (!gotDataRef.current) {\n const error = \"Authentication popup was closed\";\n errorRef.current = error;\n onPopupClosed?.();\n onError?.(error);\n setIsLoading(false);\n }\n }\n }, 500);\n } catch (error: any) {\n const errorMessage =\n error instanceof Error ? error.message : \"Google sign in failed\";\n errorRef.current = errorMessage;\n onError?.(errorMessage);\n setIsLoading(false);\n }\n }, [\n signInWithGoogle,\n setIsLoading,\n handleMessage,\n onError,\n onPopupBlocked,\n onPopupClosed,\n googleLink,\n ]);\n\n useEffect(() => {\n window.addEventListener(\"message\", handleMessage);\n return () => {\n window.removeEventListener(\"message\", handleMessage);\n };\n }, [handleMessage]);\n\n // Cleanup on unmount\n useEffect(() => {\n return () => {\n cleanup();\n };\n }, [cleanup]);\n\n return {\n signIn,\n isLoading,\n error: errorRef.current,\n };\n}\n","import { useEffect } from \"react\";\nimport { useChipScanStory } from \"@phygitallabs/api-core\";\nimport { usePGLCoreService } from \"@phygitallabs/api-core\";\nimport { setChipAuthToken } from \"../../auth/helpers\";\n\nimport { ScanChipResponse } from \"../types\";\n\ninterface UseScanChipProps {\n token?: string;\n id?: string;\n onScanChipError?: () => void;\n}\nexport { useChipScanStory, usePGLCoreService };\nexport function useScanChip({ token, id, onScanChipError }: UseScanChipProps): ScanChipResponse {\n const { updateHeaders } = usePGLCoreService();\n\n useEffect(() => {\n if (!!token) {\n\n const header = {\n \"Chip-Authorization\": token,\n };\n\n setChipAuthToken(token);\n updateHeaders(header);\n\n }\n }, [token, updateHeaders]);\n\n const { data, isLoading, isError, isSuccess } = useChipScanStory({\n token,\n id,\n });\n\n useEffect(() => {\n if (isError) {\n onScanChipError?.();\n }\n }, [isError, onScanChipError]);\n\n\n if (!data)\n return {\n data: null,\n isLoading,\n isError,\n isSuccess\n };\n\n return {\n data: {\n externalUrl: data?.external_url,\n campaignDetail: data?.project,\n locationDetail: data?.location,\n scanCounter: data?.scan_counter,\n campaignId: data?.campaign_id,\n chipModelId: data?.chip_model_id,\n organizationId: data?.organization_id,\n projectId: data?.project_id,\n locationId: data?.location_id,\n chipUid: data?.uid,\n },\n isLoading,\n isError,\n isSuccess\n }\n}","// Re-export from @phygitallabs/api-core package\nexport type {\n CampaignModel,\n UserCampaignModel,\n MissionWithProgress,\n TaskWithProgress,\n UserCampaignMission,\n Mission,\n MissionProgress,\n TaskProgress,\n} from \"@phygitallabs/api-core\";\n\nexport enum TaskType {\n CHECK_IN = \"check_in\",\n CREATE_MEMORY = \"create_memory\",\n FILL_FORM = \"fill_form\",\n SHARE = \"share\",\n}\n\n// Define other types locally since they're not exported from api-core package\nexport interface CampaignByProjectIdModel {\n id: string;\n certificate_index?: number;\n completed_checkin_rule?: number;\n completed_device_uids?: string[];\n completed_location_ids?: string[];\n completed_user_ids?: string[];\n description?: string;\n image_url?: string;\n is_custom_checkin_rule?: boolean;\n location_ids?: string[];\n name: string;\n total_completed?: number;\n user_campaign?: any;\n custom_info: Record<string, any>;\n mission: Record<string, any>;\n achievement_id: string;\n start_date: string;\n end_date: string;\n certificate: {\n image: any;\n title: string;\n };\n project_id?: string;\n status: string;\n created_at: number;\n updated_at: number;\n created_by?: string;\n updated_by?: string;\n}\n\n","\nexport const sortLocationsByIndex = <T extends { index?: number }>(locations: T[]): T[] => {\n return [...locations].sort((a, b) => (a.index ?? 0) - (b.index ?? 0));\n};\n\n\nexport const filterLocationsByProperty = <T extends Record<string, any>>(\n locations: T[],\n propertyName: keyof T,\n value: boolean\n): T[] => {\n return locations.filter(location => location[propertyName] === value);\n};\n","import React, { useEffect, useState } from \"react\";\nimport { QueryClient } from \"@tanstack/react-query\";\nimport { PGLCoreServiceProvider } from \"@phygitallabs/api-core\";\nimport { RewardServiceProvider } from \"@phygitallabs/reward\";\nimport { AchievementServiceProvider } from \"@phygitallabs/achievement\";\nimport { GenerateCertificateServiceProvider } from \"@phygitallabs/generate-certificate\";\nimport { PhygitalConsentProvider } from \"@phygitallabs/phygital-consent\";\nimport { GtagConsentSync } from \"../modules/data-tracking\";\nimport { GtagGtmScriptToggleFromConsent } from \"../modules/data-tracking\";\n\nimport serviceApiUrl from \"../constants/service\";\nimport { APIConfig, ServiceConfig } from \"../types/service\";\n\nimport { checkDeviceUid } from \"../modules/auth/helpers\";\n\nimport { useAuth } from \"../modules/auth/store/authStore\";\n\nimport { httpMaxRetries, retryAttemptsRefreshToken } from \"../modules/auth/constants\";\nimport { getFromLS, setToLS } from \"@phygitallabs/helpers\";\nimport { tokenStorage } from \"@phygitallabs/authentication\";\n\nimport axios from \"axios\";\n\ninterface ServicesProviderProps {\n children: React.ReactNode;\n queryClient: QueryClient;\n apiConfig: APIConfig;\n firebaseConfig?: any;\n}\n\nexport const ServicesProvider: React.FC<ServicesProviderProps> = ({\n children,\n queryClient,\n apiConfig = {\n environment: \"dev\",\n version: \"v1\",\n },\n}) => {\n const { signOut, refreshToken } = useAuth();\n const { environment, version } = apiConfig;\n const [commonServiceConfig, setCommonServiceConfig] = useState<ServiceConfig | null>(null);\n\n const [deviceUid, setDeviceUid] = useState<string>(\"\");\n\n useEffect(() => {\n const initDeviceUid = async () => {\n const deviceUid = await checkDeviceUid();\n setDeviceUid(deviceUid);\n };\n initDeviceUid();\n }, []);\n\n // Init client\n useEffect(() => {\n const initClient = async () => {\n try {\n const deviceUid = await checkDeviceUid();\n\n const responseInterceptors = {\n onFulfilled: (response: any) => response,\n onRejected: async (error: any) => {\n const originalRequest = error.config;\n const token = tokenStorage.getAuthToken();\n\n if (error.response?.status === 401 && !originalRequest._retry) {\n const retryAttempts = parseInt(getFromLS(retryAttemptsRefreshToken) || \"0\", 10);\n if (retryAttempts >= httpMaxRetries) {\n await signOut();\n setToLS(retryAttemptsRefreshToken, 0);\n return Promise.reject(error);\n }\n\n setToLS(retryAttemptsRefreshToken, `${retryAttempts + 1}`);\n originalRequest._retry = true;\n\n if (token) {\n try {\n const result = await refreshToken();\n if (result?.data?.idToken) {\n originalRequest.headers.Authorization = `Bearer ${result?.data?.idToken}`;\n return axios(originalRequest);\n }\n } catch (refreshError) {\n console.error(\"Failed to refresh token:\", refreshError);\n await signOut();\n return Promise.reject(refreshError);\n }\n }\n }\n },\n };\n\n const requestInterceptors = {\n onFulfilled: (config: any) => config,\n onRejected: (error: any) => Promise.reject(error),\n };\n\n const axiosConfig = {\n headers: {\n \"Content-Type\": \"application/json\",\n \"Device-UID\": deviceUid,\n },\n };\n\n const config: ServiceConfig = {\n queryClient,\n axiosConfig,\n responseInterceptors,\n requestInterceptors,\n useDevTool: true,\n };\n\n setCommonServiceConfig(config);\n } catch (error) {\n console.error(error);\n }\n };\n\n initClient();\n }, [queryClient]);\n\n if (!commonServiceConfig) {\n return <></>;\n }\n\n return (\n <PGLCoreServiceProvider\n {...commonServiceConfig}\n baseURL={`${serviceApiUrl[environment].API_BASE_URL}/${version}`}\n baseCoreURL={`${serviceApiUrl[environment].API_BASE_CORE_URL}/${version}`}\n >\n <RewardServiceProvider\n {...commonServiceConfig}\n // baseURL={`${serviceApiUrl[environment].API_REWARD_URL}/${version}`}\n baseURL={`${serviceApiUrl[environment].API_REWARD_URL}/v1`} // todo: using v1 until backend fully migrate\n >\n <AchievementServiceProvider\n {...commonServiceConfig}\n baseURL={`${serviceApiUrl[environment].API_ACHIEVEMENT_URL}/${version}`}\n >\n <GenerateCertificateServiceProvider\n {...commonServiceConfig}\n baseURL={`${serviceApiUrl[environment].API_GENERATE_CERTIFICATE_URL}/v1`}\n >\n <PhygitalConsentProvider\n {...commonServiceConfig}\n deviceId={deviceUid}\n baseURL={`${serviceApiUrl[environment].API_CONSENT_URL}/v1`}\n axiosConfig={{\n headers: {\n \"Content-Type\": \"application/json\",\n },\n }}\n >\n <GtagConsentSync />\n <GtagGtmScriptToggleFromConsent/>\n {children}\n </PhygitalConsentProvider>\n </GenerateCertificateServiceProvider>\n </AchievementServiceProvider>\n </RewardServiceProvider>\n </PGLCoreServiceProvider>\n );\n};\n","import React, { useMemo } from \"react\";\n\nimport { ServicesProvider } from \"./ServicesProvider\";\nimport { APIConfig } from \"../types/service\";\nimport { QueryClient } from \"@tanstack/react-query\";\n\nimport { AuthProvider } from \"../modules/auth\";\nimport serviceApiUrl from \"../constants/service\";\nimport { OpenReplayConfig, SessionReplayProvider } from \"../modules/session-replay\";\n\ninterface TapquestCoreProviderProps {\n children: React.ReactNode;\n queryClient: QueryClient;\n apiConfig: APIConfig;\n}\n\nexport const TapquestCoreProvider: React.FC<TapquestCoreProviderProps> = ({\n children,\n queryClient,\n apiConfig,\n // authCallbacks\n}) => {\n const { environment } = apiConfig;\n\n const sessionReplayConfig: OpenReplayConfig | undefined = useMemo(() => {\n const projectKey = process.env.NEXT_PUBLIC_OPENREPLAY_PROJECT_KEY;\n\n // Only configure if project key is provided\n if (!projectKey) {\n return undefined;\n }\n\n return {\n projectKey,\n ingestPoint: process.env.NEXT_PUBLIC_OPENREPLAY_INGEST_POINT,\n debug: process.env.NODE_ENV === \"development\",\n captureExceptions: true,\n capturePerformance: true,\n obscureTextEmails: true,\n obscureInputEmails: true,\n };\n }, []);\n\n return (\n <SessionReplayProvider config={sessionReplayConfig}>\n <ServicesProvider\n queryClient={queryClient}\n apiConfig={apiConfig}\n >\n <AuthProvider\n baseURL={`${serviceApiUrl[environment].API_BASE_URL}`}\n queryClient={queryClient}\n >\n {children}\n </AuthProvider>\n </ServicesProvider>\n </SessionReplayProvider>\n );\n};","import { Achievement, useManyAchievements } from \"@phygitallabs/achievement\";\nimport { EntityRewardModel } from \"@phygitallabs/reward\";\nimport { useCreateModelGroupReward } from \"@phygitallabs/reward\";\nimport { useEffect, useMemo } from \"react\";\n\ninterface UseAchivementPlusRewardModelParams {\n campaignId: string;\n}\ninterface GroupRewardData {\n reward_models: EntityRewardModel[][];\n}\n\nexport interface AchievementWithRewardModel {\n id: string;\n name: string;\n reward_model: EntityRewardModel | null;\n subAchievements: {\n id: string;\n reward_model: EntityRewardModel | null;\n }[];\n}\n\nfunction buildMappedAchievements(\n achievements: Achievement[],\n groupRewardData: GroupRewardData\n) {\n if (!groupRewardData?.reward_models) return [];\n\n const rewardModels = groupRewardData.reward_models;\n\n return achievements.map((achievement, achievementIndex) => {\n const parentReward = rewardModels[achievementIndex]?.[0] || null;\n\n const subAchievements =\n achievement.subAchievementIds?.map((subId: string, subIndex: number) => {\n const reward =\n rewardModels[\n achievementIndex * (achievement.subAchievementIds?.length || 0) +\n subIndex +\n 1\n ]?.[0] || null;\n\n return {\n id: subId,\n reward_model: reward,\n };\n }) || [];\n\n return {\n id: achievement.id,\n name: achievement.name,\n reward_model: parentReward,\n subAchievements,\n };\n });\n}\n\nconst useAchivementPlusRewardModel = ({\n campaignId,\n}: UseAchivementPlusRewardModelParams): {\n mappedAchievements: AchievementWithRewardModel[];\n isLoading: boolean;\n} => {\n const { data: achievements, isLoading: isLoadingAchievements } =\n useManyAchievements(\n {\n \"filter.labels\": { campaign_id: campaignId },\n \"filter.type\": \"group_mission\",\n \"pagination.limit\": 200,\n },\n { enabled: !!campaignId }\n );\n\n const groupRewardIds = useMemo(() => {\n if (!achievements?.data) return [];\n return achievements.data\n .map((achievement) => achievement.groupRewardId)\n .filter((id): id is string => id !== undefined);\n }, [achievements?.data]);\n\n const {\n mutate: fetchGroupRewardModels,\n data: groupRewardModelsData,\n isPending: isPendingGroupRewardModels,\n } = useCreateModelGroupReward();\n useEffect(() => {\n if (groupRewardIds.length > 0) {\n fetchGroupRewardModels({ group_reward_ids: groupRewardIds });\n }\n }, [groupRewardIds, fetchGroupRewardModels]);\n\n const mappedAchievements: AchievementWithRewardModel[] = useMemo(() => {\n if (!groupRewardModelsData?.data || !achievements?.data) return [];\n return buildMappedAchievements(\n achievements.data,\n groupRewardModelsData.data\n );\n }, [groupRewardModelsData, achievements?.data]);\n\n return {\n mappedAchievements,\n isLoading: isLoadingAchievements || isPendingGroupRewardModels,\n };\n};\n\nexport default useAchivementPlusRewardModel;\n","export enum Environment {\n DEV = \"dev\",\n STAGING = \"staging\",\n PRODUCTION = \"production\",\n}\n\nexport type EnvironmentType = \"dev\" | \"staging\" | \"production\";\nexport type APIVersionType = \"v1\" | \"v2\";"]}
|
|
1
|
+
{"version":3,"sources":["../index.ts","../src/index.ts","../src/modules/achievement/helpers/useClearAchievementProgressCache.tsx","../src/modules/achievement/helpers/index.ts","../src/modules/achievement/hooks/index.ts","../src/modules/achievement/types/index.ts","../src/modules/auth/constants/index.ts","../src/modules/auth/helpers/index.ts","../src/modules/session-replay/utils/index.ts","../src/modules/session-replay/providers/SessionReplayProvider.tsx","../src/modules/session-replay/hooks/useSessionReplay.ts","../src/modules/data-tracking/hooks/index.ts","../src/modules/data-tracking/DataTrackingConsentSync.tsx","../src/modules/notification/index.ts","../src/constants/service.ts","../src/modules/notification/providers/index.tsx","../src/modules/achievement-tracking/providers/AchievementTrackingProvider.tsx","../src/modules/reward/types/enums.ts","../src/modules/auth/store/authStore.ts","../src/modules/auth/utils/user.ts","../src/modules/auth/hooks/useTokenRefresher.ts","../src/modules/auth/providers/AuthProvider.tsx","../src/modules/auth/hooks/useGoogleLogin.ts","../src/modules/scan-chip/hooks/index.tsx","../src/modules/campaign/types/campaign.ts","../src/modules/location/utils/locationHelpers.ts","../src/providers/ServicesProvider.tsx","../src/providers/TapquestCoreProvider.tsx","../src/modules/achivementWithReward/hooks/achivementPlusRewardModel.ts","../src/types/common.ts"],"names":["index_exports","__export","ALLOWED_ORIGINS","AchievementRuleActionType","AchievementServiceProvider","AchievementTrackingProvider","AchievementType","AuthProvider","CALLBACK_URL","CampaignState","CmentityRewardType","CookieConsentBanner","DataTrackingConsentSync","Environment","NotificationProvider","PhygitalConsentProvider","RewardClaimStatus","SessionReplayProvider","TapquestCoreProvider","TaskType","TrackerContext","UserSourceType","accessTokenKey","checkDeviceUid","chipAuthTokenKey","cn","convertSnakeToCamel","decodeJWTToken","deviceUIDKey","fileToBase64","filterLocationsByProperty","generateDeviceId","getAccessToken","getActionsFromAchievementRule","getChipAuthToken","getDeviceUid","getLocationIdsFromAchievementRule","getRefreshToken","getRetryAttemptsRefreshToken","getSessionUserId","getSurveyIdsFromAchievementRule","getUserInfo","httpMaxRetries","isAchievementCompleted","isBrowser","locationQueryKeys","memoriesKey","parse","refreshTokenKey","removeAccessToken","removeChipAuthToken","removeDeviceUid","removeRefreshToken","removeUserInfo","resetMemoriesQuery","retryAttemptsRefreshToken","setAccessToken","setChipAuthToken","setDeviceUid","setRefreshToken","setRetryAttemptsRefreshToken","setUserInfo","sortLocationsByIndex","transformProtoUserData","useAchievementProgress","useAchievementTracking","achivementPlusRewardModel_default","useAddFrame","useAuth","useAuthStore","useOneCampaign","useCancelUserRewardsRequest","useChipScanStory","useClaimUserReward","useClearAchievementProgressCache","useClearUserRewardCache","useCreateCertificate","useCreateCertificateAnonymous","useCreateCertificateWithMask","useCreateClickButtonActionLog","useCreateMemory","useCreateModelGroupReward","useCreateRewardModel","useDataTracking","useDefaultServiceGetPollStats","useDefaultServicePostPoll","useDeleteRewardModel","useGenerateFansipanCertificate","useGenerateTemplateCertificate","useGenerateThaocamvienCertificate","useGetRewardModel","useGetUserRewards","useGoogleLogin","useInfiniteMemories","useListRewardModels","useOneLocation","useUserCampaignsCompletedLocation","useManyLocations","useManyAchievementProgress","useManyAchievementProgressCore","useManyAchievements","useManyAchievementsByLocation","useManyAchievementsRewardModels","useManyChildrenAchievements","useManyMemory","useManyUserActionLocations","useManyUserRewards","useMyProfile","useNotificationRewardHandler","useNotificationStore","useOneAchievement","useOneMemory","useOneUserCampaign","usePGLCoreService","usePageVisibility","usePhygitalConsent","useScanChip","useSendEmail","useSessionReplay","useSyncCheckin","useTCVNotificationRewardHandler","useTokenRefresher","useUpdateMyProfile","useUpdateRewardModel","useUploadMedia","useUserAchievementAction","useUserCampaignAction","useV1ListRewards","useWebSocket","userInfoKey","wrapTextWithFont","src_exports","queryClient","useQueryClient","useCallback","options","refetchActive","refetchInactive","query","queryKey","achievement","locationIds","ruleList","rule","filterList","filter","surveyIds","actions","_a","obj","item","converted","key","camelKey","_","letter","params","isLoggedIn","queryParams","data","useManyAchievementProgressByDeviceCore","generateDeviceFingerprint","error","uuidv4","timestamp","fingerprintRaw","hashBuffer","b","deviceId","deviceUID","value","userInfo","userData","userId","createContext","defaultGetUserId","uuidV4","newTracker","config","_b","_c","_d","_e","_f","_g","OpenReplay","getUserId","trackerConfig","tracker","reducer","state","action","debug","children","dispatch","useReducer","initTracker","startTracking","setUserId","setMetadata","metadata","jsx","context","useContext","GTAG_ANALYTICS_GRANTED","GTAG_ADS_GRANTED","GTAG_ADS_DENIED","pushEventToDataLayer","event","pushEventToGA","eventName","eventData","w","pushEventToPosthog","posthog","consent","isAnalyticsAllowed","isAdvertisingAllowed","useTools","gaId","scriptId","script","gtmId","noscriptId","noscript","iframe","GTAG_CONSENT_DENIED","togglePostHog","toggleOpenReplay","toggleGoogleAdSense","pauseGoogleAdSense","useEffect","notification_exports","__reExport","notification_api_star","serviceApiUrl","service_default","autoConnect","environment","user","onWebSocketOpen","onWebSocketClose","onWebSocketMessage","webSocketUrl","NotificationProviderApi","AchievementTrackingContext","achievements","trackEvent","trackedNotificationIds","useRef","challenges","quests","useMemo","challengesList","questsList","unsubscribe","notifications","latestNotification","notificationId","challengeType","trackChallengeStart","actionType","matchingAchievements","trackQuestStart","quest","isReady","contextValue","initialState","create","devtools","persist","subscribeWithSelector","immer","set","get","isLoading","newCleanupFunctions","callbacks","email","password","eventCallbacks","response","authService","tokenStorage","errorMessage","currentDomain","cleanupFunctions","refreshToken","cleanupError","verifyCodeService","refreshTokenResponse","isSignedIn","isInitialized","token","wasSignedIn","createJSONStorage","accessToken","tokenDecoded","jwtDecode","signOut","handleRefreshToken","useQuery","AuthStateManager","updateHeaders","useAuthenticationHeaders","updateHeadersPGL","coreApi","updateHeadersAchievement","useAchievementService","updateHeadersReward","useRewardService","updateHeadersGenerateCertificate","useGenerateCertificateService","previousIsSignedIn","unsub","userProfile","userService","transformedUserData","unsubTokenChange","TokenRefresher","baseURL","jsxs","AuthenticationProvider","onSuccess","onError","onPopupBlocked","onPopupClosed","signInWithGoogle","setIsSignedIn","setIsLoading","googleLink","setGoogleLink","useState","popupRef","gotDataRef","timerRef","errorRef","handleTokenRefresh","refresh","newToken","cleanup","handleMessage","allowedOrigins","signIn","left","top","id","onScanChipError","header","isError","isSuccess","locations","a","propertyName","location","ServicesProvider","apiConfig","version","commonServiceConfig","setCommonServiceConfig","deviceUid","originalRequest","retryAttempts","getFromLS","setToLS","result","axios","refreshError","PGLCoreServiceProvider","RewardServiceProvider","GenerateCertificateServiceProvider","Fragment","sessionReplayConfig","projectKey","buildMappedAchievements","groupRewardData","rewardModels","achievementIndex","parentReward","subAchievements","subId","subIndex","reward","useAchivementPlusRewardModel","campaignId","isLoadingAchievements","groupRewardIds","fetchGroupRewardModels","groupRewardModelsData","isPendingGroupRewardModels"],"mappings":"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","file":"index.cjs","sourcesContent":["export * from \"./src\";","// Export all modules\nexport * from \"./modules/achievement\";\nexport * from \"./modules/achievement-tracking\";\nexport * from \"./modules/reward\";\nexport * from \"./modules/notification\";\nexport * from \"./modules/memory\";\n\nexport * from \"./modules/auth\";\nexport * from \"./modules/user-profile\";\n\nexport * from \"./modules/scan-chip\";\nexport * from \"./modules/campaign\";\n\nexport * from \"./modules/location\";\n\nexport * from \"./modules/generate-certificate\";\n\nexport * from \"./modules/data-tracking\";\n\nexport * from \"./modules/session-replay\";\n\nexport * from \"./providers\";\n\nexport * from \"./modules/achivementWithReward\";\n\nexport * from \"./modules/send-email\";\n\nexport * from \"./modules/session-replay\";\n\nexport * from \"./helper\";\n\nexport * from \"./modules/session-replay\";\n\nexport * from \"./modules/action-logs\";\n\nexport * from \"./modules/consent\";\n\n// Export types\nexport * from \"./types/common\";\n","import { useQueryClient } from \"@tanstack/react-query\";\nimport { useCallback } from \"react\";\n\nexport function useClearAchievementProgressCache() {\n const queryClient = useQueryClient();\n\n const clearCache = useCallback(\n (options?: { refetchActive?: boolean; refetchInactive?: boolean }) => {\n const { refetchActive = true, refetchInactive = false } = options || {};\n\n // Clear all achievement progress related queries using predicate\n // Query keys from different packages:\n // 1. @phygitallabs/achievement (logged in): ['users', 'userAchievements', 'achievementProgressMany', ...]\n // 2. @phygitallabs/api-core (device UID): ['userAchievements', 'achievementProgress', deviceId, ...]\n // 3. @phygitallabs/achievement (device UID alt): ['deviceUidAchievementProgressMany', ...]\n\n queryClient.invalidateQueries({\n predicate: (query) => {\n const queryKey = query.queryKey as string[];\n return (\n queryKey.includes(\"achievementProgressMany\") || // For logged in users\n queryKey.includes(\"achievementProgress\") || // For device UID (api-core)\n queryKey.includes(\"deviceUidAchievementProgressMany\") // For device UID (achievement pkg)\n );\n },\n refetchType: refetchActive ? (refetchInactive ? \"all\" : \"active\") : \"none\",\n });\n\n console.log(\"🔄 Achievement progress cache cleared\");\n },\n [queryClient]\n );\n return {\n clearCache,\n };\n}\n","import { Achievement, UserAchievementProgress } from \"../types\";\n\nconst getLocationIdsFromAchievementRule = (achievement: Achievement) => {\n if (!achievement.rule) return [];\n const locationIds: string[] = [];\n Object.values(achievement.rule).forEach((ruleList) => {\n if (!ruleList.rules) return;\n ruleList.rules.forEach((rule) => {\n if (!rule.filter) return;\n Object.values(rule.filter).forEach((filterList) => {\n if (!filterList.filters) return;\n filterList.filters.forEach((filter) => {\n if (filter.label === \"location_id\" && filter.value) {\n if (Array.isArray(filter.value)) {\n locationIds.push(...filter.value);\n } else {\n locationIds.push(filter.value);\n }\n }\n });\n });\n });\n });\n return Array.from(new Set(locationIds)) as string[];\n};\n\nconst getSurveyIdsFromAchievementRule = (achievement: Achievement) => {\n if (!achievement.rule) return [];\n const surveyIds: string[] = [];\n Object.values(achievement.rule).forEach((ruleList) => {\n if (!ruleList.rules) return;\n ruleList.rules.forEach((rule) => {\n if (!rule.filter) return;\n Object.values(rule.filter).forEach((filterList) => {\n if (!filterList.filters) return;\n filterList.filters.forEach((filter) => {\n if (filter.label === \"survey_id\" && filter.value) {\n if (Array.isArray(filter.value)) {\n surveyIds.push(...filter.value);\n } else {\n surveyIds.push(filter.value);\n }\n }\n });\n });\n });\n });\n return Array.from(new Set(surveyIds)) as string[];\n};\n\nconst getActionsFromAchievementRule = (achievement: Achievement) => {\n if (!achievement?.rule) return [];\n const actions: string[] = [];\n Object.values(achievement?.rule || {}).forEach((ruleList) => {\n if (!ruleList?.rules) return;\n ruleList?.rules?.forEach((rule) => {\n if (rule?.action) {\n actions.push(rule?.action);\n }\n });\n });\n return Array.from(new Set(actions)) as string[];\n};\n\nconst isAchievementCompleted = (achievement: UserAchievementProgress) => {\n return achievement.isCompleted || achievement.overallPercentage === 100;\n};\n\ntype SnakeToCamelCase<S extends string> = S extends `${infer T}_${infer U}`\n ? `${T}${Capitalize<SnakeToCamelCase<U>>}`\n : S;\n\ntype ConvertSnakeToCamel<T> = T extends (infer U)[]\n ? ConvertSnakeToCamel<U>[]\n : T extends Record<string, unknown>\n ? {\n [K in keyof T as K extends string ? SnakeToCamelCase<K> : K]: ConvertSnakeToCamel<T[K]>;\n }\n : T;\n\n/**\n * Converts snake_case keys to camelCase keys in an object or array of objects\n */\nexport function convertSnakeToCamel<T>(obj: T): ConvertSnakeToCamel<T> {\n if (obj === null || obj === undefined) {\n return obj as ConvertSnakeToCamel<T>;\n }\n\n if (Array.isArray(obj)) {\n return obj.map((item) => convertSnakeToCamel(item)) as ConvertSnakeToCamel<T>;\n }\n\n if (typeof obj === \"object\" && obj.constructor === Object) {\n const converted: Record<string, unknown> = {};\n\n for (const key in obj) {\n if (obj.hasOwnProperty(key)) {\n const camelKey = key.replace(/_([a-z])/g, (_, letter) => letter.toUpperCase());\n converted[camelKey] = convertSnakeToCamel((obj as Record<string, unknown>)[key]);\n }\n }\n\n return converted as ConvertSnakeToCamel<T>;\n }\n\n return obj as ConvertSnakeToCamel<T>;\n}\n\nexport {\n getLocationIdsFromAchievementRule,\n getActionsFromAchievementRule,\n getSurveyIdsFromAchievementRule,\n isAchievementCompleted,\n};\n\nexport { useClearAchievementProgressCache } from \"./useClearAchievementProgressCache\";\n","import { GetManyAchievementProgressParams, GetManyDeviceUidAchievementProgressParams, GetManyUserOrDeviceAchievementProgressParams } from \"@phygitallabs/achievement\";\n\nimport {\n GetManyAchievementProgressByDeviceParams,\n} from \"@phygitallabs/api-core\";\n\nimport { useManyAchievementProgressByDevice as useManyAchievementProgressByDeviceCore } from \"@phygitallabs/api-core\";\n// Core react query hooks\nimport {\n useManyAchievementProgress as useManyAchievementProgressCore,\n useAchievementProgress,\n useManyAchievements,\n useUserAchievementAction,\n useOneAchievement,\n useManyAchievementsRewardModels,\n useManyAchievementsByLocation,\n useManyChildrenAchievements\n} from \"@phygitallabs/achievement\";\n\nimport { isAchievementCompleted, convertSnakeToCamel } from \"../helpers\";\n\nexport {\n useAchievementProgress,\n useManyAchievements,\n useUserAchievementAction,\n useManyChildrenAchievements,\n useManyAchievementProgressCore,\n useOneAchievement,\n useManyAchievementsRewardModels,\n useManyAchievementsByLocation\n}\n\n// Customize react query hooks\n\n// Get achievement progress list by userid or deviceuid base on login status\nexport const useManyAchievementProgress = (\n params: GetManyUserOrDeviceAchievementProgressParams,\n options?: any\n) => {\n\n const isLoggedIn = !!params.userId;\n\n const queryParams = isLoggedIn\n ? {\n achievementIds: params.achievementIds,\n userId: params.userId!,\n applicationId: params.applicationId,\n } as GetManyAchievementProgressParams\n : {\n achievement_ids: params.achievementIds,\n device_uid: params.deviceUid!,\n applicationId: params.applicationId,\n } as GetManyDeviceUidAchievementProgressParams;\n\n if (isLoggedIn) {\n return useManyAchievementProgressCore(queryParams as GetManyAchievementProgressParams,\n {\n ...options,\n select: (data) => data.map((item) => ({\n ...item,\n isCompleted: isAchievementCompleted(item),\n })),\n }\n );\n }\n\n return useManyAchievementProgressByDeviceCore(\n queryParams as GetManyAchievementProgressByDeviceParams, {\n ...options,\n select: (data) => {\n const camelCaseData = convertSnakeToCamel(data);\n return camelCaseData.map((item) => ({\n ...item,\n isCompleted: isAchievementCompleted(item),\n }));\n },\n });\n};\n\n","export {\n AchievementRuleActionType,\n AchievementServiceProvider,\n} from \"@phygitallabs/achievement\";\n\nimport type { Achievement, GetAchievementProgressResponse, UserAchievementProgress } from \"@phygitallabs/achievement\";\n\nexport {\n Achievement,\n GetAchievementProgressResponse,\n UserAchievementProgress,\n}\n\n// Combined types for hooks\nexport interface AchievementWithProgress {\n achievement: Achievement;\n progress: UserAchievementProgress | null;\n hasProgressError?: boolean;\n hasAchievementError?: boolean;\n}\n\nexport interface UseManyAchievementWithProgressParams {\n userId?: string;\n deviceUid?: string;\n applicationId?: string;\n achievementIds?: string[];\n}\n\nexport interface UseManyAchievementWithProgressReturn {\n data: AchievementWithProgress[];\n isLoading: boolean;\n isSuccess: boolean;\n achievementsError: Error | null;\n progressError: Error | null;\n refetchAchievements: () => void;\n refetchProgress: () => void;\n refetchAll: () => void;\n}\n\nexport enum AchievementType {\n DEFAULT = \"default\",\n MULTIPLE_CHECK_INS = \"multiple_check_ins\",\n RANDOM_CHECK_INS = \"random_check_ins\",\n GROUP_MISSION = \"group_mission\",\n SURVEY = \"survey\",\n}\n","export const userInfoKey = \"phygital-user-info\";\nexport const accessTokenKey = \"accessToken\";\nexport const refreshTokenKey = \"refreshToken\";\nexport const httpMaxRetries = 3;\nexport const retryAttemptsRefreshToken = \"retryAttemptsRefreshToken\";\n\nexport const deviceUIDKey = \"Device-UID\";\nexport const chipAuthTokenKey = \"chip-auth-token\";\n\nexport const CALLBACK_URL = \"https://s3-sgn10.fptcloud.com/nomion-assets/platform/callback.html\";\n\nexport const ALLOWED_ORIGINS = [\n \"https://s3-sgn10.fptcloud.com\",\n \"https://accounts.google.com/\",\n];","import {\n deviceUIDKey,\n chipAuthTokenKey,\n retryAttemptsRefreshToken,\n accessTokenKey,\n refreshTokenKey,\n userInfoKey,\n} from \"../constants\";\n\nimport { v4 as uuidv4 } from \"uuid\";\n\nexport const generateDeviceId = async (): Promise<string> => {\n try {\n const deviceFingerprint = await generateDeviceFingerprint();\n return deviceFingerprint;\n } catch (error) {\n console.error(\"Error generating device fingerprint:\", error);\n return uuidv4();\n }\n};\n\nconst generateDeviceFingerprint = async (): Promise<string> => {\n const timestamp = new Date().toISOString(); // UTC timestamp\n\n const fingerprintRaw = [\n navigator.userAgent,\n navigator.language,\n screen.width,\n screen.height,\n screen.colorDepth,\n Intl.DateTimeFormat().resolvedOptions().timeZone,\n navigator.platform,\n navigator.hardwareConcurrency,\n timestamp, // Include timestamp\n ].join(\"::\");\n\n const encoder = new TextEncoder();\n const data = encoder.encode(fingerprintRaw);\n const hashBuffer = await crypto.subtle.digest(\"SHA-256\", data);\n const hashArray = Array.from(new Uint8Array(hashBuffer));\n const fingerprint = hashArray\n .map((b) => b.toString(16).padStart(2, \"0\"))\n .join(\"\");\n return fingerprint;\n};\n\nexport default generateDeviceFingerprint;\n\n\nexport const getDeviceUid = () => {\n if (typeof window === \"undefined\") return null;\n return localStorage.getItem(deviceUIDKey);\n};\n\nexport const setDeviceUid = (deviceId: string) => {\n if (typeof window === \"undefined\") return;\n localStorage.setItem(deviceUIDKey, deviceId);\n};\n\nexport const removeDeviceUid = () => {\n if (typeof window === \"undefined\") return;\n localStorage.removeItem(deviceUIDKey);\n};\n\nexport const checkDeviceUid = async (): Promise<string> => {\n // if (typeof window === \"undefined\") return null;\n\n let deviceUID = getDeviceUid();\n\n if (!deviceUID) {\n deviceUID = await generateDeviceId();\n setDeviceUid(deviceUID);\n }\n\n return deviceUID;\n};\n\n// CHIP AUTH TOKEN\nexport const getChipAuthToken = () => {\n if (typeof window === \"undefined\") return null;\n return localStorage.getItem(chipAuthTokenKey);\n};\n\nexport const setChipAuthToken = (value: string) => {\n if (typeof window === \"undefined\") return;\n localStorage.setItem(chipAuthTokenKey, value);\n};\n\nexport const removeChipAuthToken = () => {\n if (typeof window === \"undefined\") return;\n localStorage.removeItem(chipAuthTokenKey);\n};\n\n// RETRY ATTEMPTS\nexport const getRetryAttemptsRefreshToken = () => {\n if (typeof window === \"undefined\") return null;\n return localStorage.getItem(retryAttemptsRefreshToken);\n};\n\nexport const setRetryAttemptsRefreshToken = (value: string) => {\n if (typeof window === \"undefined\") return;\n localStorage.setItem(retryAttemptsRefreshToken, value);\n};\n\n// ACCESS TOKEN\nexport const getAccessToken = () => {\n if (typeof window === \"undefined\") return null;\n return localStorage.getItem(accessTokenKey);\n};\n\nexport const setAccessToken = (value: string) => {\n if (typeof window === \"undefined\") return;\n localStorage.setItem(accessTokenKey, value);\n};\n\nexport const removeAccessToken = () => {\n if (typeof window === \"undefined\") return;\n localStorage.removeItem(accessTokenKey);\n};\n\n// REFRESH TOKEN\nexport const getRefreshToken = () => {\n if (typeof window === \"undefined\") return null;\n return localStorage.getItem(refreshTokenKey);\n};\n\nexport const setRefreshToken = (value: string) => {\n if (typeof window === \"undefined\") return;\n localStorage.setItem(refreshTokenKey, value);\n};\n\nexport const removeRefreshToken = () => {\n if (typeof window === \"undefined\") return;\n localStorage.removeItem(refreshTokenKey);\n};\n\n// USER INFO\nexport const getUserInfo = () => {\n if (typeof window === \"undefined\") return null;\n const userInfo = localStorage.getItem(userInfoKey);\n if (!userInfo) return null;\n try {\n return JSON.parse(userInfo);\n } catch (error) {\n console.error(\"Failed to parse stored user data:\", error);\n return null;\n }\n};\n\nexport const setUserInfo = (userData: any) => {\n if (typeof window === \"undefined\") return;\n localStorage.setItem(userInfoKey, JSON.stringify(userData));\n};\n\nexport const removeUserInfo = () => {\n if (typeof window === \"undefined\") return;\n localStorage.removeItem(userInfoKey);\n};","import { getDeviceUid } from \"../../auth/helpers\";\n\nexport const getSessionUserId = (userId?: string): string | null => {\n if (userId) {\n return userId;\n }\n return getDeviceUid();\n};\n\nexport const isBrowser = (): boolean => {\n return typeof window !== \"undefined\";\n};\n","import React, { createContext, useReducer } from \"react\";\nimport { v4 as uuidV4 } from \"uuid\";\n\nimport {\n SessionReplayProviderProps,\n TrackerState,\n TrackerAction,\n TrackerContextValue,\n OpenReplayConfig,\n} from \"../types\";\n\nimport {\n isBrowser\n} from \"../utils\";\n\nexport const TrackerContext = createContext<TrackerContextValue | null>(null);\n\nfunction defaultGetUserId(): string {\n return uuidV4();\n}\n\nasync function newTracker(config: OpenReplayConfig) {\n try {\n // Dynamic import for SSR compatibility\n const OpenReplay = (await import(\"@openreplay/tracker\")).default;\n\n // Get user ID function (custom or default UUID generator)\n const getUserId =\n config?.userIdEnabled && config?.getUserId\n ? config.getUserId\n : defaultGetUserId;\n\n // Build tracker configuration\n const trackerConfig: any = {\n projectKey:\n config?.projectKey || process.env.NEXT_PUBLIC_OPENREPLAY_PROJECT_KEY,\n ingestPoint: config?.ingestPoint,\n // Capture options\n captureExceptions: config.captureExceptions ?? true,\n capturePerformance: config.capturePerformance ?? true,\n // Network tracking\n network: config.network || {\n capturePayload: true,\n sanitizer: (data: any) => data,\n },\n // Console tracking\n console: config.console || {\n levels: [\"error\", \"warn\", \"log\"],\n },\n // Privacy settings\n obscureTextEmails: config.obscureTextEmails ?? true,\n obscureTextNumbers: config.obscureTextNumbers ?? false,\n obscureInputEmails: config.obscureInputEmails ?? true,\n // Development mode\n __DISABLE_SECURE_MODE:\n config.__DISABLE_SECURE_MODE ??\n (typeof process !== \"undefined\" && process.env?.NODE_ENV === \"development\"),\n };\n\n // Initialize tracker\n const tracker = new OpenReplay(trackerConfig);\n\n // Set user ID if enabled\n if (config?.userIdEnabled) {\n const userId = getUserId();\n tracker.setUserID(userId);\n console.log(\"User ID set:\", userId);\n }\n\n console.log(\"OpenReplay tracker initialized\");\n console.log(\"Project Key:\", trackerConfig.projectKey);\n console.log(\"Ingest Point:\", trackerConfig.ingestPoint);\n\n return tracker;\n } catch (error: any) {\n console.error(\"Failed to create tracker:\", error);\n throw error;\n }\n}\n\nfunction reducer(state: TrackerState, action: TrackerAction): TrackerState {\n const { debug = false } = state.config;\n\n switch (action.type) {\n case \"init\":\n // Only initialize if tracker doesn't exist and we're in browser\n if (!state.tracker && isBrowser()) {\n if (!state.config.projectKey && !process.env.NEXT_PUBLIC_OPENREPLAY_PROJECT_KEY) {\n console.warn(\n debug,\n \"Project key not found. Skipping session replay initialization.\"\n );\n return state;\n }\n\n // Return state with tracker promise\n // The tracker will be created asynchronously\n return {\n ...state,\n tracker: newTracker(state.config),\n };\n }\n return state;\n\n case \"start\":\n // Start tracking if tracker exists\n if (state.tracker) {\n Promise.resolve(state.tracker)\n .then((tracker) => {\n tracker.start();\n console.log(debug, \"Session replay tracker started\");\n })\n .catch((error) => {\n console.error(\"Failed to start tracker:\", error);\n });\n } else {\n console.warn(debug, \"Tracker not initialized. Call initTracker() first.\");\n }\n return state;\n\n case \"setUserId\":\n // Set or update user ID\n if (state.tracker) {\n Promise.resolve(state.tracker)\n .then((tracker) => {\n tracker.setUserID(action.payload);\n console.log(debug, \"User ID updated:\", action.payload);\n })\n .catch((error) => {\n console.error(\"Failed to set user ID:\", error);\n });\n } else {\n console.warn(debug, \"Tracker not initialized. Call initTracker() first.\");\n }\n return state;\n\n // Set metadata\n case \"setMetadata\":\n if (state.tracker) {\n Promise.resolve(state.tracker)\n .then((tracker) => {\n Object.entries(action.payload || {})?.forEach(([key, value]) => {\n tracker.setMetadata(key, value);\n });\n\n console.log(debug, \"Metadata updated:\", action.payload.metadata);\n })\n .catch((error) => {\n console.error(\"Failed to set metadata:\", error);\n });\n } else {\n console.warn(debug, \"Tracker not initialized. Call initTracker() first.\");\n }\n return state;\n\n default:\n return state;\n }\n}\n\nexport const SessionReplayProvider: React.FC<SessionReplayProviderProps> = ({\n children,\n config = {},\n}) => {\n const [, dispatch] = useReducer(reducer, {\n tracker: null,\n config,\n });\n\n const initTracker = () => dispatch({ type: \"init\" })\n const startTracking = () => dispatch({ type: \"start\" })\n const setUserId = (userId: string) => dispatch({ type: \"setUserId\", payload: userId })\n const setMetadata = (metadata: Record<string, any>) => dispatch({ type: \"setMetadata\", payload: metadata })\n\n // // init and start tracker\n // useEffect(() => {\n // initTracker();\n // startTracking();\n // }, []);\n\n return <TrackerContext.Provider value={{\n initTracker,\n startTracking,\n setUserId,\n setMetadata\n }}>{children}</TrackerContext.Provider>;\n};\n\nexport default SessionReplayProvider;\n","import { useContext } from \"react\";\nimport { TrackerContext } from \"../providers/SessionReplayProvider\";\nimport { TrackerContextValue } from \"../types\";\n\nexport function useSessionReplay(): TrackerContextValue {\n const context = useContext(TrackerContext);\n\n if (!context) {\n throw new Error(\n \"useSessionReplay must be used within a SessionReplayProvider. \" +\n \"Make sure your component is wrapped with <SessionReplayProvider>.\"\n );\n }\n\n return context;\n}\n","import { usePhygitalConsent } from \"@phygitallabs/phygital-consent\";\nimport posthog from \"posthog-js\";\nimport { useSessionReplay } from \"../../../modules/session-replay\";\n\ndeclare global {\n interface Window {\n dataLayer: unknown[];\n gtag?: GtagConsent;\n }\n}\n\ntype GtagConsent = (\n command: \"consent\",\n action: \"default\" | \"update\",\n params: Record<string, string>\n) => void;\n\nconst GTAG_ANALYTICS_GRANTED = { analytics_storage: \"granted\" } as const;\nconst GTAG_ADS_GRANTED = {\n ad_storage: \"granted\",\n ad_user_data: \"granted\",\n ad_personalization: \"granted\",\n} as const;\nconst GTAG_ADS_DENIED = {\n ad_storage: \"denied\",\n ad_user_data: \"denied\",\n ad_personalization: \"denied\",\n} as const;\n\n// GTM\nconst pushEventToDataLayer = (event: string, data: Record<string, any>) => {\n try {\n if (typeof window === \"undefined\") return;\n window.dataLayer = window.dataLayer || [];\n (window.dataLayer as Record<string, unknown>[]).push({ event, ...data });\n } catch (error) {\n console.error(error);\n }\n};\n\n// GA event (gtag may be loaded by GA script)\nconst pushEventToGA = (eventName: string, eventData: Record<string, any>) => {\n if (typeof window === \"undefined\") return;\n const w = window as Window & { gtag?: (a: string, b: string, c?: Record<string, any>) => void };\n if (typeof w.gtag === \"function\") {\n w.gtag(\"event\", eventName, eventData);\n }\n};\n\n// Posthog\nconst pushEventToPosthog = (eventName: string, eventData: Record<string, any>) => {\n posthog.capture(eventName, eventData);\n};\n\n/** Consent flags from PhygitalConsentProvider (isAdvertisingAllowed may be added in newer versions). */\ninterface ConsentFlags {\n isAnalyticsAllowed: boolean;\n isAdvertisingAllowed?: boolean;\n}\n\nfunction useDataTracking() {\n const { initTracker, startTracking, setUserId, setMetadata } = useSessionReplay();\n const consent = usePhygitalConsent() as unknown as ConsentFlags;\n const isAnalyticsAllowed = consent.isAnalyticsAllowed ?? false;\n const isAdvertisingAllowed = consent.isAdvertisingAllowed ?? false;\n\n /** Load GA script and grant analytics consent. No-op if analytics consent is denied or script already loaded. */\n const loadGA = (gaId: string) => {\n if (!isAnalyticsAllowed || typeof window === \"undefined\" || !gaId) return;\n const w = window as Window & {\n gtag?: (...args: unknown[]) => void;\n dataLayer?: unknown[];\n };\n\n // Load gtag.js script if not already present\n const scriptId = `ga-script-${gaId}`;\n if (!document.getElementById(scriptId)) {\n const script = document.createElement(\"script\");\n script.id = scriptId;\n script.async = true;\n script.src = `https://www.googletagmanager.com/gtag/js?id=${encodeURIComponent(gaId)}`;\n document.head.appendChild(script);\n\n // Initialize gtag\n w.dataLayer = w.dataLayer || [];\n w.gtag = function () {\n // eslint-disable-next-line prefer-rest-params\n (w.dataLayer as unknown[]).push(arguments);\n };\n w.gtag(\"js\", new Date());\n w.gtag(\"config\", gaId);\n }\n\n // Grant analytics consent\n if (typeof w.gtag === \"function\") {\n w.gtag(\"consent\", \"update\", { ...GTAG_ANALYTICS_GRANTED });\n }\n };\n\n /** Load GTM script and grant analytics consent. No-op if analytics consent is denied or script already loaded. */\n const loadGTM = (gtmId: string) => {\n if (!isAnalyticsAllowed || typeof window === \"undefined\" || !gtmId) return;\n const w = window as Window & { gtag?: GtagConsent; dataLayer?: unknown[] };\n\n // Load GTM script if not already present\n const scriptId = `gtm-script-${gtmId}`;\n if (!document.getElementById(scriptId)) {\n w.dataLayer = w.dataLayer || [];\n (w.dataLayer as Record<string, unknown>[]).push({\n \"gtm.start\": new Date().getTime(),\n event: \"gtm.js\",\n });\n const script = document.createElement(\"script\");\n script.id = scriptId;\n script.async = true;\n script.src = `https://www.googletagmanager.com/gtm.js?id=${encodeURIComponent(gtmId)}`;\n document.head.appendChild(script);\n\n // Inject <noscript> iframe fallback into <body>\n const noscriptId = `gtm-noscript-${gtmId}`;\n if (!document.getElementById(noscriptId)) {\n const noscript = document.createElement(\"noscript\");\n noscript.id = noscriptId;\n const iframe = document.createElement(\"iframe\");\n iframe.src = `https://www.googletagmanager.com/ns.html?id=${encodeURIComponent(gtmId)}`;\n iframe.height = \"0\";\n iframe.width = \"0\";\n iframe.style.display = \"none\";\n iframe.style.visibility = \"hidden\";\n noscript.appendChild(iframe);\n document.body.insertBefore(noscript, document.body.firstChild);\n }\n }\n\n // Grant analytics consent\n if (typeof w.gtag === \"function\") {\n w.gtag(\"consent\", \"update\", { ...GTAG_ANALYTICS_GRANTED });\n } else {\n w.dataLayer = w.dataLayer || [];\n (w.dataLayer as unknown[]).push([\"consent\", \"update\", { ...GTAG_ANALYTICS_GRANTED }]);\n }\n };\n\n /** Opt-in PostHog capturing. No-op if analytics consent is denied. */\n const togglePostHog = () => {\n if (!isAnalyticsAllowed) return;\n if (typeof (posthog as { opt_in_capturing?: () => void }).opt_in_capturing === \"function\") {\n (posthog as { opt_in_capturing: () => void }).opt_in_capturing();\n }\n };\n\n /** Init and start OpenReplay. No-op if analytics consent is denied. */\n const toggleOpenReplay = () => {\n if (!isAnalyticsAllowed) return;\n initTracker();\n startTracking();\n };\n\n /** Enable Google AdSense (gtag ad consent). No-op if advertising consent is denied. */\n const toggleGoogleAdSense = () => {\n if (!isAdvertisingAllowed || typeof window === \"undefined\") return;\n const w = window as Window & { gtag?: GtagConsent; dataLayer?: unknown[] };\n if (typeof w.gtag === \"function\") {\n w.gtag(\"consent\", \"update\", { ...GTAG_ADS_GRANTED });\n } else if (Array.isArray(w.dataLayer)) {\n w.dataLayer.push([\"consent\", \"update\", { ...GTAG_ADS_GRANTED }]);\n }\n };\n\n /** Pause Google AdSense by revoking ad consent (sets ad_storage, ad_user_data, ad_personalization to denied). */\n const pauseGoogleAdSense = () => {\n if (typeof window === \"undefined\") return;\n const w = window as Window & { gtag?: GtagConsent; dataLayer?: unknown[] };\n if (typeof w.gtag === \"function\") {\n w.gtag(\"consent\", \"update\", { ...GTAG_ADS_DENIED });\n } else if (Array.isArray(w.dataLayer)) {\n w.dataLayer.push([\"consent\", \"update\", { ...GTAG_ADS_DENIED }]);\n }\n };\n\n const trackEvent = (\n eventName: string,\n eventData: Record<string, any>,\n useTools?: (\"gtm\" | \"ga\" | \"posthog\")[]\n ) => {\n useTools = useTools || [\"gtm\"];\n if (useTools.includes(\"gtm\") && typeof window !== \"undefined\") {\n pushEventToDataLayer(eventName, eventData);\n }\n if (useTools.includes(\"ga\") && isAnalyticsAllowed) {\n pushEventToGA(eventName, eventData);\n }\n if (useTools.includes(\"posthog\") && isAnalyticsAllowed && typeof posthog?.capture === \"function\") {\n pushEventToPosthog(eventName, eventData);\n }\n };\n\n const trackUserIdentify = (userInfo: Record<string, any>) => {\n if (!isAnalyticsAllowed) return;\n if (typeof posthog?.identify === \"function\") {\n posthog.identify(userInfo.email, {\n email: userInfo.email,\n name: userInfo.name,\n avatar: userInfo.avatar,\n uid: userInfo.uid,\n });\n }\n setUserId(userInfo.id);\n setMetadata({ user_email: userInfo.email });\n };\n\n const trackLogoutEvent = () => {\n if (!isAnalyticsAllowed) return;\n if (typeof posthog?.capture === \"function\") {\n posthog.capture(\"user_signed_out\");\n }\n };\n\n return {\n trackEvent,\n trackUserIdentify,\n trackLogoutEvent,\n loadGA,\n loadGTM,\n togglePostHog,\n toggleOpenReplay,\n toggleGoogleAdSense,\n pauseGoogleAdSense,\n };\n}\n\nexport { useDataTracking };\n","\"use client\";\n\nimport { usePhygitalConsent } from \"@phygitallabs/phygital-consent\";\nimport { useEffect } from \"react\";\nimport { useDataTracking } from \"./hooks\";\n\ntype GtagConsent = (\n command: \"consent\",\n action: \"default\" | \"update\",\n params: Record<string, string>\n) => void;\n\n/** Consent Mode v2: block analytics and ad tags until user accepts. */\nconst GTAG_CONSENT_DENIED = {\n analytics_storage: \"denied\",\n ad_storage: \"denied\",\n ad_user_data: \"denied\",\n ad_personalization: \"denied\",\n} as const;\n\n/**\n * Syncs cookie consent to GA, GTM, PostHog, OpenReplay, and Google AdSense.\n * - On mount: sets gtag/GTM consent default to denied.\n * - When analytics allowed: grants analytics_storage (GA/GTM), opts in PostHog, starts OpenReplay.\n * - When advertising allowed: grants ad_storage, ad_user_data, ad_personalization (AdSense).\n * Must be used under PhygitalConsentProvider; for OpenReplay also under SessionReplayProvider.\n * Renders nothing.\n */\nexport function DataTrackingConsentSync() {\n const consent = usePhygitalConsent() as {\n isAnalyticsAllowed?: boolean;\n isAdvertisingAllowed?: boolean;\n };\n const isAnalyticsAllowed = consent.isAnalyticsAllowed ?? false;\n const isAdvertisingAllowed = consent.isAdvertisingAllowed ?? false;\n const { togglePostHog, toggleOpenReplay, toggleGoogleAdSense, pauseGoogleAdSense } = useDataTracking();\n\n // Default: deny all consent (run once on mount)\n useEffect(() => {\n if (typeof window === \"undefined\") return;\n const w = window as Window & { dataLayer?: unknown[]; gtag?: GtagConsent };\n w.dataLayer = w.dataLayer || [];\n if (typeof w.gtag === \"function\") {\n w.gtag(\"consent\", \"default\", { ...GTAG_CONSENT_DENIED });\n } else {\n (w.dataLayer as unknown[]).push([\"consent\", \"default\", { ...GTAG_CONSENT_DENIED }]);\n }\n }, []);\n\n // Google AdSense: grant ad consent when allowed, revoke (pause) when denied\n useEffect(() => {\n if (isAdvertisingAllowed) {\n toggleGoogleAdSense();\n } else {\n pauseGoogleAdSense();\n }\n }, [isAdvertisingAllowed, toggleGoogleAdSense, pauseGoogleAdSense]);\n\n // PostHog: opt in when analytics allowed\n useEffect(() => {\n if (!isAnalyticsAllowed) return;\n togglePostHog();\n }, [isAnalyticsAllowed, togglePostHog]);\n\n // OpenReplay: init and start when analytics allowed\n useEffect(() => {\n if (!isAnalyticsAllowed) return;\n toggleOpenReplay();\n }, [isAnalyticsAllowed, toggleOpenReplay]);\n\n return null;\n}\n","export * from \"@phygitallabs/notification-api\";\nexport {\n useNotificationStore,\n useWebSocket,\n useNotificationRewardHandler,\n useTCVNotificationRewardHandler,\n useDefaultServiceGetPollStats,\n useDefaultServicePostPoll,\n usePageVisibility,\n} from \"@phygitallabs/notification-api\";\nexport { NotificationProvider } from \"./providers\";","const serviceApiUrl = {\n dev: {\n API_BASE_URL: \"https://backend-dev.nomion.io\",\n API_BASE_CORE_URL: \"https://backend-dev.nomion.io/core\",\n API_ACHIEVEMENT_URL: \"https://backend-dev.nomion.io/achievement\",\n API_REWARD_URL: \"https://backend-dev.nomion.io/reward\",\n API_GENERATE_CERTIFICATE_URL: \"https://media-prc-dev.nomion.io/api\",\n API_CONSENT_URL: \"https://backend-dev.nomion.io/consent\",\n API_NOTIFICATION_SOCKET_URL: \"https://backend-dev.nomion.io/notification-ws/ws\",\n },\n staging: {\n API_BASE_URL: \"https://backend-staging.nomion.io\",\n API_BASE_CORE_URL: \"https://backend-staging.nomion.io/core\",\n API_ACHIEVEMENT_URL: \"https://backend-staging.nomion.io/achievement\",\n API_REWARD_URL: \"https://backend-staging.nomion.io/reward\",\n API_GENERATE_CERTIFICATE_URL: \"https://media-prc-staging.nomion.io/api\",\n API_CONSENT_URL: \"https://backend-staging.nomion.io/consent\",\n API_NOTIFICATION_SOCKET_URL: \"https://backend-staging.nomion.io/notification-ws/ws\",\n\n },\n production: {\n API_BASE_URL: \"https://backend.nomion.io\",\n API_BASE_CORE_URL: \"https://backend.nomion.io/core\",\n API_ACHIEVEMENT_URL: \"https://backend.nomion.io/achievement\",\n API_REWARD_URL: \"https://backend.nomion.io/reward\",\n API_GENERATE_CERTIFICATE_URL: \"https://media-prc.nomion.io/api\",\n API_CONSENT_URL: \"https://backend.nomion.io/consent\",\n API_NOTIFICATION_SOCKET_URL: \"https://backend.nomion.io/notification-ws/ws\",\n\n },\n}\n\nexport default serviceApiUrl;","import React from \"react\";\nimport { NotificationProvider as NotificationProviderApi } from \"@phygitallabs/notification-api\";\n\nimport { EnvironmentType } from \"../../../types/common\";\n\nimport type { LPResponse } from \"@phygitallabs/notification-api\";\n\nimport serviceApiUrl from \"../../../constants/service\";\n\ninterface NotificationCallbacks {\n onWebSocketOpen?: (metadata: Record<string, any>) => void;\n onWebSocketClose?: (metadata: Record<string, any>) => void;\n onWebSocketMessage?: (data: LPResponse) => void;\n}\n\ninterface NotificationProviderProps extends NotificationCallbacks {\n children: React.ReactNode;\n autoConnect?: boolean;\n user: { id?: string ; accessToken?: string };\n environment?: EnvironmentType;\n}\n\nexport const NotificationProvider: React.FC<NotificationProviderProps> = ({\n children,\n autoConnect = true,\n environment = \"dev\",\n user,\n onWebSocketOpen,\n onWebSocketClose,\n onWebSocketMessage,\n}) => {\n\n const webSocketUrl = serviceApiUrl[environment]?.API_NOTIFICATION_SOCKET_URL;\n\n return (\n <NotificationProviderApi\n userUid={user?.id}\n accessToken={user?.accessToken ?? null}\n webSocketUrl={webSocketUrl}\n autoConnect={autoConnect}\n onWebSocketOpen={onWebSocketOpen}\n onWebSocketClose={onWebSocketClose}\n onWebSocketMessage={onWebSocketMessage}\n >\n {children}\n </NotificationProviderApi>\n );\n};\n\nexport default NotificationProvider;","import { createContext, useContext, useEffect, useMemo, useCallback, useRef } from \"react\";\nimport { useDataTracking } from \"../../data-tracking\";\nimport { useNotificationStore } from \"../../notification\";\nimport { getActionsFromAchievementRule, AchievementType } from \"../../achievement\";\nimport type {\n AchievementTrackingContextValue,\n AchievementTrackingProviderProps,\n AchievementActionType,\n} from \"../types\";\nimport type { Achievement } from \"../../achievement/types\";\n\nconst AchievementTrackingContext = createContext<AchievementTrackingContextValue | undefined>(\n undefined\n);\n\nexport function AchievementTrackingProvider({\n children,\n achievements,\n}: AchievementTrackingProviderProps) {\n const { trackEvent } = useDataTracking();\n const trackedNotificationIds = useRef(new Set<string>());\n\n const { challenges, quests } = useMemo(() => {\n const challengesList: Achievement[] = [];\n const questsList: Achievement[] = [];\n\n achievements.forEach((achievement) => {\n if (achievement.type === AchievementType.GROUP_MISSION) {\n questsList.push(achievement);\n } else {\n challengesList.push(achievement);\n }\n });\n\n return {\n challenges: challengesList,\n quests: questsList,\n };\n }, [achievements]);\n\n useEffect(() => {\n const unsubscribe = useNotificationStore.subscribe((state) => {\n const notifications = state.notifications;\n if (notifications.length === 0) return;\n\n const latestNotification = notifications[notifications.length - 1];\n\n if (!latestNotification?.data?.achievement) return;\n\n const notificationId = `${latestNotification.data.achievement.id}_${Date.now()}`;\n\n if (trackedNotificationIds.current.has(notificationId)) return;\n\n trackedNotificationIds.current.add(notificationId);\n\n const achievement = latestNotification.data.achievement;\n\n if (achievement.type === AchievementType.GROUP_MISSION) {\n trackEvent(\"quest_complete\", {\n quest_id: achievement.id,\n quest_name: achievement.name,\n });\n } else {\n const actions = getActionsFromAchievementRule(achievement);\n const challengeType = actions[0] || \"unknown\";\n\n trackEvent(\"challenge_complete\", {\n challenge_id: achievement.id,\n challenge_name: achievement.name,\n challenge_type: challengeType,\n });\n }\n });\n\n return () => {\n unsubscribe();\n };\n }, [trackEvent]);\n\n const trackChallengeStart = useCallback(\n (actionType: AchievementActionType) => {\n const matchingAchievements = challenges.filter((achievement) => {\n const actions = getActionsFromAchievementRule(achievement);\n return actions.includes(actionType);\n });\n\n if (matchingAchievements.length === 0) {\n console.error(`[AchievementTracking] No achievement found for action: ${actionType}`);\n return;\n }\n\n matchingAchievements.forEach((achievement) => {\n trackEvent(\"challenge_start\", {\n challenge_id: achievement.id,\n challenge_name: achievement.name,\n challenge_type: actionType,\n });\n });\n },\n [challenges, trackEvent]\n );\n\n const trackQuestStart = useCallback(() => {\n if (quests.length === 0) {\n console.error(`[AchievementTracking] No quests found`);\n return;\n }\n\n quests.forEach((quest) => {\n trackEvent(\"quest_start\", {\n quest_id: quest.id,\n quest_name: quest.name,\n });\n });\n }, [quests, trackEvent]);\n\n const isReady = achievements.length > 0;\n\n const contextValue: AchievementTrackingContextValue = {\n trackChallengeStart,\n trackQuestStart,\n isReady,\n };\n\n return (\n <AchievementTrackingContext.Provider value={contextValue}>\n {children}\n </AchievementTrackingContext.Provider>\n );\n}\n\nexport function useAchievementTracking(): AchievementTrackingContextValue {\n const context = useContext(AchievementTrackingContext);\n if (!context) {\n throw new Error(\"useAchievementTracking must be used within AchievementTrackingProvider\");\n }\n return context;\n}\n","// Re-export from @phygitallabs/reward package\nexport {\n CmentityRewardType,\n type CmentityStatus\n} from \"@phygitallabs/reward\";\n\n// Define RewardClaimStatus locally since it's not exported from reward package\nexport enum RewardClaimStatus {\n NOT_CLAIMED = \"not_claimed\",\n CLAIMED = \"claimed\",\n IN_PROGRESS = \"in_progress\",\n FAILED = \"failed\",\n}","import { create } from \"zustand\";\nimport { immer } from \"zustand/middleware/immer\";\nimport { UserData } from \"../types/user-data\";\nimport {\n createJSONStorage,\n devtools,\n persist,\n subscribeWithSelector,\n} from \"zustand/middleware\";\nimport { AuthEventCallbacks } from \"../types/auth\";\n\nimport {\n authService,\n ProtoSendVerifyCodeResponse,\n ProtoSignInResponse,\n ProtoSignUpResponse,\n ProtoVerifyEmailResponse,\n SendVerifyCodeRequest,\n verifyCodeService,\n VerifyEmailRequest,\n tokenStorage,\n ProtoRefreshTokenResponse,\n OAuthSignInResponse,\n ResetPasswordRequest,\n ProtoResetPasswordResponse,\n ChangePasswordRequest,\n ProtoChangePasswordResponse,\n} from \"@phygitallabs/authentication\";\n\nimport { CALLBACK_URL } from \"../constants\";\n\n// Cleanup functions interface\nexport interface AuthCleanupFunctions {\n clearQueryCache?: () => void;\n clearOrganization?: () => void;\n clearHeaders?: () => void;\n clearCustomData?: () => void;\n}\n\n// Simplified auth state interface\ninterface AuthState {\n // User data\n user: UserData | null;\n\n isSignedIn: boolean;\n isInitialized: boolean;\n\n // Single loading state\n isLoading: boolean;\n\n // Error state\n error: string | null;\n\n // Cleanup functions\n cleanupFunctions: AuthCleanupFunctions;\n\n // Event callbacks\n eventCallbacks: AuthEventCallbacks;\n}\n\n// Simplified actions interface\ninterface AuthActions {\n setCleanupFunctions: (\n cleanupFunctions: Partial<AuthCleanupFunctions>\n ) => void;\n\n // Event management\n addEventCallbacks: (callbacks: AuthEventCallbacks) => () => void;\n\n // Core auth actions\n signInWithEmail: (\n email: string,\n password: string,\n updateHeaders?: (headers: Record<string, string>) => void,\n updateAuthenticationHeaders?: (headers: Record<string, string>) => void\n ) => Promise<ProtoSignInResponse>;\n signInWithGoogle: () => Promise<OAuthSignInResponse>;\n signUpWithEmail: (\n email: string,\n password: string\n ) => Promise<ProtoSignUpResponse>;\n signOut: () => Promise<void>;\n sendPasswordResetEmail: (email: string) => Promise<void>;\n resetPassword: (\n data: ResetPasswordRequest\n ) => Promise<ProtoResetPasswordResponse>;\n changePassword: (\n data: ChangePasswordRequest\n ) => Promise<ProtoChangePasswordResponse>;\n verifyEmailCode: (\n data: VerifyEmailRequest\n ) => Promise<ProtoVerifyEmailResponse>;\n sendVerifyCode: (\n data: SendVerifyCodeRequest\n ) => Promise<ProtoSendVerifyCodeResponse>;\n refreshToken: (refreshToken?: string) => Promise<ProtoRefreshTokenResponse>;\n\n // Simple state management\n clearError: () => void;\n\n // Setters\n setUser: (user: UserData | null) => void;\n patchUser: (user: Partial<UserData>) => void;\n setIsSignedIn: (isSignedIn: boolean) => void;\n setIsInitialized: (isInitialized: boolean) => void;\n setIsLoading: (isLoading: boolean) => void;\n\n // Initialization\n initialize: () => void;\n syncAuthState: () => void;\n}\n\n// Store structure with actions grouped\ninterface AuthStoreState extends AuthState {\n actions: AuthActions;\n}\n\ntype AuthStore = AuthStoreState;\n\n// Initial state\nconst initialState: AuthState = {\n user: null,\n isSignedIn: false,\n isInitialized: false,\n isLoading: false,\n error: null,\n cleanupFunctions: {},\n eventCallbacks: {},\n};\n\n// Create the auth store\nexport const useAuthStore = create<AuthStore>()(\n devtools(\n persist(\n subscribeWithSelector(\n immer((set, get) => ({\n ...initialState,\n actions: {\n setIsLoading: (isLoading: boolean) =>\n set((state) => {\n state.isLoading = isLoading;\n }),\n\n setCleanupFunctions: (\n newCleanupFunctions: Partial<AuthCleanupFunctions>\n ) =>\n set((state) => {\n state.cleanupFunctions = {\n ...state.cleanupFunctions,\n ...newCleanupFunctions,\n };\n }),\n\n // Event management\n addEventCallbacks: (callbacks: AuthEventCallbacks) => {\n set((state) => {\n state.eventCallbacks = {\n ...state.eventCallbacks,\n ...callbacks,\n };\n });\n\n // Return cleanup function\n return () => {\n set((state) => {\n state.eventCallbacks = {\n ...state.eventCallbacks,\n ...callbacks,\n };\n });\n };\n },\n\n // Sign in with email and password\n signInWithEmail: async (email: string, password: string) => {\n const { eventCallbacks } = get();\n set((state) => {\n state.isLoading = true;\n state.error = null;\n });\n\n try {\n const response = await authService.signIn({\n email,\n password,\n });\n\n if (response?.data?.idToken && response?.data?.refreshToken) {\n // Store tokens in tokenStorage only\n tokenStorage.setTokens({\n idToken: response.data.idToken,\n refreshToken: response.data.refreshToken,\n });\n\n // Update auth state\n set((state) => {\n state.isSignedIn = true;\n });\n\n eventCallbacks.onLoginSuccess?.(response.data.idToken);\n }\n\n return response;\n } catch (error: any) {\n // Check if error has code 7 (email not verified)\n // if (error?.response?.data?.code === 7) {\n // // Return a special response for email verification needed\n // return {\n // data: undefined,\n // message: \"Email verification required\",\n // code: 7,\n // };\n // }\n\n const errorMessage =\n error instanceof Error ? error.message : \"Login failed\";\n\n set((state) => {\n state.error = errorMessage;\n });\n\n eventCallbacks.onLoginError?.(new Error(errorMessage));\n\n throw error;\n } finally {\n set((state) => {\n state.isLoading = false;\n });\n }\n },\n\n // Sign in with Google\n signInWithGoogle: async () => {\n const { eventCallbacks } = get();\n try {\n //get current domain\n const currentDomain = CALLBACK_URL;\n\n const userData =\n await authService.getOAuthSignInUrl(currentDomain);\n return userData;\n } catch (error) {\n const errorMessage =\n error instanceof Error\n ? error.message\n : \"Google sign in failed\";\n\n set((state) => {\n state.error = errorMessage;\n });\n\n eventCallbacks.onLoginError?.(new Error(errorMessage));\n\n throw error;\n }\n },\n\n // Sign up with email and password\n signUpWithEmail: async (email: string, password: string) => {\n const { eventCallbacks } = get();\n\n set((state) => {\n state.isLoading = true;\n state.error = null;\n });\n\n try {\n const response = await authService.signUp({\n email,\n password,\n });\n\n if (response.data) {\n eventCallbacks.onSignupSuccess?.();\n }\n\n return response;\n } catch (error) {\n const errorMessage =\n error instanceof Error ? error.message : \"Signup failed\";\n\n set((state) => {\n state.error = errorMessage;\n });\n\n eventCallbacks.onSignupError?.(new Error(errorMessage));\n\n throw error;\n } finally {\n set((state) => {\n state.isLoading = false;\n state.user = null;\n state.isSignedIn = false;\n });\n }\n },\n\n // Sign out\n signOut: async () => {\n const { eventCallbacks, cleanupFunctions } = get();\n set((state) => {\n state.isLoading = true;\n state.error = null;\n });\n\n try {\n set((state) => {\n state.user = null;\n state.isSignedIn = false;\n state.error = null;\n });\n\n const refreshToken = tokenStorage.getRefreshToken();\n const isTokenExpired = tokenStorage.isTokenExpired();\n\n if (isTokenExpired || !refreshToken) {\n tokenStorage.clearTokens();\n return;\n }\n\n await authService.logout({\n refreshToken,\n });\n tokenStorage.clearTokens();\n\n // Execute default cleanup functions\n try {\n cleanupFunctions.clearQueryCache?.();\n cleanupFunctions.clearOrganization?.();\n cleanupFunctions.clearCustomData?.();\n cleanupFunctions.clearHeaders?.();\n } catch (cleanupError) {\n console.warn(\"Error during logout cleanup:\", cleanupError);\n // Don't fail logout if cleanup fails\n }\n\n // Call onLogoutSuccess callback\n eventCallbacks.onLogoutSuccess?.();\n\n // Update state AFTER callback to prevent AuthLayout interference\n } catch (error) {\n console.log(error);\n const errorMessage =\n error instanceof Error ? error.message : \"Logout failed\";\n\n set((state) => {\n state.error = errorMessage;\n });\n\n eventCallbacks.onLogoutError?.(new Error(errorMessage));\n\n throw error;\n } finally {\n set((state) => {\n state.isLoading = false;\n });\n }\n },\n\n // Send password reset email\n sendPasswordResetEmail: async (email: string) => {\n set((state) => {\n state.isLoading = true;\n state.error = null;\n });\n\n try {\n await verifyCodeService.forgotPassword({\n email,\n });\n } catch (error) {\n const errorMessage =\n error instanceof Error\n ? error.message\n : \"Failed to send reset email\";\n set((state) => {\n state.error = errorMessage;\n });\n throw error;\n } finally {\n set((state) => {\n state.isLoading = false;\n });\n }\n },\n\n resetPassword: async (data: ResetPasswordRequest) => {\n set((state) => {\n state.isLoading = true;\n state.error = null;\n });\n\n try {\n const resetPasswordResponse =\n await verifyCodeService.resetPassword(data);\n return resetPasswordResponse;\n } catch (error) {\n const errorMessage =\n error instanceof Error\n ? error.message\n : \"Failed to reset password\";\n set((state) => {\n state.error = errorMessage;\n });\n throw error;\n } finally {\n set((state) => {\n state.isLoading = false;\n });\n }\n },\n\n changePassword: async (data: ChangePasswordRequest) => {\n set((state) => {\n state.isLoading = true;\n state.error = null;\n });\n\n try {\n const changePasswordResponse =\n await verifyCodeService.changePassword(data);\n return changePasswordResponse;\n } catch (error) {\n throw error;\n } finally {\n set((state) => {\n state.isLoading = false;\n });\n }\n },\n\n verifyEmailCode: async (data: VerifyEmailRequest) => {\n set((state) => {\n state.isLoading = true;\n state.error = null;\n });\n\n try {\n const verifyEmailResponse =\n await verifyCodeService.verifyEmail(data);\n return verifyEmailResponse;\n } catch (error) {\n const errorMessage =\n error instanceof Error\n ? error.message\n : \"Failed to send reset email\";\n set((state) => {\n state.error = errorMessage;\n });\n throw error;\n } finally {\n set((state) => {\n state.isLoading = false;\n });\n }\n },\n sendVerifyCode: async (data: SendVerifyCodeRequest) => {\n set((state) => {\n state.isLoading = true;\n state.error = null;\n });\n\n try {\n const sendVerifyCodeResponse =\n await verifyCodeService.sendVerifyCode(data);\n return sendVerifyCodeResponse;\n } catch (error) {\n const errorMessage =\n error instanceof Error\n ? error.message\n : \"Failed to send verify code\";\n set((state) => {\n state.error = errorMessage;\n });\n throw error;\n } finally {\n set((state) => {\n state.isLoading = false;\n });\n }\n },\n refreshToken: async (refreshToken?: string) => {\n const refreshTokenResponse = await authService.refreshToken({\n refreshToken:\n refreshToken ?? tokenStorage.getRefreshToken() ?? \"\",\n });\n\n if(refreshTokenResponse.data?.idToken && refreshTokenResponse.data?.refreshToken){\n tokenStorage.setTokens({\n idToken: refreshTokenResponse.data?.idToken,\n refreshToken: refreshTokenResponse.data?.refreshToken,\n });\n }\n\n return refreshTokenResponse;\n },\n\n // Clear error\n clearError: () =>\n set((state) => {\n state.error = null;\n }),\n\n setUser: (user: UserData | null) =>\n set((state) => {\n state.user = user;\n }),\n\n setIsSignedIn: (isSignedIn: boolean) =>\n set((state) => {\n state.isSignedIn = isSignedIn;\n }),\n\n setIsInitialized: (isInitialized: boolean) =>\n set((state) => {\n state.isInitialized = isInitialized;\n }),\n\n patchUser: (user: Partial<UserData>) =>\n set((state) => {\n if (state.user) {\n state.user = { ...state.user, ...user };\n } else {\n state.user = user as UserData;\n }\n }),\n\n // Initialize the store - check if user is already authenticated from tokenStorage\n initialize: () => {\n set((state) => {\n const token = tokenStorage.getAuthToken();\n state.isSignedIn = !!token;\n state.isInitialized = true;\n });\n },\n\n // Sync auth state from tokenStorage (called when axios interceptor updates tokens)\n syncAuthState: () => {\n set((state) => {\n const token = tokenStorage.getAuthToken();\n const wasSignedIn = state.isSignedIn;\n state.isSignedIn = !!token;\n\n // If auth state changed, trigger callbacks\n if (wasSignedIn !== state.isSignedIn) {\n if (state.isSignedIn) {\n state.eventCallbacks?.onAuthStateChange?.(state.user, true);\n } else {\n state.eventCallbacks?.onAuthStateChange?.(null, false);\n }\n }\n });\n },\n },\n }))\n ),\n {\n version: 1,\n name: \"auth-store\",\n storage: createJSONStorage(() => localStorage),\n partialize: (state) => ({\n isSignedIn: state.isSignedIn,\n user: state.user,\n }),\n }\n )\n )\n);\n\nexport const useAuth = () => {\n const user = useAuthStore((state) => state.user);\n const isSignedIn = useAuthStore((state) => state.isSignedIn);\n const isInitialized = useAuthStore((state) => state.isInitialized);\n const isLoading = useAuthStore((state) => state.isLoading);\n const error = useAuthStore((state) => state.error);\n const actions = useAuthStore((state) => state.actions);\n\n return {\n user,\n isSignedIn,\n isInitialized,\n isLoading,\n error,\n ...actions,\n };\n};\n","import { UserData, UserRole, UserType } from \"../types/user-data\";\nimport { UserModel } from \"@phygitallabs/api-core\";\nimport { jwtDecode } from \"jwt-decode\";\n\nexport const transformProtoUserData = (user: UserModel, accessToken: string): UserData => {\n const userData = { ...user } as UserData;\n let tokenDecoded: any = {};\n\n try {\n tokenDecoded = jwtDecode(accessToken);\n } catch (error) {\n console.warn(\"Failed to decode token in transformUserData:\", error);\n }\n\n userData.exp = tokenDecoded.exp || 0;\n userData.accessToken = accessToken || \"\";\n userData.roles = tokenDecoded?.roles || [UserRole.USER];\n userData.account_type = tokenDecoded?.account_type || UserType.C;\n userData.picture = user.picture || \"\";\n\n return userData;\n};\n\nexport const decodeJWTToken = (token: string): any => {\n try {\n return jwtDecode(token);\n } catch (error) {\n console.warn(\"Failed to decode token in decodeJWTToken:\", error);\n return null;\n }\n};\n","import { useQuery } from \"@tanstack/react-query\";\nimport { useAuth } from \"../store/authStore\";\nimport { tokenStorage } from \"@phygitallabs/authentication\";\n\nexport function useTokenRefresher() {\n const { refreshToken, signOut } = useAuth();\n\n const handleRefreshToken = async () => {\n try {\n const isTokenExpired = tokenStorage.isTokenExpired();\n\n if (!isTokenExpired) {\n return;\n }\n \n await refreshToken();\n\n } catch (error) {\n console.error(\"Failed to refresh token:\", error);\n signOut();\n }\n };\n\n // React Query handles refetching on interval + focus\n useQuery({\n queryKey: [\"refresh-token\"],\n queryFn: () => handleRefreshToken(),\n refetchInterval: 30 * 60 * 1000, // every 30 minutes\n refetchIntervalInBackground: false, // even when tab is hidden\n refetchOnWindowFocus: true, // also refresh when user returns to tab\n retry: false, // don't retry repeatedly if refresh fails\n enabled: !!tokenStorage.getAuthToken(), // only run if logged in\n });\n}\n","import {\n AuthenticationProvider,\n useAuthenticationHeaders,\n tokenStorage,\n} from \"@phygitallabs/authentication\";\nimport { useEffect } from \"react\";\nimport {useAuthStore} from \"../store/authStore\";\nimport { transformProtoUserData } from \"../utils/user\";\nimport { userService } from \"@phygitallabs/api-core\";\nimport { QueryClient } from \"@tanstack/react-query\";\n\nimport { usePGLCoreService } from \"@phygitallabs/api-core\";\nimport { useAchievementService } from \"@phygitallabs/achievement\";\nimport { useRewardService } from \"@phygitallabs/reward\";\nimport { useGenerateCertificateService } from \"@phygitallabs/generate-certificate\";\nimport { useTokenRefresher } from \"../hooks/useTokenRefresher\";\n\ninterface AuthProviderProps {\n children: React.ReactNode;\n baseURL: string;\n queryClient: QueryClient;\n}\n\n// Inner component that has access to the authentication context\nconst AuthStateManager = () => {\n const { updateHeaders } = useAuthenticationHeaders();\n\n const { updateHeaders: updateHeadersPGL, coreApi } = usePGLCoreService();\n const { updateHeaders: updateHeadersAchievement } = useAchievementService();\n const { updateHeaders: updateHeadersReward } = useRewardService();\n const { updateHeaders: updateHeadersGenerateCertificate } =\n useGenerateCertificateService();\n\n useEffect(() => {\n // Initialize the auth store to set isSignedIn based on persisted token\n useAuthStore.getState().actions.initialize();\n // Initial setup - set headers if token exists\n const token = tokenStorage.getAuthToken();\n if (token) {\n updateHeaders({\n Authorization: `Bearer ${token}`,\n });\n\n updateHeadersPGL({\n Authorization: `Bearer ${token}`,\n });\n\n updateHeadersAchievement({\n Authorization: `Bearer ${token}`,\n });\n\n updateHeadersReward({\n Authorization: `Bearer ${token}`,\n });\n\n updateHeadersGenerateCertificate({\n Authorization: `Bearer ${token}`,\n });\n\n // Sync user.accessToken with actual token from localStorage\n const { user } = useAuthStore.getState();\n if (user && user.accessToken !== token) {\n useAuthStore.getState().actions.setUser({\n ...user,\n accessToken: token,\n });\n }\n }\n\n let previousIsSignedIn = useAuthStore.getState().isSignedIn;\n\n const unsub = useAuthStore.subscribe(\n (state) => [state.isSignedIn, state.user],\n async ([isSignedIn]) => {\n // Only run when isSignedIn actually changes\n if (isSignedIn === previousIsSignedIn) {\n return;\n }\n\n previousIsSignedIn = isSignedIn as boolean;\n\n if (isSignedIn) {\n const token = tokenStorage.getAuthToken();\n\n if (token) {\n // Update API headers with the new token\n updateHeaders({\n Authorization: `Bearer ${token}`,\n });\n updateHeadersPGL({\n Authorization: `Bearer ${token}`,\n });\n\n updateHeadersAchievement({\n Authorization: `Bearer ${token}`,\n });\n\n updateHeadersReward({\n Authorization: `Bearer ${token}`,\n });\n\n updateHeadersGenerateCertificate({\n Authorization: `Bearer ${token}`,\n });\n\n try {\n // Fetch user profile when signed in\n const userApi = userService(coreApi);\n const userProfile = await userApi.getMyProfile();\n const transformedUserData = transformProtoUserData(\n userProfile,\n token\n );\n\n useAuthStore.getState().actions.setUser(transformedUserData);\n } catch (error) {\n useAuthStore.getState().actions.signOut();\n }\n }\n\n // Trigger auth state change event\n const { eventCallbacks, user } = useAuthStore.getState();\n eventCallbacks?.onAuthStateChange?.(user, true);\n } else {\n // Clear headers when logged out\n updateHeaders({});\n updateHeadersPGL({});\n updateHeadersAchievement({\n Authorization: ``,\n });\n updateHeadersReward({\n Authorization: ``,\n });\n updateHeadersGenerateCertificate({\n Authorization: ``,\n });\n\n // Trigger auth state change event\n const { eventCallbacks } = useAuthStore.getState();\n eventCallbacks?.onAuthStateChange?.(null, false);\n }\n }\n );\n\n // Listen for token changes (for refresh scenarios)\n const unsubTokenChange = tokenStorage.addTokenChangeListener(async () => {\n const { isSignedIn, user } = useAuthStore.getState();\n if (isSignedIn) {\n const token = tokenStorage.getAuthToken();\n if (token) {\n updateHeaders({\n Authorization: `Bearer ${token}`,\n });\n updateHeadersPGL({\n Authorization: `Bearer ${token}`,\n });\n updateHeadersAchievement({\n Authorization: `Bearer ${token}`,\n });\n updateHeadersReward({\n Authorization: `Bearer ${token}`,\n });\n updateHeadersGenerateCertificate({\n Authorization: `Bearer ${token}`,\n });\n\n // Sync user.accessToken with actual token from localStorage\n if (user && user.accessToken !== token) {\n useAuthStore.getState().actions.setUser({\n ...user,\n accessToken: token,\n });\n }\n } else {\n // Token was cleared, sign out\n useAuthStore.getState().actions.signOut();\n updateHeaders({});\n updateHeadersPGL({});\n updateHeadersAchievement({\n Authorization: ``,\n });\n updateHeadersReward({\n Authorization: ``,\n });\n updateHeadersGenerateCertificate({\n Authorization: ``,\n });\n }\n }\n });\n\n return () => {\n unsub();\n unsubTokenChange();\n };\n }, [\n updateHeaders,\n updateHeadersPGL,\n updateHeadersAchievement,\n updateHeadersReward,\n updateHeadersGenerateCertificate,\n coreApi,\n ]);\n\n return null;\n};\n\nconst TokenRefresher = () => {\n useTokenRefresher();\n return null;\n};\n\nexport const AuthProvider = ({\n children,\n baseURL,\n queryClient,\n}: AuthProviderProps) => {\n const axiosConfig = {\n headers: {\n \"Content-Type\": \"application/json\",\n },\n };\n\n return (\n <AuthenticationProvider\n axiosConfig={axiosConfig}\n baseURL={baseURL}\n queryClient={queryClient}\n >\n <AuthStateManager />\n <TokenRefresher />\n {children}\n </AuthenticationProvider>\n );\n};\n","import { useRef, useCallback, useEffect, useState } from \"react\";\nimport { useAuth } from \"../store/authStore\";\nimport { tokenStorage } from \"@phygitallabs/authentication\";\nimport { ALLOWED_ORIGINS } from \"../constants\";\nimport { decodeJWTToken } from \"../utils/user\";\n\nexport interface UseGoogleLoginOptions {\n onSuccess?: (userData: any) => void;\n onError?: (error: string) => void;\n onPopupBlocked?: () => void;\n onPopupClosed?: () => void;\n}\n\nexport interface UseGoogleLoginReturn {\n signIn: () => void;\n isLoading: boolean;\n error: string | null;\n}\n\nexport function useGoogleLogin(\n options: UseGoogleLoginOptions = {}\n): UseGoogleLoginReturn {\n const { onSuccess, onError, onPopupBlocked, onPopupClosed } = options;\n const {\n signInWithGoogle,\n refreshToken,\n setIsSignedIn,\n setIsLoading,\n isLoading,\n } = useAuth();\n const [googleLink, setGoogleLink] = useState<string | null>(null);\n\n const popupRef = useRef<Window | null>(null);\n const gotDataRef = useRef(false);\n const timerRef = useRef<NodeJS.Timeout | null>(null);\n const errorRef = useRef<string | null>(null);\n\n const handleTokenRefresh = useCallback(\n async (refresh: string) => {\n if (refresh) {\n try {\n const newToken = await refreshToken(refresh);\n if (newToken.data?.idToken && newToken.data?.refreshToken) {\n tokenStorage.setTokens({\n idToken: newToken.data.idToken,\n refreshToken: newToken.data.refreshToken,\n });\n\n const userData = decodeJWTToken(newToken.data.idToken);\n\n setIsSignedIn(true);\n setIsLoading(false);\n onSuccess?.(userData);\n }\n } catch (error) {\n const errorMessage =\n error instanceof Error ? error.message : \"Token refresh failed\";\n errorRef.current = errorMessage;\n onError?.(errorMessage);\n setIsLoading(false);\n }\n }\n },\n [refreshToken, setIsSignedIn, setIsLoading, onSuccess, onError]\n );\n\n const cleanup = useCallback(() => {\n if (timerRef.current) {\n clearInterval(timerRef.current);\n timerRef.current = null;\n }\n\n gotDataRef.current = false;\n }, []);\n\n const handleMessage = useCallback(\n (event: MessageEvent) => {\n // Allow specific origins for OAuth (adjust these based on your OAuth provider)\n const allowedOrigins = ALLOWED_ORIGINS.concat(window?.location?.origin);\n\n // Allow wildcard origin from callback.html (but validate message structure)\n if (\n event.origin !== \"*\" &&\n !allowedOrigins.includes(event.origin as string)\n ) {\n console.warn(\"Rejected message from untrusted origin:\", event.origin);\n return;\n }\n\n // Additional validation for message structure\n if (!event.data || typeof event.data !== \"object\") {\n console.warn(\"Invalid message data received\");\n return;\n }\n if (event.data.type === \"LOGIN_SUCCESS\") {\n const { refreshToken: refresh } = event.data;\n\n // Support both token formats from callback\n if (refresh) {\n handleTokenRefresh(refresh);\n }\n gotDataRef.current = true;\n cleanup();\n } else if (event.data.type === \"LOGIN_ERROR\") {\n const errorMessage = event.data.error || \"Login failed\";\n errorRef.current = errorMessage;\n onError?.(errorMessage);\n setIsLoading(false);\n gotDataRef.current = true;\n cleanup();\n }\n },\n [handleTokenRefresh, setIsLoading, cleanup, onError]\n );\n\n useEffect(() => {\n const fetchGoogleLink = async () => {\n try {\n const response = await signInWithGoogle();\n setGoogleLink(response.statusMessage || \"\");\n } catch (error) {\n console.error(\"error\", error);\n setGoogleLink(\"\");\n }\n };\n fetchGoogleLink();\n }, []);\n\n const signIn = useCallback((): void => {\n const width = 500;\n const height = 600;\n const left = window.screenX + (window.outerWidth - width) / 2;\n const top = window.screenY + (window.outerHeight - height) / 2;\n\n try {\n if (googleLink === null) return;\n if (googleLink === \"\") {\n const error = \"Google sign in failed. Please try again later.\";\n errorRef.current = error;\n onError?.(error);\n return;\n }\n\n errorRef.current = null;\n setIsLoading(true);\n\n popupRef.current = window.open(\n googleLink,\n \"oauthPopup\",\n `width=${width},height=${height},left=${left},top=${top},resizable,scrollbars`\n );\n\n // Ensure popup opened successfully\n if (!popupRef.current) {\n setIsLoading(false);\n const error = \"Popup blocked. Please allow popups for this site.\";\n errorRef.current = error;\n onPopupBlocked?.();\n onError?.(error);\n return;\n }\n\n timerRef.current = setInterval(() => {\n if (popupRef.current && popupRef.current.closed) {\n if (timerRef.current) {\n clearInterval(timerRef.current);\n timerRef.current = null;\n }\n if (!gotDataRef.current) {\n const error = \"Authentication popup was closed\";\n errorRef.current = error;\n onPopupClosed?.();\n onError?.(error);\n setIsLoading(false);\n }\n }\n }, 500);\n } catch (error: any) {\n const errorMessage =\n error instanceof Error ? error.message : \"Google sign in failed\";\n errorRef.current = errorMessage;\n onError?.(errorMessage);\n setIsLoading(false);\n }\n }, [\n signInWithGoogle,\n setIsLoading,\n handleMessage,\n onError,\n onPopupBlocked,\n onPopupClosed,\n googleLink,\n ]);\n\n useEffect(() => {\n window.addEventListener(\"message\", handleMessage);\n return () => {\n window.removeEventListener(\"message\", handleMessage);\n };\n }, [handleMessage]);\n\n // Cleanup on unmount\n useEffect(() => {\n return () => {\n cleanup();\n };\n }, [cleanup]);\n\n return {\n signIn,\n isLoading,\n error: errorRef.current,\n };\n}\n","import { useEffect } from \"react\";\nimport { useChipScanStory } from \"@phygitallabs/api-core\";\nimport { usePGLCoreService } from \"@phygitallabs/api-core\";\nimport { setChipAuthToken } from \"../../auth/helpers\";\n\nimport { ScanChipResponse } from \"../types\";\n\ninterface UseScanChipProps {\n token?: string;\n id?: string;\n onScanChipError?: () => void;\n}\nexport { useChipScanStory, usePGLCoreService };\nexport function useScanChip({ token, id, onScanChipError }: UseScanChipProps): ScanChipResponse {\n const { updateHeaders } = usePGLCoreService();\n\n useEffect(() => {\n if (!!token) {\n\n const header = {\n \"Chip-Authorization\": token,\n };\n\n setChipAuthToken(token);\n updateHeaders(header);\n\n }\n }, [token, updateHeaders]);\n\n const { data, isLoading, isError, isSuccess } = useChipScanStory({\n token,\n id,\n });\n\n useEffect(() => {\n if (isError) {\n onScanChipError?.();\n }\n }, [isError, onScanChipError]);\n\n\n if (!data)\n return {\n data: null,\n isLoading,\n isError,\n isSuccess\n };\n\n return {\n data: {\n externalUrl: data?.external_url,\n campaignDetail: data?.project,\n locationDetail: data?.location,\n scanCounter: data?.scan_counter,\n campaignId: data?.campaign_id,\n chipModelId: data?.chip_model_id,\n organizationId: data?.organization_id,\n projectId: data?.project_id,\n locationId: data?.location_id,\n chipUid: data?.uid,\n },\n isLoading,\n isError,\n isSuccess\n }\n}","// Re-export from @phygitallabs/api-core package\nexport type {\n CampaignModel,\n UserCampaignModel,\n MissionWithProgress,\n TaskWithProgress,\n UserCampaignMission,\n Mission,\n MissionProgress,\n TaskProgress,\n} from \"@phygitallabs/api-core\";\n\nexport enum TaskType {\n CHECK_IN = \"check_in\",\n CREATE_MEMORY = \"create_memory\",\n FILL_FORM = \"fill_form\",\n SHARE = \"share\",\n}\n\n// Define other types locally since they're not exported from api-core package\nexport interface CampaignByProjectIdModel {\n id: string;\n certificate_index?: number;\n completed_checkin_rule?: number;\n completed_device_uids?: string[];\n completed_location_ids?: string[];\n completed_user_ids?: string[];\n description?: string;\n image_url?: string;\n is_custom_checkin_rule?: boolean;\n location_ids?: string[];\n name: string;\n total_completed?: number;\n user_campaign?: any;\n custom_info: Record<string, any>;\n mission: Record<string, any>;\n achievement_id: string;\n start_date: string;\n end_date: string;\n certificate: {\n image: any;\n title: string;\n };\n project_id?: string;\n status: string;\n created_at: number;\n updated_at: number;\n created_by?: string;\n updated_by?: string;\n}\n\n","\nexport const sortLocationsByIndex = <T extends { index?: number }>(locations: T[]): T[] => {\n return [...locations].sort((a, b) => (a.index ?? 0) - (b.index ?? 0));\n};\n\n\nexport const filterLocationsByProperty = <T extends Record<string, any>>(\n locations: T[],\n propertyName: keyof T,\n value: boolean\n): T[] => {\n return locations.filter(location => location[propertyName] === value);\n};\n","import React, { useEffect, useState } from \"react\";\nimport { QueryClient } from \"@tanstack/react-query\";\nimport { PGLCoreServiceProvider } from \"@phygitallabs/api-core\";\nimport { RewardServiceProvider } from \"@phygitallabs/reward\";\nimport { AchievementServiceProvider } from \"@phygitallabs/achievement\";\nimport { GenerateCertificateServiceProvider } from \"@phygitallabs/generate-certificate\";\nimport { PhygitalConsentProvider } from \"@phygitallabs/phygital-consent\";\nimport { DataTrackingConsentSync } from \"../modules/data-tracking\";\n\nimport serviceApiUrl from \"../constants/service\";\nimport { APIConfig, ServiceConfig } from \"../types/service\";\n\nimport { checkDeviceUid } from \"../modules/auth/helpers\";\n\nimport { useAuth } from \"../modules/auth/store/authStore\";\n\nimport { httpMaxRetries, retryAttemptsRefreshToken } from \"../modules/auth/constants\";\nimport { getFromLS, setToLS } from \"@phygitallabs/helpers\";\nimport { tokenStorage } from \"@phygitallabs/authentication\";\n\nimport axios from \"axios\";\n\ninterface ServicesProviderProps {\n children: React.ReactNode;\n queryClient: QueryClient;\n apiConfig: APIConfig;\n firebaseConfig?: any;\n}\n\nexport const ServicesProvider: React.FC<ServicesProviderProps> = ({\n children,\n queryClient,\n apiConfig = {\n environment: \"dev\",\n version: \"v1\",\n },\n}) => {\n const { signOut, refreshToken } = useAuth();\n const { environment, version } = apiConfig;\n const [commonServiceConfig, setCommonServiceConfig] = useState<ServiceConfig | null>(null);\n\n const [deviceUid, setDeviceUid] = useState<string>(\"\");\n\n useEffect(() => {\n const initDeviceUid = async () => {\n const deviceUid = await checkDeviceUid();\n setDeviceUid(deviceUid);\n };\n initDeviceUid();\n }, []);\n\n // Init client\n useEffect(() => {\n const initClient = async () => {\n try {\n const deviceUid = await checkDeviceUid();\n\n const responseInterceptors = {\n onFulfilled: (response: any) => response,\n onRejected: async (error: any) => {\n const originalRequest = error.config;\n const token = tokenStorage.getAuthToken();\n\n if (error.response?.status === 401 && !originalRequest._retry) {\n const retryAttempts = parseInt(getFromLS(retryAttemptsRefreshToken) || \"0\", 10);\n if (retryAttempts >= httpMaxRetries) {\n await signOut();\n setToLS(retryAttemptsRefreshToken, 0);\n return Promise.reject(error);\n }\n\n setToLS(retryAttemptsRefreshToken, `${retryAttempts + 1}`);\n originalRequest._retry = true;\n\n if (token) {\n try {\n const result = await refreshToken();\n if (result?.data?.idToken) {\n originalRequest.headers.Authorization = `Bearer ${result?.data?.idToken}`;\n return axios(originalRequest);\n }\n } catch (refreshError) {\n console.error(\"Failed to refresh token:\", refreshError);\n await signOut();\n return Promise.reject(refreshError);\n }\n }\n }\n },\n };\n\n const requestInterceptors = {\n onFulfilled: (config: any) => config,\n onRejected: (error: any) => Promise.reject(error),\n };\n\n const axiosConfig = {\n headers: {\n \"Content-Type\": \"application/json\",\n \"Device-UID\": deviceUid,\n },\n };\n\n const config: ServiceConfig = {\n queryClient,\n axiosConfig,\n responseInterceptors,\n requestInterceptors,\n useDevTool: true,\n };\n\n setCommonServiceConfig(config);\n } catch (error) {\n console.error(error);\n }\n };\n\n initClient();\n }, [queryClient]);\n\n if (!commonServiceConfig) {\n return <></>;\n }\n\n return (\n <PGLCoreServiceProvider\n {...commonServiceConfig}\n baseURL={`${serviceApiUrl[environment].API_BASE_URL}/${version}`}\n baseCoreURL={`${serviceApiUrl[environment].API_BASE_CORE_URL}/${version}`}\n >\n <RewardServiceProvider\n {...commonServiceConfig}\n // baseURL={`${serviceApiUrl[environment].API_REWARD_URL}/${version}`}\n baseURL={`${serviceApiUrl[environment].API_REWARD_URL}/v1`} // todo: using v1 until backend fully migrate\n >\n <AchievementServiceProvider\n {...commonServiceConfig}\n baseURL={`${serviceApiUrl[environment].API_ACHIEVEMENT_URL}/${version}`}\n >\n <GenerateCertificateServiceProvider\n {...commonServiceConfig}\n baseURL={`${serviceApiUrl[environment].API_GENERATE_CERTIFICATE_URL}/v1`}\n >\n <PhygitalConsentProvider\n {...commonServiceConfig}\n deviceId={deviceUid}\n baseURL={`${serviceApiUrl[environment].API_CONSENT_URL}/v1`}\n axiosConfig={{\n headers: {\n \"Content-Type\": \"application/json\",\n },\n }}\n >\n <DataTrackingConsentSync />\n {children}\n </PhygitalConsentProvider>\n </GenerateCertificateServiceProvider>\n </AchievementServiceProvider>\n </RewardServiceProvider>\n </PGLCoreServiceProvider>\n );\n};\n","import React, { useMemo } from \"react\";\n\nimport { ServicesProvider } from \"./ServicesProvider\";\nimport { APIConfig } from \"../types/service\";\nimport { QueryClient } from \"@tanstack/react-query\";\n\nimport { AuthProvider } from \"../modules/auth\";\nimport serviceApiUrl from \"../constants/service\";\nimport { OpenReplayConfig, SessionReplayProvider } from \"../modules/session-replay\";\n\ninterface TapquestCoreProviderProps {\n children: React.ReactNode;\n queryClient: QueryClient;\n apiConfig: APIConfig;\n}\n\nexport const TapquestCoreProvider: React.FC<TapquestCoreProviderProps> = ({\n children,\n queryClient,\n apiConfig,\n // authCallbacks\n}) => {\n const { environment } = apiConfig;\n\n const sessionReplayConfig: OpenReplayConfig | undefined = useMemo(() => {\n const projectKey = process.env.NEXT_PUBLIC_OPENREPLAY_PROJECT_KEY;\n\n // Only configure if project key is provided\n if (!projectKey) {\n return undefined;\n }\n\n return {\n projectKey,\n ingestPoint: process.env.NEXT_PUBLIC_OPENREPLAY_INGEST_POINT,\n debug: process.env.NODE_ENV === \"development\",\n captureExceptions: true,\n capturePerformance: true,\n obscureTextEmails: true,\n obscureInputEmails: true,\n };\n }, []);\n\n return (\n <SessionReplayProvider config={sessionReplayConfig}>\n <ServicesProvider\n queryClient={queryClient}\n apiConfig={apiConfig}\n >\n <AuthProvider\n baseURL={`${serviceApiUrl[environment].API_BASE_URL}`}\n queryClient={queryClient}\n >\n {children}\n </AuthProvider>\n </ServicesProvider>\n </SessionReplayProvider>\n );\n};","import { Achievement, useManyAchievements } from \"@phygitallabs/achievement\";\nimport { EntityRewardModel } from \"@phygitallabs/reward\";\nimport { useCreateModelGroupReward } from \"@phygitallabs/reward\";\nimport { useEffect, useMemo } from \"react\";\n\ninterface UseAchivementPlusRewardModelParams {\n campaignId: string;\n}\ninterface GroupRewardData {\n reward_models: EntityRewardModel[][];\n}\n\nexport interface AchievementWithRewardModel {\n id: string;\n name: string;\n reward_model: EntityRewardModel | null;\n subAchievements: {\n id: string;\n reward_model: EntityRewardModel | null;\n }[];\n}\n\nfunction buildMappedAchievements(\n achievements: Achievement[],\n groupRewardData: GroupRewardData\n) {\n if (!groupRewardData?.reward_models) return [];\n\n const rewardModels = groupRewardData.reward_models;\n\n return achievements.map((achievement, achievementIndex) => {\n const parentReward = rewardModels[achievementIndex]?.[0] || null;\n\n const subAchievements =\n achievement.subAchievementIds?.map((subId: string, subIndex: number) => {\n const reward =\n rewardModels[\n achievementIndex * (achievement.subAchievementIds?.length || 0) +\n subIndex +\n 1\n ]?.[0] || null;\n\n return {\n id: subId,\n reward_model: reward,\n };\n }) || [];\n\n return {\n id: achievement.id,\n name: achievement.name,\n reward_model: parentReward,\n subAchievements,\n };\n });\n}\n\nconst useAchivementPlusRewardModel = ({\n campaignId,\n}: UseAchivementPlusRewardModelParams): {\n mappedAchievements: AchievementWithRewardModel[];\n isLoading: boolean;\n} => {\n const { data: achievements, isLoading: isLoadingAchievements } =\n useManyAchievements(\n {\n \"filter.labels\": { campaign_id: campaignId },\n \"filter.type\": \"group_mission\",\n \"pagination.limit\": 200,\n },\n { enabled: !!campaignId }\n );\n\n const groupRewardIds = useMemo(() => {\n if (!achievements?.data) return [];\n return achievements.data\n .map((achievement) => achievement.groupRewardId)\n .filter((id): id is string => id !== undefined);\n }, [achievements?.data]);\n\n const {\n mutate: fetchGroupRewardModels,\n data: groupRewardModelsData,\n isPending: isPendingGroupRewardModels,\n } = useCreateModelGroupReward();\n useEffect(() => {\n if (groupRewardIds.length > 0) {\n fetchGroupRewardModels({ group_reward_ids: groupRewardIds });\n }\n }, [groupRewardIds, fetchGroupRewardModels]);\n\n const mappedAchievements: AchievementWithRewardModel[] = useMemo(() => {\n if (!groupRewardModelsData?.data || !achievements?.data) return [];\n return buildMappedAchievements(\n achievements.data,\n groupRewardModelsData.data\n );\n }, [groupRewardModelsData, achievements?.data]);\n\n return {\n mappedAchievements,\n isLoading: isLoadingAchievements || isPendingGroupRewardModels,\n };\n};\n\nexport default useAchivementPlusRewardModel;\n","export enum Environment {\n DEV = \"dev\",\n STAGING = \"staging\",\n PRODUCTION = \"production\",\n}\n\nexport type EnvironmentType = \"dev\" | \"staging\" | \"production\";\nexport type APIVersionType = \"v1\" | \"v2\";"]}
|