@classytic/loyalty 0.1.0 → 0.2.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 (43) hide show
  1. package/CHANGELOG.md +68 -0
  2. package/dist/config-JYTMP1F7.d.mts +136 -0
  3. package/dist/{constants-C75GvizO.mjs → constants-DkQYkOK1.mjs} +3 -2
  4. package/dist/domain/enums/index.d.mts +1 -1
  5. package/dist/domain/enums/index.mjs +1 -1
  6. package/dist/events/index.d.mts +2 -2
  7. package/dist/events/index.mjs +3 -3
  8. package/dist/events-BjzHSLBn.mjs +344 -0
  9. package/dist/index-2izQQext.d.mts +281 -0
  10. package/dist/index-BmqGuj38.d.mts +400 -0
  11. package/dist/{index-CaH4GhSF.d.mts → index-DMK8a98J.d.mts} +1 -1
  12. package/dist/index-qI1WvtNg.d.mts +361 -0
  13. package/dist/index.d.mts +28 -12
  14. package/dist/index.mjs +30 -26
  15. package/dist/loyalty-events-Cyt9TwX6.mjs +50 -0
  16. package/dist/models/index.d.mts +1225 -2
  17. package/dist/models/index.mjs +2 -2
  18. package/dist/{models-CrZPmVxt.mjs → models-uhh9c-7k.mjs} +104 -41
  19. package/dist/notifications/index.d.mts +1 -1
  20. package/dist/repositories/index.d.mts +2 -2
  21. package/dist/repositories/index.mjs +1 -1
  22. package/dist/repositories-ObGUgcSH.mjs +1917 -0
  23. package/dist/types/index.d.mts +2 -2
  24. package/package.json +18 -16
  25. package/dist/config-aNigy4ec.d.mts +0 -90
  26. package/dist/domain/index.d.mts +0 -90
  27. package/dist/domain/index.mjs +0 -4
  28. package/dist/domain-errors-D7q-2LYD.mjs +0 -120
  29. package/dist/event-emitter.port-CLYPoMni.d.mts +0 -8
  30. package/dist/event-types-xQBtYBbX.mjs +0 -24
  31. package/dist/events-CprEWlN7.mjs +0 -25
  32. package/dist/index-B6ZstxSP.d.mts +0 -2357
  33. package/dist/index-BcoGeDco.d.mts +0 -127
  34. package/dist/index-DqzTjeEB.d.mts +0 -148
  35. package/dist/index-O7TL4R2P.d.mts +0 -86
  36. package/dist/index-_pg4J11t.d.mts +0 -191
  37. package/dist/repositories-qMX7Xh_y.mjs +0 -440
  38. package/dist/services/index.d.mts +0 -2
  39. package/dist/services/index.mjs +0 -2
  40. package/dist/services-CoTqC4E6.mjs +0 -1098
  41. package/dist/tier-definition-Djf72UPa.d.mts +0 -120
  42. package/dist/tier-definition.port-BzrHYBRo.d.mts +0 -143
  43. /package/dist/{notification.port-BzUsH0It.d.mts → notification.port-9B5xlzxQ.d.mts} +0 -0
