@timardex/cluemart-shared 1.6.11 → 1.6.130

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.
Files changed (129) hide show
  1. package/dist/affiliate-Bqqlffw8.d.mts +36 -0
  2. package/dist/affiliate-Btlp5XUp.d.ts +36 -0
  3. package/dist/affiliateAdapters-BW3BY7c5.d.mts +118 -0
  4. package/dist/affiliateAdapters-C51ISmuA.d.ts +118 -0
  5. package/dist/apollo/index.d.mts +3 -3
  6. package/dist/apollo/index.d.ts +3 -3
  7. package/dist/auth/index.cjs +2546 -951
  8. package/dist/auth/index.cjs.map +1 -1
  9. package/dist/auth/index.d.mts +28 -30
  10. package/dist/auth/index.d.ts +28 -30
  11. package/dist/auth/index.mjs +24 -25
  12. package/dist/auth/index.mjs.map +1 -1
  13. package/dist/auth-BOmAO53v.d.ts +169 -0
  14. package/dist/auth-CsITA95p.d.mts +169 -0
  15. package/dist/{chunk-VPANTTZI.mjs → chunk-DATBGC2K.mjs} +108 -23
  16. package/dist/chunk-DATBGC2K.mjs.map +1 -0
  17. package/dist/chunk-DDHECBJR.mjs +726 -0
  18. package/dist/chunk-DDHECBJR.mjs.map +1 -0
  19. package/dist/chunk-INQCDU24.mjs +139 -0
  20. package/dist/chunk-INQCDU24.mjs.map +1 -0
  21. package/dist/{chunk-SD42WIMV.mjs → chunk-NWWKI4PJ.mjs} +5 -5
  22. package/dist/chunk-NWWKI4PJ.mjs.map +1 -0
  23. package/dist/{chunk-25SHNN4K.mjs → chunk-OHHJ3KJJ.mjs} +71 -71
  24. package/dist/chunk-OHHJ3KJJ.mjs.map +1 -0
  25. package/dist/chunk-TOEFAEF2.mjs +69 -0
  26. package/dist/chunk-TOEFAEF2.mjs.map +1 -0
  27. package/dist/chunk-UKW7NZEQ.mjs +2813 -0
  28. package/dist/chunk-UKW7NZEQ.mjs.map +1 -0
  29. package/dist/dailyClue-C6WXY73z.d.mts +105 -0
  30. package/dist/dailyClue-C6WXY73z.d.ts +105 -0
  31. package/dist/enums/index.cjs +2 -229
  32. package/dist/enums/index.cjs.map +1 -1
  33. package/dist/enums/index.d.mts +5 -170
  34. package/dist/enums/index.d.ts +5 -170
  35. package/dist/enums/index.mjs +1 -41
  36. package/dist/event-C9K7CSg4.d.ts +53 -0
  37. package/dist/event-W0NhL5Cd.d.mts +53 -0
  38. package/dist/formFields/index.cjs +284 -119
  39. package/dist/formFields/index.cjs.map +1 -1
  40. package/dist/formFields/index.d.mts +4 -2
  41. package/dist/formFields/index.d.ts +4 -2
  42. package/dist/formFields/index.mjs +919 -50
  43. package/dist/formFields/index.mjs.map +1 -1
  44. package/dist/global-BbSFfYdd.d.ts +181 -0
  45. package/dist/global-C6v9tRji.d.mts +181 -0
  46. package/dist/graphql/index.cjs +2860 -2292
  47. package/dist/graphql/index.cjs.map +1 -1
  48. package/dist/graphql/index.d.mts +422 -469
  49. package/dist/graphql/index.d.ts +422 -469
  50. package/dist/graphql/index.mjs +2547 -160
  51. package/dist/graphql/index.mjs.map +1 -1
  52. package/dist/graphql-CDOfA79A.d.ts +1253 -0
  53. package/dist/graphql-CcvzTs9k.d.mts +1253 -0
  54. package/dist/hooks/index.cjs +511 -3853
  55. package/dist/hooks/index.cjs.map +1 -1
  56. package/dist/hooks/index.d.mts +10 -9
  57. package/dist/hooks/index.d.ts +10 -9
  58. package/dist/hooks/index.mjs +54 -72
  59. package/dist/hooks/index.mjs.map +1 -1
  60. package/dist/images/index.mjs +86 -21
  61. package/dist/images/index.mjs.map +1 -1
  62. package/dist/index.cjs +4414 -3175
  63. package/dist/index.cjs.map +1 -1
  64. package/dist/index.d.mts +2439 -1579
  65. package/dist/index.d.ts +2439 -1579
  66. package/dist/index.mjs +4350 -3128
  67. package/dist/index.mjs.map +1 -1
  68. package/dist/map/index.d.mts +3 -2
  69. package/dist/map/index.d.ts +3 -2
  70. package/dist/resourceActivities-CS8YRIIL.d.mts +89 -0
  71. package/dist/resourceActivities-DOdNPkhW.d.ts +89 -0
  72. package/dist/sharing/index.cjs +23 -19
  73. package/dist/sharing/index.cjs.map +1 -1
  74. package/dist/sharing/index.d.mts +16 -3
  75. package/dist/sharing/index.d.ts +16 -3
  76. package/dist/sharing/index.mjs +183 -29
  77. package/dist/sharing/index.mjs.map +1 -1
  78. package/dist/subscription-Cj_qBA7u.d.mts +20 -0
  79. package/dist/subscription-OiJ50uJb.d.ts +20 -0
  80. package/dist/theme/index.mjs +41 -5
  81. package/dist/theme/index.mjs.map +1 -1
  82. package/dist/types/index.cjs +868 -123
  83. package/dist/types/index.cjs.map +1 -1
  84. package/dist/types/index.d.mts +234 -15
  85. package/dist/types/index.d.ts +234 -15
  86. package/dist/types/index.mjs +61 -31
  87. package/dist/utils/index.cjs +292 -124
  88. package/dist/utils/index.cjs.map +1 -1
  89. package/dist/utils/index.d.mts +25 -23
  90. package/dist/utils/index.d.ts +25 -23
  91. package/dist/utils/index.mjs +6 -5
  92. package/dist/vendor-DmMi2qmx.d.mts +73 -0
  93. package/dist/vendor-M9hVZlni.d.ts +73 -0
  94. package/package.json +10 -3
  95. package/dist/ad-BUYzE6zx.d.ts +0 -181
  96. package/dist/ad-BhLoEul3.d.mts +0 -181
  97. package/dist/affiliate-BbtjeUP4.d.mts +0 -73
  98. package/dist/affiliate-C51nzKsw.d.ts +0 -73
  99. package/dist/chunk-25SHNN4K.mjs.map +0 -1
  100. package/dist/chunk-32MKHJTX.mjs +0 -1207
  101. package/dist/chunk-32MKHJTX.mjs.map +0 -1
  102. package/dist/chunk-AYO3E4DM.mjs +0 -224
  103. package/dist/chunk-AYO3E4DM.mjs.map +0 -1
  104. package/dist/chunk-BIJ5NDXW.mjs +0 -962
  105. package/dist/chunk-BIJ5NDXW.mjs.map +0 -1
  106. package/dist/chunk-DQ7ZHIXW.mjs +0 -26
  107. package/dist/chunk-DQ7ZHIXW.mjs.map +0 -1
  108. package/dist/chunk-ILILH7E2.mjs +0 -219
  109. package/dist/chunk-ILILH7E2.mjs.map +0 -1
  110. package/dist/chunk-NPFJ2CN2.mjs +0 -109
  111. package/dist/chunk-NPFJ2CN2.mjs.map +0 -1
  112. package/dist/chunk-R6PCFOYO.mjs +0 -3650
  113. package/dist/chunk-R6PCFOYO.mjs.map +0 -1
  114. package/dist/chunk-SD42WIMV.mjs.map +0 -1
  115. package/dist/chunk-VA5YN2K3.mjs +0 -48
  116. package/dist/chunk-VA5YN2K3.mjs.map +0 -1
  117. package/dist/chunk-VPANTTZI.mjs.map +0 -1
  118. package/dist/chunk-X3OLM35T.mjs +0 -278
  119. package/dist/chunk-X3OLM35T.mjs.map +0 -1
  120. package/dist/contactUs--NoohZBu.d.ts +0 -11
  121. package/dist/contactUs-CBWzefUS.d.mts +0 -11
  122. package/dist/global-CUYYxpy2.d.ts +0 -699
  123. package/dist/global-DePDtOFt.d.mts +0 -699
  124. package/dist/resourceActivities-CMUcn2P7.d.ts +0 -130
  125. package/dist/resourceActivities-CwbJFGIp.d.mts +0 -130
  126. package/dist/subscription-BU8GvH2K.d.ts +0 -12
  127. package/dist/subscription-bmAdrnfi.d.mts +0 -12
  128. package/dist/user-D47MLFyH.d.ts +0 -134
  129. package/dist/user-DE8edl3u.d.mts +0 -134
