@timardex/cluemart-server-shared 1.0.302 → 1.0.304
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{chunk-LOZFYYVW.mjs → chunk-GQWLGM2W.mjs} +85 -1
- package/dist/chunk-GQWLGM2W.mjs.map +1 -0
- package/dist/index.cjs +1420 -176
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.mts +6 -39
- package/dist/index.d.ts +6 -39
- package/dist/index.mjs +1418 -173
- package/dist/index.mjs.map +1 -1
- package/dist/mongoose/index.cjs +32 -0
- package/dist/mongoose/index.cjs.map +1 -1
- package/dist/mongoose/index.mjs +1 -1
- package/dist/service/index.cjs +1420 -176
- package/dist/service/index.cjs.map +1 -1
- package/dist/service/index.d.mts +7 -40
- package/dist/service/index.d.ts +7 -40
- package/dist/service/index.mjs +1218 -49
- package/dist/service/index.mjs.map +1 -1
- package/package.json +2 -2
- package/dist/chunk-LOZFYYVW.mjs.map +0 -1
package/dist/index.cjs
CHANGED
|
@@ -31,7 +31,6 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
|
|
|
31
31
|
var index_exports = {};
|
|
32
32
|
__export(index_exports, {
|
|
33
33
|
ACTIVE_NOT_DELETED_FILTER: () => ACTIVE_NOT_DELETED_FILTER,
|
|
34
|
-
AFFILIATE_REWARDS: () => AFFILIATE_REWARDS,
|
|
35
34
|
APP_SETTINGS_ID: () => APP_SETTINGS_ID,
|
|
36
35
|
AdModel: () => AdModel,
|
|
37
36
|
AffiliateModel: () => AffiliateModel,
|
|
@@ -67,13 +66,13 @@ __export(index_exports, {
|
|
|
67
66
|
baseResourceFields: () => baseResourceFields,
|
|
68
67
|
connectToDatabase: () => connectToDatabase,
|
|
69
68
|
convertObjectIdsToStrings: () => convertObjectIdsToStrings,
|
|
70
|
-
createAffiliateReward: () => createAffiliateReward,
|
|
71
69
|
dateTimeSchema: () => dateTimeSchema2,
|
|
72
70
|
didRemoveAnyEventDates: () => didRemoveAnyEventDates,
|
|
73
71
|
express: () => import_express.default,
|
|
74
72
|
findAffiliateByPromoCode: () => findAffiliateByPromoCode,
|
|
75
73
|
findEventOrImportedMarketById: () => findEventOrImportedMarketById,
|
|
76
74
|
getSubscriptionRewardPeriodBounds: () => getSubscriptionRewardPeriodBounds,
|
|
75
|
+
isValidObjectId: () => isValidObjectId,
|
|
77
76
|
locationGeoSchema: () => locationGeoSchema,
|
|
78
77
|
locationsSchema: () => locationsSchema,
|
|
79
78
|
mapVendorLicenceToSubscriptionRewardType: () => mapVendorLicenceToSubscriptionRewardType,
|
|
@@ -7496,6 +7495,38 @@ var REDEEM_AFFILIATE_REWARD_MUTATION = gql`
|
|
|
7496
7495
|
}
|
|
7497
7496
|
${AFFILIATE_FIELDS_FRAGMENT}
|
|
7498
7497
|
`;
|
|
7498
|
+
var ASSIGN_AFFILIATE_RESOURCE_REWARD_MUTATION = gql`
|
|
7499
|
+
mutation assignAffiliateResourceReward(
|
|
7500
|
+
$affiliateId: ID!
|
|
7501
|
+
$resourceId: ID!
|
|
7502
|
+
$resourceType: ResourceTypeEnum!
|
|
7503
|
+
$rewardType: AffiliateRewardEnumType!
|
|
7504
|
+
) {
|
|
7505
|
+
assignAffiliateResourceReward(
|
|
7506
|
+
affiliateId: $affiliateId
|
|
7507
|
+
resourceId: $resourceId
|
|
7508
|
+
resourceType: $resourceType
|
|
7509
|
+
rewardType: $rewardType
|
|
7510
|
+
) {
|
|
7511
|
+
...AffiliateFields
|
|
7512
|
+
}
|
|
7513
|
+
}
|
|
7514
|
+
${AFFILIATE_FIELDS_FRAGMENT}
|
|
7515
|
+
`;
|
|
7516
|
+
var ASSIGN_AFFILIATE_BONUS_REWARD_MUTATION = gql`
|
|
7517
|
+
mutation assignAffiliateBonusReward(
|
|
7518
|
+
$affiliateId: ID!
|
|
7519
|
+
$rewardType: AffiliateRewardEnumType!
|
|
7520
|
+
) {
|
|
7521
|
+
assignAffiliateBonusReward(
|
|
7522
|
+
affiliateId: $affiliateId
|
|
7523
|
+
rewardType: $rewardType
|
|
7524
|
+
) {
|
|
7525
|
+
...AffiliateFields
|
|
7526
|
+
}
|
|
7527
|
+
}
|
|
7528
|
+
${AFFILIATE_FIELDS_FRAGMENT}
|
|
7529
|
+
`;
|
|
7499
7530
|
var PKG = "@timardex/cluemart-shared";
|
|
7500
7531
|
var IMAGE_EXTENSION = ".webp";
|
|
7501
7532
|
var posterIds = [
|
|
@@ -8298,12 +8329,60 @@ schema4.index({ createdAt: -1, userId: 1 });
|
|
|
8298
8329
|
var NotificationModel = import_mongoose8.default.models.Notification || import_mongoose8.default.model("Notification", schema4);
|
|
8299
8330
|
|
|
8300
8331
|
// node_modules/@timardex/cluemart-shared/dist/chunk-X3OLM35T.mjs
|
|
8332
|
+
var EnumInviteStatus2 = /* @__PURE__ */ ((EnumInviteStatus22) => {
|
|
8333
|
+
EnumInviteStatus22["ACCEPTED"] = "Accepted";
|
|
8334
|
+
EnumInviteStatus22["COMPLETED"] = "Completed";
|
|
8335
|
+
EnumInviteStatus22["EXPIRED"] = "Expired";
|
|
8336
|
+
EnumInviteStatus22["NO_STATUS"] = "No_Status";
|
|
8337
|
+
EnumInviteStatus22["PENDING"] = "Pending";
|
|
8338
|
+
EnumInviteStatus22["REJECTED"] = "Rejected";
|
|
8339
|
+
EnumInviteStatus22["UNAVAILABLE"] = "Unavailable";
|
|
8340
|
+
return EnumInviteStatus22;
|
|
8341
|
+
})(EnumInviteStatus2 || {});
|
|
8342
|
+
var EnumPaymentMethod2 = /* @__PURE__ */ ((EnumPaymentMethod22) => {
|
|
8343
|
+
EnumPaymentMethod22["CASH"] = "cash";
|
|
8344
|
+
EnumPaymentMethod22["EFTPOS"] = "eftpos";
|
|
8345
|
+
EnumPaymentMethod22["BANK_TRANSFER"] = "bank_transfer";
|
|
8346
|
+
EnumPaymentMethod22["PAYPAL"] = "paypal";
|
|
8347
|
+
EnumPaymentMethod22["STRIPE"] = "stripe";
|
|
8348
|
+
return EnumPaymentMethod22;
|
|
8349
|
+
})(EnumPaymentMethod2 || {});
|
|
8301
8350
|
var EnumOSPlatform2 = /* @__PURE__ */ ((EnumOSPlatform22) => {
|
|
8302
8351
|
EnumOSPlatform22["ANDROID"] = "android";
|
|
8303
8352
|
EnumOSPlatform22["IOS"] = "ios";
|
|
8304
8353
|
EnumOSPlatform22["WEB"] = "web";
|
|
8305
8354
|
return EnumOSPlatform22;
|
|
8306
8355
|
})(EnumOSPlatform2 || {});
|
|
8356
|
+
var EnumRegions2 = /* @__PURE__ */ ((EnumRegions22) => {
|
|
8357
|
+
EnumRegions22["All"] = "All Regions";
|
|
8358
|
+
EnumRegions22["Auckland"] = "Auckland";
|
|
8359
|
+
EnumRegions22["BayOfPlentyGisborne"] = "Bay of Plenty & Gisborne";
|
|
8360
|
+
EnumRegions22["CanterburyWestCoast"] = "Canterbury & West Coast";
|
|
8361
|
+
EnumRegions22["HawkesBay"] = "Hawke's Bay";
|
|
8362
|
+
EnumRegions22["ManawatuWanganui"] = "Manawatu-Wanganui";
|
|
8363
|
+
EnumRegions22["MarlboroughNelsonTasman"] = "Marlborough & Nelson & Tasman";
|
|
8364
|
+
EnumRegions22["Northland"] = "Northland";
|
|
8365
|
+
EnumRegions22["Otago"] = "Otago";
|
|
8366
|
+
EnumRegions22["Southland"] = "Southland";
|
|
8367
|
+
EnumRegions22["Taranaki"] = "Taranaki";
|
|
8368
|
+
EnumRegions22["Waikato"] = "Waikato";
|
|
8369
|
+
EnumRegions22["Wellington"] = "Wellington";
|
|
8370
|
+
return EnumRegions22;
|
|
8371
|
+
})(EnumRegions2 || {});
|
|
8372
|
+
var EnumEventDateStatus2 = /* @__PURE__ */ ((EnumEventDateStatus22) => {
|
|
8373
|
+
EnumEventDateStatus22["STARTING_SOON"] = "Starting_Soon";
|
|
8374
|
+
EnumEventDateStatus22["STARTED"] = "Started";
|
|
8375
|
+
EnumEventDateStatus22["TODAY"] = "Today";
|
|
8376
|
+
EnumEventDateStatus22["TOMORROW"] = "Tomorrow";
|
|
8377
|
+
EnumEventDateStatus22["THIS_WEEK"] = "This_Week";
|
|
8378
|
+
EnumEventDateStatus22["NEXT_WEEK"] = "Next_Week";
|
|
8379
|
+
EnumEventDateStatus22["UPCOMING"] = "Upcoming";
|
|
8380
|
+
EnumEventDateStatus22["ENDED"] = "Ended";
|
|
8381
|
+
EnumEventDateStatus22["RE_SCHEDULED"] = "Rescheduled";
|
|
8382
|
+
EnumEventDateStatus22["CANCELED"] = "Canceled";
|
|
8383
|
+
EnumEventDateStatus22["INVALID"] = "Invalid";
|
|
8384
|
+
return EnumEventDateStatus22;
|
|
8385
|
+
})(EnumEventDateStatus2 || {});
|
|
8307
8386
|
|
|
8308
8387
|
// src/mongoose/PushToken.ts
|
|
8309
8388
|
var import_mongoose9 = __toESM(require("mongoose"));
|
|
@@ -9279,176 +9358,1200 @@ async function activeAffiliateCodeExists(affiliateCode) {
|
|
|
9279
9358
|
return existing !== null;
|
|
9280
9359
|
}
|
|
9281
9360
|
|
|
9282
|
-
//
|
|
9283
|
-
|
|
9284
|
-
|
|
9285
|
-
|
|
9286
|
-
|
|
9287
|
-
|
|
9288
|
-
|
|
9289
|
-
|
|
9290
|
-
|
|
9291
|
-
|
|
9292
|
-
|
|
9293
|
-
|
|
9294
|
-
|
|
9295
|
-
|
|
9296
|
-
|
|
9297
|
-
|
|
9298
|
-
|
|
9299
|
-
|
|
9300
|
-
|
|
9301
|
-
|
|
9302
|
-
|
|
9303
|
-
|
|
9304
|
-
|
|
9305
|
-
|
|
9306
|
-
|
|
9307
|
-
|
|
9308
|
-
|
|
9309
|
-
|
|
9310
|
-
|
|
9311
|
-
|
|
9312
|
-
|
|
9313
|
-
var
|
|
9314
|
-
var
|
|
9315
|
-
|
|
9316
|
-
|
|
9317
|
-
}
|
|
9318
|
-
|
|
9319
|
-
|
|
9320
|
-
|
|
9321
|
-
|
|
9322
|
-
|
|
9323
|
-
|
|
9324
|
-
|
|
9325
|
-
|
|
9326
|
-
|
|
9327
|
-
|
|
9328
|
-
|
|
9329
|
-
|
|
9330
|
-
|
|
9331
|
-
|
|
9332
|
-
|
|
9333
|
-
|
|
9334
|
-
|
|
9335
|
-
|
|
9336
|
-
to: token
|
|
9337
|
-
});
|
|
9338
|
-
}
|
|
9339
|
-
return { invalidTokens, messages };
|
|
9340
|
-
}
|
|
9341
|
-
function processChunkResults(tickets, chunk) {
|
|
9342
|
-
let successCount = 0;
|
|
9343
|
-
const failedTokens = [];
|
|
9344
|
-
for (const [ticketIndex, ticket] of tickets.entries()) {
|
|
9345
|
-
if (ticket.status === "error") {
|
|
9346
|
-
const message = chunk[ticketIndex];
|
|
9347
|
-
if (message) {
|
|
9348
|
-
const tokens = extractTokensFromMessage(message);
|
|
9349
|
-
if (ticket.details?.error === "DeviceNotRegistered") {
|
|
9350
|
-
failedTokens.push(...tokens);
|
|
9351
|
-
}
|
|
9352
|
-
console.log("Push notification error", {
|
|
9353
|
-
error: ticket.details?.error,
|
|
9354
|
-
tokens
|
|
9355
|
-
});
|
|
9356
|
-
}
|
|
9357
|
-
} else {
|
|
9358
|
-
successCount++;
|
|
9359
|
-
}
|
|
9360
|
-
}
|
|
9361
|
-
return { failedTokens, successCount };
|
|
9362
|
-
}
|
|
9363
|
-
async function sendChunk(chunk, chunkIndex) {
|
|
9364
|
-
try {
|
|
9365
|
-
const tickets = await expo.sendPushNotificationsAsync(chunk);
|
|
9366
|
-
const { successCount, failedTokens } = processChunkResults(tickets, chunk);
|
|
9367
|
-
console.log(
|
|
9368
|
-
`Chunk ${chunkIndex + 1}: Sent ${successCount}/${chunk.length} notifications successfully`
|
|
9369
|
-
);
|
|
9370
|
-
return { failedTokens, successCount };
|
|
9371
|
-
} catch (error) {
|
|
9372
|
-
console.log("Error sending Expo push notification chunk", {
|
|
9373
|
-
chunkIndex,
|
|
9374
|
-
chunkSize: chunk.length,
|
|
9375
|
-
error: error instanceof Error ? error.message : String(error)
|
|
9376
|
-
});
|
|
9377
|
-
return { failedTokens: [], successCount: 0 };
|
|
9378
|
-
}
|
|
9379
|
-
}
|
|
9380
|
-
async function sendPushNotifications({
|
|
9381
|
-
data,
|
|
9382
|
-
message,
|
|
9383
|
-
title,
|
|
9384
|
-
userIds
|
|
9385
|
-
}) {
|
|
9386
|
-
const pushTokens = await PushTokenModel.find({ userId: { $in: userIds } });
|
|
9387
|
-
const expoTokens = pushTokens.map((token) => token.token);
|
|
9388
|
-
if (!data) return;
|
|
9389
|
-
const { messages, invalidTokens } = createPushMessages({
|
|
9390
|
-
data,
|
|
9391
|
-
message,
|
|
9392
|
-
title,
|
|
9393
|
-
tokens: expoTokens
|
|
9394
|
-
});
|
|
9395
|
-
if (invalidTokens.length > 0) {
|
|
9396
|
-
console.log(`Found ${invalidTokens.length} invalid push tokens`);
|
|
9397
|
-
}
|
|
9398
|
-
if (messages.length === 0) {
|
|
9399
|
-
console.log("No valid messages to send after filtering tokens");
|
|
9400
|
-
return;
|
|
9401
|
-
}
|
|
9402
|
-
const chunks = expo.chunkPushNotifications(messages);
|
|
9403
|
-
let totalSuccessCount = 0;
|
|
9404
|
-
const allFailedTokens = [];
|
|
9405
|
-
for (const [chunkIndex, chunk] of chunks.entries()) {
|
|
9406
|
-
const { successCount, failedTokens } = await sendChunk(
|
|
9407
|
-
chunk,
|
|
9408
|
-
chunkIndex + 1
|
|
9409
|
-
);
|
|
9410
|
-
totalSuccessCount += successCount;
|
|
9411
|
-
allFailedTokens.push(...failedTokens);
|
|
9412
|
-
}
|
|
9413
|
-
console.log(
|
|
9414
|
-
`Sent push notification to ${totalSuccessCount}/${messages.length} tokens across ${chunks.length} chunks`
|
|
9415
|
-
);
|
|
9416
|
-
if (allFailedTokens.length > 0) {
|
|
9417
|
-
console.log(`Found ${allFailedTokens.length} failed push tokens`);
|
|
9418
|
-
}
|
|
9419
|
-
}
|
|
9361
|
+
// node_modules/@timardex/cluemart-shared/dist/chunk-SWWVD4J5.mjs
|
|
9362
|
+
var import_dayjs3 = __toESM(require("dayjs"), 1);
|
|
9363
|
+
var import_customParseFormat2 = __toESM(require("dayjs/plugin/customParseFormat.js"), 1);
|
|
9364
|
+
var import_isSameOrAfter2 = __toESM(require("dayjs/plugin/isSameOrAfter.js"), 1);
|
|
9365
|
+
var import_timezone2 = __toESM(require("dayjs/plugin/timezone.js"), 1);
|
|
9366
|
+
var import_utc2 = __toESM(require("dayjs/plugin/utc.js"), 1);
|
|
9367
|
+
var mapArrayToOptions2 = (items) => items.map((item) => ({
|
|
9368
|
+
label: item,
|
|
9369
|
+
value: item
|
|
9370
|
+
}));
|
|
9371
|
+
import_dayjs3.default.extend(import_customParseFormat2.default);
|
|
9372
|
+
import_dayjs3.default.extend(import_utc2.default);
|
|
9373
|
+
import_dayjs3.default.extend(import_timezone2.default);
|
|
9374
|
+
import_dayjs3.default.extend(import_isSameOrAfter2.default);
|
|
9375
|
+
var futureTimePeriods2 = mapArrayToOptions2(
|
|
9376
|
+
Object.values(EnumEventDateStatus2)
|
|
9377
|
+
).filter(
|
|
9378
|
+
(period) => period.value !== "Starting_Soon" && period.value !== "Canceled" && period.value !== "Rescheduled" && period.value !== "Started" && period.value !== "Ended" && period.value !== "Invalid"
|
|
9379
|
+
/* INVALID */
|
|
9380
|
+
).map((period) => ({
|
|
9381
|
+
label: period.value.replaceAll("_", " "),
|
|
9382
|
+
value: period.value
|
|
9383
|
+
}));
|
|
9384
|
+
var RELATION_SHARE_INVITATION2 = "invitation";
|
|
9385
|
+
var RELATION_SHARE_APPLICATION2 = "application";
|
|
9386
|
+
var SHARE_SITE_URL2 = "https://cluemart.co.nz";
|
|
9387
|
+
var SHARE_CALENDAR_ICON2 = "\u{1F4C5}";
|
|
9388
|
+
var SHARE_MARKET_DATES_SECTION_HEADING2 = `${SHARE_CALENDAR_ICON2} Market dates:`;
|
|
9389
|
+
var SHARE_CHECKMARK_ICON2 = "\u2705";
|
|
9390
|
+
var SHARE_REQUIREMENTS_SECTION_HEADING2 = `${SHARE_CHECKMARK_ICON2} Requirements:`;
|
|
9391
|
+
var SHARE_INFO_ICON2 = "\u2139\uFE0F";
|
|
9392
|
+
var SHARE_TAGS_SECTION_HEADING2 = `${SHARE_INFO_ICON2} Tags:`;
|
|
9393
|
+
var SHARE_COMPLIANCE_PREFIX2 = `${SHARE_CHECKMARK_ICON2} Compliance:`;
|
|
9394
|
+
var SHARE_CATEGORY_ICON2 = "\u{1F3F7}\uFE0F";
|
|
9395
|
+
var SHARE_CATEGORIES_SECTION_HEADING2 = `${SHARE_CATEGORY_ICON2} Categories:`;
|
|
9396
|
+
var SHARE_RULER_ICON2 = "\u{1F4CF}";
|
|
9397
|
+
var SHARE_STALL_SIZE_PREFIX2 = `${SHARE_RULER_ICON2} Stall size:`;
|
|
9398
|
+
var SHARE_DOLLAR_ICON2 = "$";
|
|
9399
|
+
var SHARE_PRICE_RANGE_PREFIX2 = `${SHARE_DOLLAR_ICON2} Price range:`;
|
|
9400
|
+
var SHARE_CLOCK_ICON2 = "\u23F0";
|
|
9401
|
+
var SHARE_APPLICATION_DEADLINE_PREFIX2 = `${SHARE_CLOCK_ICON2} Application deadline:`;
|
|
9402
|
+
var DEFAULT_SHARE_OG_IMAGE2 = `${SHARE_SITE_URL2}/assets/logo.webp`;
|
|
9403
|
+
var SHARE_RESOURCE_LABEL2 = {
|
|
9404
|
+
[RELATION_SHARE_APPLICATION2]: "Application",
|
|
9405
|
+
[RELATION_SHARE_INVITATION2]: "Invitation",
|
|
9406
|
+
clue_bites: "Clue Bites",
|
|
9407
|
+
market_faces: "Market Faces",
|
|
9408
|
+
play_and_win: "Play & Win",
|
|
9409
|
+
market: "Market",
|
|
9410
|
+
partner: "Partner",
|
|
9411
|
+
stallholder: "Stallholder",
|
|
9412
|
+
affiliate: "Affiliate",
|
|
9413
|
+
school: "School"
|
|
9414
|
+
};
|
|
9420
9415
|
|
|
9421
|
-
//
|
|
9422
|
-
var
|
|
9423
|
-
|
|
9424
|
-
|
|
9425
|
-
|
|
9416
|
+
// node_modules/@timardex/cluemart-shared/dist/chunk-43SLZVBF.mjs
|
|
9417
|
+
var PROMO_CODE_PREFIX2 = "CM-";
|
|
9418
|
+
var OBJECT_ID_PATH_SEGMENT2 = "[a-f0-9]{24}";
|
|
9419
|
+
var OBJECT_ID_PATH_SEGMENT_END2 = `${OBJECT_ID_PATH_SEGMENT2}$`;
|
|
9420
|
+
var gameScreenIdentifierList2 = [
|
|
9421
|
+
{
|
|
9422
|
+
clue: "Where your actions turn into a timeline.",
|
|
9423
|
+
id: "activities",
|
|
9424
|
+
match: "/profile/activities"
|
|
9426
9425
|
},
|
|
9427
|
-
|
|
9428
|
-
|
|
9429
|
-
|
|
9426
|
+
{
|
|
9427
|
+
clue: "Where conversations happen without speaking.",
|
|
9428
|
+
id: "chat",
|
|
9429
|
+
match: "/profile/chat"
|
|
9430
9430
|
},
|
|
9431
|
-
|
|
9432
|
-
|
|
9433
|
-
|
|
9431
|
+
{
|
|
9432
|
+
clue: "The place to redefine who you are.",
|
|
9433
|
+
id: "edit-profile",
|
|
9434
|
+
match: "/profile/edit-profile"
|
|
9434
9435
|
},
|
|
9435
|
-
|
|
9436
|
-
|
|
9437
|
-
|
|
9436
|
+
{
|
|
9437
|
+
clue: "A single moment worth showing up for.",
|
|
9438
|
+
id: "single-event",
|
|
9439
|
+
match: new RegExp(`^/events/${OBJECT_ID_PATH_SEGMENT_END2}`)
|
|
9438
9440
|
},
|
|
9439
|
-
|
|
9440
|
-
|
|
9441
|
-
|
|
9441
|
+
{
|
|
9442
|
+
clue: "What\u2019s happening around you, right now.",
|
|
9443
|
+
id: "events-near-me",
|
|
9444
|
+
match: "/events/events-near-me"
|
|
9442
9445
|
},
|
|
9443
|
-
|
|
9444
|
-
|
|
9445
|
-
|
|
9446
|
-
|
|
9447
|
-
}
|
|
9448
|
-
|
|
9449
|
-
|
|
9450
|
-
|
|
9451
|
-
|
|
9446
|
+
{
|
|
9447
|
+
clue: "Where events appear as pins on a map.",
|
|
9448
|
+
id: "events-map",
|
|
9449
|
+
match: "/events/events-map"
|
|
9450
|
+
},
|
|
9451
|
+
{
|
|
9452
|
+
clue: "A collection of events worth attending.",
|
|
9453
|
+
id: "events",
|
|
9454
|
+
match: "/events"
|
|
9455
|
+
},
|
|
9456
|
+
{
|
|
9457
|
+
clue: "What\u2019s happening in a wider area \u2014 not just nearby.",
|
|
9458
|
+
id: "events-region",
|
|
9459
|
+
match: /^\/events\/region\/[^/]+$/
|
|
9460
|
+
},
|
|
9461
|
+
{
|
|
9462
|
+
clue: "Where fun becomes a challenge.",
|
|
9463
|
+
id: "games",
|
|
9464
|
+
match: "/games"
|
|
9465
|
+
},
|
|
9466
|
+
{
|
|
9467
|
+
clue: "Your starting point for everything.",
|
|
9468
|
+
id: "home",
|
|
9469
|
+
match: "/"
|
|
9470
|
+
},
|
|
9471
|
+
{
|
|
9472
|
+
clue: "Where the app whispers what you shouldn\u2019t miss.",
|
|
9473
|
+
id: "notifications",
|
|
9474
|
+
match: "/notifications"
|
|
9475
|
+
},
|
|
9476
|
+
{
|
|
9477
|
+
clue: "Where you fine-tune your experience.",
|
|
9478
|
+
id: "options",
|
|
9479
|
+
match: "/options"
|
|
9480
|
+
},
|
|
9481
|
+
{
|
|
9482
|
+
clue: "An organisation or creator supporting the community.",
|
|
9483
|
+
id: "single-partner",
|
|
9484
|
+
match: new RegExp(`^/partners/${OBJECT_ID_PATH_SEGMENT_END2}`)
|
|
9485
|
+
},
|
|
9486
|
+
{
|
|
9487
|
+
clue: "Organisations and creators supporting the community.",
|
|
9488
|
+
id: "partners",
|
|
9489
|
+
match: "/partners"
|
|
9490
|
+
},
|
|
9491
|
+
{
|
|
9492
|
+
clue: "A single published post in full view.",
|
|
9493
|
+
id: "single-visitor-post",
|
|
9494
|
+
match: new RegExp(`^/visitors/post/${OBJECT_ID_PATH_SEGMENT_END2}`)
|
|
9495
|
+
},
|
|
9496
|
+
{
|
|
9497
|
+
clue: "Your identity, on display.",
|
|
9498
|
+
id: "profile",
|
|
9499
|
+
match: "/profile"
|
|
9500
|
+
},
|
|
9501
|
+
{
|
|
9502
|
+
clue: "One stallholder offering something valuable.",
|
|
9503
|
+
id: "single-vendor",
|
|
9504
|
+
match: new RegExp(`^/vendors/${OBJECT_ID_PATH_SEGMENT_END2}`)
|
|
9505
|
+
},
|
|
9506
|
+
{
|
|
9507
|
+
clue: "Where every stallholder waits under the right category.",
|
|
9508
|
+
id: "vendors",
|
|
9509
|
+
match: "/vendors"
|
|
9510
|
+
},
|
|
9511
|
+
{
|
|
9512
|
+
clue: "Where you browse articles and posts from around the platform.",
|
|
9513
|
+
id: "visitors",
|
|
9514
|
+
match: "/visitors"
|
|
9515
|
+
}
|
|
9516
|
+
];
|
|
9517
|
+
|
|
9518
|
+
// node_modules/@timardex/cluemart-shared/dist/chunk-MLNJAQVM.mjs
|
|
9519
|
+
var import_dayjs4 = __toESM(require("dayjs"), 1);
|
|
9520
|
+
var statusOptions2 = [
|
|
9521
|
+
...Object.values(EnumInviteStatus2).map((status) => ({
|
|
9522
|
+
label: status,
|
|
9523
|
+
value: status
|
|
9524
|
+
})).sort((a, b) => a.label.localeCompare(b.label))
|
|
9525
|
+
// Sort the options alphabetically
|
|
9526
|
+
];
|
|
9527
|
+
var availableRegionTypes2 = Object.values(EnumRegions2);
|
|
9528
|
+
var availableRegionOptions2 = mapArrayToOptions2(availableRegionTypes2);
|
|
9529
|
+
var paymentMethodOptions2 = mapArrayToOptions2(
|
|
9530
|
+
Object.values(EnumPaymentMethod2)
|
|
9531
|
+
);
|
|
9532
|
+
var CM_SCHOOL_PROMO_CODE2 = `${PROMO_CODE_PREFIX2}SCHOOL`;
|
|
9533
|
+
var CM_AFFILIATE_PROMO_CODE2 = `${PROMO_CODE_PREFIX2}AFFILIATE`;
|
|
9534
|
+
var clothingAndFashion2 = [
|
|
9535
|
+
{
|
|
9536
|
+
id: "clothing-fashion",
|
|
9537
|
+
name: "Clothing & Fashion",
|
|
9538
|
+
description: "New, handmade, or upcycled clothing and accessories with a creative twist.",
|
|
9539
|
+
subcategories: [
|
|
9540
|
+
{
|
|
9541
|
+
id: "apparel-babywear",
|
|
9542
|
+
name: "Apparel & Babywear",
|
|
9543
|
+
items: [
|
|
9544
|
+
{
|
|
9545
|
+
id: "apparel",
|
|
9546
|
+
name: "Apparel",
|
|
9547
|
+
description: "Dresses, t-shirts, jumpers, rompers, sets, kidswear."
|
|
9548
|
+
},
|
|
9549
|
+
{
|
|
9550
|
+
id: "baby-toddler-apparel",
|
|
9551
|
+
name: "Baby & Toddler Apparel",
|
|
9552
|
+
description: "Handmade baby clothes, soft shoes, bibs, hats, knitted sets."
|
|
9553
|
+
},
|
|
9554
|
+
{
|
|
9555
|
+
id: "upcycled-fashion",
|
|
9556
|
+
name: "Upcycled Fashion",
|
|
9557
|
+
description: "Reworked garments, patchwork pieces, restyled vintage."
|
|
9558
|
+
},
|
|
9559
|
+
{
|
|
9560
|
+
id: "other-wearable-items",
|
|
9561
|
+
name: "Other wearable items",
|
|
9562
|
+
description: "Unique clothing not listed above."
|
|
9563
|
+
}
|
|
9564
|
+
]
|
|
9565
|
+
},
|
|
9566
|
+
{
|
|
9567
|
+
id: "fashion-accessories",
|
|
9568
|
+
name: "Fashion Accessories",
|
|
9569
|
+
items: [
|
|
9570
|
+
{
|
|
9571
|
+
id: "accessories",
|
|
9572
|
+
name: "Accessories",
|
|
9573
|
+
description: "Scarves, belts, gloves, hats, headbands, caps."
|
|
9574
|
+
},
|
|
9575
|
+
{
|
|
9576
|
+
id: "shoes",
|
|
9577
|
+
name: "Shoes",
|
|
9578
|
+
description: "Handmade shoes, baby booties, sandals, slippers."
|
|
9579
|
+
},
|
|
9580
|
+
{
|
|
9581
|
+
id: "bags-wallets",
|
|
9582
|
+
name: "Bags & Wallets",
|
|
9583
|
+
description: "Leather bags, fabric purses, wallets, backpacks, totes."
|
|
9584
|
+
},
|
|
9585
|
+
{
|
|
9586
|
+
id: "other-accessories",
|
|
9587
|
+
name: "Other accessories",
|
|
9588
|
+
description: "Brooches, pins, or hybrid functional items."
|
|
9589
|
+
}
|
|
9590
|
+
]
|
|
9591
|
+
},
|
|
9592
|
+
{
|
|
9593
|
+
id: "jewelry-creative-wearables",
|
|
9594
|
+
name: "Jewelry & Creative Wearables",
|
|
9595
|
+
items: [
|
|
9596
|
+
{
|
|
9597
|
+
id: "jewelry",
|
|
9598
|
+
name: "Jewelry",
|
|
9599
|
+
description: "Necklaces, earrings, bracelets, rings, anklets."
|
|
9600
|
+
},
|
|
9601
|
+
{
|
|
9602
|
+
id: "other-creative-wearables",
|
|
9603
|
+
name: "Other creative wearables",
|
|
9604
|
+
description: "Wearable art, statement pieces, bold handmade designs."
|
|
9605
|
+
}
|
|
9606
|
+
]
|
|
9607
|
+
},
|
|
9608
|
+
{
|
|
9609
|
+
id: "traditional-cultural-clothing-accessories",
|
|
9610
|
+
name: "Traditional & Cultural Clothing and Accessories",
|
|
9611
|
+
items: [
|
|
9612
|
+
{
|
|
9613
|
+
id: "traditional-clothing-accessories",
|
|
9614
|
+
name: "Traditional Clothing & Accessories ",
|
|
9615
|
+
description: "raditional clothing, jewellery, accessories and footwear from around the world, including both handmade and non-handmade items."
|
|
9616
|
+
},
|
|
9617
|
+
{
|
|
9618
|
+
id: "other-traditional-cultural-items",
|
|
9619
|
+
name: "Other Traditional & Cultural Items",
|
|
9620
|
+
description: "traditional or culturally inspired wearables and decorative cultural pieces such as plates, table linens and similar items."
|
|
9621
|
+
}
|
|
9622
|
+
]
|
|
9623
|
+
}
|
|
9624
|
+
]
|
|
9625
|
+
}
|
|
9626
|
+
];
|
|
9627
|
+
var electronicsAndTechnology2 = [
|
|
9628
|
+
{
|
|
9629
|
+
id: "electronics-technology",
|
|
9630
|
+
name: "Electronics & Technology",
|
|
9631
|
+
description: "New, second-hand, or handmade tech and digital items commonly found at markets.",
|
|
9632
|
+
subcategories: [
|
|
9633
|
+
{
|
|
9634
|
+
id: "mobile-everyday-tech",
|
|
9635
|
+
name: "Mobile & Everyday Tech",
|
|
9636
|
+
items: [
|
|
9637
|
+
{
|
|
9638
|
+
id: "mobile-phone-accessories",
|
|
9639
|
+
name: "Mobile & Phone Accessories",
|
|
9640
|
+
description: "Phone cases, holders, screen protectors, charging cables, power banks, grips."
|
|
9641
|
+
},
|
|
9642
|
+
{
|
|
9643
|
+
id: "other-mobile-gadgets",
|
|
9644
|
+
name: "Other mobile gadgets",
|
|
9645
|
+
description: "Stands, styluses, SIM tools, cleaning kits, wallet accessories."
|
|
9646
|
+
}
|
|
9647
|
+
]
|
|
9648
|
+
},
|
|
9649
|
+
{
|
|
9650
|
+
id: "audio-music-creative-tech",
|
|
9651
|
+
name: "Audio, Music & Creative Tech",
|
|
9652
|
+
items: [
|
|
9653
|
+
{
|
|
9654
|
+
id: "audio-music-tech",
|
|
9655
|
+
name: "Audio & Music Tech",
|
|
9656
|
+
description: "Portable speakers, headphones, mini radios, Bluetooth adapters, sound accessories."
|
|
9657
|
+
},
|
|
9658
|
+
{
|
|
9659
|
+
id: "instruments-music-gear",
|
|
9660
|
+
name: "Instruments & Music Gear",
|
|
9661
|
+
description: "Small electronic instruments, DIY synth kits, drum pads, loop machines."
|
|
9662
|
+
},
|
|
9663
|
+
{
|
|
9664
|
+
id: "recording-creative-devices",
|
|
9665
|
+
name: "Recording & Creative Devices",
|
|
9666
|
+
description: "USB microphones, podcast tools, voice recorders, mobile lighting, content tools."
|
|
9667
|
+
},
|
|
9668
|
+
{
|
|
9669
|
+
id: "other-audio-music-items",
|
|
9670
|
+
name: "Other audio or music-related items",
|
|
9671
|
+
description: "Musical gadgets or creative gear not listed above."
|
|
9672
|
+
}
|
|
9673
|
+
]
|
|
9674
|
+
},
|
|
9675
|
+
{
|
|
9676
|
+
id: "diy-gadgets-secondhand-finds",
|
|
9677
|
+
name: "DIY, Gadgets & Second-Hand Finds",
|
|
9678
|
+
items: [
|
|
9679
|
+
{
|
|
9680
|
+
id: "diy-electronics-tools",
|
|
9681
|
+
name: "DIY Electronics & Tools",
|
|
9682
|
+
description: "LED lights, USB gadgets, circuit boards, repair kits, tech-themed toys, novelty items."
|
|
9683
|
+
},
|
|
9684
|
+
{
|
|
9685
|
+
id: "other-tech-finds",
|
|
9686
|
+
name: "Other Tech Finds",
|
|
9687
|
+
description: "Used electronics, smart gadgets, wearable tech, calculators, tablet stands, e-waste upcycles."
|
|
9688
|
+
},
|
|
9689
|
+
{
|
|
9690
|
+
id: "other-technology-innovation-items",
|
|
9691
|
+
name: "Other technology or innovation-related items",
|
|
9692
|
+
description: "Anything not covered but clearly tech-driven."
|
|
9693
|
+
}
|
|
9694
|
+
]
|
|
9695
|
+
}
|
|
9696
|
+
]
|
|
9697
|
+
}
|
|
9698
|
+
];
|
|
9699
|
+
var foodAndBeverages2 = [
|
|
9700
|
+
{
|
|
9701
|
+
id: "food-beverages",
|
|
9702
|
+
name: "Food & Beverages",
|
|
9703
|
+
description: "Fresh produce, drinks, sweet and savoury street food, ready-to-eat meals, and packaged goods.",
|
|
9704
|
+
subcategories: [
|
|
9705
|
+
{
|
|
9706
|
+
id: "fresh-food-groceries",
|
|
9707
|
+
name: "Fresh Food & Groceries",
|
|
9708
|
+
items: [
|
|
9709
|
+
{
|
|
9710
|
+
id: "fruits-vegetables",
|
|
9711
|
+
name: "Fruits & Vegetables",
|
|
9712
|
+
description: "Fresh seasonal fruit, organic vegetables, specialty produce, berries, tropical fruit, heritage varieties."
|
|
9713
|
+
},
|
|
9714
|
+
{
|
|
9715
|
+
id: "meat-seafood",
|
|
9716
|
+
name: "Meat & Seafood",
|
|
9717
|
+
description: "Butcher cuts, fresh fish, smoked meats, sausages, seafood platters, artisanal jerky."
|
|
9718
|
+
},
|
|
9719
|
+
{
|
|
9720
|
+
id: "dairy-eggs",
|
|
9721
|
+
name: "Dairy & Eggs",
|
|
9722
|
+
description: "Farm eggs, handmade cheeses, yoghurt, fresh milk, goat\u2019s milk products."
|
|
9723
|
+
},
|
|
9724
|
+
{
|
|
9725
|
+
id: "bakery-pastries",
|
|
9726
|
+
name: "Bakery & Pastries",
|
|
9727
|
+
description: "Freshly baked bread, sourdough, bagels, croissants, focaccia, traditional baked goods."
|
|
9728
|
+
},
|
|
9729
|
+
{
|
|
9730
|
+
id: "spices-condiments",
|
|
9731
|
+
name: "Spices & Condiments",
|
|
9732
|
+
description: "Dried herbs, spice blends, specialty salts, hot sauces, infused oils, chutneys."
|
|
9733
|
+
},
|
|
9734
|
+
{
|
|
9735
|
+
id: "packaged-specialty-foods",
|
|
9736
|
+
name: "Packaged & Specialty Foods",
|
|
9737
|
+
description: "Honey, jams, preserves, pickles, nut butters, sauces, pre-packaged snacks."
|
|
9738
|
+
},
|
|
9739
|
+
{
|
|
9740
|
+
id: "other-fresh-food-items",
|
|
9741
|
+
name: "Other fresh food items",
|
|
9742
|
+
description: "Items that don\u2019t fit above, e.g. fermented foods, plant-based substitutes."
|
|
9743
|
+
}
|
|
9744
|
+
]
|
|
9745
|
+
},
|
|
9746
|
+
{
|
|
9747
|
+
id: "beverages-specialty-drinks",
|
|
9748
|
+
name: "Beverages & Specialty Drinks",
|
|
9749
|
+
items: [
|
|
9750
|
+
{
|
|
9751
|
+
id: "fresh-juices-smoothies",
|
|
9752
|
+
name: "Fresh Juices & Smoothies",
|
|
9753
|
+
description: "Cold-pressed juices, detox blends, fruit smoothies, tropical mixes."
|
|
9754
|
+
},
|
|
9755
|
+
{
|
|
9756
|
+
id: "coffee-teas",
|
|
9757
|
+
name: "Coffee & Teas",
|
|
9758
|
+
description: "Espresso, pour-over coffee, herbal teas, matcha, bubble tea, locally blended tea."
|
|
9759
|
+
},
|
|
9760
|
+
{
|
|
9761
|
+
id: "dairy-plant-based-drinks",
|
|
9762
|
+
name: "Dairy & Plant-Based Drinks",
|
|
9763
|
+
description: "Milkshakes, lassis, almond/oat milk drinks, coconut water."
|
|
9764
|
+
},
|
|
9765
|
+
{
|
|
9766
|
+
id: "alcoholic-beverages",
|
|
9767
|
+
name: "Alcoholic Beverages",
|
|
9768
|
+
description: "Local wines, craft beer, mead, cider, infused spirits, cocktail kits."
|
|
9769
|
+
},
|
|
9770
|
+
{
|
|
9771
|
+
id: "other-beverages",
|
|
9772
|
+
name: "Other beverages",
|
|
9773
|
+
description: "Kombucha, kefir, energy drinks, non-alcoholic wines or beers."
|
|
9774
|
+
}
|
|
9775
|
+
]
|
|
9776
|
+
},
|
|
9777
|
+
{
|
|
9778
|
+
id: "savoury-prepared-foods-street-food",
|
|
9779
|
+
name: "Savoury Prepared Foods & Street Food",
|
|
9780
|
+
items: [
|
|
9781
|
+
{
|
|
9782
|
+
id: "local-specialties",
|
|
9783
|
+
name: "Local Specialties",
|
|
9784
|
+
description: "Meat pies, hangi, seafood chowder, fry bread, traditional NZ dishes."
|
|
9785
|
+
},
|
|
9786
|
+
{
|
|
9787
|
+
id: "asian-cuisine",
|
|
9788
|
+
name: "Asian Cuisine",
|
|
9789
|
+
description: "Sushi, bao buns, dumplings, ramen, satay, spring rolls, fried rice."
|
|
9790
|
+
},
|
|
9791
|
+
{
|
|
9792
|
+
id: "mediterranean-cuisine",
|
|
9793
|
+
name: "Mediterranean Cuisine",
|
|
9794
|
+
description: "Falafel, hummus wraps, souvlaki, Greek salad, dolma."
|
|
9795
|
+
},
|
|
9796
|
+
{
|
|
9797
|
+
id: "italian-delights",
|
|
9798
|
+
name: "Italian Delights",
|
|
9799
|
+
description: "Pizza, calzone, focaccia, fresh pasta, arancini."
|
|
9800
|
+
},
|
|
9801
|
+
{
|
|
9802
|
+
id: "bbq-grilled-foods",
|
|
9803
|
+
name: "BBQ & Grilled Foods",
|
|
9804
|
+
description: "Kebabs, grilled chicken, ribs, burgers, sausages."
|
|
9805
|
+
},
|
|
9806
|
+
{
|
|
9807
|
+
id: "savoury-crepes-pancakes",
|
|
9808
|
+
name: "Savoury Crepes & Pancakes",
|
|
9809
|
+
description: "Filled savoury crepes, mini savoury pancakes."
|
|
9810
|
+
},
|
|
9811
|
+
{
|
|
9812
|
+
id: "savoury-baked-goods-pastries",
|
|
9813
|
+
name: "Savoury Baked Goods & Pastries",
|
|
9814
|
+
description: "Quiches, savoury muffins, filled savoury pastries, empanadas."
|
|
9815
|
+
},
|
|
9816
|
+
{
|
|
9817
|
+
id: "vegan-vegetarian-dishes",
|
|
9818
|
+
name: "Vegan & Vegetarian Dishes",
|
|
9819
|
+
description: "Buddha bowls, plant-based burgers, salads, vegan sushi."
|
|
9820
|
+
},
|
|
9821
|
+
{
|
|
9822
|
+
id: "other-savoury-foods",
|
|
9823
|
+
name: "Other Savoury Foods",
|
|
9824
|
+
description: "Fusion dishes, mixed platters, savoury meal kits."
|
|
9825
|
+
}
|
|
9826
|
+
]
|
|
9827
|
+
},
|
|
9828
|
+
{
|
|
9829
|
+
id: "sweet-prepared-foods",
|
|
9830
|
+
name: "Sweet Prepared Foods",
|
|
9831
|
+
items: [
|
|
9832
|
+
{
|
|
9833
|
+
id: "sweet-crepes-pancakes-fried-treats",
|
|
9834
|
+
name: "Sweet Crepes, Pancakes & Fried Treats",
|
|
9835
|
+
description: "Crepes, waffles, mini pancakes, muffins, doughnuts."
|
|
9836
|
+
},
|
|
9837
|
+
{
|
|
9838
|
+
id: "sweet-baked-goods-desserts",
|
|
9839
|
+
name: "Sweet Baked Goods & Desserts",
|
|
9840
|
+
description: "Cakes, pastries, slices, trifles, layered desserts."
|
|
9841
|
+
},
|
|
9842
|
+
{
|
|
9843
|
+
id: "fruit-based-snacks",
|
|
9844
|
+
name: "Fruit-Based Snacks",
|
|
9845
|
+
description: "Fruit skewers, dried fruit packs, chocolate-dipped fruit."
|
|
9846
|
+
},
|
|
9847
|
+
{
|
|
9848
|
+
id: "candy-confectionery",
|
|
9849
|
+
name: "Candy & Confectionery",
|
|
9850
|
+
description: "Fudge, handmade candies, toffee, nougat, brittle."
|
|
9851
|
+
},
|
|
9852
|
+
{
|
|
9853
|
+
id: "other-sweet-foods",
|
|
9854
|
+
name: "Other Sweet Foods",
|
|
9855
|
+
description: "Fusion desserts, sweet platters, sweet meal kits."
|
|
9856
|
+
}
|
|
9857
|
+
]
|
|
9858
|
+
}
|
|
9859
|
+
]
|
|
9860
|
+
}
|
|
9861
|
+
];
|
|
9862
|
+
var handmadeAndLocalProducts2 = [
|
|
9863
|
+
{
|
|
9864
|
+
id: "handmade-local-products",
|
|
9865
|
+
name: "Handmade & Local Products",
|
|
9866
|
+
description: "Unique, handmade, or locally produced artisan goods.",
|
|
9867
|
+
subcategories: [
|
|
9868
|
+
{
|
|
9869
|
+
id: "home-living",
|
|
9870
|
+
name: "Home & Living",
|
|
9871
|
+
items: [
|
|
9872
|
+
{
|
|
9873
|
+
id: "ceramics-pottery",
|
|
9874
|
+
name: "Ceramics & Pottery",
|
|
9875
|
+
description: "Handmade mugs, vases, bowls, decorative plates, plant pots."
|
|
9876
|
+
},
|
|
9877
|
+
{
|
|
9878
|
+
id: "candles-home-scents",
|
|
9879
|
+
name: "Candles & Home Scents",
|
|
9880
|
+
description: "Soy candles, beeswax candles, wax melts, incense sticks, room sprays and herbal sachets."
|
|
9881
|
+
},
|
|
9882
|
+
{
|
|
9883
|
+
id: "botanical-crafts",
|
|
9884
|
+
name: "Botanical Crafts",
|
|
9885
|
+
description: "Dried-flower d\xE9cor and pressed-flower crafts"
|
|
9886
|
+
},
|
|
9887
|
+
{
|
|
9888
|
+
id: "textiles-embroidery",
|
|
9889
|
+
name: "Textiles & Embroidery",
|
|
9890
|
+
description: "Handsewn items, embroidered napkins, home linens, aprons, fabric gift wraps, handmade fabric bags, quilted goods, personalized textile gifts."
|
|
9891
|
+
},
|
|
9892
|
+
{
|
|
9893
|
+
id: "woodcraft-metalcraft",
|
|
9894
|
+
name: "Woodcraft & Metalcraft",
|
|
9895
|
+
description: "Wooden boards, handmade frames, sculptures, metal signs, furniture."
|
|
9896
|
+
},
|
|
9897
|
+
{
|
|
9898
|
+
id: "handmade-soaps-natural-body-goods",
|
|
9899
|
+
name: "Handmade Soaps & Natural Body Goods",
|
|
9900
|
+
description: "Handmade soaps, balms, oils, bath items"
|
|
9901
|
+
},
|
|
9902
|
+
{
|
|
9903
|
+
id: "seasonal-festive-crafts",
|
|
9904
|
+
name: "Seasonal & Festive Crafts",
|
|
9905
|
+
description: "Christmas, Easter and seasonal handmade decor"
|
|
9906
|
+
},
|
|
9907
|
+
{
|
|
9908
|
+
id: "other-home-living-products",
|
|
9909
|
+
name: "Other home & living products",
|
|
9910
|
+
description: "Items that don't fit above but serve home-related purposes."
|
|
9911
|
+
}
|
|
9912
|
+
]
|
|
9913
|
+
},
|
|
9914
|
+
{
|
|
9915
|
+
id: "art-personal-expression",
|
|
9916
|
+
name: "Art & Personal Expression",
|
|
9917
|
+
items: [
|
|
9918
|
+
{
|
|
9919
|
+
id: "paintings-illustrations",
|
|
9920
|
+
name: "Paintings & Illustrations",
|
|
9921
|
+
description: "Paintings, canvas art, hand-drawn illustrations, digital prints, graphic art and calligraphy pieces."
|
|
9922
|
+
},
|
|
9923
|
+
{
|
|
9924
|
+
id: "sculptures-carvings",
|
|
9925
|
+
name: "Sculptures & Carvings ",
|
|
9926
|
+
description: "Sculptures made from wood, stone, metal, clay or resin, carved decorative pieces and artistic 3D works."
|
|
9927
|
+
},
|
|
9928
|
+
{
|
|
9929
|
+
id: "creative-handmade-alternative-art",
|
|
9930
|
+
name: "Creative Handmade & Alternative Art",
|
|
9931
|
+
description: "Handmade textile d\xE9cor, fabric ornaments, mixed-media art, creative craft pieces and modern handmade artworks."
|
|
9932
|
+
},
|
|
9933
|
+
{
|
|
9934
|
+
id: "handmade-mini-figures-decor",
|
|
9935
|
+
name: "Handmade Mini Figures & D\xE9cor",
|
|
9936
|
+
description: "Small handmade figures, tiny houses and crafted mini decorative items."
|
|
9937
|
+
},
|
|
9938
|
+
{
|
|
9939
|
+
id: "other-artistic-expressive-products",
|
|
9940
|
+
name: "Other Artistic or Expressive Products",
|
|
9941
|
+
description: "Custom artworks, specialty handmade d\xE9cor, unique crafts."
|
|
9942
|
+
}
|
|
9943
|
+
]
|
|
9944
|
+
},
|
|
9945
|
+
{
|
|
9946
|
+
id: "handmade-jewellery-accessories-cultural-crafts",
|
|
9947
|
+
name: "Handmade Jewellery, Accessories & Cultural Crafts",
|
|
9948
|
+
items: [
|
|
9949
|
+
{
|
|
9950
|
+
id: "jewellery-handmade-items-nz-traditional-materials",
|
|
9951
|
+
name: "Jewellery & Handmade Items from NZ Traditional Materials",
|
|
9952
|
+
description: "Handmade jewellery and decorative or functional items crafted from pounamu, bone, wood and other traditional New Zealand materials."
|
|
9953
|
+
},
|
|
9954
|
+
{
|
|
9955
|
+
id: "maori-pasifika-cultural-crafts-clothing",
|
|
9956
|
+
name: "M\u0101ori & Pasifika Cultural Crafts and Clothing",
|
|
9957
|
+
description: "Culturally inspired handmade items, accessories and garments featuring M\u0101ori or Pasifika motifs, traditional patterns and regional craftsmanship."
|
|
9958
|
+
},
|
|
9959
|
+
{
|
|
9960
|
+
id: "traditional-handmade-clothing-jewellery-crafts-global-cultures",
|
|
9961
|
+
name: "Traditional Handmade Clothing, Jewellery & Crafts from Global Cultures",
|
|
9962
|
+
description: "Handcrafted clothing, jewellery and cultural items from diverse traditions \u2014 including Asian, African, European, Middle Eastern, Indian, Chinese, Japanese, Pacific, and other culturally significant handmade pieces."
|
|
9963
|
+
},
|
|
9964
|
+
{
|
|
9965
|
+
id: "other-handmade-cultural-items",
|
|
9966
|
+
name: "Other Handmade Cultural Items",
|
|
9967
|
+
description: "Unique or culturally inspired handmade pieces not specifically covered in the categories above."
|
|
9968
|
+
}
|
|
9969
|
+
]
|
|
9970
|
+
},
|
|
9971
|
+
{
|
|
9972
|
+
id: "gift-ideas-accessories",
|
|
9973
|
+
name: "Gift Ideas & Accessories",
|
|
9974
|
+
items: [
|
|
9975
|
+
{
|
|
9976
|
+
id: "handmade-pens-keychains-fridge-magnets",
|
|
9977
|
+
name: "Handmade Pens, Keychains and Fridge Magnets",
|
|
9978
|
+
description: null
|
|
9979
|
+
},
|
|
9980
|
+
{
|
|
9981
|
+
id: "gift-packaging-wrapping-accessories",
|
|
9982
|
+
name: "Gift Packaging & Wrapping Accessories",
|
|
9983
|
+
description: null
|
|
9984
|
+
},
|
|
9985
|
+
{
|
|
9986
|
+
id: "handmade-crochet-knitting-fibre-crafts",
|
|
9987
|
+
name: "Handmade Crochet, Knitting & Fibre Crafts",
|
|
9988
|
+
description: "Handmade crochet and knitted items, fabric-based crafts, small decorative pieces, creative fibre artworks and unique handcrafted accessories."
|
|
9989
|
+
},
|
|
9990
|
+
{
|
|
9991
|
+
id: "handmade-toys-mini-play-items",
|
|
9992
|
+
name: "Handmade Toys & Mini Play Items",
|
|
9993
|
+
description: "small handmade toys, soft toys, wooden miniatures, crochet or felt play pieces"
|
|
9994
|
+
},
|
|
9995
|
+
{
|
|
9996
|
+
id: "other-small-handmade-gifts-accessories",
|
|
9997
|
+
name: "Other small handmade gifts or accessories",
|
|
9998
|
+
description: "Compact creative items made to surprise or delight."
|
|
9999
|
+
}
|
|
10000
|
+
]
|
|
10001
|
+
}
|
|
10002
|
+
]
|
|
10003
|
+
}
|
|
10004
|
+
];
|
|
10005
|
+
var healthAndWellness2 = [
|
|
10006
|
+
{
|
|
10007
|
+
id: "health-wellness",
|
|
10008
|
+
name: "Health & Wellness",
|
|
10009
|
+
description: "Natural products and services that promote wellbeing, body care, and holistic health.",
|
|
10010
|
+
subcategories: [
|
|
10011
|
+
{
|
|
10012
|
+
id: "body-skincare",
|
|
10013
|
+
name: "Body & Skincare",
|
|
10014
|
+
items: [
|
|
10015
|
+
{
|
|
10016
|
+
id: "skincare-body-products",
|
|
10017
|
+
name: "Skincare & Body Products",
|
|
10018
|
+
description: "Soaps, creams, lip balms, bath salts, bath bombs, body oils, natural deodorants."
|
|
10019
|
+
},
|
|
10020
|
+
{
|
|
10021
|
+
id: "other-body-care-items",
|
|
10022
|
+
name: "Other body care items",
|
|
10023
|
+
description: "Additional handmade or eco-conscious personal care goods."
|
|
10024
|
+
}
|
|
10025
|
+
]
|
|
10026
|
+
},
|
|
10027
|
+
{
|
|
10028
|
+
id: "aromatherapy-herbal-wellness",
|
|
10029
|
+
name: "Aromatherapy & Herbal Wellness",
|
|
10030
|
+
items: [
|
|
10031
|
+
{
|
|
10032
|
+
id: "aromatherapy-herbal-remedies",
|
|
10033
|
+
name: "Aromatherapy & Herbal Remedies",
|
|
10034
|
+
description: "Essential oils, herbal balms, massage oils, salves, natural teas, rollers."
|
|
10035
|
+
},
|
|
10036
|
+
{
|
|
10037
|
+
id: "other-herbal-aroma-products",
|
|
10038
|
+
name: "Other herbal or aroma-based products",
|
|
10039
|
+
description: "Wellness blends, herb sachets, custom infusions."
|
|
10040
|
+
}
|
|
10041
|
+
]
|
|
10042
|
+
},
|
|
10043
|
+
{
|
|
10044
|
+
id: "wellness-tools-accessories",
|
|
10045
|
+
name: "Wellness Tools & Accessories",
|
|
10046
|
+
items: [
|
|
10047
|
+
{
|
|
10048
|
+
id: "wellness-accessories",
|
|
10049
|
+
name: "Wellness Accessories",
|
|
10050
|
+
description: "Yoga mats, meditation cushions, eye pillows, incense, smudging sticks, eco water bottles, wellness journals."
|
|
10051
|
+
},
|
|
10052
|
+
{
|
|
10053
|
+
id: "spiritual-tools-crystals",
|
|
10054
|
+
name: "Spiritual Tools & Crystals",
|
|
10055
|
+
description: "Healing crystals, gemstone bracelets, pendulums, sprays, spiritual kits, altar decor."
|
|
10056
|
+
},
|
|
10057
|
+
{
|
|
10058
|
+
id: "other-wellness-spiritual-items",
|
|
10059
|
+
name: "Other wellness or spiritual items",
|
|
10060
|
+
description: "Items that aid relaxation, focus, or inner work."
|
|
10061
|
+
}
|
|
10062
|
+
]
|
|
10063
|
+
}
|
|
10064
|
+
]
|
|
10065
|
+
}
|
|
10066
|
+
];
|
|
10067
|
+
var homeGardenHousehold2 = [
|
|
10068
|
+
{
|
|
10069
|
+
id: "home-garden-household-goods",
|
|
10070
|
+
name: "Home, Garden & Household Goods",
|
|
10071
|
+
description: "Functional, decorative, and eco-conscious products designed for everyday use indoors and outdoors.",
|
|
10072
|
+
subcategories: [
|
|
10073
|
+
{
|
|
10074
|
+
id: "home-decor-living",
|
|
10075
|
+
name: "Home Decor & Living",
|
|
10076
|
+
items: [
|
|
10077
|
+
{
|
|
10078
|
+
id: "home-decor",
|
|
10079
|
+
name: "Home Decor",
|
|
10080
|
+
description: "Cushions, wall art, table runners, vases, trays, mirrors, handmade centerpieces."
|
|
10081
|
+
},
|
|
10082
|
+
{
|
|
10083
|
+
id: "kitchenware-dining",
|
|
10084
|
+
name: "Kitchenware & Dining",
|
|
10085
|
+
description: "Mugs, bowls, cutting boards, utensils, jars, coasters, kitchen textiles."
|
|
10086
|
+
},
|
|
10087
|
+
{
|
|
10088
|
+
id: "mini-figures-decor",
|
|
10089
|
+
name: "Mini Figures & D\xE9cor",
|
|
10090
|
+
description: "handmade or non-handmade small figures, tiny houses and miniature decorative items."
|
|
10091
|
+
},
|
|
10092
|
+
{
|
|
10093
|
+
id: "other-indoor-home-items",
|
|
10094
|
+
name: "Other indoor home items",
|
|
10095
|
+
description: "Any decorative or practical household items not listed above."
|
|
10096
|
+
}
|
|
10097
|
+
]
|
|
10098
|
+
},
|
|
10099
|
+
{
|
|
10100
|
+
id: "cleaning-eco-essentials",
|
|
10101
|
+
name: "Cleaning & Eco Essentials",
|
|
10102
|
+
items: [
|
|
10103
|
+
{
|
|
10104
|
+
id: "cleaning-eco-supplies",
|
|
10105
|
+
name: "Cleaning & Eco Supplies",
|
|
10106
|
+
description: "Beeswax wraps, reusable cloths, brushes, natural soaps, detergent bars, eco sponges."
|
|
10107
|
+
},
|
|
10108
|
+
{
|
|
10109
|
+
id: "other-eco-cleaning-items",
|
|
10110
|
+
name: "Other eco or cleaning items",
|
|
10111
|
+
description: "Environmentally friendly goods not listed above."
|
|
10112
|
+
}
|
|
10113
|
+
]
|
|
10114
|
+
},
|
|
10115
|
+
{
|
|
10116
|
+
id: "garden-outdoor-living",
|
|
10117
|
+
name: "Garden & Outdoor Living",
|
|
10118
|
+
items: [
|
|
10119
|
+
{
|
|
10120
|
+
id: "plants-botanical-decor",
|
|
10121
|
+
name: "Plants & Botanical Decor",
|
|
10122
|
+
description: "Potted herbs, succulents, dried flowers, terrariums, plant-based ornaments."
|
|
10123
|
+
},
|
|
10124
|
+
{
|
|
10125
|
+
id: "fresh-flowers-botanical-bouquets",
|
|
10126
|
+
name: "Fresh Flowers & Botanical Bouquets",
|
|
10127
|
+
description: "Cut flowers, seasonal bouquets, simple floral arrangements, native flower selections, and other fresh botanical items."
|
|
10128
|
+
},
|
|
10129
|
+
{
|
|
10130
|
+
id: "natural-decor-nature-inspired-elements",
|
|
10131
|
+
name: "Natural Decor & Nature-Inspired Elements",
|
|
10132
|
+
description: "Seashell d\xE9cor, driftwood pieces, sand ornaments, natural wood accents, stone or mineral decorations, and other nature-based decorative items."
|
|
10133
|
+
},
|
|
10134
|
+
{
|
|
10135
|
+
id: "garden-tools-outdoor-items",
|
|
10136
|
+
name: "Garden Tools & Outdoor Items",
|
|
10137
|
+
description: "Plant markers, garden signs, stakes, small tools, wind chimes, gifts."
|
|
10138
|
+
},
|
|
10139
|
+
{
|
|
10140
|
+
id: "other-outdoor-garden-products",
|
|
10141
|
+
name: "Other outdoor or garden products",
|
|
10142
|
+
description: "Functional or decorative items for outside use."
|
|
10143
|
+
}
|
|
10144
|
+
]
|
|
10145
|
+
}
|
|
10146
|
+
]
|
|
10147
|
+
}
|
|
10148
|
+
];
|
|
10149
|
+
var petProductsAndAnimalGoods2 = [
|
|
10150
|
+
{
|
|
10151
|
+
id: "pet-products-animal-goods",
|
|
10152
|
+
name: "Pet Products & Animal Goods",
|
|
10153
|
+
description: "Items for pets, pet lovers, or animal-themed market stalls.",
|
|
10154
|
+
subcategories: [
|
|
10155
|
+
{
|
|
10156
|
+
id: "products-for-pets",
|
|
10157
|
+
name: "Products for Pets",
|
|
10158
|
+
items: [
|
|
10159
|
+
{
|
|
10160
|
+
id: "pet-food-treats",
|
|
10161
|
+
name: "Pet Food & Treats",
|
|
10162
|
+
description: "Homemade dog biscuits, cat snacks, natural chews, pet-safe cakes, training treats."
|
|
10163
|
+
},
|
|
10164
|
+
{
|
|
10165
|
+
id: "apparel-toys-accessories",
|
|
10166
|
+
name: "Apparel, Toys & Accessories",
|
|
10167
|
+
description: "Leashes, collars, harnesses, toys, grooming tools, beds, travel gear, jumpers, bandanas."
|
|
10168
|
+
},
|
|
10169
|
+
{
|
|
10170
|
+
id: "other-pet-products",
|
|
10171
|
+
name: "Other pet products",
|
|
10172
|
+
description: "Any pet-related items not listed above."
|
|
10173
|
+
}
|
|
10174
|
+
]
|
|
10175
|
+
},
|
|
10176
|
+
{
|
|
10177
|
+
id: "small-pets-birds-exotic-animals",
|
|
10178
|
+
name: "Small Pets, Birds & Exotic Animals",
|
|
10179
|
+
items: [
|
|
10180
|
+
{
|
|
10181
|
+
id: "products-small-pets-birds-exotics",
|
|
10182
|
+
name: "Products for Small Pets, Birds & Exotics",
|
|
10183
|
+
description: "Toys, enclosures, perches, feeding bowls, bedding, habitat decor, transport gear, and care items for birds, rabbits, hamsters, reptiles, turtles, aquarium pets, and other exotic species."
|
|
10184
|
+
},
|
|
10185
|
+
{
|
|
10186
|
+
id: "other-small-exotic-animal-items",
|
|
10187
|
+
name: "Other small or exotic animal items",
|
|
10188
|
+
description: "Unusual accessories for non-mainstream pets."
|
|
10189
|
+
}
|
|
10190
|
+
]
|
|
10191
|
+
},
|
|
10192
|
+
{
|
|
10193
|
+
id: "farm-working-animals",
|
|
10194
|
+
name: "Farm & Working Animals",
|
|
10195
|
+
items: [
|
|
10196
|
+
{
|
|
10197
|
+
id: "goods-for-farm-working-animals",
|
|
10198
|
+
name: "Goods for Farm & Working Animals",
|
|
10199
|
+
description: "Treats, care products, equipment, signage and accessories for chickens, goats, alpacas, horses, and other livestock."
|
|
10200
|
+
},
|
|
10201
|
+
{
|
|
10202
|
+
id: "other-farm-animal-items",
|
|
10203
|
+
name: "Other farm animal-related items",
|
|
10204
|
+
description: "Rural, barnyard, or utility-specific gear not listed above."
|
|
10205
|
+
}
|
|
10206
|
+
]
|
|
10207
|
+
},
|
|
10208
|
+
{
|
|
10209
|
+
id: "animal-themed-gifts-custom-items",
|
|
10210
|
+
name: "Animal-Themed Gifts & Custom Items",
|
|
10211
|
+
items: [
|
|
10212
|
+
{
|
|
10213
|
+
id: "pet-art-custom-gifts",
|
|
10214
|
+
name: "Pet Art & Custom Gifts",
|
|
10215
|
+
description: "Pet portraits, name tags, personalized bowls, breed-specific items, pet-themed home decor and stationery."
|
|
10216
|
+
},
|
|
10217
|
+
{
|
|
10218
|
+
id: "other-animal-themed-gifts",
|
|
10219
|
+
name: "Other animal-themed gifts",
|
|
10220
|
+
description: "Artistic or sentimental items made for animal lovers."
|
|
10221
|
+
}
|
|
10222
|
+
]
|
|
10223
|
+
}
|
|
10224
|
+
]
|
|
10225
|
+
}
|
|
10226
|
+
];
|
|
10227
|
+
var serviceAndExperience2 = [
|
|
10228
|
+
{
|
|
10229
|
+
id: "services-experiences",
|
|
10230
|
+
name: "Services & Experiences",
|
|
10231
|
+
description: "On-site offerings that provide entertainment, personal care, learning, or interactive activities beyond products.",
|
|
10232
|
+
subcategories: [
|
|
10233
|
+
{
|
|
10234
|
+
id: "personal-care-body-art",
|
|
10235
|
+
name: "Personal Care & Body Art",
|
|
10236
|
+
items: [
|
|
10237
|
+
{
|
|
10238
|
+
id: "nails-handcare",
|
|
10239
|
+
name: "Nails & Handcare",
|
|
10240
|
+
description: "Nail painting, decoration, quick manicures, temporary nail extensions."
|
|
10241
|
+
},
|
|
10242
|
+
{
|
|
10243
|
+
id: "hair-styling-braiding",
|
|
10244
|
+
name: "Hair Styling & Braiding",
|
|
10245
|
+
description: "Hair braiding, plaits, child-friendly festival hairstyles."
|
|
10246
|
+
},
|
|
10247
|
+
{
|
|
10248
|
+
id: "face-body-decoration",
|
|
10249
|
+
name: "Face & Body Decoration",
|
|
10250
|
+
description: "Henna, glitter tattoos, face painting, light makeup, eyelash styling, professional tattooing (where permitted)."
|
|
10251
|
+
},
|
|
10252
|
+
{
|
|
10253
|
+
id: "other-beauty-grooming-services",
|
|
10254
|
+
name: "Other beauty or grooming services",
|
|
10255
|
+
description: "Small-scale personal care options offered on-site."
|
|
10256
|
+
}
|
|
10257
|
+
]
|
|
10258
|
+
},
|
|
10259
|
+
{
|
|
10260
|
+
id: "practical-wellness-services",
|
|
10261
|
+
name: "Practical & Wellness Services",
|
|
10262
|
+
items: [
|
|
10263
|
+
{
|
|
10264
|
+
id: "mobile-practical-services",
|
|
10265
|
+
name: "Mobile & Practical Services",
|
|
10266
|
+
description: "Shoe repair, phone repairs, knife sharpening, key cutting, battery replacement, bike repairs, engraving."
|
|
10267
|
+
},
|
|
10268
|
+
{
|
|
10269
|
+
id: "wellness-alternative-therapies",
|
|
10270
|
+
name: "Wellness & Alternative Therapies",
|
|
10271
|
+
description: "Massage, aromatherapy, reflexology, energy healing (e.g. Reiki), natural consultations."
|
|
10272
|
+
},
|
|
10273
|
+
{
|
|
10274
|
+
id: "other-service-based-offerings",
|
|
10275
|
+
name: "Other service-based offerings",
|
|
10276
|
+
description: "Wellness or functional services not listed above."
|
|
10277
|
+
}
|
|
10278
|
+
]
|
|
10279
|
+
},
|
|
10280
|
+
{
|
|
10281
|
+
id: "creative-educational-experiences",
|
|
10282
|
+
name: "Creative & Educational Experiences",
|
|
10283
|
+
items: [
|
|
10284
|
+
{
|
|
10285
|
+
id: "creative-workshops-maker-services",
|
|
10286
|
+
name: "Creative Workshops & Maker Services",
|
|
10287
|
+
description: "Candle making, pottery, jewelry crafting, soap or balm workshops, calligraphy, seasonal crafts."
|
|
10288
|
+
},
|
|
10289
|
+
{
|
|
10290
|
+
id: "education-awareness-stalls",
|
|
10291
|
+
name: "Education & Awareness Stalls",
|
|
10292
|
+
description: "Eco awareness, cultural storytelling, local history, first aid demos, health booths, sustainability education, kids\u2019 science displays."
|
|
10293
|
+
},
|
|
10294
|
+
{
|
|
10295
|
+
id: "other-creative-educational-services",
|
|
10296
|
+
name: "Other creative or educational services",
|
|
10297
|
+
description: "Informal learning, demonstrations, or community-focused sessions."
|
|
10298
|
+
}
|
|
10299
|
+
]
|
|
10300
|
+
},
|
|
10301
|
+
{
|
|
10302
|
+
id: "kids-activities-family-fun",
|
|
10303
|
+
name: "Kids\u2019 Activities & Family Fun",
|
|
10304
|
+
items: [
|
|
10305
|
+
{
|
|
10306
|
+
id: "kids-activities-fun",
|
|
10307
|
+
name: "Kids\u2019 Activities & Fun",
|
|
10308
|
+
description: "Face painting, glitter tattoos, pony rides, bouncy castles, small amusement rides, balloon twisting, animal petting zones."
|
|
10309
|
+
},
|
|
10310
|
+
{
|
|
10311
|
+
id: "other-family-oriented-activities",
|
|
10312
|
+
name: "Other family-oriented activities",
|
|
10313
|
+
description: "On-site entertainment that engages children or family groups."
|
|
10314
|
+
}
|
|
10315
|
+
]
|
|
10316
|
+
}
|
|
10317
|
+
]
|
|
10318
|
+
}
|
|
10319
|
+
];
|
|
10320
|
+
var toysChildren2 = [
|
|
10321
|
+
{
|
|
10322
|
+
id: "toys-childrens-items",
|
|
10323
|
+
name: "Toys & Children\u2019s Items",
|
|
10324
|
+
description: "Products and services made for or inspired by children.",
|
|
10325
|
+
subcategories: [
|
|
10326
|
+
{
|
|
10327
|
+
id: "toys-playthings",
|
|
10328
|
+
name: "Toys & Playthings",
|
|
10329
|
+
items: [
|
|
10330
|
+
{
|
|
10331
|
+
id: "toys-classic-electric-character",
|
|
10332
|
+
name: "Toys \u2013 Classic, Electric & Character-Based",
|
|
10333
|
+
description: "Building blocks, dolls, puzzles, plush animals, toy vehicles, remote-control toys, light-up gadgets, character figurines, themed playsets."
|
|
10334
|
+
},
|
|
10335
|
+
{
|
|
10336
|
+
id: "handmade-toys-crafty-playthings",
|
|
10337
|
+
name: "Handmade Toys & Crafty Playthings",
|
|
10338
|
+
description: "Wooden puzzles, crocheted animals, felt toys, fabric dolls, DIY kits, nature-inspired games, sensory toys."
|
|
10339
|
+
},
|
|
10340
|
+
{
|
|
10341
|
+
id: "other-play-items",
|
|
10342
|
+
name: "Other play items",
|
|
10343
|
+
description: "Toys not listed above, including limited-edition or hybrid items."
|
|
10344
|
+
}
|
|
10345
|
+
]
|
|
10346
|
+
},
|
|
10347
|
+
{
|
|
10348
|
+
id: "educational-developmental",
|
|
10349
|
+
name: "Educational & Developmental",
|
|
10350
|
+
items: [
|
|
10351
|
+
{
|
|
10352
|
+
id: "educational-developmental-tools",
|
|
10353
|
+
name: "Educational & Developmental Tools",
|
|
10354
|
+
description: "STEM kits, Montessori toys, storybooks, picture books, flashcards, early learning games, language tools."
|
|
10355
|
+
},
|
|
10356
|
+
{
|
|
10357
|
+
id: "other-educational-experience-based-items",
|
|
10358
|
+
name: "Other educational or experience-based items",
|
|
10359
|
+
description: "Creative experiences or learning aids not listed above."
|
|
10360
|
+
}
|
|
10361
|
+
]
|
|
10362
|
+
},
|
|
10363
|
+
{
|
|
10364
|
+
id: "baby-kidswear-accessories",
|
|
10365
|
+
name: "Baby & Kidswear + Accessories",
|
|
10366
|
+
items: [
|
|
10367
|
+
{
|
|
10368
|
+
id: "baby-kidswear-accessories",
|
|
10369
|
+
name: "Baby & Kidswear + Accessories",
|
|
10370
|
+
description: "Handmade baby clothes, toddler outfits, bibs, hats, headbands, bags, pacifier clips, soft shoes."
|
|
10371
|
+
},
|
|
10372
|
+
{
|
|
10373
|
+
id: "baby-developmental-soft-toys",
|
|
10374
|
+
name: "Baby Developmental Soft Toys",
|
|
10375
|
+
description: "Sensory toys, rattles, fabric books, teething items, high-contrast cards, and early-skill. Montessori materials designed to support infants\u2019 cognitive and motor development."
|
|
10376
|
+
},
|
|
10377
|
+
{
|
|
10378
|
+
id: "other-childrens-clothing-accessories",
|
|
10379
|
+
name: "Other children\u2019s clothing or accessories",
|
|
10380
|
+
description: "Unique fashion or functional pieces for kids."
|
|
10381
|
+
}
|
|
10382
|
+
]
|
|
10383
|
+
}
|
|
10384
|
+
]
|
|
10385
|
+
}
|
|
10386
|
+
];
|
|
10387
|
+
var vintageAndAntique2 = [
|
|
10388
|
+
{
|
|
10389
|
+
id: "vintage-antique",
|
|
10390
|
+
name: "Vintage & Antique",
|
|
10391
|
+
description: "Unique, historic, or nostalgic items with collectible or decorative value.",
|
|
10392
|
+
subcategories: [
|
|
10393
|
+
{
|
|
10394
|
+
id: "vintage-antique-clothing-accessories",
|
|
10395
|
+
name: "Vintage & Antique Clothing & Accessories",
|
|
10396
|
+
items: [
|
|
10397
|
+
{
|
|
10398
|
+
id: "clothing-vintage-fashion",
|
|
10399
|
+
name: "Clothing and wearable items from past eras",
|
|
10400
|
+
description: "Vintage dresses, jackets, hats, gloves, belts, bags, shoes, jewellery."
|
|
10401
|
+
},
|
|
10402
|
+
{
|
|
10403
|
+
id: "other-clothing-accessory-items",
|
|
10404
|
+
name: "Other clothing-related items",
|
|
10405
|
+
description: "Hair clips, brooches, pins, scarf rings, small fashion accessories."
|
|
10406
|
+
}
|
|
10407
|
+
]
|
|
10408
|
+
},
|
|
10409
|
+
{
|
|
10410
|
+
id: "collectibles-memorabilia",
|
|
10411
|
+
name: "Collectibles & Memorabilia",
|
|
10412
|
+
items: [
|
|
10413
|
+
{
|
|
10414
|
+
id: "small-collectible-items",
|
|
10415
|
+
name: "Small collectible items with historical or nostalgic significance",
|
|
10416
|
+
description: "Coins, stamps, toys, postcards, comics, sports cards, vintage packaging."
|
|
10417
|
+
},
|
|
10418
|
+
{
|
|
10419
|
+
id: "other-collectible-items",
|
|
10420
|
+
name: "Other collectible items",
|
|
10421
|
+
description: "Rare small objects, miniature figurines, special-edition items."
|
|
10422
|
+
}
|
|
10423
|
+
]
|
|
10424
|
+
},
|
|
10425
|
+
{
|
|
10426
|
+
id: "homewares-decor-curiosities",
|
|
10427
|
+
name: "Homewares, Decor & Curiosities",
|
|
10428
|
+
items: [
|
|
10429
|
+
{
|
|
10430
|
+
id: "decorative-functional-vintage-items",
|
|
10431
|
+
name: "Decorative or functional items with a vintage or antique aesthetic",
|
|
10432
|
+
description: "Teacups, plates, vases, mirrors, clocks, furniture, old tools, lanterns, typewriters, curiosities."
|
|
10433
|
+
},
|
|
10434
|
+
{
|
|
10435
|
+
id: "handmade-vintage-art",
|
|
10436
|
+
name: "Handmade vintage art",
|
|
10437
|
+
description: "Paintings, sculptures, crafted pieces."
|
|
10438
|
+
},
|
|
10439
|
+
{
|
|
10440
|
+
id: "other-home-decor-items",
|
|
10441
|
+
name: "Other home or decor items",
|
|
10442
|
+
description: "Decorative pieces not listed above, unique household objects."
|
|
10443
|
+
}
|
|
10444
|
+
]
|
|
10445
|
+
},
|
|
10446
|
+
{
|
|
10447
|
+
id: "vintage-media-printed-nostalgia",
|
|
10448
|
+
name: "Vintage Media & Printed Nostalgia",
|
|
10449
|
+
items: [
|
|
10450
|
+
{
|
|
10451
|
+
id: "older-media-printed-works",
|
|
10452
|
+
name: "Older media formats and printed works",
|
|
10453
|
+
description: "Vinyl records, cassette tapes, CDs, DVDs, books, magazines, board games, posters."
|
|
10454
|
+
},
|
|
10455
|
+
{
|
|
10456
|
+
id: "other-media-printed-items",
|
|
10457
|
+
name: "Other media or printed items",
|
|
10458
|
+
description: "Maps, manuals, leaflets, out-of-print materials."
|
|
10459
|
+
}
|
|
10460
|
+
]
|
|
10461
|
+
},
|
|
10462
|
+
{
|
|
10463
|
+
id: "other-vintage-antique-items",
|
|
10464
|
+
name: "Other Vintage & Antique Items",
|
|
10465
|
+
items: [
|
|
10466
|
+
{
|
|
10467
|
+
id: "any-vintage-antique-items-not-listed",
|
|
10468
|
+
name: "Any vintage or antique items not listed above",
|
|
10469
|
+
description: "Unique, rare or uncategorised pieces."
|
|
10470
|
+
}
|
|
10471
|
+
]
|
|
10472
|
+
}
|
|
10473
|
+
]
|
|
10474
|
+
}
|
|
10475
|
+
];
|
|
10476
|
+
var categoryColors2 = {
|
|
10477
|
+
"clothing-fashion": "#9D4EDD",
|
|
10478
|
+
"electronics-technology": "#3AF3FF",
|
|
10479
|
+
"food-beverages": "#FF0D1F",
|
|
10480
|
+
"handmade-local-products": "#EE7E54",
|
|
10481
|
+
"health-wellness": "#E23794",
|
|
10482
|
+
"home-garden-household-goods": "#067325",
|
|
10483
|
+
"pet-products-animal-goods": "#68E788",
|
|
10484
|
+
"services-experiences": "#2E16A5",
|
|
10485
|
+
"toys-childrens-items": "#FFF966",
|
|
10486
|
+
"vintage-antique": "#8D6748"
|
|
10487
|
+
};
|
|
10488
|
+
var assignColorToCategories2 = (categories) => {
|
|
10489
|
+
const result = categories.map((category) => ({
|
|
10490
|
+
...category,
|
|
10491
|
+
color: categoryColors2[category.id]
|
|
10492
|
+
}));
|
|
10493
|
+
return result;
|
|
10494
|
+
};
|
|
10495
|
+
var availableCategories2 = assignColorToCategories2([
|
|
10496
|
+
...foodAndBeverages2,
|
|
10497
|
+
...handmadeAndLocalProducts2,
|
|
10498
|
+
...clothingAndFashion2,
|
|
10499
|
+
...homeGardenHousehold2,
|
|
10500
|
+
...toysChildren2,
|
|
10501
|
+
...healthAndWellness2,
|
|
10502
|
+
...electronicsAndTechnology2,
|
|
10503
|
+
...vintageAndAntique2,
|
|
10504
|
+
...petProductsAndAnimalGoods2,
|
|
10505
|
+
...serviceAndExperience2
|
|
10506
|
+
]);
|
|
10507
|
+
var AFFILIATE_REWARDS = {
|
|
10508
|
+
[
|
|
10509
|
+
"NEW_EVENT_REGISTRATION"
|
|
10510
|
+
/* NEW_EVENT_REGISTRATION */
|
|
10511
|
+
]: {
|
|
10512
|
+
description: "10 points for new event registration (one-time reward)",
|
|
10513
|
+
value: 10
|
|
10514
|
+
},
|
|
10515
|
+
[
|
|
10516
|
+
"NEW_VENDOR_REGISTRATION"
|
|
10517
|
+
/* NEW_VENDOR_REGISTRATION */
|
|
10518
|
+
]: {
|
|
10519
|
+
description: "5 points for new vendor registration (one-time reward)",
|
|
10520
|
+
value: 5
|
|
10521
|
+
},
|
|
10522
|
+
[
|
|
10523
|
+
"ACTIVE_VENDOR_PRO_SUBSCRIPTION"
|
|
10524
|
+
/* ACTIVE_VENDOR_PRO_SUBSCRIPTION */
|
|
10525
|
+
]: {
|
|
10526
|
+
description: "3 points for active vendor pro subscription (monthly reward)",
|
|
10527
|
+
value: 3
|
|
10528
|
+
},
|
|
10529
|
+
[
|
|
10530
|
+
"ACTIVE_VENDOR_STANDARD_SUBSCRIPTION"
|
|
10531
|
+
/* ACTIVE_VENDOR_STANDARD_SUBSCRIPTION */
|
|
10532
|
+
]: {
|
|
10533
|
+
description: "1 point for active vendor standard subscription (monthly reward)",
|
|
10534
|
+
value: 1
|
|
10535
|
+
},
|
|
10536
|
+
[
|
|
10537
|
+
"ACTIVE_VENDOR_BONUS_REWARD"
|
|
10538
|
+
/* ACTIVE_VENDOR_BONUS_REWARD */
|
|
10539
|
+
]: {
|
|
10540
|
+
description: "5 bonus points for every 10th active vendor (one-time reward)",
|
|
10541
|
+
value: 5
|
|
10542
|
+
},
|
|
10543
|
+
[
|
|
10544
|
+
"ACTIVE_EVENT_WITH_VENDOR_REGISTRATIONS"
|
|
10545
|
+
/* ACTIVE_EVENT_WITH_VENDOR_REGISTRATIONS */
|
|
10546
|
+
]: {
|
|
10547
|
+
description: "40 points for active event with vendor registrations (one-time reward)",
|
|
10548
|
+
value: 40
|
|
10549
|
+
}
|
|
10550
|
+
};
|
|
10551
|
+
function createAffiliateReward(rewardType, createdAt) {
|
|
10552
|
+
const reward = AFFILIATE_REWARDS[rewardType];
|
|
10553
|
+
return {
|
|
10554
|
+
createdAt,
|
|
9452
10555
|
redeemedAt: null,
|
|
9453
10556
|
rewardDescription: reward.description,
|
|
9454
10557
|
rewardType,
|
|
@@ -9456,6 +10559,145 @@ function createAffiliateReward(rewardType, createdAt) {
|
|
|
9456
10559
|
};
|
|
9457
10560
|
}
|
|
9458
10561
|
|
|
10562
|
+
// src/service/promoCode/normalizePromoCode.ts
|
|
10563
|
+
function normalizePromoCode(decoratedPromoCode) {
|
|
10564
|
+
const normalized = decoratedPromoCode?.trim().toUpperCase();
|
|
10565
|
+
return normalized || null;
|
|
10566
|
+
}
|
|
10567
|
+
|
|
10568
|
+
// src/service/saveNotificationsInDb.ts
|
|
10569
|
+
async function saveNotificationsInDb(payload) {
|
|
10570
|
+
const { data, message, title, type, userIds } = payload;
|
|
10571
|
+
console.log("NOTIFICATION DATA", JSON.stringify(payload, null, 2));
|
|
10572
|
+
try {
|
|
10573
|
+
const notifications = userIds.map((userId) => ({
|
|
10574
|
+
data,
|
|
10575
|
+
isRead: false,
|
|
10576
|
+
message,
|
|
10577
|
+
title,
|
|
10578
|
+
type,
|
|
10579
|
+
userId
|
|
10580
|
+
}));
|
|
10581
|
+
await NotificationModel.insertMany(notifications);
|
|
10582
|
+
console.log(
|
|
10583
|
+
`Created ${notifications.length} notifications for ${userIds.length} users`
|
|
10584
|
+
);
|
|
10585
|
+
return [...new Set(userIds)];
|
|
10586
|
+
} catch (error) {
|
|
10587
|
+
console.error("Failed to create notifications:", error);
|
|
10588
|
+
return [];
|
|
10589
|
+
}
|
|
10590
|
+
}
|
|
10591
|
+
|
|
10592
|
+
// src/service/sendPushNotifications.ts
|
|
10593
|
+
var import_expo_server_sdk = require("expo-server-sdk");
|
|
10594
|
+
var expo = new import_expo_server_sdk.Expo();
|
|
10595
|
+
function extractTokensFromMessage(message) {
|
|
10596
|
+
return Array.isArray(message.to) ? message.to : [message.to];
|
|
10597
|
+
}
|
|
10598
|
+
function createPushMessages({
|
|
10599
|
+
tokens,
|
|
10600
|
+
message,
|
|
10601
|
+
title,
|
|
10602
|
+
data
|
|
10603
|
+
}) {
|
|
10604
|
+
const messages = [];
|
|
10605
|
+
const invalidTokens = [];
|
|
10606
|
+
for (const token of tokens) {
|
|
10607
|
+
if (!import_expo_server_sdk.Expo.isExpoPushToken(token)) {
|
|
10608
|
+
invalidTokens.push(token);
|
|
10609
|
+
continue;
|
|
10610
|
+
}
|
|
10611
|
+
messages.push({
|
|
10612
|
+
body: message,
|
|
10613
|
+
data: { ...data },
|
|
10614
|
+
sound: "tui.wav",
|
|
10615
|
+
title,
|
|
10616
|
+
to: token
|
|
10617
|
+
});
|
|
10618
|
+
}
|
|
10619
|
+
return { invalidTokens, messages };
|
|
10620
|
+
}
|
|
10621
|
+
function processChunkResults(tickets, chunk) {
|
|
10622
|
+
let successCount = 0;
|
|
10623
|
+
const failedTokens = [];
|
|
10624
|
+
for (const [ticketIndex, ticket] of tickets.entries()) {
|
|
10625
|
+
if (ticket.status === "error") {
|
|
10626
|
+
const message = chunk[ticketIndex];
|
|
10627
|
+
if (message) {
|
|
10628
|
+
const tokens = extractTokensFromMessage(message);
|
|
10629
|
+
if (ticket.details?.error === "DeviceNotRegistered") {
|
|
10630
|
+
failedTokens.push(...tokens);
|
|
10631
|
+
}
|
|
10632
|
+
console.log("Push notification error", {
|
|
10633
|
+
error: ticket.details?.error,
|
|
10634
|
+
tokens
|
|
10635
|
+
});
|
|
10636
|
+
}
|
|
10637
|
+
} else {
|
|
10638
|
+
successCount++;
|
|
10639
|
+
}
|
|
10640
|
+
}
|
|
10641
|
+
return { failedTokens, successCount };
|
|
10642
|
+
}
|
|
10643
|
+
async function sendChunk(chunk, chunkIndex) {
|
|
10644
|
+
try {
|
|
10645
|
+
const tickets = await expo.sendPushNotificationsAsync(chunk);
|
|
10646
|
+
const { successCount, failedTokens } = processChunkResults(tickets, chunk);
|
|
10647
|
+
console.log(
|
|
10648
|
+
`Chunk ${chunkIndex + 1}: Sent ${successCount}/${chunk.length} notifications successfully`
|
|
10649
|
+
);
|
|
10650
|
+
return { failedTokens, successCount };
|
|
10651
|
+
} catch (error) {
|
|
10652
|
+
console.log("Error sending Expo push notification chunk", {
|
|
10653
|
+
chunkIndex,
|
|
10654
|
+
chunkSize: chunk.length,
|
|
10655
|
+
error: error instanceof Error ? error.message : String(error)
|
|
10656
|
+
});
|
|
10657
|
+
return { failedTokens: [], successCount: 0 };
|
|
10658
|
+
}
|
|
10659
|
+
}
|
|
10660
|
+
async function sendPushNotifications({
|
|
10661
|
+
data,
|
|
10662
|
+
message,
|
|
10663
|
+
title,
|
|
10664
|
+
userIds
|
|
10665
|
+
}) {
|
|
10666
|
+
const pushTokens = await PushTokenModel.find({ userId: { $in: userIds } });
|
|
10667
|
+
const expoTokens = pushTokens.map((token) => token.token);
|
|
10668
|
+
if (!data) return;
|
|
10669
|
+
const { messages, invalidTokens } = createPushMessages({
|
|
10670
|
+
data,
|
|
10671
|
+
message,
|
|
10672
|
+
title,
|
|
10673
|
+
tokens: expoTokens
|
|
10674
|
+
});
|
|
10675
|
+
if (invalidTokens.length > 0) {
|
|
10676
|
+
console.log(`Found ${invalidTokens.length} invalid push tokens`);
|
|
10677
|
+
}
|
|
10678
|
+
if (messages.length === 0) {
|
|
10679
|
+
console.log("No valid messages to send after filtering tokens");
|
|
10680
|
+
return;
|
|
10681
|
+
}
|
|
10682
|
+
const chunks = expo.chunkPushNotifications(messages);
|
|
10683
|
+
let totalSuccessCount = 0;
|
|
10684
|
+
const allFailedTokens = [];
|
|
10685
|
+
for (const [chunkIndex, chunk] of chunks.entries()) {
|
|
10686
|
+
const { successCount, failedTokens } = await sendChunk(
|
|
10687
|
+
chunk,
|
|
10688
|
+
chunkIndex + 1
|
|
10689
|
+
);
|
|
10690
|
+
totalSuccessCount += successCount;
|
|
10691
|
+
allFailedTokens.push(...failedTokens);
|
|
10692
|
+
}
|
|
10693
|
+
console.log(
|
|
10694
|
+
`Sent push notification to ${totalSuccessCount}/${messages.length} tokens across ${chunks.length} chunks`
|
|
10695
|
+
);
|
|
10696
|
+
if (allFailedTokens.length > 0) {
|
|
10697
|
+
console.log(`Found ${allFailedTokens.length} failed push tokens`);
|
|
10698
|
+
}
|
|
10699
|
+
}
|
|
10700
|
+
|
|
9459
10701
|
// src/service/affiliate/vendorSubscriptionRewards.ts
|
|
9460
10702
|
function isPayingStripeSubscription(stripe) {
|
|
9461
10703
|
if (!stripe?.subscriptionId) return false;
|
|
@@ -9841,6 +11083,9 @@ async function updateVendorBasedOnUserLicense(userId, licenceType) {
|
|
|
9841
11083
|
|
|
9842
11084
|
// src/service/objectIdToString.ts
|
|
9843
11085
|
var import_mongoose33 = __toESM(require("mongoose"));
|
|
11086
|
+
function isValidObjectId(value) {
|
|
11087
|
+
return import_mongoose33.default.Types.ObjectId.isValid(value);
|
|
11088
|
+
}
|
|
9844
11089
|
function convertObjectIdsToStrings(obj) {
|
|
9845
11090
|
if (obj === null || obj === void 0) {
|
|
9846
11091
|
return obj;
|
|
@@ -9865,11 +11110,11 @@ function convertObjectIdsToStrings(obj) {
|
|
|
9865
11110
|
}
|
|
9866
11111
|
|
|
9867
11112
|
// src/service/event/updateAllEventDateTimeStatuses.ts
|
|
9868
|
-
var
|
|
9869
|
-
var
|
|
11113
|
+
var import_dayjs5 = __toESM(require("dayjs"));
|
|
11114
|
+
var import_customParseFormat3 = __toESM(require("dayjs/plugin/customParseFormat"));
|
|
9870
11115
|
var import_isoWeek = __toESM(require("dayjs/plugin/isoWeek"));
|
|
9871
|
-
|
|
9872
|
-
|
|
11116
|
+
import_dayjs5.default.extend(import_customParseFormat3.default);
|
|
11117
|
+
import_dayjs5.default.extend(import_isoWeek.default);
|
|
9873
11118
|
function getFutureEventStatus(startDateTime, now) {
|
|
9874
11119
|
const hoursUntilStart = startDateTime.diff(now, "hour", true);
|
|
9875
11120
|
if (hoursUntilStart > 0 && hoursUntilStart <= 4) {
|
|
@@ -9889,14 +11134,14 @@ function getFutureEventStatus(startDateTime, now) {
|
|
|
9889
11134
|
}
|
|
9890
11135
|
return EnumEventDateStatus.UPCOMING;
|
|
9891
11136
|
}
|
|
9892
|
-
function updateSingleDateTimeStatus(dateTime, now = (0,
|
|
11137
|
+
function updateSingleDateTimeStatus(dateTime, now = (0, import_dayjs5.default)()) {
|
|
9893
11138
|
const dateTimeFormat = `${dateFormat} ${timeFormat}`;
|
|
9894
|
-
const startDateTime = (0,
|
|
11139
|
+
const startDateTime = (0, import_dayjs5.default)(
|
|
9895
11140
|
`${dateTime.startDate} ${dateTime.startTime}`,
|
|
9896
11141
|
dateTimeFormat,
|
|
9897
11142
|
true
|
|
9898
11143
|
);
|
|
9899
|
-
const endDateTime = (0,
|
|
11144
|
+
const endDateTime = (0, import_dayjs5.default)(
|
|
9900
11145
|
`${dateTime.endDate} ${dateTime.endTime}`,
|
|
9901
11146
|
dateTimeFormat,
|
|
9902
11147
|
true
|
|
@@ -9978,7 +11223,7 @@ async function updateModelDateTimeStatuses(model, now) {
|
|
|
9978
11223
|
return updated;
|
|
9979
11224
|
}
|
|
9980
11225
|
async function updateAllEventDateTimeStatuses() {
|
|
9981
|
-
const now = (0,
|
|
11226
|
+
const now = (0, import_dayjs5.default)();
|
|
9982
11227
|
const [eventCount, marketCount] = await Promise.all([
|
|
9983
11228
|
updateModelDateTimeStatuses(EventModel, now),
|
|
9984
11229
|
updateModelDateTimeStatuses(
|
|
@@ -10029,7 +11274,6 @@ function updateRelationDatesToUnavailable(relationDates, eventDateTime) {
|
|
|
10029
11274
|
// Annotate the CommonJS export names for ESM import in node:
|
|
10030
11275
|
0 && (module.exports = {
|
|
10031
11276
|
ACTIVE_NOT_DELETED_FILTER,
|
|
10032
|
-
AFFILIATE_REWARDS,
|
|
10033
11277
|
APP_SETTINGS_ID,
|
|
10034
11278
|
AdModel,
|
|
10035
11279
|
AffiliateModel,
|
|
@@ -10065,13 +11309,13 @@ function updateRelationDatesToUnavailable(relationDates, eventDateTime) {
|
|
|
10065
11309
|
baseResourceFields,
|
|
10066
11310
|
connectToDatabase,
|
|
10067
11311
|
convertObjectIdsToStrings,
|
|
10068
|
-
createAffiliateReward,
|
|
10069
11312
|
dateTimeSchema,
|
|
10070
11313
|
didRemoveAnyEventDates,
|
|
10071
11314
|
express,
|
|
10072
11315
|
findAffiliateByPromoCode,
|
|
10073
11316
|
findEventOrImportedMarketById,
|
|
10074
11317
|
getSubscriptionRewardPeriodBounds,
|
|
11318
|
+
isValidObjectId,
|
|
10075
11319
|
locationGeoSchema,
|
|
10076
11320
|
locationsSchema,
|
|
10077
11321
|
mapVendorLicenceToSubscriptionRewardType,
|