@openora/core 0.4.1-canary.129 → 0.4.1-canary.130

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 (182) hide show
  1. package/dist/.tsbuildinfo +1 -1
  2. package/dist/admin-console/__tests__/backoffice.service.int.test.js +1 -0
  3. package/dist/admin-console/__tests__/backoffice.service.int.test.js.map +1 -1
  4. package/dist/admin-console/plugin.d.ts +2 -2
  5. package/dist/admin-console/service/backoffice.service.d.ts +3 -0
  6. package/dist/admin-console/service/backoffice.service.d.ts.map +1 -1
  7. package/dist/analytics/plugin.d.ts +2 -2
  8. package/dist/audit/plugin.d.ts +2 -2
  9. package/dist/casino/gaming/plugin.d.ts +2 -2
  10. package/dist/casino/lobby/plugin.d.ts +2 -2
  11. package/dist/cms/plugin.d.ts +2 -2
  12. package/dist/compliance/__tests__/rg.router.int.test.js +4 -2
  13. package/dist/compliance/__tests__/rg.router.int.test.js.map +1 -1
  14. package/dist/compliance/__tests__/rg.service.int.test.js +42 -17
  15. package/dist/compliance/__tests__/rg.service.int.test.js.map +1 -1
  16. package/dist/compliance/plugin.d.ts +2 -2
  17. package/dist/compliance/plugin.d.ts.map +1 -1
  18. package/dist/compliance/plugin.js +3 -5
  19. package/dist/compliance/plugin.js.map +1 -1
  20. package/dist/compliance/service/rg-self-service.service.d.ts.map +1 -1
  21. package/dist/compliance/service/rg-self-service.service.js +2 -2
  22. package/dist/compliance/service/rg-self-service.service.js.map +1 -1
  23. package/dist/compliance/service/rg.service.d.ts +6 -8
  24. package/dist/compliance/service/rg.service.d.ts.map +1 -1
  25. package/dist/compliance/service/rg.service.js +43 -29
  26. package/dist/compliance/service/rg.service.js.map +1 -1
  27. package/dist/contracts/adapters/admin-user-directory.d.ts +1 -0
  28. package/dist/contracts/adapters/admin-user-directory.d.ts.map +1 -1
  29. package/dist/contracts/adapters/admin-user-directory.js.map +1 -1
  30. package/dist/contracts/adapters/audit.d.ts +1 -1
  31. package/dist/contracts/adapters/audit.d.ts.map +1 -1
  32. package/dist/contracts/adapters/audit.js.map +1 -1
  33. package/dist/contracts/adapters/email-template.d.ts +6 -48
  34. package/dist/contracts/adapters/email-template.d.ts.map +1 -1
  35. package/dist/contracts/adapters/email-template.js +0 -58
  36. package/dist/contracts/adapters/email-template.js.map +1 -1
  37. package/dist/contracts/adapters/index.d.ts +4 -6
  38. package/dist/contracts/adapters/index.d.ts.map +1 -1
  39. package/dist/contracts/adapters/index.js +2 -3
  40. package/dist/contracts/adapters/index.js.map +1 -1
  41. package/dist/contracts/adapters/mail.d.ts +30 -0
  42. package/dist/contracts/adapters/mail.d.ts.map +1 -0
  43. package/dist/contracts/adapters/mail.js +4 -0
  44. package/dist/contracts/adapters/mail.js.map +1 -0
  45. package/dist/contracts/schemas/common.d.ts +1 -0
  46. package/dist/contracts/schemas/common.d.ts.map +1 -1
  47. package/dist/contracts/schemas/common.js +11 -0
  48. package/dist/contracts/schemas/common.js.map +1 -1
  49. package/dist/contracts/schemas/index.d.ts +1 -0
  50. package/dist/contracts/schemas/index.d.ts.map +1 -1
  51. package/dist/contracts/schemas/index.js +1 -0
  52. package/dist/contracts/schemas/index.js.map +1 -1
  53. package/dist/contracts/schemas/mail.d.ts +166 -0
  54. package/dist/contracts/schemas/mail.d.ts.map +1 -0
  55. package/dist/contracts/schemas/mail.js +74 -0
  56. package/dist/contracts/schemas/mail.js.map +1 -0
  57. package/dist/engagement/chat/__tests__/chat.service.int.test.js +4 -0
  58. package/dist/engagement/chat/__tests__/chat.service.int.test.js.map +1 -1
  59. package/dist/engagement/chat/plugin.d.ts +2 -2
  60. package/dist/engagement/chat-commands/plugin.d.ts +2 -2
  61. package/dist/engagement/notifications/__tests__/chat-room-notifications.int.test.js +8 -11
  62. package/dist/engagement/notifications/__tests__/chat-room-notifications.int.test.js.map +1 -1
  63. package/dist/engagement/notifications/__tests__/notification-event-map.test.js +76 -39
  64. package/dist/engagement/notifications/__tests__/notification-event-map.test.js.map +1 -1
  65. package/dist/engagement/notifications/plugin.d.ts +8 -7
  66. package/dist/engagement/notifications/plugin.d.ts.map +1 -1
  67. package/dist/engagement/notifications/plugin.js +102 -86
  68. package/dist/engagement/notifications/plugin.js.map +1 -1
  69. package/dist/engagement/social/plugin.d.ts +2 -2
  70. package/dist/fx/exchange-rate/plugin.d.ts +2 -2
  71. package/dist/iam/__tests__/iam.service.int.test.js +53 -46
  72. package/dist/iam/__tests__/iam.service.int.test.js.map +1 -1
  73. package/dist/iam/plugin.d.ts +3 -2
  74. package/dist/iam/plugin.d.ts.map +1 -1
  75. package/dist/iam/plugin.js +3 -2
  76. package/dist/iam/plugin.js.map +1 -1
  77. package/dist/iam/service/iam.service.d.ts +3 -3
  78. package/dist/iam/service/iam.service.d.ts.map +1 -1
  79. package/dist/iam/service/iam.service.js +11 -7
  80. package/dist/iam/service/iam.service.js.map +1 -1
  81. package/dist/mail/__tests__/default-email-template-renderer.test.d.ts.map +1 -0
  82. package/dist/mail/__tests__/default-email-template-renderer.test.js +119 -0
  83. package/dist/mail/__tests__/default-email-template-renderer.test.js.map +1 -0
  84. package/dist/mail/__tests__/mail.service.test.d.ts +2 -0
  85. package/dist/mail/__tests__/mail.service.test.d.ts.map +1 -0
  86. package/dist/mail/__tests__/mail.service.test.js +215 -0
  87. package/dist/mail/__tests__/mail.service.test.js.map +1 -0
  88. package/dist/mail/adapters/default-email-template-renderer.d.ts +5 -0
  89. package/dist/mail/adapters/default-email-template-renderer.d.ts.map +1 -0
  90. package/dist/mail/adapters/default-email-template-renderer.js +107 -0
  91. package/dist/mail/adapters/default-email-template-renderer.js.map +1 -0
  92. package/dist/mail/adapters/stdout-email-sender.d.ts +5 -0
  93. package/dist/mail/adapters/stdout-email-sender.d.ts.map +1 -0
  94. package/dist/mail/adapters/stdout-email-sender.js +8 -0
  95. package/dist/mail/adapters/stdout-email-sender.js.map +1 -0
  96. package/dist/mail/contract/index.d.ts +120 -0
  97. package/dist/mail/contract/index.d.ts.map +1 -0
  98. package/dist/mail/contract/index.js +17 -0
  99. package/dist/mail/contract/index.js.map +1 -0
  100. package/dist/mail/index.d.ts +5 -0
  101. package/dist/mail/index.d.ts.map +1 -0
  102. package/dist/mail/index.js +5 -0
  103. package/dist/mail/index.js.map +1 -0
  104. package/dist/mail/plugin.d.ts +181 -0
  105. package/dist/mail/plugin.d.ts.map +1 -0
  106. package/dist/mail/plugin.js +66 -0
  107. package/dist/mail/plugin.js.map +1 -0
  108. package/dist/mail/service/mail-payload.service.d.ts +8 -0
  109. package/dist/mail/service/mail-payload.service.d.ts.map +1 -0
  110. package/dist/mail/service/mail-payload.service.js +43 -0
  111. package/dist/mail/service/mail-payload.service.js.map +1 -0
  112. package/dist/mail/service/mail.service.d.ts +30 -0
  113. package/dist/mail/service/mail.service.d.ts.map +1 -0
  114. package/dist/mail/service/mail.service.js +152 -0
  115. package/dist/mail/service/mail.service.js.map +1 -0
  116. package/dist/pam/identity/__tests__/identity.rate-limit.int.test.js +0 -4
  117. package/dist/pam/identity/__tests__/identity.rate-limit.int.test.js.map +1 -1
  118. package/dist/pam/identity/__tests__/identity.registration-gates.int.test.js +0 -4
  119. package/dist/pam/identity/__tests__/identity.registration-gates.int.test.js.map +1 -1
  120. package/dist/pam/identity/__tests__/identity.service.int.test.js +13 -4
  121. package/dist/pam/identity/__tests__/identity.service.int.test.js.map +1 -1
  122. package/dist/pam/identity/admin-user-directory.d.ts +4 -0
  123. package/dist/pam/identity/admin-user-directory.d.ts.map +1 -1
  124. package/dist/pam/identity/admin-user-directory.js +1 -0
  125. package/dist/pam/identity/admin-user-directory.js.map +1 -1
  126. package/dist/pam/identity/plugin.d.ts +3 -2
  127. package/dist/pam/identity/plugin.d.ts.map +1 -1
  128. package/dist/pam/identity/plugin.js +3 -9
  129. package/dist/pam/identity/plugin.js.map +1 -1
  130. package/dist/pam/identity/service/identity.service.d.ts +5 -7
  131. package/dist/pam/identity/service/identity.service.d.ts.map +1 -1
  132. package/dist/pam/identity/service/identity.service.js +40 -23
  133. package/dist/pam/identity/service/identity.service.js.map +1 -1
  134. package/dist/pam/player-management/plugin.d.ts +2 -2
  135. package/dist/pam/player-note/plugin.d.ts +2 -2
  136. package/dist/pam/profile/plugin.d.ts +2 -2
  137. package/dist/pam/shared/__tests__/shared-mappers.test.js +6 -0
  138. package/dist/pam/shared/__tests__/shared-mappers.test.js.map +1 -1
  139. package/dist/pam/shared/language.d.ts.map +1 -1
  140. package/dist/pam/shared/language.js +6 -0
  141. package/dist/pam/shared/language.js.map +1 -1
  142. package/dist/pam/tag/plugin.d.ts +2 -2
  143. package/dist/server/auth/__tests__/auth.test.js +45 -50
  144. package/dist/server/auth/__tests__/auth.test.js.map +1 -1
  145. package/dist/server/auth/auth.d.ts +7 -8
  146. package/dist/server/auth/auth.d.ts.map +1 -1
  147. package/dist/server/auth/auth.js +10 -20
  148. package/dist/server/auth/auth.js.map +1 -1
  149. package/dist/server/auth/index.d.ts +1 -1
  150. package/dist/server/auth/index.d.ts.map +1 -1
  151. package/dist/server/plugin-host/core-plugins.d.ts.map +1 -1
  152. package/dist/server/plugin-host/core-plugins.js +1 -0
  153. package/dist/server/plugin-host/core-plugins.js.map +1 -1
  154. package/dist/server/runtime/core-token-catalog.d.ts +2 -2
  155. package/dist/server/runtime/core-token-catalog.js +3 -3
  156. package/dist/server/runtime/core-token-catalog.js.map +1 -1
  157. package/dist/server/runtime/create-app.d.ts.map +1 -1
  158. package/dist/server/runtime/create-app.js +7 -7
  159. package/dist/server/runtime/create-app.js.map +1 -1
  160. package/dist/wallet/plugin.d.ts +2 -2
  161. package/generators/src/config.ts +1 -2
  162. package/package.json +21 -1
  163. package/dist/contracts/adapters/email.d.ts +0 -17
  164. package/dist/contracts/adapters/email.d.ts.map +0 -1
  165. package/dist/contracts/adapters/email.js +0 -10
  166. package/dist/contracts/adapters/email.js.map +0 -1
  167. package/dist/contracts/adapters/notification.d.ts +0 -13
  168. package/dist/contracts/adapters/notification.d.ts.map +0 -1
  169. package/dist/contracts/adapters/notification.js +0 -10
  170. package/dist/contracts/adapters/notification.js.map +0 -1
  171. package/dist/engagement/notifications/adapters/mock/mock-notification-adapter.d.ts +0 -5
  172. package/dist/engagement/notifications/adapters/mock/mock-notification-adapter.d.ts.map +0 -1
  173. package/dist/engagement/notifications/adapters/mock/mock-notification-adapter.js +0 -6
  174. package/dist/engagement/notifications/adapters/mock/mock-notification-adapter.js.map +0 -1
  175. package/dist/pam/identity/adapters/__tests__/default-email-template-renderer.test.d.ts.map +0 -1
  176. package/dist/pam/identity/adapters/__tests__/default-email-template-renderer.test.js +0 -33
  177. package/dist/pam/identity/adapters/__tests__/default-email-template-renderer.test.js.map +0 -1
  178. package/dist/pam/identity/adapters/default-email-template-renderer.d.ts +0 -8
  179. package/dist/pam/identity/adapters/default-email-template-renderer.d.ts.map +0 -1
  180. package/dist/pam/identity/adapters/default-email-template-renderer.js +0 -7
  181. package/dist/pam/identity/adapters/default-email-template-renderer.js.map +0 -1
  182. /package/dist/{pam/identity/adapters → mail}/__tests__/default-email-template-renderer.test.d.ts +0 -0
