@timardex/cluemart-shared 1.6.130 → 1.7.0

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 (168) hide show
  1. package/dist/ad-CVkVX_z5.d.ts +296 -0
  2. package/dist/ad-DA9ECAhK.d.mts +296 -0
  3. package/dist/affiliate-1RtkLnLP.d.ts +35 -0
  4. package/dist/affiliate-Cos2Syz5.d.mts +35 -0
  5. package/dist/chunk-HZMP7GXC.mjs +5330 -0
  6. package/dist/chunk-HZMP7GXC.mjs.map +1 -0
  7. package/dist/chunk-KZTOISPA.mjs +272 -0
  8. package/dist/chunk-KZTOISPA.mjs.map +1 -0
  9. package/dist/chunk-MVQ3CFQR.mjs +230 -0
  10. package/dist/chunk-MVQ3CFQR.mjs.map +1 -0
  11. package/dist/chunk-NPFJ2CN2.mjs +109 -0
  12. package/dist/chunk-NPFJ2CN2.mjs.map +1 -0
  13. package/dist/chunk-RKIRWZCH.mjs +368 -0
  14. package/dist/chunk-RKIRWZCH.mjs.map +1 -0
  15. package/dist/{chunk-OHHJ3KJJ.mjs → chunk-TAECMXM4.mjs} +267 -304
  16. package/dist/chunk-TAECMXM4.mjs.map +1 -0
  17. package/dist/chunk-VA5YN2K3.mjs +48 -0
  18. package/dist/chunk-VA5YN2K3.mjs.map +1 -0
  19. package/dist/chunk-ZZJSCYJK.mjs +958 -0
  20. package/dist/chunk-ZZJSCYJK.mjs.map +1 -0
  21. package/dist/contactUs-DGrDzJaM.d.mts +11 -0
  22. package/dist/contactUs-H7799pWe.d.ts +11 -0
  23. package/dist/enums/index.cjs +223 -2
  24. package/dist/enums/index.cjs.map +1 -1
  25. package/dist/enums/index.d.mts +164 -5
  26. package/dist/enums/index.d.ts +164 -5
  27. package/dist/enums/index.mjs +41 -1
  28. package/dist/formFields/index.cjs +168 -403
  29. package/dist/formFields/index.cjs.map +1 -1
  30. package/dist/formFields/index.d.mts +3 -6
  31. package/dist/formFields/index.d.ts +3 -6
  32. package/dist/formFields/index.mjs +47 -921
  33. package/dist/formFields/index.mjs.map +1 -1
  34. package/dist/global-BUUfmCo7.d.mts +698 -0
  35. package/dist/global-fKbMmluy.d.ts +698 -0
  36. package/dist/graphql/index.cjs +3329 -3340
  37. package/dist/graphql/index.cjs.map +1 -1
  38. package/dist/graphql/index.d.mts +487 -690
  39. package/dist/graphql/index.d.ts +487 -690
  40. package/dist/graphql/index.mjs +153 -2552
  41. package/dist/graphql/index.mjs.map +1 -1
  42. package/dist/hooks/index.cjs +3478 -773
  43. package/dist/hooks/index.cjs.map +1 -1
  44. package/dist/hooks/index.d.mts +6 -13
  45. package/dist/hooks/index.d.ts +6 -13
  46. package/dist/hooks/index.mjs +99 -193
  47. package/dist/hooks/index.mjs.map +1 -1
  48. package/dist/images/apple-maps-icon.webp.d.ts +1 -8
  49. package/dist/images/banner-horizontal.webp.d.ts +1 -8
  50. package/dist/images/banner-vertical.webp.d.ts +1 -8
  51. package/dist/images/cluiTui.webp.d.ts +1 -8
  52. package/dist/images/corporate.webp.d.ts +1 -8
  53. package/dist/images/facebook.webp.d.ts +1 -8
  54. package/dist/images/gazebo-top.webp.d.ts +1 -8
  55. package/dist/images/google-maps-icon.webp.d.ts +1 -8
  56. package/dist/images/googleMaps-logo-dark.webp.d.ts +1 -8
  57. package/dist/images/googleMaps-logo-light.webp.d.ts +1 -8
  58. package/dist/images/index.mjs +21 -86
  59. package/dist/images/index.mjs.map +1 -1
  60. package/dist/images/instagram.webp.d.ts +1 -8
  61. package/dist/images/logo-atr.webp.d.ts +1 -8
  62. package/dist/images/logo-dark.webp.d.ts +1 -8
  63. package/dist/images/logo.webp.d.ts +1 -8
  64. package/dist/images/meet.webp.d.ts +1 -8
  65. package/dist/images/mini-market1.webp.d.ts +1 -8
  66. package/dist/images/mini-market2.webp.d.ts +1 -8
  67. package/dist/images/mini-market3.webp.d.ts +1 -8
  68. package/dist/images/mini-market4.webp.d.ts +1 -8
  69. package/dist/images/mini-market5.webp.d.ts +1 -8
  70. package/dist/images/poll.webp.d.ts +1 -8
  71. package/dist/images/poster1.webp.d.ts +1 -8
  72. package/dist/images/poster2.webp.d.ts +1 -8
  73. package/dist/images/poster3.webp.d.ts +1 -8
  74. package/dist/images/poster4.webp.d.ts +1 -8
  75. package/dist/images/private.webp.d.ts +1 -8
  76. package/dist/images/qr-code.webp.d.ts +1 -8
  77. package/dist/images/school.webp.d.ts +1 -8
  78. package/dist/images/sima.webp.d.ts +1 -8
  79. package/dist/images/store-android.webp.d.ts +1 -8
  80. package/dist/images/store-ios.webp.d.ts +1 -8
  81. package/dist/images/tablas.webp.d.ts +1 -8
  82. package/dist/images/telefonos.webp.d.ts +1 -8
  83. package/dist/images/tiktok.webp.d.ts +1 -8
  84. package/dist/images/tip.webp.d.ts +1 -8
  85. package/dist/images/ugralos.webp.d.ts +1 -8
  86. package/dist/images/waze-maps-icon.webp.d.ts +1 -8
  87. package/dist/images/website.webp.d.ts +1 -8
  88. package/dist/images/youtube.webp.d.ts +1 -8
  89. package/dist/index.cjs +5883 -7079
  90. package/dist/index.cjs.map +1 -1
  91. package/dist/index.d.mts +1692 -2966
  92. package/dist/index.d.ts +1692 -2966
  93. package/dist/index.mjs +5020 -6162
  94. package/dist/index.mjs.map +1 -1
  95. package/dist/map/index.cjs +9 -14
  96. package/dist/map/index.cjs.map +1 -1
  97. package/dist/map/index.d.mts +14 -18
  98. package/dist/map/index.d.ts +14 -18
  99. package/dist/map/index.mjs +9 -14
  100. package/dist/map/index.mjs.map +1 -1
  101. package/dist/resourceActivities-BL_12IAo.d.ts +125 -0
  102. package/dist/resourceActivities-zczOntNk.d.mts +125 -0
  103. package/dist/sharing/index.cjs +1272 -63
  104. package/dist/sharing/index.cjs.map +1 -1
  105. package/dist/sharing/index.d.mts +7 -32
  106. package/dist/sharing/index.d.ts +7 -32
  107. package/dist/sharing/index.mjs +30 -188
  108. package/dist/sharing/index.mjs.map +1 -1
  109. package/dist/theme/index.mjs +5 -41
  110. package/dist/theme/index.mjs.map +1 -1
  111. package/dist/types/index.cjs +110 -868
  112. package/dist/types/index.cjs.map +1 -1
  113. package/dist/types/index.d.mts +24 -230
  114. package/dist/types/index.d.ts +24 -230
  115. package/dist/types/index.mjs +27 -61
  116. package/dist/utils/index.cjs +214 -608
  117. package/dist/utils/index.cjs.map +1 -1
  118. package/dist/utils/index.d.mts +53 -107
  119. package/dist/utils/index.d.ts +53 -107
  120. package/dist/utils/index.mjs +15 -43
  121. package/package.json +12 -40
  122. package/dist/affiliate-Bqqlffw8.d.mts +0 -36
  123. package/dist/affiliate-Btlp5XUp.d.ts +0 -36
  124. package/dist/affiliateAdapters-BW3BY7c5.d.mts +0 -118
  125. package/dist/affiliateAdapters-C51ISmuA.d.ts +0 -118
  126. package/dist/apollo/index.cjs +0 -1383
  127. package/dist/apollo/index.cjs.map +0 -1
  128. package/dist/apollo/index.d.mts +0 -323
  129. package/dist/apollo/index.d.ts +0 -323
  130. package/dist/apollo/index.mjs +0 -1295
  131. package/dist/apollo/index.mjs.map +0 -1
  132. package/dist/auth/index.cjs +0 -3322
  133. package/dist/auth/index.cjs.map +0 -1
  134. package/dist/auth/index.d.mts +0 -164
  135. package/dist/auth/index.d.ts +0 -164
  136. package/dist/auth/index.mjs +0 -379
  137. package/dist/auth/index.mjs.map +0 -1
  138. package/dist/auth-BOmAO53v.d.ts +0 -169
  139. package/dist/auth-CsITA95p.d.mts +0 -169
  140. package/dist/chunk-DATBGC2K.mjs +0 -347
  141. package/dist/chunk-DATBGC2K.mjs.map +0 -1
  142. package/dist/chunk-DDHECBJR.mjs +0 -726
  143. package/dist/chunk-DDHECBJR.mjs.map +0 -1
  144. package/dist/chunk-INQCDU24.mjs +0 -139
  145. package/dist/chunk-INQCDU24.mjs.map +0 -1
  146. package/dist/chunk-NWWKI4PJ.mjs +0 -297
  147. package/dist/chunk-NWWKI4PJ.mjs.map +0 -1
  148. package/dist/chunk-OHHJ3KJJ.mjs.map +0 -1
  149. package/dist/chunk-RAYUJODN.mjs +0 -45
  150. package/dist/chunk-RAYUJODN.mjs.map +0 -1
  151. package/dist/chunk-TOEFAEF2.mjs +0 -69
  152. package/dist/chunk-TOEFAEF2.mjs.map +0 -1
  153. package/dist/chunk-UKW7NZEQ.mjs +0 -2813
  154. package/dist/chunk-UKW7NZEQ.mjs.map +0 -1
  155. package/dist/dailyClue-C6WXY73z.d.mts +0 -105
  156. package/dist/dailyClue-C6WXY73z.d.ts +0 -105
  157. package/dist/event-C9K7CSg4.d.ts +0 -53
  158. package/dist/event-W0NhL5Cd.d.mts +0 -53
  159. package/dist/global-BbSFfYdd.d.ts +0 -181
  160. package/dist/global-C6v9tRji.d.mts +0 -181
  161. package/dist/graphql-CDOfA79A.d.ts +0 -1253
  162. package/dist/graphql-CcvzTs9k.d.mts +0 -1253
  163. package/dist/resourceActivities-CS8YRIIL.d.mts +0 -89
  164. package/dist/resourceActivities-DOdNPkhW.d.ts +0 -89
  165. package/dist/subscription-Cj_qBA7u.d.mts +0 -20
  166. package/dist/subscription-OiJ50uJb.d.ts +0 -20
  167. package/dist/vendor-DmMi2qmx.d.mts +0 -73
  168. package/dist/vendor-M9hVZlni.d.ts +0 -73
