@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.
- package/CHANGELOG.md +68 -0
- package/dist/config-JYTMP1F7.d.mts +136 -0
- package/dist/{constants-C75GvizO.mjs → constants-DkQYkOK1.mjs} +3 -2
- package/dist/domain/enums/index.d.mts +1 -1
- package/dist/domain/enums/index.mjs +1 -1
- package/dist/events/index.d.mts +2 -2
- package/dist/events/index.mjs +3 -3
- package/dist/events-BjzHSLBn.mjs +344 -0
- package/dist/index-2izQQext.d.mts +281 -0
- package/dist/index-BmqGuj38.d.mts +400 -0
- package/dist/{index-CaH4GhSF.d.mts → index-DMK8a98J.d.mts} +1 -1
- package/dist/index-qI1WvtNg.d.mts +361 -0
- package/dist/index.d.mts +28 -12
- package/dist/index.mjs +30 -26
- package/dist/loyalty-events-Cyt9TwX6.mjs +50 -0
- package/dist/models/index.d.mts +1225 -2
- package/dist/models/index.mjs +2 -2
- package/dist/{models-CrZPmVxt.mjs → models-uhh9c-7k.mjs} +104 -41
- package/dist/notifications/index.d.mts +1 -1
- package/dist/repositories/index.d.mts +2 -2
- package/dist/repositories/index.mjs +1 -1
- package/dist/repositories-ObGUgcSH.mjs +1917 -0
- package/dist/types/index.d.mts +2 -2
- package/package.json +18 -16
- package/dist/config-aNigy4ec.d.mts +0 -90
- package/dist/domain/index.d.mts +0 -90
- package/dist/domain/index.mjs +0 -4
- package/dist/domain-errors-D7q-2LYD.mjs +0 -120
- package/dist/event-emitter.port-CLYPoMni.d.mts +0 -8
- package/dist/event-types-xQBtYBbX.mjs +0 -24
- package/dist/events-CprEWlN7.mjs +0 -25
- package/dist/index-B6ZstxSP.d.mts +0 -2357
- package/dist/index-BcoGeDco.d.mts +0 -127
- package/dist/index-DqzTjeEB.d.mts +0 -148
- package/dist/index-O7TL4R2P.d.mts +0 -86
- package/dist/index-_pg4J11t.d.mts +0 -191
- package/dist/repositories-qMX7Xh_y.mjs +0 -440
- package/dist/services/index.d.mts +0 -2
- package/dist/services/index.mjs +0 -2
- package/dist/services-CoTqC4E6.mjs +0 -1098
- package/dist/tier-definition-Djf72UPa.d.mts +0 -120
- package/dist/tier-definition.port-BzrHYBRo.d.mts +0 -143
- /package/dist/{notification.port-BzUsH0It.d.mts → notification.port-9B5xlzxQ.d.mts} +0 -0
package/dist/types/index.d.mts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import { a as
|
|
2
|
-
import {
|
|
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.
|
|
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:
|
|
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.
|
|
84
|
-
"
|
|
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.
|
|
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.
|
|
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 };
|
package/dist/domain/index.d.mts
DELETED
|
@@ -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 };
|
package/dist/domain/index.mjs
DELETED
|
@@ -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 };
|
package/dist/events-CprEWlN7.mjs
DELETED
|
@@ -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 };
|