@@ -1,7 +1,6 @@
1
1
  import * as z from 'zod';
2
- import { ADMIN_USER_DIRECTORY, IDENTITY_READER, JOB_QUEUE, NOTIFICATION_DELIVERY_ADAPTER, PLATFORM_CONFIG, REALTIME_TRANSPORT, UuidSchema, domainEventSchemas, queue, } from '@openora/core/contracts';
2
+ import { IDENTITY_READER, JOB_QUEUE, MAIL_DISPATCH, MailTemplateSchema, PLATFORM_CONFIG, REALTIME_TRANSPORT, TimestampSchema, UuidSchema, domainEventSchemas, formatMoneyAmount, queue, } from '@openora/core/contracts';
3
3
  import { createLogger, EVENT_BUS, DRIZZLE } from '@openora/core/server';
4
- import { MockNotificationDeliveryAdapter } from './adapters/mock/mock-notification-adapter.js';
5
4
  import { createNotificationsRouter, notificationsChannel, toNotificationDto, } from './router/index.js';
6
5
  import { NotificationsService } from './service/notifications.service.js';
7
6
  import { CreateNotificationInputSchema } from './contract/index.js';
@@ -15,29 +14,20 @@ const DEFAULT_NOTIFICATIONS_RETENTION_CRON = '0 3 * * *';
15
14
  const KycResubmissionNotifyJobSchema = z.object({
16
15
  userId: UuidSchema,
17
16
  reason: z.string().nullable(),
17
+ eventId: UuidSchema.optional(),
18
18
  });
19
19
  const NotificationDispatchJobSchema = z.object({
20
20
  event: z.string(),
21
21
  input: CreateNotificationInputSchema,
22
- sendEmail: z.boolean(),
22
+ email: MailTemplateSchema.nullish(),
23
23
  // Backlog jobs produced before security alerts existed omit this field.
24
- sendSecurityAlertEmail: z.boolean().default(false),
24
+ securityAlert: z.boolean().default(false),
25
25
  });
26
26
  const SecurityAlertDispatchJobSchema = z.object({
27
27
  userId: UuidSchema,
28
28
  eventId: UuidSchema,
29
+ occurredAt: TimestampSchema,
29
30
  });
30
- function formatMoneyAmount(amount) {
31
- const match = /^(-)?(\d+)(?:\.(\d+))?$/.exec(amount);
32
- if (!match) {
33
- return amount;
34
- }
35
- const [, sign, integerPart, fractionPart] = match;
36
- const groupedInteger = integerPart.replace(/\B(?=(\d{3})+(?!\d))/g, ',');
37
- const trimmedFraction = fractionPart ? fractionPart.replace(/0+$/, '') : '';
38
- const magnitude = trimmedFraction ? `${groupedInteger}.${trimmedFraction}` : groupedInteger;
39
- return sign ? `${sign}${magnitude}` : magnitude;
40
- }
41
31
  // Drops null/undefined entity refs (eg a nullable roomId) so `data` only ever carries
42
32
  // fields the source event actually had a value for; an all-null payload becomes `null`.