@@ -0,0 +1,169 @@
1
+ import { h as SubscriptionStatusEnumType, e as LicencesEnumType, i as RedeemRewardResponseType, R as ResourceImageType, L as LocationType, O as OsPlatformEnumType, j as RewardEnumType, D as DateTimeType, N as NotificationResourceEnumType, U as UserRoleEnumType, k as AuthPayloadType, l as RefreshTokenPayloadType, m as VerificationEnumType } from './graphql-CcvzTs9k.mjs';
2
+ import { M as MutationResponse, T as TermsAgreement, a as CreateFormData, U as UserLicenceType, P as PromoCodeType } from './global-C6v9tRji.mjs';
3
+
4
+ type UserFormData = {
5
+ _id?: string;
6
+ active: boolean;
7
+ avatar?: ResourceImageType | null;
8
+ avatarUpload?: ResourceImageType | null;
9
+ confirmPassword?: string | null;
10
+ email: string;
11
+ firstName: string;
12
+ isTester: boolean;
13
+ lastName: string;
14
+ location?: LocationType | null;
15
+ password?: string | null;
16
+ platform?: OsPlatformEnumType;
17
+ preferredRegion: string;
18
+ termsAgreement?: TermsAgreement | null;
19
+ };
20
+ type CreateUserFormData = CreateFormData<UserFormData>;
21
+ /**
22
+ * Write-side / mongoose activity event. GraphQL EventReferenceType uses the
23
+ * same fields; DateTimeType is already the generated ISO-string shape.
24
+ */
25
+ type UserActivityEvent = {
26
+ resourceId: string;
27
+ dateTime: DateTimeType;
28
+ };
29
+ /**
30
+ * Write-side Stripe subscription document (mongoose Dates).
31
+ * GraphQL StripeSubscriptionType serializes dates as ISO strings — dual-shape.
32
+ */
33
+ type StripeSubscription = {
34
+ currentPlan?: LicencesEnumType;
35
+ customerId?: string;
36
+ endDate?: Date;
37
+ startDate?: Date;
38
+ status?: SubscriptionStatusEnumType;
39
+ subscriptionId?: string;
40
+ };
41
+ type SubscriptionStatusData = {
42
+ subscriptionId: string | null;
43
+ status: SubscriptionStatusEnumType;
44
+ priceId: string | null;
45
+ currentPlan: LicencesEnumType | null;
46
+ };
47
+ /**
48
+ * Write-side embedded userActivity (mongoose). GraphQL UserActivityType uses
49
+ * Maybe lists / EventReferenceType — dual-shape, do not collapse.
50
+ */
51
+ type UserActivity = {
52
+ favourites: {
53
+ events: string[];
54
+ vendors: string[];
55
+ partners: string[];
56
+ };
57
+ going: {
58
+ events: UserActivityEvent[];
59
+ };
60
+ interested: {
61
+ events: UserActivityEvent[];
62
+ };
63
+ present: {
64
+ events: UserActivityEvent[];
65
+ };
66
+ };
67
+ /** GraphQL envelope for `redeemReward`. */
68
+ type RedeemRewardMutationResponse = MutationResponse<RedeemRewardResponseType>;
69
+ /**
70
+ * Write-side redeemed reward (mongoose Date). GraphQL RedeemedRewardType
71
+ * serializes redeemedAt as an ISO string — dual-shape.
72
+ */
73
+ type RedeemedReward = {
74
+ name: RewardEnumType;
75
+ pointsUsed: number;
76
+ redeemedAt: Date;
77
+ };
78
+ /**
79
+ * Persistence / mongoose user document. Includes secrets (password hash,
80
+ * refreshToken) and internal emailSentFor that GraphQL UserType never exposes.
81
+ * Dates stay as JS Date for mongoose. Dual-shape vs generated UserType —
82
+ * do not collapse.
83
+ *
84
+ * Client-facing GraphQL UserType / SafeUserType are generated — see
85
+ * src/generated/graphql.ts, re-exported from types/index.ts. SafeUserType is
86
+ * an alias of that generated UserType (schema UserType already omits
87
+ * password/refreshToken).
88
+ */
89
+ type UserWriteType = Omit<UserFormData, "confirmPassword" | "avatarUpload" | "_id"> & {
90
+ _id: string;
91
+ affiliate?: string | null;
92
+ createdAt: Date;
93
+ deletedAt: Date | null;
94
+ emailSentFor?: NotificationResourceEnumType[] | null;
95
+ events: string[] | null;
96
+ game: string | null;
97
+ licences: UserLicenceType[] | null;
98
+ overallPoints: number | null;
99
+ partner: string | null;
100
+ password: string;
101
+ promoCodes?: PromoCodeType[] | null;
102
+ redeemedRewards?: RedeemedReward[] | null;
103
+ refreshToken: string | null;
104
+ roles: UserRoleEnumType[];
105
+ school: string | null;
106
+ stripe?: StripeSubscription;
107
+ updatedAt: Date | null;
108
+ userActivity: UserActivity | null;
109
+ vendor: string | null;
110
+ };
111
+
112
+ interface AppSettingsFormData {
113
+ appVersion: string;
114
+ isOfflineMode: boolean;
115
+ minimumRedeemableAffiliatePoints: number;
116
+ }
117
+ type CreateAppSettingsFormData = CreateFormData<AppSettingsFormData>;
118
+ type AppSettingsType = AppSettingsFormData & {
119
+ _id: string;
120
+ activeSchoolsStudentCountTotal: number;
121
+ activeSchoolsStudentCountUpdatedAt: Date;
122
+ createdAt: Date;
123
+ key: string;
124
+ updatedAt: Date | null;
125
+ };
126
+
127
+ type LoginFormData = {
128
+ email: string;
129
+ isAdminPage?: boolean;
130
+ password: string;
131
+ platform?: OsPlatformEnumType;
132
+ };
133
+ type CreateLoginFormData = CreateFormData<LoginFormData>;
134
+ type RegisterFormData = {
135
+ email: string;
136
+ firstName: string;
137
+ lastName: string;
138
+ password: string;
139
+ platform?: OsPlatformEnumType;
140
+ preferredRegion: string;
141
+ promoCode?: PromoCodeType | null;
142
+ termsAgreement?: TermsAgreement | null;
143
+ };
144
+ type CreateRegisterFormData = CreateFormData<RegisterFormData>;
145
+ type RequestPasswordResetFormData = {
146
+ email: string;
147
+ };
148
+ type CreateRequestPasswordResetFormData = CreateFormData<RequestPasswordResetFormData>;
149
+ type ResetPasswordFormData = {
150
+ confirmPassword: string;
151
+ email: string;
152
+ password: string;
153
+ };
154
+ type CreateResetPasswordFormData = CreateFormData<ResetPasswordFormData>;
155
+ type ValidateVerificationTokenFormData = {
156
+ email: string;
157
+ verificationToken: string;
158
+ verificationType?: VerificationEnumType;
159
+ };
160
+ type CreateValidateVerificationTokenFormData = CreateFormData<ValidateVerificationTokenFormData>;
161
+ /**
162
+ * GraphQL AuthPayloadType / RefreshTokenPayloadType are generated —
163
+ * re-exported from types/index.ts. AuthPayloadType.user is schema UserType,
164
+ * which is already the redacted client shape (no password / refreshToken).
165
+ */
166
+ type AuthMutationResponse = MutationResponse<AuthPayloadType>;
167
+ type RefreshTokenMutationResponse = MutationResponse<RefreshTokenPayloadType>;
168
+
169
+ export type { AppSettingsFormData as A, CreateAppSettingsFormData as C, LoginFormData as L, RedeemRewardMutationResponse as R, StripeSubscription as S, UserFormData as U, ValidateVerificationTokenFormData as V, AppSettingsType as a, AuthMutationResponse as b, CreateLoginFormData as c, CreateRegisterFormData as d, CreateRequestPasswordResetFormData as e, CreateResetPasswordFormData as f, CreateUserFormData as g, CreateValidateVerificationTokenFormData as h, RedeemedReward as i, RefreshTokenMutationResponse as j, RegisterFormData as k, RequestPasswordResetFormData as l, ResetPasswordFormData as m, SubscriptionStatusData as n, UserActivity as o, UserActivityEvent as p, UserWriteType as q };
@@ -1,3 +1,23 @@
1
+ // src/types/subscription.ts
2
+ var TIERS_BY_PRIORITY = ["pro_plus", "pro", "standard"];
3
+ var TIER_DISPLAY_LABELS = {
4
+ pro: "Pro",
5
+ // eslint-disable-next-line camelcase
6
+ pro_plus: "Pro+ Ads",
7
+ standard: "Standard"
8
+ };
9
+ var TIER_FROM_LICENCE = {
10
+ ["pro_event" /* ProEvent */]: "pro",
11
+ ["pro_plus_event" /* ProPlusEvent */]: "pro_plus",
12
+ ["pro_plus_vendor" /* ProPlusVendor */]: "pro_plus",
13
+ ["pro_vendor" /* ProVendor */]: "pro",
14
+ ["standard_event" /* StandardEvent */]: "standard",
15
+ ["standard_partner" /* StandardPartner */]: "standard",
16
+ ["standard_vendor" /* StandardVendor */]: "standard",
17
+ ["standard_affiliate" /* StandardAffiliate */]: "standard",
18
+ ["standard_school" /* StandardSchool */]: "standard"
19
+ };
20
+
1
21
  // src/auth/permissions/permissions.ts
