Skip to content

Commit 493d9e3

Browse files
committed
chore: release v2.3.1
2 parents 1993c22 + 0419f60 commit 493d9e3

File tree

31 files changed

+1024
-755
lines changed

31 files changed

+1024
-755
lines changed
Lines changed: 262 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,262 @@
1+
# ══════════════════════════════════════════════════════════════════════════════
2+
# Notifications Configuration
3+
# ══════════════════════════════════════════════════════════════════════════════
4+
#
5+
# This file controls which events trigger notifications and through which channels.
6+
# By default, all events are ENABLED for both Telegram and Webhook.
7+
#
8+
# To disable a specific event, uncomment it and set the channel to false.
9+
#
10+
# Full event list: https://github.com/remnawave/backend/blob/main/libs/contract/constants/events/events.ts
11+
#
12+
# ──────────────────────────────────────────────────────────────────────────────
13+
# Example:
14+
# ──────────────────────────────────────────────────────────────────────────────
15+
#
16+
# events:
17+
# user.created:
18+
# telegram: true # Send Telegram notification
19+
# webhook: false # Don't send webhook
20+
#
21+
# user.expired:
22+
# telegram: false # Disable Telegram for this event
23+
# webhook: true # Keep webhook enabled
24+
#
25+
# ══════════════════════════════════════════════════════════════════════════════
26+
27+
x-both-enabled: &bothEnabled # Ancor for both channels enabled: use: <<: *bothEnabled
28+
telegram: true
29+
webhook: true
30+
31+
x-both-disabled: &bothDisabled # Ancor for both channels disabled: use: <<: *bothDisabled
32+
telegram: false
33+
webhook: false
34+
35+
events:
36+
# ════════════════════════════════════════════════════════════════════════════
37+
# USER EVENTS
38+
# ════════════════════════════════════════════════════════════════════════════
39+
40+
# Triggered when a new user is created
41+
user.created:
42+
telegram: true
43+
webhook: true
44+
45+
# Triggered when user details are modified
46+
user.modified:
47+
telegram: true
48+
webhook: true
49+
50+
# Triggered when a user is deleted
51+
user.deleted:
52+
telegram: true
53+
webhook: true
54+
55+
# Triggered when user subscription is revoked (new credentials generated)
56+
user.revoked:
57+
telegram: true
58+
webhook: true
59+
60+
# Triggered when a user is disabled
61+
user.disabled:
62+
telegram: true
63+
webhook: true
64+
65+
# Triggered when a user is enabled
66+
user.enabled:
67+
telegram: true
68+
webhook: true
69+
70+
# Triggered when user reaches traffic limit
71+
user.limited:
72+
telegram: true
73+
webhook: true
74+
75+
# Triggered when user subscription expires
76+
user.expired:
77+
telegram: true
78+
webhook: true
79+
80+
# Triggered when user traffic is reset
81+
user.traffic_reset:
82+
telegram: true
83+
webhook: true
84+
85+
# ────────────────────────────────────────────────────────────────────────────
86+
# User Expiration Notifications
87+
# ────────────────────────────────────────────────────────────────────────────
88+
89+
# Triggered 72 hours before subscription expires
90+
user.expires_in_72_hours:
91+
telegram: true
92+
webhook: true
93+
94+
# Triggered 48 hours before subscription expires
95+
user.expires_in_48_hours:
96+
telegram: true
97+
webhook: true
98+
99+
# Triggered 24 hours before subscription expires
100+
user.expires_in_24_hours:
101+
telegram: true
102+
webhook: true
103+
104+
# Triggered 24 hours after subscription expired
105+
user.expired_24_hours_ago:
106+
telegram: true
107+
webhook: true
108+
109+
# ────────────────────────────────────────────────────────────────────────────
110+
# User Connection Events
111+
# ────────────────────────────────────────────────────────────────────────────
112+
113+
# Triggered when user connects for the first time
114+
user.first_connected:
115+
telegram: true
116+
webhook: true
117+
118+
# Triggered when user reaches bandwidth usage threshold (e.g., 80%, 90%)
119+
user.bandwidth_usage_threshold_reached:
120+
telegram: true
121+
webhook: true
122+
123+
# Triggered when user hasn't connected for a configured period
124+
# Note: Requires NOT_CONNECTED_USERS_NOTIFICATIONS_ENABLED=true in .env
125+
user.not_connected:
126+
telegram: true
127+
webhook: true
128+
129+
# ════════════════════════════════════════════════════════════════════════════
130+
# USER HWID DEVICE EVENTS
131+
# ════════════════════════════════════════════════════════════════════════════
132+
# Note: These events are only emitted when HWID Device Limit feature is enabled
133+
# Note: Telegram notifications are skipped by default for these events
134+
135+
# Triggered when a new device is added to user's HWID list
136+
user_hwid_devices.added:
137+
telegram: true
138+
webhook: true
139+
140+
# Triggered when a device is removed from user's HWID list
141+
user_hwid_devices.deleted:
142+
telegram: true
143+
webhook: true
144+
145+
# ════════════════════════════════════════════════════════════════════════════
146+
# NODE EVENTS
147+
# ════════════════════════════════════════════════════════════════════════════
148+
149+
# Triggered when a new node is created
150+
node.created:
151+
telegram: true
152+
webhook: true
153+
154+
# Triggered when node configuration is modified
155+
node.modified:
156+
telegram: true
157+
webhook: true
158+
159+
# Triggered when a node is disabled
160+
node.disabled:
161+
telegram: true
162+
webhook: true
163+
164+
# Triggered when a node is enabled
165+
node.enabled:
166+
telegram: true
167+
webhook: true
168+
169+
# Triggered when a node is deleted
170+
node.deleted:
171+
telegram: true
172+
webhook: true
173+
174+
# Triggered when connection to a node is lost
175+
node.connection_lost:
176+
telegram: true
177+
webhook: true
178+
179+
# Triggered when connection to a node is restored
180+
node.connection_restored:
181+
telegram: true
182+
webhook: true
183+
184+
# Triggered when node reaches traffic threshold
185+
node.traffic_notify:
186+
telegram: true
187+
webhook: true
188+
189+
# ════════════════════════════════════════════════════════════════════════════
190+
# SERVICE EVENTS
191+
# ════════════════════════════════════════════════════════════════════════════
192+
193+
# Triggered when the panel starts
194+
service.panel_started:
195+
telegram: true
196+
webhook: true
197+
198+
# Triggered on failed login attempt
199+
service.login_attempt_failed:
200+
telegram: true
201+
webhook: true
202+
203+
# Triggered on successful login
204+
service.login_attempt_success:
205+
telegram: true
206+
webhook: true
207+
208+
# ════════════════════════════════════════════════════════════════════════════
209+
# ERROR EVENTS
210+
# ════════════════════════════════════════════════════════════════════════════
211+
212+
# Triggered when max notifications limit reached for bandwidth threshold
213+
errors.bandwidth_usage_threshold_reached_max_notifications:
214+
telegram: true
215+
webhook: true
216+
217+
# ════════════════════════════════════════════════════════════════════════════
218+
# CRM EVENTS (Infra Billing)
219+
# ════════════════════════════════════════════════════════════════════════════
220+
221+
# ────────────────────────────────────────────────────────────────────────────
222+
# Upcoming Payment Reminders
223+
# ────────────────────────────────────────────────────────────────────────────
224+
225+
# Triggered 7 days before node payment is due
226+
crm.infra_billing_node_payment_in_7_days:
227+
telegram: true
228+
webhook: true
229+
230+
# Triggered 48 hours before node payment is due
231+
crm.infra_billing_node_payment_in_48hrs:
232+
telegram: true
233+
webhook: true
234+
235+
# Triggered 24 hours before node payment is due
236+
crm.infra_billing_node_payment_in_24hrs:
237+
telegram: true
238+
webhook: true
239+
240+
# Triggered on the day node payment is due
241+
crm.infra_billing_node_payment_due_today:
242+
telegram: true
243+
webhook: true
244+
245+
# ────────────────────────────────────────────────────────────────────────────
246+
# Overdue Payment Alerts
247+
# ────────────────────────────────────────────────────────────────────────────
248+
249+
# Triggered 24 hours after payment was due
250+
crm.infra_billing_node_payment_overdue_24hrs:
251+
telegram: true
252+
webhook: true
253+
254+
# Triggered 48 hours after payment was due
255+
crm.infra_billing_node_payment_overdue_48hrs:
256+
telegram: true
257+
webhook: true
258+
259+
# Triggered 7 days after payment was due (final notice)
260+
crm.infra_billing_node_payment_overdue_7_days:
261+
telegram: true
262+
webhook: true

