@laboratory-one/api-components 0.0.21 → 0.0.22
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/cjs/cron/cron.util.d.ts.map +1 -1
- package/dist/cjs/guard/auth.guard.d.ts.map +1 -1
- package/dist/cjs/guard/auth.guard.js.map +1 -1
- package/dist/cjs/health/dtos/health.response.dto.d.ts +1 -0
- package/dist/cjs/health/dtos/health.response.dto.d.ts.map +1 -1
- package/dist/cjs/health/dtos/health.response.dto.js +5 -0
- package/dist/cjs/health/dtos/health.response.dto.js.map +1 -1
- package/dist/cjs/health/health.service.d.ts +1 -1
- package/dist/cjs/health/health.service.d.ts.map +1 -1
- package/dist/cjs/health/health.service.js +4 -1
- package/dist/cjs/health/health.service.js.map +1 -1
- package/dist/cjs/middleware/logger.middleware.d.ts.map +1 -1
- package/dist/cjs/middleware/logger.middleware.js.map +1 -1
- package/dist/cjs/prisma/prisma.service.d.ts.map +1 -1
- package/dist/cjs/prisma/prisma.service.js.map +1 -1
- package/dist/cjs/search/search.service.d.ts +1 -1
- package/dist/cjs/search/search.service.d.ts.map +1 -1
- package/dist/cjs/search/search.service.js +24 -14
- package/dist/cjs/search/search.service.js.map +1 -1
- package/dist/cjs/services/instrument-sentry.d.ts.map +1 -1
- package/dist/cjs/user/schemas/delete-user.schema.d.ts +1 -5
- package/dist/cjs/user/schemas/delete-user.schema.d.ts.map +1 -1
- package/dist/cjs/user/schemas/phone-login-verify.schema.d.ts +1 -9
- package/dist/cjs/user/schemas/phone-login-verify.schema.d.ts.map +1 -1
- package/dist/cjs/user/schemas/phone-login.schema.d.ts +1 -5
- package/dist/cjs/user/schemas/phone-login.schema.d.ts.map +1 -1
- package/dist/cjs/user/schemas/signup.schema.d.ts +1 -7
- package/dist/cjs/user/schemas/signup.schema.d.ts.map +1 -1
- package/dist/cjs/user/schemas/update-user.schema.d.ts +1 -13
- package/dist/cjs/user/schemas/update-user.schema.d.ts.map +1 -1
- package/dist/cjs/user/user.controller.d.ts.map +1 -1
- package/dist/cjs/user/user.controller.js.map +1 -1
- package/dist/cjs/user/user.util.d.ts.map +1 -1
- package/dist/cjs/utils/datetime.util.d.ts.map +1 -1
- package/dist/cjs/utils/error.util.d.ts.map +1 -1
- package/dist/cjs/utils/index.d.ts +1 -0
- package/dist/cjs/utils/index.d.ts.map +1 -1
- package/dist/cjs/utils/index.js +1 -0
- package/dist/cjs/utils/index.js.map +1 -1
- package/dist/cjs/utils/input.util.d.ts.map +1 -1
- package/dist/cjs/utils/string.util.d.ts.map +1 -1
- package/dist/cjs/utils/version.util.d.ts +3 -0
- package/dist/cjs/utils/version.util.d.ts.map +1 -0
- package/dist/cjs/utils/version.util.js +19 -0
- package/dist/cjs/utils/version.util.js.map +1 -0
- package/dist/esm/cron/cron.util.d.ts.map +1 -1
- package/dist/esm/guard/auth.guard.d.ts.map +1 -1
- package/dist/esm/guard/auth.guard.js.map +1 -1
- package/dist/esm/health/dtos/health.response.dto.d.ts +1 -0
- package/dist/esm/health/dtos/health.response.dto.d.ts.map +1 -1
- package/dist/esm/health/dtos/health.response.dto.js +5 -0
- package/dist/esm/health/dtos/health.response.dto.js.map +1 -1
- package/dist/esm/health/health.service.d.ts +1 -1
- package/dist/esm/health/health.service.d.ts.map +1 -1
- package/dist/esm/health/health.service.js +4 -1
- package/dist/esm/health/health.service.js.map +1 -1
- package/dist/esm/middleware/logger.middleware.d.ts.map +1 -1
- package/dist/esm/middleware/logger.middleware.js.map +1 -1
- package/dist/esm/prisma/prisma.service.d.ts.map +1 -1
- package/dist/esm/prisma/prisma.service.js.map +1 -1
- package/dist/esm/search/search.service.d.ts +1 -1
- package/dist/esm/search/search.service.d.ts.map +1 -1
- package/dist/esm/search/search.service.js +23 -13
- package/dist/esm/search/search.service.js.map +1 -1
- package/dist/esm/services/instrument-sentry.d.ts.map +1 -1
- package/dist/esm/user/schemas/delete-user.schema.d.ts +1 -5
- package/dist/esm/user/schemas/delete-user.schema.d.ts.map +1 -1
- package/dist/esm/user/schemas/phone-login-verify.schema.d.ts +1 -9
- package/dist/esm/user/schemas/phone-login-verify.schema.d.ts.map +1 -1
- package/dist/esm/user/schemas/phone-login.schema.d.ts +1 -5
- package/dist/esm/user/schemas/phone-login.schema.d.ts.map +1 -1
- package/dist/esm/user/schemas/signup.schema.d.ts +1 -7
- package/dist/esm/user/schemas/signup.schema.d.ts.map +1 -1
- package/dist/esm/user/schemas/update-user.schema.d.ts +1 -13
- package/dist/esm/user/schemas/update-user.schema.d.ts.map +1 -1
- package/dist/esm/user/user.controller.d.ts.map +1 -1
- package/dist/esm/user/user.controller.js.map +1 -1
- package/dist/esm/user/user.util.d.ts.map +1 -1
- package/dist/esm/utils/datetime.util.d.ts.map +1 -1
- package/dist/esm/utils/error.util.d.ts.map +1 -1
- package/dist/esm/utils/index.d.ts +1 -0
- package/dist/esm/utils/index.d.ts.map +1 -1
- package/dist/esm/utils/index.js +1 -0
- package/dist/esm/utils/index.js.map +1 -1
- package/dist/esm/utils/input.util.d.ts.map +1 -1
- package/dist/esm/utils/string.util.d.ts.map +1 -1
- package/dist/esm/utils/version.util.d.ts +3 -0
- package/dist/esm/utils/version.util.d.ts.map +1 -0
- package/dist/esm/utils/version.util.js +13 -0
- package/dist/esm/utils/version.util.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +53 -53
- package/src/guard/auth.guard.ts +0 -3
- package/src/health/dtos/health.response.dto.ts +4 -0
- package/src/health/health.service.ts +4 -1
- package/src/middleware/logger.middleware.ts +0 -1
- package/src/prisma/prisma.service.ts +0 -2
- package/src/search/search.service.ts +27 -21
- package/src/user/user.controller.ts +1 -3
- package/src/utils/index.ts +1 -0
- package/src/utils/version.util.ts +16 -0
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@laboratory-one/api-components",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.22",
|
|
4
4
|
"description": "API components for Laboratory One",
|
|
5
5
|
"author": "Laboratory One",
|
|
6
6
|
"private": false,
|
|
@@ -31,66 +31,66 @@
|
|
|
31
31
|
"version:minor": "./scripts/version.sh minor"
|
|
32
32
|
},
|
|
33
33
|
"dependencies": {
|
|
34
|
-
"@nestjs/axios": "
|
|
35
|
-
"@nestjs/common": "
|
|
36
|
-
"@nestjs/config": "
|
|
37
|
-
"@nestjs/core": "
|
|
38
|
-
"@nestjs/jwt": "
|
|
39
|
-
"@nestjs/platform-express": "
|
|
40
|
-
"@nestjs/schedule": "
|
|
41
|
-
"@nestjs/swagger": "
|
|
42
|
-
"@nestjs/terminus": "
|
|
43
|
-
"@prisma/client": "
|
|
44
|
-
"@sendgrid/mail": "8.1.
|
|
45
|
-
"@sentry/cli": "2.
|
|
46
|
-
"@sentry/nestjs": "
|
|
47
|
-
"@sentry/node": "
|
|
48
|
-
"@sentry/profiling-node": "
|
|
49
|
-
"algoliasearch": "
|
|
50
|
-
"axios": "1.
|
|
34
|
+
"@nestjs/axios": "4.0.1",
|
|
35
|
+
"@nestjs/common": "11.1.6",
|
|
36
|
+
"@nestjs/config": "4.0.2",
|
|
37
|
+
"@nestjs/core": "11.1.6",
|
|
38
|
+
"@nestjs/jwt": "11.0.0",
|
|
39
|
+
"@nestjs/platform-express": "11.1.6",
|
|
40
|
+
"@nestjs/schedule": "6.0.1",
|
|
41
|
+
"@nestjs/swagger": "11.2.0",
|
|
42
|
+
"@nestjs/terminus": "11.0.0",
|
|
43
|
+
"@prisma/client": "6.16.2",
|
|
44
|
+
"@sendgrid/mail": "8.1.6",
|
|
45
|
+
"@sentry/cli": "2.54.0",
|
|
46
|
+
"@sentry/nestjs": "10.12.0",
|
|
47
|
+
"@sentry/node": "10.12.0",
|
|
48
|
+
"@sentry/profiling-node": "10.12.0",
|
|
49
|
+
"algoliasearch": "5.37.0",
|
|
50
|
+
"axios": "1.12.2",
|
|
51
51
|
"class-transformer": "0.5.1",
|
|
52
|
-
"class-validator": "0.14.
|
|
53
|
-
"compression": "1.
|
|
54
|
-
"expo-server-sdk": "
|
|
55
|
-
"globals": "
|
|
56
|
-
"helmet": "
|
|
52
|
+
"class-validator": "0.14.2",
|
|
53
|
+
"compression": "1.8.1",
|
|
54
|
+
"expo-server-sdk": "4.0.0",
|
|
55
|
+
"globals": "16.4.0",
|
|
56
|
+
"helmet": "8.1.0",
|
|
57
57
|
"moment": "2.30.1",
|
|
58
|
-
"prisma": "
|
|
58
|
+
"prisma": "6.16.2",
|
|
59
59
|
"reflect-metadata": "0.2.2",
|
|
60
|
-
"rxjs": "7.8.
|
|
61
|
-
"stytch": "
|
|
62
|
-
"zod": "
|
|
60
|
+
"rxjs": "7.8.2",
|
|
61
|
+
"stytch": "12.35.0",
|
|
62
|
+
"zod": "4.1.11"
|
|
63
63
|
},
|
|
64
64
|
"devDependencies": {
|
|
65
|
-
"@babel/core": "7.
|
|
66
|
-
"@nestjs/cli": "
|
|
67
|
-
"@nestjs/schematics": "
|
|
68
|
-
"@nestjs/testing": "
|
|
69
|
-
"@sentry/types": "
|
|
70
|
-
"@tanstack/eslint-plugin-query": "5.
|
|
71
|
-
"@types/compression": "1.
|
|
72
|
-
"@types/express": "
|
|
73
|
-
"@types/jest": "
|
|
74
|
-
"@types/node": "
|
|
75
|
-
"@types/supertest": "6.0.
|
|
76
|
-
"@typescript-eslint/eslint-plugin": "
|
|
77
|
-
"@typescript-eslint/parser": "
|
|
78
|
-
"eslint": "
|
|
79
|
-
"eslint-config-expo": "
|
|
80
|
-
"eslint-config-prettier": "
|
|
81
|
-
"eslint-import-resolver-typescript": "
|
|
82
|
-
"eslint-plugin-import": "2.
|
|
83
|
-
"eslint-plugin-prettier": "5.
|
|
84
|
-
"jest": "
|
|
85
|
-
"prettier": "3.
|
|
65
|
+
"@babel/core": "7.28.4",
|
|
66
|
+
"@nestjs/cli": "11.0.10",
|
|
67
|
+
"@nestjs/schematics": "11.0.7",
|
|
68
|
+
"@nestjs/testing": "11.1.6",
|
|
69
|
+
"@sentry/types": "10.12.0",
|
|
70
|
+
"@tanstack/eslint-plugin-query": "5.89.0",
|
|
71
|
+
"@types/compression": "1.8.1",
|
|
72
|
+
"@types/express": "5.0.3",
|
|
73
|
+
"@types/jest": "30.0.0",
|
|
74
|
+
"@types/node": "24.5.2",
|
|
75
|
+
"@types/supertest": "6.0.3",
|
|
76
|
+
"@typescript-eslint/eslint-plugin": "8.44.0",
|
|
77
|
+
"@typescript-eslint/parser": "8.44.0",
|
|
78
|
+
"eslint": "9.36.0",
|
|
79
|
+
"eslint-config-expo": "10.0.0",
|
|
80
|
+
"eslint-config-prettier": "10.1.8",
|
|
81
|
+
"eslint-import-resolver-typescript": "4.4.4",
|
|
82
|
+
"eslint-plugin-import": "2.32.0",
|
|
83
|
+
"eslint-plugin-prettier": "5.5.4",
|
|
84
|
+
"jest": "30.1.3",
|
|
85
|
+
"prettier": "3.6.2",
|
|
86
86
|
"source-map-support": "0.5.21",
|
|
87
|
-
"supertest": "7.
|
|
88
|
-
"ts-jest": "29.
|
|
89
|
-
"ts-loader": "9.5.
|
|
87
|
+
"supertest": "7.1.4",
|
|
88
|
+
"ts-jest": "29.4.4",
|
|
89
|
+
"ts-loader": "9.5.4",
|
|
90
90
|
"ts-node": "10.9.2",
|
|
91
|
-
"tsc-alias": "1.8.
|
|
91
|
+
"tsc-alias": "1.8.16",
|
|
92
92
|
"tsconfig-paths": "4.2.0",
|
|
93
|
-
"typescript": "5.
|
|
93
|
+
"typescript": "5.9.2"
|
|
94
94
|
},
|
|
95
95
|
"files": [
|
|
96
96
|
"dist",
|
package/src/guard/auth.guard.ts
CHANGED
|
@@ -16,7 +16,6 @@ export class AuthGuard implements CanActivate {
|
|
|
16
16
|
) {}
|
|
17
17
|
|
|
18
18
|
async canActivate(context: ExecutionContext): Promise<boolean> {
|
|
19
|
-
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
|
|
20
19
|
const request = context.switchToHttp().getRequest();
|
|
21
20
|
const token = this.extractTokenFromHeader(request);
|
|
22
21
|
|
|
@@ -25,12 +24,10 @@ export class AuthGuard implements CanActivate {
|
|
|
25
24
|
}
|
|
26
25
|
|
|
27
26
|
try {
|
|
28
|
-
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
|
|
29
27
|
const payload = await this.jwtService.verifyAsync(token, {
|
|
30
28
|
secret: this.configService.get<string>('JWT_SECRET'),
|
|
31
29
|
});
|
|
32
30
|
|
|
33
|
-
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
|
|
34
31
|
request['user'] = payload;
|
|
35
32
|
} catch {
|
|
36
33
|
throw new UnauthorizedException();
|
|
@@ -6,7 +6,8 @@ import {
|
|
|
6
6
|
} from '@nestjs/terminus';
|
|
7
7
|
import { ConfigService } from '@nestjs/config';
|
|
8
8
|
|
|
9
|
-
import { HealthResponseDto } from './dtos
|
|
9
|
+
import { HealthResponseDto } from './dtos';
|
|
10
|
+
import { getVersion } from '../utils';
|
|
10
11
|
|
|
11
12
|
// this decorator indicates to nest that this class can be provided to a module
|
|
12
13
|
// we want to handle logic in services to keep our resolvers and controllers clean
|
|
@@ -31,9 +32,11 @@ export class HealthService {
|
|
|
31
32
|
]);
|
|
32
33
|
|
|
33
34
|
const environment: string = this.configService.get<string>('NODE_ENV');
|
|
35
|
+
const version: string = getVersion();
|
|
34
36
|
|
|
35
37
|
return {
|
|
36
38
|
environment,
|
|
39
|
+
version,
|
|
37
40
|
...statuses,
|
|
38
41
|
};
|
|
39
42
|
}
|
|
@@ -12,7 +12,6 @@ export class LoggerMiddleware implements NestMiddleware {
|
|
|
12
12
|
req?.body?.operationName
|
|
13
13
|
) {
|
|
14
14
|
this.logger.log(
|
|
15
|
-
// eslint-disable-next-line @typescript-eslint/restrict-template-expressions
|
|
16
15
|
`${req.method} ${req.originalUrl} ${req.body.operationName}`,
|
|
17
16
|
);
|
|
18
17
|
} else {
|
|
@@ -26,9 +26,7 @@ export class PrismaService extends PrismaClient implements OnModuleInit {
|
|
|
26
26
|
await this.$connect();
|
|
27
27
|
}
|
|
28
28
|
|
|
29
|
-
// eslint-disable-next-line @typescript-eslint/require-await
|
|
30
29
|
async enableShutdownHooks(app: INestApplication) {
|
|
31
|
-
// eslint-disable-next-line @typescript-eslint/no-misused-promises
|
|
32
30
|
this.$on('beforeExit' as never, async () => {
|
|
33
31
|
await app.close();
|
|
34
32
|
});
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import { Injectable, Logger } from '@nestjs/common';
|
|
2
|
-
import algoliasearch from 'algoliasearch';
|
|
3
|
-
import { SearchClient
|
|
2
|
+
import { algoliasearch } from 'algoliasearch';
|
|
3
|
+
import type { SearchClient } from 'algoliasearch';
|
|
4
4
|
import { ConfigService } from '@nestjs/config';
|
|
5
5
|
|
|
6
6
|
@Injectable()
|
|
7
7
|
export class SearchService {
|
|
8
8
|
private readonly logger: Logger = new Logger(SearchService.name);
|
|
9
9
|
private readonly searchClient: SearchClient | undefined;
|
|
10
|
-
private readonly
|
|
10
|
+
private readonly indexName: string;
|
|
11
11
|
|
|
12
12
|
constructor(private configService: ConfigService) {
|
|
13
13
|
this.searchClient = algoliasearch(
|
|
@@ -19,41 +19,45 @@ export class SearchService {
|
|
|
19
19
|
throw new Error('Search client is undefined');
|
|
20
20
|
}
|
|
21
21
|
|
|
22
|
-
this.
|
|
23
|
-
this.configService.get('ALGOLIA_INDEX_NAME'),
|
|
24
|
-
);
|
|
22
|
+
this.indexName = this.configService.get('ALGOLIA_INDEX_NAME');
|
|
25
23
|
}
|
|
26
24
|
|
|
27
25
|
async shouldIndex(): Promise<boolean> {
|
|
28
26
|
this.logger.debug('shouldIndex');
|
|
29
27
|
|
|
30
|
-
if (this.
|
|
31
|
-
throw new Error('Search
|
|
28
|
+
if (this.searchClient === undefined) {
|
|
29
|
+
throw new Error('Search client is undefined');
|
|
32
30
|
}
|
|
33
31
|
|
|
34
|
-
const
|
|
35
|
-
|
|
32
|
+
const result = await this.searchClient.searchSingleIndex({
|
|
33
|
+
indexName: this.indexName,
|
|
34
|
+
searchParams: {
|
|
35
|
+
query: '',
|
|
36
|
+
hitsPerPage: 1,
|
|
37
|
+
},
|
|
36
38
|
});
|
|
37
39
|
|
|
38
|
-
return nbHits === 0;
|
|
40
|
+
return result.nbHits === 0;
|
|
39
41
|
}
|
|
40
42
|
|
|
41
43
|
async create(inventoryItem: any): Promise<undefined> {
|
|
42
44
|
this.logger.debug('create');
|
|
43
45
|
|
|
44
|
-
if (this.
|
|
45
|
-
throw new Error('Search
|
|
46
|
+
if (this.searchClient === undefined) {
|
|
47
|
+
throw new Error('Search client is undefined');
|
|
46
48
|
}
|
|
47
49
|
|
|
48
|
-
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
|
|
49
50
|
const mappedExercise = {
|
|
50
51
|
...inventoryItem,
|
|
51
|
-
|
|
52
|
+
|
|
52
53
|
objectID: inventoryItem.id,
|
|
53
54
|
quantity: 0,
|
|
54
55
|
};
|
|
55
56
|
|
|
56
|
-
await this.
|
|
57
|
+
await this.searchClient.saveObject({
|
|
58
|
+
indexName: this.indexName,
|
|
59
|
+
body: mappedExercise,
|
|
60
|
+
});
|
|
57
61
|
|
|
58
62
|
return;
|
|
59
63
|
}
|
|
@@ -62,21 +66,23 @@ export class SearchService {
|
|
|
62
66
|
try {
|
|
63
67
|
this.logger.debug('createMany');
|
|
64
68
|
|
|
65
|
-
if (this.
|
|
66
|
-
throw new Error('Search
|
|
69
|
+
if (this.searchClient === undefined) {
|
|
70
|
+
throw new Error('Search client is undefined');
|
|
67
71
|
}
|
|
68
72
|
|
|
69
73
|
const mappedExercises = inventoryItems.map((inventoryItem: any) => {
|
|
70
|
-
// eslint-disable-next-line @typescript-eslint/no-unsafe-return
|
|
71
74
|
return {
|
|
72
75
|
...inventoryItem,
|
|
73
|
-
|
|
76
|
+
|
|
74
77
|
objectID: inventoryItem.id,
|
|
75
78
|
quantity: 0,
|
|
76
79
|
};
|
|
77
80
|
});
|
|
78
81
|
|
|
79
|
-
await this.
|
|
82
|
+
await this.searchClient.saveObjects({
|
|
83
|
+
indexName: this.indexName,
|
|
84
|
+
objects: mappedExercises,
|
|
85
|
+
});
|
|
80
86
|
|
|
81
87
|
return;
|
|
82
88
|
} catch (error) {
|
|
@@ -300,9 +300,7 @@ export class UserController {
|
|
|
300
300
|
@Body() dto: DeleteUserRequestDto,
|
|
301
301
|
): Promise<void> {
|
|
302
302
|
try {
|
|
303
|
-
const parsedDto
|
|
304
|
-
deleteUserSchema as ZodObject<any>
|
|
305
|
-
).parse(dto) as DeleteUserRequestDto;
|
|
303
|
+
const parsedDto = (deleteUserSchema as ZodObject<any>).parse(dto);
|
|
306
304
|
|
|
307
305
|
const user: User = await this.userService.findOneByUserId(
|
|
308
306
|
req.user.userId,
|
package/src/utils/index.ts
CHANGED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import fs from 'fs';
|
|
2
|
+
|
|
3
|
+
export const getVersion = (): string => {
|
|
4
|
+
const currentDir = process.cwd();
|
|
5
|
+
const filePath = `${currentDir}/version.txt`;
|
|
6
|
+
return fs.readFileSync(filePath, 'utf8').toString();
|
|
7
|
+
};
|
|
8
|
+
|
|
9
|
+
export const createVersionFile = () => {
|
|
10
|
+
const packageJsonContent = fs.readFileSync('package.json', 'utf8');
|
|
11
|
+
const packageJson = JSON.parse(packageJsonContent);
|
|
12
|
+
|
|
13
|
+
const version = packageJson.version;
|
|
14
|
+
|
|
15
|
+
fs.writeFileSync('version.txt', version);
|
|
16
|
+
};
|