@@ -1,3 +1,3 @@
1
- import { a as RepositoryPlugins, c as TenantConfig, i as PluginType, n as LoyaltyConfig, o as ResolvedConfig, r as ModelName, s as ResolvedTenant, t as IndexDefinition } from "../config-aNigy4ec.mjs";
2
- import { _ as TierEvaluationBatch, a as EnrollInput, c as UpdateTierInput, d as EarningResult, f as ExpirationResult, g as TierEvaluation, h as RedemptionValidation, i as EarnPointsInput, l as BalanceSummary, m as PaginatedResult, n as CreateEarningRuleInput, o as LoyaltyContext, p as ListQuery, r as CreateTierInput, s as UpdateEarningRuleInput, t as AdjustPointsInput, u as EarningBreakdown } from "../index-DqzTjeEB.mjs";
1
+ import { _ as TierEvaluationBatch, a as EnrollInput, c as UpdateTierInput, d as EarningResult, f as ExpirationResult, g as TierEvaluation, h as RedemptionValidation, i as EarnPointsInput, l as BalanceSummary, m as PaginatedResult, n as CreateEarningRuleInput, o as LoyaltyContext, p as ListQuery, r as CreateTierInput, s as UpdateEarningRuleInput, t as AdjustPointsInput, u as EarningBreakdown } from "../index-2izQQext.mjs";
2
+ import { a as PluginType, c as ResolvedTenant, i as ModelName, l as TenantConfig, n as LoyaltyConfig, o as RepositoryPlugins, s as ResolvedConfig, t as IndexDefinition } from "../config-JYTMP1F7.mjs";
3
3
  export { AdjustPointsInput, BalanceSummary, CreateEarningRuleInput, CreateTierInput, EarnPointsInput, EarningBreakdown, EarningResult, EnrollInput, ExpirationResult, IndexDefinition, ListQuery, LoyaltyConfig, LoyaltyContext, ModelName, PaginatedResult, PluginType, RedemptionValidation, RepositoryPlugins, ResolvedConfig, ResolvedTenant, TenantConfig, TierEvaluation, TierEvaluationBatch, UpdateEarningRuleInput, UpdateTierInput };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@classytic/loyalty",
3
- "version": "0.1.0",
3
+ "version": "0.2.0",
4
4
  "description": "Loyalty points, tiers, earning rules, referrals, and redemption engine for MongoDB",
5
5
  "author": "Classytic",
6
6
  "homepage": "https://www.npmjs.com/package/@classytic/loyalty",
@@ -24,10 +24,6 @@
24
24
  "types": "./dist/index.d.mts",
25
25
  "default": "./dist/index.mjs"
26
26
  },
27
- "./domain": {
28
- "types": "./dist/domain/index.d.mts",
29
- "default": "./dist/domain/index.mjs"
30
- },
31
27
  "./domain/enums": {
32
28
  "types": "./dist/domain/enums/index.d.mts",
33
29
  "default": "./dist/domain/enums/index.mjs"
@@ -40,10 +36,6 @@
40
36
  "types": "./dist/repositories/index.d.mts",
41
37
  "default": "./dist/repositories/index.mjs"
42
38
  },
