@stamhoofd/backend 2.114.1 → 2.115.1

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/index.ts CHANGED
@@ -1,5 +1,6 @@
1
1
  import backendEnv from '@stamhoofd/backend-env';
2
2
 
3
+ process.title = 'stamhoofd-api';
3
4
  backendEnv.load({ service: 'api' }).catch((error) => {
4
5
  console.error('Failed to load environment:', error);
5
6
  process.exit(1);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@stamhoofd/backend",
3
- "version": "2.114.1",
3
+ "version": "2.115.1",
4
4
  "main": "./dist/index.js",
5
5
  "exports": {
6
6
  ".": {
@@ -19,6 +19,7 @@
19
19
  "license": "UNLICENCED",
20
20
  "scripts": {
21
21
  "dev": "wait-on ../../shared/middleware/dist/index.js && concurrently -r 'yarn -s build --watch --preserveWatchOutput' \"yarn -s dev:watch\"",
22
+ "dev:full": "yarn -s dev",
22
23
  "dev:watch": "wait-on ./dist/index.js && nodemon --quiet --inspect=5858 --watch dist --watch '../../../shared/*/dist/' --watch '../../shared/*/dist/' --ext .ts,.json,.sql,.js --delay 2000ms --exec 'node --enable-source-maps ./dist/index.js' --signal SIGTERM",
23
24
  "dev:backend": "yarn -s dev",
24
25
  "build": "rm -rf ./dist/src/migrations && rm -rf ./dist/src/seeds && yarn -s copy-assets && tsc -b",
@@ -54,14 +55,14 @@
54
55
  "@simonbackx/simple-encoding": "2.23.1",
55
56
  "@simonbackx/simple-endpoints": "1.20.1",
56
57
  "@simonbackx/simple-logging": "^1.0.1",
57
- "@stamhoofd/backend-i18n": "2.114.1",
58
- "@stamhoofd/backend-middleware": "2.114.1",
59
- "@stamhoofd/email": "2.114.1",
60
- "@stamhoofd/models": "2.114.1",
61
- "@stamhoofd/queues": "2.114.1",
62
- "@stamhoofd/sql": "2.114.1",
63
- "@stamhoofd/structures": "2.114.1",
64
- "@stamhoofd/utility": "2.114.1",
58
+ "@stamhoofd/backend-i18n": "2.115.1",
59
+ "@stamhoofd/backend-middleware": "2.115.1",
60
+ "@stamhoofd/email": "2.115.1",
61
+ "@stamhoofd/models": "2.115.1",
62
+ "@stamhoofd/queues": "2.115.1",
63
+ "@stamhoofd/sql": "2.115.1",
64
+ "@stamhoofd/structures": "2.115.1",
65
+ "@stamhoofd/utility": "2.115.1",
65
66
  "archiver": "^7.0.1",
66
67
  "axios": "^1.13.2",
67
68
  "cookie": "^0.7.0",
@@ -79,5 +80,5 @@
79
80
  "publishConfig": {
80
81
  "access": "public"
81
82
  },
82
- "gitHead": "0394c203f4133023b2a813d96554ea8b4a0a73d8"
83
+ "gitHead": "4b692d62820d095e00524e3c0214e8f73a69506e"
83
84
  }
package/src/boot.ts CHANGED
@@ -10,17 +10,19 @@ import { SimpleError } from '@simonbackx/simple-errors';
10
10
  import { startCrons, stopCrons, waitForCrons } from '@stamhoofd/crons';
11
11
  import { Platform } from '@stamhoofd/models';
12
12
  import { QueueHandler } from '@stamhoofd/queues';
13
- import { resumeEmails } from './helpers/EmailResumer';
14
- import { GlobalHelper } from './helpers/GlobalHelper';
15
- import { SetupStepUpdater } from './helpers/SetupStepUpdater';
16
- import { ContextMiddleware } from './middleware/ContextMiddleware';
17
- import { AuditLogService } from './services/AuditLogService';
18
- import { BalanceItemService } from './services/BalanceItemService';
19
- import { DocumentService } from './services/DocumentService';
20
- import { FileSignService } from './services/FileSignService';
21
- import { PlatformMembershipService } from './services/PlatformMembershipService';
22
- import { UitpasService } from './services/uitpas/UitpasService';
23
- import { UniqueUserService } from './services/UniqueUserService';
13
+ import { resumeEmails } from './helpers/EmailResumer.js';
14
+ import { GlobalHelper } from './helpers/GlobalHelper.js';
15
+ import { SetupStepUpdater } from './helpers/SetupStepUpdater.js';
16
+ import { ContextMiddleware } from './middleware/ContextMiddleware.js';
17
+ import { AuditLogService } from './services/AuditLogService.js';
18
+ import { BalanceItemService } from './services/BalanceItemService.js';
19
+ import { DocumentService } from './services/DocumentService.js';
20
+ import { FileSignService } from './services/FileSignService.js';
21
+ import { PlatformMembershipService } from './services/PlatformMembershipService.js';
22
+ import { UitpasService } from './services/uitpas/UitpasService.js';
23
+ import { UniqueUserService } from './services/UniqueUserService.js';
24
+ import { CpuService } from './services/CpuService.js';
25
+ import { SQLLogger } from '@stamhoofd/sql';
24
26
 
25
27
  process.on('unhandledRejection', (error: Error) => {
26
28
  console.error('unhandledRejection');
@@ -88,6 +90,7 @@ export const boot = async (options: { killProcess: boolean }) => {
88
90
  await router.loadAllEndpoints(__dirname + '/endpoints/organization/webshops');
89
91
  await router.loadAllEndpoints(__dirname + '/endpoints/organization/shared');
90
92
  await router.loadAllEndpoints(__dirname + '/endpoints/organization/shared/*');
93
+ await router.loadAllEndpoints(__dirname + '/endpoints/system');
91
94
 
92
95
  router.endpoints.push(new CORSPreflightEndpoint());
93
96
 
@@ -123,16 +126,16 @@ export const boot = async (options: { killProcess: boolean }) => {
123
126
  productionLog('Loading loaders...');
124
127
 
125
128
  // Register Excel loaders
126
- await import('./excel-loaders');
129
+ await import('./excel-loaders/index.js');
127
130
 
128
131
  // Register Email Recipient loaders
129
- await import('./email-recipient-loaders/members');
130
- await import('./email-recipient-loaders/registrations');
131
- await import('./email-recipient-loaders/orders');
132
- await import('./email-recipient-loaders/receivable-balances');
133
- await import('./excel-loaders/registrations');
134
- await import('./email-recipient-loaders/documents');
135
- await import ('./email-recipient-loaders/payments');
132
+ await import('./email-recipient-loaders/members.js');
133
+ await import('./email-recipient-loaders/registrations.js');
134
+ await import('./email-recipient-loaders/orders.js');
135
+ await import('./email-recipient-loaders/receivable-balances.js');
136
+ await import('./excel-loaders/registrations.js');
137
+ await import('./email-recipient-loaders/documents.js');
138
+ await import ('./email-recipient-loaders/payments.js');
136
139
 
137
140
  productionLog('Opening port...');
138
141
  routerServer.listen(STAMHOOFD.PORT ?? 9090);
@@ -142,6 +145,14 @@ export const boot = async (options: { killProcess: boolean }) => {
142
145
 
143
146
  resumeEmails().catch(console.error);
144
147
 
148
+ if (STAMHOOFD.environment !== 'development' && STAMHOOFD.environment !== 'test') {
149
+ CpuService.startMonitoring();
150
+ }
151
+ else if (STAMHOOFD.environment === 'development') {
152
+ SQLLogger.slowQueryThresholdMs = 200;
153
+ SQLLogger.explainAllAndLogInefficient = true;
154
+ }
155
+
145
156
  if (routerServer.server) {
146
157
  // Default timeout is a bit too short
147
158
  routerServer.server.timeout = 61000;
@@ -235,7 +246,7 @@ export const boot = async (options: { killProcess: boolean }) => {
235
246
  }
236
247
 
237
248
  // Register crons
238
- await import('./crons');
249
+ await import('./crons.js');
239
250
 
240
251
  AuditLogService.listen();
241
252
  PlatformMembershipService.listen();
@@ -47,20 +47,7 @@ async function fetch(query: LimitedFilteredRequest) {
47
47
  async function count(request: LimitedFilteredRequest) {
48
48
  const query = await GetDocumentsEndpoint.buildQuery(request);
49
49
  const uniqueMemberIds = await query.count(SQL.distinct(SQL.column('memberId')));
50
-
51
- if (uniqueMemberIds > 100 || uniqueMemberIds === 0) {
52
- return uniqueMemberIds; // rough estimate
53
- }
54
- // do full count
55
- request.limit = 100;
56
- let count = 0;
57
- let req: LimitedFilteredRequest | null = request;
58
- while (req) {
59
- const result = await fetch(request);
60
- count += result.results.length;
61
- req = result.next ?? null;
62
- }
63
- return count;
50
+ return uniqueMemberIds;
64
51
  };
65
52
 
66
53
  Email.recipientLoaders.set(EmailRecipientFilterType.Documents, { fetch, count });