@hartl-services/medusa-affiliate 0.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.
Files changed (169) hide show
  1. package/.medusa/server/src/admin/index.js +3739 -0
  2. package/.medusa/server/src/admin/index.mjs +3738 -0
  3. package/.medusa/server/src/api/admin/affiliate-applications/[id]/approve/route.js +28 -0
  4. package/.medusa/server/src/api/admin/affiliate-applications/[id]/reject/route.js +19 -0
  5. package/.medusa/server/src/api/admin/affiliate-applications/route.js +23 -0
  6. package/.medusa/server/src/api/admin/affiliate-distribution-reports/query.js +171 -0
  7. package/.medusa/server/src/api/admin/affiliate-distribution-reports/route.js +13 -0
  8. package/.medusa/server/src/api/admin/affiliate-program-settings/route.js +27 -0
  9. package/.medusa/server/src/api/admin/affiliate-reports/[id]/route.js +45 -0
  10. package/.medusa/server/src/api/admin/affiliate-reports/route.js +27 -0
  11. package/.medusa/server/src/api/admin/affiliates/[id]/consignment-reminders/route.js +31 -0
  12. package/.medusa/server/src/api/admin/affiliates/[id]/consignment-transfers/route.js +41 -0
  13. package/.medusa/server/src/api/admin/affiliates/[id]/coupon-codes/[coupon_id]/reconcile/route.js +34 -0
  14. package/.medusa/server/src/api/admin/affiliates/[id]/coupon-codes/[coupon_id]/revoke/route.js +36 -0
  15. package/.medusa/server/src/api/admin/affiliates/[id]/coupon-codes/[coupon_id]/rotate/route.js +40 -0
  16. package/.medusa/server/src/api/admin/affiliates/[id]/coupon-codes/route.js +56 -0
  17. package/.medusa/server/src/api/admin/affiliates/[id]/distribution/route.js +45 -0
  18. package/.medusa/server/src/api/admin/affiliates/[id]/inactive/route.js +20 -0
  19. package/.medusa/server/src/api/admin/affiliates/[id]/route.js +50 -0
  20. package/.medusa/server/src/api/admin/affiliates/[id]/slugs/[slug_id]/route.js +19 -0
  21. package/.medusa/server/src/api/admin/affiliates/[id]/slugs/route.js +26 -0
  22. package/.medusa/server/src/api/admin/affiliates/route.js +43 -0
  23. package/.medusa/server/src/api/admin/consignment-report-response.js +36 -0
  24. package/.medusa/server/src/api/admin/consignment-reports/[id]/approve/route.js +25 -0
  25. package/.medusa/server/src/api/admin/consignment-reports/[id]/correct/route.js +18 -0
  26. package/.medusa/server/src/api/admin/consignment-reports/[id]/reject/route.js +15 -0
  27. package/.medusa/server/src/api/admin/consignment-reports/[id]/route.js +11 -0
  28. package/.medusa/server/src/api/admin/consignment-reports/route.js +27 -0
  29. package/.medusa/server/src/api/admin/customers/[id]/affiliate/route.js +50 -0
  30. package/.medusa/server/src/api/admin/orders/[id]/affiliate-attribution/route.js +30 -0
  31. package/.medusa/server/src/api/affiliate-coupon-http.js +152 -0
  32. package/.medusa/server/src/api/affiliate-referral-cookie.js +34 -0
  33. package/.medusa/server/src/api/affiliate-self-service-http.js +37 -0
  34. package/.medusa/server/src/api/middlewares.js +786 -0
  35. package/.medusa/server/src/api/store/affiliate-referrals/apply-coupon/route.js +47 -0
  36. package/.medusa/server/src/api/store/affiliate-referrals/capture/route.js +76 -0
  37. package/.medusa/server/src/api/store/affiliate-referrals/carts/[cart_id]/route.js +20 -0
  38. package/.medusa/server/src/api/store/affiliates/consignment-inventory/route.js +53 -0
  39. package/.medusa/server/src/api/store/affiliates/consignment-report-response.js +31 -0
  40. package/.medusa/server/src/api/store/affiliates/consignment-reports/[id]/submit/route.js +40 -0
  41. package/.medusa/server/src/api/store/affiliates/consignment-reports/route.js +43 -0
  42. package/.medusa/server/src/api/store/affiliates/coupon-labels/route.js +14 -0
  43. package/.medusa/server/src/api/store/affiliates/me/commissions/route.js +35 -0
  44. package/.medusa/server/src/api/store/affiliates/me/coupon-codes/[coupon_id]/revoke/route.js +36 -0
  45. package/.medusa/server/src/api/store/affiliates/me/coupon-codes/[coupon_id]/rotate/route.js +40 -0
  46. package/.medusa/server/src/api/store/affiliates/me/coupon-codes/route.js +55 -0
  47. package/.medusa/server/src/api/store/affiliates/me/dashboard/route.js +15 -0
  48. package/.medusa/server/src/api/store/affiliates/me/route.js +85 -0
  49. package/.medusa/server/src/api/store/affiliates/me/slugs/[slug_id]/route.js +29 -0
  50. package/.medusa/server/src/api/store/affiliates/me/slugs/route.js +34 -0
  51. package/.medusa/server/src/api/store/affiliates/own-order-discount/route.js +22 -0
  52. package/.medusa/server/src/api/store/affiliates/own-order-promotion/route.js +30 -0
  53. package/.medusa/server/src/api/store/affiliates/register/route.js +27 -0
  54. package/.medusa/server/src/api/store/affiliates/resolve-referral/route.js +34 -0
  55. package/.medusa/server/src/api/validators.js +52 -0
  56. package/.medusa/server/src/api/wire-response.js +10 -0
  57. package/.medusa/server/src/integration/email-events.js +51 -0
  58. package/.medusa/server/src/integrations/inventory-transfer/batch-management-transfer-adapter.js +36 -0
  59. package/.medusa/server/src/integrations/inventory-transfer/native-inventory-transfer-adapter.js +30 -0
  60. package/.medusa/server/src/integrations/inventory-transfer/resolve-inventory-transfer-adapter.js +46 -0
  61. package/.medusa/server/src/integrations/inventory-transfer/types.js +3 -0
  62. package/.medusa/server/src/jobs/affiliate-attribution-expiry.js +20 -0
  63. package/.medusa/server/src/jobs/affiliate-consignment-report-reminders.js +15 -0
  64. package/.medusa/server/src/jobs/affiliate-promotion-freshness.js +24 -0
  65. package/.medusa/server/src/lib/query-string.js +15 -0
  66. package/.medusa/server/src/modules/affiliate/domain/affiliate-attribution-policy.js +81 -0
  67. package/.medusa/server/src/modules/affiliate/domain/affiliate-coupon-policy.js +61 -0
  68. package/.medusa/server/src/modules/affiliate/domain/commission-policy.js +33 -0
  69. package/.medusa/server/src/modules/affiliate/domain/consignment-reminder-rules.js +74 -0
  70. package/.medusa/server/src/modules/affiliate/domain/email-normalization.js +20 -0
  71. package/.medusa/server/src/modules/affiliate/domain/own-order-coupon-code.js +37 -0
  72. package/.medusa/server/src/modules/affiliate/domain/plugin-options.js +40 -0
  73. package/.medusa/server/src/modules/affiliate/index.js +13 -0
  74. package/.medusa/server/src/modules/affiliate/migrations/Migration20260827085154.js +423 -0
  75. package/.medusa/server/src/modules/affiliate/models/affiliate-application.js +38 -0
  76. package/.medusa/server/src/modules/affiliate/models/affiliate-cart-referral.js +65 -0
  77. package/.medusa/server/src/modules/affiliate/models/affiliate-code-redemption.js +41 -0
  78. package/.medusa/server/src/modules/affiliate/models/affiliate-coupon.js +55 -0
  79. package/.medusa/server/src/modules/affiliate/models/affiliate-distribution-settings.js +22 -0
  80. package/.medusa/server/src/modules/affiliate/models/affiliate-order-attribution.js +49 -0
  81. package/.medusa/server/src/modules/affiliate/models/affiliate-program-settings.js +28 -0
  82. package/.medusa/server/src/modules/affiliate/models/affiliate-referral-session.js +34 -0
  83. package/.medusa/server/src/modules/affiliate/models/affiliate-slug.js +27 -0
  84. package/.medusa/server/src/modules/affiliate/models/affiliate.js +49 -0
  85. package/.medusa/server/src/modules/affiliate/models/commission-entry.js +62 -0
  86. package/.medusa/server/src/modules/affiliate/models/consignment-report-line.js +21 -0
  87. package/.medusa/server/src/modules/affiliate/models/consignment-report.js +31 -0
  88. package/.medusa/server/src/modules/affiliate/models/consignment-transfer-line.js +16 -0
  89. package/.medusa/server/src/modules/affiliate/models/consignment-transfer.js +20 -0
  90. package/.medusa/server/src/modules/affiliate/models/customer-affiliate-assignment.js +58 -0
  91. package/.medusa/server/src/modules/affiliate/service.js +2321 -0
  92. package/.medusa/server/src/modules/affiliate/services/affiliate-application-manager.js +171 -0
  93. package/.medusa/server/src/modules/affiliate/services/affiliate-coupon-manager.js +441 -0
  94. package/.medusa/server/src/modules/affiliate/services/affiliate-discount.service.js +55 -0
  95. package/.medusa/server/src/modules/affiliate/services/affiliate-manager.js +242 -0
  96. package/.medusa/server/src/modules/affiliate/services/affiliate-partner-portal.service.js +138 -0
  97. package/.medusa/server/src/modules/affiliate/services/affiliate-report.service.js +436 -0
  98. package/.medusa/server/src/modules/affiliate/services/affiliate-slug-manager.js +163 -0
  99. package/.medusa/server/src/modules/affiliate/services/commission-ledger.service.js +729 -0
  100. package/.medusa/server/src/modules/affiliate/services/customer-affiliate-assignment-manager.js +350 -0
  101. package/.medusa/server/src/modules/affiliate/services/order-attribution-manager.js +1051 -0
  102. package/.medusa/server/src/modules/affiliate/services/referral-lifecycle-manager.js +1420 -0
  103. package/.medusa/server/src/modules/affiliate/services/utils.js +49 -0
  104. package/.medusa/server/src/modules/affiliate/types/internal.js +3 -0
  105. package/.medusa/server/src/paths/affiliate.js +7 -0
  106. package/.medusa/server/src/paths/index.js +18 -0
  107. package/.medusa/server/src/schemas/index.js +18 -0
  108. package/.medusa/server/src/schemas/store.js +24 -0
  109. package/.medusa/server/src/subscribers/affiliate-cart-updated.js +92 -0
  110. package/.medusa/server/src/subscribers/affiliate-order-canceled.js +70 -0
  111. package/.medusa/server/src/subscribers/affiliate-order-placed.js +63 -0
  112. package/.medusa/server/src/subscribers/affiliate-order-return-received.js +67 -0
  113. package/.medusa/server/src/subscribers/affiliate-product-eligibility-updated.js +87 -0
  114. package/.medusa/server/src/types/admin-api.js +3 -0
  115. package/.medusa/server/src/types/enums.js +53 -0
  116. package/.medusa/server/src/types/index.js +32 -0
  117. package/.medusa/server/src/types/public.js +3 -0
  118. package/.medusa/server/src/types/store-api.js +3 -0
  119. package/.medusa/server/src/utils/affiliate-cart-operation-lock.js +316 -0
  120. package/.medusa/server/src/utils/affiliate-promotion-mutation-authorization.js +49 -0
  121. package/.medusa/server/src/utils/cart-promotions.js +9 -0
  122. package/.medusa/server/src/utils/money.js +79 -0
  123. package/.medusa/server/src/utils/promotion-code-availability.js +34 -0
  124. package/.medusa/server/src/utils/registered-email-checkout.js +101 -0
  125. package/.medusa/server/src/utils/resolve-services.js +7 -0
  126. package/.medusa/server/src/utils/settle-cart-promotions.js +44 -0
  127. package/.medusa/server/src/workflows/affiliate/affiliate-coupon-cart.js +215 -0
  128. package/.medusa/server/src/workflows/affiliate/affiliate-coupon-command-authorization.js +20 -0
  129. package/.medusa/server/src/workflows/affiliate/apply-affiliate-coupon.js +174 -0
  130. package/.medusa/server/src/workflows/affiliate/apply-own-order-promotion.js +89 -0
  131. package/.medusa/server/src/workflows/affiliate/approve-consignment-report.js +186 -0
  132. package/.medusa/server/src/workflows/affiliate/correct-approved-consignment-report.js +263 -0
  133. package/.medusa/server/src/workflows/affiliate/create-affiliate-coupon.js +35 -0
  134. package/.medusa/server/src/workflows/affiliate/create-commission-correction-for-cancellation.js +21 -0
  135. package/.medusa/server/src/workflows/affiliate/create-commission-correction-for-refund.js +24 -0
  136. package/.medusa/server/src/workflows/affiliate/create-commission-for-order.js +17 -0
  137. package/.medusa/server/src/workflows/affiliate/deactivate-affiliate.js +89 -0
  138. package/.medusa/server/src/workflows/affiliate/enable-distribution.js +120 -0
  139. package/.medusa/server/src/workflows/affiliate/enrich-affiliate-report.js +75 -0
  140. package/.medusa/server/src/workflows/affiliate/ensure-affiliate-coupon-promotion.js +410 -0
  141. package/.medusa/server/src/workflows/affiliate/ensure-affiliate-own-order-promotion.js +240 -0
  142. package/.medusa/server/src/workflows/affiliate/ensure-default-affiliate-coupon.js +32 -0
  143. package/.medusa/server/src/workflows/affiliate/expire-affiliate-attribution-state.js +131 -0
  144. package/.medusa/server/src/workflows/affiliate/finalize-affiliate-order-attribution.js +82 -0
  145. package/.medusa/server/src/workflows/affiliate/payment-authorization.js +33 -0
  146. package/.medusa/server/src/workflows/affiliate/promotion-eligibility.js +179 -0
  147. package/.medusa/server/src/workflows/affiliate/reconcile-affiliate-cart-referral.js +219 -0
  148. package/.medusa/server/src/workflows/affiliate/reconcile-affiliate-coupon.js +388 -0
  149. package/.medusa/server/src/workflows/affiliate/refresh-affiliate-promotions.js +114 -0
  150. package/.medusa/server/src/workflows/affiliate/resolve-coupon-labels.js +40 -0
  151. package/.medusa/server/src/workflows/affiliate/revoke-affiliate-coupon.js +29 -0
  152. package/.medusa/server/src/workflows/affiliate/rotate-affiliate-coupon.js +36 -0
  153. package/.medusa/server/src/workflows/affiliate/run-consignment-report-reminders.js +58 -0
  154. package/.medusa/server/src/workflows/affiliate/submit-consignment-report.js +279 -0
  155. package/.medusa/server/src/workflows/affiliate/transfer-batch-aware-inventory.js +172 -0
  156. package/.medusa/server/src/workflows/affiliate/transfer-consignment-stock.js +106 -0
  157. package/.medusa/server/src/workflows/affiliate/update-affiliate-coupon-discounts.js +129 -0
  158. package/.medusa/server/src/workflows/affiliate/utils.js +118 -0
  159. package/.medusa/server/src/workflows/hooks/complete-cart-affiliate-attribution.js +57 -0
  160. package/.medusa/server/src/workflows/hooks/complete-cart-order-created-composition.js +111 -0
  161. package/.medusa/server/src/workflows/hooks/complete-cart-own-order-discount.js +75 -0
  162. package/.medusa/server/src/workflows/hooks/enforce-unique-promotion-codes.js +33 -0
  163. package/.medusa/server/src/workflows/hooks/validate-affiliate-customer-code.js +239 -0
  164. package/.medusa/server/src/workflows/hooks/validate-complete-cart-affiliate-referral.js +137 -0
  165. package/LICENSE +21 -0
  166. package/README.md +799 -0
  167. package/dist/integration/email-events.d.ts +20 -0
  168. package/dist/integration/email-events.js +50 -0
  169. package/package.json +84 -0