2
22
  var PERMISSIONS = [
3
23
  "*",
@@ -91,14 +111,17 @@ var ADMIN_PERMISSIONS = [
91
111
  "posts.delete"
92
112
  ];
93
113
  var ROLE_PERMISSIONS = {
94
- ["super_admin" /* SUPER_ADMIN */]: ["*"],
95
- ["admin" /* ADMIN */]: ADMIN_PERMISSIONS,
96
- ["customer" /* CUSTOMER */]: ["dashboard.customer"],
97
- ["event" /* EVENT */]: ["dashboard.event", "events.manage_own"],
98
- ["vendor" /* VENDOR */]: ["dashboard.vendor", "vendors.manage_own"],
99
- ["partner" /* PARTNER */]: ["dashboard.partner", "partners.manage_own"],
100
- ["school" /* SCHOOL */]: ["dashboard.school", "schools.manage_own"],
101
- ["affiliate" /* AFFILIATE */]: ["dashboard.affiliate", "affiliates.manage_own"]
114
+ ["super_admin" /* SuperAdmin */]: ["*"],
115
+ ["admin" /* Admin */]: ADMIN_PERMISSIONS,
116
+ ["customer" /* Customer */]: ["dashboard.customer"],
117
+ ["event" /* Event */]: ["dashboard.event", "events.manage_own"],
118
+ ["vendor" /* Vendor */]: ["dashboard.vendor", "vendors.manage_own"],
119
+ ["partner" /* Partner */]: ["dashboard.partner", "partners.manage_own"],
120
+ ["school" /* School */]: ["dashboard.school", "schools.manage_own"],
121
+ ["affiliate" /* Affiliate */]: [
122
+ "dashboard.affiliate",
123
+ "affiliates.manage_own"
124
+ ]
102
125
  };
103
126
 
104
127
  // src/auth/permissions/helpers.ts
@@ -150,13 +173,13 @@ function hasAnyRole(roles, checkRoles) {
150
173
 
151
174
  // src/auth/permissions/adminAppAccess.ts
152
175
  var ADMIN_APP_ROLES = [
153
- "super_admin" /* SUPER_ADMIN */,
154
- "admin" /* ADMIN */,
155
- "event" /* EVENT */,
156
- "vendor" /* VENDOR */,
157
- "partner" /* PARTNER */,
158
- "school" /* SCHOOL */,
159
- "affiliate" /* AFFILIATE */
176
+ "super_admin" /* SuperAdmin */,
177
+ "admin" /* Admin */,
178
+ "event" /* Event */,
179
+ "vendor" /* Vendor */,
180
+ "partner" /* Partner */,
181
+ "school" /* School */,
182
+ "affiliate" /* Affiliate */
160
183
  ];
161
184
  var ADMIN_DASHBOARD_CONTEXTS = [
162
185
  {
@@ -164,42 +187,42 @@ var ADMIN_DASHBOARD_CONTEXTS = [
164
187
  home: "/dashboard",
165
188
  label: "Staff",
166
189
  pathPrefixes: ["/dashboard"],
167
- roles: ["super_admin" /* SUPER_ADMIN */, "admin" /* ADMIN */]
190
+ roles: ["super_admin" /* SuperAdmin */, "admin" /* Admin */]
168
191
  },
169
192
  {
170
193
  context: "event",
171
194
  home: "/event/dashboard",
172
195
  label: "Events",
173
196
  pathPrefixes: ["/event"],
174
- roles: ["event" /* EVENT */]
197
+ roles: ["event" /* Event */]
175
198
  },
176
199
  {
177
200
  context: "vendor",
178
201
  home: "/vendor/dashboard",
179
202
  label: "Stallholders",
180
203
  pathPrefixes: ["/vendor"],
181
- roles: ["vendor" /* VENDOR */]
204
+ roles: ["vendor" /* Vendor */]
182
205
  },
183
206
  {
184
207
  context: "partner",
185
208
  home: "/partner/dashboard",
186
209
  label: "Partners",
187
210
  pathPrefixes: ["/partner"],
188
- roles: ["partner" /* PARTNER */]
211
+ roles: ["partner" /* Partner */]
189
212
  },
190
213
  {
191
214
  context: "school",
192
215
  home: "/school/dashboard",
193
216
  label: "Schools",
194
217
  pathPrefixes: ["/school"],
195
- roles: ["school" /* SCHOOL */]
218
+ roles: ["school" /* School */]
196
219
  },
197
220
  {
198
221
  context: "affiliate",
199
222
  home: "/affiliate/dashboard",
200
223
  label: "Affiliate",
201
224
  pathPrefixes: ["/affiliate"],
202
- roles: ["affiliate" /* AFFILIATE */]
225
+ roles: ["affiliate" /* Affiliate */]
203
226
  }
204
227
  ];
205
228
  function canAccessAdminApp(roles) {
@@ -240,7 +263,65 @@ function canAccessAdminPath(roles, pathname) {
240
263
  return hasAnyRole(roles, info.roles);
241
264
  }
242
265
 
266
+ // src/types/global.ts
267
+ var PROMO_CODE_PREFIX = "CM-";
268
+
269
+ // src/types/userAdapters.ts
270
+ var PERMISSION_SET = new Set(PERMISSIONS);
271
+ function toUserPermissions(permissions) {
272
+ return permissions.filter(
273
+ (permission) => PERMISSION_SET.has(permission)
274
+ );
275
+ }
276
+ function toUserPromoCodes(codes) {
277
+ if (codes == null) {
278
+ return null;
279
+ }
280
+ return codes.map((code) => {
281
+ if (!code.startsWith(PROMO_CODE_PREFIX)) {
282
+ throw new Error(
283
+ `Invalid promo code from GraphQL: ${JSON.stringify(code)}`
284
+ );
285
+ }
286
+ return code;
287
+ });
288
+ }
289
+ function userToFormData(user) {
290
+ return {
291
+ _id: user._id,
292
+ active: user.active,
293
+ avatar: user.avatar ?? null,
294
+ avatarUpload: null,
295
+ confirmPassword: null,
296
+ email: user.email,
297
+ firstName: user.firstName,
298
+ isTester: user.isTester,
299
+ lastName: user.lastName,
300
+ location: user.location ?? null,
301
+ password: null,
302
+ platform: user.platform ?? void 0,
303
+ preferredRegion: user.preferredRegion,
304
+ termsAgreement: user.termsAgreement ? {
305
+ appBuildNumber: user.termsAgreement.appBuildNumber,
306
+ appId: user.termsAgreement.appId,
307
+ appVersion: user.termsAgreement.appVersion,
308
+ brand: user.termsAgreement.brand,
309
+ deviceName: user.termsAgreement.deviceName,
310
+ installationId: user.termsAgreement.installationId,
311
+ manufacturer: user.termsAgreement.manufacturer,
312
+ modelName: user.termsAgreement.modelName,
313
+ osName: user.termsAgreement.osName,
314
+ osVersion: user.termsAgreement.osVersion,
315
+ termVersion: user.termsAgreement.termVersion,
316
+ timestamp: user.termsAgreement.timestamp
317
+ } : null
318
+ };
319
+ }
320
+
243
321
  export {
322
+ TIERS_BY_PRIORITY,
323
+ TIER_DISPLAY_LABELS,
324
+ TIER_FROM_LICENCE,
244
325
  PERMISSIONS,
245
326
  WILDCARD_PERMISSION,
246
327
  ROLE_PERMISSIONS,
@@ -257,6 +338,10 @@ export {
257
338
  getUsableAdminContexts,
258
339
  getDefaultAdminHome,
259
340
  resolveAdminContextFromPath,
260
- canAccessAdminPath
341
+ canAccessAdminPath,
342
+ PROMO_CODE_PREFIX,
343
+ toUserPermissions,
344
+ toUserPromoCodes,
345
+ userToFormData
261
346
  };
262
- //# sourceMappingURL=chunk-VPANTTZI.mjs.map
347
+ //# sourceMappingURL=chunk-DATBGC2K.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/types/subscription.ts","../src/auth/permissions/permissions.ts","../src/auth/permissions/rolePermissions.ts","../src/auth/permissions/helpers.ts","../src/auth/permissions/adminAppAccess.ts","../src/types/global.ts","../src/types/userAdapters.ts"],"sourcesContent":["import { LicencesEnumType } from \"../generated/graphql\";\n\n/** Tier keys in descending priority (highest first) for licence resolution. */\nexport const TIERS_BY_PRIORITY = [\"pro_plus\", \"pro\", \"standard\"] as const;\n\n/** Canonical subscription tier keys — matches Stripe/server tier identifiers. */\nexport type Tier = (typeof TIERS_BY_PRIORITY)[number];\n\n/** User-facing tier labels (decoupled from the Tier discriminant). */\nexport const TIER_DISPLAY_LABELS: Record<Tier, string> = {\n pro: \"Pro\",\n // eslint-disable-next-line camelcase\n pro_plus: \"Pro+ Ads\",\n standard: \"Standard\",\n};\n\n/** Maps licence enums to their canonical tier key. */\nexport const TIER_FROM_LICENCE: Record<LicencesEnumType, Tier> = {\n [LicencesEnumType.ProEvent]: \"pro\",\n [LicencesEnumType.ProPlusEvent]: \"pro_plus\",\n [LicencesEnumType.ProPlusVendor]: \"pro_plus\",\n [LicencesEnumType.ProVendor]: \"pro\",\n [LicencesEnumType.StandardEvent]: \"standard\",\n [LicencesEnumType.StandardPartner]: \"standard\",\n [LicencesEnumType.StandardVendor]: \"standard\",\n [LicencesEnumType.StandardAffiliate]: \"standard\",\n [LicencesEnumType.StandardSchool]: \"standard\",\n};\n","/**\n * Canonical permission IDs. Add new permissions here first, then map them in\n * ROLE_PERMISSIONS. Prefer resource.action names (e.g. users.read).\n */\nexport const PERMISSIONS = [\n \"*\",\n // Dashboards\n \"dashboard.admin\",\n \"dashboard.affiliate\",\n \"dashboard.customer\",\n \"dashboard.event\",\n \"dashboard.partner\",\n \"dashboard.school\",\n \"dashboard.vendor\",\n // Admin: users\n \"users.delete\",\n \"users.read\",\n \"users.update\",\n // Admin: events\n \"events.create\",\n \"events.delete\",\n \"events.read\",\n \"events.update\",\n // Admin: vendors\n \"vendors.create\",\n \"vendors.delete\",\n \"vendors.read\",\n \"vendors.update\",\n // Admin: partners\n \"partners.create\",\n \"partners.delete\",\n \"partners.read\",\n \"partners.update\",\n // Admin: schools\n \"schools.create\",\n \"schools.delete\",\n \"schools.read\",\n \"schools.update\",\n // Admin: affiliates\n \"affiliates.create\",\n \"affiliates.delete\",\n \"affiliates.read\",\n \"affiliates.update\",\n // Admin: ads / posts / settings\n \"ads.create\",\n \"ads.delete\",\n \"ads.read\",\n \"ads.update\",\n \"posts.create\",\n \"posts.delete\",\n \"posts.read\",\n \"posts.update\",\n \"settings.read\",\n \"settings.update\",\n // Product: own-resource management\n \"affiliates.manage_own\",\n \"events.manage_own\",\n \"partners.manage_own\",\n \"schools.manage_own\",\n \"vendors.manage_own\",\n] as const;\n\nexport type Permission = (typeof PERMISSIONS)[number];\n\nexport const WILDCARD_PERMISSION: Permission = \"*\";\n","import { UserRoleEnumType } from \"../../generated/graphql\";\n\nimport type { Permission } from \"./permissions\";\n\nconst ADMIN_PERMISSIONS: readonly Permission[] = [\n \"dashboard.admin\",\n \"events.read\",\n \"events.create\",\n \"events.update\",\n \"events.delete\",\n \"vendors.read\",\n \"vendors.create\",\n \"vendors.update\",\n \"vendors.delete\",\n \"partners.read\",\n \"partners.create\",\n \"partners.update\",\n \"partners.delete\",\n \"schools.read\",\n \"schools.create\",\n \"schools.update\",\n \"schools.delete\",\n \"affiliates.read\",\n \"affiliates.create\",\n \"affiliates.update\",\n \"affiliates.delete\",\n \"ads.read\",\n \"ads.create\",\n \"ads.update\",\n \"ads.delete\",\n \"posts.read\",\n \"posts.create\",\n \"posts.update\",\n \"posts.delete\",\n];\n\n/**\n * Static role → permissions map. Source of truth for access.\n * Permissions for a user = union of all their roles' lists.\n */\nexport const ROLE_PERMISSIONS: Record<UserRoleEnumType, readonly Permission[]> =\n {\n [UserRoleEnumType.SuperAdmin]: [\"*\"],\n [UserRoleEnumType.Admin]: ADMIN_PERMISSIONS,\n [UserRoleEnumType.Customer]: [\"dashboard.customer\"],\n [UserRoleEnumType.Event]: [\"dashboard.event\", \"events.manage_own\"],\n [UserRoleEnumType.Vendor]: [\"dashboard.vendor\", \"vendors.manage_own\"],\n [UserRoleEnumType.Partner]: [\"dashboard.partner\", \"partners.manage_own\"],\n [UserRoleEnumType.School]: [\"dashboard.school\", \"schools.manage_own\"],\n [UserRoleEnumType.Affiliate]: [\n \"dashboard.affiliate\",\n \"affiliates.manage_own\",\n ],\n };\n","import { UserRoleEnumType } from \"../../generated/graphql\";\n\nimport type { Permission } from \"./permissions\";\nimport { WILDCARD_PERMISSION } from \"./permissions\";\nimport { ROLE_PERMISSIONS } from \"./rolePermissions\";\n\nfunction normalizeRoles(\n roles: UserRoleEnumType[] | null | undefined,\n): UserRoleEnumType[] {\n if (!roles?.length) return [];\n return roles;\n}\n\n/**\n * Union of permissions for the given roles (deduped, stable order).\n */\nexport function getPermissionsForRoles(\n roles: UserRoleEnumType[] | null | undefined,\n): Permission[] {\n const seen = new Set<Permission>();\n const result: Permission[] = [];\n\n for (const role of normalizeRoles(roles)) {\n const perms = ROLE_PERMISSIONS[role] ?? [];\n for (const perm of perms) {\n if (!seen.has(perm)) {\n seen.add(perm);\n result.push(perm);\n }\n }\n }\n\n return result;\n}\n\n/**\n * Check a concrete permission list (e.g. authUser.permissions) for a grant.\n * Honours the \"*\" wildcard.\n */\nexport function permissionListIncludes(\n permissions: readonly Permission[] | null | undefined,\n permission: Permission,\n): boolean {\n if (!permissions?.length) return false;\n const set = new Set(permissions);\n if (set.has(WILDCARD_PERMISSION)) return true;\n return set.has(permission);\n}\n\nexport function hasPermission(\n roles: UserRoleEnumType[] | null | undefined,\n permission: Permission,\n): boolean {\n return permissionListIncludes(getPermissionsForRoles(roles), permission);\n}\n\nexport function hasAnyPermission(\n roles: UserRoleEnumType[] | null | undefined,\n permissions: readonly Permission[],\n): boolean {\n if (permissions.length === 0) return false;\n const granted = getPermissionsForRoles(roles);\n return permissions.some((p) => permissionListIncludes(granted, p));\n}\n\nexport function hasAllPermissions(\n roles: UserRoleEnumType[] | null | undefined,\n permissions: readonly Permission[],\n): boolean {\n if (permissions.length === 0) return true;\n const granted = getPermissionsForRoles(roles);\n return permissions.every((p) => permissionListIncludes(granted, p));\n}\n\nexport function hasRole(\n roles: UserRoleEnumType[] | null | undefined,\n role: UserRoleEnumType,\n): boolean {\n return normalizeRoles(roles).includes(role);\n}\n\nexport function hasAnyRole(\n roles: UserRoleEnumType[] | null | undefined,\n checkRoles: readonly UserRoleEnumType[],\n): boolean {\n if (checkRoles.length === 0) return false;\n const set = new Set(normalizeRoles(roles));\n return checkRoles.some((r) => set.has(r));\n}\n","import { UserRoleEnumType } from \"../../generated/graphql\";\n\nimport { hasAnyRole } from \"./helpers\";\n\n/** Roles allowed to sign into the admin web app (CUSTOMER-only is denied). */\nexport const ADMIN_APP_ROLES = [\n UserRoleEnumType.SuperAdmin,\n UserRoleEnumType.Admin,\n UserRoleEnumType.Event,\n UserRoleEnumType.Vendor,\n UserRoleEnumType.Partner,\n UserRoleEnumType.School,\n UserRoleEnumType.Affiliate,\n] as const;\n\nexport type AdminAppRole = (typeof ADMIN_APP_ROLES)[number];\n\nexport type AdminDashboardContext =\n | \"staff\"\n | \"event\"\n | \"vendor\"\n | \"partner\"\n | \"school\"\n | \"affiliate\";\n\nexport type AdminDashboardContextInfo = {\n context: AdminDashboardContext;\n home: string;\n label: string;\n /** Path prefixes that belong to this context (including home). */\n pathPrefixes: readonly string[];\n roles: readonly UserRoleEnumType[];\n};\n\n/**\n * Priority order for default home + role switcher.\n * Staff first, then product roles.\n */\nexport const ADMIN_DASHBOARD_CONTEXTS: readonly AdminDashboardContextInfo[] = [\n {\n context: \"staff\",\n home: \"/dashboard\",\n label: \"Staff\",\n pathPrefixes: [\"/dashboard\"],\n roles: [UserRoleEnumType.SuperAdmin, UserRoleEnumType.Admin],\n },\n {\n context: \"event\",\n home: \"/event/dashboard\",\n label: \"Events\",\n pathPrefixes: [\"/event\"],\n roles: [UserRoleEnumType.Event],\n },\n {\n context: \"vendor\",\n home: \"/vendor/dashboard\",\n label: \"Stallholders\",\n pathPrefixes: [\"/vendor\"],\n roles: [UserRoleEnumType.Vendor],\n },\n {\n context: \"partner\",\n home: \"/partner/dashboard\",\n label: \"Partners\",\n pathPrefixes: [\"/partner\"],\n roles: [UserRoleEnumType.Partner],\n },\n {\n context: \"school\",\n home: \"/school/dashboard\",\n label: \"Schools\",\n pathPrefixes: [\"/school\"],\n roles: [UserRoleEnumType.School],\n },\n {\n context: \"affiliate\",\n home: \"/affiliate/dashboard\",\n label: \"Affiliate\",\n pathPrefixes: [\"/affiliate\"],\n roles: [UserRoleEnumType.Affiliate],\n },\n] as const;\n\nexport function canAccessAdminApp(\n roles: UserRoleEnumType[] | null | undefined,\n): boolean {\n return hasAnyRole(roles, ADMIN_APP_ROLES);\n}\n\nexport function getUsableAdminContexts(\n roles: UserRoleEnumType[] | null | undefined,\n): AdminDashboardContextInfo[] {\n return ADMIN_DASHBOARD_CONTEXTS.filter((ctx) => hasAnyRole(roles, ctx.roles));\n}\n\nexport function getDefaultAdminHome(\n roles: UserRoleEnumType[] | null | undefined,\n preferredContext?: AdminDashboardContext | null,\n): string {\n const usable = getUsableAdminContexts(roles);\n if (usable.length === 0) {\n return \"/login\";\n }\n\n if (preferredContext) {\n const preferred = usable.find((ctx) => ctx.context === preferredContext);\n if (preferred) return preferred.home;\n }\n\n return usable[0].home;\n}\n\nexport function resolveAdminContextFromPath(\n pathname: string,\n): AdminDashboardContext | null {\n for (const ctx of ADMIN_DASHBOARD_CONTEXTS) {\n if (\n ctx.pathPrefixes.some(\n (prefix) => pathname === prefix || pathname.startsWith(`${prefix}/`),\n )\n ) {\n return ctx.context;\n }\n }\n return null;\n}\n\nexport function canAccessAdminPath(\n roles: UserRoleEnumType[] | null | undefined,\n pathname: string,\n): boolean {\n if (!canAccessAdminApp(roles)) return false;\n\n const context = resolveAdminContextFromPath(pathname);\n if (!context) {\n // Authenticated admin-app users may hit non-dashboard admin routes later;\n // unknown paths are allowed only if they have any admin-app role.\n return true;\n }\n\n const info = ADMIN_DASHBOARD_CONTEXTS.find((ctx) => ctx.context === context);\n if (!info) return false;\n return hasAnyRole(roles, info.roles);\n}\n","import {\n Control,\n FieldValues,\n FormState,\n UseFormGetValues,\n UseFormHandleSubmit,\n UseFormReset,\n UseFormSetValue,\n UseFormWatch,\n} from \"react-hook-form\";\n\nimport {\n EventEnumType,\n PostTypeEnum,\n ResourceTypeEnum,\n SocialMediaEnumType,\n LicencesEnumType,\n} from \"../generated/graphql\";\nimport type {\n DateTimeType,\n EventListItemType,\n LocationType,\n ResourceImageType,\n VendorType,\n} from \"../generated/graphql\";\n\nexport type {\n DateTimeType,\n LocationGeoType,\n LocationType,\n ResourceImageType,\n} from \"../generated/graphql\";\nexport const PROMO_CODE_PREFIX = \"CM-\";\n\nexport type PromoCodeType = `${typeof PROMO_CODE_PREFIX}${string}`;\n\nexport type Nullable<T> = {\n [K in keyof T]: T[K] | null | undefined;\n};\n\n/** Uniform mutation response envelope used across GraphQL mutations. */\nexport type MutationResponse<T> = {\n data: T | null;\n message: string | null;\n};\n\nexport type DeviceInfo = {\n appBuildNumber: string;\n appId: string;\n appVersion: string;\n brand: string;\n deviceName: string;\n installationId: string;\n manufacturer: string;\n modelName: string;\n osName: string;\n osVersion: string;\n timestamp: string;\n};\n\nexport type TermsAgreement = DeviceInfo & {\n termVersion: string;\n};\n\nexport type ResourceContactDetailsType = {\n email?: string | null;\n landlinePhone?: string | null;\n mobilePhone?: string | null;\n};\n\n/** Form/UI social links — optional fields. GraphQL `SocialMediaType` requires name+link. */\nexport type SocialMediaType = {\n name?: SocialMediaEnumType;\n link?: string;\n};\n\nexport type UserLicenceType = {\n expiryDate: Date;\n issuedDate: Date;\n licenceType: LicencesEnumType;\n prevLicenceType?: LicencesEnumType | null;\n};\n\nexport type OwnerType = {\n email: string;\n userId: string;\n};\n\nexport interface BaseResourceTypeFormData {\n _id?: string;\n active: boolean;\n contactDetails: ResourceContactDetailsType | null;\n cover: ResourceImageType;\n coverUpload?: ResourceImageType | null;\n description: string;\n images?: ResourceImageType[] | null;\n imagesUpload?: ResourceImageType[] | null;\n logo?: ResourceImageType | null;\n logoUpload?: ResourceImageType | null;\n name: string;\n promoCodes?: PromoCodeType[] | null;\n region: string;\n socialMedia: SocialMediaType[] | null;\n termsAgreement?: TermsAgreement | null;\n}\n\nexport type PosterUsageType = {\n month: string;\n count: number;\n};\n\nexport type RelatedPostType = {\n postActive: boolean;\n postId: string;\n postSlug: string;\n postType: PostTypeEnum;\n};\n\nexport type SocialShareResourceType = {\n qrCode: ResourceImageType;\n socialImage: ResourceImageType;\n};\n\nexport type BaseResourceType = Omit<\n BaseResourceTypeFormData,\n \"_id\" | \"coverUpload\" | \"imagesUpload\" | \"logoUpload\"\n> & {\n _id: string;\n adIds?: string[] | null;\n /** ISO 8601 UTC string — GraphQL Date scalar serializes to string, not JS Date. */\n approvedAt?: string | null;\n createdAt: string;\n deletedAt: string | null;\n owner: OwnerType;\n posterUsage?: PosterUsageType | null;\n rating?: number | null;\n relatedPost?: RelatedPostType | null;\n reviewCount?: number | null;\n slug: string;\n updatedAt: string | null;\n};\n\nexport type Region = {\n latitude: number;\n latitudeDelta: number;\n longitude: number;\n longitudeDelta: number;\n};\n\nexport type ResourceDetails = {\n dateTime: DateTimeType[] | null;\n description: string | null;\n eventStatus?: EventStatusType | null;\n location: LocationType | null;\n resourceCover: ResourceImageType | null;\n resourceId: string;\n resourceLogo: ResourceImageType | null;\n resourceName: string;\n resourceType: ResourceTypeEnum;\n};\n\nexport type GeocodeLocation = Pick<LocationType, \"latitude\" | \"longitude\">;\n\nexport type EventStatusType = {\n claimed: boolean;\n eventType: EventEnumType;\n googlePlaceId?: string | null;\n};\n\nexport interface FormField {\n disabled?: boolean;\n helperText?: string;\n isTextArea?: boolean;\n keyboardType?:\n | \"default\"\n | \"email-address\"\n | \"number-pad\"\n | \"url\"\n | \"decimal-pad\"\n | \"phone-pad\";\n name: string;\n placeholder: string;\n required?: boolean;\n secureTextEntry?: boolean;\n}\n\nexport interface FormDateField {\n dateMode: \"date\" | \"time\";\n helperText?: string;\n name: \"endDate\" | \"endTime\" | \"startDate\" | \"startTime\";\n placeholder: string;\n}\n\nexport interface SubcategoryItems {\n id: string;\n name: string;\n description?: string | null;\n}\n\nexport interface Subcategory {\n id: string;\n name: string;\n items?: SubcategoryItems[] | null;\n}\n\nexport interface Category {\n color?: string | null;\n description?: string | null;\n id: string;\n name: string;\n subcategories: Subcategory[];\n}\n\nexport type OptionItem = {\n value: string;\n label: string;\n};\n\nexport type ImageObjectType = {\n uri: string;\n type: string;\n name: string;\n};\n\nexport interface ResourceConnectionsType {\n events: EventListItemType[] | null;\n vendors: VendorType[] | null;\n}\n\nexport interface CreateFormData<T extends FieldValues> {\n control: Control<T, any>;\n fields: T;\n formState: FormState<T>;\n handleSubmit: UseFormHandleSubmit<T, any>;\n reset: UseFormReset<T>;\n setValue: UseFormSetValue<T>;\n watch: UseFormWatch<T>;\n getValues: UseFormGetValues<T>;\n}\n\nexport interface UseGetResourcesByRegionOptions {\n onlyClaimed?: boolean;\n limit?: number;\n offset?: number;\n}\n","/**\n * Adapters between generated GraphQL User/Auth entity types and form/UI shapes.\n *\n * GraphQL UserType is already the redacted client shape (no password /\n * refreshToken). These converters make remaining differences explicit:\n * branded promo codes, draft-optional terms, permission string → Permission,\n * and entity-to-form bridging (password fields stay empty — never round-trip).\n */\nimport type { Permission } from \"../auth/permissions\";\nimport { PERMISSIONS } from \"../auth/permissions\";\nimport type { UserType } from \"../generated/graphql\";\n\nimport type { PromoCodeType } from \"./global\";\nimport { PROMO_CODE_PREFIX } from \"./global\";\nimport type { UserFormData } from \"./user\";\n\nconst PERMISSION_SET = new Set<string>(PERMISSIONS);\n\nexport function toUserPermissions(\n permissions: ReadonlyArray<string>,\n): Permission[] {\n return permissions.filter((permission): permission is Permission =>\n PERMISSION_SET.has(permission),\n );\n}\n\nexport function toUserPromoCodes(\n codes: ReadonlyArray<string> | null | undefined,\n): PromoCodeType[] | null {\n if (codes == null) {\n return null;\n }\n return codes.map((code) => {\n if (!code.startsWith(PROMO_CODE_PREFIX)) {\n throw new Error(\n `Invalid promo code from GraphQL: ${JSON.stringify(code)}`,\n );\n }\n return code as PromoCodeType;\n });\n}\n\n/**\n * Convert a stored GraphQL UserType into UserFormData for profile edit forms.\n *\n * Password / confirmPassword are never populated from the entity (GraphQL\n * UserType does not include them). avatarUpload is a local draft field.\n * termsAgreement is copied field-by-field (form TermsAgreement vs GraphQL\n * TermsAgreementType — same fields, kept explicit like other resources).\n */\nexport function userToFormData(user: UserType): UserFormData {\n return {\n _id: user._id,\n active: user.active,\n avatar: user.avatar ?? null,\n avatarUpload: null,\n confirmPassword: null,\n email: user.email,\n firstName: user.firstName,\n isTester: user.isTester,\n lastName: user.lastName,\n location: user.location ?? null,\n password: null,\n platform: user.platform ?? undefined,\n preferredRegion: user.preferredRegion,\n termsAgreement: user.termsAgreement\n ? {\n appBuildNumber: user.termsAgreement.appBuildNumber,\n appId: user.termsAgreement.appId,\n appVersion: user.termsAgreement.appVersion,\n brand: user.termsAgreement.brand,\n deviceName: user.termsAgreement.deviceName,\n installationId: user.termsAgreement.installationId,\n manufacturer: user.termsAgreement.manufacturer,\n modelName: user.termsAgreement.modelName,\n osName: user.termsAgreement.osName,\n osVersion: user.termsAgreement.osVersion,\n termVersion: user.termsAgreement.termVersion,\n timestamp: user.termsAgreement.timestamp,\n }\n : null,\n };\n}\n"],"mappings":"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","names":[]}