@classytic/loyalty 0.2.2 → 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.
package/dist/index.mjs CHANGED
@@ -1,8 +1,8 @@
1
1
  import { n as DEFAULT_TENANT_FIELD, r as DEFAULT_TENANT_TYPE } from "./constants-DkQYkOK1.mjs";
2
- import { a as PointTransactionRepository, c as ValidationError, i as RedemptionRepository, n as TierDefinitionRepository, o as MemberRepository, r as ReferralRepository, s as EarningRuleRepository, t as createRepositories } from "./repositories-CZlhTYVp.mjs";
3
- import { E as InProcessLoyaltyBus, T as loyaltyEventDefinitions, _ as ReferralRecorded, a as MemberSuspended, b as TierDowngraded, c as PointsEarned, d as PointsRedeemed, f as RedemptionConfirmed, g as ReferralApproved, i as MemberReactivated, l as PointsExpired, m as RedemptionReserved, n as MemberDeactivated, p as RedemptionReleased, r as MemberEnrolled, s as PointsAdjusted, u as PointsExpiringSoon, v as ReferralRejected, w as TierUpgraded, x as TierGraceStarted, y as ReferralRewarded } from "./events-BtZOdiPw.mjs";
4
- import { n as createModels } from "./models-uhh9c-7k.mjs";
5
- import { n as createEvent, t as LoyaltyEvents } from "./loyalty-events-Cyt9TwX6.mjs";
2
+ import { C as TenantIsolationError, E as ValidationError, S as SelfReferralError, T as UnmanagedSessionError, _ as RedemptionExpiredError, a as PointTransactionRepository, b as ReferralNotFoundError, c as flushPendingLoyaltyEvents, d as DuplicateReferralError, f as InsufficientPointsError, g as MemberNotFoundError, h as MemberInactiveError, i as RedemptionRepository, l as EarningRuleRepository, m as MemberAlreadyEnrolledError, n as TierDefinitionRepository, o as MemberRepository, p as LoyaltyCapabilityError, r as ReferralRepository, s as PENDING_EVENTS, t as createRepositories, u as CircularReferralError, v as RedemptionNotFoundError, w as TierNotFoundError, x as RuleNotFoundError, y as ReferralLimitExceededError } from "./repositories-C_p8asCn.mjs";
3
+ import { E as InProcessLoyaltyBus, T as loyaltyEventDefinitions, _ as ReferralRecorded, a as MemberSuspended, b as TierDowngraded, c as PointsEarned, d as PointsRedeemed, f as RedemptionConfirmed, g as ReferralApproved, i as MemberReactivated, l as PointsExpired, m as RedemptionReserved, n as MemberDeactivated, p as RedemptionReleased, r as MemberEnrolled, s as PointsAdjusted, u as PointsExpiringSoon, v as ReferralRejected, w as TierUpgraded, x as TierGraceStarted, y as ReferralRewarded } from "./events-DN5_p6T0.mjs";
4
+ import { n as createModels } from "./models-Ddh62lgO.mjs";
5
+ import { n as createEvent, t as LoyaltyEvents } from "./loyalty-events-C38JA3cU.mjs";
6
6
  //#region src/index.ts