libs/contract/constants/events/events.ts

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,10 +26,10 @@ export const EVENTS = {
2626
NOT_CONNECTED: 'user.not_connected',
2727
},
2828
/**
29-
* HWID events are emitted only when HWID Device Limit feature is enabled in .env.
29+
* HWID events are emitted only when HWID Device Limit feature is enabled.
3030
* Event payload contains user and HWID device entities.
3131
* Note: Telegram notifications are skipped for this event.
32-
* Note: For performance reasons, user entity's activeInternalSquads and lastConnectedNode fields are always empty.
32+
* Note: For performance reasons, user entity's activeInternalSquads field is always empty.
3333
* Returns: user and HWID device entities.
3434
*/
3535
USER_HWID_DEVICES: {
@@ -80,3 +80,12 @@ export type TErrorsEvents = (typeof EVENTS.ERRORS)[keyof typeof EVENTS.ERRORS];
8080
export type TCRMEvents = (typeof EVENTS.CRM)[keyof typeof EVENTS.CRM];
8181
export type TUserHwidDevicesEvents =
8282
(typeof EVENTS.USER_HWID_DEVICES)[keyof typeof EVENTS.USER_HWID_DEVICES];
83+
84+
export type TAllEvents =
85+
| TUserEvents
86+
| TNodeEvents
87+
| TServiceEvents
88+
| TErrorsEvents
89+
| TCRMEvents
90+
| TUserHwidDevicesEvents;
91+
export type TAllEventChannels = 'telegram' | 'webhook';

package-lock.json

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@remnawave/backend",
3-
"version": "2.3.0",
3+
"version": "2.3.1",
44
"description": "Remnawave Panel Backend",
55
"private": false,
66
"type": "commonjs",
@@ -184,4 +184,4 @@
184184
"cron": "4.3.5"
185185
}
186186
}
187-
}
187+
}

