@hszrdm/core 1.1.0 → 1.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.medusa/server/src/admin/index.js +4041 -2995
- package/.medusa/server/src/admin/index.mjs +4043 -2997
- package/.medusa/server/src/api/admin/ai-translations/apply/route.d.ts +11 -0
- package/.medusa/server/src/api/admin/ai-translations/apply/route.js +102 -0
- package/.medusa/server/src/api/admin/ai-translations/preview/route.d.ts +10 -0
- package/.medusa/server/src/api/admin/ai-translations/preview/route.js +141 -0
- package/.medusa/server/src/api/admin/ai-translations/route.d.ts +2 -0
- package/.medusa/server/src/api/admin/ai-translations/route.js +19 -0
- package/.medusa/server/src/api/admin/email/preview/route.d.ts +2 -0
- package/.medusa/server/src/api/admin/email/preview/route.js +20 -0
- package/.medusa/server/src/api/admin/email/templates/[id]/route.d.ts +4 -0
- package/.medusa/server/src/api/admin/email/templates/[id]/route.js +25 -0
- package/.medusa/server/src/api/admin/email/templates/route.d.ts +3 -0
- package/.medusa/server/src/api/admin/email/templates/route.js +40 -0
- package/.medusa/server/src/api/admin/email/test-send/route.d.ts +2 -0
- package/.medusa/server/src/api/admin/email/test-send/route.js +64 -0
- package/.medusa/server/src/api/admin/newsletter/campaigns/[id]/cancel/route.d.ts +2 -0
- package/.medusa/server/src/api/admin/newsletter/campaigns/[id]/cancel/route.js +15 -0
- package/.medusa/server/src/api/admin/newsletter/campaigns/[id]/route.d.ts +4 -0
- package/.medusa/server/src/api/admin/newsletter/campaigns/[id]/route.js +39 -0
- package/.medusa/server/src/api/admin/newsletter/campaigns/[id]/send/route.d.ts +2 -0
- package/.medusa/server/src/api/admin/newsletter/campaigns/[id]/send/route.js +14 -0
- package/.medusa/server/src/api/admin/newsletter/campaigns/[id]/stats/route.d.ts +2 -0
- package/.medusa/server/src/api/admin/newsletter/campaigns/[id]/stats/route.js +17 -0
- package/.medusa/server/src/api/admin/newsletter/campaigns/[id]/test-send/route.d.ts +2 -0
- package/.medusa/server/src/api/admin/newsletter/campaigns/[id]/test-send/route.js +23 -0
- package/.medusa/server/src/api/admin/newsletter/campaigns/route.d.ts +3 -0
- package/.medusa/server/src/api/admin/newsletter/campaigns/route.js +40 -0
- package/.medusa/server/src/api/admin/newsletter/subscribers/export/route.d.ts +2 -0
- package/.medusa/server/src/api/admin/newsletter/subscribers/export/route.js +74 -0
- package/.medusa/server/src/api/admin/newsletter/subscribers/route.d.ts +2 -0
- package/.medusa/server/src/api/admin/newsletter/subscribers/route.js +57 -0
- package/.medusa/server/src/api/admin/product-reviews/[id]/route.d.ts +7 -0
- package/.medusa/server/src/api/admin/product-reviews/[id]/route.js +40 -0
- package/.medusa/server/src/api/admin/product-reviews/route.d.ts +2 -0
- package/.medusa/server/src/api/admin/product-reviews/route.js +31 -0
- package/.medusa/server/src/api/hooks/email/status/route.d.ts +2 -0
- package/.medusa/server/src/api/hooks/email/status/route.js +69 -0
- package/.medusa/server/src/api/middlewares.js +9 -1
- package/.medusa/server/src/api/store/account/wishlist/[productId]/route.d.ts +2 -0
- package/.medusa/server/src/api/store/account/wishlist/[productId]/route.js +18 -0
- package/.medusa/server/src/api/store/account/wishlist/merge/route.d.ts +6 -0
- package/.medusa/server/src/api/store/account/wishlist/merge/route.js +51 -0
- package/.medusa/server/src/api/store/account/wishlist/route.d.ts +7 -0
- package/.medusa/server/src/api/store/account/wishlist/route.js +76 -0
- package/.medusa/server/src/api/store/cms/entries/[slug]/route.js +4 -4
- package/.medusa/server/src/api/store/cms/entries/route.js +4 -4
- package/.medusa/server/src/api/store/email/track/click/[token]/route.d.ts +2 -0
- package/.medusa/server/src/api/store/email/track/click/[token]/route.js +19 -0
- package/.medusa/server/src/api/store/email/track/open/[token]/route.d.ts +2 -0
- package/.medusa/server/src/api/store/email/track/open/[token]/route.js +22 -0
- package/.medusa/server/src/api/store/leads/route.js +27 -93
- package/.medusa/server/src/api/store/newsletter/config/route.d.ts +2 -0
- package/.medusa/server/src/api/store/newsletter/config/route.js +14 -0
- package/.medusa/server/src/api/store/newsletter/confirm/route.d.ts +4 -0
- package/.medusa/server/src/api/store/newsletter/confirm/route.js +52 -0
- package/.medusa/server/src/api/store/newsletter/route.d.ts +4 -0
- package/.medusa/server/src/api/store/newsletter/route.js +89 -0
- package/.medusa/server/src/api/store/newsletter/unsubscribe/route.d.ts +4 -0
- package/.medusa/server/src/api/store/newsletter/unsubscribe/route.js +54 -0
- package/.medusa/server/src/api/store/products/[id]/reviews/route.d.ts +8 -0
- package/.medusa/server/src/api/store/products/[id]/reviews/route.js +174 -0
- package/.medusa/server/src/api/store/quote-requests/route.js +41 -129
- package/.medusa/server/src/config.js +38 -15
- package/.medusa/server/src/core/ai-translation.d.ts +26 -0
- package/.medusa/server/src/core/ai-translation.js +173 -0
- package/.medusa/server/src/core/customer-email.d.ts +5 -5
- package/.medusa/server/src/core/customer-email.js +55 -109
- package/.medusa/server/src/core/transactional-email.d.ts +9 -8
- package/.medusa/server/src/core/transactional-email.js +74 -244
- package/.medusa/server/src/core/version.d.ts +2 -2
- package/.medusa/server/src/core/version.js +2 -2
- package/.medusa/server/src/jobs/email-campaign-dispatch.d.ts +6 -0
- package/.medusa/server/src/jobs/email-campaign-dispatch.js +18 -0
- package/.medusa/server/src/modules/cms/config.d.ts +2 -1
- package/.medusa/server/src/modules/cms/config.js +27 -12
- package/.medusa/server/src/modules/cms/content-types.d.ts +24 -0
- package/.medusa/server/src/modules/cms/content-types.js +27 -0
- package/.medusa/server/src/modules/cms/index.d.ts +1 -0
- package/.medusa/server/src/modules/cms/index.js +6 -2
- package/.medusa/server/src/modules/email-center/campaign.d.ts +8 -0
- package/.medusa/server/src/modules/email-center/campaign.js +193 -0
- package/.medusa/server/src/modules/email-center/constants.d.ts +1 -0
- package/.medusa/server/src/modules/email-center/constants.js +5 -0
- package/.medusa/server/src/modules/email-center/defaults.d.ts +10 -0
- package/.medusa/server/src/modules/email-center/defaults.js +49 -0
- package/.medusa/server/src/modules/email-center/index.d.ts +11 -0
- package/.medusa/server/src/modules/email-center/index.js +42 -0
- package/.medusa/server/src/modules/email-center/migrations/Migration20261030173000.d.ts +5 -0
- package/.medusa/server/src/modules/email-center/migrations/Migration20261030173000.js +25 -0
- package/.medusa/server/src/modules/email-center/models/email-campaign.d.ts +22 -0
- package/.medusa/server/src/modules/email-center/models/email-campaign.js +37 -0
- package/.medusa/server/src/modules/email-center/models/email-delivery.d.ts +21 -0
- package/.medusa/server/src/modules/email-center/models/email-delivery.js +38 -0
- package/.medusa/server/src/modules/email-center/models/email-template.d.ts +13 -0
- package/.medusa/server/src/modules/email-center/models/email-template.js +20 -0
- package/.medusa/server/src/modules/email-center/render.d.ts +31 -0
- package/.medusa/server/src/modules/email-center/render.js +92 -0
- package/.medusa/server/src/modules/email-center/send.d.ts +27 -0
- package/.medusa/server/src/modules/email-center/send.js +67 -0
- package/.medusa/server/src/modules/email-center/service.d.ts +56 -0
- package/.medusa/server/src/modules/email-center/service.js +13 -0
- package/.medusa/server/src/modules/email-center/tracking.d.ts +9 -0
- package/.medusa/server/src/modules/email-center/tracking.js +92 -0
- package/.medusa/server/src/modules/newsletter/config.d.ts +14 -0
- package/.medusa/server/src/modules/newsletter/config.js +51 -0
- package/.medusa/server/src/modules/newsletter/email.d.ts +9 -0
- package/.medusa/server/src/modules/newsletter/email.js +38 -0
- package/.medusa/server/src/modules/newsletter/events.d.ts +10 -0
- package/.medusa/server/src/modules/newsletter/events.js +34 -0
- package/.medusa/server/src/modules/newsletter/index.d.ts +10 -0
- package/.medusa/server/src/modules/newsletter/index.js +33 -0
- package/.medusa/server/src/modules/newsletter/migrations/Migration20261030130000.d.ts +5 -0
- package/.medusa/server/src/modules/newsletter/migrations/Migration20261030130000.js +18 -0
- package/.medusa/server/src/modules/newsletter/models/newsletter-subscriber.d.ts +21 -0
- package/.medusa/server/src/modules/newsletter/models/newsletter-subscriber.js +35 -0
- package/.medusa/server/src/modules/newsletter/service.d.ts +24 -0
- package/.medusa/server/src/modules/newsletter/service.js +11 -0
- package/.medusa/server/src/modules/newsletter/token.d.ts +10 -0
- package/.medusa/server/src/modules/newsletter/token.js +97 -0
- package/.medusa/server/src/modules/product-review/config.d.ts +5 -0
- package/.medusa/server/src/modules/product-review/config.js +10 -0
- package/.medusa/server/src/modules/product-review/index.d.ts +7 -0
- package/.medusa/server/src/modules/product-review/index.js +18 -0
- package/.medusa/server/src/modules/product-review/migrations/Migration20261030160100.d.ts +5 -0
- package/.medusa/server/src/modules/product-review/migrations/Migration20261030160100.js +18 -0
- package/.medusa/server/src/modules/product-review/models/product-review.d.ts +16 -0
- package/.medusa/server/src/modules/product-review/models/product-review.js +26 -0
- package/.medusa/server/src/modules/product-review/service.d.ts +25 -0
- package/.medusa/server/src/modules/product-review/service.js +12 -0
- package/.medusa/server/src/modules/wishlist/index.d.ts +5 -0
- package/.medusa/server/src/modules/wishlist/index.js +14 -0
- package/.medusa/server/src/modules/wishlist/migrations/Migration20261030160000.d.ts +5 -0
- package/.medusa/server/src/modules/wishlist/migrations/Migration20261030160000.js +17 -0
- package/.medusa/server/src/modules/wishlist/models/wishlist-item.d.ts +6 -0
- package/.medusa/server/src/modules/wishlist/models/wishlist-item.js +14 -0
- package/.medusa/server/src/modules/wishlist/service.d.ts +15 -0
- package/.medusa/server/src/modules/wishlist/service.js +12 -0
- package/.medusa/server/src/providers/email/index.d.ts +2 -0
- package/.medusa/server/src/providers/email/index.js +11 -0
- package/.medusa/server/src/providers/email/service.d.ts +24 -0
- package/.medusa/server/src/providers/email/service.js +117 -0
- package/.medusa/server/src/scripts/core-init.js +20 -3
- package/.medusa/server/src/scripts/verify-bootstrap.js +1 -7
- package/.medusa/server/src/subscribers/transactional-email-shipment-created.js +6 -2
- package/package.json +4 -3
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.emitNewsletterEvent = exports.NEWSLETTER_EVENTS = exports.newsletterConfirmationEmail = exports.normalizeNewsletterUtm = exports.normalizeNewsletterEmail = exports.verifyNewsletterUnsubscribeToken = exports.newsletterSubscriberIdFromUnsubscribeToken = exports.createNewsletterUnsubscribeToken = exports.hashNewsletterToken = exports.createNewsletterToken = exports.newsletterUnsubscribeUrl = exports.newsletterConfirmUrl = exports.loadNewsletterConfig = exports.NEWSLETTER_STATUSES = exports.NewsletterService = exports.NEWSLETTER_MODULE = void 0;
|
|
7
|
+
const utils_1 = require("@medusajs/framework/utils");
|
|
8
|
+
const service_1 = __importDefault(require("./service"));
|
|
9
|
+
exports.NewsletterService = service_1.default;
|
|
10
|
+
exports.NEWSLETTER_MODULE = "newsletter";
|
|
11
|
+
exports.default = (0, utils_1.Module)(exports.NEWSLETTER_MODULE, {
|
|
12
|
+
service: service_1.default,
|
|
13
|
+
});
|
|
14
|
+
var newsletter_subscriber_1 = require("./models/newsletter-subscriber");
|
|
15
|
+
Object.defineProperty(exports, "NEWSLETTER_STATUSES", { enumerable: true, get: function () { return newsletter_subscriber_1.NEWSLETTER_STATUSES; } });
|
|
16
|
+
var config_1 = require("./config");
|
|
17
|
+
Object.defineProperty(exports, "loadNewsletterConfig", { enumerable: true, get: function () { return config_1.loadNewsletterConfig; } });
|
|
18
|
+
Object.defineProperty(exports, "newsletterConfirmUrl", { enumerable: true, get: function () { return config_1.newsletterConfirmUrl; } });
|
|
19
|
+
Object.defineProperty(exports, "newsletterUnsubscribeUrl", { enumerable: true, get: function () { return config_1.newsletterUnsubscribeUrl; } });
|
|
20
|
+
var token_1 = require("./token");
|
|
21
|
+
Object.defineProperty(exports, "createNewsletterToken", { enumerable: true, get: function () { return token_1.createNewsletterToken; } });
|
|
22
|
+
Object.defineProperty(exports, "hashNewsletterToken", { enumerable: true, get: function () { return token_1.hashNewsletterToken; } });
|
|
23
|
+
Object.defineProperty(exports, "createNewsletterUnsubscribeToken", { enumerable: true, get: function () { return token_1.createNewsletterUnsubscribeToken; } });
|
|
24
|
+
Object.defineProperty(exports, "newsletterSubscriberIdFromUnsubscribeToken", { enumerable: true, get: function () { return token_1.newsletterSubscriberIdFromUnsubscribeToken; } });
|
|
25
|
+
Object.defineProperty(exports, "verifyNewsletterUnsubscribeToken", { enumerable: true, get: function () { return token_1.verifyNewsletterUnsubscribeToken; } });
|
|
26
|
+
Object.defineProperty(exports, "normalizeNewsletterEmail", { enumerable: true, get: function () { return token_1.normalizeNewsletterEmail; } });
|
|
27
|
+
Object.defineProperty(exports, "normalizeNewsletterUtm", { enumerable: true, get: function () { return token_1.normalizeNewsletterUtm; } });
|
|
28
|
+
var email_1 = require("./email");
|
|
29
|
+
Object.defineProperty(exports, "newsletterConfirmationEmail", { enumerable: true, get: function () { return email_1.newsletterConfirmationEmail; } });
|
|
30
|
+
var events_1 = require("./events");
|
|
31
|
+
Object.defineProperty(exports, "NEWSLETTER_EVENTS", { enumerable: true, get: function () { return events_1.NEWSLETTER_EVENTS; } });
|
|
32
|
+
Object.defineProperty(exports, "emitNewsletterEvent", { enumerable: true, get: function () { return events_1.emitNewsletterEvent; } });
|
|
33
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbW9kdWxlcy9uZXdzbGV0dGVyL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLHFEQUFrRDtBQUNsRCx3REFBeUM7QUFRaEMsNEJBUkYsaUJBQWlCLENBUUU7QUFOYixRQUFBLGlCQUFpQixHQUFHLFlBQVksQ0FBQTtBQUU3QyxrQkFBZSxJQUFBLGNBQU0sRUFBQyx5QkFBaUIsRUFBRTtJQUN2QyxPQUFPLEVBQUUsaUJBQWlCO0NBQzNCLENBQUMsQ0FBQTtBQUdGLHdFQUFvRTtBQUEzRCw0SEFBQSxtQkFBbUIsT0FBQTtBQUM1QixtQ0FLaUI7QUFKZiw4R0FBQSxvQkFBb0IsT0FBQTtBQUNwQiw4R0FBQSxvQkFBb0IsT0FBQTtBQUNwQixrSEFBQSx3QkFBd0IsT0FBQTtBQUcxQixpQ0FRZ0I7QUFQZCw4R0FBQSxxQkFBcUIsT0FBQTtBQUNyQiw0R0FBQSxtQkFBbUIsT0FBQTtBQUNuQix5SEFBQSxnQ0FBZ0MsT0FBQTtBQUNoQyxtSUFBQSwwQ0FBMEMsT0FBQTtBQUMxQyx5SEFBQSxnQ0FBZ0MsT0FBQTtBQUNoQyxpSEFBQSx3QkFBd0IsT0FBQTtBQUN4QiwrR0FBQSxzQkFBc0IsT0FBQTtBQUV4QixpQ0FBcUQ7QUFBNUMsb0hBQUEsMkJBQTJCLE9BQUE7QUFDcEMsbUNBQWlFO0FBQXhELDJHQUFBLGlCQUFpQixPQUFBO0FBQUUsNkdBQUEsbUJBQW1CLE9BQUEifQ==
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Migration20261030130000 = void 0;
|
|
4
|
+
const migrations_1 = require("@medusajs/framework/mikro-orm/migrations");
|
|
5
|
+
class Migration20261030130000 extends migrations_1.Migration {
|
|
6
|
+
async up() {
|
|
7
|
+
this.addSql(`create table if not exists "newsletter_subscriber" ("id" text not null, "email" text not null, "status" text check ("status" in ('pending','subscribed','unsubscribed')) not null, "source" text null, "page_url" text null, "utm" jsonb null, "consent_at" timestamptz not null, "consent_version" text not null, "consent_url" text null, "double_opt_in" boolean not null default false, "confirmation_token_hash" text null, "confirmation_sent_at" timestamptz null, "confirmation_expires_at" timestamptz null, "confirmed_at" timestamptz null, "subscribed_at" timestamptz null, "unsubscribed_at" timestamptz null, "metadata" jsonb null, "created_at" timestamptz not null default now(), "updated_at" timestamptz not null default now(), "deleted_at" timestamptz null, constraint "newsletter_subscriber_pkey" primary key ("id"));`);
|
|
8
|
+
this.addSql(`create unique index if not exists "IDX_newsletter_subscriber_email" on "newsletter_subscriber" ("email") where deleted_at is null;`);
|
|
9
|
+
this.addSql(`create index if not exists "IDX_newsletter_subscriber_status_created" on "newsletter_subscriber" ("status", "created_at") where deleted_at is null;`);
|
|
10
|
+
this.addSql(`create index if not exists "IDX_newsletter_subscriber_source_created" on "newsletter_subscriber" ("source", "created_at") where deleted_at is null;`);
|
|
11
|
+
this.addSql(`create unique index if not exists "IDX_newsletter_confirmation_token" on "newsletter_subscriber" ("confirmation_token_hash") where deleted_at is null and confirmation_token_hash is not null;`);
|
|
12
|
+
}
|
|
13
|
+
async down() {
|
|
14
|
+
this.addSql(`drop table if exists "newsletter_subscriber" cascade;`);
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
exports.Migration20261030130000 = Migration20261030130000;
|
|
18
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWlncmF0aW9uMjAyNjEwMzAxMzAwMDAuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbW9kdWxlcy9uZXdzbGV0dGVyL21pZ3JhdGlvbnMvTWlncmF0aW9uMjAyNjEwMzAxMzAwMDAudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEseUVBQW9FO0FBRXBFLE1BQWEsdUJBQXdCLFNBQVEsc0JBQVM7SUFDcEQsS0FBSyxDQUFDLEVBQUU7UUFDTixJQUFJLENBQUMsTUFBTSxDQUFDLG16QkFBbXpCLENBQUMsQ0FBQTtRQUNoMEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxvSUFBb0ksQ0FBQyxDQUFBO1FBQ2pKLElBQUksQ0FBQyxNQUFNLENBQUMscUpBQXFKLENBQUMsQ0FBQTtRQUNsSyxJQUFJLENBQUMsTUFBTSxDQUFDLHFKQUFxSixDQUFDLENBQUE7UUFDbEssSUFBSSxDQUFDLE1BQU0sQ0FBQyxnTUFBZ00sQ0FBQyxDQUFBO0lBQy9NLENBQUM7SUFFRCxLQUFLLENBQUMsSUFBSTtRQUNSLElBQUksQ0FBQyxNQUFNLENBQUMsdURBQXVELENBQUMsQ0FBQTtJQUN0RSxDQUFDO0NBQ0Y7QUFaRCwwREFZQyJ9
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
export declare const NEWSLETTER_STATUSES: readonly ["pending", "subscribed", "unsubscribed"];
|
|
2
|
+
declare const NewsletterSubscriber: import("@medusajs/framework/utils").DmlEntity<import("@medusajs/framework/utils").DMLEntitySchemaBuilder<{
|
|
3
|
+
id: import("@medusajs/framework/utils").PrimaryKeyModifier<string, import("@medusajs/framework/utils").IdProperty>;
|
|
4
|
+
email: import("@medusajs/framework/utils").TextProperty;
|
|
5
|
+
status: import("@medusajs/framework/utils").EnumProperty<["pending", "subscribed", "unsubscribed"]>;
|
|
6
|
+
source: import("@medusajs/framework/utils").NullableModifier<string, import("@medusajs/framework/utils").TextProperty>;
|
|
7
|
+
page_url: import("@medusajs/framework/utils").NullableModifier<string, import("@medusajs/framework/utils").TextProperty>;
|
|
8
|
+
utm: import("@medusajs/framework/utils").NullableModifier<NoInfer<Record<string, unknown>>, import("@medusajs/framework/utils").JSONProperty<NoInfer<Record<string, unknown>>>>;
|
|
9
|
+
consent_at: import("@medusajs/framework/utils").DateTimeProperty;
|
|
10
|
+
consent_version: import("@medusajs/framework/utils").TextProperty;
|
|
11
|
+
consent_url: import("@medusajs/framework/utils").NullableModifier<string, import("@medusajs/framework/utils").TextProperty>;
|
|
12
|
+
double_opt_in: import("@medusajs/framework/utils").BooleanProperty;
|
|
13
|
+
confirmation_token_hash: import("@medusajs/framework/utils").NullableModifier<string, import("@medusajs/framework/utils").TextProperty>;
|
|
14
|
+
confirmation_sent_at: import("@medusajs/framework/utils").NullableModifier<Date, import("@medusajs/framework/utils").DateTimeProperty>;
|
|
15
|
+
confirmation_expires_at: import("@medusajs/framework/utils").NullableModifier<Date, import("@medusajs/framework/utils").DateTimeProperty>;
|
|
16
|
+
confirmed_at: import("@medusajs/framework/utils").NullableModifier<Date, import("@medusajs/framework/utils").DateTimeProperty>;
|
|
17
|
+
subscribed_at: import("@medusajs/framework/utils").NullableModifier<Date, import("@medusajs/framework/utils").DateTimeProperty>;
|
|
18
|
+
unsubscribed_at: import("@medusajs/framework/utils").NullableModifier<Date, import("@medusajs/framework/utils").DateTimeProperty>;
|
|
19
|
+
metadata: import("@medusajs/framework/utils").NullableModifier<NoInfer<Record<string, unknown>>, import("@medusajs/framework/utils").JSONProperty<NoInfer<Record<string, unknown>>>>;
|
|
20
|
+
}>, "newsletter_subscriber">;
|
|
21
|
+
export default NewsletterSubscriber;
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.NEWSLETTER_STATUSES = void 0;
|
|
4
|
+
const utils_1 = require("@medusajs/framework/utils");
|
|
5
|
+
exports.NEWSLETTER_STATUSES = [
|
|
6
|
+
"pending",
|
|
7
|
+
"subscribed",
|
|
8
|
+
"unsubscribed",
|
|
9
|
+
];
|
|
10
|
+
const NewsletterSubscriber = utils_1.model.define("newsletter_subscriber", {
|
|
11
|
+
id: utils_1.model.id().primaryKey(),
|
|
12
|
+
email: utils_1.model.text(),
|
|
13
|
+
status: utils_1.model.enum(["pending", "subscribed", "unsubscribed"]),
|
|
14
|
+
source: utils_1.model.text().nullable(),
|
|
15
|
+
page_url: utils_1.model.text().nullable(),
|
|
16
|
+
utm: utils_1.model.json().nullable(),
|
|
17
|
+
consent_at: utils_1.model.dateTime(),
|
|
18
|
+
consent_version: utils_1.model.text(),
|
|
19
|
+
consent_url: utils_1.model.text().nullable(),
|
|
20
|
+
double_opt_in: utils_1.model.boolean().default(false),
|
|
21
|
+
confirmation_token_hash: utils_1.model.text().nullable(),
|
|
22
|
+
confirmation_sent_at: utils_1.model.dateTime().nullable(),
|
|
23
|
+
confirmation_expires_at: utils_1.model.dateTime().nullable(),
|
|
24
|
+
confirmed_at: utils_1.model.dateTime().nullable(),
|
|
25
|
+
subscribed_at: utils_1.model.dateTime().nullable(),
|
|
26
|
+
unsubscribed_at: utils_1.model.dateTime().nullable(),
|
|
27
|
+
metadata: utils_1.model.json().nullable(),
|
|
28
|
+
}).indexes([
|
|
29
|
+
{ on: ["email"], unique: true },
|
|
30
|
+
{ on: ["status", "created_at"] },
|
|
31
|
+
{ on: ["source", "created_at"] },
|
|
32
|
+
{ on: ["confirmation_token_hash"], unique: true },
|
|
33
|
+
]);
|
|
34
|
+
exports.default = NewsletterSubscriber;
|
|
35
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmV3c2xldHRlci1zdWJzY3JpYmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL21vZHVsZXMvbmV3c2xldHRlci9tb2RlbHMvbmV3c2xldHRlci1zdWJzY3JpYmVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHFEQUFpRDtBQUVwQyxRQUFBLG1CQUFtQixHQUFHO0lBQ2pDLFNBQVM7SUFDVCxZQUFZO0lBQ1osY0FBYztDQUNOLENBQUE7QUFFVixNQUFNLG9CQUFvQixHQUFHLGFBQUssQ0FBQyxNQUFNLENBQUMsdUJBQXVCLEVBQUU7SUFDakUsRUFBRSxFQUFFLGFBQUssQ0FBQyxFQUFFLEVBQUUsQ0FBQyxVQUFVLEVBQUU7SUFDM0IsS0FBSyxFQUFFLGFBQUssQ0FBQyxJQUFJLEVBQUU7SUFDbkIsTUFBTSxFQUFFLGFBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxTQUFTLEVBQUUsWUFBWSxFQUFFLGNBQWMsQ0FBQyxDQUFDO0lBQzdELE1BQU0sRUFBRSxhQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsUUFBUSxFQUFFO0lBQy9CLFFBQVEsRUFBRSxhQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsUUFBUSxFQUFFO0lBQ2pDLEdBQUcsRUFBRSxhQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsUUFBUSxFQUFFO0lBQzVCLFVBQVUsRUFBRSxhQUFLLENBQUMsUUFBUSxFQUFFO0lBQzVCLGVBQWUsRUFBRSxhQUFLLENBQUMsSUFBSSxFQUFFO0lBQzdCLFdBQVcsRUFBRSxhQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsUUFBUSxFQUFFO0lBQ3BDLGFBQWEsRUFBRSxhQUFLLENBQUMsT0FBTyxFQUFFLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQztJQUM3Qyx1QkFBdUIsRUFBRSxhQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsUUFBUSxFQUFFO0lBQ2hELG9CQUFvQixFQUFFLGFBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQyxRQUFRLEVBQUU7SUFDakQsdUJBQXVCLEVBQUUsYUFBSyxDQUFDLFFBQVEsRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUNwRCxZQUFZLEVBQUUsYUFBSyxDQUFDLFFBQVEsRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUN6QyxhQUFhLEVBQUUsYUFBSyxDQUFDLFFBQVEsRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUMxQyxlQUFlLEVBQUUsYUFBSyxDQUFDLFFBQVEsRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUM1QyxRQUFRLEVBQUUsYUFBSyxDQUFDLElBQUksRUFBRSxDQUFDLFFBQVEsRUFBRTtDQUNsQyxDQUFDLENBQUMsT0FBTyxDQUFDO0lBQ1QsRUFBRSxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO0lBQy9CLEVBQUUsRUFBRSxFQUFFLENBQUMsUUFBUSxFQUFFLFlBQVksQ0FBQyxFQUFFO0lBQ2hDLEVBQUUsRUFBRSxFQUFFLENBQUMsUUFBUSxFQUFFLFlBQVksQ0FBQyxFQUFFO0lBQ2hDLEVBQUUsRUFBRSxFQUFFLENBQUMseUJBQXlCLENBQUMsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO0NBQ2xELENBQUMsQ0FBQTtBQUVGLGtCQUFlLG9CQUFvQixDQUFBIn0=
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
declare const NewsletterService_base: import("@medusajs/framework/utils").MedusaServiceReturnType<import("@medusajs/framework/utils").ModelConfigurationsToConfigTemplate<{
|
|
2
|
+
readonly NewsletterSubscriber: import("@medusajs/framework/utils").DmlEntity<import("@medusajs/framework/utils").DMLEntitySchemaBuilder<{
|
|
3
|
+
id: import("@medusajs/framework/utils").PrimaryKeyModifier<string, import("@medusajs/framework/utils").IdProperty>;
|
|
4
|
+
email: import("@medusajs/framework/utils").TextProperty;
|
|
5
|
+
status: import("@medusajs/framework/utils").EnumProperty<["pending", "subscribed", "unsubscribed"]>;
|
|
6
|
+
source: import("@medusajs/framework/utils").NullableModifier<string, import("@medusajs/framework/utils").TextProperty>;
|
|
7
|
+
page_url: import("@medusajs/framework/utils").NullableModifier<string, import("@medusajs/framework/utils").TextProperty>;
|
|
8
|
+
utm: import("@medusajs/framework/utils").NullableModifier<NoInfer<Record<string, unknown>>, import("@medusajs/framework/utils").JSONProperty<NoInfer<Record<string, unknown>>>>;
|
|
9
|
+
consent_at: import("@medusajs/framework/utils").DateTimeProperty;
|
|
10
|
+
consent_version: import("@medusajs/framework/utils").TextProperty;
|
|
11
|
+
consent_url: import("@medusajs/framework/utils").NullableModifier<string, import("@medusajs/framework/utils").TextProperty>;
|
|
12
|
+
double_opt_in: import("@medusajs/framework/utils").BooleanProperty;
|
|
13
|
+
confirmation_token_hash: import("@medusajs/framework/utils").NullableModifier<string, import("@medusajs/framework/utils").TextProperty>;
|
|
14
|
+
confirmation_sent_at: import("@medusajs/framework/utils").NullableModifier<Date, import("@medusajs/framework/utils").DateTimeProperty>;
|
|
15
|
+
confirmation_expires_at: import("@medusajs/framework/utils").NullableModifier<Date, import("@medusajs/framework/utils").DateTimeProperty>;
|
|
16
|
+
confirmed_at: import("@medusajs/framework/utils").NullableModifier<Date, import("@medusajs/framework/utils").DateTimeProperty>;
|
|
17
|
+
subscribed_at: import("@medusajs/framework/utils").NullableModifier<Date, import("@medusajs/framework/utils").DateTimeProperty>;
|
|
18
|
+
unsubscribed_at: import("@medusajs/framework/utils").NullableModifier<Date, import("@medusajs/framework/utils").DateTimeProperty>;
|
|
19
|
+
metadata: import("@medusajs/framework/utils").NullableModifier<NoInfer<Record<string, unknown>>, import("@medusajs/framework/utils").JSONProperty<NoInfer<Record<string, unknown>>>>;
|
|
20
|
+
}>, "newsletter_subscriber">;
|
|
21
|
+
}>>;
|
|
22
|
+
declare class NewsletterService extends NewsletterService_base {
|
|
23
|
+
}
|
|
24
|
+
export default NewsletterService;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const utils_1 = require("@medusajs/framework/utils");
|
|
7
|
+
const newsletter_subscriber_1 = __importDefault(require("./models/newsletter-subscriber"));
|
|
8
|
+
class NewsletterService extends (0, utils_1.MedusaService)({ NewsletterSubscriber: newsletter_subscriber_1.default }) {
|
|
9
|
+
}
|
|
10
|
+
exports.default = NewsletterService;
|
|
11
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9tb2R1bGVzL25ld3NsZXR0ZXIvc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLHFEQUF5RDtBQUN6RCwyRkFBaUU7QUFFakUsTUFBTSxpQkFBa0IsU0FBUSxJQUFBLHFCQUFhLEVBQUMsRUFBRSxvQkFBb0IsRUFBcEIsK0JBQW9CLEVBQUUsQ0FBQztDQUFHO0FBRTFFLGtCQUFlLGlCQUFpQixDQUFBIn0=
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export declare function createNewsletterToken(bytes?: number): {
|
|
2
|
+
token: string;
|
|
3
|
+
hash: string;
|
|
4
|
+
};
|
|
5
|
+
export declare function hashNewsletterToken(token: string): string;
|
|
6
|
+
export declare function createNewsletterUnsubscribeToken(subscriberId: string, email: string): string;
|
|
7
|
+
export declare function newsletterSubscriberIdFromUnsubscribeToken(token: string): string;
|
|
8
|
+
export declare function verifyNewsletterUnsubscribeToken(token: string, subscriberId: string, email: string): boolean;
|
|
9
|
+
export declare function normalizeNewsletterEmail(value: unknown): string;
|
|
10
|
+
export declare function normalizeNewsletterUtm(value: unknown): Record<string, string>;
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createNewsletterToken = createNewsletterToken;
|
|
4
|
+
exports.hashNewsletterToken = hashNewsletterToken;
|
|
5
|
+
exports.createNewsletterUnsubscribeToken = createNewsletterUnsubscribeToken;
|
|
6
|
+
exports.newsletterSubscriberIdFromUnsubscribeToken = newsletterSubscriberIdFromUnsubscribeToken;
|
|
7
|
+
exports.verifyNewsletterUnsubscribeToken = verifyNewsletterUnsubscribeToken;
|
|
8
|
+
exports.normalizeNewsletterEmail = normalizeNewsletterEmail;
|
|
9
|
+
exports.normalizeNewsletterUtm = normalizeNewsletterUtm;
|
|
10
|
+
const node_crypto_1 = require("node:crypto");
|
|
11
|
+
function createNewsletterToken(bytes = 32) {
|
|
12
|
+
const token = (0, node_crypto_1.randomBytes)(bytes).toString("base64url");
|
|
13
|
+
return { token, hash: hashNewsletterToken(token) };
|
|
14
|
+
}
|
|
15
|
+
function hashNewsletterToken(token) {
|
|
16
|
+
return (0, node_crypto_1.createHash)("sha256").update(token, "utf8").digest("hex");
|
|
17
|
+
}
|
|
18
|
+
function createNewsletterUnsubscribeToken(subscriberId, email) {
|
|
19
|
+
const id = String(subscriberId || "").trim();
|
|
20
|
+
if (!id)
|
|
21
|
+
throw new Error("A feliratkozó azonosítója hiányzik.");
|
|
22
|
+
const normalizedEmail = normalizeNewsletterEmail(email);
|
|
23
|
+
const encodedId = Buffer.from(id, "utf8").toString("base64url");
|
|
24
|
+
const signature = signUnsubscribeToken(id, normalizedEmail);
|
|
25
|
+
return `${encodedId}.${signature}`;
|
|
26
|
+
}
|
|
27
|
+
function newsletterSubscriberIdFromUnsubscribeToken(token) {
|
|
28
|
+
const parts = String(token || "").trim().split(".");
|
|
29
|
+
if (parts.length !== 2 || !parts[0] || !parts[1])
|
|
30
|
+
throw new Error("Érvénytelen leiratkozó token.");
|
|
31
|
+
let id = "";
|
|
32
|
+
try {
|
|
33
|
+
id = Buffer.from(parts[0], "base64url").toString("utf8").trim();
|
|
34
|
+
}
|
|
35
|
+
catch {
|
|
36
|
+
id = "";
|
|
37
|
+
}
|
|
38
|
+
if (!id || id.length > 255)
|
|
39
|
+
throw new Error("Érvénytelen leiratkozó token.");
|
|
40
|
+
return id;
|
|
41
|
+
}
|
|
42
|
+
function verifyNewsletterUnsubscribeToken(token, subscriberId, email) {
|
|
43
|
+
const parts = String(token || "").trim().split(".");
|
|
44
|
+
if (parts.length !== 2)
|
|
45
|
+
return false;
|
|
46
|
+
let tokenId;
|
|
47
|
+
try {
|
|
48
|
+
tokenId = newsletterSubscriberIdFromUnsubscribeToken(token);
|
|
49
|
+
}
|
|
50
|
+
catch {
|
|
51
|
+
return false;
|
|
52
|
+
}
|
|
53
|
+
if (tokenId !== subscriberId)
|
|
54
|
+
return false;
|
|
55
|
+
const expected = signUnsubscribeToken(subscriberId, normalizeNewsletterEmail(email));
|
|
56
|
+
const provided = Buffer.from(parts[1], "utf8");
|
|
57
|
+
const wanted = Buffer.from(expected, "utf8");
|
|
58
|
+
return provided.length === wanted.length && (0, node_crypto_1.timingSafeEqual)(provided, wanted);
|
|
59
|
+
}
|
|
60
|
+
function normalizeNewsletterEmail(value) {
|
|
61
|
+
if (typeof value !== "string")
|
|
62
|
+
throw new Error("Az e-mail-cím megadása kötelező.");
|
|
63
|
+
const email = value.trim().toLowerCase();
|
|
64
|
+
if (!email || email.length > 320 || !/^\S+@\S+\.\S+$/.test(email)) {
|
|
65
|
+
throw new Error("Érvényes e-mail-cím szükséges.");
|
|
66
|
+
}
|
|
67
|
+
return email;
|
|
68
|
+
}
|
|
69
|
+
function normalizeNewsletterUtm(value) {
|
|
70
|
+
if (!value || typeof value !== "object" || Array.isArray(value))
|
|
71
|
+
return {};
|
|
72
|
+
const allowed = ["utm_source", "utm_medium", "utm_campaign", "utm_term", "utm_content"];
|
|
73
|
+
const input = value;
|
|
74
|
+
const output = {};
|
|
75
|
+
for (const key of allowed) {
|
|
76
|
+
const raw = input[key];
|
|
77
|
+
if (typeof raw !== "string")
|
|
78
|
+
continue;
|
|
79
|
+
const normalized = raw.trim().slice(0, 500);
|
|
80
|
+
if (normalized)
|
|
81
|
+
output[key] = normalized;
|
|
82
|
+
}
|
|
83
|
+
return output;
|
|
84
|
+
}
|
|
85
|
+
function signUnsubscribeToken(subscriberId, email) {
|
|
86
|
+
return (0, node_crypto_1.createHmac)("sha256", newsletterTokenSecret())
|
|
87
|
+
.update(`${subscriberId}:${email}`, "utf8")
|
|
88
|
+
.digest("base64url");
|
|
89
|
+
}
|
|
90
|
+
function newsletterTokenSecret() {
|
|
91
|
+
const secret = String(process.env.NEWSLETTER_TOKEN_SECRET || process.env.COOKIE_SECRET || "").trim();
|
|
92
|
+
if (secret.length < 32) {
|
|
93
|
+
throw new Error("NEWSLETTER_TOKEN_SECRET vagy legalább 32 karakteres COOKIE_SECRET szükséges a leiratkozó linkekhez.");
|
|
94
|
+
}
|
|
95
|
+
return secret;
|
|
96
|
+
}
|
|
97
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9rZW4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbW9kdWxlcy9uZXdzbGV0dGVyL3Rva2VuLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBRUEsc0RBR0M7QUFFRCxrREFFQztBQUVELDRFQU9DO0FBRUQsZ0dBT0M7QUFFRCw0RUFXQztBQUVELDREQU9DO0FBRUQsd0RBWUM7QUEvREQsNkNBQWtGO0FBRWxGLFNBQWdCLHFCQUFxQixDQUFDLEtBQUssR0FBRyxFQUFFO0lBQzlDLE1BQU0sS0FBSyxHQUFHLElBQUEseUJBQVcsRUFBQyxLQUFLLENBQUMsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUE7SUFDdEQsT0FBTyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsbUJBQW1CLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQTtBQUNwRCxDQUFDO0FBRUQsU0FBZ0IsbUJBQW1CLENBQUMsS0FBYTtJQUMvQyxPQUFPLElBQUEsd0JBQVUsRUFBQyxRQUFRLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQTtBQUNqRSxDQUFDO0FBRUQsU0FBZ0IsZ0NBQWdDLENBQUMsWUFBb0IsRUFBRSxLQUFhO0lBQ2xGLE1BQU0sRUFBRSxHQUFHLE1BQU0sQ0FBQyxZQUFZLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUE7SUFDNUMsSUFBSSxDQUFDLEVBQUU7UUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLHFDQUFxQyxDQUFDLENBQUE7SUFDL0QsTUFBTSxlQUFlLEdBQUcsd0JBQXdCLENBQUMsS0FBSyxDQUFDLENBQUE7SUFDdkQsTUFBTSxTQUFTLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsTUFBTSxDQUFDLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFBO0lBQy9ELE1BQU0sU0FBUyxHQUFHLG9CQUFvQixD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
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.loadProductReviewConfig = loadProductReviewConfig;
|
|
4
|
+
function loadProductReviewConfig(env = process.env) {
|
|
5
|
+
return {
|
|
6
|
+
enabled: env.PRODUCT_REVIEWS_ENABLED !== "false",
|
|
7
|
+
requireVerifiedPurchase: env.PRODUCT_REVIEWS_REQUIRE_VERIFIED_PURCHASE === "true",
|
|
8
|
+
};
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL21vZHVsZXMvcHJvZHVjdC1yZXZpZXcvY29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBS0EsMERBS0M7QUFMRCxTQUFnQix1QkFBdUIsQ0FBQyxNQUF5QixPQUFPLENBQUMsR0FBRztJQUMxRSxPQUFPO1FBQ0wsT0FBTyxFQUFFLEdBQUcsQ0FBQyx1QkFBdUIsS0FBSyxPQUFPO1FBQ2hELHVCQUF1QixFQUFFLEdBQUcsQ0FBQyx5Q0FBeUMsS0FBSyxNQUFNO0tBQ2xGLENBQUE7QUFDSCxDQUFDIn0=
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import ProductReviewService from "./service";
|
|
2
|
+
export declare const PRODUCT_REVIEW_MODULE = "productReview";
|
|
3
|
+
declare const _default: any;
|
|
4
|
+
export default _default;
|
|
5
|
+
export { ProductReviewService };
|
|
6
|
+
export { PRODUCT_REVIEW_STATUSES } from "./models/product-review";
|
|
7
|
+
export { loadProductReviewConfig, type ProductReviewConfig } from "./config";
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.loadProductReviewConfig = exports.PRODUCT_REVIEW_STATUSES = exports.ProductReviewService = exports.PRODUCT_REVIEW_MODULE = void 0;
|
|
7
|
+
const utils_1 = require("@medusajs/framework/utils");
|
|
8
|
+
const service_1 = __importDefault(require("./service"));
|
|
9
|
+
exports.ProductReviewService = service_1.default;
|
|
10
|
+
exports.PRODUCT_REVIEW_MODULE = "productReview";
|
|
11
|
+
exports.default = (0, utils_1.Module)(exports.PRODUCT_REVIEW_MODULE, {
|
|
12
|
+
service: service_1.default,
|
|
13
|
+
});
|
|
14
|
+
var product_review_1 = require("./models/product-review");
|
|
15
|
+
Object.defineProperty(exports, "PRODUCT_REVIEW_STATUSES", { enumerable: true, get: function () { return product_review_1.PRODUCT_REVIEW_STATUSES; } });
|
|
16
|
+
var config_1 = require("./config");
|
|
17
|
+
Object.defineProperty(exports, "loadProductReviewConfig", { enumerable: true, get: function () { return config_1.loadProductReviewConfig; } });
|
|
18
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbW9kdWxlcy9wcm9kdWN0LXJldmlldy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxxREFBa0Q7QUFDbEQsd0RBQTRDO0FBUW5DLCtCQVJGLGlCQUFvQixDQVFFO0FBTmhCLFFBQUEscUJBQXFCLEdBQUcsZUFBZSxDQUFBO0FBRXBELGtCQUFlLElBQUEsY0FBTSxFQUFDLDZCQUFxQixFQUFFO0lBQzNDLE9BQU8sRUFBRSxpQkFBb0I7Q0FDOUIsQ0FBQyxDQUFBO0FBR0YsMERBQWlFO0FBQXhELHlIQUFBLHVCQUF1QixPQUFBO0FBQ2hDLG1DQUE0RTtBQUFuRSxpSEFBQSx1QkFBdUIsT0FBQSJ9
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Migration20261030160100 = void 0;
|
|
4
|
+
const migrations_1 = require("@medusajs/framework/mikro-orm/migrations");
|
|
5
|
+
class Migration20261030160100 extends migrations_1.Migration {
|
|
6
|
+
async up() {
|
|
7
|
+
this.addSql(`create table if not exists "product_review" ("id" text not null, "product_id" text not null, "customer_id" text not null, "customer_name" text null, "rating" int not null, "body" text not null, "status" text check ("status" in ('pending','approved','rejected')) not null default 'pending', "verified_purchase" boolean not null default false, "order_id" text null, "moderation_note" text null, "moderated_at" timestamptz null, "moderated_by" text null, "created_at" timestamptz not null default now(), "updated_at" timestamptz not null default now(), "deleted_at" timestamptz null, constraint "product_review_pkey" primary key ("id"));`);
|
|
8
|
+
this.addSql(`create unique index if not exists "IDX_product_review_product_customer" on "product_review" ("product_id", "customer_id") where deleted_at is null;`);
|
|
9
|
+
this.addSql(`create index if not exists "IDX_product_review_product_status_created" on "product_review" ("product_id", "status", "created_at") where deleted_at is null;`);
|
|
10
|
+
this.addSql(`create index if not exists "IDX_product_review_customer_created" on "product_review" ("customer_id", "created_at") where deleted_at is null;`);
|
|
11
|
+
this.addSql(`create index if not exists "IDX_product_review_status_created" on "product_review" ("status", "created_at") where deleted_at is null;`);
|
|
12
|
+
}
|
|
13
|
+
async down() {
|
|
14
|
+
this.addSql(`drop table if exists "product_review" cascade;`);
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
exports.Migration20261030160100 = Migration20261030160100;
|
|
18
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWlncmF0aW9uMjAyNjEwMzAxNjAxMDAuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbW9kdWxlcy9wcm9kdWN0LXJldmlldy9taWdyYXRpb25zL01pZ3JhdGlvbjIwMjYxMDMwMTYwMTAwLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHlFQUFvRTtBQUVwRSxNQUFhLHVCQUF3QixTQUFRLHNCQUFTO0lBQ3BELEtBQUssQ0FBQyxFQUFFO1FBQ04sSUFBSSxDQUFDLE1BQU0sQ0FBQyw0bkJBQTRuQixDQUFDLENBQUE7UUFDem9CLElBQUksQ0FBQyxNQUFNLENBQUMscUpBQXFKLENBQUMsQ0FBQTtRQUNsSyxJQUFJLENBQUMsTUFBTSxDQUFDLDZKQUE2SixDQUFDLENBQUE7UUFDMUssSUFBSSxDQUFDLE1BQU0sQ0FBQyw4SUFBOEksQ0FBQyxDQUFBO1FBQzNKLElBQUksQ0FBQyxNQUFNLENBQUMsdUlBQXVJLENBQUMsQ0FBQTtJQUN0SixDQUFDO0lBRUQsS0FBSyxDQUFDLElBQUk7UUFDUixJQUFJLENBQUMsTUFBTSxDQUFDLGdEQUFnRCxDQUFDLENBQUE7SUFDL0QsQ0FBQztDQUNGO0FBWkQsMERBWUMifQ==
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export declare const PRODUCT_REVIEW_STATUSES: readonly ["pending", "approved", "rejected"];
|
|
2
|
+
declare const ProductReview: import("@medusajs/framework/utils").DmlEntity<import("@medusajs/framework/utils").DMLEntitySchemaBuilder<{
|
|
3
|
+
id: import("@medusajs/framework/utils").PrimaryKeyModifier<string, import("@medusajs/framework/utils").IdProperty>;
|
|
4
|
+
product_id: import("@medusajs/framework/utils").TextProperty;
|
|
5
|
+
customer_id: import("@medusajs/framework/utils").TextProperty;
|
|
6
|
+
customer_name: import("@medusajs/framework/utils").NullableModifier<string, import("@medusajs/framework/utils").TextProperty>;
|
|
7
|
+
rating: import("@medusajs/framework/utils").NumberProperty;
|
|
8
|
+
body: import("@medusajs/framework/utils").TextProperty;
|
|
9
|
+
status: import("@medusajs/framework/utils").EnumProperty<["pending", "approved", "rejected"]>;
|
|
10
|
+
verified_purchase: import("@medusajs/framework/utils").BooleanProperty;
|
|
11
|
+
order_id: import("@medusajs/framework/utils").NullableModifier<string, import("@medusajs/framework/utils").TextProperty>;
|
|
12
|
+
moderation_note: import("@medusajs/framework/utils").NullableModifier<string, import("@medusajs/framework/utils").TextProperty>;
|
|
13
|
+
moderated_at: import("@medusajs/framework/utils").NullableModifier<Date, import("@medusajs/framework/utils").DateTimeProperty>;
|
|
14
|
+
moderated_by: import("@medusajs/framework/utils").NullableModifier<string, import("@medusajs/framework/utils").TextProperty>;
|
|
15
|
+
}>, "product_review">;
|
|
16
|
+
export default ProductReview;
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.PRODUCT_REVIEW_STATUSES = void 0;
|
|
4
|
+
const utils_1 = require("@medusajs/framework/utils");
|
|
5
|
+
exports.PRODUCT_REVIEW_STATUSES = ["pending", "approved", "rejected"];
|
|
6
|
+
const ProductReview = utils_1.model.define("product_review", {
|
|
7
|
+
id: utils_1.model.id().primaryKey(),
|
|
8
|
+
product_id: utils_1.model.text(),
|
|
9
|
+
customer_id: utils_1.model.text(),
|
|
10
|
+
customer_name: utils_1.model.text().nullable(),
|
|
11
|
+
rating: utils_1.model.number(),
|
|
12
|
+
body: utils_1.model.text(),
|
|
13
|
+
status: utils_1.model.enum(["pending", "approved", "rejected"]).default("pending"),
|
|
14
|
+
verified_purchase: utils_1.model.boolean().default(false),
|
|
15
|
+
order_id: utils_1.model.text().nullable(),
|
|
16
|
+
moderation_note: utils_1.model.text().nullable(),
|
|
17
|
+
moderated_at: utils_1.model.dateTime().nullable(),
|
|
18
|
+
moderated_by: utils_1.model.text().nullable(),
|
|
19
|
+
}).indexes([
|
|
20
|
+
{ on: ["product_id", "customer_id"], unique: true },
|
|
21
|
+
{ on: ["product_id", "status", "created_at"] },
|
|
22
|
+
{ on: ["customer_id", "created_at"] },
|
|
23
|
+
{ on: ["status", "created_at"] },
|
|
24
|
+
]);
|
|
25
|
+
exports.default = ProductReview;
|
|
26
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZHVjdC1yZXZpZXcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbW9kdWxlcy9wcm9kdWN0LXJldmlldy9tb2RlbHMvcHJvZHVjdC1yZXZpZXcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEscURBQWlEO0FBRXBDLFFBQUEsdUJBQXVCLEdBQUcsQ0FBQyxTQUFTLEVBQUUsVUFBVSxFQUFFLFVBQVUsQ0FBVSxDQUFBO0FBRW5GLE1BQU0sYUFBYSxHQUFHLGFBQUssQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLEVBQUU7SUFDbkQsRUFBRSxFQUFFLGFBQUssQ0FBQyxFQUFFLEVBQUUsQ0FBQyxVQUFVLEVBQUU7SUFDM0IsVUFBVSxFQUFFLGFBQUssQ0FBQyxJQUFJLEVBQUU7SUFDeEIsV0FBVyxFQUFFLGFBQUssQ0FBQyxJQUFJLEVBQUU7SUFDekIsYUFBYSxFQUFFLGFBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxRQUFRLEVBQUU7SUFDdEMsTUFBTSxFQUFFLGFBQUssQ0FBQyxNQUFNLEVBQUU7SUFDdEIsSUFBSSxFQUFFLGFBQUssQ0FBQyxJQUFJLEVBQUU7SUFDbEIsTUFBTSxFQUFFLGFBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxTQUFTLEVBQUUsVUFBVSxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQztJQUMxRSxpQkFBaUIsRUFBRSxhQUFLLENBQUMsT0FBTyxFQUFFLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQztJQUNqRCxRQUFRLEVBQUUsYUFBSyxDQUFDLElBQUksRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUNqQyxlQUFlLEVBQUUsYUFBSyxDQUFDLElBQUksRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUN4QyxZQUFZLEVBQUUsYUFBSyxDQUFDLFFBQVEsRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUN6QyxZQUFZLEVBQUUsYUFBSyxDQUFDLElBQUksRUFBRSxDQUFDLFFBQVEsRUFBRTtDQUN0QyxDQUFDLENBQUMsT0FBTyxDQUFDO0lBQ1QsRUFBRSxFQUFFLEVBQUUsQ0FBQyxZQUFZLEVBQUUsYUFBYSxDQUFDLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtJQUNuRCxFQUFFLEVBQUUsRUFBRSxDQUFDLFlBQVksRUFBRSxRQUFRLEVBQUUsWUFBWSxDQUFDLEVBQUU7SUFDOUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxhQUFhLEVBQUUsWUFBWSxDQUFDLEVBQUU7SUFDckMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxRQUFRLEVBQUUsWUFBWSxDQUFDLEVBQUU7Q0FDakMsQ0FBQyxDQUFBO0FBRUYsa0JBQWUsYUFBYSxDQUFBIn0=
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
declare const ProductReviewBaseService: import("@medusajs/framework/utils").MedusaServiceReturnType<import("@medusajs/framework/utils").ModelConfigurationsToConfigTemplate<{
|
|
2
|
+
readonly ProductReview: import("@medusajs/framework/utils").DmlEntity<import("@medusajs/framework/utils").DMLEntitySchemaBuilder<{
|
|
3
|
+
id: import("@medusajs/framework/utils").PrimaryKeyModifier<string, import("@medusajs/framework/utils").IdProperty>;
|
|
4
|
+
product_id: import("@medusajs/framework/utils").TextProperty;
|
|
5
|
+
customer_id: import("@medusajs/framework/utils").TextProperty;
|
|
6
|
+
customer_name: import("@medusajs/framework/utils").NullableModifier<string, import("@medusajs/framework/utils").TextProperty>;
|
|
7
|
+
rating: import("@medusajs/framework/utils").NumberProperty;
|
|
8
|
+
body: import("@medusajs/framework/utils").TextProperty;
|
|
9
|
+
status: import("@medusajs/framework/utils").EnumProperty<["pending", "approved", "rejected"]>;
|
|
10
|
+
verified_purchase: import("@medusajs/framework/utils").BooleanProperty;
|
|
11
|
+
order_id: import("@medusajs/framework/utils").NullableModifier<string, import("@medusajs/framework/utils").TextProperty>;
|
|
12
|
+
moderation_note: import("@medusajs/framework/utils").NullableModifier<string, import("@medusajs/framework/utils").TextProperty>;
|
|
13
|
+
moderated_at: import("@medusajs/framework/utils").NullableModifier<Date, import("@medusajs/framework/utils").DateTimeProperty>;
|
|
14
|
+
moderated_by: import("@medusajs/framework/utils").NullableModifier<string, import("@medusajs/framework/utils").TextProperty>;
|
|
15
|
+
}>, "product_review">;
|
|
16
|
+
}>>;
|
|
17
|
+
type ProductReviewBaseServiceInstance = InstanceType<typeof ProductReviewBaseService>;
|
|
18
|
+
export default class ProductReviewService extends ProductReviewBaseService {
|
|
19
|
+
createProductReviews: ProductReviewBaseServiceInstance["createProductReviews"];
|
|
20
|
+
updateProductReviews: ProductReviewBaseServiceInstance["updateProductReviews"];
|
|
21
|
+
retrieveProductReview: ProductReviewBaseServiceInstance["retrieveProductReview"];
|
|
22
|
+
listProductReviews: ProductReviewBaseServiceInstance["listProductReviews"];
|
|
23
|
+
listAndCountProductReviews: ProductReviewBaseServiceInstance["listAndCountProductReviews"];
|
|
24
|
+
}
|
|
25
|
+
export {};
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const utils_1 = require("@medusajs/framework/utils");
|
|
7
|
+
const product_review_1 = __importDefault(require("./models/product-review"));
|
|
8
|
+
const ProductReviewBaseService = (0, utils_1.MedusaService)({ ProductReview: product_review_1.default });
|
|
9
|
+
class ProductReviewService extends ProductReviewBaseService {
|
|
10
|
+
}
|
|
11
|
+
exports.default = ProductReviewService;
|
|
12
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9tb2R1bGVzL3Byb2R1Y3QtcmV2aWV3L3NlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxxREFBeUQ7QUFDekQsNkVBQW1EO0FBRW5ELE1BQU0sd0JBQXdCLEdBQUcsSUFBQSxxQkFBYSxFQUFDLEVBQUUsYUFBYSxFQUFiLHdCQUFhLEVBQUUsQ0FBQyxDQUFBO0FBR2pFLE1BQXFCLG9CQUFxQixTQUFRLHdCQUF3QjtDQU16RTtBQU5ELHVDQU1DIn0=
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.WishlistService = exports.WISHLIST_MODULE = void 0;
|
|
7
|
+
const utils_1 = require("@medusajs/framework/utils");
|
|
8
|
+
const service_1 = __importDefault(require("./service"));
|
|
9
|
+
exports.WishlistService = service_1.default;
|
|
10
|
+
exports.WISHLIST_MODULE = "wishlist";
|
|
11
|
+
exports.default = (0, utils_1.Module)(exports.WISHLIST_MODULE, {
|
|
12
|
+
service: service_1.default,
|
|
13
|
+
});
|
|
14
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbW9kdWxlcy93aXNobGlzdC9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxxREFBa0Q7QUFDbEQsd0RBQXVDO0FBUTlCLDBCQVJGLGlCQUFlLENBUUU7QUFOWCxRQUFBLGVBQWUsR0FBRyxVQUFVLENBQUE7QUFFekMsa0JBQWUsSUFBQSxjQUFNLEVBQUMsdUJBQWUsRUFBRTtJQUNyQyxPQUFPLEVBQUUsaUJBQWU7Q0FDekIsQ0FBQyxDQUFBIn0=
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Migration20261030160000 = void 0;
|
|
4
|
+
const migrations_1 = require("@medusajs/framework/mikro-orm/migrations");
|
|
5
|
+
class Migration20261030160000 extends migrations_1.Migration {
|
|
6
|
+
async up() {
|
|
7
|
+
this.addSql(`create table if not exists "wishlist_item" ("id" text not null, "customer_id" text not null, "product_id" text not null, "created_at" timestamptz not null default now(), "updated_at" timestamptz not null default now(), "deleted_at" timestamptz null, constraint "wishlist_item_pkey" primary key ("id"));`);
|
|
8
|
+
this.addSql(`create unique index if not exists "IDX_wishlist_customer_product" on "wishlist_item" ("customer_id", "product_id") where deleted_at is null;`);
|
|
9
|
+
this.addSql(`create index if not exists "IDX_wishlist_customer_created" on "wishlist_item" ("customer_id", "created_at") where deleted_at is null;`);
|
|
10
|
+
this.addSql(`create index if not exists "IDX_wishlist_product" on "wishlist_item" ("product_id") where deleted_at is null;`);
|
|
11
|
+
}
|
|
12
|
+
async down() {
|
|
13
|
+
this.addSql(`drop table if exists "wishlist_item" cascade;`);
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
exports.Migration20261030160000 = Migration20261030160000;
|
|
17
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWlncmF0aW9uMjAyNjEwMzAxNjAwMDAuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbW9kdWxlcy93aXNobGlzdC9taWdyYXRpb25zL01pZ3JhdGlvbjIwMjYxMDMwMTYwMDAwLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHlFQUFvRTtBQUVwRSxNQUFhLHVCQUF3QixTQUFRLHNCQUFTO0lBQ3BELEtBQUssQ0FBQyxFQUFFO1FBQ04sSUFBSSxDQUFDLE1BQU0sQ0FBQyxnVEFBZ1QsQ0FBQyxDQUFBO1FBQzdULElBQUksQ0FBQyxNQUFNLENBQUMsOElBQThJLENBQUMsQ0FBQTtRQUMzSixJQUFJLENBQUMsTUFBTSxDQUFDLHVJQUF1SSxDQUFDLENBQUE7UUFDcEosSUFBSSxDQUFDLE1BQU0sQ0FBQywrR0FBK0csQ0FBQyxDQUFBO0lBQzlILENBQUM7SUFFRCxLQUFLLENBQUMsSUFBSTtRQUNSLElBQUksQ0FBQyxNQUFNLENBQUMsK0NBQStDLENBQUMsQ0FBQTtJQUM5RCxDQUFDO0NBQ0Y7QUFYRCwwREFXQyJ9
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
declare const WishlistItem: import("@medusajs/framework/utils").DmlEntity<import("@medusajs/framework/utils").DMLEntitySchemaBuilder<{
|
|
2
|
+
id: import("@medusajs/framework/utils").PrimaryKeyModifier<string, import("@medusajs/framework/utils").IdProperty>;
|
|
3
|
+
customer_id: import("@medusajs/framework/utils").TextProperty;
|
|
4
|
+
product_id: import("@medusajs/framework/utils").TextProperty;
|
|
5
|
+
}>, "wishlist_item">;
|
|
6
|
+
export default WishlistItem;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const utils_1 = require("@medusajs/framework/utils");
|
|
4
|
+
const WishlistItem = utils_1.model.define("wishlist_item", {
|
|
5
|
+
id: utils_1.model.id().primaryKey(),
|
|
6
|
+
customer_id: utils_1.model.text(),
|
|
7
|
+
product_id: utils_1.model.text(),
|
|
8
|
+
}).indexes([
|
|
9
|
+
{ on: ["customer_id", "product_id"], unique: true },
|
|
10
|
+
{ on: ["customer_id", "created_at"] },
|
|
11
|
+
{ on: ["product_id"] },
|
|
12
|
+
]);
|
|
13
|
+
exports.default = WishlistItem;
|
|
14
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2lzaGxpc3QtaXRlbS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9tb2R1bGVzL3dpc2hsaXN0L21vZGVscy93aXNobGlzdC1pdGVtLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEscURBQWlEO0FBRWpELE1BQU0sWUFBWSxHQUFHLGFBQUssQ0FBQyxNQUFNLENBQUMsZUFBZSxFQUFFO0lBQ2pELEVBQUUsRUFBRSxhQUFLLENBQUMsRUFBRSxFQUFFLENBQUMsVUFBVSxFQUFFO0lBQzNCLFdBQVcsRUFBRSxhQUFLLENBQUMsSUFBSSxFQUFFO0lBQ3pCLFVBQVUsRUFBRSxhQUFLLENBQUMsSUFBSSxFQUFFO0NBQ3pCLENBQUMsQ0FBQyxPQUFPLENBQUM7SUFDVCxFQUFFLEVBQUUsRUFBRSxDQUFDLGFBQWEsRUFBRSxZQUFZLENBQUMsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO0lBQ25ELEVBQUUsRUFBRSxFQUFFLENBQUMsYUFBYSxFQUFFLFlBQVksQ0FBQyxFQUFFO0lBQ3JDLEVBQUUsRUFBRSxFQUFFLENBQUMsWUFBWSxDQUFDLEVBQUU7Q0FDdkIsQ0FBQyxDQUFBO0FBRUYsa0JBQWUsWUFBWSxDQUFBIn0=
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
declare const WishlistBaseService: import("@medusajs/framework/utils").MedusaServiceReturnType<import("@medusajs/framework/utils").ModelConfigurationsToConfigTemplate<{
|
|
2
|
+
readonly WishlistItem: import("@medusajs/framework/utils").DmlEntity<import("@medusajs/framework/utils").DMLEntitySchemaBuilder<{
|
|
3
|
+
id: import("@medusajs/framework/utils").PrimaryKeyModifier<string, import("@medusajs/framework/utils").IdProperty>;
|
|
4
|
+
customer_id: import("@medusajs/framework/utils").TextProperty;
|
|
5
|
+
product_id: import("@medusajs/framework/utils").TextProperty;
|
|
6
|
+
}>, "wishlist_item">;
|
|
7
|
+
}>>;
|
|
8
|
+
type WishlistBaseServiceInstance = InstanceType<typeof WishlistBaseService>;
|
|
9
|
+
export default class WishlistService extends WishlistBaseService {
|
|
10
|
+
createWishlistItems: WishlistBaseServiceInstance["createWishlistItems"];
|
|
11
|
+
deleteWishlistItems: WishlistBaseServiceInstance["deleteWishlistItems"];
|
|
12
|
+
listWishlistItems: WishlistBaseServiceInstance["listWishlistItems"];
|
|
13
|
+
listAndCountWishlistItems: WishlistBaseServiceInstance["listAndCountWishlistItems"];
|
|
14
|
+
}
|
|
15
|
+
export {};
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const utils_1 = require("@medusajs/framework/utils");
|
|
7
|
+
const wishlist_item_1 = __importDefault(require("./models/wishlist-item"));
|
|
8
|
+
const WishlistBaseService = (0, utils_1.MedusaService)({ WishlistItem: wishlist_item_1.default });
|
|
9
|
+
class WishlistService extends WishlistBaseService {
|
|
10
|
+
}
|
|
11
|
+
exports.default = WishlistService;
|
|
12
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9tb2R1bGVzL3dpc2hsaXN0L3NlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxxREFBeUQ7QUFDekQsMkVBQWlEO0FBRWpELE1BQU0sbUJBQW1CLEdBQUcsSUFBQSxxQkFBYSxFQUFDLEVBQUUsWUFBWSxFQUFaLHVCQUFZLEVBQUUsQ0FBQyxDQUFBO0FBRzNELE1BQXFCLGVBQWdCLFNBQVEsbUJBQW1CO0NBSy9EO0FBTEQsa0NBS0MifQ==
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const utils_1 = require("@medusajs/framework/utils");
|
|
7
|
+
const service_1 = __importDefault(require("./service"));
|
|
8
|
+
exports.default = (0, utils_1.ModuleProvider)(utils_1.Modules.NOTIFICATION, {
|
|
9
|
+
services: [service_1.default],
|
|
10
|
+
});
|
|
11
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvcHJvdmlkZXJzL2VtYWlsL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEscURBQW1FO0FBQ25FLHdEQUE4RDtBQUU5RCxrQkFBZSxJQUFBLHNCQUFjLEVBQUMsZUFBTyxDQUFDLFlBQVksRUFBRTtJQUNsRCxRQUFRLEVBQUUsQ0FBQyxpQkFBc0MsQ0FBQztDQUNuRCxDQUFDLENBQUEifQ==
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { Logger, ProviderSendNotificationDTO, ProviderSendNotificationResultsDTO } from "@medusajs/framework/types";
|
|
2
|
+
import { AbstractNotificationProviderService } from "@medusajs/framework/utils";
|
|
3
|
+
type EmailDriver = "sendgrid" | "resend";
|
|
4
|
+
type EmailProviderOptions = {
|
|
5
|
+
channels?: string[];
|
|
6
|
+
driver: EmailDriver;
|
|
7
|
+
api_key: string;
|
|
8
|
+
from: string;
|
|
9
|
+
reply_to?: string;
|
|
10
|
+
};
|
|
11
|
+
type InjectedDependencies = {
|
|
12
|
+
logger: Logger;
|
|
13
|
+
};
|
|
14
|
+
declare class HszrdmEmailNotificationProviderService extends AbstractNotificationProviderService {
|
|
15
|
+
static identifier: string;
|
|
16
|
+
private readonly logger;
|
|
17
|
+
private readonly options;
|
|
18
|
+
constructor({ logger }: InjectedDependencies, options: EmailProviderOptions);
|
|
19
|
+
static validateOptions(options: Record<string, any>): void;
|
|
20
|
+
send(notification: ProviderSendNotificationDTO): Promise<ProviderSendNotificationResultsDTO>;
|
|
21
|
+
private sendWithSendGrid;
|
|
22
|
+
private sendWithResend;
|
|
23
|
+
}
|
|
24
|
+
export default HszrdmEmailNotificationProviderService;
|