@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,101 +1,20 @@
1
1
  import {
2
- dateFormat,
3
- formatDate,
4
- isIsoDateString,
5
- mapArrayToOptions,
6
- nzStartOfDay,
7
- sortDatesChronologically,
8
- stripOverlaySubtitleSpecialChars
9
- } from "./chunk-NWWKI4PJ.mjs";
10
- import {
2
+ PROMO_CODE_PREFIX,
11
3
  gameScreenIdentifierList
12
- } from "./chunk-DDHECBJR.mjs";
13
- import {
14
- isTransientNetworkError
15
- } from "./chunk-RAYUJODN.mjs";
16
- import {
17
- PROMO_CODE_PREFIX
18
- } from "./chunk-DATBGC2K.mjs";
4
+ } from "./chunk-MVQ3CFQR.mjs";
19
5
  import {
6
+ EnumEventDateStatus,
7
+ EnumInviteStatus,
8
+ EnumPaymentMethod,
20
9
  EnumRegions
21
- } from "./chunk-TOEFAEF2.mjs";
22
- import {
23
- InviteEnumType,
24
- PaymentMethodEnumType
25
- } from "./chunk-INQCDU24.mjs";
10
+ } from "./chunk-KZTOISPA.mjs";
26
11
 
27
- // src/utils/dailyClueGame.ts
28
- function createSeededRng(seed) {
29
- let t = seed >>> 0;
30
- return function random() {
31
- t += 1831565813;
32
- let x = t;
33
- x = Math.imul(x ^ x >>> 15, x | 1);
34
- x ^= x + Math.imul(x ^ x >>> 7, x | 61);
35
- return ((x ^ x >>> 14) >>> 0) / 4294967296;
36
- };
37
- }
38
- function hashStringToNumber(seed) {
39
- let hash = 2166136261;
40
- for (let i = 0; i < seed.length; i++) {
41
- hash ^= seed.codePointAt(i) ?? 0;
42
- hash = Math.imul(hash, 16777619);
43
- }
44
- return hash >>> 0;
45
- }
46
- function seededShuffle(array, seed) {
47
- const rng = createSeededRng(hashStringToNumber(seed));
48
- const result = [...array];
49
- for (let i = result.length - 1; i > 0; i--) {
50
- const j = Math.floor(rng() * (i + 1));
51
- [result[i], result[j]] = [result[j], result[i]];
52
- }
53
- return result;
54
- }
55
- function getDayIndex(start, today) {
56
- return today.diff(start, "day");
57
- }
58
- function computeDailyClueState(dailyClue) {
59
- const { startDate, endDate } = dailyClue.gameFields.gameDate;
60
- const { solutionShuffled, collected } = dailyClue.letterInfo;
61
- const today = nzStartOfDay();
62
- const start = nzStartOfDay(startDate);
63
- const end = nzStartOfDay(endDate);
64
- if (today.isBefore(start)) {
65
- return null;
66
- }
67
- const shuffledPlacements = seededShuffle(
68
- gameScreenIdentifierList,
69
- start.toISOString()
70
- );
71
- const index = getDayIndex(start, today);
72
- if (today.isAfter(end)) {
73
- return {
74
- todaysClue: null,
75
- todaysLetter: null,
76
- todaysPlacement: null
77
- };
78
- }
79
- if (index < 0 || index >= solutionShuffled.length || index >= shuffledPlacements.length) {
80
- return null;
81
- }
82
- const letterToday = solutionShuffled[index];
83
- const placement = shuffledPlacements[index];
84
- if (!letterToday || !placement) return null;
85
- const alreadyCollectedToday = (collected ?? []).includes(letterToday);
86
- if (alreadyCollectedToday) {
87
- return {
88
- todaysClue: null,
89
- todaysLetter: null,
90
- todaysPlacement: null
91
- };
92
- }
93
- return {
94
- todaysClue: placement.clue,
95
- todaysLetter: letterToday,
96
- todaysPlacement: placement.id
97
- };
98
- }
12
+ // src/utils/date.ts
13
+ import dayjs from "dayjs";
14
+ import customParseFormat from "dayjs/plugin/customParseFormat.js";
15
+ import isSameOrAfter from "dayjs/plugin/isSameOrAfter.js";
16
+ import timezone from "dayjs/plugin/timezone.js";
17
+ import utc from "dayjs/plugin/utc.js";
99
18
 