@@ -0,0 +1,20 @@
1
+ import { z } from "@medusajs/framework/zod";
2
+ export declare const AFFILIATE_CONSIGNMENT_REPORT_REMINDER_DUE_EVENT: "affiliate.consignment_report_reminder_due.v1";
3
+ export declare const AffiliateEmailCalendarDateSchema: z.ZodString;
4
+ export declare const AffiliateEmailCalendarMonthSchema: z.ZodString;
5
+ export declare const createAffiliateConsignmentReminderKey: (affiliateId: string, periodStart: string) => string;
6
+ export declare const AffiliateConsignmentReportReminderDueEventSchema: z.ZodObject<{
7
+ schema_version: z.ZodLiteral<1>;
8
+ reminder_key: z.ZodString;
9
+ affiliate_id: z.ZodString;
10
+ customer_id: z.ZodNullable<z.ZodString>;
11
+ affiliate_display_name: z.ZodString;
12
+ period_start: z.ZodString;
13
+ due_date: z.ZodString;
14
+ locale: z.ZodNullable<z.ZodString>;
15
+ trigger: z.ZodEnum<{
16
+ scheduled: "scheduled";
17
+ manual: "manual";
18
+ }>;
19
+ }, z.core.$strict>;
20
+ export type AffiliateConsignmentReportReminderDueEvent = z.infer<typeof AffiliateConsignmentReportReminderDueEventSchema>;
@@ -0,0 +1,50 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AffiliateConsignmentReportReminderDueEventSchema = exports.createAffiliateConsignmentReminderKey = exports.AffiliateEmailCalendarMonthSchema = exports.AffiliateEmailCalendarDateSchema = exports.AFFILIATE_CONSIGNMENT_REPORT_REMINDER_DUE_EVENT = void 0;
4
+ const zod_1 = require("@medusajs/framework/zod");
5
+ exports.AFFILIATE_CONSIGNMENT_REPORT_REMINDER_DUE_EVENT = "affiliate.consignment_report_reminder_due.v1";
6
+ const NonEmptyStringSchema = zod_1.z.string().trim().min(1);
7
+ const isCalendarDate = (value) => {
8
+ const [year, month, day] = value.split("-").map(Number);
9
+ const date = new Date(Date.UTC(year, month - 1, day));
10
+ return (date.getUTCFullYear() === year &&
11
+ date.getUTCMonth() === month - 1 &&
12
+ date.getUTCDate() === day);
13
+ };
14
+ exports.AffiliateEmailCalendarDateSchema = zod_1.z
15
+ .string()
16
+ .regex(/^\d{4}-\d{2}-\d{2}$/, "Expected YYYY-MM-DD.")
17
+ .refine(isCalendarDate, "Expected a valid calendar date.");
18
+ exports.AffiliateEmailCalendarMonthSchema = zod_1.z
19
+ .string()
20
+ .regex(/^\d{4}-\d{2}-01$/, "Expected YYYY-MM-01.")
21
+ .refine(isCalendarDate, "Expected a valid calendar month.");
22
+ const createAffiliateConsignmentReminderKey = (affiliateId, periodStart) => {
23
+ const normalizedAffiliateId = NonEmptyStringSchema.parse(affiliateId);
24
+ const normalizedPeriodStart = exports.AffiliateEmailCalendarMonthSchema.parse(periodStart);
25
+ return `affiliate-consignment:${normalizedAffiliateId}:${normalizedPeriodStart}`;
26
+ };
27
+ exports.createAffiliateConsignmentReminderKey = createAffiliateConsignmentReminderKey;
28
+ exports.AffiliateConsignmentReportReminderDueEventSchema = zod_1.z
29
+ .object({
30
+ schema_version: zod_1.z.literal(1),
31
+ reminder_key: NonEmptyStringSchema,
32
+ affiliate_id: NonEmptyStringSchema,
33
+ customer_id: NonEmptyStringSchema.nullable(),
34
+ affiliate_display_name: NonEmptyStringSchema,
35
+ period_start: exports.AffiliateEmailCalendarMonthSchema,
36
+ due_date: exports.AffiliateEmailCalendarDateSchema,
37
+ locale: NonEmptyStringSchema.max(35).nullable(),
38
+ trigger: zod_1.z.enum(["scheduled", "manual"]),
39
+ })
40
+ .strict()
41
+ .superRefine((value, context) => {
42
+ const expectedKey = `affiliate-consignment:${value.affiliate_id}:${value.period_start}`;
43
+ if (value.reminder_key !== expectedKey) {
44
+ context.addIssue({
45
+ code: zod_1.z.ZodIssueCode.custom,
46
+ message: "reminder_key must match affiliate_id and period_start.",
47
+ path: ["reminder_key"],
48
+ });
49
+ }
50
+ });
package/package.json ADDED
@@ -0,0 +1,84 @@
1
+ {
2
+ "name": "@hartl-services/medusa-affiliate",
3
+ "version": "0.3.0",
4
+ "description": "Reusable affiliate management plugin for Medusa.",
5
+ "license": "MIT",
6
+ "files": [
7
+ ".medusa/server",
8
+ "dist",
9
+ "README.md",
10
+ "LICENSE"
11
+ ],
12
+ "repository": {
13
+ "type": "git",
14
+ "url": "git+https://gitlab.com/hartl-services-gmbh/services/food-supplements-e-commerce.git",
15
+ "directory": "plugins/affiliate"
16
+ },
17
+ "publishConfig": {
18
+ "access": "public",
19
+ "registry": "https://registry.npmjs.org/"
20
+ },
21
+ "sideEffects": [
22
+ "./.medusa/**"
23
+ ],
24
+ "exports": {
25
+ "./package.json": "./package.json",
26
+ "./.medusa/server/src/modules/*": "./.medusa/server/src/modules/*/index.js",
27
+ "./.medusa/server/src/*": "./.medusa/server/src/*",
28
+ "./admin": {
29
+ "import": "./.medusa/server/src/admin/index.mjs",
30
+ "require": "./.medusa/server/src/admin/index.js"
31
+ },
32
+ "./integration": {
33
+ "types": "./dist/integration/email-events.d.ts",
34
+ "import": "./dist/integration/email-events.js",
35
+ "require": "./dist/integration/email-events.js"
36
+ }
37
+ },
38
+ "peerDependencies": {
39
+ "@medusajs/admin-sdk": "^2.19.0",
40
+ "@medusajs/framework": "^2.19.0",
41
+ "@medusajs/js-sdk": "^2.19.0",
42
+ "@medusajs/medusa": "^2.19.0",
43
+ "@medusajs/ui": "^4.2.1",
44
+ "@sentry/node": "^10.74.0",
45
+ "@tanstack/react-query": "^5.64.2",
46
+ "react": "^18.3.1",
47
+ "react-router-dom": "^7.18.2"
48
+ },
49
+ "dependencies": {
50
+ "@hartl-services/medusa-food-supplements-contracts": "^0.9.1"
51
+ },
52
+ "devDependencies": {
53
+ "@medusajs/admin-sdk": "2.19.0",
54
+ "@medusajs/cli": "2.19.0",
55
+ "@medusajs/framework": "2.19.0",
56
+ "@medusajs/js-sdk": "2.19.0",
57
+ "@medusajs/medusa": "2.19.0",
58
+ "@medusajs/ui": "4.2.1",
59
+ "@sentry/node": "^10.74.0",
60
+ "@swc/core": "^1.7.28",
61
+ "@swc/jest": "^0.2.39",
62
+ "@tanstack/react-query": "5.64.2",
63
+ "@types/jest": "^29.5.14",
64
+ "@types/node": "^20.12.11",
65
+ "@types/react": "^18.3.2",
66
+ "@types/react-dom": "^18.2.25",
67
+ "jest": "^29.7.0",
68
+ "react": "^18.3.1",
69
+ "react-router-dom": "7.18.2",
70
+ "typescript": "^5.6.2",
71
+ "vite": "7.3.6",
72
+ "yalc": "^1.0.0-pre.53"
73
+ },
74
+ "engines": {
75
+ "node": ">=20"
76
+ },
77
+ "scripts": {
78
+ "build": "medusa plugin:build && tsc -p tsconfig.public.json",
79
+ "dev": "medusa plugin:develop",
80
+ "typecheck": "tsc --noEmit",
81
+ "pretest:unit": "pnpm --filter @hartl-services/medusa-food-supplements-contracts build",
82
+ "test:unit": "jest"
83
+ }
84
+ }