7
7
  function resolveConfig(config) {
8
8
  let tenant;
@@ -62,11 +62,13 @@ var MongoUnitOfWork = class {
62
62
  async withTransaction(cb) {
63
63
  const session = await this.connection.startSession();
64
64
  try {
65
- let result;
65
+ const slot = { assigned: false };
66
66
  await session.withTransaction(async () => {
67
- result = await cb(session);
67
+ slot.value = await cb(session);
68
+ slot.assigned = true;
68
69
  });
69
- return result;
70
+ if (!slot.assigned) throw new Error("withTransaction: callback did not assign a result");
71
+ return slot.value;
70
72
  } finally {
71
73
  await session.endSession();
72
74
  }
@@ -77,18 +79,24 @@ function createLoyaltyEngine(config) {
77
79
  const models = createModels(config.mongoose, resolvedConfig.tenant, config.indexes, config.autoIndex, config.collectionPrefix, config.forceRecreate);
78
80
  const unitOfWork = new MongoUnitOfWork(config.mongoose);
79
81
  const events = config.eventTransport ?? new InProcessLoyaltyBus();
82
+ const repositories = createRepositories({
83
+ models,
84
+ plugins: config.plugins,
85
+ tenant: resolvedConfig.tenant,
86
+ config: resolvedConfig,
87
+ events,
88
+ outbox: config.outbox,
89
+ notifications: config.notifications ?? null,
90
+ unitOfWork
91
+ });
92
+ if (!config.allowNonTransactional) {
93
+ const caps = repositories.pointTransaction.capabilities;
94
+ if (!caps) throw new LoyaltyCapabilityError(["capabilities descriptor (repo-core 0.6 / mongokit 3.16+) — backend declares none"]);
95
+ if (caps.transactions !== true) throw new LoyaltyCapabilityError(["transactions"]);
96
+ }
80
97
  return {
81
98
  models,
82
- repositories: createRepositories({
83
- models,
84
- plugins: config.plugins,
85
- tenant: resolvedConfig.tenant,
86
- config: resolvedConfig,
87
- events,
88
- outbox: config.outbox,
89
- notifications: config.notifications ?? null,
90
- unitOfWork
91
- }),
99
+ repositories,
92
100
  events,
93
101
  async syncIndexes() {
94
102
  await Promise.all(Object.values(models).map((m) => m.createIndexes()));
@@ -96,4 +104,4 @@ function createLoyaltyEngine(config) {
96
104
  };
97
105
  }
98
106
  //#endregion
99
- export { EarningRuleRepository, InProcessLoyaltyBus, LoyaltyEvents, MemberDeactivated, MemberEnrolled, MemberReactivated, MemberRepository, MemberSuspended, PointTransactionRepository, PointsAdjusted, PointsEarned, PointsExpired, PointsExpiringSoon, PointsRedeemed, RedemptionConfirmed, RedemptionReleased, RedemptionRepository, RedemptionReserved, ReferralApproved, ReferralRecorded, ReferralRejected, ReferralRepository, ReferralRewarded, TierDefinitionRepository, TierDowngraded, TierGraceStarted, TierUpgraded, createEvent, createLoyaltyEngine, loyaltyEventDefinitions, resolveConfig };
107
+ export { CircularReferralError, DuplicateReferralError, EarningRuleRepository, InProcessLoyaltyBus, InsufficientPointsError, LoyaltyCapabilityError, LoyaltyEvents, MemberAlreadyEnrolledError, MemberDeactivated, MemberEnrolled, MemberInactiveError, MemberNotFoundError, MemberReactivated, MemberRepository, MemberSuspended, PENDING_EVENTS, PointTransactionRepository, PointsAdjusted, PointsEarned, PointsExpired, PointsExpiringSoon, PointsRedeemed, RedemptionConfirmed, RedemptionExpiredError, RedemptionNotFoundError, RedemptionReleased, RedemptionRepository, RedemptionReserved, ReferralApproved, ReferralLimitExceededError, ReferralNotFoundError, ReferralRecorded, ReferralRejected, ReferralRepository, ReferralRewarded, RuleNotFoundError, SelfReferralError, TenantIsolationError, TierDefinitionRepository, TierDowngraded, TierGraceStarted, TierNotFoundError, TierUpgraded, UnmanagedSessionError, ValidationError, createEvent, createLoyaltyEngine, flushPendingLoyaltyEvents, loyaltyEventDefinitions, resolveConfig };
@@ -1,9 +1,11 @@
1
1
  import { createEvent } from "@classytic/primitives/events";
2
2
  //#region src/events/helpers.ts
3
3
  function createEvent$1(type, payload, ctx, meta) {
4
+ const base = {};
5
+ if (ctx?.actorId !== void 0) base.userId = ctx.actorId;
6
+ if (ctx?.organizationId !== void 0) base.organizationId = ctx.organizationId;
4
7
  return createEvent(type, payload, {
5
- userId: ctx?.actorId,
6
- organizationId: ctx?.organizationId,
8
+ ...base,
7
9
  ...meta
8
10
  });
9
11
  }