src/app.module.ts

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,8 @@ import { ServeStaticModule } from '@nestjs/serve-static';
1111
import { CacheModule } from '@nestjs/cache-manager';
1212

1313
import { disableFrontend, isCrowdinEditorEnabled } from '@common/utils/startup-app/is-development';
14-
import { validateEnvConfig } from '@common/utils/validate-env-config';
14+
import { CommonConfigModule } from '@common/config/common-config/common-config.module';
1515
import { PrismaService } from '@common/database/prisma.service';
16-
import { configSchema, Env } from '@common/config/app-config';
1716
import { getRedisConnectionOptions } from '@common/utils';
1817
import { AxiosModule } from '@common/axios/axios.module';
1918
import { PrismaModule } from '@common/database';
@@ -27,12 +26,7 @@ import { QueueModule } from '@queue/queue.module';
2726
@Module({
2827
imports: [
2928
AxiosModule,
30-
ConfigModule.forRoot({
31-
isGlobal: true,
32-
cache: true,
33-
envFilePath: '.env',
34-
validate: (config) => validateEnvConfig<Env>(configSchema, config),
35-
}),
29+
CommonConfigModule,
3630
PrismaModule,
3731
ClsModule.forRoot({
3832
plugins: [

src/bin/processors/processors.root.module.ts

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,8 @@ import { ClsPluginTransactional } from '@nestjs-cls/transactional';
1111
import { EventEmitterModule } from '@nestjs/event-emitter';
1212
import { CacheModule } from '@nestjs/cache-manager';
1313

14-
import { validateEnvConfig } from '@common/utils/validate-env-config';
14+
import { CommonConfigModule } from '@common/config/common-config';
1515
import { PrismaService } from '@common/database/prisma.service';
16-
import { configSchema, Env } from '@common/config/app-config';
1716
import { RedisProducerModule } from '@common/microservices';
1817
import { getRedisConnectionOptions } from '@common/utils';
1918
import { isProcessor } from '@common/utils/startup-app';
@@ -25,12 +24,7 @@ import { RemnawaveModules } from '@modules/remnawave-backend.modules';
2524
@Module({
2625
imports: [
2726
AxiosModule,
28-
ConfigModule.forRoot({
29-
isGlobal: true,
30-
cache: true,
31-
envFilePath: '.env',
32-
validate: (config) => validateEnvConfig<Env>(configSchema, config),
33-
}),
27+
CommonConfigModule,
3428
PrismaModule,
3529
ClsModule.forRoot({
3630
plugins: [

src/bin/scheduler/scheduler.root.module.ts

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,8 @@ import { CacheModule } from '@nestjs/cache-manager';
1212
import { ScheduleModule } from '@nestjs/schedule';
1313

1414
import { getRedisConnectionOptions } from '@common/utils/get-redis-connection-options';
15-
import { validateEnvConfig } from '@common/utils/validate-env-config';
15+
import { CommonConfigModule } from '@common/config/common-config';
1616
import { PrismaService } from '@common/database/prisma.service';
17-
import { configSchema, Env } from '@common/config/app-config';
1817
import { PrismaModule } from '@common/database';
1918
import { AxiosModule } from '@common/axios';
2019

@@ -28,12 +27,7 @@ import { SchedulerModule } from '@scheduler/scheduler.module';
2827
@Module({
2928
imports: [
3029
AxiosModule,
31-
ConfigModule.forRoot({
32-
isGlobal: true,
33-
cache: true,
34-
envFilePath: '.env',
35-
validate: (config) => validateEnvConfig<Env>(configSchema, config),
36-
}),
30+
CommonConfigModule,
3731
PrismaModule,
3832
ClsModule.forRoot({
3933
plugins: [
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1 +1,2 @@
11
export * from './config.schema';
2+
export * from './notifications.config';

0 commit comments

Comments
 (0)