@internetderdinge/api 1.229.0 → 1.229.2

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 (171) hide show
  1. package/dist/src/accounts/accounts.controller.js +89 -0
  2. package/dist/src/accounts/accounts.route.js +101 -0
  3. package/dist/src/accounts/accounts.schemas.js +12 -0
  4. package/dist/src/accounts/accounts.service.js +65 -0
  5. package/dist/src/accounts/accounts.validation.js +99 -0
  6. package/dist/src/accounts/auth0.service.js +188 -0
  7. package/dist/src/config/config.js +48 -0
  8. package/dist/src/config/logger.js +27 -0
  9. package/dist/src/config/morgan.js +16 -0
  10. package/dist/src/config/passport.cjs +28 -0
  11. package/dist/src/config/roles.js +11 -0
  12. package/dist/src/config/tokens.cjs +10 -0
  13. package/dist/src/devices/devices.controller.js +172 -0
  14. package/dist/src/devices/devices.model.js +94 -0
  15. package/dist/src/devices/devices.route.js +153 -0
  16. package/dist/src/devices/devices.schemas.js +84 -0
  17. package/dist/src/devices/devices.service.js +198 -0
  18. package/dist/src/devices/devices.types.js +1 -0
  19. package/dist/src/devices/devices.validation.js +257 -0
  20. package/dist/src/devicesNotifications/devicesNotifications.controller.js +69 -0
  21. package/dist/src/devicesNotifications/devicesNotifications.model.js +39 -0
  22. package/dist/src/devicesNotifications/devicesNotifications.route.js +124 -0
  23. package/dist/src/devicesNotifications/devicesNotifications.schemas.js +10 -0
  24. package/dist/src/devicesNotifications/devicesNotifications.service.js +181 -0
  25. package/dist/src/devicesNotifications/devicesNotifications.validation.js +46 -0
  26. package/dist/src/email/email.service.js +580 -0
  27. package/dist/src/files/upload.service.js +124 -0
  28. package/dist/src/i18n/i18n.js +38 -0
  29. package/dist/src/i18n/saveMissingLocalJsonBackend.js +53 -0
  30. package/dist/src/i18n/types.js +1 -0
  31. package/dist/src/index.js +48 -0
  32. package/dist/src/iotdevice/iotdevice.controller.js +96 -0
  33. package/dist/src/iotdevice/iotdevice.model.js +17 -0
  34. package/dist/src/iotdevice/iotdevice.route.js +143 -0
  35. package/dist/src/iotdevice/iotdevice.schemas.js +60 -0
  36. package/dist/src/iotdevice/iotdevice.service.js +579 -0
  37. package/dist/src/iotdevice/iotdevice.types.js +1 -0
  38. package/dist/src/iotdevice/iotdevice.validation.js +54 -0
  39. package/dist/src/middlewares/auth.js +75 -0
  40. package/dist/src/middlewares/checkJwt.cjs +17 -0
  41. package/dist/src/middlewares/error.js +36 -0
  42. package/dist/src/middlewares/mongooseValidations/ensureSameOrganization.js +13 -0
  43. package/dist/src/middlewares/rateLimiter.js +7 -0
  44. package/dist/src/middlewares/validate.js +18 -0
  45. package/dist/src/middlewares/validateAction.js +35 -0
  46. package/dist/src/middlewares/validateAdmin.js +18 -0
  47. package/dist/src/middlewares/validateAi.js +16 -0
  48. package/dist/src/middlewares/validateCurrentAuthUser.js +17 -0
  49. package/dist/src/middlewares/validateCurrentUser.js +20 -0
  50. package/dist/src/middlewares/validateDevice.js +98 -0
  51. package/dist/src/middlewares/validateDeviceUserOrganization.js +26 -0
  52. package/dist/src/middlewares/validateOrganization.js +63 -0
  53. package/dist/src/middlewares/validateQuerySearchUserAndOrganization.js +44 -0
  54. package/dist/src/middlewares/validateTokens.js +23 -0
  55. package/dist/src/middlewares/validateUser.js +38 -0
  56. package/dist/src/middlewares/validateZod.js +33 -0
  57. package/dist/src/models/plugins/index.js +4 -0
  58. package/dist/src/models/plugins/paginate.plugin.js +117 -0
  59. package/dist/src/models/plugins/paginateNew.plugin.js +185 -0
  60. package/dist/src/models/plugins/simplePopulate.js +16 -0
  61. package/dist/src/models/plugins/toJSON.plugin.js +35 -0
  62. package/dist/src/organizations/organizations.controller.js +64 -0
  63. package/dist/src/organizations/organizations.model.js +41 -0
  64. package/dist/src/organizations/organizations.route.js +98 -0
  65. package/dist/src/organizations/organizations.schemas.js +7 -0
  66. package/dist/src/organizations/organizations.service.js +59 -0
  67. package/dist/src/organizations/organizations.validation.js +62 -0
  68. package/dist/src/pdf/pdf.controller.js +24 -0
  69. package/dist/src/pdf/pdf.route.js +22 -0
  70. package/dist/src/pdf/pdf.schemas.js +6 -0
  71. package/dist/src/pdf/pdf.service.js +65 -0
  72. package/dist/src/pdf/pdf.validation.js +27 -0
  73. package/dist/src/tokens/tokens.controller.js +60 -0
  74. package/dist/src/tokens/tokens.model.js +17 -0
  75. package/dist/src/tokens/tokens.route.js +52 -0
  76. package/dist/src/tokens/tokens.schemas.js +14 -0
  77. package/dist/src/tokens/tokens.service.js +30 -0
  78. package/dist/src/tokens/tokens.validation.js +9 -0
  79. package/dist/src/types/routeSpec.js +1 -0
  80. package/dist/src/users/users.controller.js +147 -0
  81. package/dist/src/users/users.model.js +50 -0
  82. package/dist/src/users/users.route.js +137 -0
  83. package/dist/src/users/users.schemas.js +69 -0
  84. package/dist/src/users/users.service.js +295 -0
  85. package/dist/src/users/users.types.js +1 -0
  86. package/dist/src/users/users.validation.js +144 -0
  87. package/dist/src/utils/ApiError.js +16 -0
  88. package/dist/src/utils/buildRouterAndDocs.js +72 -0
  89. package/dist/src/utils/catchAsync.js +4 -0
  90. package/dist/src/utils/comparePapers.service.js +32 -0
  91. package/dist/src/utils/deviceUtils.js +63 -0
  92. package/dist/src/utils/filterOptions.js +24 -0
  93. package/dist/src/utils/medicationName.js +10 -0
  94. package/dist/src/utils/pick.js +16 -0
  95. package/dist/src/utils/registerOpenApi.js +67 -0
  96. package/dist/src/utils/urlUtils.js +15 -0
  97. package/dist/src/utils/userName.js +22 -0
  98. package/dist/src/utils/zValidations.js +143 -0
  99. package/dist/src/validations/auth.validation.cjs +53 -0
  100. package/dist/src/validations/custom.validation.js +19 -0
  101. package/dist/src/validations/index.cjs +3 -0
  102. package/dist/tsconfig.tsbuildinfo +1 -0
  103. package/package.json +97 -80
  104. package/scripts/release-and-sync-paperless.mjs +137 -0
  105. package/src/accounts/accounts.controller.ts +1 -0
  106. package/src/accounts/accounts.service.ts +1 -0
  107. package/src/accounts/accounts.validation.ts +8 -5
  108. package/src/accounts/auth0.service.ts +55 -28
  109. package/src/config/config.ts +6 -0
  110. package/src/config/logger.ts +15 -9
  111. package/src/devices/devices.controller.ts +7 -1
  112. package/src/devices/devices.model.ts +4 -1
  113. package/src/devices/devices.schemas.ts +11 -9
  114. package/src/devices/devices.service.ts +1 -0
  115. package/src/devices/devices.types.ts +1 -0
  116. package/src/devices/devices.validation.ts +93 -32
  117. package/src/devicesNotifications/devicesNotifications.controller.ts +57 -28
  118. package/src/devicesNotifications/devicesNotifications.model.ts +20 -12
  119. package/src/devicesNotifications/devicesNotifications.service.ts +35 -17
  120. package/src/files/upload.service.ts +52 -28
  121. package/src/i18n/i18n.ts +1 -1
  122. package/src/i18n/types.ts +1 -0
  123. package/src/index.ts +47 -0
  124. package/src/iotdevice/iotdevice.controller.ts +1 -0
  125. package/src/iotdevice/iotdevice.model.ts +6 -3
  126. package/src/iotdevice/iotdevice.route.ts +85 -76
  127. package/src/iotdevice/iotdevice.service.ts +4 -3
  128. package/src/iotdevice/iotdevice.types.ts +6 -0
  129. package/src/middlewares/auth.ts +2 -8
  130. package/src/middlewares/error.ts +26 -12
  131. package/src/middlewares/mongooseValidations/ensureSameOrganization.ts +4 -3
  132. package/src/middlewares/validateAi.ts +17 -9
  133. package/src/middlewares/validateDevice.ts +1 -0
  134. package/src/middlewares/validateDeviceUserOrganization.ts +1 -0
  135. package/src/middlewares/validateOrganization.ts +1 -1
  136. package/src/middlewares/validateQuerySearchUserAndOrganization.ts +1 -0
  137. package/src/middlewares/validateTokens.ts +2 -1
  138. package/src/middlewares/validateUser.ts +1 -0
  139. package/src/middlewares/validateZod.ts +5 -5
  140. package/src/models/plugins/index.ts +5 -4
  141. package/src/models/plugins/paginate.plugin.ts +26 -16
  142. package/src/models/plugins/paginateNew.plugin.ts +33 -21
  143. package/src/models/plugins/simplePopulate.ts +8 -3
  144. package/src/models/plugins/toJSON.plugin.ts +12 -5
  145. package/src/organizations/organizations.controller.ts +1 -2
  146. package/src/organizations/organizations.model.ts +4 -4
  147. package/src/organizations/organizations.route.ts +1 -1
  148. package/src/organizations/organizations.service.ts +15 -6
  149. package/src/organizations/organizations.validation.ts +1 -1
  150. package/src/pdf/pdf.controller.ts +18 -1
  151. package/src/pdf/pdf.service.ts +25 -16
  152. package/src/tokens/tokens.controller.ts +6 -8
  153. package/src/tokens/tokens.model.ts +3 -1
  154. package/src/tokens/tokens.service.ts +3 -2
  155. package/src/types/express.d.ts +17 -0
  156. package/src/types/mongoose.d.ts +22 -0
  157. package/src/users/users.controller.ts +8 -9
  158. package/src/users/users.model.ts +6 -5
  159. package/src/users/users.route.ts +0 -1
  160. package/src/users/users.service.ts +16 -0
  161. package/src/users/users.types.ts +1 -0
  162. package/src/users/users.validation.ts +6 -2
  163. package/src/utils/ApiError.ts +8 -1
  164. package/src/utils/buildRouterAndDocs.ts +57 -22
  165. package/src/utils/catchAsync.ts +27 -3
  166. package/src/utils/medicationName.ts +5 -4
  167. package/src/utils/pick.ts +5 -1
  168. package/src/utils/registerOpenApi.ts +75 -24
  169. package/src/utils/userName.ts +1 -0
  170. package/src/utils/zValidations.ts +98 -27
  171. package/tsconfig.json +13 -4