100
19
  // src/utils/utils.ts
101
20
  var removeTypename = (obj) => {
@@ -121,14 +40,17 @@ var removeTypename = (obj) => {
121
40
  return obj;
122
41
  };
123
42
  var truncateText = (text, maxLength = 30) => {
124
- const result = stripOverlaySubtitleSpecialChars(text);
125
- return result.length > maxLength ? result.substring(0, maxLength) + "..." : result;
43
+ return text.length > maxLength ? text.substring(0, maxLength) + "..." : text;
126
44
  };
45
+ var mapArrayToOptions = (items) => items.map((item) => ({
46
+ label: item,
47
+ value: item
48
+ }));
127
49
  var capitalizeFirstLetter = (str) => {
128
50
  return str.split(" ").map((word) => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase()).join(" ");
129
51
  };
130
52
  var statusOptions = [
131
- ...Object.values(InviteEnumType).map((status) => ({
53
+ ...Object.values(EnumInviteStatus).map((status) => ({
132
54
  label: status,
133
55
  value: status
134
56
  })).sort((a, b) => a.label.localeCompare(b.label))
@@ -137,39 +59,39 @@ var statusOptions = [
137
59
  var availableRegionTypes = Object.values(EnumRegions);
138
60
  var availableRegionOptions = mapArrayToOptions(availableRegionTypes);
139
61
  var paymentMethodOptions = mapArrayToOptions(
140
- Object.values(PaymentMethodEnumType)
62
+ Object.values(EnumPaymentMethod)
141
63
  );
142
64
  function normalizeUrl(url) {
143
- const withProtocol = !url.startsWith("http://") && !url.startsWith("https://") ? `https://${url}` : url;
144
- return withProtocol.replace(/\/+$/, "");
65
+ if (!url.startsWith("http://") && !url.startsWith("https://")) {
66
+ return `https://${url}`;
67
+ }
68
+ return url;
145
69
  }
146
70
  var licenseNiceNames = {
147
- ["pro_event" /* ProEvent */]: "Pro Event",
148
- ["pro_vendor" /* ProVendor */]: "Pro Stallholder",
149
- ["standard_event" /* StandardEvent */]: "Standard Event",
150
- ["standard_vendor" /* StandardVendor */]: "Standard Stallholder",
151
- ["pro_plus_event" /* ProPlusEvent */]: "Pro+Ads Event",
152
- ["pro_plus_vendor" /* ProPlusVendor */]: "Pro+Ads Stallholder",
153
- ["standard_partner" /* StandardPartner */]: "Partner",
154
- ["standard_affiliate" /* StandardAffiliate */]: "Affiliate",
155
- ["standard_school" /* StandardSchool */]: "School"
71
+ ["pro_event" /* PRO_EVENT */]: "Pro Event",
72
+ ["pro_vendor" /* PRO_VENDOR */]: "Pro Stallholder",
73
+ ["standard_event" /* STANDARD_EVENT */]: "Standard Event",
74
+ ["standard_vendor" /* STANDARD_VENDOR */]: "Standard Stallholder",
75
+ ["pro_plus_event" /* PRO_PLUS_EVENT */]: "Pro+Ads Event",
76
+ ["pro_plus_vendor" /* PRO_PLUS_VENDOR */]: "Pro+Ads Stallholder",
77
+ ["standard_partner" /* STANDARD_PARTNER */]: "Partner"
156
78
  };
157
79
  var cluemartSocialMedia = [
158
80
  {
159
81
  link: "https://www.facebook.com/ClueMartApp",
160
- name: "facebook" /* Facebook */
82
+ name: "facebook" /* FACEBOOK */
161
83
  },
162
84
  {
163
85
  link: "https://www.instagram.com/cluemart_app",
164
- name: "instagram" /* Instagram */
86
+ name: "instagram" /* INSTAGRAM */
165
87
  },
166
88
  {
167
89
  link: "https://www.tiktok.com/@cluemart",
168
- name: "tiktok" /* Tiktok */
90
+ name: "tiktok" /* TIKTOK */
169
91
  },
170
92
  {
171
93
  link: "https://www.youtube.com/@ClueMart-App-NZ",
172
- name: "youtube" /* Youtube */
94
+ name: "youtube" /* YOUTUBE */
173
95
  }
174
96
  ];
175
97
  var IOS_URL = "https://apps.apple.com/nz/app/cluemart/id6747251008";
@@ -178,34 +100,204 @@ var DEFAULT_RESOURCES_RETURN_LIMIT = 1e3;
178
100
  var DEFAULT_RESOURCES_RETURN_OFFSET = 0;
179
101
  var CLUEMART_MAIN_DOMAIN_URL = "https://cluemart.co.nz";
180
102
  var rewardNiceNames = {
181
- ["mystery_joy_box" /* MysteryJoyBox */]: {
103
+ ["mystery_joy_box" /* MYSTERY_JOY_BOX */]: {
182
104
  name: "Mystery Joy Box",
183
105
  points: 250
184
106
  },
185
- ["mystery_squeeze_box" /* MysterySqueezeBox */]: {
107
+ ["mystery_squeeze_box" /* MYSTERY_SQUEEZE_BOX */]: {
186
108
  name: "Mystery Squeeze Box",
187
109
  points: 350
188
110
  },
189
- ["mystery_deluxe_box" /* MysteryDeluxeBox */]: {
111
+ ["mystery_deluxe_box" /* MYSTERY_DELUXE_BOX */]: {
190
112
  name: "Mystery Deluxe Box",
191
113
  points: 500
192
114
  }
193
115
  };
194
116
  var PostTypeLabels = {
195
- ["market_faces" /* MarketFaces */]: "Market Faces",
196
- ["clue_bites" /* ClueBites */]: "Clue Bites",
197
- ["play_and_win" /* PlayAndWin */]: "Play & Win"
117
+ ["market_faces" /* MARKET_FACES */]: "Market Faces",
118
+ ["clue_bites" /* CLUE_BITES */]: "Clue Bites",
119
+ ["play_and_win" /* PLAY_AND_WIN */]: "Play & Win"
198
120
  };
199
121
  var CM_SCHOOL_PROMO_CODE = `${PROMO_CODE_PREFIX}SCHOOL`;
200
122
  var CM_AFFILIATE_PROMO_CODE = `${PROMO_CODE_PREFIX}AFFILIATE`;
201
- function formatNZBankAccount(input) {
202
- const digitsOnly = input.replaceAll(/\D/g, "");
203
- const parts = [];
204
- if (digitsOnly.length > 0) parts.push(digitsOnly.slice(0, 2));
205
- if (digitsOnly.length > 2) parts.push(digitsOnly.slice(2, 6));
206
- if (digitsOnly.length > 6) parts.push(digitsOnly.slice(6, 13));
207
- if (digitsOnly.length > 13) parts.push(digitsOnly.slice(13, 15));
208
- return parts.join("-");
123
+
124
+ // src/utils/date.ts
125
+ var dateFormat = "DD-MM-YYYY";
126
+ var timeFormat = "HH:mm";
127
+ dayjs.extend(customParseFormat);
128
+ dayjs.extend(utc);
129
+ dayjs.extend(timezone);
130
+ dayjs.extend(isSameOrAfter);
131
+ var NZ_TZ = "Pacific/Auckland";
132
+ function toNZTime(date) {
133
+ return date ? dayjs(date).tz(NZ_TZ) : dayjs().tz(NZ_TZ);
134
+ }
135
+ function nzStartOfDay(input) {
136
+ if (input == null) {
137
+ return dayjs().tz(NZ_TZ).startOf("day");
138
+ }
139
+ return dayjs.tz(input, NZ_TZ).startOf("day");
140
+ }
141
+ var formatDate = (dateStr, display = "datetime", timeStr) => {
142
+ const dateTimeStr = timeStr ? `${dateStr} ${timeStr}` : dateStr;
143
+ const dateTime = timeStr ? dayjs(dateTimeStr, `${dateFormat} ${timeFormat}`) : dayjs(dateStr, dateFormat);
144
+ const formattedDate = dateTime.format("dddd, D MMMM, YYYY");
145
+ const formattedTime = dateTime.format("h:mm a");
146
+ switch (display) {
147
+ case "date":
148
+ return formattedDate;
149
+ case "time":
150
+ return formattedTime;
151
+ case "datetime":
152
+ return `${formattedDate} at ${formattedTime}`;
153
+ default:
154
+ return formattedDate;
155
+ }
156
+ };
157
+ var getCurrentAndFutureDates = (dates) => {
158
+ const now = dayjs();
159
+ return dates.filter((dateObj) => {
160
+ const dateTime = dayjs(
161
+ `${dateObj.startDate} ${dateObj.startTime}`,
162
+ `${dateFormat} ${timeFormat}`
163
+ );
164
+ return dateTime.isSameOrAfter(now);
165
+ });
166
+ };
167
+ var isFutureDatesBeforeThreshold = (date, minHoursFromNow) => {
168
+ const threshold = minHoursFromNow ? dayjs().add(minHoursFromNow, "hour") : dayjs().startOf("day");
169
+ const dateTime = dayjs(
170
+ `${date.startDate} ${date.startTime}`,
171
+ `${dateFormat} ${timeFormat}`
172
+ );
173
+ return dateTime.isSameOrAfter(threshold);
174
+ };
175
+ var formatTimestamp = (timestamp) => {
176
+ const formattedDate = toNZTime(timestamp).format(dateFormat);
177
+ return formatDate(formattedDate, "date");
178
+ };
179
+ var isIsoDateString = (value) => {
180
+ return typeof value === "string" && !Number.isNaN(Date.parse(value));
181
+ };
182
+ function sortDatesChronologically(dates) {
183
+ if (!dates?.length) {
184
+ return [];
185
+ }
186
+ return [...dates].sort((a, b) => {
187
+ const dateTimeFormat = `${dateFormat} ${timeFormat}`;
188
+ const dateA = dayjs(`${a.startDate} ${a.startTime}`, dateTimeFormat);
189
+ const dateB = dayjs(`${b.startDate} ${b.startTime}`, dateTimeFormat);
190
+ return dateA.valueOf() - dateB.valueOf();
191
+ });
192
+ }
193
+ var futureTimePeriods = mapArrayToOptions(
194
+ Object.values(EnumEventDateStatus)
195
+ ).filter(
196
+ (period) => period.value !== "Starting_Soon" /* STARTING_SOON */ && period.value !== "Canceled" /* CANCELED */ && period.value !== "Rescheduled" /* RE_SCHEDULED */ && period.value !== "Started" /* STARTED */ && period.value !== "Ended" /* ENDED */ && period.value !== "Invalid" /* INVALID */
197
+ ).map((period) => ({
198
+ label: period.value.replaceAll("_", " "),
199
+ value: period.value
200
+ }));
201
+
202
+ // src/utils/dailyClueGame.ts
203
+ function createSeededRng(seed) {
204
+ let t = seed >>> 0;
205
+ return function random() {
206
+ t += 1831565813;
207
+ let x = t;
208
+ x = Math.imul(x ^ x >>> 15, x | 1);
209
+ x ^= x + Math.imul(x ^ x >>> 7, x | 61);
210
+ return ((x ^ x >>> 14) >>> 0) / 4294967296;
211
+ };
212
+ }
213
+ function hashStringToNumber(seed) {
214
+ let hash = 2166136261;
215
+ for (let i = 0; i < seed.length; i++) {
216
+ hash ^= seed.codePointAt(i) ?? 0;
217
+ hash = Math.imul(hash, 16777619);
218
+ }
219
+ return hash >>> 0;
220
+ }
221
+ function seededShuffle(array, seed) {
222
+ const rng = createSeededRng(hashStringToNumber(seed));
223
+ const result = [...array];
224
+ for (let i = result.length - 1; i > 0; i--) {
225
+ const j = Math.floor(rng() * (i + 1));
226
+ [result[i], result[j]] = [result[j], result[i]];
227
+ }
228
+ return result;
229
+ }
230
+ function getDayIndex(start, today) {
231
+ return today.diff(start, "day");
232
+ }
233
+ function computeDailyClueState(dailyClue) {
234
+ const { startDate, endDate } = dailyClue.gameFields.gameDate;
235
+ const { solutionShuffled, collected } = dailyClue.letterInfo;
236
+ const today = nzStartOfDay();
237
+ const start = nzStartOfDay(startDate);
238
+ const end = nzStartOfDay(endDate);
239
+ if (today.isBefore(start)) {
240
+ return null;
241
+ }
242
+ const shuffledPlacements = seededShuffle(
243
+ gameScreenIdentifierList,
244
+ start.toISOString()
245
+ );
246
+ const index = getDayIndex(start, today);
247
+ if (today.isAfter(end)) {
248
+ return {
249
+ todaysClue: null,
250
+ todaysLetter: null,
251
+ todaysPlacement: null
252
+ };
253
+ }
254
+ if (index < 0 || index >= solutionShuffled.length || index >= shuffledPlacements.length) {
255
+ return null;
256
+ }
257
+ const letterToday = solutionShuffled[index];
258
+ const placement = shuffledPlacements[index];
259
+ if (!letterToday || !placement) return null;
260
+ const alreadyCollectedToday = (collected ?? []).includes(letterToday);
261
+ if (alreadyCollectedToday) {
262
+ return {
263
+ todaysClue: null,
264
+ todaysLetter: null,
265
+ todaysPlacement: null
266
+ };
267
+ }
268
+ return {
269
+ todaysClue: placement.clue,
270
+ todaysLetter: letterToday,
271
+ todaysPlacement: placement.id
272
+ };
273
+ }
274
+
275
+ // src/utils/affiliate.ts
276
+ var AFFILIATE_REWARDS = {
277
+ ["NEW_EVENT_REGISTRATION" /* NEW_EVENT_REGISTRATION */]: {
278
+ description: "10 points for new event registration (one-time reward)",
279
+ value: 10
280
+ },
281
+ ["NEW_VENDOR_REGISTRATION" /* NEW_VENDOR_REGISTRATION */]: {
282
+ description: "5 points for new vendor registration (one-time reward)",
283
+ value: 5
284
+ },
285
+ ["NEW_PARTNER_REGISTRATION" /* NEW_PARTNER_REGISTRATION */]: {
286
+ description: "",
287
+ value: 0
288
+ }
289
+ };
290
+ function createAffiliateReward(rewardType, createdAt) {
291
+ const reward = AFFILIATE_REWARDS[rewardType];
292
+ return {
293
+ createdAt,
294
+ deletedAt: null,
295
+ redeemedAt: null,
296
+ rewardDescription: reward.description,
297
+ rewardType,
298
+ rewardValue: reward.value,
299
+ updatedAt: null
300
+ };
209
301
  }
210
302
 
211
303
  // src/utils/resourceImage.ts
@@ -232,17 +324,17 @@ var SCHOOL_MAX_STUDENT_COUNT = 0;
232
324
 
233
325
  // src/utils/eventDateStatus.ts
234
326
  var EVENT_DATE_STATUS_PERIOD_MAP = {
235
- ["Today" /* Today */]: [
236
- "Started" /* Started */,
237
- "Starting_Soon" /* StartingSoon */,
238
- "Today" /* Today */
327
+ ["Today" /* TODAY */]: [
328
+ "Started" /* STARTED */,
329
+ "Starting_Soon" /* STARTING_SOON */,
330
+ "Today" /* TODAY */
239
331
  ],
240
- ["This_Week" /* ThisWeek */]: [
241
- "Started" /* Started */,
242
- "Starting_Soon" /* StartingSoon */,
243
- "This_Week" /* ThisWeek */,
244
- "Today" /* Today */,
245
- "Tomorrow" /* Tomorrow */
332
+ ["This_Week" /* THIS_WEEK */]: [
333
+ "Started" /* STARTED */,
334
+ "Starting_Soon" /* STARTING_SOON */,
335
+ "This_Week" /* THIS_WEEK */,
336
+ "Today" /* TODAY */,
337
+ "Tomorrow" /* TOMORROW */
246
338
  ]
247
339
  };
248
340
  function getAllowedEventDateStatuses(period) {
@@ -259,18 +351,18 @@ function filterEventsByDateStatusPeriod(events, period) {
259
351
  }
260
352
 
261
353
  // src/calendar/eventCalendar.ts
262
- import dayjs from "dayjs";
354
+ import dayjs2 from "dayjs";
263
355
  var KNOWN_EVENT_SCHEDULE_STATUSES = /* @__PURE__ */ new Set([
264
- "Started" /* Started */,
265
- "Starting_Soon" /* StartingSoon */,
266
- "Ended" /* Ended */
356
+ "Started" /* STARTED */,
357
+ "Starting_Soon" /* STARTING_SOON */,
358
+ "Ended" /* ENDED */
267
359
  ]);
268
360
  function toCalendarIsoDate(startDate) {
269
- const formatted = dayjs(startDate, dateFormat).format("YYYY-MM-DD");
270
- return dayjs(formatted, "YYYY-MM-DD", true).isValid() ? formatted : null;
361
+ const formatted = dayjs2(startDate, dateFormat).format("YYYY-MM-DD");
362
+ return dayjs2(formatted, "YYYY-MM-DD", true).isValid() ? formatted : null;
271
363
  }
272
364
  function fromCalendarIsoDate(isoDate) {
273
- return dayjs(isoDate, "YYYY-MM-DD").format(dateFormat);
365
+ return dayjs2(isoDate, "YYYY-MM-DD").format(dateFormat);
274
366
  }
275
367
  function getEventCalendarIsoDates(dateTimes) {
276
368
  return dateTimes?.map((dateTime) => toCalendarIsoDate(dateTime.startDate)).filter((date) => Boolean(date)) ?? [];
@@ -293,11 +385,11 @@ function buildCalendarSheetContentData(dateTimes, isoDate, location, resourceId,
293
385
  }
294
386
  function getEventScheduleStatusTone(status) {
295
387
  switch (status) {
296
- case "Started" /* Started */:
388
+ case "Started" /* STARTED */:
297
389
  return "started";
298
- case "Starting_Soon" /* StartingSoon */:
390
+ case "Starting_Soon" /* STARTING_SOON */:
299
391
  return "startingSoon";
300
- case "Ended" /* Ended */:
392
+ case "Ended" /* ENDED */:
301
393
  return "ended";
302
394
  default:
303
395
  return "default";
@@ -321,10 +413,10 @@ function getEventScheduleStatusLabel(dateTime, onlyShowKnownStatuses) {
321
413
  return isKnownStatus ? status.replaceAll("_", " ").toLowerCase() : `Next event date: ${formatDate(dateTime.startDate, "date")}`;
322
414
  }
323
415
  function shouldShowEventActionsWithWeather(resourceType, dateTime, location) {
324
- return resourceType === "event" /* Event */ && Boolean(location) && Boolean(dateTime?.dateStatus) && ![
325
- "Ended" /* Ended */,
326
- "Canceled" /* Canceled */,
327
- "Started" /* Started */
416
+ return resourceType === "event" /* EVENT */ && Boolean(location) && Boolean(dateTime?.dateStatus) && ![
417
+ "Ended" /* ENDED */,
418
+ "Canceled" /* CANCELED */,
419
+ "Started" /* STARTED */
328
420
  ].includes(dateTime.dateStatus);
329
421
  }
330
422
 
@@ -1441,12 +1533,12 @@ function getEventStallholderEmptyMessage(hasAnyStallholdersForEvent, selectedDat
1441
1533
  // src/vendorEvents/vendorEventFilters.ts
1442
1534
  function relationHasSelectedDate(relation, selectedDate) {
1443
1535
  return relation.relationDates?.some(
1444
- (date) => date != null && date.dateTime.startDate === selectedDate
1536
+ (date) => date.dateTime.startDate === selectedDate
1445
1537
  ) ?? false;
1446
1538
  }
1447
1539
  function eventHasSelectedDate(event, selectedDate) {
1448
1540
  return event.relations?.some(
1449
- (relation) => relation != null && relationHasSelectedDate(relation, selectedDate)
1541
+ (relation) => relationHasSelectedDate(relation, selectedDate)
1450
1542
  ) ?? false;
1451
1543
  }
1452
1544
  function filterVendorEventsBySelectedDate(events, selectedDate) {
@@ -1463,14 +1555,11 @@ function collectVendorEventRelationDateTimes(events) {
1463
1555
  return [];
1464
1556
  }
1465
1557
  return events.flatMap(
1466
- (event) => (event.relations ?? []).flatMap((relation) => {
1467
- if (relation == null) {
1468
- return [];
1469
- }
1470
- return (relation.relationDates ?? []).flatMap(
1471
- (relationDate) => relationDate?.dateTime != null ? [relationDate.dateTime] : []
1472
- );
1473
- })
1558
+ (event) => (event.relations ?? []).flatMap(
1559
+ (relation) => (relation.relationDates ?? []).map(
1560
+ (relationDate) => relationDate.dateTime
1561
+ )
1562
+ )
1474
1563
  );
1475
1564
  }
1476
1565
  function getVendorEventRelationStartDates(events) {
@@ -1495,139 +1584,10 @@ function getVendorEventsEmptyMessage() {
1495
1584
  return "No events found.";
1496
1585
  }
1497
1586
 
1498
- // src/utils/affiliate.ts
1499
- var AFFILIATE_PARTICIPANT_TYPE_LABELS = {
1500
- ["INDIVIDUAL" /* Individual */]: "Individual",
1501
- ["SOLE_TRADER" /* SoleTrader */]: "Sole Trader",
1502
- ["COMPANY" /* Company */]: "Company"
1503
- };
1504
- var AFFILIATE_REWARDS = {
1505
- ["NEW_EVENT_REGISTRATION" /* NewEventRegistration */]: {
1506
- description: "10 points for new event registration (one-time reward)",
1507
- value: 10
1508
- },
1509
- ["NEW_VENDOR_REGISTRATION" /* NewVendorRegistration */]: {
1510
- description: "5 points for new vendor registration (one-time reward)",
1511
- value: 5
1512
- },
1513
- ["ACTIVE_VENDOR_PRO_SUBSCRIPTION" /* ActiveVendorProSubscription */]: {
1514
- description: "3 points for active vendor pro subscription (monthly reward)",
1515
- value: 3
1516
- },
1517
- ["ACTIVE_VENDOR_STANDARD_SUBSCRIPTION" /* ActiveVendorStandardSubscription */]: {
1518
- description: "1 point for active vendor standard subscription (monthly reward)",
1519
- value: 1
1520
- },
1521
- ["ACTIVE_VENDOR_BONUS_REWARD" /* ActiveVendorBonusReward */]: {
1522
- description: "5 bonus points for every 10th active vendor (one-time reward)",
1523
- value: 5
1524
- },
1525
- ["ACTIVE_EVENT_WITH_VENDOR_REGISTRATIONS" /* ActiveEventWithVendorRegistrations */]: {
1526
- description: "40 points for active event with vendor registrations (one-time reward)",
1527
- value: 40
1528
- }
1529
- };
1530
- function createAffiliateReward(rewardType, createdAt) {
1531
- const reward = AFFILIATE_REWARDS[rewardType];
1532
- return {
1533
- createdAt,
1534
- redeemedAt: null,
1535
- rewardDescription: reward.description,
1536
- rewardType,
1537
- rewardValue: reward.value
1538
- };
1539
- }
1540
-
1541
- // src/utils/irdNumber.ts
1542
- var PRIMARY_WEIGHTS = [3, 2, 7, 6, 5, 4, 3, 2];
1543
- var SECONDARY_WEIGHTS = [7, 4, 3, 2, 5, 2, 7, 6];
1544
- var IRD_MIN = 1e7;
1545
- var IRD_MAX = 2e8;
1546
- function calculateCheckDigit(baseDigits, weights) {
1547
- const sum = [...baseDigits].reduce(
1548
- (acc, digit, index) => acc + Number(digit) * weights[index],
1549
- 0
1550
- );
1551
- const remainder = sum % 11;
1552
- return remainder === 0 ? 0 : 11 - remainder;
1553
- }
1554
- function normalizeIrdNumber(value) {
1555
- return value.replace(/\D/g, "");
1556
- }
1557
- function formatIrdNumber(input) {
1558
- const digitsOnly = normalizeIrdNumber(input).slice(0, 9);
1559
- const parts = [];
1560
- if (digitsOnly.length > 0) parts.push(digitsOnly.slice(0, 3));
1561
- if (digitsOnly.length > 3) parts.push(digitsOnly.slice(3, 6));
1562
- if (digitsOnly.length > 6) parts.push(digitsOnly.slice(6, 9));
1563
- return parts.join("-");
1564
- }
1565
- function isValidIrdNumber(value) {
1566
- const digits = normalizeIrdNumber(value);
1567
- if (!/^\d{8,9}$/.test(digits)) {
1568
- return false;
1569
- }
1570
- const ird = Number(digits);
1571
- if (ird < IRD_MIN || ird > IRD_MAX) {
1572
- return false;
1573
- }
1574
- const padded = digits.padStart(9, "0");
1575
- const baseDigits = padded.slice(0, -1);
1576
- const checkDigit = Number(padded.slice(-1));
1577
- let calculated = calculateCheckDigit(baseDigits, PRIMARY_WEIGHTS);
1578
- if (calculated === 10) {
1579
- calculated = calculateCheckDigit(baseDigits, SECONDARY_WEIGHTS);
1580
- if (calculated === 10) {
1581
- return false;
1582
- }
1583
- }
1584
- return calculated === checkDigit;
1585
- }
1586
-
1587
- // src/utils/toUserFacingErrorMessage.ts
1588
- var DEFAULT_USER_FACING_ERROR = "Something went wrong. Please try again.";
1589
- var NETWORK_USER_FACING_ERROR = "Unable to connect. Please check your internet connection and try again.";
1590
- var INTERNAL_ERROR_PATTERNS = [
1591
- /connection\s*<monitor>/i,
1592
- /\bmongo/i,
1593
- /\b\d{1,3}(?:\.\d{1,3}){3}(?::\d+)?\b/,
1594
- /\beconn(?:refused|reset|aborted)\b/i,
1595
- /\betimedout\b/i,
1596
- /\benotfound\b/i,
1597
- /\bsocket hang up\b/i,
1598
- /\binternal server error\b/i,
1599
- /received status code 5\d\d/i,
1600
- /\bat\s+\S+\s+\([^)]+:\d+:\d+\)/
1601
- ];
1602
- function isInternalErrorMessage(message) {
1603
- return INTERNAL_ERROR_PATTERNS.some((pattern) => pattern.test(message));
1604
- }
1605
- function toUserFacingErrorMessage(error, fallback = DEFAULT_USER_FACING_ERROR) {
1606
- const message = (error ?? "").trim();
1607
- if (!message) return fallback;
1608
- if (isTransientNetworkError(message)) {
1609
- return NETWORK_USER_FACING_ERROR;
1610
- }
1611
- if (isInternalErrorMessage(message)) {
1612
- return fallback;
1613
- }
1614
- return message;
1615
- }
1616
- function getErrorMessage(error, fallback = DEFAULT_USER_FACING_ERROR) {
1617
- let raw;
1618
- if (error instanceof Error) {
1619
- raw = error.message;
1620
- } else if (typeof error === "string") {
1621
- raw = error;
1622
- }
1623
- return toUserFacingErrorMessage(raw, fallback);
1624
- }
1625
-
1626
1587
  export {
1627
- seededShuffle,
1628
- computeDailyClueState,
1629
1588
  removeTypename,
1630
1589
  truncateText,
1590
+ mapArrayToOptions,
1631
1591
  capitalizeFirstLetter,
1632
1592
  statusOptions,
1633
1593
  availableRegionTypes,
@@ -1645,7 +1605,21 @@ export {
1645
1605
  PostTypeLabels,
1646
1606
  CM_SCHOOL_PROMO_CODE,
1647
1607
  CM_AFFILIATE_PROMO_CODE,
1648
- formatNZBankAccount,
1608
+ dateFormat,
1609
+ timeFormat,
1610
+ toNZTime,
1611
+ nzStartOfDay,
1612
+ formatDate,
1613
+ getCurrentAndFutureDates,
1614
+ isFutureDatesBeforeThreshold,
1615
+ formatTimestamp,
1616
+ isIsoDateString,
1617
+ sortDatesChronologically,
1618
+ futureTimePeriods,
1619
+ seededShuffle,
1620
+ computeDailyClueState,
1621
+ AFFILIATE_REWARDS,
1622
+ createAffiliateReward,
1649
1623
  resolveResourceImageActive,
1650
1624
  normalizeResourceImage,
1651
1625
  isResourceImageActive,
@@ -1690,17 +1664,6 @@ export {
1690
1664
  collectVendorEventRelationDateTimes,
1691
1665
  getVendorEventRelationStartDates,
1692
1666
  getVendorEventRelationDateOptions,
1693
- getVendorEventsEmptyMessage,
1694
- AFFILIATE_PARTICIPANT_TYPE_LABELS,
1695
- AFFILIATE_REWARDS,
1696
- createAffiliateReward,
1697
- normalizeIrdNumber,
1698
- formatIrdNumber,
1699
- isValidIrdNumber,
1700
- DEFAULT_USER_FACING_ERROR,
1701
- NETWORK_USER_FACING_ERROR,
1702
- isInternalErrorMessage,
1703
- toUserFacingErrorMessage,
1704
- getErrorMessage
1667
+ getVendorEventsEmptyMessage
1705
1668
  };
1706
- //# sourceMappingURL=chunk-OHHJ3KJJ.mjs.map
1669
+ //# sourceMappingURL=chunk-TAECMXM4.mjs.map