43
33
  function compactData(fields) {
@@ -50,17 +40,13 @@ function compactData(fields) {
50
40
  function mapEvent(event, buildNotification, options) {
51
41
  return {
52
42
  event,
53
- sendEmail: options.sendEmail,
54
- handle: (payload) => {
43
+ parse: (payload) => {
55
44
  const parsed = domainEventSchemas[event].safeParse(payload);
56
- if (!parsed.success) {
57
- return null;
58
- }
59
- // Library boundary: TS cannot narrow a domainEventSchemas lookup keyed by this
60
- // function's own generic K to that one event's payload type; the pairing holds
61
- // by domainEventSchemas' own definition (DomainEventPayload<K> is inferred from it).
62
- return buildNotification(parsed.data);
45
+ return parsed.success ? parsed.data : null;
63
46
  },
47
+ buildNotification: (data) => buildNotification(data),
48
+ buildEmail: (data, occurredAt) => options?.email ? options.email(data, occurredAt) : null,
49
+ securityAlert: options?.securityAlert ?? false,
64
50
  };
65
51
  }
66
52
  export const notificationEventMap = [
@@ -70,63 +56,95 @@ export const notificationEventMap = [
70
56
  title: 'Withdrawal approved',
71
57
  body: `Your withdrawal of ${formatMoneyAmount(p.amount)} ${p.currency} has been approved and is being processed.`,
72
58
  data: { transactionId: p.transactionId },
73
- }), { sendEmail: true }),
59
+ }), {
60
+ email: (p, occurredAt) => ({
61
+ key: 'withdrawalApproved',
62
+ data: {
63
+ amount: p.amount,
64
+ currency: p.currency,
65
+ transactionId: p.transactionId,
66
+ occurredAt,
67
+ },
68
+ }),
69
+ }),
74
70
  mapEvent('wallet.withdrawal.rejected', (p) => ({
75
71
  userId: p.userId,
76
72
  type: 'withdrawal.rejected',
77
73
  title: 'Withdrawal rejected',
78
74
  body: `Your withdrawal of ${formatMoneyAmount(p.amount)} ${p.currency} was rejected and the funds were returned to your balance.${p.reason ? ` Reason: ${p.reason}.` : ''}`,
79
75
  data: { transactionId: p.transactionId },
80
- }), { sendEmail: true }),
76
+ }), {
77
+ email: (p, occurredAt) => ({
78
+ key: 'withdrawalRejected',
79
+ data: {
80
+ amount: p.amount,
81
+ currency: p.currency,
82
+ transactionId: p.transactionId,
83
+ occurredAt,
84
+ reason: p.reason,
85
+ },
86
+ }),
87
+ }),
81
88
  mapEvent('wallet.withdrawal.requested', (p) => ({
82
89
  userId: p.userId,
83
90
  type: 'withdrawal.requested',
84
91
  title: 'Withdrawal requested',
85
92
  body: `Your withdrawal request of ${formatMoneyAmount(p.amount)} ${p.currency} has been received and is pending review.`,
86
93
  data: { transactionId: p.transactionId },
87
- }), { sendEmail: false }),
94
+ }), {
95
+ email: (p, occurredAt) => ({
96
+ key: 'securityWithdrawalRequested',
97
+ data: {
98
+ amount: p.amount,
99
+ currency: p.currency,
100
+ transactionId: p.transactionId,
101
+ occurredAt,
102
+ },
103
+ }),
104
+ securityAlert: true,
105
+ }),
88
106
  mapEvent('wallet.withdrawal.completed', (p) => ({
89
107
  userId: p.userId,
90
108
  type: 'withdrawal.completed',
91
109
  title: 'Withdrawal completed',
92
110
  body: `Your withdrawal of ${formatMoneyAmount(p.amount)} ${p.currency} has been completed.`,
93
111
  data: { transactionId: p.transactionId },
94
- }), { sendEmail: false }),
112
+ })),
95
113
  mapEvent('wallet.withdrawal.failed', (p) => ({
96
114
  userId: p.userId,
97
115
  type: 'withdrawal.failed',
98
116
  title: 'Withdrawal failed',
99
117
  body: `Your withdrawal of ${formatMoneyAmount(p.amount)} ${p.currency} failed and the funds were returned to your balance.`,
100
118
  data: { transactionId: p.transactionId },
101
- }), { sendEmail: false }),
119
+ })),
102
120
  mapEvent('wallet.deposit.completed', (p) => ({
103
121
  userId: p.userId,
104
122
  type: 'deposit.completed',
105
123
  title: 'Deposit completed',
106
124
  body: `Your deposit of ${formatMoneyAmount(p.amount)} ${p.currency} has been completed.`,
107
125
  data: { transactionId: p.transactionId },
108
- }), { sendEmail: false }),
126
+ })),
109
127
  mapEvent('wallet.manual_adjustment.created', (p) => ({
110
128
  userId: p.userId,
111
129
  type: 'balance.adjusted',
112
130
  title: 'Balance adjusted',
113
131
  body: `Your balance was ${p.direction === 'credit' ? 'credited' : 'debited'} ${formatMoneyAmount(p.amount)} ${p.currency}. Reason: ${p.reason}.`,
114
132
  data: { transactionId: p.transactionId },
115
- }), { sendEmail: false }),
133
+ })),
116
134
  mapEvent('wallet.bonus_rollover.completed', (p) => ({
117
135
  userId: p.userId,
118
136
  type: 'wallet.bonus_rollover.completed',
119
137
  title: 'Bonus unlocked',
120
138
  body: `Your ${formatMoneyAmount(p.creditedAmount)} ${p.currency} bonus credit has cleared its rollover requirement and is now fully withdrawable.`,
121
139
  data: null,
122
- }), { sendEmail: false }),
140
+ })),
123
141
  mapEvent('chat.user.mentioned', (p) => ({
124
142
  userId: p.mentionedUserId,
125
143
  type: 'chat.mention',
126
144
  title: 'You were mentioned',
127
145
  body: 'You were mentioned in a chat message.',
128
146
  data: compactData({ roomId: p.roomId, messageId: p.messageId }),
129
- }), { sendEmail: false }),
147
+ })),
130
148
  // Pre-existing types: in-app only, unchanged from before the declarative-map refactor.
131
149
  mapEvent('social.friend_request.sent', (p) => ({
132
150
  userId: p.addresseeId,
@@ -134,7 +152,7 @@ export const notificationEventMap = [
134
152
  title: 'New friend request',
135
153
  body: `${p.requesterUsername} sent you a friend request.`,
136
154
  data: { requesterId: p.requesterId },
137
- }), { sendEmail: false }),
155
+ })),
138
156
  mapEvent('social.friend_request.accepted', (p) => ({
139
157
  userId: p.requesterId,
140
158
  type: 'social.friend_request.accepted',
@@ -143,14 +161,16 @@ export const notificationEventMap = [
143
161
  // accepterId, not requesterId: the recipient of THIS notification is the
144
162
  // requester, so the linkable "other party" is whoever just accepted.
145
163
  data: { accepterId: p.accepterId },
146
- }), { sendEmail: false }),
164
+ })),
165
+ // In-app only: no `email` option passed to mapEvent, same as every other
166
+ // no-mail entry above (the old boolean `{ sendEmail: false }` shape no longer exists).
147
167
  mapEvent('chat.room.ownership.transferred', (p) => ({
148
168
  userId: p.newOwnerId,
149
169
  type: 'chat.room.ownership_transferred',
150
170
  title: 'You are now the owner of a chat room',
151
171
  body: `The owner of "${p.roomName}" had their account removed, so ownership of the room has passed to you.`,
152
172
  data: { roomId: p.roomId },
153
- }), { sendEmail: false }),
173
+ })),
154
174
  ];