@@ -1,169 +0,0 @@
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,347 +0,0 @@
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
-
21
- // src/auth/permissions/permissions.ts
22
- var PERMISSIONS = [
23
- "*",
24
- // Dashboards
25
- "dashboard.admin",
26
- "dashboard.affiliate",
27
- "dashboard.customer",
28
- "dashboard.event",
29
- "dashboard.partner",
30
- "dashboard.school",
31
- "dashboard.vendor",
32
- // Admin: users
33
- "users.delete",
34
- "users.read",
35
- "users.update",
36
- // Admin: events
37
- "events.create",
38
- "events.delete",
39
- "events.read",
40
- "events.update",
41
- // Admin: vendors
42
- "vendors.create",
43
- "vendors.delete",
44
- "vendors.read",
45
- "vendors.update",
46
- // Admin: partners
47
- "partners.create",
48
- "partners.delete",
49
- "partners.read",
50
- "partners.update",
51
- // Admin: schools
52
- "schools.create",
53
- "schools.delete",
54
- "schools.read",
55
- "schools.update",
56
- // Admin: affiliates
57
- "affiliates.create",
58
- "affiliates.delete",
59
- "affiliates.read",
60
- "affiliates.update",
61
- // Admin: ads / posts / settings
62
- "ads.create",
63
- "ads.delete",
64
- "ads.read",
65
- "ads.update",
66
- "posts.create",
67
- "posts.delete",
68
- "posts.read",
69
- "posts.update",
70
- "settings.read",
71
- "settings.update",
72
- // Product: own-resource management
73
- "affiliates.manage_own",
74
- "events.manage_own",
75
- "partners.manage_own",
76
- "schools.manage_own",
77
- "vendors.manage_own"
78
- ];
79
- var WILDCARD_PERMISSION = "*";
80
-
81
- // src/auth/permissions/rolePermissions.ts
82
- var ADMIN_PERMISSIONS = [
83
- "dashboard.admin",
84
- "events.read",
85
- "events.create",
86
- "events.update",
87
- "events.delete",
88
- "vendors.read",
89
- "vendors.create",
90
- "vendors.update",
91
- "vendors.delete",
92
- "partners.read",
93
- "partners.create",
94
- "partners.update",
95
- "partners.delete",
96
- "schools.read",
97
- "schools.create",
98
- "schools.update",
99
- "schools.delete",
100
- "affiliates.read",
101
- "affiliates.create",
102
- "affiliates.update",
103
- "affiliates.delete",
104
- "ads.read",
105
- "ads.create",
106
- "ads.update",
107
- "ads.delete",
108
- "posts.read",
109
- "posts.create",
110
- "posts.update",
111
- "posts.delete"
112
- ];
113
- var ROLE_PERMISSIONS = {
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
- ]
125
- };
126
-
127
- // src/auth/permissions/helpers.ts
128
- function normalizeRoles(roles) {
129
- if (!roles?.length) return [];
130
- return roles;
131
- }
132
- function getPermissionsForRoles(roles) {
133
- const seen = /* @__PURE__ */ new Set();
134
- const result = [];
135
- for (const role of normalizeRoles(roles)) {
136
- const perms = ROLE_PERMISSIONS[role] ?? [];
137
- for (const perm of perms) {
138
- if (!seen.has(perm)) {
139
- seen.add(perm);
140
- result.push(perm);
141
- }
142
- }
143
- }
144
- return result;
145
- }
146
- function permissionListIncludes(permissions, permission) {
147
- if (!permissions?.length) return false;
148
- const set = new Set(permissions);
149
- if (set.has(WILDCARD_PERMISSION)) return true;
150
- return set.has(permission);
151
- }
152
- function hasPermission(roles, permission) {
153
- return permissionListIncludes(getPermissionsForRoles(roles), permission);
154
- }
155
- function hasAnyPermission(roles, permissions) {
156
- if (permissions.length === 0) return false;
157
- const granted = getPermissionsForRoles(roles);
158
- return permissions.some((p) => permissionListIncludes(granted, p));
159
- }
160
- function hasAllPermissions(roles, permissions) {
161
- if (permissions.length === 0) return true;
162
- const granted = getPermissionsForRoles(roles);
163
- return permissions.every((p) => permissionListIncludes(granted, p));
164
- }
165
- function hasRole(roles, role) {
166
- return normalizeRoles(roles).includes(role);
167
- }
168
- function hasAnyRole(roles, checkRoles) {
169
- if (checkRoles.length === 0) return false;
170
- const set = new Set(normalizeRoles(roles));
171
- return checkRoles.some((r) => set.has(r));
172
- }
173
-
174
- // src/auth/permissions/adminAppAccess.ts
175
- var ADMIN_APP_ROLES = [
176
- "super_admin" /* SuperAdmin */,
177
- "admin" /* Admin */,
178
- "event" /* Event */,
179
- "vendor" /* Vendor */,
180
- "partner" /* Partner */,
181
- "school" /* School */,
182
- "affiliate" /* Affiliate */
183
- ];
184
- var ADMIN_DASHBOARD_CONTEXTS = [
185
- {
186
- context: "staff",
187
- home: "/dashboard",
188
- label: "Staff",
189
- pathPrefixes: ["/dashboard"],
190
- roles: ["super_admin" /* SuperAdmin */, "admin" /* Admin */]
191
- },
192
- {
193
- context: "event",
194
- home: "/event/dashboard",
195
- label: "Events",
196
- pathPrefixes: ["/event"],
197
- roles: ["event" /* Event */]
198
- },
199
- {
200
- context: "vendor",
201
- home: "/vendor/dashboard",
202
- label: "Stallholders",
203
- pathPrefixes: ["/vendor"],
204
- roles: ["vendor" /* Vendor */]
205
- },
206
- {
207
- context: "partner",
208
- home: "/partner/dashboard",
209
- label: "Partners",
210
- pathPrefixes: ["/partner"],
211
- roles: ["partner" /* Partner */]
212
- },
213
- {
214
- context: "school",
215
- home: "/school/dashboard",
216
- label: "Schools",
217
- pathPrefixes: ["/school"],
218
- roles: ["school" /* School */]
219
- },
220
- {
221
- context: "affiliate",
222
- home: "/affiliate/dashboard",
223
- label: "Affiliate",
224
- pathPrefixes: ["/affiliate"],
225
- roles: ["affiliate" /* Affiliate */]
226
- }
227
- ];
228
- function canAccessAdminApp(roles) {
229
- return hasAnyRole(roles, ADMIN_APP_ROLES);
230
- }
231
- function getUsableAdminContexts(roles) {
232
- return ADMIN_DASHBOARD_CONTEXTS.filter((ctx) => hasAnyRole(roles, ctx.roles));
233
- }
234
- function getDefaultAdminHome(roles, preferredContext) {
235
- const usable = getUsableAdminContexts(roles);
236
- if (usable.length === 0) {
237
- return "/login";
238
- }
239
- if (preferredContext) {
240
- const preferred = usable.find((ctx) => ctx.context === preferredContext);
241
- if (preferred) return preferred.home;
242
- }
243
- return usable[0].home;
244
- }
245
- function resolveAdminContextFromPath(pathname) {
246
- for (const ctx of ADMIN_DASHBOARD_CONTEXTS) {
247
- if (ctx.pathPrefixes.some(
248
- (prefix) => pathname === prefix || pathname.startsWith(`${prefix}/`)
249
- )) {
250
- return ctx.context;
251
- }
252
- }
253
- return null;
254
- }
255
- function canAccessAdminPath(roles, pathname) {
256
- if (!canAccessAdminApp(roles)) return false;
257
- const context = resolveAdminContextFromPath(pathname);
258
- if (!context) {
259
- return true;
260
- }
261
- const info = ADMIN_DASHBOARD_CONTEXTS.find((ctx) => ctx.context === context);
262
- if (!info) return false;
263
- return hasAnyRole(roles, info.roles);
264
- }
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
-
321
- export {
322
- TIERS_BY_PRIORITY,
323
- TIER_DISPLAY_LABELS,
324
- TIER_FROM_LICENCE,
325
- PERMISSIONS,
326
- WILDCARD_PERMISSION,
327
- ROLE_PERMISSIONS,
328
- getPermissionsForRoles,
329
- permissionListIncludes,
330
- hasPermission,
331
- hasAnyPermission,
332
- hasAllPermissions,
333
- hasRole,
334
- hasAnyRole,
335
- ADMIN_APP_ROLES,
336
- ADMIN_DASHBOARD_CONTEXTS,
337
- canAccessAdminApp,
338
- getUsableAdminContexts,
339
- getDefaultAdminHome,
340
- resolveAdminContextFromPath,
341
- canAccessAdminPath,
342
- PROMO_CODE_PREFIX,
343
- toUserPermissions,
344
- toUserPromoCodes,
345
- userToFormData
346
- };
347
- //# sourceMappingURL=chunk-DATBGC2K.mjs.map
@@ -1 +0,0 @@
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":[]}