@phygitallabs/tapquest-core 2.9.0 → 2.9.1
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/package.json +4 -5
- package/tsup.config.ts +1 -1
- package/dist/index.cjs +0 -1809
- package/dist/index.cjs.map +0 -1
- package/dist/index.d.cts +0 -684
package/dist/index.cjs
DELETED
|
@@ -1,1809 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __create = Object.create;
|
|
3
|
-
var __defProp = Object.defineProperty;
|
|
4
|
-
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
|
-
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
-
var __getProtoOf = Object.getPrototypeOf;
|
|
7
|
-
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
|
-
var __export = (target, all) => {
|
|
9
|
-
for (var name in all)
|
|
10
|
-
__defProp(target, name, { get: all[name], enumerable: true });
|
|
11
|
-
};
|
|
12
|
-
var __copyProps = (to, from, except, desc) => {
|
|
13
|
-
if (from && typeof from === "object" || typeof from === "function") {
|
|
14
|
-
for (let key of __getOwnPropNames(from))
|
|
15
|
-
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
16
|
-
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
17
|
-
}
|
|
18
|
-
return to;
|
|
19
|
-
};
|
|
20
|
-
var __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "default"), secondTarget && __copyProps(secondTarget, mod, "default"));
|
|
21
|
-
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
22
|
-
// If the importer is in node compatibility mode or this is not an ESM
|
|
23
|
-
// file that has been converted to a CommonJS file using a Babel-
|
|
24
|
-
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
25
|
-
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
26
|
-
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
27
|
-
mod
|
|
28
|
-
));
|
|
29
|
-
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
30
|
-
|
|
31
|
-
// src/index.ts
|
|
32
|
-
var index_exports = {};
|
|
33
|
-
__export(index_exports, {
|
|
34
|
-
ALLOWED_ORIGINS: () => ALLOWED_ORIGINS,
|
|
35
|
-
AchievementRuleActionType: () => import_achievement3.AchievementRuleActionType,
|
|
36
|
-
AchievementServiceProvider: () => import_achievement3.AchievementServiceProvider,
|
|
37
|
-
AchievementType: () => AchievementType,
|
|
38
|
-
AuthProvider: () => AuthProvider,
|
|
39
|
-
CALLBACK_URL: () => CALLBACK_URL,
|
|
40
|
-
CampaignState: () => import_api_core10.CampaignState,
|
|
41
|
-
CmentityRewardType: () => import_reward2.CmentityRewardType,
|
|
42
|
-
NotificationProvider: () => NotificationProvider,
|
|
43
|
-
RewardClaimStatus: () => RewardClaimStatus,
|
|
44
|
-
TapquestCoreProvider: () => TapquestCoreProvider,
|
|
45
|
-
TaskType: () => TaskType,
|
|
46
|
-
UserSourceType: () => import_api_core6.UserSourceType,
|
|
47
|
-
accessTokenKey: () => accessTokenKey,
|
|
48
|
-
checkDeviceUid: () => checkDeviceUid,
|
|
49
|
-
chipAuthTokenKey: () => chipAuthTokenKey,
|
|
50
|
-
cn: () => import_helpers5.cn,
|
|
51
|
-
convertSnakeToCamel: () => convertSnakeToCamel,
|
|
52
|
-
deviceUIDKey: () => deviceUIDKey,
|
|
53
|
-
fileToBase64: () => import_helpers5.fileToBase64,
|
|
54
|
-
filterLocationsByProperty: () => filterLocationsByProperty,
|
|
55
|
-
generateDeviceId: () => generateDeviceId,
|
|
56
|
-
getAccessToken: () => getAccessToken,
|
|
57
|
-
getActionsFromAchievementRule: () => getActionsFromAchievementRule,
|
|
58
|
-
getChipAuthToken: () => getChipAuthToken,
|
|
59
|
-
getDeviceUid: () => getDeviceUid,
|
|
60
|
-
getLocationIdsFromAchievementRule: () => getLocationIdsFromAchievementRule,
|
|
61
|
-
getRefreshToken: () => getRefreshToken,
|
|
62
|
-
getRetryAttemptsRefreshToken: () => getRetryAttemptsRefreshToken,
|
|
63
|
-
getUserInfo: () => getUserInfo,
|
|
64
|
-
httpMaxRetries: () => httpMaxRetries,
|
|
65
|
-
isAchievementCompleted: () => isAchievementCompleted,
|
|
66
|
-
locationQueryKeys: () => import_api_core11.locationQueryKeys,
|
|
67
|
-
memoriesKey: () => import_api_core2.memoriesKey,
|
|
68
|
-
parse: () => import_helpers5.parse,
|
|
69
|
-
refreshTokenKey: () => refreshTokenKey,
|
|
70
|
-
removeAccessToken: () => removeAccessToken,
|
|
71
|
-
removeChipAuthToken: () => removeChipAuthToken,
|
|
72
|
-
removeDeviceUid: () => removeDeviceUid,
|
|
73
|
-
removeRefreshToken: () => removeRefreshToken,
|
|
74
|
-
removeUserInfo: () => removeUserInfo,
|
|
75
|
-
resetMemoriesQuery: () => import_api_core2.resetMemoriesQuery,
|
|
76
|
-
retryAttemptsRefreshToken: () => retryAttemptsRefreshToken,
|
|
77
|
-
setAccessToken: () => setAccessToken,
|
|
78
|
-
setChipAuthToken: () => setChipAuthToken,
|
|
79
|
-
setDeviceUid: () => setDeviceUid,
|
|
80
|
-
setRefreshToken: () => setRefreshToken,
|
|
81
|
-
setRetryAttemptsRefreshToken: () => setRetryAttemptsRefreshToken,
|
|
82
|
-
setUserInfo: () => setUserInfo,
|
|
83
|
-
sortLocationsByIndex: () => sortLocationsByIndex,
|
|
84
|
-
useAchievementProgress: () => import_achievement2.useAchievementProgress,
|
|
85
|
-
useAchivementPlusRewardModel: () => achivementPlusRewardModel_default,
|
|
86
|
-
useAuth: () => useAuth,
|
|
87
|
-
useCampaignDetail: () => import_api_core9.useOneCampaign,
|
|
88
|
-
useCancelUserRewardsRequest: () => import_api_core5.useCancelUserRewardsRequest,
|
|
89
|
-
useChipScanStory: () => import_api_core7.useChipScanStory,
|
|
90
|
-
useClaimUserReward: () => import_reward.useClaimUserReward,
|
|
91
|
-
useClearUserRewardCache: () => import_reward.useClearUserRewardCache,
|
|
92
|
-
useCreateCertificate: () => import_generate_certificate2.useCreateCertificate,
|
|
93
|
-
useCreateCertificateAnonymous: () => import_generate_certificate2.useCreateCertificateAnonymous,
|
|
94
|
-
useCreateCertificateWithMask: () => import_generate_certificate2.useCreateCertificateWithMask,
|
|
95
|
-
useCreateMemory: () => import_api_core2.useCreateMemory,
|
|
96
|
-
useCreateModelGroupReward: () => import_reward.useCreateModelGroupReward,
|
|
97
|
-
useCreateRewardModel: () => import_reward.useCreateRewardModel,
|
|
98
|
-
useDataTracking: () => useDataTracking,
|
|
99
|
-
useDeleteRewardModel: () => import_reward.useDeleteRewardModel,
|
|
100
|
-
useGenerateFansipanCertificate: () => import_generate_certificate2.useGenerateFansipanCertificate,
|
|
101
|
-
useGenerateTemplateCertificate: () => import_generate_certificate2.useGenerateTemplateCertificate,
|
|
102
|
-
useGenerateThaocamvienCertificate: () => import_generate_certificate2.useGenerateThaocamvienCertificate,
|
|
103
|
-
useGetRewardModel: () => import_reward.useGetRewardModel,
|
|
104
|
-
useGetUserRewards: () => import_reward.useGetUserRewards,
|
|
105
|
-
useGoogleLogin: () => useGoogleLogin,
|
|
106
|
-
useInfiniteMemories: () => import_api_core2.useInfiniteMemories,
|
|
107
|
-
useListRewardModels: () => import_reward.useListRewardModels,
|
|
108
|
-
useLocationDetail: () => import_api_core11.useOneLocation,
|
|
109
|
-
useLocationProgress: () => import_api_core11.useUserCampaignsCompletedLocation,
|
|
110
|
-
useLocationsList: () => import_api_core11.useManyLocations,
|
|
111
|
-
useManyAchievementProgress: () => useManyAchievementProgress,
|
|
112
|
-
useManyAchievements: () => import_achievement2.useManyAchievements,
|
|
113
|
-
useManyAchievementsRewardModels: () => import_achievement2.useManyAchievementsRewardModels,
|
|
114
|
-
useManyChildrenAchievements: () => import_achievement2.useManyChildrenAchievements,
|
|
115
|
-
useManyMemory: () => import_api_core2.useManyMemory,
|
|
116
|
-
useManyUserActionLocations: () => import_api_core11.useManyUserActionLocations,
|
|
117
|
-
useManyUserRewards: () => import_reward.useManyUserRewards,
|
|
118
|
-
useMyProfile: () => import_api_core5.useMyProfile,
|
|
119
|
-
useOneAchievement: () => import_achievement2.useOneAchievement,
|
|
120
|
-
useOneMemory: () => import_api_core2.useOneMemory,
|
|
121
|
-
useOneUserCampaign: () => import_api_core9.useOneUserCampaign,
|
|
122
|
-
usePGLCoreService: () => import_api_core8.usePGLCoreService,
|
|
123
|
-
useScanChip: () => useScanChip,
|
|
124
|
-
useSendEmail: () => import_api_core13.useSendEmail,
|
|
125
|
-
useSyncCheckin: () => import_api_core5.useSyncCheckin,
|
|
126
|
-
useUpdateMyProfile: () => import_api_core5.useUpdateMyProfile,
|
|
127
|
-
useUpdateRewardModel: () => import_reward.useUpdateRewardModel,
|
|
128
|
-
useUploadMedia: () => import_api_core2.useUploadMedia,
|
|
129
|
-
useUserAchievementAction: () => import_achievement2.useUserAchievementAction,
|
|
130
|
-
useUserCampaignAction: () => import_api_core9.useUserCampaignAction,
|
|
131
|
-
useV1ListRewards: () => import_reward.useV1ListRewards,
|
|
132
|
-
userInfoKey: () => userInfoKey,
|
|
133
|
-
wrapTextWithFont: () => import_generate_certificate3.wrapTextWithFont
|
|
134
|
-
});
|
|
135
|
-
module.exports = __toCommonJS(index_exports);
|
|
136
|
-
|
|
137
|
-
// src/modules/achievement/hooks/index.ts
|
|
138
|
-
var import_achievement = require("@phygitallabs/achievement");
|
|
139
|
-
var import_api_core = require("@phygitallabs/api-core");
|
|
140
|
-
var import_achievement2 = require("@phygitallabs/achievement");
|
|
141
|
-
|
|
142
|
-
// src/modules/achievement/helpers/index.ts
|
|
143
|
-
var getLocationIdsFromAchievementRule = (achievement) => {
|
|
144
|
-
if (!achievement.rule) return [];
|
|
145
|
-
const locationIds = [];
|
|
146
|
-
Object.values(achievement.rule).forEach((ruleList) => {
|
|
147
|
-
if (!ruleList.rules) return;
|
|
148
|
-
ruleList.rules.forEach((rule) => {
|
|
149
|
-
if (!rule.filter) return;
|
|
150
|
-
Object.values(rule.filter).forEach((filterList) => {
|
|
151
|
-
if (!filterList.filters) return;
|
|
152
|
-
filterList.filters.forEach((filter) => {
|
|
153
|
-
if (filter.label === "location_id" && filter.value) {
|
|
154
|
-
if (Array.isArray(filter.value)) {
|
|
155
|
-
locationIds.push(...filter.value);
|
|
156
|
-
} else {
|
|
157
|
-
locationIds.push(filter.value);
|
|
158
|
-
}
|
|
159
|
-
}
|
|
160
|
-
});
|
|
161
|
-
});
|
|
162
|
-
});
|
|
163
|
-
});
|
|
164
|
-
return Array.from(new Set(locationIds));
|
|
165
|
-
};
|
|
166
|
-
var getActionsFromAchievementRule = (achievement) => {
|
|
167
|
-
if (!achievement.rule) return [];
|
|
168
|
-
const actions = [];
|
|
169
|
-
Object.values(achievement.rule).forEach((ruleList) => {
|
|
170
|
-
if (!ruleList.rules) return;
|
|
171
|
-
ruleList.rules.forEach((rule) => {
|
|
172
|
-
if (rule.action) {
|
|
173
|
-
actions.push(rule.action);
|
|
174
|
-
}
|
|
175
|
-
});
|
|
176
|
-
});
|
|
177
|
-
return Array.from(new Set(actions));
|
|
178
|
-
};
|
|
179
|
-
var isAchievementCompleted = (achievement) => {
|
|
180
|
-
return achievement.isCompleted || achievement.overallPercentage === 100;
|
|
181
|
-
};
|
|
182
|
-
function convertSnakeToCamel(obj) {
|
|
183
|
-
if (obj === null || obj === void 0) {
|
|
184
|
-
return obj;
|
|
185
|
-
}
|
|
186
|
-
if (Array.isArray(obj)) {
|
|
187
|
-
return obj.map(
|
|
188
|
-
(item) => convertSnakeToCamel(item)
|
|
189
|
-
);
|
|
190
|
-
}
|
|
191
|
-
if (typeof obj === "object" && obj.constructor === Object) {
|
|
192
|
-
const converted = {};
|
|
193
|
-
for (const key in obj) {
|
|
194
|
-
if (obj.hasOwnProperty(key)) {
|
|
195
|
-
const camelKey = key.replace(
|
|
196
|
-
/_([a-z])/g,
|
|
197
|
-
(_, letter) => letter.toUpperCase()
|
|
198
|
-
);
|
|
199
|
-
converted[camelKey] = convertSnakeToCamel(
|
|
200
|
-
obj[key]
|
|
201
|
-
);
|
|
202
|
-
}
|
|
203
|
-
}
|
|
204
|
-
return converted;
|
|
205
|
-
}
|
|
206
|
-
return obj;
|
|
207
|
-
}
|
|
208
|
-
|
|
209
|
-
// src/modules/achievement/hooks/index.ts
|
|
210
|
-
var useManyAchievementProgress = (params, options) => {
|
|
211
|
-
const isLoggedIn = !!params.userId;
|
|
212
|
-
const queryParams = isLoggedIn ? {
|
|
213
|
-
achievementIds: params.achievementIds,
|
|
214
|
-
userId: params.userId,
|
|
215
|
-
applicationId: params.applicationId
|
|
216
|
-
} : {
|
|
217
|
-
achievement_ids: params.achievementIds,
|
|
218
|
-
device_uid: params.deviceUid,
|
|
219
|
-
applicationId: params.applicationId
|
|
220
|
-
};
|
|
221
|
-
if (isLoggedIn) {
|
|
222
|
-
return (0, import_achievement.useManyAchievementProgress)(
|
|
223
|
-
queryParams,
|
|
224
|
-
{
|
|
225
|
-
...options,
|
|
226
|
-
select: (data) => data.map((item) => ({
|
|
227
|
-
...item,
|
|
228
|
-
isCompleted: isAchievementCompleted(item)
|
|
229
|
-
}))
|
|
230
|
-
}
|
|
231
|
-
);
|
|
232
|
-
}
|
|
233
|
-
return (0, import_api_core.useManyAchievementProgressByDevice)(
|
|
234
|
-
queryParams,
|
|
235
|
-
{
|
|
236
|
-
...options,
|
|
237
|
-
select: (data) => {
|
|
238
|
-
const camelCaseData = convertSnakeToCamel(data);
|
|
239
|
-
return camelCaseData.map((item) => ({
|
|
240
|
-
...item,
|
|
241
|
-
isCompleted: isAchievementCompleted(item)
|
|
242
|
-
}));
|
|
243
|
-
}
|
|
244
|
-
}
|
|
245
|
-
);
|
|
246
|
-
};
|
|
247
|
-
|
|
248
|
-
// src/modules/achievement/types/index.ts
|
|
249
|
-
var import_achievement3 = require("@phygitallabs/achievement");
|
|
250
|
-
var AchievementType = /* @__PURE__ */ ((AchievementType2) => {
|
|
251
|
-
AchievementType2["DEFAULT"] = "default";
|
|
252
|
-
AchievementType2["MULTIPLE_CHECK_INS"] = "multiple_check_ins";
|
|
253
|
-
AchievementType2["RANDOM_CHECK_INS"] = "random_check_ins";
|
|
254
|
-
AchievementType2["GROUP_MISSION"] = "group_mission";
|
|
255
|
-
return AchievementType2;
|
|
256
|
-
})(AchievementType || {});
|
|
257
|
-
|
|
258
|
-
// src/modules/reward/hooks/useRewardService.ts
|
|
259
|
-
var import_reward = require("@phygitallabs/reward");
|
|
260
|
-
|
|
261
|
-
// src/modules/reward/types/enums.ts
|
|
262
|
-
var import_reward2 = require("@phygitallabs/reward");
|
|
263
|
-
var RewardClaimStatus = /* @__PURE__ */ ((RewardClaimStatus2) => {
|
|
264
|
-
RewardClaimStatus2["NOT_CLAIMED"] = "not_claimed";
|
|
265
|
-
RewardClaimStatus2["CLAIMED"] = "claimed";
|
|
266
|
-
RewardClaimStatus2["IN_PROGRESS"] = "in_progress";
|
|
267
|
-
RewardClaimStatus2["FAILED"] = "failed";
|
|
268
|
-
return RewardClaimStatus2;
|
|
269
|
-
})(RewardClaimStatus || {});
|
|
270
|
-
|
|
271
|
-
// src/modules/notification/index.ts
|
|
272
|
-
var notification_exports = {};
|
|
273
|
-
__export(notification_exports, {
|
|
274
|
-
NotificationProvider: () => NotificationProvider
|
|
275
|
-
});
|
|
276
|
-
__reExport(notification_exports, require("@phygitallabs/notification-api"));
|
|
277
|
-
|
|
278
|
-
// src/modules/notification/providers/index.tsx
|
|
279
|
-
var import_notification_api = require("@phygitallabs/notification-api");
|
|
280
|
-
|
|
281
|
-
// src/constants/service.ts
|
|
282
|
-
var serviceApiUrl = {
|
|
283
|
-
dev: {
|
|
284
|
-
API_BASE_URL: "https://backend-dev.nomion.io",
|
|
285
|
-
API_BASE_CORE_URL: "https://backend-dev.nomion.io/core",
|
|
286
|
-
API_ACHIEVEMENT_URL: "https://backend-dev.nomion.io/achievement",
|
|
287
|
-
API_REWARD_URL: "https://backend-dev.nomion.io/reward",
|
|
288
|
-
API_GENERATE_CERTIFICATE_URL: "https://media-prc-dev.nomion.io/api",
|
|
289
|
-
API_NOTIFICATION_SOCKET_URL: "https://backend-dev.nomion.io/notification-ws/ws"
|
|
290
|
-
},
|
|
291
|
-
staging: {
|
|
292
|
-
API_BASE_URL: "https://backend-staging.nomion.io",
|
|
293
|
-
API_BASE_CORE_URL: "https://backend-staging.nomion.io/core",
|
|
294
|
-
API_ACHIEVEMENT_URL: "https://backend-staging.nomion.io/achievement",
|
|
295
|
-
API_REWARD_URL: "https://backend-staging.nomion.io/reward",
|
|
296
|
-
API_GENERATE_CERTIFICATE_URL: "https://media-prc-staging.nomion.io/api",
|
|
297
|
-
API_NOTIFICATION_SOCKET_URL: "https://backend-staging.nomion.io/notification-ws/ws"
|
|
298
|
-
},
|
|
299
|
-
production: {
|
|
300
|
-
API_BASE_URL: "https://backend.nomion.io",
|
|
301
|
-
API_BASE_CORE_URL: "https://backend.nomion.io/core",
|
|
302
|
-
API_ACHIEVEMENT_URL: "https://backend.nomion.io/achievement",
|
|
303
|
-
API_REWARD_URL: "https://backend.nomion.io/reward",
|
|
304
|
-
API_GENERATE_CERTIFICATE_URL: "https://media-prc.nomion.io/api",
|
|
305
|
-
API_NOTIFICATION_SOCKET_URL: "https://backend.nomion.io/notification-ws/ws"
|
|
306
|
-
}
|
|
307
|
-
};
|
|
308
|
-
var service_default = serviceApiUrl;
|
|
309
|
-
|
|
310
|
-
// src/modules/notification/providers/index.tsx
|
|
311
|
-
var import_jsx_runtime = require("react/jsx-runtime");
|
|
312
|
-
var NotificationProvider = ({
|
|
313
|
-
children,
|
|
314
|
-
autoConnect = true,
|
|
315
|
-
environment = "dev",
|
|
316
|
-
user,
|
|
317
|
-
onWebSocketOpen,
|
|
318
|
-
onWebSocketClose,
|
|
319
|
-
onWebSocketMessage
|
|
320
|
-
}) => {
|
|
321
|
-
const webSocketUrl = service_default[environment]?.API_NOTIFICATION_SOCKET_URL;
|
|
322
|
-
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
323
|
-
import_notification_api.NotificationProvider,
|
|
324
|
-
{
|
|
325
|
-
userUid: user?.id,
|
|
326
|
-
accessToken: user?.accessToken ?? null,
|
|
327
|
-
webSocketUrl,
|
|
328
|
-
autoConnect,
|
|
329
|
-
onWebSocketOpen,
|
|
330
|
-
onWebSocketClose,
|
|
331
|
-
onWebSocketMessage,
|
|
332
|
-
children
|
|
333
|
-
}
|
|
334
|
-
);
|
|
335
|
-
};
|
|
336
|
-
|
|
337
|
-
// src/index.ts
|
|
338
|
-
__reExport(index_exports, notification_exports, module.exports);
|
|
339
|
-
|
|
340
|
-
// src/modules/memory/hooks/index.ts
|
|
341
|
-
var import_api_core2 = require("@phygitallabs/api-core");
|
|
342
|
-
|
|
343
|
-
// src/modules/auth/providers/AuthProvider.tsx
|
|
344
|
-
var import_authentication3 = require("@phygitallabs/authentication");
|
|
345
|
-
var import_react = require("react");
|
|
346
|
-
|
|
347
|
-
// src/modules/auth/store/authStore.ts
|
|
348
|
-
var import_zustand = require("zustand");
|
|
349
|
-
var import_immer = require("zustand/middleware/immer");
|
|
350
|
-
var import_middleware = require("zustand/middleware");
|
|
351
|
-
var import_authentication = require("@phygitallabs/authentication");
|
|
352
|
-
|
|
353
|
-
// src/modules/auth/constants/index.ts
|
|
354
|
-
var userInfoKey = "phygital-user-info";
|
|
355
|
-
var accessTokenKey = "accessToken";
|
|
356
|
-
var refreshTokenKey = "refreshToken";
|
|
357
|
-
var httpMaxRetries = 3;
|
|
358
|
-
var retryAttemptsRefreshToken = "retryAttemptsRefreshToken";
|
|
359
|
-
var deviceUIDKey = "Device-UID";
|
|
360
|
-
var chipAuthTokenKey = "chip-auth-token";
|
|
361
|
-
var CALLBACK_URL = "https://s3-sgn10.fptcloud.com/nomion-assets/platform/callback.html";
|
|
362
|
-
var ALLOWED_ORIGINS = [
|
|
363
|
-
"https://s3-sgn10.fptcloud.com",
|
|
364
|
-
"https://accounts.google.com/"
|
|
365
|
-
];
|
|
366
|
-
|
|
367
|
-
// src/modules/auth/store/authStore.ts
|
|
368
|
-
var initialState = {
|
|
369
|
-
user: null,
|
|
370
|
-
isSignedIn: false,
|
|
371
|
-
isInitialized: false,
|
|
372
|
-
isLoading: false,
|
|
373
|
-
error: null,
|
|
374
|
-
cleanupFunctions: {},
|
|
375
|
-
eventCallbacks: {}
|
|
376
|
-
};
|
|
377
|
-
var useAuthStore = (0, import_zustand.create)()(
|
|
378
|
-
(0, import_middleware.devtools)(
|
|
379
|
-
(0, import_middleware.persist)(
|
|
380
|
-
(0, import_middleware.subscribeWithSelector)(
|
|
381
|
-
(0, import_immer.immer)((set, get) => ({
|
|
382
|
-
...initialState,
|
|
383
|
-
actions: {
|
|
384
|
-
setIsLoading: (isLoading) => set((state) => {
|
|
385
|
-
state.isLoading = isLoading;
|
|
386
|
-
}),
|
|
387
|
-
setCleanupFunctions: (newCleanupFunctions) => set((state) => {
|
|
388
|
-
state.cleanupFunctions = {
|
|
389
|
-
...state.cleanupFunctions,
|
|
390
|
-
...newCleanupFunctions
|
|
391
|
-
};
|
|
392
|
-
}),
|
|
393
|
-
// Event management
|
|
394
|
-
addEventCallbacks: (callbacks) => {
|
|
395
|
-
set((state) => {
|
|
396
|
-
state.eventCallbacks = {
|
|
397
|
-
...state.eventCallbacks,
|
|
398
|
-
...callbacks
|
|
399
|
-
};
|
|
400
|
-
});
|
|
401
|
-
return () => {
|
|
402
|
-
set((state) => {
|
|
403
|
-
state.eventCallbacks = {
|
|
404
|
-
...state.eventCallbacks,
|
|
405
|
-
...callbacks
|
|
406
|
-
};
|
|
407
|
-
});
|
|
408
|
-
};
|
|
409
|
-
},
|
|
410
|
-
// Sign in with email and password
|
|
411
|
-
signInWithEmail: async (email, password) => {
|
|
412
|
-
const { eventCallbacks } = get();
|
|
413
|
-
set((state) => {
|
|
414
|
-
state.isLoading = true;
|
|
415
|
-
state.error = null;
|
|
416
|
-
});
|
|
417
|
-
try {
|
|
418
|
-
const response = await import_authentication.authService.signIn({
|
|
419
|
-
email,
|
|
420
|
-
password
|
|
421
|
-
});
|
|
422
|
-
if (response?.data?.idToken && response?.data?.refreshToken) {
|
|
423
|
-
import_authentication.tokenStorage.setTokens({
|
|
424
|
-
idToken: response.data.idToken,
|
|
425
|
-
refreshToken: response.data.refreshToken
|
|
426
|
-
});
|
|
427
|
-
set((state) => {
|
|
428
|
-
state.isSignedIn = true;
|
|
429
|
-
});
|
|
430
|
-
eventCallbacks.onLoginSuccess?.(response.data.idToken);
|
|
431
|
-
}
|
|
432
|
-
return response;
|
|
433
|
-
} catch (error) {
|
|
434
|
-
if (error?.response?.data?.code === 7) {
|
|
435
|
-
return {
|
|
436
|
-
data: void 0,
|
|
437
|
-
message: "Email verification required",
|
|
438
|
-
code: 7
|
|
439
|
-
};
|
|
440
|
-
}
|
|
441
|
-
const errorMessage = error instanceof Error ? error.message : "Login failed";
|
|
442
|
-
set((state) => {
|
|
443
|
-
state.error = errorMessage;
|
|
444
|
-
});
|
|
445
|
-
eventCallbacks.onLoginError?.(new Error(errorMessage));
|
|
446
|
-
throw error;
|
|
447
|
-
} finally {
|
|
448
|
-
set((state) => {
|
|
449
|
-
state.isLoading = false;
|
|
450
|
-
});
|
|
451
|
-
}
|
|
452
|
-
},
|
|
453
|
-
// Sign in with Google
|
|
454
|
-
signInWithGoogle: async () => {
|
|
455
|
-
const { eventCallbacks } = get();
|
|
456
|
-
try {
|
|
457
|
-
const currentDomain = CALLBACK_URL;
|
|
458
|
-
const userData = await import_authentication.authService.getOAuthSignInUrl(currentDomain);
|
|
459
|
-
return userData;
|
|
460
|
-
} catch (error) {
|
|
461
|
-
const errorMessage = error instanceof Error ? error.message : "Google sign in failed";
|
|
462
|
-
set((state) => {
|
|
463
|
-
state.error = errorMessage;
|
|
464
|
-
});
|
|
465
|
-
eventCallbacks.onLoginError?.(new Error(errorMessage));
|
|
466
|
-
throw error;
|
|
467
|
-
}
|
|
468
|
-
},
|
|
469
|
-
// Sign up with email and password
|
|
470
|
-
signUpWithEmail: async (email, password) => {
|
|
471
|
-
const { eventCallbacks } = get();
|
|
472
|
-
set((state) => {
|
|
473
|
-
state.isLoading = true;
|
|
474
|
-
state.error = null;
|
|
475
|
-
});
|
|
476
|
-
try {
|
|
477
|
-
const response = await import_authentication.authService.signUp({
|
|
478
|
-
email,
|
|
479
|
-
password
|
|
480
|
-
});
|
|
481
|
-
if (response.data) {
|
|
482
|
-
eventCallbacks.onSignupSuccess?.();
|
|
483
|
-
}
|
|
484
|
-
return response;
|
|
485
|
-
} catch (error) {
|
|
486
|
-
const errorMessage = error instanceof Error ? error.message : "Signup failed";
|
|
487
|
-
set((state) => {
|
|
488
|
-
state.error = errorMessage;
|
|
489
|
-
});
|
|
490
|
-
eventCallbacks.onSignupError?.(new Error(errorMessage));
|
|
491
|
-
throw error;
|
|
492
|
-
} finally {
|
|
493
|
-
set((state) => {
|
|
494
|
-
state.isLoading = false;
|
|
495
|
-
state.user = null;
|
|
496
|
-
state.isSignedIn = false;
|
|
497
|
-
});
|
|
498
|
-
}
|
|
499
|
-
},
|
|
500
|
-
// Sign out
|
|
501
|
-
signOut: async () => {
|
|
502
|
-
const { eventCallbacks, cleanupFunctions } = get();
|
|
503
|
-
set((state) => {
|
|
504
|
-
state.isLoading = true;
|
|
505
|
-
state.error = null;
|
|
506
|
-
});
|
|
507
|
-
try {
|
|
508
|
-
set((state) => {
|
|
509
|
-
state.user = null;
|
|
510
|
-
state.isSignedIn = false;
|
|
511
|
-
state.error = null;
|
|
512
|
-
});
|
|
513
|
-
const isTokenExpired = import_authentication.tokenStorage.isTokenExpired();
|
|
514
|
-
if (isTokenExpired) {
|
|
515
|
-
import_authentication.tokenStorage.clearTokens();
|
|
516
|
-
localStorage.clear();
|
|
517
|
-
return;
|
|
518
|
-
}
|
|
519
|
-
await import_authentication.authService.logout();
|
|
520
|
-
localStorage.clear();
|
|
521
|
-
import_authentication.tokenStorage.clearTokens();
|
|
522
|
-
try {
|
|
523
|
-
cleanupFunctions.clearQueryCache?.();
|
|
524
|
-
cleanupFunctions.clearOrganization?.();
|
|
525
|
-
cleanupFunctions.clearCustomData?.();
|
|
526
|
-
cleanupFunctions.clearHeaders?.();
|
|
527
|
-
} catch (cleanupError) {
|
|
528
|
-
console.warn("Error during logout cleanup:", cleanupError);
|
|
529
|
-
}
|
|
530
|
-
eventCallbacks.onLogoutSuccess?.();
|
|
531
|
-
} catch (error) {
|
|
532
|
-
console.log(error);
|
|
533
|
-
const errorMessage = error instanceof Error ? error.message : "Logout failed";
|
|
534
|
-
set((state) => {
|
|
535
|
-
state.error = errorMessage;
|
|
536
|
-
});
|
|
537
|
-
eventCallbacks.onLogoutError?.(new Error(errorMessage));
|
|
538
|
-
throw error;
|
|
539
|
-
} finally {
|
|
540
|
-
set((state) => {
|
|
541
|
-
state.isLoading = false;
|
|
542
|
-
});
|
|
543
|
-
}
|
|
544
|
-
},
|
|
545
|
-
// Send password reset email
|
|
546
|
-
sendPasswordResetEmail: async (email) => {
|
|
547
|
-
set((state) => {
|
|
548
|
-
state.isLoading = true;
|
|
549
|
-
state.error = null;
|
|
550
|
-
});
|
|
551
|
-
try {
|
|
552
|
-
await import_authentication.verifyCodeService.forgotPassword({
|
|
553
|
-
email
|
|
554
|
-
});
|
|
555
|
-
} catch (error) {
|
|
556
|
-
const errorMessage = error instanceof Error ? error.message : "Failed to send reset email";
|
|
557
|
-
set((state) => {
|
|
558
|
-
state.error = errorMessage;
|
|
559
|
-
});
|
|
560
|
-
throw error;
|
|
561
|
-
} finally {
|
|
562
|
-
set((state) => {
|
|
563
|
-
state.isLoading = false;
|
|
564
|
-
});
|
|
565
|
-
}
|
|
566
|
-
},
|
|
567
|
-
resetPassword: async (data) => {
|
|
568
|
-
set((state) => {
|
|
569
|
-
state.isLoading = true;
|
|
570
|
-
state.error = null;
|
|
571
|
-
});
|
|
572
|
-
try {
|
|
573
|
-
const resetPasswordResponse = await import_authentication.verifyCodeService.resetPassword(data);
|
|
574
|
-
return resetPasswordResponse;
|
|
575
|
-
} catch (error) {
|
|
576
|
-
const errorMessage = error instanceof Error ? error.message : "Failed to reset password";
|
|
577
|
-
set((state) => {
|
|
578
|
-
state.error = errorMessage;
|
|
579
|
-
});
|
|
580
|
-
throw error;
|
|
581
|
-
} finally {
|
|
582
|
-
set((state) => {
|
|
583
|
-
state.isLoading = false;
|
|
584
|
-
});
|
|
585
|
-
}
|
|
586
|
-
},
|
|
587
|
-
changePassword: async (data) => {
|
|
588
|
-
set((state) => {
|
|
589
|
-
state.isLoading = true;
|
|
590
|
-
state.error = null;
|
|
591
|
-
});
|
|
592
|
-
try {
|
|
593
|
-
const changePasswordResponse = await import_authentication.verifyCodeService.changePassword(data);
|
|
594
|
-
return changePasswordResponse;
|
|
595
|
-
} catch (error) {
|
|
596
|
-
throw error;
|
|
597
|
-
} finally {
|
|
598
|
-
set((state) => {
|
|
599
|
-
state.isLoading = false;
|
|
600
|
-
});
|
|
601
|
-
}
|
|
602
|
-
},
|
|
603
|
-
verifyEmailCode: async (data) => {
|
|
604
|
-
set((state) => {
|
|
605
|
-
state.isLoading = true;
|
|
606
|
-
state.error = null;
|
|
607
|
-
});
|
|
608
|
-
try {
|
|
609
|
-
const verifyEmailResponse = await import_authentication.verifyCodeService.verifyEmail(data);
|
|
610
|
-
return verifyEmailResponse;
|
|
611
|
-
} catch (error) {
|
|
612
|
-
const errorMessage = error instanceof Error ? error.message : "Failed to send reset email";
|
|
613
|
-
set((state) => {
|
|
614
|
-
state.error = errorMessage;
|
|
615
|
-
});
|
|
616
|
-
throw error;
|
|
617
|
-
} finally {
|
|
618
|
-
set((state) => {
|
|
619
|
-
state.isLoading = false;
|
|
620
|
-
});
|
|
621
|
-
}
|
|
622
|
-
},
|
|
623
|
-
sendVerifyCode: async (data) => {
|
|
624
|
-
set((state) => {
|
|
625
|
-
state.isLoading = true;
|
|
626
|
-
state.error = null;
|
|
627
|
-
});
|
|
628
|
-
try {
|
|
629
|
-
const sendVerifyCodeResponse = await import_authentication.verifyCodeService.sendVerifyCode(data);
|
|
630
|
-
return sendVerifyCodeResponse;
|
|
631
|
-
} catch (error) {
|
|
632
|
-
const errorMessage = error instanceof Error ? error.message : "Failed to send verify code";
|
|
633
|
-
set((state) => {
|
|
634
|
-
state.error = errorMessage;
|
|
635
|
-
});
|
|
636
|
-
throw error;
|
|
637
|
-
} finally {
|
|
638
|
-
set((state) => {
|
|
639
|
-
state.isLoading = false;
|
|
640
|
-
});
|
|
641
|
-
}
|
|
642
|
-
},
|
|
643
|
-
refreshToken: async (refreshToken) => {
|
|
644
|
-
const refreshTokenResponse = await import_authentication.authService.refreshToken({
|
|
645
|
-
refreshToken: refreshToken ?? import_authentication.tokenStorage.getRefreshToken() ?? ""
|
|
646
|
-
});
|
|
647
|
-
return refreshTokenResponse;
|
|
648
|
-
},
|
|
649
|
-
// Clear error
|
|
650
|
-
clearError: () => set((state) => {
|
|
651
|
-
state.error = null;
|
|
652
|
-
}),
|
|
653
|
-
setUser: (user) => set((state) => {
|
|
654
|
-
state.user = user;
|
|
655
|
-
}),
|
|
656
|
-
setIsSignedIn: (isSignedIn) => set((state) => {
|
|
657
|
-
state.isSignedIn = isSignedIn;
|
|
658
|
-
}),
|
|
659
|
-
setIsInitialized: (isInitialized) => set((state) => {
|
|
660
|
-
state.isInitialized = isInitialized;
|
|
661
|
-
}),
|
|
662
|
-
patchUser: (user) => set((state) => {
|
|
663
|
-
if (state.user) {
|
|
664
|
-
state.user = { ...state.user, ...user };
|
|
665
|
-
} else {
|
|
666
|
-
state.user = user;
|
|
667
|
-
}
|
|
668
|
-
}),
|
|
669
|
-
// Initialize the store - check if user is already authenticated from tokenStorage
|
|
670
|
-
initialize: () => {
|
|
671
|
-
set((state) => {
|
|
672
|
-
const token = import_authentication.tokenStorage.getAuthToken();
|
|
673
|
-
state.isSignedIn = !!token;
|
|
674
|
-
state.isInitialized = true;
|
|
675
|
-
});
|
|
676
|
-
},
|
|
677
|
-
// Sync auth state from tokenStorage (called when axios interceptor updates tokens)
|
|
678
|
-
syncAuthState: () => {
|
|
679
|
-
set((state) => {
|
|
680
|
-
const token = import_authentication.tokenStorage.getAuthToken();
|
|
681
|
-
const wasSignedIn = state.isSignedIn;
|
|
682
|
-
state.isSignedIn = !!token;
|
|
683
|
-
if (wasSignedIn !== state.isSignedIn) {
|
|
684
|
-
if (state.isSignedIn) {
|
|
685
|
-
state.eventCallbacks?.onAuthStateChange?.(state.user, true);
|
|
686
|
-
} else {
|
|
687
|
-
state.eventCallbacks?.onAuthStateChange?.(null, false);
|
|
688
|
-
}
|
|
689
|
-
}
|
|
690
|
-
});
|
|
691
|
-
}
|
|
692
|
-
}
|
|
693
|
-
}))
|
|
694
|
-
),
|
|
695
|
-
{
|
|
696
|
-
version: 1,
|
|
697
|
-
name: "auth-store",
|
|
698
|
-
storage: (0, import_middleware.createJSONStorage)(() => localStorage),
|
|
699
|
-
partialize: (state) => ({
|
|
700
|
-
isSignedIn: state.isSignedIn,
|
|
701
|
-
user: state.user
|
|
702
|
-
})
|
|
703
|
-
}
|
|
704
|
-
)
|
|
705
|
-
)
|
|
706
|
-
);
|
|
707
|
-
var useAuth = () => {
|
|
708
|
-
const user = useAuthStore((state) => state.user);
|
|
709
|
-
const isSignedIn = useAuthStore((state) => state.isSignedIn);
|
|
710
|
-
const isInitialized = useAuthStore((state) => state.isInitialized);
|
|
711
|
-
const isLoading = useAuthStore((state) => state.isLoading);
|
|
712
|
-
const error = useAuthStore((state) => state.error);
|
|
713
|
-
const actions = useAuthStore((state) => state.actions);
|
|
714
|
-
return {
|
|
715
|
-
user,
|
|
716
|
-
isSignedIn,
|
|
717
|
-
isInitialized,
|
|
718
|
-
isLoading,
|
|
719
|
-
error,
|
|
720
|
-
...actions
|
|
721
|
-
};
|
|
722
|
-
};
|
|
723
|
-
|
|
724
|
-
// src/modules/auth/utils/user.ts
|
|
725
|
-
var import_jwt_decode = __toESM(require("jwt-decode"), 1);
|
|
726
|
-
var transformProtoUserData = (user, accessToken) => {
|
|
727
|
-
const userData = { ...user };
|
|
728
|
-
let tokenDecoded = {};
|
|
729
|
-
try {
|
|
730
|
-
tokenDecoded = (0, import_jwt_decode.default)(accessToken);
|
|
731
|
-
} catch (error) {
|
|
732
|
-
console.warn("Failed to decode token in transformUserData:", error);
|
|
733
|
-
}
|
|
734
|
-
userData.exp = tokenDecoded.exp || 0;
|
|
735
|
-
userData.accessToken = accessToken || "";
|
|
736
|
-
userData.roles = tokenDecoded?.roles || ["USER" /* USER */];
|
|
737
|
-
userData.account_type = tokenDecoded?.account_type || 0 /* C */;
|
|
738
|
-
userData.picture = user.picture || "";
|
|
739
|
-
return userData;
|
|
740
|
-
};
|
|
741
|
-
|
|
742
|
-
// src/modules/auth/providers/AuthProvider.tsx
|
|
743
|
-
var import_api_core3 = require("@phygitallabs/api-core");
|
|
744
|
-
var import_api_core4 = require("@phygitallabs/api-core");
|
|
745
|
-
var import_achievement4 = require("@phygitallabs/achievement");
|
|
746
|
-
var import_reward3 = require("@phygitallabs/reward");
|
|
747
|
-
var import_generate_certificate = require("@phygitallabs/generate-certificate");
|
|
748
|
-
|
|
749
|
-
// src/modules/auth/hooks/useTokenRefresher.ts
|
|
750
|
-
var import_react_query = require("@tanstack/react-query");
|
|
751
|
-
var import_authentication2 = require("@phygitallabs/authentication");
|
|
752
|
-
function useTokenRefresher() {
|
|
753
|
-
const { refreshToken, signOut } = useAuth();
|
|
754
|
-
const handleRefreshToken = async () => {
|
|
755
|
-
try {
|
|
756
|
-
const isTokenExpired = import_authentication2.tokenStorage.isTokenExpired();
|
|
757
|
-
if (!isTokenExpired) {
|
|
758
|
-
return;
|
|
759
|
-
}
|
|
760
|
-
const newToken = await refreshToken();
|
|
761
|
-
if (newToken.data?.idToken && newToken.data?.refreshToken) {
|
|
762
|
-
import_authentication2.tokenStorage.setTokens({
|
|
763
|
-
idToken: newToken.data?.idToken,
|
|
764
|
-
refreshToken: newToken.data?.refreshToken
|
|
765
|
-
});
|
|
766
|
-
}
|
|
767
|
-
} catch (error) {
|
|
768
|
-
console.error("Failed to refresh token:", error);
|
|
769
|
-
signOut();
|
|
770
|
-
}
|
|
771
|
-
};
|
|
772
|
-
(0, import_react_query.useQuery)({
|
|
773
|
-
queryKey: ["refresh-token"],
|
|
774
|
-
queryFn: () => handleRefreshToken(),
|
|
775
|
-
refetchInterval: 30 * 60 * 1e3,
|
|
776
|
-
// every 30 minutes
|
|
777
|
-
refetchIntervalInBackground: false,
|
|
778
|
-
// even when tab is hidden
|
|
779
|
-
refetchOnWindowFocus: true,
|
|
780
|
-
// also refresh when user returns to tab
|
|
781
|
-
retry: false,
|
|
782
|
-
// don't retry repeatedly if refresh fails
|
|
783
|
-
enabled: !!import_authentication2.tokenStorage.getAuthToken()
|
|
784
|
-
// only run if logged in
|
|
785
|
-
});
|
|
786
|
-
}
|
|
787
|
-
|
|
788
|
-
// src/modules/auth/providers/AuthProvider.tsx
|
|
789
|
-
var import_jsx_runtime2 = require("react/jsx-runtime");
|
|
790
|
-
var AuthStateManager = () => {
|
|
791
|
-
const { updateHeaders } = (0, import_authentication3.useAuthenticationHeaders)();
|
|
792
|
-
const { updateHeaders: updateHeadersPGL, coreApi } = (0, import_api_core4.usePGLCoreService)();
|
|
793
|
-
const { updateHeaders: updateHeadersAchievement } = (0, import_achievement4.useAchievementService)();
|
|
794
|
-
const { updateHeaders: updateHeadersReward } = (0, import_reward3.useRewardService)();
|
|
795
|
-
const { updateHeaders: updateHeadersGenerateCertificate } = (0, import_generate_certificate.useGenerateCertificateService)();
|
|
796
|
-
(0, import_react.useEffect)(() => {
|
|
797
|
-
useAuthStore.getState().actions.initialize();
|
|
798
|
-
const token = import_authentication3.tokenStorage.getAuthToken();
|
|
799
|
-
if (token) {
|
|
800
|
-
updateHeaders({
|
|
801
|
-
Authorization: `Bearer ${token}`
|
|
802
|
-
});
|
|
803
|
-
updateHeadersPGL({
|
|
804
|
-
Authorization: `Bearer ${token}`
|
|
805
|
-
});
|
|
806
|
-
updateHeadersAchievement({
|
|
807
|
-
Authorization: `Bearer ${token}`
|
|
808
|
-
});
|
|
809
|
-
updateHeadersReward({
|
|
810
|
-
Authorization: `Bearer ${token}`
|
|
811
|
-
});
|
|
812
|
-
updateHeadersGenerateCertificate({
|
|
813
|
-
Authorization: `Bearer ${token}`
|
|
814
|
-
});
|
|
815
|
-
const { user } = useAuthStore.getState();
|
|
816
|
-
if (user && user.accessToken !== token) {
|
|
817
|
-
useAuthStore.getState().actions.setUser({
|
|
818
|
-
...user,
|
|
819
|
-
accessToken: token
|
|
820
|
-
});
|
|
821
|
-
}
|
|
822
|
-
}
|
|
823
|
-
let previousIsSignedIn = useAuthStore.getState().isSignedIn;
|
|
824
|
-
const unsub = useAuthStore.subscribe(
|
|
825
|
-
(state) => [state.isSignedIn, state.user],
|
|
826
|
-
async ([isSignedIn]) => {
|
|
827
|
-
if (isSignedIn === previousIsSignedIn) {
|
|
828
|
-
return;
|
|
829
|
-
}
|
|
830
|
-
previousIsSignedIn = isSignedIn;
|
|
831
|
-
if (isSignedIn) {
|
|
832
|
-
const token2 = import_authentication3.tokenStorage.getAuthToken();
|
|
833
|
-
if (token2) {
|
|
834
|
-
updateHeaders({
|
|
835
|
-
Authorization: `Bearer ${token2}`
|
|
836
|
-
});
|
|
837
|
-
updateHeadersPGL({
|
|
838
|
-
Authorization: `Bearer ${token2}`
|
|
839
|
-
});
|
|
840
|
-
updateHeadersAchievement({
|
|
841
|
-
Authorization: `Bearer ${token2}`
|
|
842
|
-
});
|
|
843
|
-
updateHeadersReward({
|
|
844
|
-
Authorization: `Bearer ${token2}`
|
|
845
|
-
});
|
|
846
|
-
updateHeadersGenerateCertificate({
|
|
847
|
-
Authorization: `Bearer ${token2}`
|
|
848
|
-
});
|
|
849
|
-
try {
|
|
850
|
-
const userApi = (0, import_api_core3.userService)(coreApi);
|
|
851
|
-
const userProfile = await userApi.getMyProfile();
|
|
852
|
-
const transformedUserData = transformProtoUserData(
|
|
853
|
-
userProfile,
|
|
854
|
-
token2
|
|
855
|
-
);
|
|
856
|
-
useAuthStore.getState().actions.setUser(transformedUserData);
|
|
857
|
-
} catch (error) {
|
|
858
|
-
useAuthStore.getState().actions.signOut();
|
|
859
|
-
}
|
|
860
|
-
}
|
|
861
|
-
const { eventCallbacks, user } = useAuthStore.getState();
|
|
862
|
-
eventCallbacks?.onAuthStateChange?.(user, true);
|
|
863
|
-
} else {
|
|
864
|
-
updateHeaders({});
|
|
865
|
-
updateHeadersPGL({});
|
|
866
|
-
updateHeadersAchievement({
|
|
867
|
-
Authorization: ``
|
|
868
|
-
});
|
|
869
|
-
updateHeadersReward({
|
|
870
|
-
Authorization: ``
|
|
871
|
-
});
|
|
872
|
-
updateHeadersGenerateCertificate({
|
|
873
|
-
Authorization: ``
|
|
874
|
-
});
|
|
875
|
-
const { eventCallbacks } = useAuthStore.getState();
|
|
876
|
-
eventCallbacks?.onAuthStateChange?.(null, false);
|
|
877
|
-
}
|
|
878
|
-
}
|
|
879
|
-
);
|
|
880
|
-
const unsubTokenChange = import_authentication3.tokenStorage.addTokenChangeListener(async () => {
|
|
881
|
-
const { isSignedIn, user } = useAuthStore.getState();
|
|
882
|
-
if (isSignedIn) {
|
|
883
|
-
const token2 = import_authentication3.tokenStorage.getAuthToken();
|
|
884
|
-
if (token2) {
|
|
885
|
-
updateHeaders({
|
|
886
|
-
Authorization: `Bearer ${token2}`
|
|
887
|
-
});
|
|
888
|
-
updateHeadersPGL({
|
|
889
|
-
Authorization: `Bearer ${token2}`
|
|
890
|
-
});
|
|
891
|
-
updateHeadersAchievement({
|
|
892
|
-
Authorization: `Bearer ${token2}`
|
|
893
|
-
});
|
|
894
|
-
updateHeadersReward({
|
|
895
|
-
Authorization: `Bearer ${token2}`
|
|
896
|
-
});
|
|
897
|
-
updateHeadersGenerateCertificate({
|
|
898
|
-
Authorization: `Bearer ${token2}`
|
|
899
|
-
});
|
|
900
|
-
if (user && user.accessToken !== token2) {
|
|
901
|
-
useAuthStore.getState().actions.setUser({
|
|
902
|
-
...user,
|
|
903
|
-
accessToken: token2
|
|
904
|
-
});
|
|
905
|
-
}
|
|
906
|
-
} else {
|
|
907
|
-
useAuthStore.getState().actions.signOut();
|
|
908
|
-
updateHeaders({});
|
|
909
|
-
updateHeadersPGL({});
|
|
910
|
-
updateHeadersAchievement({
|
|
911
|
-
Authorization: ``
|
|
912
|
-
});
|
|
913
|
-
updateHeadersReward({
|
|
914
|
-
Authorization: ``
|
|
915
|
-
});
|
|
916
|
-
updateHeadersGenerateCertificate({
|
|
917
|
-
Authorization: ``
|
|
918
|
-
});
|
|
919
|
-
}
|
|
920
|
-
}
|
|
921
|
-
});
|
|
922
|
-
return () => {
|
|
923
|
-
unsub();
|
|
924
|
-
unsubTokenChange();
|
|
925
|
-
};
|
|
926
|
-
}, [
|
|
927
|
-
updateHeaders,
|
|
928
|
-
updateHeadersPGL,
|
|
929
|
-
updateHeadersAchievement,
|
|
930
|
-
updateHeadersReward,
|
|
931
|
-
updateHeadersGenerateCertificate,
|
|
932
|
-
coreApi
|
|
933
|
-
]);
|
|
934
|
-
return null;
|
|
935
|
-
};
|
|
936
|
-
var TokenRefresher = () => {
|
|
937
|
-
useTokenRefresher();
|
|
938
|
-
return null;
|
|
939
|
-
};
|
|
940
|
-
var AuthProvider = ({
|
|
941
|
-
children,
|
|
942
|
-
baseURL,
|
|
943
|
-
queryClient
|
|
944
|
-
}) => {
|
|
945
|
-
const axiosConfig = {
|
|
946
|
-
headers: {
|
|
947
|
-
"Content-Type": "application/json"
|
|
948
|
-
}
|
|
949
|
-
};
|
|
950
|
-
return /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(
|
|
951
|
-
import_authentication3.AuthenticationProvider,
|
|
952
|
-
{
|
|
953
|
-
axiosConfig,
|
|
954
|
-
baseURL,
|
|
955
|
-
queryClient,
|
|
956
|
-
children: [
|
|
957
|
-
/* @__PURE__ */ (0, import_jsx_runtime2.jsx)(AuthStateManager, {}),
|
|
958
|
-
/* @__PURE__ */ (0, import_jsx_runtime2.jsx)(TokenRefresher, {}),
|
|
959
|
-
children
|
|
960
|
-
]
|
|
961
|
-
}
|
|
962
|
-
);
|
|
963
|
-
};
|
|
964
|
-
|
|
965
|
-
// src/modules/auth/hooks/useGoogleLogin.ts
|
|
966
|
-
var import_react2 = require("react");
|
|
967
|
-
var import_authentication4 = require("@phygitallabs/authentication");
|
|
968
|
-
function useGoogleLogin(options = {}) {
|
|
969
|
-
const { onSuccess, onError, onPopupBlocked, onPopupClosed } = options;
|
|
970
|
-
const { signInWithGoogle, refreshToken, setIsSignedIn, setIsLoading, isLoading } = useAuth();
|
|
971
|
-
const popupRef = (0, import_react2.useRef)(null);
|
|
972
|
-
const gotDataRef = (0, import_react2.useRef)(false);
|
|
973
|
-
const timerRef = (0, import_react2.useRef)(null);
|
|
974
|
-
const errorRef = (0, import_react2.useRef)(null);
|
|
975
|
-
const handleTokenRefresh = (0, import_react2.useCallback)(
|
|
976
|
-
async (refresh) => {
|
|
977
|
-
if (refresh) {
|
|
978
|
-
try {
|
|
979
|
-
const newToken = await refreshToken(refresh);
|
|
980
|
-
if (newToken.data?.idToken && newToken.data?.refreshToken) {
|
|
981
|
-
import_authentication4.tokenStorage.setTokens({
|
|
982
|
-
idToken: newToken.data.idToken,
|
|
983
|
-
refreshToken: newToken.data.refreshToken
|
|
984
|
-
});
|
|
985
|
-
setIsSignedIn(true);
|
|
986
|
-
setIsLoading(false);
|
|
987
|
-
onSuccess?.();
|
|
988
|
-
}
|
|
989
|
-
} catch (error) {
|
|
990
|
-
const errorMessage = error instanceof Error ? error.message : "Token refresh failed";
|
|
991
|
-
errorRef.current = errorMessage;
|
|
992
|
-
onError?.(errorMessage);
|
|
993
|
-
setIsLoading(false);
|
|
994
|
-
}
|
|
995
|
-
}
|
|
996
|
-
},
|
|
997
|
-
[refreshToken, setIsSignedIn, setIsLoading, onSuccess, onError]
|
|
998
|
-
);
|
|
999
|
-
const cleanup = (0, import_react2.useCallback)(() => {
|
|
1000
|
-
if (timerRef.current) {
|
|
1001
|
-
clearInterval(timerRef.current);
|
|
1002
|
-
timerRef.current = null;
|
|
1003
|
-
}
|
|
1004
|
-
gotDataRef.current = false;
|
|
1005
|
-
}, []);
|
|
1006
|
-
const handleMessage = (0, import_react2.useCallback)(
|
|
1007
|
-
(event) => {
|
|
1008
|
-
const allowedOrigins = ALLOWED_ORIGINS.concat(window?.location?.origin);
|
|
1009
|
-
if (event.origin !== "*" && !allowedOrigins.includes(event.origin)) {
|
|
1010
|
-
console.warn("Rejected message from untrusted origin:", event.origin);
|
|
1011
|
-
return;
|
|
1012
|
-
}
|
|
1013
|
-
if (!event.data || typeof event.data !== "object") {
|
|
1014
|
-
console.warn("Invalid message data received");
|
|
1015
|
-
return;
|
|
1016
|
-
}
|
|
1017
|
-
if (event.data.type === "LOGIN_SUCCESS") {
|
|
1018
|
-
const { refreshToken: refresh } = event.data;
|
|
1019
|
-
if (refresh) {
|
|
1020
|
-
handleTokenRefresh(refresh);
|
|
1021
|
-
}
|
|
1022
|
-
gotDataRef.current = true;
|
|
1023
|
-
cleanup();
|
|
1024
|
-
} else if (event.data.type === "LOGIN_ERROR") {
|
|
1025
|
-
const errorMessage = event.data.error || "Login failed";
|
|
1026
|
-
errorRef.current = errorMessage;
|
|
1027
|
-
onError?.(errorMessage);
|
|
1028
|
-
setIsLoading(false);
|
|
1029
|
-
gotDataRef.current = true;
|
|
1030
|
-
cleanup();
|
|
1031
|
-
}
|
|
1032
|
-
},
|
|
1033
|
-
[handleTokenRefresh, setIsLoading, cleanup, onError]
|
|
1034
|
-
);
|
|
1035
|
-
const signIn = (0, import_react2.useCallback)(async () => {
|
|
1036
|
-
const width = 500;
|
|
1037
|
-
const height = 600;
|
|
1038
|
-
const left = window.screenX + (window.outerWidth - width) / 2;
|
|
1039
|
-
const top = window.screenY + (window.outerHeight - height) / 2;
|
|
1040
|
-
try {
|
|
1041
|
-
errorRef.current = null;
|
|
1042
|
-
setIsLoading(true);
|
|
1043
|
-
const response = await signInWithGoogle();
|
|
1044
|
-
popupRef.current = window.open(
|
|
1045
|
-
`${response.statusMessage}`,
|
|
1046
|
-
"oauthPopup",
|
|
1047
|
-
`width=${width},height=${height},left=${left},top=${top},resizable,scrollbars`
|
|
1048
|
-
);
|
|
1049
|
-
if (!popupRef.current) {
|
|
1050
|
-
setIsLoading(false);
|
|
1051
|
-
const error = "Popup blocked. Please allow popups for this site.";
|
|
1052
|
-
errorRef.current = error;
|
|
1053
|
-
onPopupBlocked?.();
|
|
1054
|
-
onError?.(error);
|
|
1055
|
-
return;
|
|
1056
|
-
}
|
|
1057
|
-
timerRef.current = setInterval(() => {
|
|
1058
|
-
if (popupRef.current && popupRef.current.closed) {
|
|
1059
|
-
if (timerRef.current) {
|
|
1060
|
-
clearInterval(timerRef.current);
|
|
1061
|
-
timerRef.current = null;
|
|
1062
|
-
}
|
|
1063
|
-
if (!gotDataRef.current) {
|
|
1064
|
-
const error = "Authentication popup was closed";
|
|
1065
|
-
errorRef.current = error;
|
|
1066
|
-
onPopupClosed?.();
|
|
1067
|
-
onError?.(error);
|
|
1068
|
-
setIsLoading(false);
|
|
1069
|
-
}
|
|
1070
|
-
}
|
|
1071
|
-
}, 500);
|
|
1072
|
-
} catch (error) {
|
|
1073
|
-
const errorMessage = error instanceof Error ? error.message : "Google sign in failed";
|
|
1074
|
-
errorRef.current = errorMessage;
|
|
1075
|
-
onError?.(errorMessage);
|
|
1076
|
-
setIsLoading(false);
|
|
1077
|
-
}
|
|
1078
|
-
}, [signInWithGoogle, setIsLoading, handleMessage, onError, onPopupBlocked, onPopupClosed]);
|
|
1079
|
-
(0, import_react2.useEffect)(() => {
|
|
1080
|
-
window.addEventListener("message", handleMessage);
|
|
1081
|
-
return () => {
|
|
1082
|
-
window.removeEventListener("message", handleMessage);
|
|
1083
|
-
};
|
|
1084
|
-
}, [handleMessage]);
|
|
1085
|
-
(0, import_react2.useEffect)(() => {
|
|
1086
|
-
return () => {
|
|
1087
|
-
cleanup();
|
|
1088
|
-
};
|
|
1089
|
-
}, [cleanup, handleMessage]);
|
|
1090
|
-
return {
|
|
1091
|
-
signIn,
|
|
1092
|
-
isLoading,
|
|
1093
|
-
error: errorRef.current
|
|
1094
|
-
};
|
|
1095
|
-
}
|
|
1096
|
-
|
|
1097
|
-
// src/modules/auth/helpers/index.ts
|
|
1098
|
-
var import_uuid = require("uuid");
|
|
1099
|
-
var generateDeviceId = async () => {
|
|
1100
|
-
try {
|
|
1101
|
-
const deviceFingerprint = await generateDeviceFingerprint();
|
|
1102
|
-
return deviceFingerprint;
|
|
1103
|
-
} catch (error) {
|
|
1104
|
-
console.error("Error generating device fingerprint:", error);
|
|
1105
|
-
return (0, import_uuid.v4)();
|
|
1106
|
-
}
|
|
1107
|
-
};
|
|
1108
|
-
var generateDeviceFingerprint = async () => {
|
|
1109
|
-
const timestamp = (/* @__PURE__ */ new Date()).toISOString();
|
|
1110
|
-
const fingerprintRaw = [
|
|
1111
|
-
navigator.userAgent,
|
|
1112
|
-
navigator.language,
|
|
1113
|
-
screen.width,
|
|
1114
|
-
screen.height,
|
|
1115
|
-
screen.colorDepth,
|
|
1116
|
-
Intl.DateTimeFormat().resolvedOptions().timeZone,
|
|
1117
|
-
navigator.platform,
|
|
1118
|
-
navigator.hardwareConcurrency,
|
|
1119
|
-
timestamp
|
|
1120
|
-
// Include timestamp
|
|
1121
|
-
].join("::");
|
|
1122
|
-
const encoder = new TextEncoder();
|
|
1123
|
-
const data = encoder.encode(fingerprintRaw);
|
|
1124
|
-
const hashBuffer = await crypto.subtle.digest("SHA-256", data);
|
|
1125
|
-
const hashArray = Array.from(new Uint8Array(hashBuffer));
|
|
1126
|
-
const fingerprint = hashArray.map((b) => b.toString(16).padStart(2, "0")).join("");
|
|
1127
|
-
return fingerprint;
|
|
1128
|
-
};
|
|
1129
|
-
var getDeviceUid = () => {
|
|
1130
|
-
if (typeof window === "undefined") return null;
|
|
1131
|
-
return localStorage.getItem(deviceUIDKey);
|
|
1132
|
-
};
|
|
1133
|
-
var setDeviceUid = (deviceId) => {
|
|
1134
|
-
if (typeof window === "undefined") return;
|
|
1135
|
-
localStorage.setItem(deviceUIDKey, deviceId);
|
|
1136
|
-
};
|
|
1137
|
-
var removeDeviceUid = () => {
|
|
1138
|
-
if (typeof window === "undefined") return;
|
|
1139
|
-
localStorage.removeItem(deviceUIDKey);
|
|
1140
|
-
};
|
|
1141
|
-
var checkDeviceUid = async () => {
|
|
1142
|
-
let deviceUID = getDeviceUid();
|
|
1143
|
-
if (!deviceUID) {
|
|
1144
|
-
deviceUID = await generateDeviceId();
|
|
1145
|
-
setDeviceUid(deviceUID);
|
|
1146
|
-
}
|
|
1147
|
-
return deviceUID;
|
|
1148
|
-
};
|
|
1149
|
-
var getChipAuthToken = () => {
|
|
1150
|
-
if (typeof window === "undefined") return null;
|
|
1151
|
-
return localStorage.getItem(chipAuthTokenKey);
|
|
1152
|
-
};
|
|
1153
|
-
var setChipAuthToken = (value) => {
|
|
1154
|
-
if (typeof window === "undefined") return;
|
|
1155
|
-
localStorage.setItem(chipAuthTokenKey, value);
|
|
1156
|
-
};
|
|
1157
|
-
var removeChipAuthToken = () => {
|
|
1158
|
-
if (typeof window === "undefined") return;
|
|
1159
|
-
localStorage.removeItem(chipAuthTokenKey);
|
|
1160
|
-
};
|
|
1161
|
-
var getRetryAttemptsRefreshToken = () => {
|
|
1162
|
-
if (typeof window === "undefined") return null;
|
|
1163
|
-
return localStorage.getItem(retryAttemptsRefreshToken);
|
|
1164
|
-
};
|
|
1165
|
-
var setRetryAttemptsRefreshToken = (value) => {
|
|
1166
|
-
if (typeof window === "undefined") return;
|
|
1167
|
-
localStorage.setItem(retryAttemptsRefreshToken, value);
|
|
1168
|
-
};
|
|
1169
|
-
var getAccessToken = () => {
|
|
1170
|
-
if (typeof window === "undefined") return null;
|
|
1171
|
-
return localStorage.getItem(accessTokenKey);
|
|
1172
|
-
};
|
|
1173
|
-
var setAccessToken = (value) => {
|
|
1174
|
-
if (typeof window === "undefined") return;
|
|
1175
|
-
localStorage.setItem(accessTokenKey, value);
|
|
1176
|
-
};
|
|
1177
|
-
var removeAccessToken = () => {
|
|
1178
|
-
if (typeof window === "undefined") return;
|
|
1179
|
-
localStorage.removeItem(accessTokenKey);
|
|
1180
|
-
};
|
|
1181
|
-
var getRefreshToken = () => {
|
|
1182
|
-
if (typeof window === "undefined") return null;
|
|
1183
|
-
return localStorage.getItem(refreshTokenKey);
|
|
1184
|
-
};
|
|
1185
|
-
var setRefreshToken = (value) => {
|
|
1186
|
-
if (typeof window === "undefined") return;
|
|
1187
|
-
localStorage.setItem(refreshTokenKey, value);
|
|
1188
|
-
};
|
|
1189
|
-
var removeRefreshToken = () => {
|
|
1190
|
-
if (typeof window === "undefined") return;
|
|
1191
|
-
localStorage.removeItem(refreshTokenKey);
|
|
1192
|
-
};
|
|
1193
|
-
var getUserInfo = () => {
|
|
1194
|
-
if (typeof window === "undefined") return null;
|
|
1195
|
-
const userInfo = localStorage.getItem(userInfoKey);
|
|
1196
|
-
if (!userInfo) return null;
|
|
1197
|
-
try {
|
|
1198
|
-
return JSON.parse(userInfo);
|
|
1199
|
-
} catch (error) {
|
|
1200
|
-
console.error("Failed to parse stored user data:", error);
|
|
1201
|
-
return null;
|
|
1202
|
-
}
|
|
1203
|
-
};
|
|
1204
|
-
var setUserInfo = (userData) => {
|
|
1205
|
-
if (typeof window === "undefined") return;
|
|
1206
|
-
localStorage.setItem(userInfoKey, JSON.stringify(userData));
|
|
1207
|
-
};
|
|
1208
|
-
var removeUserInfo = () => {
|
|
1209
|
-
if (typeof window === "undefined") return;
|
|
1210
|
-
localStorage.removeItem(userInfoKey);
|
|
1211
|
-
};
|
|
1212
|
-
|
|
1213
|
-
// src/modules/user-profile/hooks/index.ts
|
|
1214
|
-
var import_api_core5 = require("@phygitallabs/api-core");
|
|
1215
|
-
|
|
1216
|
-
// src/modules/user-profile/types/index.ts
|
|
1217
|
-
var import_api_core6 = require("@phygitallabs/api-core");
|
|
1218
|
-
|
|
1219
|
-
// src/modules/scan-chip/hooks/index.tsx
|
|
1220
|
-
var import_react3 = require("react");
|
|
1221
|
-
var import_api_core7 = require("@phygitallabs/api-core");
|
|
1222
|
-
var import_api_core8 = require("@phygitallabs/api-core");
|
|
1223
|
-
function useScanChip({ token, id, onScanChipError }) {
|
|
1224
|
-
const { updateHeaders } = (0, import_api_core8.usePGLCoreService)();
|
|
1225
|
-
(0, import_react3.useEffect)(() => {
|
|
1226
|
-
if (!!token) {
|
|
1227
|
-
const header = {
|
|
1228
|
-
"Chip-Authorization": token
|
|
1229
|
-
};
|
|
1230
|
-
setChipAuthToken(token);
|
|
1231
|
-
updateHeaders(header);
|
|
1232
|
-
}
|
|
1233
|
-
}, [token, updateHeaders]);
|
|
1234
|
-
const { data, isLoading, isError, isSuccess } = (0, import_api_core7.useChipScanStory)({
|
|
1235
|
-
token,
|
|
1236
|
-
id
|
|
1237
|
-
});
|
|
1238
|
-
(0, import_react3.useEffect)(() => {
|
|
1239
|
-
if (isError) {
|
|
1240
|
-
onScanChipError?.();
|
|
1241
|
-
}
|
|
1242
|
-
}, [isError, onScanChipError]);
|
|
1243
|
-
if (!data)
|
|
1244
|
-
return {
|
|
1245
|
-
data: null,
|
|
1246
|
-
isLoading,
|
|
1247
|
-
isError,
|
|
1248
|
-
isSuccess
|
|
1249
|
-
};
|
|
1250
|
-
return {
|
|
1251
|
-
data: {
|
|
1252
|
-
externalUrl: data?.external_url,
|
|
1253
|
-
campaignDetail: data?.project,
|
|
1254
|
-
locationDetail: data?.location,
|
|
1255
|
-
scanCounter: data?.scan_counter,
|
|
1256
|
-
campaignId: data?.campaign_id,
|
|
1257
|
-
chipModelId: data?.chip_model_id,
|
|
1258
|
-
organizationId: data?.organization_id,
|
|
1259
|
-
projectId: data?.project_id,
|
|
1260
|
-
locationId: data?.location_id,
|
|
1261
|
-
chipUid: data?.uid
|
|
1262
|
-
},
|
|
1263
|
-
isLoading,
|
|
1264
|
-
isError,
|
|
1265
|
-
isSuccess
|
|
1266
|
-
};
|
|
1267
|
-
}
|
|
1268
|
-
|
|
1269
|
-
// src/modules/campaign/hooks/useCampaignService.ts
|
|
1270
|
-
var import_api_core9 = require("@phygitallabs/api-core");
|
|
1271
|
-
|
|
1272
|
-
// src/modules/campaign/types/enums.ts
|
|
1273
|
-
var import_api_core10 = require("@phygitallabs/api-core");
|
|
1274
|
-
|
|
1275
|
-
// src/modules/campaign/types/campaign.ts
|
|
1276
|
-
var TaskType = /* @__PURE__ */ ((TaskType2) => {
|
|
1277
|
-
TaskType2["CHECK_IN"] = "check_in";
|
|
1278
|
-
TaskType2["CREATE_MEMORY"] = "create_memory";
|
|
1279
|
-
TaskType2["FILL_FORM"] = "fill_form";
|
|
1280
|
-
TaskType2["SHARE"] = "share";
|
|
1281
|
-
return TaskType2;
|
|
1282
|
-
})(TaskType || {});
|
|
1283
|
-
|
|
1284
|
-
// src/modules/location/hooks/useLocationService.ts
|
|
1285
|
-
var import_api_core11 = require("@phygitallabs/api-core");
|
|
1286
|
-
|
|
1287
|
-
// src/modules/location/utils/locationHelpers.ts
|
|
1288
|
-
var sortLocationsByIndex = (locations) => {
|
|
1289
|
-
return [...locations].sort((a, b) => (a.index ?? 0) - (b.index ?? 0));
|
|
1290
|
-
};
|
|
1291
|
-
var filterLocationsByProperty = (locations, propertyName, value) => {
|
|
1292
|
-
return locations.filter((location) => location[propertyName] === value);
|
|
1293
|
-
};
|
|
1294
|
-
|
|
1295
|
-
// src/modules/generate-certificate/hooks/index.ts
|
|
1296
|
-
var import_generate_certificate2 = require("@phygitallabs/generate-certificate");
|
|
1297
|
-
|
|
1298
|
-
// src/modules/generate-certificate/helpers/index.ts
|
|
1299
|
-
var import_generate_certificate3 = require("@phygitallabs/generate-certificate");
|
|
1300
|
-
|
|
1301
|
-
// src/modules/data-tracking/hooks/index.ts
|
|
1302
|
-
var import_posthog_js = __toESM(require("posthog-js"), 1);
|
|
1303
|
-
|
|
1304
|
-
// src/modules/session-replay/providers/SessionReplayProvider.tsx
|
|
1305
|
-
var import_react4 = require("react");
|
|
1306
|
-
var import_uuid2 = require("uuid");
|
|
1307
|
-
|
|
1308
|
-
// src/modules/session-replay/utils/index.ts
|
|
1309
|
-
var isBrowser = () => {
|
|
1310
|
-
return typeof window !== "undefined";
|
|
1311
|
-
};
|
|
1312
|
-
|
|
1313
|
-
// src/modules/session-replay/providers/SessionReplayProvider.tsx
|
|
1314
|
-
var import_jsx_runtime3 = require("react/jsx-runtime");
|
|
1315
|
-
var TrackerContext = (0, import_react4.createContext)(null);
|
|
1316
|
-
function defaultGetUserId() {
|
|
1317
|
-
return (0, import_uuid2.v4)();
|
|
1318
|
-
}
|
|
1319
|
-
async function newTracker(config) {
|
|
1320
|
-
try {
|
|
1321
|
-
const OpenReplay = (await import("@openreplay/tracker")).default;
|
|
1322
|
-
const getUserId = config?.userIdEnabled && config?.getUserId ? config.getUserId : defaultGetUserId;
|
|
1323
|
-
const trackerConfig = {
|
|
1324
|
-
projectKey: config?.projectKey || process.env.NEXT_PUBLIC_OPENREPLAY_PROJECT_KEY,
|
|
1325
|
-
ingestPoint: config?.ingestPoint,
|
|
1326
|
-
// Capture options
|
|
1327
|
-
captureExceptions: config.captureExceptions ?? true,
|
|
1328
|
-
capturePerformance: config.capturePerformance ?? true,
|
|
1329
|
-
// Network tracking
|
|
1330
|
-
network: config.network || {
|
|
1331
|
-
capturePayload: true,
|
|
1332
|
-
sanitizer: (data) => data
|
|
1333
|
-
},
|
|
1334
|
-
// Console tracking
|
|
1335
|
-
console: config.console || {
|
|
1336
|
-
levels: ["error", "warn", "log"]
|
|
1337
|
-
},
|
|
1338
|
-
// Privacy settings
|
|
1339
|
-
obscureTextEmails: config.obscureTextEmails ?? true,
|
|
1340
|
-
obscureTextNumbers: config.obscureTextNumbers ?? false,
|
|
1341
|
-
obscureInputEmails: config.obscureInputEmails ?? true,
|
|
1342
|
-
// Development mode
|
|
1343
|
-
__DISABLE_SECURE_MODE: config.__DISABLE_SECURE_MODE ?? (typeof process !== "undefined" && process.env?.NODE_ENV === "development")
|
|
1344
|
-
};
|
|
1345
|
-
const tracker = new OpenReplay(trackerConfig);
|
|
1346
|
-
if (config?.userIdEnabled) {
|
|
1347
|
-
const userId = getUserId();
|
|
1348
|
-
tracker.setUserID(userId);
|
|
1349
|
-
console.log("User ID set:", userId);
|
|
1350
|
-
}
|
|
1351
|
-
console.log("OpenReplay tracker initialized");
|
|
1352
|
-
console.log("Project Key:", trackerConfig.projectKey);
|
|
1353
|
-
console.log("Ingest Point:", trackerConfig.ingestPoint);
|
|
1354
|
-
return tracker;
|
|
1355
|
-
} catch (error) {
|
|
1356
|
-
console.error("Failed to create tracker:", error);
|
|
1357
|
-
throw error;
|
|
1358
|
-
}
|
|
1359
|
-
}
|
|
1360
|
-
function reducer(state, action) {
|
|
1361
|
-
const { debug = false } = state.config;
|
|
1362
|
-
switch (action.type) {
|
|
1363
|
-
case "init":
|
|
1364
|
-
if (!state.tracker && isBrowser()) {
|
|
1365
|
-
if (!state.config.projectKey && !process.env.NEXT_PUBLIC_OPENREPLAY_PROJECT_KEY) {
|
|
1366
|
-
console.warn(
|
|
1367
|
-
debug,
|
|
1368
|
-
"Project key not found. Skipping session replay initialization."
|
|
1369
|
-
);
|
|
1370
|
-
return state;
|
|
1371
|
-
}
|
|
1372
|
-
return {
|
|
1373
|
-
...state,
|
|
1374
|
-
tracker: newTracker(state.config)
|
|
1375
|
-
};
|
|
1376
|
-
}
|
|
1377
|
-
return state;
|
|
1378
|
-
case "start":
|
|
1379
|
-
if (state.tracker) {
|
|
1380
|
-
Promise.resolve(state.tracker).then((tracker) => {
|
|
1381
|
-
tracker.start();
|
|
1382
|
-
console.log(debug, "Session replay tracker started");
|
|
1383
|
-
}).catch((error) => {
|
|
1384
|
-
console.error("Failed to start tracker:", error);
|
|
1385
|
-
});
|
|
1386
|
-
} else {
|
|
1387
|
-
console.warn(debug, "Tracker not initialized. Call initTracker() first.");
|
|
1388
|
-
}
|
|
1389
|
-
return state;
|
|
1390
|
-
case "setUserId":
|
|
1391
|
-
if (state.tracker) {
|
|
1392
|
-
Promise.resolve(state.tracker).then((tracker) => {
|
|
1393
|
-
tracker.setUserID(action.payload);
|
|
1394
|
-
console.log(debug, "User ID updated:", action.payload);
|
|
1395
|
-
}).catch((error) => {
|
|
1396
|
-
console.error("Failed to set user ID:", error);
|
|
1397
|
-
});
|
|
1398
|
-
} else {
|
|
1399
|
-
console.warn(debug, "Tracker not initialized. Call initTracker() first.");
|
|
1400
|
-
}
|
|
1401
|
-
return state;
|
|
1402
|
-
// Set metadata
|
|
1403
|
-
case "setMetadata":
|
|
1404
|
-
if (state.tracker) {
|
|
1405
|
-
Promise.resolve(state.tracker).then((tracker) => {
|
|
1406
|
-
Object.entries(action.payload || {})?.forEach(([key, value]) => {
|
|
1407
|
-
tracker.setMetadata(key, value);
|
|
1408
|
-
});
|
|
1409
|
-
console.log(debug, "Metadata updated:", action.payload.metadata);
|
|
1410
|
-
}).catch((error) => {
|
|
1411
|
-
console.error("Failed to set metadata:", error);
|
|
1412
|
-
});
|
|
1413
|
-
} else {
|
|
1414
|
-
console.warn(debug, "Tracker not initialized. Call initTracker() first.");
|
|
1415
|
-
}
|
|
1416
|
-
return state;
|
|
1417
|
-
default:
|
|
1418
|
-
return state;
|
|
1419
|
-
}
|
|
1420
|
-
}
|
|
1421
|
-
var SessionReplayProvider = ({
|
|
1422
|
-
children,
|
|
1423
|
-
config = {}
|
|
1424
|
-
}) => {
|
|
1425
|
-
const [, dispatch] = (0, import_react4.useReducer)(reducer, {
|
|
1426
|
-
tracker: null,
|
|
1427
|
-
config
|
|
1428
|
-
});
|
|
1429
|
-
const initTracker = () => dispatch({ type: "init" });
|
|
1430
|
-
const startTracking = () => dispatch({ type: "start" });
|
|
1431
|
-
const setUserId = (userId) => dispatch({ type: "setUserId", payload: userId });
|
|
1432
|
-
const setMetadata = (metadata) => dispatch({ type: "setMetadata", payload: metadata });
|
|
1433
|
-
(0, import_react4.useEffect)(() => {
|
|
1434
|
-
initTracker();
|
|
1435
|
-
startTracking();
|
|
1436
|
-
}, []);
|
|
1437
|
-
return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(TrackerContext.Provider, { value: {
|
|
1438
|
-
initTracker,
|
|
1439
|
-
startTracking,
|
|
1440
|
-
setUserId,
|
|
1441
|
-
setMetadata
|
|
1442
|
-
}, children });
|
|
1443
|
-
};
|
|
1444
|
-
|
|
1445
|
-
// src/modules/session-replay/hooks/useSessionReplay.ts
|
|
1446
|
-
var import_react5 = require("react");
|
|
1447
|
-
function useSessionReplay() {
|
|
1448
|
-
const context = (0, import_react5.useContext)(TrackerContext);
|
|
1449
|
-
if (!context) {
|
|
1450
|
-
throw new Error(
|
|
1451
|
-
"useSessionReplay must be used within a SessionReplayProvider. Make sure your component is wrapped with <SessionReplayProvider>."
|
|
1452
|
-
);
|
|
1453
|
-
}
|
|
1454
|
-
return context;
|
|
1455
|
-
}
|
|
1456
|
-
|
|
1457
|
-
// src/modules/data-tracking/hooks/index.ts
|
|
1458
|
-
var pushEventToDataLayer = (event, data) => {
|
|
1459
|
-
try {
|
|
1460
|
-
window.dataLayer = window.dataLayer || [];
|
|
1461
|
-
window.dataLayer.push({
|
|
1462
|
-
event,
|
|
1463
|
-
...data
|
|
1464
|
-
});
|
|
1465
|
-
} catch (error) {
|
|
1466
|
-
console.error(error);
|
|
1467
|
-
}
|
|
1468
|
-
};
|
|
1469
|
-
var pushEventToGA = (eventName, eventData) => {
|
|
1470
|
-
if (typeof gtag != "function") {
|
|
1471
|
-
console.error("gtag is not a function");
|
|
1472
|
-
return;
|
|
1473
|
-
}
|
|
1474
|
-
gtag("event", eventName, eventData);
|
|
1475
|
-
};
|
|
1476
|
-
var pushEventToPosthog = (eventName, eventData) => {
|
|
1477
|
-
import_posthog_js.default.capture(eventName, eventData);
|
|
1478
|
-
};
|
|
1479
|
-
function useDataTracking() {
|
|
1480
|
-
const { setUserId, setMetadata } = useSessionReplay();
|
|
1481
|
-
const trackEvent = (eventName, eventData, useTools) => {
|
|
1482
|
-
useTools = useTools || ["gtm"];
|
|
1483
|
-
if (useTools.includes("gtm") && typeof window !== "undefined") {
|
|
1484
|
-
pushEventToDataLayer(eventName, eventData);
|
|
1485
|
-
}
|
|
1486
|
-
if (useTools.includes("ga") && typeof gtag == "function") {
|
|
1487
|
-
pushEventToGA(eventName, eventData);
|
|
1488
|
-
}
|
|
1489
|
-
if (useTools.includes("posthog") && typeof import_posthog_js.default == "function") {
|
|
1490
|
-
pushEventToPosthog(eventName, eventData);
|
|
1491
|
-
}
|
|
1492
|
-
};
|
|
1493
|
-
const trackUserIdentify = (userInfo) => {
|
|
1494
|
-
import_posthog_js.default.identify(userInfo.email, {
|
|
1495
|
-
email: userInfo.email,
|
|
1496
|
-
name: userInfo.name,
|
|
1497
|
-
avatar: userInfo.avatar,
|
|
1498
|
-
uid: userInfo.uid
|
|
1499
|
-
});
|
|
1500
|
-
setUserId(userInfo.id);
|
|
1501
|
-
setMetadata({
|
|
1502
|
-
user_email: userInfo.email
|
|
1503
|
-
});
|
|
1504
|
-
};
|
|
1505
|
-
const trackLogoutEvent = () => {
|
|
1506
|
-
import_posthog_js.default.capture("user_signed_out");
|
|
1507
|
-
};
|
|
1508
|
-
return {
|
|
1509
|
-
trackEvent,
|
|
1510
|
-
trackUserIdentify,
|
|
1511
|
-
trackLogoutEvent
|
|
1512
|
-
};
|
|
1513
|
-
}
|
|
1514
|
-
|
|
1515
|
-
// src/providers/TapquestCoreProvider.tsx
|
|
1516
|
-
var import_react7 = require("react");
|
|
1517
|
-
|
|
1518
|
-
// src/providers/ServicesProvider.tsx
|
|
1519
|
-
var import_react6 = require("react");
|
|
1520
|
-
var import_api_core12 = require("@phygitallabs/api-core");
|
|
1521
|
-
var import_reward4 = require("@phygitallabs/reward");
|
|
1522
|
-
var import_achievement5 = require("@phygitallabs/achievement");
|
|
1523
|
-
var import_generate_certificate4 = require("@phygitallabs/generate-certificate");
|
|
1524
|
-
var import_jsx_runtime4 = require("react/jsx-runtime");
|
|
1525
|
-
var ServicesProvider = ({
|
|
1526
|
-
children,
|
|
1527
|
-
queryClient,
|
|
1528
|
-
apiConfig = {
|
|
1529
|
-
environment: "dev",
|
|
1530
|
-
version: "v1"
|
|
1531
|
-
}
|
|
1532
|
-
}) => {
|
|
1533
|
-
const { environment, version } = apiConfig;
|
|
1534
|
-
const [commonServiceConfig, setCommonServiceConfig] = (0, import_react6.useState)(null);
|
|
1535
|
-
(0, import_react6.useEffect)(() => {
|
|
1536
|
-
const initClient = async () => {
|
|
1537
|
-
try {
|
|
1538
|
-
const deviceUid = await checkDeviceUid();
|
|
1539
|
-
const responseInterceptors = {
|
|
1540
|
-
onFulfilled: (response) => response,
|
|
1541
|
-
onRejected: async (error) => Promise.reject(error)
|
|
1542
|
-
};
|
|
1543
|
-
const requestInterceptors = {
|
|
1544
|
-
onFulfilled: (config2) => config2,
|
|
1545
|
-
onRejected: (error) => Promise.reject(error)
|
|
1546
|
-
};
|
|
1547
|
-
const axiosConfig = {
|
|
1548
|
-
headers: {
|
|
1549
|
-
"Content-Type": "application/json",
|
|
1550
|
-
"Device-UID": deviceUid
|
|
1551
|
-
}
|
|
1552
|
-
};
|
|
1553
|
-
const config = {
|
|
1554
|
-
queryClient,
|
|
1555
|
-
axiosConfig,
|
|
1556
|
-
responseInterceptors,
|
|
1557
|
-
requestInterceptors,
|
|
1558
|
-
useDevTool: true
|
|
1559
|
-
};
|
|
1560
|
-
setCommonServiceConfig(config);
|
|
1561
|
-
} catch (error) {
|
|
1562
|
-
console.error(error);
|
|
1563
|
-
}
|
|
1564
|
-
};
|
|
1565
|
-
initClient();
|
|
1566
|
-
}, [queryClient]);
|
|
1567
|
-
if (!commonServiceConfig) {
|
|
1568
|
-
return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(import_jsx_runtime4.Fragment, {});
|
|
1569
|
-
}
|
|
1570
|
-
return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
|
|
1571
|
-
import_api_core12.PGLCoreServiceProvider,
|
|
1572
|
-
{
|
|
1573
|
-
...commonServiceConfig,
|
|
1574
|
-
baseURL: `${service_default[environment].API_BASE_URL}/${version}`,
|
|
1575
|
-
baseCoreURL: `${service_default[environment].API_BASE_CORE_URL}/${version}`,
|
|
1576
|
-
children: /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
|
|
1577
|
-
import_reward4.RewardServiceProvider,
|
|
1578
|
-
{
|
|
1579
|
-
...commonServiceConfig,
|
|
1580
|
-
baseURL: `${service_default[environment].API_REWARD_URL}/v1`,
|
|
1581
|
-
children: /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
|
|
1582
|
-
import_achievement5.AchievementServiceProvider,
|
|
1583
|
-
{
|
|
1584
|
-
...commonServiceConfig,
|
|
1585
|
-
baseURL: `${service_default[environment].API_ACHIEVEMENT_URL}/${version}`,
|
|
1586
|
-
children: /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
|
|
1587
|
-
import_generate_certificate4.GenerateCertificateServiceProvider,
|
|
1588
|
-
{
|
|
1589
|
-
...commonServiceConfig,
|
|
1590
|
-
baseURL: `${service_default[environment].API_GENERATE_CERTIFICATE_URL}/v1`,
|
|
1591
|
-
children
|
|
1592
|
-
}
|
|
1593
|
-
)
|
|
1594
|
-
}
|
|
1595
|
-
)
|
|
1596
|
-
}
|
|
1597
|
-
)
|
|
1598
|
-
}
|
|
1599
|
-
);
|
|
1600
|
-
};
|
|
1601
|
-
|
|
1602
|
-
// src/providers/TapquestCoreProvider.tsx
|
|
1603
|
-
var import_jsx_runtime5 = require("react/jsx-runtime");
|
|
1604
|
-
var TapquestCoreProvider = ({
|
|
1605
|
-
children,
|
|
1606
|
-
queryClient,
|
|
1607
|
-
apiConfig
|
|
1608
|
-
// authCallbacks
|
|
1609
|
-
}) => {
|
|
1610
|
-
const { environment } = apiConfig;
|
|
1611
|
-
const sessionReplayConfig = (0, import_react7.useMemo)(() => {
|
|
1612
|
-
const projectKey = process.env.NEXT_PUBLIC_OPENREPLAY_PROJECT_KEY;
|
|
1613
|
-
if (!projectKey) {
|
|
1614
|
-
return void 0;
|
|
1615
|
-
}
|
|
1616
|
-
return {
|
|
1617
|
-
projectKey,
|
|
1618
|
-
ingestPoint: process.env.NEXT_PUBLIC_OPENREPLAY_INGEST_POINT,
|
|
1619
|
-
debug: process.env.NODE_ENV === "development",
|
|
1620
|
-
captureExceptions: true,
|
|
1621
|
-
capturePerformance: true,
|
|
1622
|
-
obscureTextEmails: true,
|
|
1623
|
-
obscureInputEmails: true
|
|
1624
|
-
};
|
|
1625
|
-
}, []);
|
|
1626
|
-
return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(SessionReplayProvider, { config: sessionReplayConfig, children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
|
|
1627
|
-
ServicesProvider,
|
|
1628
|
-
{
|
|
1629
|
-
queryClient,
|
|
1630
|
-
apiConfig,
|
|
1631
|
-
children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
|
|
1632
|
-
AuthProvider,
|
|
1633
|
-
{
|
|
1634
|
-
baseURL: `${service_default[environment].API_BASE_URL}`,
|
|
1635
|
-
queryClient,
|
|
1636
|
-
children
|
|
1637
|
-
}
|
|
1638
|
-
)
|
|
1639
|
-
}
|
|
1640
|
-
) });
|
|
1641
|
-
};
|
|
1642
|
-
|
|
1643
|
-
// src/modules/achivementWithReward/hooks/achivementPlusRewardModel.ts
|
|
1644
|
-
var import_achievement6 = require("@phygitallabs/achievement");
|
|
1645
|
-
var import_useGroupReward = require("@phygitallabs/reward/src/hooks/useGroupReward");
|
|
1646
|
-
var import_react8 = require("react");
|
|
1647
|
-
function buildMappedAchievements(achievements, groupRewardData) {
|
|
1648
|
-
if (!groupRewardData?.reward_models) return [];
|
|
1649
|
-
const rewardModels = groupRewardData.reward_models;
|
|
1650
|
-
return achievements.map((achievement, achievementIndex) => {
|
|
1651
|
-
const parentReward = rewardModels[achievementIndex]?.[0] || null;
|
|
1652
|
-
const subAchievements = achievement.subAchievementIds?.map((subId, subIndex) => {
|
|
1653
|
-
const reward = rewardModels[achievementIndex * (achievement.subAchievementIds?.length || 0) + subIndex + 1]?.[0] || null;
|
|
1654
|
-
return {
|
|
1655
|
-
id: subId,
|
|
1656
|
-
reward_model: reward
|
|
1657
|
-
};
|
|
1658
|
-
}) || [];
|
|
1659
|
-
return {
|
|
1660
|
-
id: achievement.id,
|
|
1661
|
-
name: achievement.name,
|
|
1662
|
-
reward_model: parentReward,
|
|
1663
|
-
subAchievements
|
|
1664
|
-
};
|
|
1665
|
-
});
|
|
1666
|
-
}
|
|
1667
|
-
var useAchivementPlusRewardModel = ({ campaignId }) => {
|
|
1668
|
-
const { data: achievements, isLoading: isLoadingAchievements } = (0, import_achievement6.useManyAchievements)(
|
|
1669
|
-
{
|
|
1670
|
-
"filter.labels": { campaign_id: campaignId },
|
|
1671
|
-
"filter.type": "group_mission",
|
|
1672
|
-
"pagination.limit": 200
|
|
1673
|
-
},
|
|
1674
|
-
{ enabled: !!campaignId }
|
|
1675
|
-
);
|
|
1676
|
-
const groupRewardIds = (0, import_react8.useMemo)(() => {
|
|
1677
|
-
if (!achievements?.data) return [];
|
|
1678
|
-
return achievements.data.map((achievement) => achievement.groupRewardId).filter((id) => id !== void 0);
|
|
1679
|
-
}, [achievements?.data]);
|
|
1680
|
-
const {
|
|
1681
|
-
mutate: fetchGroupRewardModels,
|
|
1682
|
-
data: groupRewardModelsData,
|
|
1683
|
-
isPending: isPendingGroupRewardModels
|
|
1684
|
-
} = (0, import_useGroupReward.useCreateModelGroupReward)();
|
|
1685
|
-
(0, import_react8.useEffect)(() => {
|
|
1686
|
-
if (groupRewardIds.length > 0) {
|
|
1687
|
-
fetchGroupRewardModels({ group_reward_ids: groupRewardIds });
|
|
1688
|
-
}
|
|
1689
|
-
}, [groupRewardIds, fetchGroupRewardModels]);
|
|
1690
|
-
const mappedAchievements = (0, import_react8.useMemo)(() => {
|
|
1691
|
-
if (!groupRewardModelsData?.data || !achievements?.data) return [];
|
|
1692
|
-
return buildMappedAchievements(achievements.data, groupRewardModelsData.data);
|
|
1693
|
-
}, [groupRewardModelsData, achievements?.data]);
|
|
1694
|
-
return {
|
|
1695
|
-
mappedAchievements,
|
|
1696
|
-
isLoading: isLoadingAchievements || isPendingGroupRewardModels
|
|
1697
|
-
};
|
|
1698
|
-
};
|
|
1699
|
-
var achivementPlusRewardModel_default = useAchivementPlusRewardModel;
|
|
1700
|
-
|
|
1701
|
-
// src/modules/send-email/hooks/index.ts
|
|
1702
|
-
var import_api_core13 = require("@phygitallabs/api-core");
|
|
1703
|
-
|
|
1704
|
-
// src/helper/helpers.ts
|
|
1705
|
-
var import_helpers5 = require("@phygitallabs/helpers");
|
|
1706
|
-
// Annotate the CommonJS export names for ESM import in node:
|
|
1707
|
-
0 && (module.exports = {
|
|
1708
|
-
ALLOWED_ORIGINS,
|
|
1709
|
-
AchievementRuleActionType,
|
|
1710
|
-
AchievementServiceProvider,
|
|
1711
|
-
AchievementType,
|
|
1712
|
-
AuthProvider,
|
|
1713
|
-
CALLBACK_URL,
|
|
1714
|
-
CampaignState,
|
|
1715
|
-
CmentityRewardType,
|
|
1716
|
-
NotificationProvider,
|
|
1717
|
-
RewardClaimStatus,
|
|
1718
|
-
TapquestCoreProvider,
|
|
1719
|
-
TaskType,
|
|
1720
|
-
UserSourceType,
|
|
1721
|
-
accessTokenKey,
|
|
1722
|
-
checkDeviceUid,
|
|
1723
|
-
chipAuthTokenKey,
|
|
1724
|
-
cn,
|
|
1725
|
-
convertSnakeToCamel,
|
|
1726
|
-
deviceUIDKey,
|
|
1727
|
-
fileToBase64,
|
|
1728
|
-
filterLocationsByProperty,
|
|
1729
|
-
generateDeviceId,
|
|
1730
|
-
getAccessToken,
|
|
1731
|
-
getActionsFromAchievementRule,
|
|
1732
|
-
getChipAuthToken,
|
|
1733
|
-
getDeviceUid,
|
|
1734
|
-
getLocationIdsFromAchievementRule,
|
|
1735
|
-
getRefreshToken,
|
|
1736
|
-
getRetryAttemptsRefreshToken,
|
|
1737
|
-
getUserInfo,
|
|
1738
|
-
httpMaxRetries,
|
|
1739
|
-
isAchievementCompleted,
|
|
1740
|
-
locationQueryKeys,
|
|
1741
|
-
memoriesKey,
|
|
1742
|
-
parse,
|
|
1743
|
-
refreshTokenKey,
|
|
1744
|
-
removeAccessToken,
|
|
1745
|
-
removeChipAuthToken,
|
|
1746
|
-
removeDeviceUid,
|
|
1747
|
-
removeRefreshToken,
|
|
1748
|
-
removeUserInfo,
|
|
1749
|
-
resetMemoriesQuery,
|
|
1750
|
-
retryAttemptsRefreshToken,
|
|
1751
|
-
setAccessToken,
|
|
1752
|
-
setChipAuthToken,
|
|
1753
|
-
setDeviceUid,
|
|
1754
|
-
setRefreshToken,
|
|
1755
|
-
setRetryAttemptsRefreshToken,
|
|
1756
|
-
setUserInfo,
|
|
1757
|
-
sortLocationsByIndex,
|
|
1758
|
-
useAchievementProgress,
|
|
1759
|
-
useAchivementPlusRewardModel,
|
|
1760
|
-
useAuth,
|
|
1761
|
-
useCampaignDetail,
|
|
1762
|
-
useCancelUserRewardsRequest,
|
|
1763
|
-
useChipScanStory,
|
|
1764
|
-
useClaimUserReward,
|
|
1765
|
-
useClearUserRewardCache,
|
|
1766
|
-
useCreateCertificate,
|
|
1767
|
-
useCreateCertificateAnonymous,
|
|
1768
|
-
useCreateCertificateWithMask,
|
|
1769
|
-
useCreateMemory,
|
|
1770
|
-
useCreateModelGroupReward,
|
|
1771
|
-
useCreateRewardModel,
|
|
1772
|
-
useDataTracking,
|
|
1773
|
-
useDeleteRewardModel,
|
|
1774
|
-
useGenerateFansipanCertificate,
|
|
1775
|
-
useGenerateTemplateCertificate,
|
|
1776
|
-
useGenerateThaocamvienCertificate,
|
|
1777
|
-
useGetRewardModel,
|
|
1778
|
-
useGetUserRewards,
|
|
1779
|
-
useGoogleLogin,
|
|
1780
|
-
useInfiniteMemories,
|
|
1781
|
-
useListRewardModels,
|
|
1782
|
-
useLocationDetail,
|
|
1783
|
-
useLocationProgress,
|
|
1784
|
-
useLocationsList,
|
|
1785
|
-
useManyAchievementProgress,
|
|
1786
|
-
useManyAchievements,
|
|
1787
|
-
useManyAchievementsRewardModels,
|
|
1788
|
-
useManyChildrenAchievements,
|
|
1789
|
-
useManyMemory,
|
|
1790
|
-
useManyUserActionLocations,
|
|
1791
|
-
useManyUserRewards,
|
|
1792
|
-
useMyProfile,
|
|
1793
|
-
useOneAchievement,
|
|
1794
|
-
useOneMemory,
|
|
1795
|
-
useOneUserCampaign,
|
|
1796
|
-
usePGLCoreService,
|
|
1797
|
-
useScanChip,
|
|
1798
|
-
useSendEmail,
|
|
1799
|
-
useSyncCheckin,
|
|
1800
|
-
useUpdateMyProfile,
|
|
1801
|
-
useUpdateRewardModel,
|
|
1802
|
-
useUploadMedia,
|
|
1803
|
-
useUserAchievementAction,
|
|
1804
|
-
useUserCampaignAction,
|
|
1805
|
-
useV1ListRewards,
|
|
1806
|
-
userInfoKey,
|
|
1807
|
-
wrapTextWithFont
|
|
1808
|
-
});
|
|
1809
|
-
//# sourceMappingURL=index.cjs.map
|