155
175
  export function buildKycResubmissionNotification(payload) {
156
176
  return {
@@ -172,55 +192,46 @@ export function buildChatRoomScheduledForDeletionNotification(payload) {
172
192
  }
173
193
  export default {
174
194
  id: 'notifications',
175
- // ADMIN_USER_DIRECTORY (owned by identity) resolves the player's email for the
176
- // delivery emails; pin load order so a split still finds the port. See ADR-0017.
177
- dependsOn: ['identity'],
178
195
  register(ctx) {
179
- ctx.provide(NOTIFICATION_DELIVERY_ADAPTER, () => new MockNotificationDeliveryAdapter());
180
196
  const logger = createLogger('notifications');
181
197
  // Subscriptions are wired before router factories run (boot order), so these refs are
182
198
  // null at registration but set from the router factory before any real event arrives.
183
199
  let svcRef = null;
184
- let deliveryRef = null;
185
- let directoryRef = null;
200
+ let mailDispatchRef = null;
186
201
  let identityReaderRef = null;
187
202
  let jobQueueRef = null;
188
203
  let realtimeRef = null;
189
204
  let retentionDaysRef = DEFAULT_NOTIFICATIONS_RETENTION_DAYS;
190
- // Best-effort email alongside the in-app notification; a missing user or delivery
191
- // failure is logged, never thrown - the in-app notification already landed.
192
- const sendEmail = (userId, title, body) => {
193
- if (!deliveryRef || !directoryRef) {
205
+ const dispatchMail = async (userId, template, eventId) => {
206
+ if (!mailDispatchRef) {
194
207
  return;
195
208
  }
196
- const delivery = deliveryRef;
197
- directoryRef
198
- .get(userId)
199
- .then((user) => {
200
- if (!user?.email) {
201
- logger.warn({ userId }, 'notification email skipped: no email for user');
202
- return;
203
- }
204
- return delivery.sendEmail(user.email, title, body);
205
- })
206
- .catch((err) => logger.error({ err }, 'notification email delivery failed'));
209
+ try {
210
+ await mailDispatchRef.toUser({
211
+ userId,
212
+ template,
213
+ idempotencyKey: `notifications-mail:${eventId}`,
214
+ });
215
+ }
216
+ catch (err) {
217
+ logger.error({ err, key: template.key }, 'notification mail enqueue failed');
218
+ }
207
219
  };
208
220
  // Security alerts are explicitly opt-in and require a currently verified email.
209
- // Unlike the ordinary notification email helper above, delivery errors are surfaced to the
221
+ // Unlike the ordinary notification mail helper above, enqueue errors are surfaced to the
210
222
  // queue worker so they use its retry/dead-letter policy.
211
- const sendSecurityAlertEmail = async (userId, title, body) => {
212
- if (!deliveryRef || !directoryRef || !identityReaderRef) {
223
+ const dispatchSecurityAlertMail = async (userId, template, eventId) => {
224
+ if (!mailDispatchRef || !identityReaderRef) {
213
225
  return;
214
226
  }
215
227
  if (!(await identityReaderRef.canReceiveLoginWithdrawalAlerts?.(userId))) {
216
228
  return;
217
229
  }
218
- const recipient = await directoryRef.get(userId);
219
- if (!recipient?.email) {
220
- logger.warn({ userId }, 'security alert email skipped: no email for user');
221
- return;
222
- }
223
- await deliveryRef.sendEmail(recipient.email, title, body);
230
+ await mailDispatchRef.toUser({
231
+ userId,
232
+ template,
233
+ idempotencyKey: `security-alert-mail:${eventId}`,
234
+ });
224
235
  };
225
236
  const publishNotification = (record) => {
226
237
  if (!realtimeRef) {
@@ -233,19 +244,22 @@ export default {
233
244
  };
234
245
  for (const entry of notificationEventMap) {
235
246
  ctx.events.on(entry.event, (payload, envelope) => {
236
- const input = entry.handle(payload);
237
- if (!input || !jobQueueRef || !envelope) {
247
+ if (!jobQueueRef || !envelope) {
248
+ return;
249
+ }
250
+ const data = entry.parse(payload);
251
+ if (data === null) {
238
252
  return;
239
253
  }
240
254
  jobQueueRef
241
255
  .enqueue(NOTIFICATIONS_DISPATCH_QUEUE, {
242
256
  event: entry.event,
243
- input: { ...input, eventId: envelope.eventId },
244
- sendEmail: entry.sendEmail,
257
+ input: { ...entry.buildNotification(data), eventId: envelope.eventId },
258
+ email: entry.buildEmail(data, envelope.occurredAt),
245
259
  // `wallet.withdrawal.requested` already creates an in-app notification. Its
246
260
  // existing dispatch is enriched with a preference-gated email rather than adding
247
261
  // a second record or a second subscription.
248
- sendSecurityAlertEmail: entry.event === 'wallet.withdrawal.requested',
262
+ securityAlert: entry.securityAlert,
249
263
  }, {
250
264
  idempotencyKey: `notifications-dispatch:${envelope.eventId}`,
251
265
  attempts: 5,
@@ -269,7 +283,7 @@ export default {
269
283
  if (!(await identityReaderRef.canReceiveLoginWithdrawalAlerts?.(parsed.data.userId))) {
270
284
  return;
271
285
  }
272
- await jobQueueRef.enqueue(SECURITY_ALERT_DISPATCH_QUEUE, { userId: parsed.data.userId, eventId: envelope.eventId }, {
286
+ await jobQueueRef.enqueue(SECURITY_ALERT_DISPATCH_QUEUE, { userId: parsed.data.userId, eventId: envelope.eventId, occurredAt: envelope.occurredAt }, {
273
287
  idempotencyKey: `security-login-alert:${envelope.eventId}`,
274
288
  attempts: 5,
275
289
  backoff: { type: 'exponential', delayMs: 1000 },
@@ -315,7 +329,8 @@ export default {
315
329
  roomId: p.roomId,
316
330
  roomName: p.roomName,
317
331
  }),
318
- sendEmail: false,
332
+ // In-app only: `email` is nullish on NotificationDispatchJobSchema, so
333
+ // omitting it is the current equivalent of the old `sendEmail: false`.
319
334
  }, {
320
335
  idempotencyKey: `notifications-dispatch:${eventId}:${userId}`,
321
336
  attempts: 5,
@@ -341,7 +356,7 @@ export default {
341
356
  return;
342
357
  }
343
358
  jobQueueRef
344
- .enqueue(KYC_RESUBMISSION_NOTIFY_QUEUE, { userId: p.userId, reason: p.reason }, { idempotencyKey: `kyc-resubmission-notify:${envelope.eventId}` })
359
+ .enqueue(KYC_RESUBMISSION_NOTIFY_QUEUE, { userId: p.userId, reason: p.reason, eventId: envelope.eventId }, { idempotencyKey: `kyc-resubmission-notify:${envelope.eventId}` })
345
360
  .catch((err) => logger.error({ err }, 'kyc-resubmission-notify enqueue failed'));
346
361
  });
347
362
  ctx.jobs.worker({
@@ -357,7 +372,9 @@ export default {
357
372
  return;
358
373
  }
359
374
  publishNotification(record);
360
- sendEmail(input.userId, input.title, input.body);
375
+ if (payload.eventId) {
376
+ await dispatchMail(payload.userId, { key: 'kycResubmissionRequested', data: { reason: payload.reason } }, payload.eventId);
377
+ }
361
378
  },
362
379
  });
363
380
  ctx.jobs.worker({
@@ -370,18 +387,18 @@ export default {
370
387
  const record = await svcRef.create(payload.input);
371
388
  if (!record) {
372
389
  // A prior attempt may have already persisted the in-app notification. Continue so a
373
- // retried security email can still be delivered through this job's retry policy.
374
- if (payload.sendSecurityAlertEmail) {
375
- await sendSecurityAlertEmail(payload.input.userId, payload.input.title, payload.input.body);
390
+ // retried security alert can still be delivered through this job's retry policy.
391
+ if (payload.securityAlert && payload.email && payload.input.eventId) {
392
+ await dispatchSecurityAlertMail(payload.input.userId, payload.email, payload.input.eventId);
376
393
  }
377
394
  return;
378
395
  }
379
396
  publishNotification(record);
380
- if (payload.sendEmail) {
381
- sendEmail(payload.input.userId, payload.input.title, payload.input.body);
382
- }
383
- if (payload.sendSecurityAlertEmail) {
384
- await sendSecurityAlertEmail(payload.input.userId, payload.input.title, payload.input.body);
397
+ if (payload.email) {
398
+ const mailKey = payload.input.eventId ?? record.id;
399
+ await (payload.securityAlert
400
+ ? dispatchSecurityAlertMail(record.userId, payload.email, mailKey)
401
+ : dispatchMail(record.userId, payload.email, mailKey));
385
402
  }
386
403
  },
387
404
  onDeadLetter: (jobCtx, error) => {
@@ -392,7 +409,7 @@ export default {
392
409
  queue: SECURITY_ALERT_DISPATCH_QUEUE,
393
410
  schema: SecurityAlertDispatchJobSchema,
394
411
  handler: async ({ payload }) => {
395
- await sendSecurityAlertEmail(payload.userId, 'New sign-in to your account', 'A new sign-in to your account was detected. If this was not you, secure your account immediately.');
412
+ await dispatchSecurityAlertMail(payload.userId, { key: 'securityLoginAlert', data: { occurredAt: payload.occurredAt } }, payload.eventId);
396
413
  },
397
414
  onDeadLetter: (jobCtx, error) => {
398
415
  logger.error({ err: error, userId: jobCtx.payload.userId, jobId: jobCtx.id }, 'security login alert delivery exhausted retries');
@@ -412,8 +429,7 @@ export default {
412
429
  ctx.routers.add('notifications', (c) => {
413
430
  const svc = new NotificationsService(c.get(DRIZZLE), c.get(EVENT_BUS));
414
431
  svcRef = svc;
415
- deliveryRef = c.get(NOTIFICATION_DELIVERY_ADAPTER);
416
- directoryRef = c.get(ADMIN_USER_DIRECTORY);
432
+ mailDispatchRef = c.has(MAIL_DISPATCH) ? c.get(MAIL_DISPATCH) : null;
417
433
  identityReaderRef = c.get(IDENTITY_READER);
418
434
  jobQueueRef = c.get(JOB_QUEUE);
419
435
  realtimeRef = c.get(REALTIME_TRANSPORT);
@@ -1 +1 @@
1
- {"version":3,"file":"plugin.js","sourceRoot":"","sources":["../../../src/engagement/notifications/plugin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC;AACzB,OAAO,EACL,oBAAoB,EACpB,eAAe,EACf,SAAS,EACT,6BAA6B,EAC7B,eAAe,EACf,kBAAkB,EAClB,UAAU,EACV,kBAAkB,EAClB,KAAK,GAQN,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAExE,OAAO,EAAE,+BAA+B,EAAE,MAAM,8CAA8C,CAAC;AAC/F,OAAO,EACL,yBAAyB,EACzB,oBAAoB,EACpB,iBAAiB,GAClB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,oBAAoB,EAAE,MAAM,oCAAoC,CAAC;AAC1E,OAAO,EAAE,6BAA6B,EAAgC,MAAM,qBAAqB,CAAC;AAElG,MAAM,kBAAkB,GAAG,CAAC,MAAqB,EAAE,OAAsB,EAAU,EAAE,CACnF,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,OAAO,UAAU,CAAC;AAElD,MAAM,6BAA6B,GAAG,KAAK,CAAC,yBAAyB,CAAC,CAAC;AACvE,MAAM,mCAAmC,GAAG,KAAK,CAAC,+BAA+B,CAAC,CAAC;AACnF,MAAM,4BAA4B,GAAG,KAAK,CAAC,wBAAwB,CAAC,CAAC;AACrE,MAAM,6BAA6B,GAAG,KAAK,CAAC,yBAAyB,CAAC,CAAC;AAEvE,MAAM,oCAAoC,GAAG,EAAE,CAAC;AAChD,MAAM,oCAAoC,GAAG,WAAW,CAAC;AAEzD,MAAM,8BAA8B,GAAG,CAAC,CAAC,MAAM,CAAC;IAC9C,MAAM,EAAE,UAAU;IAClB,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CAC9B,CAAC,CAAC;AAEH,MAAM,6BAA6B,GAAG,CAAC,CAAC,MAAM,CAAC;IAC7C,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;IACjB,KAAK,EAAE,6BAA6B;IACpC,SAAS,EAAE,CAAC,CAAC,OAAO,EAAE;IACtB,wEAAwE;IACxE,sBAAsB,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;CACnD,CAAC,CAAC;AAEH,MAAM,8BAA8B,GAAG,CAAC,CAAC,MAAM,CAAC;IAC9C,MAAM,EAAE,UAAU;IAClB,OAAO,EAAE,UAAU;CACpB,CAAC,CAAC;AAEH,SAAS,iBAAiB,CAAC,MAAc;IACvC,MAAM,KAAK,GAAG,yBAAyB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACrD,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,MAAM,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,YAAY,CAAC,GAAG,KAAK,CAAC;IAClD,MAAM,cAAc,GAAG,WAAW,CAAC,OAAO,CAAC,uBAAuB,EAAE,GAAG,CAAC,CAAC;IACzE,MAAM,eAAe,GAAG,YAAY,CAAC,CAAC,CAAC,YAAY,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAC5E,MAAM,SAAS,GAAG,eAAe,CAAC,CAAC,CAAC,GAAG,cAAc,IAAI,eAAe,EAAE,CAAC,CAAC,CAAC,cAAc,CAAC;IAC5F,OAAO,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,SAAS,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;AAClD,CAAC;AAQD,sFAAsF;AACtF,wFAAwF;AACxF,SAAS,WAAW,CAClB,MAAiD;IAEjD,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,CAC3C,CAAC,KAAK,EAA6B,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,SAAS,CAClF,CAAC;IACF,OAAO,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AACjE,CAAC;AAED,0FAA0F;AAC1F,2FAA2F;AAC3F,yDAAyD;AACzD,SAAS,QAAQ,CACf,KAAQ,EACR,iBAA8E,EAC9E,OAA+B;IAE/B,OAAO;QACL,KAAK;QACL,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,MAAM,EAAE,CAAC,OAAO,EAAE,EAAE;YAClB,MAAM,MAAM,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;YAC5D,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;gBACpB,OAAO,IAAI,CAAC;YACd,CAAC;YACD,+EAA+E;YAC/E,+EAA+E;YAC/E,qFAAqF;YACrF,OAAO,iBAAiB,CAAC,MAAM,CAAC,IAA6B,CAAC,CAAC;QACjE,CAAC;KACF,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,MAAM,oBAAoB,GAA2B;IAC1D,QAAQ,CACN,4BAA4B,EAC5B,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACN,MAAM,EAAE,CAAC,CAAC,MAAM;QAChB,IAAI,EAAE,qBAAqB;QAC3B,KAAK,EAAE,qBAAqB;QAC5B,IAAI,EAAE,sBAAsB,iBAAiB,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,QAAQ,4CAA4C;QACjH,IAAI,EAAE,EAAE,aAAa,EAAE,CAAC,CAAC,aAAa,EAAE;KACzC,CAAC,EACF,EAAE,SAAS,EAAE,IAAI,EAAE,CACpB;IAED,QAAQ,CACN,4BAA4B,EAC5B,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACN,MAAM,EAAE,CAAC,CAAC,MAAM;QAChB,IAAI,EAAE,qBAAqB;QAC3B,KAAK,EAAE,qBAAqB;QAC5B,IAAI,EAAE,sBAAsB,iBAAiB,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,QAAQ,6DAA6D,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;QAC3K,IAAI,EAAE,EAAE,aAAa,EAAE,CAAC,CAAC,aAAa,EAAE;KACzC,CAAC,EACF,EAAE,SAAS,EAAE,IAAI,EAAE,CACpB;IAED,QAAQ,CACN,6BAA6B,EAC7B,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACN,MAAM,EAAE,CAAC,CAAC,MAAM;QAChB,IAAI,EAAE,sBAAsB;QAC5B,KAAK,EAAE,sBAAsB;QAC7B,IAAI,EAAE,8BAA8B,iBAAiB,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,QAAQ,2CAA2C;QACxH,IAAI,EAAE,EAAE,aAAa,EAAE,CAAC,CAAC,aAAa,EAAE;KACzC,CAAC,EACF,EAAE,SAAS,EAAE,KAAK,EAAE,CACrB;IAED,QAAQ,CACN,6BAA6B,EAC7B,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACN,MAAM,EAAE,CAAC,CAAC,MAAM;QAChB,IAAI,EAAE,sBAAsB;QAC5B,KAAK,EAAE,sBAAsB;QAC7B,IAAI,EAAE,sBAAsB,iBAAiB,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,QAAQ,sBAAsB;QAC3F,IAAI,EAAE,EAAE,aAAa,EAAE,CAAC,CAAC,aAAa,EAAE;KACzC,CAAC,EACF,EAAE,SAAS,EAAE,KAAK,EAAE,CACrB;IAED,QAAQ,CACN,0BAA0B,EAC1B,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACN,MAAM,EAAE,CAAC,CAAC,MAAM;QAChB,IAAI,EAAE,mBAAmB;QACzB,KAAK,EAAE,mBAAmB;QAC1B,IAAI,EAAE,sBAAsB,iBAAiB,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,QAAQ,sDAAsD;QAC3H,IAAI,EAAE,EAAE,aAAa,EAAE,CAAC,CAAC,aAAa,EAAE;KACzC,CAAC,EACF,EAAE,SAAS,EAAE,KAAK,EAAE,CACrB;IAED,QAAQ,CACN,0BAA0B,EAC1B,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACN,MAAM,EAAE,CAAC,CAAC,MAAM;QAChB,IAAI,EAAE,mBAAmB;QACzB,KAAK,EAAE,mBAAmB;QAC1B,IAAI,EAAE,mBAAmB,iBAAiB,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,QAAQ,sBAAsB;QACxF,IAAI,EAAE,EAAE,aAAa,EAAE,CAAC,CAAC,aAAa,EAAE;KACzC,CAAC,EACF,EAAE,SAAS,EAAE,KAAK,EAAE,CACrB;IAED,QAAQ,CACN,kCAAkC,EAClC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACN,MAAM,EAAE,CAAC,CAAC,MAAM;QAChB,IAAI,EAAE,kBAAkB;QACxB,KAAK,EAAE,kBAAkB;QACzB,IAAI,EAAE,oBAAoB,CAAC,CAAC,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,IAAI,iBAAiB,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,QAAQ,aAAa,CAAC,CAAC,MAAM,GAAG;QAChJ,IAAI,EAAE,EAAE,aAAa,EAAE,CAAC,CAAC,aAAa,EAAE;KACzC,CAAC,EACF,EAAE,SAAS,EAAE,KAAK,EAAE,CACrB;IAED,QAAQ,CACN,iCAAiC,EACjC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACN,MAAM,EAAE,CAAC,CAAC,MAAM;QAChB,IAAI,EAAE,iCAAiC;QACvC,KAAK,EAAE,gBAAgB;QACvB,IAAI,EAAE,QAAQ,iBAAiB,CAAC,CAAC,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,QAAQ,mFAAmF;QAClJ,IAAI,EAAE,IAAI;KACX,CAAC,EACF,EAAE,SAAS,EAAE,KAAK,EAAE,CACrB;IAED,QAAQ,CACN,qBAAqB,EACrB,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACN,MAAM,EAAE,CAAC,CAAC,eAAe;QACzB,IAAI,EAAE,cAAc;QACpB,KAAK,EAAE,oBAAoB;QAC3B,IAAI,EAAE,uCAAuC;QAC7C,IAAI,EAAE,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC,SAAS,EAAE,CAAC;KAChE,CAAC,EACF,EAAE,SAAS,EAAE,KAAK,EAAE,CACrB;IAED,uFAAuF;IACvF,QAAQ,CACN,4BAA4B,EAC5B,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACN,MAAM,EAAE,CAAC,CAAC,WAAW;QACrB,IAAI,EAAE,gCAAgC;QACtC,KAAK,EAAE,oBAAoB;QAC3B,IAAI,EAAE,GAAG,CAAC,CAAC,iBAAiB,6BAA6B;QACzD,IAAI,EAAE,EAAE,WAAW,EAAE,CAAC,CAAC,WAAW,EAAE;KACrC,CAAC,EACF,EAAE,SAAS,EAAE,KAAK,EAAE,CACrB;IAED,QAAQ,CACN,gCAAgC,EAChC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACN,MAAM,EAAE,CAAC,CAAC,WAAW;QACrB,IAAI,EAAE,gCAAgC;QACtC,KAAK,EAAE,yBAAyB;QAChC,IAAI,EAAE,GAAG,CAAC,CAAC,gBAAgB,gCAAgC;QAC3D,yEAAyE;QACzE,qEAAqE;QACrE,IAAI,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC,UAAU,EAAE;KACnC,CAAC,EACF,EAAE,SAAS,EAAE,KAAK,EAAE,CACrB;IAED,QAAQ,CACN,iCAAiC,EACjC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACN,MAAM,EAAE,CAAC,CAAC,UAAU;QACpB,IAAI,EAAE,iCAAiC;QACvC,KAAK,EAAE,sCAAsC;QAC7C,IAAI,EAAE,iBAAiB,CAAC,CAAC,QAAQ,0EAA0E;QAC3G,IAAI,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE;KAC3B,CAAC,EACF,EAAE,SAAS,EAAE,KAAK,EAAE,CACrB;CACF,CAAC;AAEF,MAAM,UAAU,gCAAgC,CAAC,OAGhD;IACC,OAAO;QACL,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,IAAI,EAAE,4BAA4B;QAClC,KAAK,EAAE,gCAAgC;QACvC,IAAI,EAAE,mEAAmE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,YAAY,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;QAC9H,IAAI,EAAE,IAAI;KACX,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,6CAA6C,CAAC,OAI7D;IACC,OAAO;QACL,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,IAAI,EAAE,kCAAkC;QACxC,KAAK,EAAE,mBAAmB;QAC1B,IAAI,EAAE,iBAAiB,OAAO,CAAC,QAAQ,mHAAmH;QAC1J,IAAI,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE;KACjC,CAAC;AACJ,CAAC;AAED,eAAe;IACb,EAAE,EAAE,eAAe;IACnB,+EAA+E;IAC/E,iFAAiF;IACjF,SAAS,EAAE,CAAC,UAAU,CAAC;IACvB,QAAQ,CAAC,GAAG;QACV,GAAG,CAAC,OAAO,CAAC,6BAA6B,EAAE,GAAG,EAAE,CAAC,IAAI,+BAA+B,EAAE,CAAC,CAAC;QAExF,MAAM,MAAM,GAAG,YAAY,CAAC,eAAe,CAAC,CAAC;QAE7C,sFAAsF;QACtF,sFAAsF;QACtF,IAAI,MAAM,GAAgC,IAAI,CAAC;QAC/C,IAAI,WAAW,GAAuC,IAAI,CAAC;QAC3D,IAAI,YAAY,GAA8B,IAAI,CAAC;QACnD,IAAI,iBAAiB,GAA0B,IAAI,CAAC;QACpD,IAAI,WAAW,GAA2B,IAAI,CAAC;QAC/C,IAAI,WAAW,GAA6B,IAAI,CAAC;QACjD,IAAI,gBAAgB,GAAG,oCAAoC,CAAC;QAE5D,kFAAkF;QAClF,4EAA4E;QAC5E,MAAM,SAAS,GAAG,CAAC,MAAc,EAAE,KAAa,EAAE,IAAY,EAAE,EAAE;YAChE,IAAI,CAAC,WAAW,IAAI,CAAC,YAAY,EAAE,CAAC;gBAClC,OAAO;YACT,CAAC;YACD,MAAM,QAAQ,GAAG,WAAW,CAAC;YAC7B,YAAY;iBACT,GAAG,CAAC,MAAM,CAAC;iBACX,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE;gBACb,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC;oBACjB,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,EAAE,+CAA+C,CAAC,CAAC;oBACzE,OAAO;gBACT,CAAC;gBACD,OAAO,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;YACrD,CAAC,CAAC;iBACD,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,EAAE,oCAAoC,CAAC,CAAC,CAAC;QACjF,CAAC,CAAC;QAEF,gFAAgF;QAChF,2FAA2F;QAC3F,yDAAyD;QACzD,MAAM,sBAAsB,GAAG,KAAK,EAAE,MAAc,EAAE,KAAa,EAAE,IAAY,EAAE,EAAE;YACnF,IAAI,CAAC,WAAW,IAAI,CAAC,YAAY,IAAI,CAAC,iBAAiB,EAAE,CAAC;gBACxD,OAAO;YACT,CAAC;YACD,IAAI,CAAC,CAAC,MAAM,iBAAiB,CAAC,+BAA+B,EAAE,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC;gBACzE,OAAO;YACT,CAAC;YACD,MAAM,SAAS,GAAG,MAAM,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YACjD,IAAI,CAAC,SAAS,EAAE,KAAK,EAAE,CAAC;gBACtB,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,EAAE,iDAAiD,CAAC,CAAC;gBAC3E,OAAO;YACT,CAAC;YACD,MAAM,WAAW,CAAC,SAAS,CAAC,SAAS,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;QAC5D,CAAC,CAAC;QAEF,MAAM,mBAAmB,GAAG,CAC1B,MAAwE,EACxE,EAAE;YACF,IAAI,CAAC,WAAW,EAAE,CAAC;gBACjB,OAAO;YACT,CAAC;YACD,MAAM,GAAG,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC;YACtC,IAAI,GAAG,EAAE,CAAC;gBACR,KAAK,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC,oBAAoB,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,KAAK,CACvF,CAAC,GAAY,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,EAAE,sCAAsC,CAAC,CAChF,CAAC;YACJ,CAAC;QACH,CAAC,CAAC;QAEF,KAAK,MAAM,KAAK,IAAI,oBAAoB,EAAE,CAAC;YACzC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,OAAO,EAAE,QAAQ,EAAE,EAAE;gBAC/C,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;gBACpC,IAAI,CAAC,KAAK,IAAI,CAAC,WAAW,IAAI,CAAC,QAAQ,EAAE,CAAC;oBACxC,OAAO;gBACT,CAAC;gBACD,WAAW;qBACR,OAAO,CACN,4BAA4B,EAC5B;oBACE,KAAK,EAAE,KAAK,CAAC,KAAK;oBAClB,KAAK,EAAE,EAAE,GAAG,KAAK,EAAE,OAAO,EAAE,QAAQ,CAAC,OAAO,EAAE;oBAC9C,SAAS,EAAE,KAAK,CAAC,SAAS;oBAC1B,4EAA4E;oBAC5E,iFAAiF;oBACjF,4CAA4C;oBAC5C,sBAAsB,EAAE,KAAK,CAAC,KAAK,KAAK,6BAA6B;iBACtE,EACD;oBACE,cAAc,EAAE,0BAA0B,QAAQ,CAAC,OAAO,EAAE;oBAC5D,QAAQ,EAAE,CAAC;oBACX,OAAO,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE,IAAI,EAAE;iBAChD,CACF;qBACA,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE,CACb,MAAM,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,EAAE,sCAAsC,CAAC,CAClF,CAAC;YACN,CAAC,CAAC,CAAC;QACL,CAAC;QAED,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,mCAAmC,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE;YAC7E,MAAM,MAAM,GAAG,kBAAkB,CAAC,mCAAmC,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;YAC1F,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,CAAC,WAAW,IAAI,CAAC,iBAAiB,EAAE,CAAC;gBAC1D,OAAO;YACT,CAAC;YACD,IAAI,CAAC,QAAQ,EAAE,OAAO,EAAE,CAAC;gBACvB,MAAM,CAAC,IAAI,CACT,EAAE,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,EAC9B,wDAAwD,CACzD,CAAC;gBACF,OAAO;YACT,CAAC;YACD,8EAA8E;YAC9E,4EAA4E;YAC5E,iDAAiD;YACjD,IAAI,CAAC,CAAC,MAAM,iBAAiB,CAAC,+BAA+B,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC;gBACrF,OAAO;YACT,CAAC;YACD,MAAM,WAAW,CAAC,OAAO,CACvB,6BAA6B,EAC7B,EAAE,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,QAAQ,CAAC,OAAO,EAAE,EACzD;gBACE,cAAc,EAAE,wBAAwB,QAAQ,CAAC,OAAO,EAAE;gBAC1D,QAAQ,EAAE,CAAC;gBACX,OAAO,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE,IAAI,EAAE;aAChD,CACF,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,yEAAyE;QACzE,4CAA4C;QAC5C,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,cAAc,EAAE,CAAC,OAAO,EAAE,EAAE;YACxC,MAAM,MAAM,GAAG,kBAAkB,CAAC,cAAc,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;YACrE,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,KAAK,IAAI,EAAE,CAAC;gBAC9D,OAAO;YACT,CAAC;YACD,MAAM,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC;YACtB,MAAM,KAAK,GAAG,6CAA6C,CAAC;YAC5D,MAAM,QAAQ,GACZ,CAAC,CAAC,cAAc,KAAK,IAAI,IAAI,CAAC,CAAC,eAAe,KAAK,IAAI;gBACrD,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC,eAAe,CAAC;gBACzD,CAAC,CAAC,gBAAgB,CAAC;YACvB,MAAM,IAAI,GAAG,kBAAkB,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC;YACrD,MAAM,IAAI,GAAG,iCAAiC,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,IAAI,eAAe,QAAQ,OAAO,IAAI,GAAG,CAAC;YACtG,iGAAiG;YACjG,MAAM;iBACH,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,IAAI,EAAE,wBAAwB,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;iBACzE,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,EAAE,iDAAiD,CAAC,CAAC,CAAC;QAC9F,CAAC,CAAC,CAAC;QAEH,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,kCAAkC,EAAE,CAAC,OAAO,EAAE,QAAQ,EAAE,EAAE;YACtE,MAAM,MAAM,GAAG,kBAAkB,CAAC,kCAAkC,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;YACzF,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC;gBACpC,OAAO;YACT,CAAC;YACD,MAAM,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC;YACtB,IAAI,CAAC,QAAQ,EAAE,OAAO,EAAE,CAAC;gBACvB,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,oDAAoD,CAAC,CAAC;gBACxF,OAAO;YACT,CAAC;YACD,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC;YACjC,MAAM,QAAQ,GAAG,WAAW,CAAC;YAC7B,KAAK,MAAM,MAAM,IAAI,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,eAAe,CAAC,EAAE,CAAC;gBAC1E,QAAQ;qBACL,OAAO,CACN,4BAA4B,EAC5B;oBACE,KAAK,EAAE,kCAAkC;oBACzC,KAAK,EAAE,6CAA6C,CAAC;wBACnD,MAAM;wBACN,MAAM,EAAE,CAAC,CAAC,MAAM;wBAChB,QAAQ,EAAE,CAAC,CAAC,QAAQ;qBACrB,CAAC;oBACF,SAAS,EAAE,KAAK;iBACjB,EACD;oBACE,cAAc,EAAE,0BAA0B,OAAO,IAAI,MAAM,EAAE;oBAC7D,QAAQ,EAAE,CAAC;oBACX,OAAO,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE,IAAI,EAAE;iBAChD,CACF;qBACA,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE,CACb,MAAM,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,EAAE,0DAA0D,CAAC,CAClF,CAAC;YACN,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,wBAAwB,EAAE,CAAC,OAAO,EAAE,QAAQ,EAAE,EAAE;YAC5D,MAAM,MAAM,GAAG,kBAAkB,CAAC,wBAAwB,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;YAC/E,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC;gBACpC,OAAO;YACT,CAAC;YACD,MAAM,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC;YACtB,6EAA6E;YAC7E,8EAA8E;YAC9E,eAAe;YACf,IAAI,CAAC,CAAC,MAAM,KAAK,wBAAwB,IAAI,CAAC,CAAC,MAAM,KAAK,QAAQ,IAAI,CAAC,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;gBACzF,OAAO;YACT,CAAC;YACD,IAAI,CAAC,QAAQ,EAAE,OAAO,EAAE,CAAC;gBACvB,MAAM,CAAC,IAAI,CACT,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,EACpB,0DAA0D,CAC3D,CAAC;gBACF,OAAO;YACT,CAAC;YACD,WAAW;iBACR,OAAO,CACN,6BAA6B,EAC7B,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,EACtC,EAAE,cAAc,EAAE,2BAA2B,QAAQ,CAAC,OAAO,EAAE,EAAE,CAClE;iBACA,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,EAAE,wCAAwC,CAAC,CAAC,CAAC;QACrF,CAAC,CAAC,CAAC;QAEH,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC;YACd,KAAK,EAAE,6BAA6B;YACpC,MAAM,EAAE,8BAA8B;YACtC,OAAO,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE;gBAC7B,IAAI,CAAC,MAAM,EAAE,CAAC;oBACZ,OAAO;gBACT,CAAC;gBACD,MAAM,KAAK,GAAG,gCAAgC,CAAC,OAAO,CAAC,CAAC;gBACxD,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;gBAC1C,IAAI,CAAC,MAAM,EAAE,CAAC;oBACZ,OAAO;gBACT,CAAC;gBACD,mBAAmB,CAAC,MAAM,CAAC,CAAC;gBAC5B,SAAS,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;YACnD,CAAC;SACF,CAAC,CAAC;QAEH,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC;YACd,KAAK,EAAE,4BAA4B;YACnC,MAAM,EAAE,6BAA6B;YACrC,OAAO,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE;gBAC7B,IAAI,CAAC,MAAM,EAAE,CAAC;oBACZ,OAAO;gBACT,CAAC;gBACD,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;gBAClD,IAAI,CAAC,MAAM,EAAE,CAAC;oBACZ,oFAAoF;oBACpF,iFAAiF;oBACjF,IAAI,OAAO,CAAC,sBAAsB,EAAE,CAAC;wBACnC,MAAM,sBAAsB,CAC1B,OAAO,CAAC,KAAK,CAAC,MAAM,EACpB,OAAO,CAAC,KAAK,CAAC,KAAK,EACnB,OAAO,CAAC,KAAK,CAAC,IAAI,CACnB,CAAC;oBACJ,CAAC;oBACD,OAAO;gBACT,CAAC;gBACD,mBAAmB,CAAC,MAAM,CAAC,CAAC;gBAC5B,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;oBACtB,SAAS,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBAC3E,CAAC;gBACD,IAAI,OAAO,CAAC,sBAAsB,EAAE,CAAC;oBACnC,MAAM,sBAAsB,CAC1B,OAAO,CAAC,KAAK,CAAC,MAAM,EACpB,OAAO,CAAC,KAAK,CAAC,KAAK,EACnB,OAAO,CAAC,KAAK,CAAC,IAAI,CACnB,CAAC;gBACJ,CAAC;YACH,CAAC;YACD,YAAY,EAAE,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;gBAC9B,MAAM,CAAC,KAAK,CACV,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,EAAE,EAAE,EAC7D,yCAAyC,CAC1C,CAAC;YACJ,CAAC;SACF,CAAC,CAAC;QAEH,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC;YACd,KAAK,EAAE,6BAA6B;YACpC,MAAM,EAAE,8BAA8B;YACtC,OAAO,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE;gBAC7B,MAAM,sBAAsB,CAC1B,OAAO,CAAC,MAAM,EACd,6BAA6B,EAC7B,mGAAmG,CACpG,CAAC;YACJ,CAAC;YACD,YAAY,EAAE,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;gBAC9B,MAAM,CAAC,KAAK,CACV,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,EAAE,EAAE,EAC/D,iDAAiD,CAClD,CAAC;YACJ,CAAC;SACF,CAAC,CAAC;QAEH,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC;YACd,KAAK,EAAE,mCAAmC;YAC1C,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC;YACpB,OAAO,EAAE,KAAK,IAAI,EAAE;gBAClB,IAAI,CAAC,MAAM,EAAE,CAAC;oBACZ,OAAO;gBACT,CAAC;gBACD,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC,YAAY,CAAC,gBAAgB,CAAC,CAAC;gBAC9D,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,EAAE,uCAAuC,CAAC,CAAC;YAClE,CAAC;SACF,CAAC,CAAC;QAEH,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE,CAAC,CAAC,EAAE,EAAE;YACrC,MAAM,GAAG,GAAG,IAAI,oBAAoB,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC;YACvE,MAAM,GAAG,GAAG,CAAC;YACb,WAAW,GAAG,CAAC,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAAC;YACnD,YAAY,GAAG,CAAC,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;YAC3C,iBAAiB,GAAG,CAAC,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;YAC3C,WAAW,GAAG,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;YAC/B,WAAW,GAAG,CAAC,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;YACxC,MAAM,cAAc,GAAG,CAAC,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;YACnF,gBAAgB;gBACd,cAAc,EAAE,aAAa,EAAE,SAAS,EAAE,IAAI,IAAI,oCAAoC,CAAC;YACzF,MAAM,SAAS,GACb,cAAc,EAAE,aAAa,EAAE,SAAS,EAAE,IAAI,IAAI,oCAAoC,CAAC;YACzF,iFAAiF;YACjF,sDAAsD;YACtD,KAAK,WAAW,CAAC,QAAQ,CACvB,mCAAmC,EACnC,qCAAqC,EACrC,EAAE,EACF,EAAE,IAAI,EAAE,SAAS,EAAE,CACpB,CAAC;YACF,OAAO,yBAAyB,CAAC,EAAE,aAAa,EAAE,GAAG,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC,CAAC;QAClF,CAAC,CAAC,CAAC;IACL,CAAC;CAC0C,CAAC"}
1
+ {"version":3,"file":"plugin.js","sourceRoot":"","sources":["../../../src/engagement/notifications/plugin.ts"],"names":[],"mappings":"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"}
@@ -20,6 +20,7 @@ declare const _default: {
20
20
  CHAT_ROOM_ACCESS: import("@openora/core/contracts").Token<import("@openora/core/contracts").ChatRoomAccess>;
21
21
  CHAT_SYSTEM_WRITER: import("@openora/core/contracts").Token<import("@openora/core/contracts").ChatSystemWriter, string>;
22
22
  DRIZZLE: import("@openora/core/contracts").Token<import("@openora/core/server").DrizzleService>;
23
+ EMAIL_SENDER: import("@openora/core/contracts").Token<import("@openora/core/contracts").EmailSenderPort>;
23
24
  EMAIL_TEMPLATE_RENDERER: import("@openora/core/contracts").Token<import("@openora/core/contracts").EmailTemplateRenderer>;
24
25
  ERROR_TRACKING: import("@openora/core/contracts").Token<import("@openora/core/contracts").ErrorTrackingAdapter>;
25
26
  EVENT_BUS: import("@openora/core/contracts").Token<import("@openora/core/server").EventBus>;
@@ -63,8 +64,8 @@ declare const _default: {
63
64
  KYC_STATUS_WRITER: import("@openora/core/contracts").Token<import("@openora/core/contracts").KycStatusWriter>;
64
65
  KYC_WEBHOOK_VERIFIER: import("@openora/core/contracts").Token<import("@openora/core/contracts").KycWebhookVerifier>;
65
66
  LOGIN_ENFORCEMENT: import("@openora/core/contracts").Token<import("@openora/core/contracts").LoginEnforcementPort>;
67
+ MAIL_DISPATCH: import("@openora/core/contracts").Token<import("@openora/core/contracts").MailDispatchPort>;
66
68
  MESSAGE_BROKER: import("@openora/core/contracts").Token<import("@openora/core/contracts").MessageBrokerAdapter>;
67
- NOTIFICATION_DELIVERY_ADAPTER: import("@openora/core/contracts").Token<import("@openora/core/contracts").NotificationDeliveryAdapter>;
68
69
  OUTBOX: import("@openora/core/contracts").Token<import("@openora/core/contracts").OutboxWriter>;
69
70
  PAYMENT_ADAPTER: import("@openora/core/contracts").Token<import("@openora/core/contracts").PaymentAdapter>;
70
71
  PAYMENT_PROVIDERS: import("@openora/core/contracts").Token<import("@openora/core/contracts").PaymentProviderRegistry>;
@@ -167,7 +168,6 @@ declare const _default: {
167
168
  REALTIME_TRANSPORT: import("@openora/core/contracts").Token<import("@openora/core/contracts").RealtimeTransport>;
168
169
  RG_LIMITS: import("@openora/core/contracts").Token<import("@openora/core/contracts").RgLimitsPort>;
169
170
  RNG_ADAPTER: import("@openora/core/contracts").Token<import("@openora/core/contracts").RngAdapter>;
170
- SEND_EMAIL: import("@openora/core/contracts").Token<import("@openora/core/contracts").SendEmailPort>;
171
171
  SESSION_COMMANDS: import("@openora/core/contracts").Token<import("@openora/core/contracts").SessionCommands>;
172
172
  USER_COMMANDS: import("@openora/core/contracts").Token<import("@openora/core/contracts").UserCommands>;
173
173
  SMS_ADAPTER: import("@openora/core/contracts").Token<import("@openora/core/contracts").SmsAdapter>;
@@ -19,6 +19,7 @@ declare const _default: {
19
19
  CHAT_ROOM_ACCESS: import("@openora/core/contracts").Token<import("@openora/core/contracts").ChatRoomAccess>;
20
20
  CHAT_SYSTEM_WRITER: import("@openora/core/contracts").Token<import("@openora/core/contracts").ChatSystemWriter, string>;
21
21
  DRIZZLE: import("@openora/core/contracts").Token<import("@openora/core/server").DrizzleService>;
22
+ EMAIL_SENDER: import("@openora/core/contracts").Token<import("@openora/core/contracts").EmailSenderPort>;
22
23
  EMAIL_TEMPLATE_RENDERER: import("@openora/core/contracts").Token<import("@openora/core/contracts").EmailTemplateRenderer>;
23
24
  ERROR_TRACKING: import("@openora/core/contracts").Token<import("@openora/core/contracts").ErrorTrackingAdapter>;
24
25
  EVENT_BUS: import("@openora/core/contracts").Token<import("@openora/core/server").EventBus>;
@@ -62,8 +63,8 @@ declare const _default: {
62
63
  KYC_STATUS_WRITER: import("@openora/core/contracts").Token<import("@openora/core/contracts").KycStatusWriter>;
63
64
  KYC_WEBHOOK_VERIFIER: import("@openora/core/contracts").Token<import("@openora/core/contracts").KycWebhookVerifier>;
64
65
  LOGIN_ENFORCEMENT: import("@openora/core/contracts").Token<import("@openora/core/contracts").LoginEnforcementPort>;
66
+ MAIL_DISPATCH: import("@openora/core/contracts").Token<import("@openora/core/contracts").MailDispatchPort>;
65
67
  MESSAGE_BROKER: import("@openora/core/contracts").Token<import("@openora/core/contracts").MessageBrokerAdapter>;
66
- NOTIFICATION_DELIVERY_ADAPTER: import("@openora/core/contracts").Token<import("@openora/core/contracts").NotificationDeliveryAdapter>;
67
68
  OUTBOX: import("@openora/core/contracts").Token<import("@openora/core/contracts").OutboxWriter>;
68
69
  PAYMENT_ADAPTER: import("@openora/core/contracts").Token<import("@openora/core/contracts").PaymentAdapter>;
69
70
  PAYMENT_PROVIDERS: import("@openora/core/contracts").Token<import("@openora/core/contracts").PaymentProviderRegistry>;
@@ -166,7 +167,6 @@ declare const _default: {
166
167
  REALTIME_TRANSPORT: import("@openora/core/contracts").Token<import("@openora/core/contracts").RealtimeTransport>;
167
168
  RG_LIMITS: import("@openora/core/contracts").Token<import("@openora/core/contracts").RgLimitsPort>;
168
169
  RNG_ADAPTER: import("@openora/core/contracts").Token<import("@openora/core/contracts").RngAdapter>;
169
- SEND_EMAIL: import("@openora/core/contracts").Token<import("@openora/core/contracts").SendEmailPort>;
170
170
  SESSION_COMMANDS: import("@openora/core/contracts").Token<import("@openora/core/contracts").SessionCommands>;
171
171
  USER_COMMANDS: import("@openora/core/contracts").Token<import("@openora/core/contracts").UserCommands>;
172
172
  SMS_ADAPTER: import("@openora/core/contracts").Token<import("@openora/core/contracts").SmsAdapter>;