@@ -1,45 +1,71 @@
1
- import { z } from 'zod';
2
- import { objectId } from '../validations/custom.validation';
3
- import mongoose from 'mongoose';
1
+ // @ts-nocheck
2
+ import { z } from "zod";
3
+ import { objectId } from "../validations/custom.validation";
4
+ import mongoose from "mongoose";
4
5
 
5
6
  export const zPagination = {
6
7
  query: z.object({
7
- name: z.string().optional(),
8
- role: z.string().openapi({ example: 'admin', description: 'Role to filter by' }).optional(),
9
- sortBy: z.string().openapi({ example: 'createdAt', description: 'Field to sort by' }).optional(),
8
+ name: z
9
+ .string()
10
+ .openapi({
11
+ example: "John",
12
+ description: "Name to filter by",
13
+ param: { name: "name", in: "query" },
14
+ })
15
+ .optional(),
16
+ role: z
17
+ .string()
18
+ .openapi({
19
+ example: "admin",
20
+ description: "Role to filter by",
21
+ param: { name: "role", in: "query" },
22
+ })
23
+ .optional(),
24
+ sortBy: z
25
+ .string()
26
+ .openapi({
27
+ example: "createdAt",
28
+ description: "Field to sort by",
29
+ param: { name: "sortBy", in: "query" },
30
+ })
31
+ .optional(),
10
32
  search: z
11
33
  .string()
12
34
  .openapi({
13
- example: 'search term',
14
- description: 'Search term to filter results',
35
+ example: process.env.SCHEMA_EXAMPLE_SEARCH || "",
36
+ description: "Search term to filter results",
37
+ param: { name: "search", in: "query" },
15
38
  })
16
39
  .optional(),
17
40
  limit: z.coerce
18
41
  .number()
19
42
  .openapi({
20
43
  example: 10,
21
- description: 'Number of items per page',
44
+ description: "Number of items per page",
45
+ param: { name: "limit", in: "query" },
22
46
  })
23
47
  .int()
24
48
  .min(1)
25
49
  .max(100000)
26
50
  .optional(),
27
- offset: z
51
+ offset: z.coerce
28
52
  .number() // was z.int()
29
53
  .openapi({
30
54
  example: 0,
31
- description: 'Offset for pagination, used to skip a number of items',
55
+ description: "Offset for pagination, used to skip a number of items",
56
+ param: { name: "offset", in: "query" },
32
57
  })
33
58
  .int()
34
59
  .min(0)
35
60
  .max(100000)
36
61
  .optional(),
37
- page: z
62
+ page: z.coerce
38
63
  .number()
39
64
  .int()
40
65
  .openapi({
41
66
  example: 1,
42
- description: 'Page number for pagination',
67
+ description: "Page number for pagination",
68
+ param: { name: "page", in: "query" },
43
69
  })
44
70
  .min(1)
45
71
  .max(100000)
@@ -50,40 +76,85 @@ export const zPagination = {
50
76
  export const zPaginationResponse = () =>
51
77
  z.object({
52
78
  results: z.array(z.unknown()), // Replace with your specific item schema
53
- totalResults: z.number().openapi({ example: 100, description: 'Total number of items' }),
54
- totalPages: z.number().openapi({ example: 10, description: 'Total number of pages' }),
55
- page: z.number().openapi({ example: 1, description: 'Current page number' }),
56
- limit: z.number().openapi({ example: 10, description: 'Number of items per page' }),
79
+ totalResults: z
80
+ .number()
81
+ .openapi({ example: 100, description: "Total number of items" }),
82
+ totalPages: z
83
+ .number()
84
+ .openapi({ example: 10, description: "Total number of pages" }),
85
+ page: z
86
+ .number()
87
+ .openapi({ example: 1, description: "Current page number" }),
88
+ limit: z
89
+ .number()
90
+ .openapi({ example: 10, description: "Number of items per page" }),
57
91
  });
58
92
 
93
+ const defaultObjectIdExample = "682fd0d7d4a6325d9d45b86d";
94
+ const exampleDefaults = {
95
+ organization: "682fd0d7d4a6325d9d45b86e",
96
+ user: defaultObjectIdExample,
97
+ device: "682fd0d7d4a6325d9d45b86f",
98
+ paper: "682fd0d7d4a6325d9d45b870",
99
+ };
100
+ const objectIdExampleOverrides: Record<string, string | undefined> = {
101
+ organizationId:
102
+ process.env.SCHEMA_EXAMPLE_ORGANIZATION_ID || exampleDefaults.organization,
103
+ organization:
104
+ process.env.SCHEMA_EXAMPLE_ORGANIZATION_ID || exampleDefaults.organization,
105
+ userId: process.env.SCHEMA_EXAMPLE_USER_ID || exampleDefaults.user,
106
+ deviceId: process.env.SCHEMA_EXAMPLE_DEVICE_ID || exampleDefaults.device,
107
+ device: process.env.SCHEMA_EXAMPLE_DEVICE_ID || exampleDefaults.device,
108
+ paperId: process.env.SCHEMA_EXAMPLE_PAPER_ID || exampleDefaults.paper,
109
+ paper: process.env.SCHEMA_EXAMPLE_PAPER_ID || exampleDefaults.paper,
110
+ patient: process.env.SCHEMA_EXAMPLE_USER_ID || exampleDefaults.user,
111
+ accountId: process.env.SCHEMA_EXAMPLE_ACCOUNT_ID,
112
+ tokenId: process.env.SCHEMA_EXAMPLE_TOKEN_ID,
113
+ };
114
+
115
+ export const zObjectIdFor = (paramName?: string) => {
116
+ const example = paramName ? objectIdExampleOverrides[paramName] : undefined;
117
+ const exampleValue = example || defaultObjectIdExample;
118
+ return z
119
+ .string()
120
+ .refine((val) => {
121
+ if (process.env.SCHEMA_STRICT_EXAMPLES === "true" && example) {
122
+ return val === example;
123
+ }
124
+ return mongoose.Types.ObjectId.isValid(val);
125
+ })
126
+ .openapi({
127
+ example: exampleValue,
128
+ description: "A valid MongoDB ObjectId",
129
+ });
130
+ };
131
+
59
132
  export const zGet = (id: string) => ({
60
133
  params: z.object({
61
- [id]: zObjectId /* .openapi({ example: '682fd0d7d4a6325d9d45b86d' }) */,
134
+ [id]: zObjectIdFor(id),
62
135
  }),
63
136
  });
64
137
 
65
- export function zPatchBody<T extends ZodRawShape>(shape: T, message = 'At least one field must be provided for update') {
138
+ export function zPatchBody<T extends ZodRawShape>(
139
+ shape: T,
140
+ message = "At least one field must be provided for update",
141
+ ) {
66
142
  // assume user passed in already-optional vals
67
143
  return z.object(shape); // .refine((o) => Object.keys(o).length > 0, { message });
68
144
  }
69
145
 
70
146
  export const zUpdate = (id: string) => ({
71
147
  params: z.object({
72
- [id]: zObjectId,
148
+ [id]: zObjectIdFor(id),
73
149
  }),
74
150
  });
75
151
 
76
152
  export const zDelete = (id: string) => ({
77
153
  params: z.object({
78
- [id]: zObjectId,
154
+ [id]: zObjectIdFor(id),
79
155
  }),
80
156
  });
81
157
 
82
- export const zObjectId = z
83
- .string()
84
- .refine((val) => {
85
- return mongoose.Types.ObjectId.isValid(val);
86
- })
87
- .openapi({ example: '682fd0d7d4a6325d9d45b86d', description: 'A valid MongoDB ObjectId' });
158
+ export const zObjectId = zObjectIdFor();
88
159
 
89
160
  export const zDate = () => z.string().pipe(z.coerce.date());
package/tsconfig.json CHANGED
@@ -1,13 +1,18 @@
1
1
  {
2
2
  "compilerOptions": {
3
3
  "target": "ES2020",
4
- "module": "NodeNext",
4
+ "module": "ES2020",
5
5
  "baseUrl": ".",
6
6
  "rootDir": ".",
7
7
  "outDir": "./dist",
8
8
  "esModuleInterop": true,
9
- "strict": true,
10
- "moduleResolution": "NodeNext",
9
+ "strict": false,
10
+ "noImplicitAny": false,
11
+ "noImplicitThis": false,
12
+ "useUnknownInCatchVariables": false,
13
+ "noUncheckedIndexedAccess": false,
14
+ "exactOptionalPropertyTypes": false,
15
+ "moduleResolution": "Bundler",
11
16
  "resolveJsonModule": true,
12
17
  "forceConsistentCasingInFileNames": true,
13
18
  "skipLibCheck": true,
@@ -17,6 +22,10 @@
17
22
  "esm": true,
18
23
  "experimentalSpecifierResolution": "node"
19
24
  },
20
- "include": ["src/**/*", "common.legac, "../memo-api/src/middlewares/validateMessage.ts"y/**/*"],
25
+ "include": [
26
+ "src/**/*",
27
+ "common.legacy/**/*",
28
+ "../memo-api/src/middlewares/validateMessage.ts"
29
+ ],
21
30
  "exclude": ["node_modules", "dist"]
22
31
  }