@coopenomics/notifications 2025.11.8-3

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/.cursor/rules/notifications.mdc +20 -0
  2. package/.env-example +2 -0
  3. package/README.md +218 -0
  4. package/build.config.ts +13 -0
  5. package/dist/index.cjs +3027 -0
  6. package/dist/index.d.cts +792 -0
  7. package/dist/index.d.mts +792 -0
  8. package/dist/index.d.ts +792 -0
  9. package/dist/index.mjs +3016 -0
  10. package/package.json +55 -0
  11. package/src/base/defaults.ts +66 -0
  12. package/src/base/workflow-builder.ts +128 -0
  13. package/src/index.ts +9 -0
  14. package/src/sync/README.md +54 -0
  15. package/src/sync/novu-sync.service.ts +246 -0
  16. package/src/sync/sync-runner.ts +154 -0
  17. package/src/types/index.ts +99 -0
  18. package/src/utils/index.ts +1 -0
  19. package/src/utils/slugify/builtinReplacements.ts +2065 -0
  20. package/src/utils/slugify/slugify.ts +284 -0
  21. package/src/utils/slugify/transliterate.ts +48 -0
  22. package/src/workflows/approval-request/index.ts +52 -0
  23. package/src/workflows/approval-response/index.ts +54 -0
  24. package/src/workflows/decision-approved/index.ts +50 -0
  25. package/src/workflows/email-verification/index.ts +35 -0
  26. package/src/workflows/incoming-transfer/index.ts +43 -0
  27. package/src/workflows/index.ts +74 -0
  28. package/src/workflows/invite/index.ts +34 -0
  29. package/src/workflows/meet-ended/index.ts +51 -0
  30. package/src/workflows/meet-initial/index.ts +53 -0
  31. package/src/workflows/meet-reminder-end/index.ts +52 -0
  32. package/src/workflows/meet-reminder-start/index.ts +51 -0
  33. package/src/workflows/meet-restart/index.ts +53 -0
  34. package/src/workflows/meet-started/index.ts +51 -0
  35. package/src/workflows/new-agenda-item/index.ts +51 -0
  36. package/src/workflows/new-deposit-payment-request/index.ts +50 -0
  37. package/src/workflows/new-initial-payment-request/index.ts +50 -0
  38. package/src/workflows/payment-cancelled/index.ts +51 -0
  39. package/src/workflows/payment-paid/index.ts +50 -0
  40. package/src/workflows/reset-key/index.ts +36 -0
  41. package/src/workflows/server-provisioned/index.ts +45 -0
  42. package/src/workflows/welcome/index.ts +43 -0
  43. package/tsconfig.json +18 -0
