@infuro/cms-core 1.0.47 → 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/README.md +30 -16
- package/dist/admin.cjs +2012 -437
- package/dist/admin.d.cts +13 -1
- package/dist/admin.d.ts +13 -1
- package/dist/admin.js +2013 -438
- package/dist/api.cjs +37 -37
- package/dist/api.js +5 -5
- package/dist/auth.cjs +52 -23
- package/dist/auth.d.cts +101 -2
- package/dist/auth.d.ts +101 -2
- package/dist/auth.js +3 -2
- package/dist/chunk-3EOM4V2M.cjs +452 -0
- package/dist/{chunk-2HU5R2JE.js → chunk-AYERBA7I.js} +1 -7
- package/dist/{chunk-YXH2UUEZ.js → chunk-CTXBYO2J.js} +290 -59
- package/dist/{chunk-LMJ7RKPF.cjs → chunk-JN4AFHZ4.cjs} +311 -59
- package/dist/{chunk-JE22VP6S.js → chunk-MXIWUFBP.js} +1 -1
- package/dist/{chunk-W42UZLQO.js → chunk-NUXR7BUG.js} +2819 -2597
- package/dist/chunk-RK5ETF2I.js +434 -0
- package/dist/{chunk-4PMK3RNA.cjs → chunk-TJ2MIQUT.cjs} +1 -7
- package/dist/{chunk-KOTXDSQB.cjs → chunk-UQWZUZ5X.cjs} +1 -1
- package/dist/{chunk-YC4NUZCS.js → chunk-WRKV6MHB.js} +414 -2
- package/dist/{chunk-XUCKZPML.cjs → chunk-YOW457RA.cjs} +2872 -2657
- package/dist/{chunk-Q3HQEM4R.cjs → chunk-YV5PK4JW.cjs} +421 -1
- package/dist/cli.cjs +13 -22
- package/dist/cli.js +13 -22
- package/dist/{emit-order-notification-trigger-6XX7LSC4.js → emit-order-notification-trigger-HZQPPSFB.js} +1 -1
- package/dist/{emit-order-notification-trigger-NASG7ZEO.cjs → emit-order-notification-trigger-NR3VN6C6.cjs} +3 -3
- package/dist/{event-order-defaults-7Z3UZOEH.cjs → event-order-defaults-DU7V3YND.cjs} +9 -9
- package/dist/{event-order-defaults-XQ3IDPD7.js → event-order-defaults-H4RT7NMR.js} +1 -1
- package/dist/index.cjs +379 -309
- package/dist/index.d.cts +136 -6
- package/dist/index.d.ts +136 -6
- package/dist/index.js +58 -24
- package/dist/migrations/1782400000000-CreateUserDeviceTokens.ts +36 -0
- package/dist/migrations/1782500000000-AddPushToOrderNotificationBindingsChannelEnum.ts +15 -0
- package/dist/{order-notification-dispatcher-6WNG24NY.js → order-notification-dispatcher-AT4IFAGL.js} +1 -1
- package/dist/{order-notification-dispatcher-6XSU3AR7.cjs → order-notification-dispatcher-YBAWDOIO.cjs} +7 -3
- package/package.json +1 -1
- package/dist/chunk-VUQFARRT.cjs +0 -182
- package/dist/chunk-ZF2RQWXB.js +0 -171
package/dist/index.js
CHANGED
|
@@ -1,10 +1,9 @@
|
|
|
1
|
-
export { emitOrderNotificationTrigger, fireOrderNotificationTrigger } from './chunk-
|
|
2
|
-
import { checkMultiVendorEnabled, loadUserVendorContext, getPublicSettingsGroup, BlogGeneratorService } from './chunk-
|
|
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, 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, 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,
|
|
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
|
-
|
|
6
|
-
|
|
7
|
-
export { EmailService, buildEventOrderTemplateVariables, emailPlugin, emailTemplates, initWhatsappTriggerDispatcher, joinRecipientsForSend, parseEmailRecipientsFromConfig, queueWhatsApp, registerWhatsAppQueueProcessor, renderEmail, renderLayout, resendOrderNotification, serializeEmailRecipients } from './chunk-YXH2UUEZ.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';
|
|
8
7
|
export { KNOWN_NOTIFICATION_TRIGGERS, notificationTriggerEmitter } from './chunk-HCIRL37O.js';
|
|
9
8
|
import './chunk-JXF23MPG.js';
|
|
10
9
|
import { queueOrderPlacedEmails } from './chunk-L3525VXI.js';
|
|
@@ -13,11 +12,12 @@ import { mergeEmailLayoutCompanyDetails } from './chunk-2KUCQVAQ.js';
|
|
|
13
12
|
export { INVOICE_TEMPLATE_IDS, INVOICE_TEMPLATE_OPTIONS, buildLocalInvoicePdfForOrder, generateLocalInvoicePdf, getCompanyDetailsFromSettings, isOrderEligibleForInvoiceEmail, mergeEmailLayoutCompanyDetails, normalizeInvoiceTemplateId, resolveInvoiceAssetUrl, resolveOrderInvoicePdfBytes, streamOrderInvoicePdf } from './chunk-2KUCQVAQ.js';
|
|
14
13
|
import './chunk-MQBT33IV.js';
|
|
15
14
|
import './chunk-CRFV5WJK.js';
|
|
16
|
-
export { EVENT_ORDER_MESSAGE_TEMPLATE_DEFAULTS, EVENT_ORDER_TEMPLATE_KEY, EVENT_ORDER_TEMPLATE_VARIABLES, resolveEventOrderTemplate } from './chunk-
|
|
15
|
+
export { EVENT_ORDER_MESSAGE_TEMPLATE_DEFAULTS, EVENT_ORDER_TEMPLATE_KEY, EVENT_ORDER_TEMPLATE_VARIABLES, resolveEventOrderTemplate } from './chunk-AYERBA7I.js';
|
|
17
16
|
import { PgBossService } from './chunk-GO7PPYNU.js';
|
|
18
17
|
export { JOB_RUNNER_QUEUE, PgBossService } from './chunk-GO7PPYNU.js';
|
|
19
|
-
export { createCmsMiddleware, defaultPublicApiMethods, getNextAuthOptions, getStorefrontNextAuthOptions, isAuthDebugClientEnabled, isAuthDebugEnabled, logAuth, logAuthClient, nextAuthCookieDebugInfo, seedAdministratorPermissions, summarizeSessionUserForLog } from './chunk-
|
|
20
|
-
export { OPEN_ENDPOINTS, PERMISSION_REQUIRED_ENDPOINTS, RBAC_ADMIN_ONLY_ENTITIES, canManageRoles, createAuthHelpers, createCmsAuthBundle, getRequiredPermission, isOpenEndpoint, isPublicMethod, sessionHasEntityAccess } from './chunk-
|
|
18
|
+
export { AUTH_PROVIDERS_SETTINGS_GROUP, buildNextAuthOptions, buildStorefrontNextAuthOptions, createCmsMiddleware, createCustomerUserFromGoogleOAuth, defaultPublicApiMethods, getNextAuthOptions, getStorefrontNextAuthOptions, googleOAuthRedirectUri, isAuthDebugClientEnabled, isAuthDebugEnabled, isGoogleAuthPubliclyEnabled, logAuth, logAuthClient, nextAuthCookieDebugInfo, resolveGoogleAuthConfig, seedAdministratorPermissions, summarizeSessionUserForLog } from './chunk-WRKV6MHB.js';
|
|
19
|
+
export { OPEN_ENDPOINTS, PERMISSION_REQUIRED_ENDPOINTS, RBAC_ADMIN_ONLY_ENTITIES, canManageRoles, createAuthHelpers, createCmsAuthBundle, customerPhoneForEmail, customerPhoneForUser, ensureCustomerForUser, ensureCustomerRecord, getRequiredPermission, isOpenEndpoint, isPublicMethod, isSyntheticCustomerPhone, linkUnclaimedContactToUser, normalizeCustomerPhone, sessionHasEntityAccess } from './chunk-RK5ETF2I.js';
|
|
20
|
+
export { activeUniqueValueExists, retireSoftDeletedUniqueValue } from './chunk-DBPSJYLZ.js';
|
|
21
21
|
import { isSuperAdmin, isVendorGroupName } from './chunk-JIWUVQ6B.js';
|
|
22
22
|
export { ADMIN_GROUP_NAME, SUPER_ADMIN_GROUP_ID, VENDOR_ADMIN_GROUP_ID, VENDOR_GROUP_NAME, VENDOR_OWNER_GROUP_NAME, VENDOR_SCOPED_STORE_ENTITIES, VENDOR_STORE_RBAC_ENTITIES, canManageVendorRoles, canManageVendorTeam, canOnboardVendors, explainSessionEntityAccess, getPermissionableEntityKeys, hasEntityPermission, isPlatformAdministrator, isRbacDebugEnabled, isSuperAdmin, isSuperAdminGroupName, isVendorAdmin, isVendorGroupName, isVendorOwner, isVendorPortalUser, isVendorStaff, logEntityAccessDecision, logRbac, permissionRowsToRecord, resolveVendorScopeFromSessionUser, summarizeEntityPerms, vendorPortalFlagsFromUser } from './chunk-JIWUVQ6B.js';
|
|
23
23
|
export { queueErpPaidOrderForOrderId } from './chunk-TDV6EJHV.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
|
-
|
|
2264
|
-
|
|
2265
|
-
|
|
2266
|
-
|
|
2267
|
-
|
|
2268
|
-
|
|
2269
|
-
|
|
2270
|
-
|
|
2271
|
-
|
|
2272
|
-
|
|
2273
|
-
|
|
2274
|
-
|
|
2275
|
-
|
|
2276
|
-
|
|
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
|
}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import type { MigrationInterface, QueryRunner } from 'typeorm';
|
|
2
|
+
|
|
3
|
+
export class CreateUserDeviceTokens1782400000000 implements MigrationInterface {
|
|
4
|
+
name = 'CreateUserDeviceTokens1782400000000';
|
|
5
|
+
|
|
6
|
+
public async up(queryRunner: QueryRunner): Promise<void> {
|
|
7
|
+
await queryRunner.query(`
|
|
8
|
+
DO $$ BEGIN
|
|
9
|
+
CREATE TYPE "user_device_tokens_platform_enum" AS ENUM ('android', 'ios');
|
|
10
|
+
EXCEPTION WHEN duplicate_object THEN NULL; END $$;
|
|
11
|
+
`);
|
|
12
|
+
|
|
13
|
+
await queryRunner.query(`
|
|
14
|
+
CREATE TABLE IF NOT EXISTS "user_device_tokens" (
|
|
15
|
+
"id" uuid NOT NULL DEFAULT gen_random_uuid(),
|
|
16
|
+
"vendor_id" uuid NOT NULL,
|
|
17
|
+
"user_id" uuid NOT NULL,
|
|
18
|
+
"token" text NOT NULL,
|
|
19
|
+
"platform" "user_device_tokens_platform_enum" NOT NULL,
|
|
20
|
+
"device_id" character varying(255),
|
|
21
|
+
"app_version" character varying(50),
|
|
22
|
+
"is_active" boolean NOT NULL DEFAULT true,
|
|
23
|
+
"last_used_at" TIMESTAMP NULL,
|
|
24
|
+
"created_at" TIMESTAMP NOT NULL DEFAULT NOW(),
|
|
25
|
+
"updated_at" TIMESTAMP NOT NULL DEFAULT NOW(),
|
|
26
|
+
CONSTRAINT "PK_user_device_tokens" PRIMARY KEY ("id"),
|
|
27
|
+
CONSTRAINT "uq_user_device_token" UNIQUE ("user_id", "token")
|
|
28
|
+
)
|
|
29
|
+
`);
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
public async down(queryRunner: QueryRunner): Promise<void> {
|
|
33
|
+
await queryRunner.query(`DROP TABLE IF EXISTS "user_device_tokens"`);
|
|
34
|
+
await queryRunner.query(`DROP TYPE IF EXISTS "user_device_tokens_platform_enum"`);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { MigrationInterface, QueryRunner } from 'typeorm';
|
|
2
|
+
|
|
3
|
+
export class AddMobileToOrderNotificationBindingsChannelEnum1782500000000 implements MigrationInterface {
|
|
4
|
+
name = 'AddMobileToOrderNotificationBindingsChannelEnum1782500000000';
|
|
5
|
+
|
|
6
|
+
public async up(queryRunner: QueryRunner): Promise<void> {
|
|
7
|
+
await queryRunner.query(`
|
|
8
|
+
ALTER TYPE "order_notification_bindings_channel_enum" ADD VALUE IF NOT EXISTS 'mobile';
|
|
9
|
+
`);
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
public async down(queryRunner: QueryRunner): Promise<void> {
|
|
13
|
+
/* Postgres ENUM values cannot be safely removed once added */
|
|
14
|
+
}
|
|
15
|
+
}
|
package/dist/{order-notification-dispatcher-6WNG24NY.js → order-notification-dispatcher-AT4IFAGL.js}
RENAMED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { initWhatsappTriggerDispatcher, resendOrderNotification } from './chunk-
|
|
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
|
|
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');
|
|
@@ -10,11 +10,15 @@ require('./chunk-USNT2KNT.cjs');
|
|
|
10
10
|
|
|
11
11
|
|
|
12
12
|
|
|
13
|
+
Object.defineProperty(exports, "getSettingsGroup", {
|
|
14
|
+
enumerable: true,
|
|
15
|
+
get: function () { return chunkJN4AFHZ4_cjs.getSettingsGroup; }
|
|
16
|
+
});
|
|
13
17
|
Object.defineProperty(exports, "initWhatsappTriggerDispatcher", {
|
|
14
18
|
enumerable: true,
|
|
15
|
-
get: function () { return
|
|
19
|
+
get: function () { return chunkJN4AFHZ4_cjs.initWhatsappTriggerDispatcher; }
|
|
16
20
|
});
|
|
17
21
|
Object.defineProperty(exports, "resendOrderNotification", {
|
|
18
22
|
enumerable: true,
|
|
19
|
-
get: function () { return
|
|
23
|
+
get: function () { return chunkJN4AFHZ4_cjs.resendOrderNotification; }
|
|
20
24
|
});
|
package/package.json
CHANGED
package/dist/chunk-VUQFARRT.cjs
DELETED
|
@@ -1,182 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
var chunk77NUXO6A_cjs = require('./chunk-77NUXO6A.cjs');
|
|
4
|
-
var chunkUSNT2KNT_cjs = require('./chunk-USNT2KNT.cjs');
|
|
5
|
-
|
|
6
|
-
// src/auth/helpers.ts
|
|
7
|
-
var RBAC_ADMIN_ONLY_ENTITIES = /* @__PURE__ */ new Set([
|
|
8
|
-
"users",
|
|
9
|
-
"user_groups",
|
|
10
|
-
"permissions"
|
|
11
|
-
]);
|
|
12
|
-
function sessionHasEntityAccess(user, entity, action) {
|
|
13
|
-
return chunk77NUXO6A_cjs.explainSessionEntityAccess(user, entity, action).allowed;
|
|
14
|
-
}
|
|
15
|
-
chunkUSNT2KNT_cjs.__name(sessionHasEntityAccess, "sessionHasEntityAccess");
|
|
16
|
-
function canManageRoles(user) {
|
|
17
|
-
return !!(user?.email && user.isRBACAdmin);
|
|
18
|
-
}
|
|
19
|
-
chunkUSNT2KNT_cjs.__name(canManageRoles, "canManageRoles");
|
|
20
|
-
var OPEN_ENDPOINTS = [
|
|
21
|
-
{
|
|
22
|
-
"/api/contacts": [
|
|
23
|
-
"POST"
|
|
24
|
-
]
|
|
25
|
-
},
|
|
26
|
-
{
|
|
27
|
-
"/api/form-submissions": [
|
|
28
|
-
"POST"
|
|
29
|
-
]
|
|
30
|
-
},
|
|
31
|
-
{
|
|
32
|
-
"/api/blogs": [
|
|
33
|
-
"GET"
|
|
34
|
-
]
|
|
35
|
-
}
|
|
36
|
-
];
|
|
37
|
-
var PERMISSION_REQUIRED_ENDPOINTS = {};
|
|
38
|
-
function isOpenEndpoint(pathname) {
|
|
39
|
-
return OPEN_ENDPOINTS.some((endpoint) => pathname.startsWith(Object.keys(endpoint)[0]));
|
|
40
|
-
}
|
|
41
|
-
chunkUSNT2KNT_cjs.__name(isOpenEndpoint, "isOpenEndpoint");
|
|
42
|
-
function getRequiredPermission(pathname) {
|
|
43
|
-
return null;
|
|
44
|
-
}
|
|
45
|
-
chunkUSNT2KNT_cjs.__name(getRequiredPermission, "getRequiredPermission");
|
|
46
|
-
function isPublicMethod(pathname, method) {
|
|
47
|
-
for (const endpoint of OPEN_ENDPOINTS) {
|
|
48
|
-
const key = Object.keys(endpoint)[0];
|
|
49
|
-
if (pathname.startsWith(key) && endpoint[key].includes(method)) return true;
|
|
50
|
-
}
|
|
51
|
-
return false;
|
|
52
|
-
}
|
|
53
|
-
chunkUSNT2KNT_cjs.__name(isPublicMethod, "isPublicMethod");
|
|
54
|
-
function createAuthHelpers(getSession, NextResponse) {
|
|
55
|
-
return createAuthHelpersFromGetSession(getSession, NextResponse);
|
|
56
|
-
}
|
|
57
|
-
chunkUSNT2KNT_cjs.__name(createAuthHelpers, "createAuthHelpers");
|
|
58
|
-
function createCmsAuthBundle(getSession, NextResponse) {
|
|
59
|
-
const auth = createAuthHelpers(getSession, NextResponse);
|
|
60
|
-
return {
|
|
61
|
-
requireAuth: auth.requireAuth,
|
|
62
|
-
requireAdminAccess: auth.requireAdminAccess,
|
|
63
|
-
requireEntityPermission: auth.requireEntityPermission,
|
|
64
|
-
getSessionUser: auth.getAuthenticatedUser,
|
|
65
|
-
getAuthenticatedUser: auth.getAuthenticatedUser
|
|
66
|
-
};
|
|
67
|
-
}
|
|
68
|
-
chunkUSNT2KNT_cjs.__name(createCmsAuthBundle, "createCmsAuthBundle");
|
|
69
|
-
function createAuthHelpersFromGetSession(getSession, NextResponse) {
|
|
70
|
-
return {
|
|
71
|
-
async requireAuth(_req) {
|
|
72
|
-
const session = await getSession();
|
|
73
|
-
if (!session?.user?.email) {
|
|
74
|
-
return NextResponse.json({
|
|
75
|
-
error: "Unauthorized"
|
|
76
|
-
}, {
|
|
77
|
-
status: 401
|
|
78
|
-
});
|
|
79
|
-
}
|
|
80
|
-
return null;
|
|
81
|
-
},
|
|
82
|
-
async requirePermission(_req, _permission) {
|
|
83
|
-
const session = await getSession();
|
|
84
|
-
if (!session?.user?.email) {
|
|
85
|
-
return NextResponse.json({
|
|
86
|
-
error: "Unauthorized"
|
|
87
|
-
}, {
|
|
88
|
-
status: 401
|
|
89
|
-
});
|
|
90
|
-
}
|
|
91
|
-
return null;
|
|
92
|
-
},
|
|
93
|
-
async requireEntityPermission(_req, entity, action) {
|
|
94
|
-
const session = await getSession();
|
|
95
|
-
if (!session?.user?.email) {
|
|
96
|
-
return NextResponse.json({
|
|
97
|
-
error: "Unauthorized"
|
|
98
|
-
}, {
|
|
99
|
-
status: 401
|
|
100
|
-
});
|
|
101
|
-
}
|
|
102
|
-
const u = session.user;
|
|
103
|
-
const allowed = sessionHasEntityAccess(u, entity, action);
|
|
104
|
-
const { reason } = chunk77NUXO6A_cjs.explainSessionEntityAccess(u, entity, action);
|
|
105
|
-
chunk77NUXO6A_cjs.logRbac("authHelpers.requireEntityPermission", {
|
|
106
|
-
entity,
|
|
107
|
-
action,
|
|
108
|
-
allowed,
|
|
109
|
-
reason,
|
|
110
|
-
email: u.email,
|
|
111
|
-
groupName: u.groupName,
|
|
112
|
-
vendorIds: u.vendorIds,
|
|
113
|
-
isVendorPortal: u.isVendorPortal,
|
|
114
|
-
isVendorOwner: u.isVendorOwner
|
|
115
|
-
});
|
|
116
|
-
if (allowed) return null;
|
|
117
|
-
return NextResponse.json({
|
|
118
|
-
error: "Forbidden",
|
|
119
|
-
entity,
|
|
120
|
-
action,
|
|
121
|
-
reason
|
|
122
|
-
}, {
|
|
123
|
-
status: 403
|
|
124
|
-
});
|
|
125
|
-
},
|
|
126
|
-
async requireAdminAccess(_req) {
|
|
127
|
-
const session = await getSession();
|
|
128
|
-
if (!session?.user?.email) {
|
|
129
|
-
return NextResponse.json({
|
|
130
|
-
error: "Unauthorized"
|
|
131
|
-
}, {
|
|
132
|
-
status: 401
|
|
133
|
-
});
|
|
134
|
-
}
|
|
135
|
-
const u = session.user;
|
|
136
|
-
if (u.isRBACAdmin) return null;
|
|
137
|
-
if (chunk77NUXO6A_cjs.isVendorPortalUser(u)) return null;
|
|
138
|
-
if (u.adminAccess === true) return null;
|
|
139
|
-
if (u.adminAccess === false) {
|
|
140
|
-
chunk77NUXO6A_cjs.logRbac("requireAdminAccess denied (adminAccess:false)", {
|
|
141
|
-
email: u.email,
|
|
142
|
-
groupName: u.groupName,
|
|
143
|
-
isVendorPortal: u.isVendorPortal
|
|
144
|
-
});
|
|
145
|
-
return NextResponse.json({
|
|
146
|
-
error: "Forbidden",
|
|
147
|
-
reason: "admin_access"
|
|
148
|
-
}, {
|
|
149
|
-
status: 403
|
|
150
|
-
});
|
|
151
|
-
}
|
|
152
|
-
chunk77NUXO6A_cjs.logRbac("requireAdminAccess denied (no matching rule)", {
|
|
153
|
-
email: u.email,
|
|
154
|
-
adminAccess: u.adminAccess,
|
|
155
|
-
groupName: u.groupName,
|
|
156
|
-
isVendorPortal: u.isVendorPortal
|
|
157
|
-
});
|
|
158
|
-
return NextResponse.json({
|
|
159
|
-
error: "Forbidden",
|
|
160
|
-
reason: "admin_access"
|
|
161
|
-
}, {
|
|
162
|
-
status: 403
|
|
163
|
-
});
|
|
164
|
-
},
|
|
165
|
-
async getAuthenticatedUser() {
|
|
166
|
-
const session = await getSession();
|
|
167
|
-
return session?.user ?? null;
|
|
168
|
-
}
|
|
169
|
-
};
|
|
170
|
-
}
|
|
171
|
-
chunkUSNT2KNT_cjs.__name(createAuthHelpersFromGetSession, "createAuthHelpersFromGetSession");
|
|
172
|
-
|
|
173
|
-
exports.OPEN_ENDPOINTS = OPEN_ENDPOINTS;
|
|
174
|
-
exports.PERMISSION_REQUIRED_ENDPOINTS = PERMISSION_REQUIRED_ENDPOINTS;
|
|
175
|
-
exports.RBAC_ADMIN_ONLY_ENTITIES = RBAC_ADMIN_ONLY_ENTITIES;
|
|
176
|
-
exports.canManageRoles = canManageRoles;
|
|
177
|
-
exports.createAuthHelpers = createAuthHelpers;
|
|
178
|
-
exports.createCmsAuthBundle = createCmsAuthBundle;
|
|
179
|
-
exports.getRequiredPermission = getRequiredPermission;
|
|
180
|
-
exports.isOpenEndpoint = isOpenEndpoint;
|
|
181
|
-
exports.isPublicMethod = isPublicMethod;
|
|
182
|
-
exports.sessionHasEntityAccess = sessionHasEntityAccess;
|
package/dist/chunk-ZF2RQWXB.js
DELETED
|
@@ -1,171 +0,0 @@
|
|
|
1
|
-
import { explainSessionEntityAccess, isVendorPortalUser, logRbac } from './chunk-JIWUVQ6B.js';
|
|
2
|
-
import { __name } from './chunk-SHUYVCID.js';
|
|
3
|
-
|
|
4
|
-
// src/auth/helpers.ts
|
|
5
|
-
var RBAC_ADMIN_ONLY_ENTITIES = /* @__PURE__ */ new Set([
|
|
6
|
-
"users",
|
|
7
|
-
"user_groups",
|
|
8
|
-
"permissions"
|
|
9
|
-
]);
|
|
10
|
-
function sessionHasEntityAccess(user, entity, action) {
|
|
11
|
-
return explainSessionEntityAccess(user, entity, action).allowed;
|
|
12
|
-
}
|
|
13
|
-
__name(sessionHasEntityAccess, "sessionHasEntityAccess");
|
|
14
|
-
function canManageRoles(user) {
|
|
15
|
-
return !!(user?.email && user.isRBACAdmin);
|
|
16
|
-
}
|
|
17
|
-
__name(canManageRoles, "canManageRoles");
|
|
18
|
-
var OPEN_ENDPOINTS = [
|
|
19
|
-
{
|
|
20
|
-
"/api/contacts": [
|
|
21
|
-
"POST"
|
|
22
|
-
]
|
|
23
|
-
},
|
|
24
|
-
{
|
|
25
|
-
"/api/form-submissions": [
|
|
26
|
-
"POST"
|
|
27
|
-
]
|
|
28
|
-
},
|
|
29
|
-
{
|
|
30
|
-
"/api/blogs": [
|
|
31
|
-
"GET"
|
|
32
|
-
]
|
|
33
|
-
}
|
|
34
|
-
];
|
|
35
|
-
var PERMISSION_REQUIRED_ENDPOINTS = {};
|
|
36
|
-
function isOpenEndpoint(pathname) {
|
|
37
|
-
return OPEN_ENDPOINTS.some((endpoint) => pathname.startsWith(Object.keys(endpoint)[0]));
|
|
38
|
-
}
|
|
39
|
-
__name(isOpenEndpoint, "isOpenEndpoint");
|
|
40
|
-
function getRequiredPermission(pathname) {
|
|
41
|
-
return null;
|
|
42
|
-
}
|
|
43
|
-
__name(getRequiredPermission, "getRequiredPermission");
|
|
44
|
-
function isPublicMethod(pathname, method) {
|
|
45
|
-
for (const endpoint of OPEN_ENDPOINTS) {
|
|
46
|
-
const key = Object.keys(endpoint)[0];
|
|
47
|
-
if (pathname.startsWith(key) && endpoint[key].includes(method)) return true;
|
|
48
|
-
}
|
|
49
|
-
return false;
|
|
50
|
-
}
|
|
51
|
-
__name(isPublicMethod, "isPublicMethod");
|
|
52
|
-
function createAuthHelpers(getSession, NextResponse) {
|
|
53
|
-
return createAuthHelpersFromGetSession(getSession, NextResponse);
|
|
54
|
-
}
|
|
55
|
-
__name(createAuthHelpers, "createAuthHelpers");
|
|
56
|
-
function createCmsAuthBundle(getSession, NextResponse) {
|
|
57
|
-
const auth = createAuthHelpers(getSession, NextResponse);
|
|
58
|
-
return {
|
|
59
|
-
requireAuth: auth.requireAuth,
|
|
60
|
-
requireAdminAccess: auth.requireAdminAccess,
|
|
61
|
-
requireEntityPermission: auth.requireEntityPermission,
|
|
62
|
-
getSessionUser: auth.getAuthenticatedUser,
|
|
63
|
-
getAuthenticatedUser: auth.getAuthenticatedUser
|
|
64
|
-
};
|
|
65
|
-
}
|
|
66
|
-
__name(createCmsAuthBundle, "createCmsAuthBundle");
|
|
67
|
-
function createAuthHelpersFromGetSession(getSession, NextResponse) {
|
|
68
|
-
return {
|
|
69
|
-
async requireAuth(_req) {
|
|
70
|
-
const session = await getSession();
|
|
71
|
-
if (!session?.user?.email) {
|
|
72
|
-
return NextResponse.json({
|
|
73
|
-
error: "Unauthorized"
|
|
74
|
-
}, {
|
|
75
|
-
status: 401
|
|
76
|
-
});
|
|
77
|
-
}
|
|
78
|
-
return null;
|
|
79
|
-
},
|
|
80
|
-
async requirePermission(_req, _permission) {
|
|
81
|
-
const session = await getSession();
|
|
82
|
-
if (!session?.user?.email) {
|
|
83
|
-
return NextResponse.json({
|
|
84
|
-
error: "Unauthorized"
|
|
85
|
-
}, {
|
|
86
|
-
status: 401
|
|
87
|
-
});
|
|
88
|
-
}
|
|
89
|
-
return null;
|
|
90
|
-
},
|
|
91
|
-
async requireEntityPermission(_req, entity, action) {
|
|
92
|
-
const session = await getSession();
|
|
93
|
-
if (!session?.user?.email) {
|
|
94
|
-
return NextResponse.json({
|
|
95
|
-
error: "Unauthorized"
|
|
96
|
-
}, {
|
|
97
|
-
status: 401
|
|
98
|
-
});
|
|
99
|
-
}
|
|
100
|
-
const u = session.user;
|
|
101
|
-
const allowed = sessionHasEntityAccess(u, entity, action);
|
|
102
|
-
const { reason } = explainSessionEntityAccess(u, entity, action);
|
|
103
|
-
logRbac("authHelpers.requireEntityPermission", {
|
|
104
|
-
entity,
|
|
105
|
-
action,
|
|
106
|
-
allowed,
|
|
107
|
-
reason,
|
|
108
|
-
email: u.email,
|
|
109
|
-
groupName: u.groupName,
|
|
110
|
-
vendorIds: u.vendorIds,
|
|
111
|
-
isVendorPortal: u.isVendorPortal,
|
|
112
|
-
isVendorOwner: u.isVendorOwner
|
|
113
|
-
});
|
|
114
|
-
if (allowed) return null;
|
|
115
|
-
return NextResponse.json({
|
|
116
|
-
error: "Forbidden",
|
|
117
|
-
entity,
|
|
118
|
-
action,
|
|
119
|
-
reason
|
|
120
|
-
}, {
|
|
121
|
-
status: 403
|
|
122
|
-
});
|
|
123
|
-
},
|
|
124
|
-
async requireAdminAccess(_req) {
|
|
125
|
-
const session = await getSession();
|
|
126
|
-
if (!session?.user?.email) {
|
|
127
|
-
return NextResponse.json({
|
|
128
|
-
error: "Unauthorized"
|
|
129
|
-
}, {
|
|
130
|
-
status: 401
|
|
131
|
-
});
|
|
132
|
-
}
|
|
133
|
-
const u = session.user;
|
|
134
|
-
if (u.isRBACAdmin) return null;
|
|
135
|
-
if (isVendorPortalUser(u)) return null;
|
|
136
|
-
if (u.adminAccess === true) return null;
|
|
137
|
-
if (u.adminAccess === false) {
|
|
138
|
-
logRbac("requireAdminAccess denied (adminAccess:false)", {
|
|
139
|
-
email: u.email,
|
|
140
|
-
groupName: u.groupName,
|
|
141
|
-
isVendorPortal: u.isVendorPortal
|
|
142
|
-
});
|
|
143
|
-
return NextResponse.json({
|
|
144
|
-
error: "Forbidden",
|
|
145
|
-
reason: "admin_access"
|
|
146
|
-
}, {
|
|
147
|
-
status: 403
|
|
148
|
-
});
|
|
149
|
-
}
|
|
150
|
-
logRbac("requireAdminAccess denied (no matching rule)", {
|
|
151
|
-
email: u.email,
|
|
152
|
-
adminAccess: u.adminAccess,
|
|
153
|
-
groupName: u.groupName,
|
|
154
|
-
isVendorPortal: u.isVendorPortal
|
|
155
|
-
});
|
|
156
|
-
return NextResponse.json({
|
|
157
|
-
error: "Forbidden",
|
|
158
|
-
reason: "admin_access"
|
|
159
|
-
}, {
|
|
160
|
-
status: 403
|
|
161
|
-
});
|
|
162
|
-
},
|
|
163
|
-
async getAuthenticatedUser() {
|
|
164
|
-
const session = await getSession();
|
|
165
|
-
return session?.user ?? null;
|
|
166
|
-
}
|
|
167
|
-
};
|
|
168
|
-
}
|
|
169
|
-
__name(createAuthHelpersFromGetSession, "createAuthHelpersFromGetSession");
|
|
170
|
-
|
|
171
|
-
export { OPEN_ENDPOINTS, PERMISSION_REQUIRED_ENDPOINTS, RBAC_ADMIN_ONLY_ENTITIES, canManageRoles, createAuthHelpers, createCmsAuthBundle, getRequiredPermission, isOpenEndpoint, isPublicMethod, sessionHasEntityAccess };
|