43
- "./services": {
44
- "types": "./dist/services/index.d.mts",
45
- "default": "./dist/services/index.mjs"
46
- },
47
39
  "./events": {
48
40
  "types": "./dist/events/index.d.mts",
49
41
  "default": "./dist/events/index.mjs"
@@ -68,8 +60,12 @@
68
60
  "scripts": {
69
61
  "build": "tsdown",
70
62
  "dev": "tsdown --watch",
71
- "test": "vitest run",
72
- "test:watch": "vitest",
63
+ "test": "vitest run --project unit --project integration",
64
+ "test:unit": "vitest run --project unit",
65
+ "test:integration": "vitest run --project integration",
66
+ "test:scenarios": "vitest run --project scenarios",
67
+ "test:all": "vitest run",
68
+ "test:watch": "vitest --project unit --project integration",
73
69
  "test:coverage": "vitest run --coverage",
74
70
  "typecheck": "tsc --noEmit",
75
71
  "lint": "biome check src/ tests/",
@@ -80,20 +76,26 @@
80
76
  "release": "npm run build && npm run typecheck && npm publish --access public"
81
77
  },
82
78
  "peerDependencies": {
83
- "@classytic/mongokit": ">=3.5.3",
84
- "mongoose": ">=9.0.0"
79
+ "@classytic/mongokit": ">=3.11.0",
80
+ "@classytic/primitives": ">=0.1.0",
81
+ "@classytic/repo-core": ">=0.2.0",
82
+ "mongoose": ">=9.4.1",
83
+ "zod": ">=4.0.0"
85
84
  },
86
85
  "devDependencies": {
87
86
  "@biomejs/biome": "^2.4.9",
88
- "@classytic/mongokit": ">=3.5.3",
87
+ "@classytic/mongokit": ">=3.11.0",
88
+ "@classytic/primitives": ">=0.1.0",
89
+ "@classytic/repo-core": ">=0.2.0",
89
90
  "@types/node": "^25.5.0",
90
91
  "@vitest/coverage-v8": "^3.2.4",
91
92
  "knip": "^6.3.0",
92
93
  "mongodb-memory-server": "^10.2.3",
93
- "mongoose": "^9.3.3",
94
+ "mongoose": "^9.4.1",
94
95
  "tsdown": "^0.21.5",
95
96
  "typescript": "^5.7.0",
96
- "vitest": "^3.0.0"
97
+ "vitest": "^3.0.0",
98
+ "zod": "^4.3.6"
97
99
  },
98
100
  "keywords": [
99
101
  "loyalty",
@@ -1,90 +0,0 @@
1
- import { t as EventEmitterPort } from "./event-emitter.port-CLYPoMni.mjs";
2
- import { t as NotificationAdapter } from "./notification.port-BzUsH0It.mjs";
3
- import { Connection } from "mongoose";
4
-
5
- //#region src/types/config.d.ts
6
- interface TenantEnabled {
7
- field?: string;
8
- ref?: string;
9
- type?: 'ObjectId' | 'string';
10
- contextKey?: string;
11
- }
12
- type TenantConfig = false | TenantEnabled;
13
- interface IndexDefinition {
14
- fields: Record<string, 1 | -1>;
15
- options?: Record<string, unknown>;
16
- }
17
- type ModelName = 'member' | 'pointTransaction' | 'earningRule' | 'tierDefinition' | 'redemption' | 'referral';
18
- type PluginType = unknown;
19
- interface RepositoryPlugins {
20
- member?: PluginType[];
21
- pointTransaction?: PluginType[];
22
- earningRule?: PluginType[];
23
- tierDefinition?: PluginType[];
24
- redemption?: PluginType[];
25
- referral?: PluginType[];
26
- }
27
- interface LoyaltyConfig {
28
- mongoose: Connection;
29
- tenant?: TenantConfig;
30
- program?: {
31
- id?: string;
32
- conversionRate?: number;
33
- };
34
- redemption?: {
35
- minPoints?: number;
36
- minOrderAmount?: number;
37
- maxRedeemPercent?: number;
38
- reservationTtlMinutes?: number;
39
- };
40
- referral?: {
41
- referrerRewardPoints?: number;
42
- refereeRewardPoints?: number;
43
- maxPerPeriod?: number;
44
- periodDays?: number;
45
- requireApproval?: boolean;
46
- codeLength?: number;
47
- };
48
- expiry?: {
49
- enabled?: boolean;
50
- defaultDays?: number;
51
- };
52
- indexes?: Partial<Record<ModelName, IndexDefinition[]>>;
53
- events?: {
54
- adapter?: EventEmitterPort;
55
- };
56
- notifications?: NotificationAdapter;
57
- plugins?: RepositoryPlugins;
58
- }
59
- interface ResolvedTenant {
60
- enabled: boolean;
61
- field: string;
62
- ref?: string;
63
- type: 'ObjectId' | 'string';
64
- contextKey: string;
65
- }
66
- interface ResolvedConfig {
67
- programId: string;
68
- conversionRate: number;
69
- redemption: {
70
- minPoints: number;
71
- minOrderAmount: number;
72
- maxRedeemPercent: number;
73
- reservationTtlMinutes: number;
74
- };
75
- referral: {
76
- referrerRewardPoints: number;
77
- refereeRewardPoints: number;
78
- maxPerPeriod: number;
79
- periodDays: number;
80
- requireApproval: boolean;
81
- codeLength: number;
82
- };
83
- expiry: {
84
- enabled: boolean;
85
- defaultDays?: number;
86
- };
87
- tenant: ResolvedTenant;
88
- }
89
- //#endregion
90
- export { RepositoryPlugins as a, TenantConfig as c, PluginType as i, LoyaltyConfig as n, ResolvedConfig as o, ModelName as r, ResolvedTenant as s, IndexDefinition as t };
@@ -1,90 +0,0 @@
1
- import { a as RuleStatus, c as EARNING_ACTIONS, d as REFERRAL_STATUSES, f as RULE_STATUSES, i as ReferralStatus, l as MEMBER_STATUSES, m as TRANSACTION_TYPES, n as MemberStatus, o as RuleType, p as RULE_TYPES, r as RedemptionStatus, s as TransactionType, t as EarningAction, u as REDEMPTION_STATUSES } from "../index-CaH4GhSF.mjs";
2
- import { a as PointTransaction, c as EarningConditions, i as TierQualification, l as EarningReward, n as TierDefinition, o as Member, r as TierDowngrade, s as MemberBalance, t as TierBenefits, u as EarningRule } from "../tier-definition-Djf72UPa.mjs";
3
- import { a as MemberPort, c as UnitOfWork, i as PointTransactionPort, l as Referral, n as ReferralPort, o as EarningRulePort, r as RedemptionPort, s as TransactionSession, t as TierDefinitionPort, u as Redemption } from "../tier-definition.port-BzrHYBRo.mjs";
4
- import { t as EventEmitterPort } from "../event-emitter.port-CLYPoMni.mjs";
5
- import { t as NotificationAdapter } from "../notification.port-BzUsH0It.mjs";
6
-
7
- //#region src/domain/errors/base.d.ts
8
- declare abstract class LoyaltyError extends Error {
9
- abstract readonly code: string;
10
- abstract readonly httpStatus: number;
11
- constructor(message: string);
12
- toJSON(): {
13
- code: string;
14
- message: string;
15
- name: string;
16
- };
17
- }
18
- //#endregion
19
- //#region src/domain/errors/domain-errors.d.ts
20
- declare class InsufficientPointsError extends LoyaltyError {
21
- readonly code = "INSUFFICIENT_POINTS";
22
- readonly httpStatus = 400;
23
- constructor(available: number, requested: number);
24
- }
25
- declare class MemberNotFoundError extends LoyaltyError {
26
- readonly code = "MEMBER_NOT_FOUND";
27
- readonly httpStatus = 404;
28
- constructor(id: string);
29
- }
30
- declare class MemberAlreadyEnrolledError extends LoyaltyError {
31
- readonly code = "MEMBER_ALREADY_ENROLLED";
32
- readonly httpStatus = 409;
33
- constructor(externalId: string);
34
- }
35
- declare class MemberInactiveError extends LoyaltyError {
36
- readonly code = "MEMBER_INACTIVE";
37
- readonly httpStatus = 422;
38
- constructor(id: string);
39
- }
40
- declare class RuleNotFoundError extends LoyaltyError {
41
- readonly code = "RULE_NOT_FOUND";
42
- readonly httpStatus = 404;
43
- constructor(id: string);
44
- }
45
- declare class TierNotFoundError extends LoyaltyError {
46
- readonly code = "TIER_NOT_FOUND";
47
- readonly httpStatus = 404;
48
- constructor(id: string);
49
- }
50
- declare class RedemptionNotFoundError extends LoyaltyError {
51
- readonly code = "REDEMPTION_NOT_FOUND";
52
- readonly httpStatus = 404;
53
- constructor(id: string);
54
- }
55
- declare class RedemptionExpiredError extends LoyaltyError {
56
- readonly code = "REDEMPTION_EXPIRED";
57
- readonly httpStatus = 410;
58
- constructor(id: string);
59
- }
60
- declare class ReferralNotFoundError extends LoyaltyError {
61
- readonly code = "REFERRAL_NOT_FOUND";
62
- readonly httpStatus = 404;
63
- constructor(id: string);
64
- }
65
- declare class DuplicateReferralError extends LoyaltyError {
66
- readonly code = "DUPLICATE_REFERRAL";
67
- readonly httpStatus = 409;
68
- constructor(refereeId: string);
69
- }
70
- declare class ReferralLimitExceededError extends LoyaltyError {
71
- readonly code = "REFERRAL_LIMIT_EXCEEDED";
72
- readonly httpStatus = 429;
73
- constructor(limit: number, periodDays: number);
74
- }
75
- declare class SelfReferralError extends LoyaltyError {
76
- readonly code = "SELF_REFERRAL";
77
- readonly httpStatus = 422;
78
- constructor();
79
- }
80
- declare class ValidationError extends LoyaltyError {
81
- readonly code = "VALIDATION_ERROR";
82
- readonly httpStatus = 400;
83
- }
84
- declare class TenantIsolationError extends LoyaltyError {
85
- readonly code = "TENANT_ISOLATION";
86
- readonly httpStatus = 403;
87
- constructor();
88
- }
89
- //#endregion
90
- export { DuplicateReferralError, EARNING_ACTIONS, EarningAction, EarningConditions, EarningReward, EarningRule, EarningRulePort, EventEmitterPort, InsufficientPointsError, LoyaltyError, MEMBER_STATUSES, Member, MemberAlreadyEnrolledError, MemberBalance, MemberInactiveError, MemberNotFoundError, MemberPort, MemberStatus, NotificationAdapter, PointTransaction, PointTransactionPort, REDEMPTION_STATUSES, REFERRAL_STATUSES, RULE_STATUSES, RULE_TYPES, Redemption, RedemptionExpiredError, RedemptionNotFoundError, RedemptionPort, RedemptionStatus, Referral, ReferralLimitExceededError, ReferralNotFoundError, ReferralPort, ReferralStatus, RuleNotFoundError, RuleStatus, RuleType, SelfReferralError, TRANSACTION_TYPES, TenantIsolationError, TierBenefits, TierDefinition, TierDefinitionPort, TierDowngrade, TierNotFoundError, TierQualification, TransactionSession, TransactionType, UnitOfWork, ValidationError };
@@ -1,4 +0,0 @@
1
- import { a as MEMBER_STATUSES, c as RULE_STATUSES, i as EARNING_ACTIONS, l as RULE_TYPES, o as REDEMPTION_STATUSES, s as REFERRAL_STATUSES, u as TRANSACTION_TYPES } from "../constants-C75GvizO.mjs";
2
- import { a as MemberInactiveError, c as RedemptionNotFoundError, d as RuleNotFoundError, f as SelfReferralError, g as LoyaltyError, h as ValidationError, i as MemberAlreadyEnrolledError, l as ReferralLimitExceededError, m as TierNotFoundError, n as DuplicateReferralError, o as MemberNotFoundError, p as TenantIsolationError, r as InsufficientPointsError, s as RedemptionExpiredError, u as ReferralNotFoundError } from "../domain-errors-D7q-2LYD.mjs";
3
- import "./enums/index.mjs";
4
- export { DuplicateReferralError, EARNING_ACTIONS, InsufficientPointsError, LoyaltyError, MEMBER_STATUSES, MemberAlreadyEnrolledError, MemberInactiveError, MemberNotFoundError, REDEMPTION_STATUSES, REFERRAL_STATUSES, RULE_STATUSES, RULE_TYPES, RedemptionExpiredError, RedemptionNotFoundError, ReferralLimitExceededError, ReferralNotFoundError, RuleNotFoundError, SelfReferralError, TRANSACTION_TYPES, TenantIsolationError, TierNotFoundError, ValidationError };
@@ -1,120 +0,0 @@
1
- //#region src/domain/errors/base.ts
2
- var LoyaltyError = class extends Error {
3
- constructor(message) {
4
- super(message);
5
- this.name = this.constructor.name;
6
- }
7
- toJSON() {
8
- return {
9
- code: this.code,
10
- message: this.message,
11
- name: this.name
12
- };
13
- }
14
- };
15
- //#endregion
16
- //#region src/domain/errors/domain-errors.ts
17
- var InsufficientPointsError = class extends LoyaltyError {
18
- code = "INSUFFICIENT_POINTS";
19
- httpStatus = 400;
20
- constructor(available, requested) {
21
- super(`Insufficient points. Available: ${available}, requested: ${requested}`);
22
- }
23
- };
24
- var MemberNotFoundError = class extends LoyaltyError {
25
- code = "MEMBER_NOT_FOUND";
26
- httpStatus = 404;
27
- constructor(id) {
28
- super(`Member not found: ${id}`);
29
- }
30
- };
31
- var MemberAlreadyEnrolledError = class extends LoyaltyError {
32
- code = "MEMBER_ALREADY_ENROLLED";
33
- httpStatus = 409;
34
- constructor(externalId) {
35
- super(`Member already enrolled: ${externalId}`);
36
- }
37
- };
38
- var MemberInactiveError = class extends LoyaltyError {
39
- code = "MEMBER_INACTIVE";
40
- httpStatus = 422;
41
- constructor(id) {
42
- super(`Member is not active: ${id}`);
43
- }
44
- };
45
- var RuleNotFoundError = class extends LoyaltyError {
46
- code = "RULE_NOT_FOUND";
47
- httpStatus = 404;
48
- constructor(id) {
49
- super(`Earning rule not found: ${id}`);
50
- }
51
- };
52
- var TierNotFoundError = class extends LoyaltyError {
53
- code = "TIER_NOT_FOUND";
54
- httpStatus = 404;
55
- constructor(id) {
56
- super(`Tier not found: ${id}`);
57
- }
58
- };
59
- var RedemptionNotFoundError = class extends LoyaltyError {
60
- code = "REDEMPTION_NOT_FOUND";
61
- httpStatus = 404;
62
- constructor(id) {
63
- super(`Redemption not found: ${id}`);
64
- }
65
- };
66
- var RedemptionExpiredError = class extends LoyaltyError {
67
- code = "REDEMPTION_EXPIRED";
68
- httpStatus = 410;
69
- constructor(id) {
70
- super(`Redemption expired: ${id}`);
71
- }
72
- };
73
- var ReferralNotFoundError = class extends LoyaltyError {
74
- code = "REFERRAL_NOT_FOUND";
75
- httpStatus = 404;
76
- constructor(id) {
77
- super(`Referral not found: ${id}`);
78
- }
79
- };
80
- var DuplicateReferralError = class extends LoyaltyError {
81
- code = "DUPLICATE_REFERRAL";
82
- httpStatus = 409;
83
- constructor(refereeId) {
84
- super(`Referee already has a referral: ${refereeId}`);
85
- }
86
- };
87
- var ReferralLimitExceededError = class extends LoyaltyError {
88
- code = "REFERRAL_LIMIT_EXCEEDED";
89
- httpStatus = 429;
90
- constructor(limit, periodDays) {
91
- super(`Referral limit of ${limit} per ${periodDays} days exceeded`);
92
- }
93
- };
94
- var SelfReferralError = class extends LoyaltyError {
95
- code = "SELF_REFERRAL";
96
- httpStatus = 422;
97
- constructor() {
98
- super("Cannot refer yourself");
99
- }
100
- };
101
- var CircularReferralError = class extends LoyaltyError {
102
- code = "CIRCULAR_REFERRAL";
103
- httpStatus = 422;
104
- constructor() {
105
- super("Circular referral detected");
106
- }
107
- };
108
- var ValidationError = class extends LoyaltyError {
109
- code = "VALIDATION_ERROR";
110
- httpStatus = 400;
111
- };
112
- var TenantIsolationError = class extends LoyaltyError {
113
- code = "TENANT_ISOLATION";
114
- httpStatus = 403;
115
- constructor() {
116
- super("Tenant context is required but not provided");
117
- }
118
- };
119
- //#endregion
120
- export { MemberInactiveError as a, RedemptionNotFoundError as c, RuleNotFoundError as d, SelfReferralError as f, LoyaltyError as g, ValidationError as h, MemberAlreadyEnrolledError as i, ReferralLimitExceededError as l, TierNotFoundError as m, DuplicateReferralError as n, MemberNotFoundError as o, TenantIsolationError as p, InsufficientPointsError as r, RedemptionExpiredError as s, CircularReferralError as t, ReferralNotFoundError as u };
@@ -1,8 +0,0 @@
1
- //#region src/domain/ports/event-emitter.port.d.ts
2
- interface EventEmitterPort {
3
- emit(event: string, payload: unknown): void;
4
- on(event: string, handler: (payload: unknown) => void | Promise<void>): void;
5
- off(event: string, handler: (payload: unknown) => void | Promise<void>): void;
6
- }
7
- //#endregion
8
- export { EventEmitterPort as t };
@@ -1,24 +0,0 @@
1
- //#region src/events/event-types.ts
2
- const LoyaltyEvents = {
3
- MEMBER_ENROLLED: "loyalty.member.enrolled",
4
- MEMBER_DEACTIVATED: "loyalty.member.deactivated",
5
- MEMBER_REACTIVATED: "loyalty.member.reactivated",
6
- MEMBER_SUSPENDED: "loyalty.member.suspended",
7
- POINTS_EARNED: "loyalty.points.earned",
8
- POINTS_REDEEMED: "loyalty.points.redeemed",
9
- POINTS_ADJUSTED: "loyalty.points.adjusted",
10
- POINTS_EXPIRED: "loyalty.points.expired",
11
- POINTS_EXPIRING_SOON: "loyalty.points.expiring_soon",
12
- TIER_UPGRADED: "loyalty.tier.upgraded",
13
- TIER_DOWNGRADED: "loyalty.tier.downgraded",
14
- TIER_GRACE_STARTED: "loyalty.tier.grace_started",
15
- REDEMPTION_RESERVED: "loyalty.redemption.reserved",
16
- REDEMPTION_CONFIRMED: "loyalty.redemption.confirmed",
17
- REDEMPTION_RELEASED: "loyalty.redemption.released",
18
- REFERRAL_RECORDED: "loyalty.referral.recorded",
19
- REFERRAL_APPROVED: "loyalty.referral.approved",
20
- REFERRAL_REJECTED: "loyalty.referral.rejected",
21
- REFERRAL_REWARDED: "loyalty.referral.rewarded"
22
- };
23
- //#endregion
24
- export { LoyaltyEvents as t };
@@ -1,25 +0,0 @@
1
- //#region src/events/event-bus.ts
2
- var InProcessEventBus = class {
3
- handlers = /* @__PURE__ */ new Map();
4
- emit(event, payload) {
5
- const set = this.handlers.get(event);
6
- if (!set) return;
7
- for (const handler of set) try {
8
- const result = handler(payload);
9
- if (result && typeof result.catch === "function") result.catch(() => {});
10
- } catch {}
11
- }
12
- on(event, handler) {
13
- let set = this.handlers.get(event);
14
- if (!set) {
15
- set = /* @__PURE__ */ new Set();
16
- this.handlers.set(event, set);
17
- }
18
- set.add(handler);
19
- }
20
- off(event, handler) {
21
- this.handlers.get(event)?.delete(handler);
22
- }
23
- };
24
- //#endregion
25
- export { InProcessEventBus as t };