@@ -0,0 +1,20 @@
1
+ ---
2
+ globs: notifications/src/workflows/**/*.ts
3
+ ---
4
+ # Правила валидации воркфлоу
5
+
6
+ ## 🚫 ID воркфлоу
7
+ - **Длина ID не должна превышать 32 символа**
8
+ - Используйте описательные, но короткие идентификаторы
9
+
10
+ ## 🚫 Условия в шаблонах
11
+ - **Запрещено использовать JavaScript выражения в шаблонах Novu**
12
+ - Нельзя использовать:
13
+ - Тернарные операторы: `{{condition ? "text1" : "text2"}}`
14
+ - Логические операторы: `{{field && "text"}}`
15
+ - Любые другие JS конструкции
16
+
17
+ ## ✅ Рекомендации
18
+ - Добавляйте текстовые поля в payload для условной логики
19
+ - Вычисляйте значения на стороне сервера перед отправкой уведомления
20
+ - Используйте только простые переменные: `{{payload.fieldName}}`
package/.env-example ADDED
@@ -0,0 +1,2 @@
1
+ NOVU_API_KEY=
2
+ NOVU_API_URL=
package/README.md ADDED
@@ -0,0 +1,218 @@
1
+ # Notifications Library - Типизированные Workflow для Novu
2
+
3
+ Библиотека для создания типизированных workflow уведомлений с использованием Zod схем и паттерна Builder.
4
+
5
+ ## Особенности
6
+
7
+ - 🔒 **Типобезопасность** - Полная типизация payload с Zod
8
+ - 🏗️ **Builder Pattern** - Удобное создание workflow
9
+ - 📝 **Декларативный API** - Простое описание шагов уведомлений
10
+ - 🔧 **Расширяемость** - Легкое добавление новых типов workflow
11
+ - ⚡ **Валидация** - Автоматическая валидация данных
12
+ - 🏷️ **Теги и роли** - Группировка уведомлений по ролям пользователей
13
+
14
+ ## Установка
15
+
16
+ ```bash
17
+ cd components/notifications
18
+ pnpm install
19
+ ```
20
+
21
+ ## Быстрый старт
22
+
23
+ ### 1. Создание нового workflow
24
+
25
+ ```typescript
26
+ import { z } from 'zod';
27
+ import { WorkflowBuilder, createEmailStep, createInAppStep } from '@coopenomics/notifications';
28
+
29
+ // Определяем схему данных
30
+ const myPayloadSchema = z.object({
31
+ userName: z.string(),
32
+ userEmail: z.string().email(),
33
+ orderTotal: z.number(),
34
+ });
35
+
36
+ type MyPayload = z.infer<typeof myPayloadSchema>;
37
+
38
+ // Создаем workflow
39
+ export const orderConfirmationWorkflow = WorkflowBuilder
40
+ .create<MyPayload>()
41
+ .name('Order Confirmation')
42
+ .workflowId('order-confirmation')
43
+ .description('Подтверждение заказа')
44
+ .payloadSchema(myPayloadSchema)
45
+ .addSteps([
46
+ createEmailStep(
47
+ 'order-email',
48
+ 'Заказ подтвержден - {{payload.userName}}',
49
+ 'Здравствуйте, {{payload.userName}}! Ваш заказ на сумму {{payload.orderTotal}} подтвержден.'
50
+ ),
51
+ createInAppStep(
52
+ 'order-notification',
53
+ 'Заказ обработан',
54
+ 'Заказ успешно обработан и скоро будет отправлен.'
55
+ ),
56
+ ])
57
+ .build();
58
+ ```
59
+
60
+ ### 2. Регистрация workflow
61
+
62
+ Добавьте ваш workflow в `src/workflows/index.ts`:
63
+
64
+ ```typescript
65
+ import { orderConfirmationWorkflow } from './order-confirmation';
66
+
67
+ export const allWorkflows: WorkflowDefinition[] = [
68
+ welcomeWorkflow,
69
+ orderConfirmationWorkflow, // ← добавляем новый workflow
70
+ ];
71
+ ```
72
+
73
+ ### 3. Использование в коде
74
+
75
+ ```typescript
76
+ import { orderConfirmationWorkflow } from '@coopenomics/notifications';
77
+
78
+ // Валидация данных
79
+ const payload = orderConfirmationWorkflow.payloadZodSchema.parse({
80
+ userName: 'Иван Иванов',
81
+ userEmail: 'ivan@example.com',
82
+ orderTotal: 1500,
83
+ });
84
+
85
+ // Данные для отправки в Novu
86
+ const novuData = orderConfirmationWorkflow.payloadSchema;
87
+ ```
88
+
89
+ ## Структура проекта
90
+
91
+ ```
92
+ src/
93
+ ├── types/ # Базовые типы и интерфейсы
94
+ ├── base/ # Базовые утилиты и настройки
95
+ │ ├── defaults.ts # Настройки по умолчанию
96
+ │ └── workflow-builder.ts # Builder для создания workflow
97
+ └── workflows/ # Папки с workflow
98
+ ├── welcome/ # Приветственные уведомления
99
+ ├── order/ # Уведомления о заказах
100
+ └── index.ts # Экспорт всех workflow
101
+ ```
102
+
103
+ ## API Reference
104
+
105
+ ### WorkflowBuilder
106
+
107
+ Основной класс для создания workflow:
108
+
109
+ ```typescript
110
+ const workflow = WorkflowBuilder
111
+ .create<PayloadType>()
112
+ .name('Workflow Name') // Название workflow
113
+ .workflowId('unique-workflow-id') // Уникальный ID
114
+ .description('Описание workflow') // Описание (опционально)
115
+ .payloadSchema(zodSchema) // Zod схема для валидации
116
+ .addStep(step) // Добавить шаг
117
+ .addSteps([step1, step2]) // Добавить несколько шагов
118
+ .origin('external') // Источник (опционально)
119
+ .build(); // Собрать workflow
120
+ ```
121
+
122
+ ### Вспомогательные функции
123
+
124
+ ```typescript
125
+ // Email уведомление
126
+ createEmailStep(name, subject, body)
127
+
128
+ // In-app уведомление
129
+ createInAppStep(name, subject, body, avatar?)
130
+
131
+ // Push уведомление
132
+ createPushStep(name, title, body)
133
+
134
+ // SMS уведомление
135
+ createSmsStep(name, body)
136
+ ```
137
+
138
+ ## Типы workflow
139
+
140
+ ### Email
141
+ - `subject` - Тема письма
142
+ - `body` - HTML содержимое
143
+ - `editorType` - 'html' | 'text'
144
+
145
+ ### In-App
146
+ - `subject` - Заголовок уведомления
147
+ - `body` - Текст уведомления
148
+ - `avatar` - URL аватара (опционально)
149
+
150
+ ### Push
151
+ - `subject` - Заголовок push-уведомления
152
+ - `body` - Текст push-уведомления
153
+
154
+ ### SMS
155
+ - `body` - Текст SMS
156
+
157
+ ## Шаблонизация
158
+
159
+ Используйте Handlebars синтаксис для динамических данных:
160
+
161
+ ```typescript
162
+ // Простая подстановка
163
+ "Привет, {{payload.userName}}!"
164
+
165
+ // Условные блоки
166
+ "{{#payload.age}}Ваш возраст: {{payload.age}}{{/payload.age}}"
167
+
168
+ // Вложенные объекты
169
+ "{{payload.order.total}} руб."
170
+ ```
171
+
172
+ ## Теги и роли
173
+
174
+ Библиотека поддерживает группировку уведомлений по ролям пользователей с помощью тегов. Теги позволяют фильтровать уведомления в UI компонентах.
175
+
176
+ ### Добавление тегов к workflow
177
+
178
+ ```typescript
179
+ export const newAgendaItemWorkflow = WorkflowBuilder
180
+ .create<NewAgendaItemPayload>()
181
+ .name('Новый вопрос на повестке')
182
+ .workflowId('new-agenda-item')
183
+ .description('Уведомление о новом вопросе на повестке')
184
+ .payloadSchema(newAgendaItemPayloadSchema)
185
+ .tags(['chairman', 'member']) // Теги для ролей пользователей
186
+ .addSteps([
187
+ // ... шаги
188
+ ])
189
+ .build();
190
+ ```
191
+
192
+ ### Использование в компонентах
193
+
194
+ ```typescript
195
+ // Создание табов для фильтрации по ролям
196
+ const tabs = [
197
+ {
198
+ label: 'Все уведомления',
199
+ filter: {
200
+ tags: [userRole.value], // Фильтр по роли пользователя
201
+ },
202
+ },
203
+ ];
204
+ ```
205
+
206
+ ### Доступные роли
207
+
208
+ - `chairman` - Председатель совета
209
+ - `member` - Член совета
210
+ - `user` - Обычный пользователь
211
+
212
+ ## Сборка
213
+
214
+ ```bash
215
+ pnpm build
216
+ ```
217
+
218
+ Результат сборки будет в папке `dist/`.
@@ -0,0 +1,13 @@
1
+ import { defineBuildConfig } from 'unbuild'
2
+
3
+ export default defineBuildConfig({
4
+ entries: [
5
+ 'src/index',
6
+ ],
7
+ declaration: true,
8
+ clean: false,
9
+ failOnWarn: false,
10
+ rollup: {
11
+ emitCJS: true,
12
+ },
13
+ })