@infuro/cms-core 1.0.50 → 1.0.51

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/index.d.cts CHANGED
@@ -2843,6 +2843,7 @@ interface OrderTriggerPayload {
2843
2843
  currency: string;
2844
2844
  vendorId?: number | null;
2845
2845
  refundAmount?: number | null;
2846
+ extraVariables?: Record<string, string>;
2846
2847
  }
2847
2848
  declare class NotificationTriggerEmitter extends EventEmitter {
2848
2849
  emitTrigger(triggerKey: string, payload: OrderTriggerPayload): void;
@@ -2880,6 +2881,8 @@ type VendorOnboardedKind = 'vendor_onboard' | 'team_invite';
2880
2881
 
2881
2882
  interface EntityMapLike {
2882
2883
  configs: unknown;
2884
+ users?: unknown;
2885
+ vendors?: unknown;
2883
2886
  }
2884
2887
  interface SendVendorOnboardEmailInput {
2885
2888
  vendorName: string;
@@ -2898,7 +2901,7 @@ interface SendVendorOnboardEmailDeps {
2898
2901
  entityMap: EntityMapLike;
2899
2902
  getCms: () => Promise<CmsAppLike$3>;
2900
2903
  }
2901
- /** After vendor onboard / team invite: email owner + platform team from plugin settings. */
2904
+ /** After vendor onboard / team invite: email owner + platform super admins (excluding vendor emails). */
2902
2905
  declare function sendVendorOnboardEmails(input: SendVendorOnboardEmailInput, deps: SendVendorOnboardEmailDeps): Promise<{
2903
2906
  ownerEmailSent: boolean;
2904
2907
  }>;
package/dist/index.d.ts CHANGED
@@ -2843,6 +2843,7 @@ interface OrderTriggerPayload {
2843
2843
  currency: string;
2844
2844
  vendorId?: number | null;
2845
2845
  refundAmount?: number | null;
2846
+ extraVariables?: Record<string, string>;
2846
2847
  }
2847
2848
  declare class NotificationTriggerEmitter extends EventEmitter {
2848
2849
  emitTrigger(triggerKey: string, payload: OrderTriggerPayload): void;
@@ -2880,6 +2881,8 @@ type VendorOnboardedKind = 'vendor_onboard' | 'team_invite';
2880
2881
 
2881
2882
  interface EntityMapLike {
2882
2883
  configs: unknown;
2884
+ users?: unknown;
2885
+ vendors?: unknown;
2883
2886
  }
2884
2887
  interface SendVendorOnboardEmailInput {
2885
2888
  vendorName: string;
@@ -2898,7 +2901,7 @@ interface SendVendorOnboardEmailDeps {
2898
2901
  entityMap: EntityMapLike;
2899
2902
  getCms: () => Promise<CmsAppLike$3>;
2900
2903
  }
2901
- /** After vendor onboard / team invite: email owner + platform team from plugin settings. */
2904
+ /** After vendor onboard / team invite: email owner + platform super admins (excluding vendor emails). */
2902
2905
  declare function sendVendorOnboardEmails(input: SendVendorOnboardEmailInput, deps: SendVendorOnboardEmailDeps): Promise<{
2903
2906
  ownerEmailSent: boolean;
2904
2907
  }>;
package/dist/index.js CHANGED
@@ -1,9 +1,9 @@
1
- export { emitOrderNotificationTrigger, fireOrderNotificationTrigger } from './chunk-JE22VP6S.js';
2
- import { checkMultiVendorEnabled, loadUserVendorContext, getPublicSettingsGroup, BlogGeneratorService } from './chunk-LT2WOPKA.js';
3
- export { Address, Attendee, Attribute, BLOG_GENERATOR_AGENT_NAME, BLOG_GENERATOR_DEFAULT_SYSTEM_INSTRUCTION, BLOG_GENERATOR_DEFAULT_VALIDATION_RULES, BLOG_GENERATOR_LLM_AGENT_SLUG, BLOG_GENERATOR_MARKDOWN_ARTICLE_SEPARATOR, BLOG_METADATA_ENRICHER_AGENT_NAME, BLOG_METADATA_ENRICHER_DEFAULT_SYSTEM_INSTRUCTION, BLOG_METADATA_ENRICHER_DEFAULT_VALIDATION_RULES, BLOG_METADATA_ENRICHER_LLM_AGENT_SLUG, Blog, BlogGeneratorService, Brand, CMS_ENTITY_MAP, Cart, CartItem, Category, ChatConversation, ChatMessage, Collection, Combo, ComboItem, Comment, Config, Contact, Currency, CurrencyExchange, Customer, Customer_Contacts, Discount, DiscountRules, Event, EventProduct, Form, FormField, FormSubmission, JobSchedule, JobScheduleRun, KnowledgeBaseChunk, KnowledgeBaseDocument, LlmAgent, LlmAgentKnowledgeDocument, Media, MessageTemplate, Order, OrderAddresses, OrderDiscounts, OrderItem, OrderNotificationBinding, OrderNotificationTrigger, OtpChallenge, Page, PasswordResetToken, Payment, Permission, Product, ProductAttribute, ProductCategory, ProductConfig, ProductVariant, RefundPolicy, RefundRequest, RssArticle, RssFeed, Seo, Tag, Tax, User, UserDeviceToken, UserGroup, Vendor, VendorCustomer, VendorRole, VendorRolePermission, VendorUser, VendorUserProfile, Wishlist, WishlistItem, ZIP_MIME_TYPES, applyApprovalStatusSideEffects, applyEventApprovalStatusSideEffects, applyRotatingVendorInvite, applyVendorCustomersContactFilter, applyVendorEventCreateApproval, applyVendorProductCreateApproval, assertCaptchaOk, assertContactAllowedForVendorOrder, assertEventApprovalUpdate, assertProductApprovalUpdate, buildBlogMetadataUserPrompt, buildCronFromSchedule, buildRssUserPromptFromFeeds, buildUserInviteLink, buildVendorInviteLink, calculateOrderRefundPreview, calculateRefundFromPolicy, checkAndIncrementDiscountUsage, checkEventsEnabled, checkMultiVendorEnabled, completeUserInviteAccept, consumeAppliedDiscountUsages, contactIsVendorCustomer, countDiscountOrdersForContact, countRecentOtpSends, createAnalyticsHandlers, createBlogBySlugHandler, createChangePasswordHandler, createCmsApiHandler, createCmsApp, createCmsAppWithMessaging, createCrudByIdHandler, createCrudHandler, createDashboardStatsHandler, createEcommerceAnalyticsHandler, createEventOrderMessageTemplateHandlers, createForgotPasswordHandler, createFormBySlugHandler, createInviteAcceptHandler, createJobScheduleHandlers, createLlmAgentKnowledgeHandlers, createMediaZipExtractHandler, createMessageTemplateRowLoader, createOtpChallenge, createSetPasswordHandler, createSettingsApiHandlers, createSocialMediaHandlers, createStorefrontApiHandler, createUploadHandler, createUserAuthApiRouter, createUserAvatarHandler, createUserProfileHandler, createUsersApiHandlers, createVendorDashboardHandler, createVendorOnboardHandlers, daysBeforeEventStart, decrementDiscountUsage, describeEventTierPolicy, ensureMessagingPluginsOnCms, ensureScheduleQueueWorker, ensureVendorCustomerForOrderContact, ensureVendorCustomersForOrder, findActiveRefundPolicyForVendor, findUserByInviteToken, findVendorByInviteToken, formatTierRange, generateNumericOtp, getPublicSettingsGroup, getRequireEventApproval, getRequireProductApproval, getRssArticleSummaryFromItem, getVendorCatalogCreateFlags, hashOtpCode, hydrateVendorSessionUser, invalidateEventsCache, invalidateMultiVendorCache, invalidateRequireEventApprovalCache, invalidateRequireProductApprovalCache, invalidateVendorCatalogCreateFlagsCache, isCustomerTypeContact, isMaxPerUserUsageReached, isMaxTotalUsageReached, isZipMedia, llmAgentToChatAgentOptions, loadSettingsGroupFromDb, loadUserVendorContext, mergeGuardrailsIntoSystemPrompt, messagingPlugins, metaFetchUserManagedPages, metaPostPageFeed, metaPostPagePhoto, metaResolvePageAccessToken, newUserInviteToken, normalizePhoneE164, normalizeRefundTiers, overlayCmsPlugins, parseBlogGeneratorAgentContent, parseBlogGeneratorModelOutput, parseBlogMetadataEnrichmentJson, parseLlmAgentValidationRules, pgBossScheduleNameForId, queueErpCreateContactIfEnabled, queueJobScheduleNow, queuePlugin, queueSms, recordDiscountUsage, registerJobRunnerWorker, registerMessagingQueueProcessors, registerSmsQueueProcessor, relativePathFromMediaParentId, resolveBlogCategoryIdByName, resolveSettingsEncryptionKey, resolveVendorIdForContactCheck, sanitizeMediaFolderPath, sanitizeStorageSegment, sendVendorOnboardEmails, simpleDecrypt, simpleEncrypt, syncJobScheduleToPgBoss, validateRefundTiers, validateScheduleInput, validateUserMessageAgainstAgentRules, validateUserMessageAgainstStructuredRules, verifyAndConsumeOtpChallenge, verifyOtpCodeHash, whatsappPlugin, wrapGetCmsWithMessaging } from './chunk-LT2WOPKA.js';
1
+ export { emitOrderNotificationTrigger, fireOrderNotificationTrigger } from './chunk-MXIWUFBP.js';
2
+ import { checkMultiVendorEnabled, loadUserVendorContext, getPublicSettingsGroup, BlogGeneratorService } from './chunk-NUXR7BUG.js';
3
+ export { Address, Attendee, Attribute, BLOG_GENERATOR_AGENT_NAME, BLOG_GENERATOR_DEFAULT_SYSTEM_INSTRUCTION, BLOG_GENERATOR_DEFAULT_VALIDATION_RULES, BLOG_GENERATOR_LLM_AGENT_SLUG, BLOG_GENERATOR_MARKDOWN_ARTICLE_SEPARATOR, BLOG_METADATA_ENRICHER_AGENT_NAME, BLOG_METADATA_ENRICHER_DEFAULT_SYSTEM_INSTRUCTION, BLOG_METADATA_ENRICHER_DEFAULT_VALIDATION_RULES, BLOG_METADATA_ENRICHER_LLM_AGENT_SLUG, Blog, BlogGeneratorService, Brand, CMS_ENTITY_MAP, Cart, CartItem, Category, ChatConversation, ChatMessage, Collection, Combo, ComboItem, Comment, Config, Contact, Currency, CurrencyExchange, Customer, Customer_Contacts, Discount, DiscountRules, Event, EventProduct, Form, FormField, FormSubmission, JobSchedule, JobScheduleRun, KnowledgeBaseChunk, KnowledgeBaseDocument, LlmAgent, LlmAgentKnowledgeDocument, Media, MessageTemplate, Order, OrderAddresses, OrderDiscounts, OrderItem, OrderNotificationBinding, OrderNotificationTrigger, OtpChallenge, Page, PasswordResetToken, Payment, Permission, Product, ProductAttribute, ProductCategory, ProductConfig, ProductVariant, RefundPolicy, RefundRequest, RssArticle, RssFeed, Seo, Tag, Tax, User, UserDeviceToken, UserGroup, Vendor, VendorCustomer, VendorRole, VendorRolePermission, VendorUser, VendorUserProfile, Wishlist, WishlistItem, ZIP_MIME_TYPES, applyApprovalStatusSideEffects, applyEventApprovalStatusSideEffects, applyRotatingVendorInvite, applyVendorCustomersContactFilter, applyVendorEventCreateApproval, applyVendorProductCreateApproval, assertCaptchaOk, assertContactAllowedForVendorOrder, assertEventApprovalUpdate, assertProductApprovalUpdate, buildBlogMetadataUserPrompt, buildCronFromSchedule, buildRssUserPromptFromFeeds, buildUserInviteLink, buildVendorInviteLink, calculateOrderRefundPreview, calculateRefundFromPolicy, checkAndIncrementDiscountUsage, checkEventsEnabled, checkMultiVendorEnabled, completeUserInviteAccept, consumeAppliedDiscountUsages, contactIsVendorCustomer, countDiscountOrdersForContact, countRecentOtpSends, createAnalyticsHandlers, createBlogBySlugHandler, createChangePasswordHandler, createCmsApiHandler, createCmsApp, createCmsAppWithMessaging, createCrudByIdHandler, createCrudHandler, createDashboardStatsHandler, createEcommerceAnalyticsHandler, createEventOrderMessageTemplateHandlers, createForgotPasswordHandler, createFormBySlugHandler, createInviteAcceptHandler, createJobScheduleHandlers, createLlmAgentKnowledgeHandlers, createMediaZipExtractHandler, createMessageTemplateRowLoader, createOtpChallenge, createSetPasswordHandler, createSettingsApiHandlers, createSocialMediaHandlers, createStorefrontApiHandler, createUploadHandler, createUserAuthApiRouter, createUserAvatarHandler, createUserProfileHandler, createUsersApiHandlers, createVendorDashboardHandler, createVendorOnboardHandlers, daysBeforeEventStart, decrementDiscountUsage, describeEventTierPolicy, ensureMessagingPluginsOnCms, ensureScheduleQueueWorker, ensureVendorCustomerForOrderContact, ensureVendorCustomersForOrder, findActiveRefundPolicyForVendor, findUserByInviteToken, findVendorByInviteToken, formatTierRange, generateNumericOtp, getPublicSettingsGroup, getRequireEventApproval, getRequireProductApproval, getRssArticleSummaryFromItem, getVendorCatalogCreateFlags, hashOtpCode, hydrateVendorSessionUser, invalidateEventsCache, invalidateMultiVendorCache, invalidateRequireEventApprovalCache, invalidateRequireProductApprovalCache, invalidateVendorCatalogCreateFlagsCache, isCustomerTypeContact, isMaxPerUserUsageReached, isMaxTotalUsageReached, isZipMedia, llmAgentToChatAgentOptions, loadSettingsGroupFromDb, loadUserVendorContext, mergeGuardrailsIntoSystemPrompt, messagingPlugins, metaFetchUserManagedPages, metaPostPageFeed, metaPostPagePhoto, metaResolvePageAccessToken, newUserInviteToken, normalizePhoneE164, normalizeRefundTiers, overlayCmsPlugins, parseBlogGeneratorAgentContent, parseBlogGeneratorModelOutput, parseBlogMetadataEnrichmentJson, parseLlmAgentValidationRules, pgBossScheduleNameForId, queueErpCreateContactIfEnabled, queueJobScheduleNow, queuePlugin, queueSms, recordDiscountUsage, registerJobRunnerWorker, registerMessagingQueueProcessors, registerSmsQueueProcessor, relativePathFromMediaParentId, resolveBlogCategoryIdByName, resolveSettingsEncryptionKey, resolveVendorIdForContactCheck, sanitizeMediaFolderPath, sanitizeStorageSegment, sendVendorOnboardEmails, simpleDecrypt, simpleEncrypt, syncJobScheduleToPgBoss, validateRefundTiers, validateScheduleInput, validateUserMessageAgainstAgentRules, validateUserMessageAgainstStructuredRules, verifyAndConsumeOtpChallenge, verifyOtpCodeHash, whatsappPlugin, wrapGetCmsWithMessaging } from './chunk-NUXR7BUG.js';
4
4
  export { deductInventoryForConfirmedOrder, mergeInventoryLines, orderInventorySnapshotFromRow, orderStatusHoldsStock, reconcileOrderInventoryBetweenSnapshots, restoreInventoryForCancelledOrder, validateInventoryForConfirmedOrderLines, validateInventoryForOrderBecomingConfirmed } from './chunk-3K5AIEIZ.js';
5
- import { parseEmailRecipientsFromConfig } from './chunk-IPDHT2UV.js';
6
- export { EmailService, buildEventOrderTemplateVariables, emailPlugin, emailTemplates, initWhatsappTriggerDispatcher, joinRecipientsForSend, parseEmailRecipientsFromConfig, queueWhatsApp, registerWhatsAppQueueProcessor, renderEmail, renderLayout, resendOrderNotification, serializeEmailRecipients } from './chunk-IPDHT2UV.js';
5
+ import { parseEmailRecipientsFromConfig } from './chunk-CTXBYO2J.js';
6
+ export { EmailService, buildEventOrderTemplateVariables, emailPlugin, emailTemplates, initWhatsappTriggerDispatcher, joinRecipientsForSend, parseEmailRecipientsFromConfig, queueWhatsApp, registerWhatsAppQueueProcessor, renderEmail, renderLayout, resendOrderNotification, serializeEmailRecipients } from './chunk-CTXBYO2J.js';
7
7
  export { KNOWN_NOTIFICATION_TRIGGERS, notificationTriggerEmitter } from './chunk-HCIRL37O.js';
8
8
  import './chunk-JXF23MPG.js';
9
9
  import { queueOrderPlacedEmails } from './chunk-L3525VXI.js';
@@ -2253,6 +2253,21 @@ async function sendOrderPlacedEmailsAfterConfirmation(orderId, deps) {
2253
2253
  hsn: r.hsn && String(r.hsn).trim() ? r.hsn : void 0
2254
2254
  };
2255
2255
  });
2256
+ const attendeeEmails = /* @__PURE__ */ new Set();
2257
+ try {
2258
+ const rows = await ds.query(`SELECT DISTINCT email FROM order_attendees WHERE "orderId" = $1 AND email IS NOT NULL AND TRIM(email) != ''`, [
2259
+ orderId
2260
+ ]).catch(() => []);
2261
+ if (Array.isArray(rows)) {
2262
+ for (const r of rows) {
2263
+ const e = String(r.email ?? "").trim().toLowerCase();
2264
+ if (e && e !== customerEmail?.toLowerCase()) {
2265
+ attendeeEmails.add(e);
2266
+ }
2267
+ }
2268
+ }
2269
+ } catch {
2270
+ }
2256
2271
  const [branding, emailSettings] = await Promise.all([
2257
2272
  getSettingsGroup(deps, "branding"),
2258
2273
  getSettingsGroup(deps, "email")
@@ -2260,21 +2275,40 @@ async function sendOrderPlacedEmailsAfterConfirmation(orderId, deps) {
2260
2275
  const companyDetails = mergeEmailLayoutCompanyDetails(branding, emailSettings);
2261
2276
  const salesTeamEmails = parseEmailRecipientsFromConfig(emailSettings.salesTeamEmails ?? emailSettings.salesTeamEmail);
2262
2277
  const cms = await deps.getCms();
2263
- await queueOrderPlacedEmails(cms, {
2264
- orderId,
2265
- orderNumber: o.orderNumber,
2266
- total: o.total,
2267
- subtotal: o.subtotal,
2268
- tax: o.tax,
2269
- currency: o.currency,
2270
- customerName,
2271
- customerEmail,
2272
- salesTeamEmails,
2273
- companyDetails,
2274
- lineItems,
2275
- billingAddress: addrToRecord2(o.billingAddress),
2276
- shippingAddress: addrToRecord2(o.shippingAddress)
2277
- });
2278
+ if (customerEmail) {
2279
+ await queueOrderPlacedEmails(cms, {
2280
+ orderId,
2281
+ orderNumber: o.orderNumber,
2282
+ total: o.total,
2283
+ subtotal: o.subtotal,
2284
+ tax: o.tax,
2285
+ currency: o.currency,
2286
+ customerName,
2287
+ customerEmail,
2288
+ salesTeamEmails,
2289
+ companyDetails,
2290
+ lineItems,
2291
+ billingAddress: addrToRecord2(o.billingAddress),
2292
+ shippingAddress: addrToRecord2(o.shippingAddress)
2293
+ });
2294
+ }
2295
+ for (const attendeeEmail of attendeeEmails) {
2296
+ await queueOrderPlacedEmails(cms, {
2297
+ orderId,
2298
+ orderNumber: o.orderNumber,
2299
+ total: o.total,
2300
+ subtotal: o.subtotal,
2301
+ tax: o.tax,
2302
+ currency: o.currency,
2303
+ customerName: void 0,
2304
+ customerEmail: attendeeEmail,
2305
+ salesTeamEmails: [],
2306
+ companyDetails,
2307
+ lineItems,
2308
+ billingAddress: addrToRecord2(o.billingAddress),
2309
+ shippingAddress: addrToRecord2(o.shippingAddress)
2310
+ });
2311
+ }
2278
2312
  } catch {
2279
2313
  }
2280
2314
  }
@@ -1,4 +1,4 @@
1
- export { getSettingsGroup, initWhatsappTriggerDispatcher, resendOrderNotification } from './chunk-IPDHT2UV.js';
1
+ export { getSettingsGroup, initWhatsappTriggerDispatcher, resendOrderNotification } from './chunk-CTXBYO2J.js';
2
2
  import './chunk-HCIRL37O.js';
3
3
  import './chunk-L3525VXI.js';
4
4
  import './chunk-2KUCQVAQ.js';
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var chunkUUWAUHUW_cjs = require('./chunk-UUWAUHUW.cjs');
3
+ var chunkJN4AFHZ4_cjs = require('./chunk-JN4AFHZ4.cjs');
4
4
  require('./chunk-UCKN4BBY.cjs');
5
5
  require('./chunk-V25RDUOU.cjs');
6
6
  require('./chunk-BXYZDMTZ.cjs');
@@ -12,13 +12,13 @@ require('./chunk-USNT2KNT.cjs');
12
12
 
13
13
  Object.defineProperty(exports, "getSettingsGroup", {
14
14
  enumerable: true,
15
- get: function () { return chunkUUWAUHUW_cjs.getSettingsGroup; }
15
+ get: function () { return chunkJN4AFHZ4_cjs.getSettingsGroup; }
16
16
  });
17
17
  Object.defineProperty(exports, "initWhatsappTriggerDispatcher", {
18
18
  enumerable: true,
19
- get: function () { return chunkUUWAUHUW_cjs.initWhatsappTriggerDispatcher; }
19
+ get: function () { return chunkJN4AFHZ4_cjs.initWhatsappTriggerDispatcher; }
20
20
  });
21
21
  Object.defineProperty(exports, "resendOrderNotification", {
22
22
  enumerable: true,
23
- get: function () { return chunkUUWAUHUW_cjs.resendOrderNotification; }
23
+ get: function () { return chunkJN4AFHZ4_cjs.resendOrderNotification; }
24
24
  });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@infuro/cms-core",
3
- "version": "1.0.50",
3
+ "version": "1.0.51",
4
4
  "private": false,
5
5
  "type": "module",
6
6
  "main": "./dist/index.cjs",