serene-core-server 0.1.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.
Files changed (315) hide show
  1. package/dist/apollo/resolvers/mutations/mailing-lists.d.ts +11 -0
  2. package/dist/apollo/resolvers/mutations/mailing-lists.js +30 -0
  3. package/dist/apollo/resolvers/mutations/user-preferences.d.ts +13 -0
  4. package/dist/apollo/resolvers/mutations/user-preferences.js +31 -0
  5. package/dist/apollo/resolvers/mutations/users.d.ts +28 -0
  6. package/dist/apollo/resolvers/mutations/users.js +44 -0
  7. package/dist/apollo/resolvers/queries/access.d.ts +11 -0
  8. package/dist/apollo/resolvers/queries/access.js +25 -0
  9. package/dist/apollo/resolvers/queries/profile.d.ts +11 -0
  10. package/dist/apollo/resolvers/queries/profile.js +25 -0
  11. package/dist/apollo/resolvers/queries/quotas.d.ts +21 -0
  12. package/dist/apollo/resolvers/queries/quotas.js +25 -0
  13. package/dist/apollo/resolvers/queries/tech.d.ts +5 -0
  14. package/dist/apollo/resolvers/queries/tech.js +35 -0
  15. package/dist/apollo/resolvers/queries/user-preferences.d.ts +5 -0
  16. package/dist/apollo/resolvers/queries/user-preferences.js +33 -0
  17. package/dist/apollo/resolvers/queries/users.d.ts +15 -0
  18. package/dist/apollo/resolvers/queries/users.js +28 -0
  19. package/dist/apollo/resolvers/resolvers.d.ts +20 -0
  20. package/dist/apollo/resolvers/resolvers.js +38 -0
  21. package/dist/apollo/typedefs/typedefs.d.ts +1 -0
  22. package/dist/apollo/typedefs/typedefs.js +142 -0
  23. package/dist/index.d.ts +52 -0
  24. package/dist/index.js +68 -0
  25. package/dist/models/chat/chat-message-created-model.d.ts +17 -0
  26. package/dist/models/chat/chat-message-created-model.js +113 -0
  27. package/dist/models/chat/chat-message-model.d.ts +44 -0
  28. package/dist/models/chat/chat-message-model.js +523 -0
  29. package/dist/models/chat/chat-participant-model.d.ts +39 -0
  30. package/dist/models/chat/chat-participant-model.js +211 -0
  31. package/dist/models/chat/chat-session-model.d.ts +92 -0
  32. package/dist/models/chat/chat-session-model.js +301 -0
  33. package/dist/models/chat/chat-settings-model.d.ts +87 -0
  34. package/dist/models/chat/chat-settings-model.js +261 -0
  35. package/dist/models/feature-flags/feature-flag-model.d.ts +40 -0
  36. package/dist/models/feature-flags/feature-flag-model.js +164 -0
  37. package/dist/models/instances/instance-model.d.ts +93 -0
  38. package/dist/models/instances/instance-model.js +432 -0
  39. package/dist/models/instances/instance-setting-model.d.ts +39 -0
  40. package/dist/models/instances/instance-setting-model.js +193 -0
  41. package/dist/models/mailing-lists/mailing-list-model.d.ts +34 -0
  42. package/dist/models/mailing-lists/mailing-list-model.js +154 -0
  43. package/dist/models/mailing-lists/mailing-list-subscriber-model.d.ts +36 -0
  44. package/dist/models/mailing-lists/mailing-list-subscriber-model.js +152 -0
  45. package/dist/models/quotas/resource-quota-total-model.d.ts +46 -0
  46. package/dist/models/quotas/resource-quota-total-model.js +200 -0
  47. package/dist/models/quotas/resource-quota-usage-model.d.ts +51 -0
  48. package/dist/models/quotas/resource-quota-usage-model.js +181 -0
  49. package/dist/models/tech/rate-limited-api-event-model.d.ts +25 -0
  50. package/dist/models/tech/rate-limited-api-event-model.js +161 -0
  51. package/dist/models/tech/rate-limited-api-model.d.ts +21 -0
  52. package/dist/models/tech/rate-limited-api-model.js +141 -0
  53. package/dist/models/tech/tech-model.d.ts +44 -0
  54. package/dist/models/tech/tech-model.js +268 -0
  55. package/dist/models/tech/tech-provider-api-key-model.d.ts +43 -0
  56. package/dist/models/tech/tech-provider-api-key-model.js +224 -0
  57. package/dist/models/tech/tech-provider-model.d.ts +28 -0
  58. package/dist/models/tech/tech-provider-model.js +197 -0
  59. package/dist/models/users/external-user-integration-model.d.ts +36 -0
  60. package/dist/models/users/external-user-integration-model.js +196 -0
  61. package/dist/models/users/user-error-model.d.ts +54 -0
  62. package/dist/models/users/user-error-model.js +173 -0
  63. package/dist/models/users/user-error-summary-model.d.ts +45 -0
  64. package/dist/models/users/user-error-summary-model.js +172 -0
  65. package/dist/models/users/user-group-member-model.d.ts +41 -0
  66. package/dist/models/users/user-group-member-model.js +193 -0
  67. package/dist/models/users/user-group-model.d.ts +27 -0
  68. package/dist/models/users/user-group-model.js +146 -0
  69. package/dist/models/users/user-model.d.ts +46 -0
  70. package/dist/models/users/user-model.js +153 -0
  71. package/dist/models/users/user-preference-model.d.ts +60 -0
  72. package/dist/models/users/user-preference-model.js +228 -0
  73. package/dist/models/users/user-profile-model.d.ts +58 -0
  74. package/dist/models/users/user-profile-model.js +173 -0
  75. package/dist/prisma.config.d.ts +3 -0
  76. package/dist/prisma.config.js +13 -0
  77. package/dist/services/access/access-service.d.ts +12 -0
  78. package/dist/services/access/access-service.js +44 -0
  79. package/dist/services/access/encrypt-service.d.ts +13 -0
  80. package/dist/services/access/encrypt-service.js +84 -0
  81. package/dist/services/api-usage/api-usage-base-service.d.ts +15 -0
  82. package/dist/services/api-usage/api-usage-base-service.js +75 -0
  83. package/dist/services/console/service.d.ts +7 -0
  84. package/dist/services/console/service.js +70 -0
  85. package/dist/services/db/pg/pg-estimate-size-service.d.ts +16 -0
  86. package/dist/services/db/pg/pg-estimate-size-service.js +90 -0
  87. package/dist/services/files/types.d.ts +6 -0
  88. package/dist/services/files/types.js +2 -0
  89. package/dist/services/files/walk-dir-service.d.ts +8 -0
  90. package/dist/services/files/walk-dir-service.js +94 -0
  91. package/dist/services/locale/countries.d.ts +6 -0
  92. package/dist/services/locale/countries.js +484 -0
  93. package/dist/services/mailing-lists/mailing-list-subscriber-service.d.ts +14 -0
  94. package/dist/services/mailing-lists/mailing-list-subscriber-service.js +45 -0
  95. package/dist/services/process/sleep.d.ts +2 -0
  96. package/dist/services/process/sleep.js +10 -0
  97. package/dist/services/quotas/mutate-service.d.ts +5 -0
  98. package/dist/services/quotas/mutate-service.js +54 -0
  99. package/dist/services/quotas/query-service.d.ts +27 -0
  100. package/dist/services/quotas/query-service.js +137 -0
  101. package/dist/services/quotas/utils-service.d.ts +4 -0
  102. package/dist/services/quotas/utils-service.js +28 -0
  103. package/dist/services/tech/tech-provider-mutate-service.d.ts +7 -0
  104. package/dist/services/tech/tech-provider-mutate-service.js +142 -0
  105. package/dist/services/tech/tech-query-service.d.ts +9 -0
  106. package/dist/services/tech/tech-query-service.js +77 -0
  107. package/dist/services/user-preference/service.d.ts +10 -0
  108. package/dist/services/user-preference/service.js +70 -0
  109. package/dist/services/users/external-user-integration-service.d.ts +9 -0
  110. package/dist/services/users/external-user-integration-service.js +42 -0
  111. package/dist/services/users/profile-service.d.ts +40 -0
  112. package/dist/services/users/profile-service.js +408 -0
  113. package/dist/services/users/service.d.ts +64 -0
  114. package/dist/services/users/service.js +187 -0
  115. package/dist/services/users/user-error-service.d.ts +4 -0
  116. package/dist/services/users/user-error-service.js +42 -0
  117. package/dist/services/users/users-group-service.d.ts +16 -0
  118. package/dist/services/users/users-group-service.js +68 -0
  119. package/dist/services/utils/string-utils-service.d.ts +5 -0
  120. package/dist/services/utils/string-utils-service.js +41 -0
  121. package/dist/src/apollo/resolvers/mutations/mailing-lists.d.ts +11 -0
  122. package/dist/src/apollo/resolvers/mutations/mailing-lists.js +19 -0
  123. package/dist/src/apollo/resolvers/mutations/user-preferences.d.ts +13 -0
  124. package/dist/src/apollo/resolvers/mutations/user-preferences.js +20 -0
  125. package/dist/src/apollo/resolvers/mutations/users.d.ts +28 -0
  126. package/dist/src/apollo/resolvers/mutations/users.js +33 -0
  127. package/dist/src/apollo/resolvers/queries/access.d.ts +11 -0
  128. package/dist/src/apollo/resolvers/queries/access.js +14 -0
  129. package/dist/src/apollo/resolvers/queries/profile.d.ts +11 -0
  130. package/dist/src/apollo/resolvers/queries/profile.js +14 -0
  131. package/dist/src/apollo/resolvers/queries/quotas.d.ts +21 -0
  132. package/dist/src/apollo/resolvers/queries/quotas.js +14 -0
  133. package/dist/src/apollo/resolvers/queries/tech.d.ts +5 -0
  134. package/dist/src/apollo/resolvers/queries/tech.js +24 -0
  135. package/dist/src/apollo/resolvers/queries/user-preferences.d.ts +5 -0
  136. package/dist/src/apollo/resolvers/queries/user-preferences.js +22 -0
  137. package/dist/src/apollo/resolvers/queries/users.d.ts +15 -0
  138. package/dist/src/apollo/resolvers/queries/users.js +17 -0
  139. package/dist/src/apollo/typedefs/typedefs.d.ts +1 -0
  140. package/dist/src/apollo/typedefs/typedefs.js +139 -0
  141. package/dist/src/db.d.ts +3 -0
  142. package/dist/src/db.js +11 -0
  143. package/dist/src/index.d.ts +52 -0
  144. package/dist/src/index.js +52 -0
  145. package/dist/src/models/chat/chat-message-created-model.d.ts +17 -0
  146. package/dist/src/models/chat/chat-message-created-model.js +92 -0
  147. package/dist/src/models/chat/chat-message-model.d.ts +44 -0
  148. package/dist/src/models/chat/chat-message-model.js +484 -0
  149. package/dist/src/models/chat/chat-participant-model.d.ts +39 -0
  150. package/dist/src/models/chat/chat-participant-model.js +178 -0
  151. package/dist/src/models/chat/chat-session-model.d.ts +92 -0
  152. package/dist/src/models/chat/chat-session-model.js +266 -0
  153. package/dist/src/models/chat/chat-settings-model.d.ts +87 -0
  154. package/dist/src/models/chat/chat-settings-model.js +230 -0
  155. package/dist/src/models/feature-flags/feature-flag-model.d.ts +40 -0
  156. package/dist/src/models/feature-flags/feature-flag-model.js +137 -0
  157. package/dist/src/models/instances/instance-model.d.ts +100 -0
  158. package/dist/src/models/instances/instance-model.js +466 -0
  159. package/dist/src/models/instances/instance-setting-model.d.ts +39 -0
  160. package/dist/src/models/instances/instance-setting-model.js +164 -0
  161. package/dist/src/models/mailing-lists/mailing-list-model.d.ts +34 -0
  162. package/dist/src/models/mailing-lists/mailing-list-model.js +127 -0
  163. package/dist/src/models/mailing-lists/mailing-list-subscriber-model.d.ts +36 -0
  164. package/dist/src/models/mailing-lists/mailing-list-subscriber-model.js +127 -0
  165. package/dist/src/models/quotas/resource-quota-total-model.d.ts +46 -0
  166. package/dist/src/models/quotas/resource-quota-total-model.js +170 -0
  167. package/dist/src/models/quotas/resource-quota-usage-model.d.ts +51 -0
  168. package/dist/src/models/quotas/resource-quota-usage-model.js +151 -0
  169. package/dist/src/models/tech/rate-limited-api-event-model.d.ts +25 -0
  170. package/dist/src/models/tech/rate-limited-api-event-model.js +134 -0
  171. package/dist/src/models/tech/rate-limited-api-model.d.ts +21 -0
  172. package/dist/src/models/tech/rate-limited-api-model.js +116 -0
  173. package/dist/src/models/tech/tech-model.d.ts +44 -0
  174. package/dist/src/models/tech/tech-model.js +239 -0
  175. package/dist/src/models/tech/tech-provider-api-key-model.d.ts +43 -0
  176. package/dist/src/models/tech/tech-provider-api-key-model.js +195 -0
  177. package/dist/src/models/tech/tech-provider-model.d.ts +28 -0
  178. package/dist/src/models/tech/tech-provider-model.js +170 -0
  179. package/dist/src/models/users/external-user-integration-model.d.ts +36 -0
  180. package/dist/src/models/users/external-user-integration-model.js +167 -0
  181. package/dist/src/models/users/user-error-model.d.ts +54 -0
  182. package/dist/src/models/users/user-error-model.js +146 -0
  183. package/dist/src/models/users/user-error-summary-model.d.ts +45 -0
  184. package/dist/src/models/users/user-error-summary-model.js +145 -0
  185. package/dist/src/models/users/user-group-member-model.d.ts +41 -0
  186. package/dist/src/models/users/user-group-member-model.js +164 -0
  187. package/dist/src/models/users/user-group-model.d.ts +27 -0
  188. package/dist/src/models/users/user-group-model.js +121 -0
  189. package/dist/src/models/users/user-model.d.ts +46 -0
  190. package/dist/src/models/users/user-model.js +126 -0
  191. package/dist/src/models/users/user-preference-model.d.ts +60 -0
  192. package/dist/src/models/users/user-preference-model.js +197 -0
  193. package/dist/src/models/users/user-profile-model.d.ts +58 -0
  194. package/dist/src/models/users/user-profile-model.js +146 -0
  195. package/dist/src/services/access/access-service.d.ts +12 -0
  196. package/dist/src/services/access/access-service.js +27 -0
  197. package/dist/src/services/access/encrypt-service.d.ts +13 -0
  198. package/dist/src/services/access/encrypt-service.js +79 -0
  199. package/dist/src/services/api-usage/api-usage-base-service.d.ts +15 -0
  200. package/dist/src/services/api-usage/api-usage-base-service.js +58 -0
  201. package/dist/src/services/console/service.d.ts +7 -0
  202. package/dist/src/services/console/service.js +18 -0
  203. package/dist/src/services/db/pg/pg-estimate-size-service.d.ts +16 -0
  204. package/dist/src/services/db/pg/pg-estimate-size-service.js +83 -0
  205. package/dist/src/services/files/types.d.ts +6 -0
  206. package/dist/src/services/files/types.js +1 -0
  207. package/dist/src/services/files/walk-dir-service.d.ts +8 -0
  208. package/dist/src/services/files/walk-dir-service.js +77 -0
  209. package/dist/src/services/locale/countries.d.ts +6 -0
  210. package/dist/src/services/locale/countries.js +481 -0
  211. package/dist/src/services/mailing-lists/mailing-list-subscriber-service.d.ts +14 -0
  212. package/dist/src/services/mailing-lists/mailing-list-subscriber-service.js +28 -0
  213. package/dist/src/services/process/sleep.d.ts +2 -0
  214. package/dist/src/services/process/sleep.js +6 -0
  215. package/dist/src/services/quotas/mutate-service.d.ts +5 -0
  216. package/dist/src/services/quotas/mutate-service.js +37 -0
  217. package/dist/src/services/quotas/query-service.d.ts +27 -0
  218. package/dist/src/services/quotas/query-service.js +116 -0
  219. package/dist/src/services/quotas/utils-service.d.ts +4 -0
  220. package/dist/src/services/quotas/utils-service.js +22 -0
  221. package/dist/src/services/tech/tech-provider-mutate-service.d.ts +7 -0
  222. package/dist/src/services/tech/tech-provider-mutate-service.js +85 -0
  223. package/dist/src/services/tech/tech-query-service.d.ts +9 -0
  224. package/dist/src/services/tech/tech-query-service.js +58 -0
  225. package/dist/src/services/user-preference/service.d.ts +10 -0
  226. package/dist/src/services/user-preference/service.js +49 -0
  227. package/dist/src/services/users/external-user-integration-service.d.ts +9 -0
  228. package/dist/src/services/users/external-user-integration-service.js +25 -0
  229. package/dist/src/services/users/profile-service.d.ts +40 -0
  230. package/dist/src/services/users/profile-service.js +385 -0
  231. package/dist/src/services/users/service.d.ts +64 -0
  232. package/dist/src/services/users/service.js +152 -0
  233. package/dist/src/services/users/user-error-service.d.ts +4 -0
  234. package/dist/src/services/users/user-error-service.js +27 -0
  235. package/dist/src/services/users/users-group-service.d.ts +16 -0
  236. package/dist/src/services/users/users-group-service.js +51 -0
  237. package/dist/src/services/utils/field-naming-service.d.ts +20 -0
  238. package/dist/src/services/utils/field-naming-service.js +59 -0
  239. package/dist/src/services/utils/string-utils-service.d.ts +5 -0
  240. package/dist/src/services/utils/string-utils-service.js +37 -0
  241. package/dist/src/types/errors.d.ts +9 -0
  242. package/dist/src/types/errors.js +15 -0
  243. package/dist/src/types/user-types.d.ts +11 -0
  244. package/dist/src/types/user-types.js +14 -0
  245. package/dist/types/errors.d.ts +9 -0
  246. package/dist/types/errors.js +20 -0
  247. package/dist/types/user-types.d.ts +11 -0
  248. package/dist/types/user-types.js +19 -0
  249. package/package.json +21 -0
  250. package/prisma/schema.prisma +572 -0
  251. package/prisma.config.ts +14 -0
  252. package/src/apollo/README.md +4 -0
  253. package/src/apollo/resolvers/mutations/mailing-lists.ts +30 -0
  254. package/src/apollo/resolvers/mutations/user-preferences.ts +33 -0
  255. package/src/apollo/resolvers/mutations/users.ts +61 -0
  256. package/src/apollo/resolvers/queries/access.ts +23 -0
  257. package/src/apollo/resolvers/queries/profile.ts +24 -0
  258. package/src/apollo/resolvers/queries/quotas.ts +25 -0
  259. package/src/apollo/resolvers/queries/tech.ts +42 -0
  260. package/src/apollo/resolvers/queries/user-preferences.ts +34 -0
  261. package/src/apollo/resolvers/queries/users.ts +33 -0
  262. package/src/apollo/typedefs/typedefs.ts +139 -0
  263. package/src/db.ts +19 -0
  264. package/src/index.ts +52 -0
  265. package/src/models/chat/chat-message-created-model.ts +126 -0
  266. package/src/models/chat/chat-message-model.ts +678 -0
  267. package/src/models/chat/chat-participant-model.ts +248 -0
  268. package/src/models/chat/chat-session-model.ts +397 -0
  269. package/src/models/chat/chat-settings-model.ts +336 -0
  270. package/src/models/feature-flags/feature-flag-model.ts +198 -0
  271. package/src/models/instances/instance-model.ts +673 -0
  272. package/src/models/instances/instance-setting-model.ts +235 -0
  273. package/src/models/mailing-lists/mailing-list-model.ts +177 -0
  274. package/src/models/mailing-lists/mailing-list-subscriber-model.ts +194 -0
  275. package/src/models/quotas/resource-quota-total-model.ts +243 -0
  276. package/src/models/quotas/resource-quota-usage-model.ts +219 -0
  277. package/src/models/tech/rate-limited-api-event-model.ts +190 -0
  278. package/src/models/tech/rate-limited-api-model.ts +171 -0
  279. package/src/models/tech/tech-model.ts +360 -0
  280. package/src/models/tech/tech-provider-api-key-model.ts +289 -0
  281. package/src/models/tech/tech-provider-model.ts +247 -0
  282. package/src/models/users/external-user-integration-model.ts +236 -0
  283. package/src/models/users/user-error-model.ts +219 -0
  284. package/src/models/users/user-error-summary-model.ts +216 -0
  285. package/src/models/users/user-group-member-model.ts +233 -0
  286. package/src/models/users/user-group-model.ts +174 -0
  287. package/src/models/users/user-model.ts +172 -0
  288. package/src/models/users/user-preference-model.ts +285 -0
  289. package/src/models/users/user-profile-model.ts +207 -0
  290. package/src/services/access/access-service.ts +36 -0
  291. package/src/services/access/encrypt-service.ts +122 -0
  292. package/src/services/api-usage/api-usage-base-service.ts +95 -0
  293. package/src/services/console/service.ts +24 -0
  294. package/src/services/db/pg/pg-estimate-size-service.ts +119 -0
  295. package/src/services/files/types.ts +7 -0
  296. package/src/services/files/walk-dir-service.ts +135 -0
  297. package/src/services/locale/countries.ts +483 -0
  298. package/src/services/mailing-lists/mailing-list-subscriber-service.ts +54 -0
  299. package/src/services/process/sleep.ts +7 -0
  300. package/src/services/quotas/mutate-service.ts +66 -0
  301. package/src/services/quotas/query-service.ts +197 -0
  302. package/src/services/quotas/utils-service.ts +29 -0
  303. package/src/services/tech/tech-provider-mutate-service.ts +136 -0
  304. package/src/services/tech/tech-query-service.ts +93 -0
  305. package/src/services/user-preference/service.ts +110 -0
  306. package/src/services/users/external-user-integration-service.ts +51 -0
  307. package/src/services/users/profile-service.ts +513 -0
  308. package/src/services/users/service.ts +293 -0
  309. package/src/services/users/user-error-service.ts +74 -0
  310. package/src/services/users/users-group-service.ts +85 -0
  311. package/src/services/utils/field-naming-service.ts +78 -0
  312. package/src/services/utils/string-utils-service.ts +48 -0
  313. package/src/types/errors.ts +18 -0
  314. package/src/types/user-types.ts +19 -0
  315. package/tsconfig.json +25 -0
@@ -0,0 +1,293 @@
1
+ import { PrismaClient } from '@/prisma/client'
2
+ import { CustomError } from '../../types/errors'
3
+ import { UserProfileModel } from '../../models/users/user-profile-model'
4
+ import { UserModel } from '../../models/users/user-model'
5
+ import { UserPreferenceService } from '../user-preference/service'
6
+
7
+ export class UsersService {
8
+
9
+ // Consts
10
+ clName = 'UsersService'
11
+
12
+ // Models
13
+ userModel = new UserModel()
14
+ userProfileModel = new UserProfileModel()
15
+
16
+ // Services
17
+ userPreferenceService = new UserPreferenceService()
18
+
19
+ // Code
20
+ async createBlankUser(prisma: PrismaClient) {
21
+
22
+ // console.log('UsersService.createBlankUser(): start')
23
+
24
+ return await this.userProfileModel.create(
25
+ prisma,
26
+ null, // userId
27
+ false, // isAdmin
28
+ null) // deletePending
29
+ }
30
+
31
+ async createDefaultUserPreferences(
32
+ prisma: PrismaClient,
33
+ userProfileId: string,
34
+ defaultUserPreferences: string | undefined) {
35
+
36
+ // console.log('createDefaultUserPreferences()')
37
+
38
+ if (defaultUserPreferences == null ||
39
+ defaultUserPreferences === '') {
40
+ return
41
+ }
42
+
43
+ const jsonArray: any[] = JSON.parse(defaultUserPreferences)
44
+
45
+ for (const json of jsonArray) {
46
+ await this.userPreferenceService.createIfNotExists(
47
+ prisma,
48
+ userProfileId,
49
+ json.category,
50
+ json.key,
51
+ json.value,
52
+ null)
53
+ }
54
+ }
55
+
56
+ async createUserByEmail(
57
+ prisma: PrismaClient,
58
+ email: string) {
59
+
60
+ const user = await
61
+ this.userModel.create(
62
+ prisma,
63
+ email,
64
+ undefined) // name
65
+
66
+ const userProfile = await
67
+ this.userProfileModel.create(
68
+ prisma,
69
+ user.id,
70
+ false, // isAdmin
71
+ null) // deletePending
72
+
73
+ return userProfile.id
74
+ }
75
+
76
+ async getById(prisma: PrismaClient,
77
+ userProfileId: string) {
78
+
79
+ return await this.userProfileModel.getById(
80
+ prisma,
81
+ userProfileId)
82
+ }
83
+
84
+ async getUserByUserProfileId(
85
+ prisma: PrismaClient,
86
+ userProfileId: string) {
87
+
88
+ // Debug
89
+ const fnName = `${this.clName}.getUserByUserProfileId()`
90
+
91
+ // Get userProfile
92
+ const userProfile = await
93
+ this.getById(
94
+ prisma,
95
+ userProfileId)
96
+
97
+ // Validate
98
+ if (userProfile == null) {
99
+ throw new CustomError(`${fnName}: userProfile == null`)
100
+ }
101
+
102
+ // Get user record
103
+ if (userProfile.userId == null) {
104
+ return null
105
+ } else {
106
+ return await this.userModel.getById(
107
+ prisma,
108
+ userProfile.userId)
109
+ }
110
+ }
111
+
112
+ async getOrCreateSignedOutUser(
113
+ prisma: PrismaClient,
114
+ signedOutId: string,
115
+ defaultUserPreferences: string) {
116
+
117
+ // Debug
118
+ const fnName = `${this.clName}.getOrCreateSignedOutUser()`
119
+
120
+ // User id exists, use it
121
+ var userProfile: any = null
122
+
123
+ var signedOutUserProfile = {
124
+ id: signedOutId
125
+ }
126
+
127
+ if (signedOutId != null) {
128
+ // console.log(`${fnName}: getting user..`)
129
+
130
+ userProfile = await
131
+ this.getById(
132
+ prisma,
133
+ signedOutId)
134
+
135
+ if (userProfile) {
136
+ if (userProfile.id) {
137
+ signedOutUserProfile = userProfile
138
+ }
139
+ }
140
+ }
141
+
142
+ if (userProfile == null) {
143
+
144
+ // Create user record
145
+ // console.log(`${fnName}: creating user..`)
146
+
147
+ const userProfile = await this.createBlankUser(prisma)
148
+
149
+ // console.log(`${fnName}: userProfileId: ${userProfile.id}`)
150
+
151
+ signedOutUserProfile = userProfile
152
+ signedOutId = userProfile.id
153
+ }
154
+
155
+ // Create default user preferences
156
+ await this.createDefaultUserPreferences(
157
+ prisma,
158
+ signedOutId,
159
+ defaultUserPreferences)
160
+
161
+ // Return signedOutId
162
+ return signedOutUserProfile
163
+ }
164
+
165
+ async getOrCreateUserByEmail(
166
+ prisma: PrismaClient,
167
+ email: string,
168
+ defaultUserPreferences: string | undefined) {
169
+
170
+ // Debug
171
+ const fnName = `${this.clName}.getOrCreateUserByEmail()`
172
+
173
+ // console.log(`UsersService.getOrCreateUserByEmail(): email: ${email}`)
174
+
175
+ // Get/create user record
176
+ var signedInUser = await
177
+ this.userModel.getByEmail(
178
+ prisma,
179
+ email)
180
+
181
+ if (signedInUser == null) {
182
+
183
+ signedInUser = await
184
+ this.userModel.create(
185
+ prisma,
186
+ email,
187
+ undefined) // name
188
+ }
189
+
190
+ // Get/create userProfile record
191
+ // console.log(`UsersService.getOrCreateUserByEmail(): get userProfile ` +
192
+ // `records where signedInUser.id = ${signedInUser.id}`)
193
+
194
+ var signedInUserProfile = await
195
+ this.userProfileModel.getByUserId(
196
+ prisma,
197
+ signedInUser.id)
198
+
199
+ // console.log(`signedInUserProfile: ` + JSON.stringify(signedInUserProfile))
200
+
201
+ if (signedInUserProfile == null) {
202
+
203
+ // Create userProfile record
204
+ signedInUserProfile = await
205
+ this.userProfileModel.create(
206
+ prisma,
207
+ signedInUser.id, // userId
208
+ false, // isAdmin
209
+ null) // deletePending
210
+ }
211
+
212
+ // Create default user preferences
213
+ await this.createDefaultUserPreferences(
214
+ prisma,
215
+ signedInUserProfile.id,
216
+ defaultUserPreferences)
217
+
218
+ return signedInUserProfile
219
+ }
220
+
221
+ async getUserProfileByEmail(
222
+ prisma: PrismaClient,
223
+ email: string) {
224
+
225
+ // console.log(`UsersService.getUserProfileByEmail(): emailLower: ${emailLower}`)
226
+
227
+ const user = await
228
+ this.userModel.getByEmail(
229
+ prisma,
230
+ email)
231
+
232
+ if (user == null) {
233
+ return null
234
+ } else {
235
+ return await this.userProfileModel.getByUserId(
236
+ prisma,
237
+ user.id)
238
+ }
239
+ }
240
+
241
+ async verifyHumanUserProfile(
242
+ prisma: PrismaClient,
243
+ userProfileId: string) {
244
+
245
+ // Debug
246
+ const fnName = `${this.clName}.verifyHumanUserProfile()`
247
+
248
+ // Get UserProfile record
249
+ const userProfile = await
250
+ this.getById(
251
+ prisma,
252
+ userProfileId)
253
+
254
+ // Validate
255
+ if (userProfile == null) {
256
+ throw new CustomError(`${fnName}: userProfile == null`)
257
+ }
258
+
259
+ // Verify human roleOwnerType, or set if none
260
+ if (userProfile.ownerType == null) {
261
+
262
+ await this.userProfileModel.setOwnerType(
263
+ prisma,
264
+ userProfile)
265
+ }
266
+ }
267
+
268
+ async verifySignedInUserProfileId(
269
+ prisma: PrismaClient,
270
+ userProfileId: string) {
271
+
272
+ // Debug
273
+ const fnName = `${this.clName}.verifySignedInUserProfileId()`
274
+
275
+ // Get UserProfile
276
+ const userProfile = await
277
+ this.userProfileModel.getById(
278
+ prisma,
279
+ userProfileId)
280
+
281
+ // Validate
282
+ if (userProfile == null) {
283
+ throw new CustomError(`${fnName}: userProfile == null`)
284
+ }
285
+
286
+ // Return
287
+ if (userProfile.userId == null) {
288
+ return false
289
+ } else {
290
+ return true
291
+ }
292
+ }
293
+ }
@@ -0,0 +1,74 @@
1
+ import { PrismaClient } from '@/prisma/client'
2
+ import { UserErrorModel } from '../../models/users/user-error-model'
3
+ import { UserErrorSummaryModel } from '../../models/users/user-error-summary-model'
4
+
5
+ // Models
6
+ const userErrorModel = new UserErrorModel()
7
+ const userErrorSummaryModel = new UserErrorSummaryModel()
8
+
9
+ // Class
10
+ export class UserErrorService {
11
+
12
+ async upsert(
13
+ prisma: PrismaClient,
14
+ userProfileId: string,
15
+ endUserProfileId: string | null,
16
+ instanceId: string | null,
17
+ summaryMessage: string | undefined,
18
+ origin: string,
19
+ message: string,
20
+ techMessage: string | null) {
21
+
22
+ // If the summaryMessage isn't specified, set it to the message
23
+ if (summaryMessage == null) {
24
+ summaryMessage = message
25
+ }
26
+
27
+ // Get the existing UserErrorSummary if it exists
28
+ var userErrorSummary = await
29
+ userErrorSummaryModel.getByUniqueKey(
30
+ prisma,
31
+ userProfileId,
32
+ instanceId,
33
+ origin,
34
+ summaryMessage)
35
+
36
+ // Create/update UserErrorSummary
37
+ if (userErrorSummary == null) {
38
+
39
+ // Create
40
+ userErrorSummary = await
41
+ userErrorSummaryModel.create(
42
+ prisma,
43
+ userProfileId,
44
+ instanceId,
45
+ origin,
46
+ summaryMessage,
47
+ 1) // count
48
+ } else {
49
+
50
+ // Inc count
51
+ userErrorSummary = await
52
+ userErrorSummaryModel.update(
53
+ prisma,
54
+ userErrorSummary.id,
55
+ undefined,
56
+ undefined,
57
+ undefined,
58
+ undefined,
59
+ userErrorSummary.count + 1)
60
+ }
61
+
62
+ // Create UserError
63
+ const userError = await
64
+ userErrorModel.create(
65
+ prisma,
66
+ userErrorSummary.id,
67
+ userProfileId,
68
+ endUserProfileId,
69
+ instanceId,
70
+ origin,
71
+ message,
72
+ techMessage)
73
+ }
74
+ }
@@ -0,0 +1,85 @@
1
+ import { PrismaClient } from '@/prisma/client'
2
+ import { UserGroupMemberModel } from '../../models/users/user-group-member-model'
3
+ import { UserGroupModel } from '../../models/users/user-group-model'
4
+
5
+ export class UsersGroupService {
6
+
7
+ // Consts
8
+ clName = 'UsersGroupService'
9
+
10
+ // Common group names
11
+ externalUsersGroupName = 'External users group'
12
+
13
+ // Models
14
+ userGroupMemberModel = new UserGroupMemberModel()
15
+ userGroupModel = new UserGroupModel()
16
+
17
+ // Code
18
+ async verifyGroupMemberByOwner(
19
+ prisma: PrismaClient,
20
+ memberUserProfileId: string,
21
+ ownerUserProfileId: string,
22
+ groupName: string) {
23
+
24
+ // Get the UserGroup record
25
+ const userGroup = await
26
+ this.userGroupModel.getByUniqueKey(
27
+ prisma,
28
+ ownerUserProfileId,
29
+ groupName)
30
+
31
+ if (userGroup == null) {
32
+
33
+ return {
34
+ status: false,
35
+ message: `User group not found: ` + groupName
36
+ }
37
+ }
38
+
39
+ // Verify the member is present for the group
40
+ const memberUserGroupMember = await
41
+ this.userGroupMemberModel.getByUniqueKey(
42
+ prisma,
43
+ userGroup.id,
44
+ memberUserProfileId)
45
+
46
+ if (memberUserGroupMember == null) {
47
+
48
+ return {
49
+ status: false,
50
+ message: `Member: ${memberUserProfileId} not found for group: ` +
51
+ groupName
52
+ }
53
+ }
54
+
55
+ // Verify the admin is present for the group (and is an admin of the group)
56
+ const ownerUserGroupMember = await
57
+ this.userGroupMemberModel.getByUniqueKey(
58
+ prisma,
59
+ userGroup.id,
60
+ ownerUserProfileId)
61
+
62
+ if (ownerUserGroupMember == null) {
63
+
64
+ return {
65
+ status: false,
66
+ message: `Admin: ${ownerUserProfileId} not found for group: ` +
67
+ groupName
68
+ }
69
+ }
70
+
71
+ if (ownerUserGroupMember.isGroupAdmin === false) {
72
+
73
+ return {
74
+ status: false,
75
+ message: `Owner: ${ownerUserProfileId} is not an admin for group: ` +
76
+ groupName
77
+ }
78
+ }
79
+
80
+ // Return OK
81
+ return {
82
+ status: true
83
+ }
84
+ }
85
+ }
@@ -0,0 +1,78 @@
1
+ export class FieldNamingService {
2
+
3
+ // Consts
4
+ clName = 'FieldNamingService'
5
+
6
+ // Code
7
+ getAsKey(name: string) {
8
+
9
+ // Trim leading/trailing spaces
10
+ let key = name.trim()
11
+
12
+ // Replace spaces with hyphens
13
+ key = key.replace(/\s+/g, '-')
14
+
15
+ // Remove any character that is not A-Z, a-z, 0-9, hyphen, or underscore
16
+ key = key.replace(/[^A-Za-z0-9-_]/g, '')
17
+
18
+ return key
19
+ }
20
+
21
+ validateKey(
22
+ key: string,
23
+ label: string) {
24
+
25
+ // Key must be at least 4 chars long (helps reserve short names in the URL)
26
+ if (key.length < 4) {
27
+ return {
28
+ status: false,
29
+ message: `The ${label} is too short (4+ characters)`
30
+ }
31
+ }
32
+
33
+ // Return
34
+ return {
35
+ status: true
36
+ }
37
+ }
38
+
39
+ validateName(
40
+ name: string,
41
+ label: string) {
42
+
43
+ // Null/undefined check
44
+ if (name == null) {
45
+ return {
46
+ status: false,
47
+ message: `The ${label} is null`
48
+ }
49
+ }
50
+
51
+ // Trim the workflow name
52
+ name = name.trim()
53
+
54
+ // Name must not start or end with a hypen
55
+ if (name[0] === '-' ||
56
+ name[name.length - 1] === '-') {
57
+ return {
58
+ status: false,
59
+ message: `The ${label} can't start or end with a hypen`
60
+ }
61
+ }
62
+
63
+ // Name must not start or end with an underscore
64
+ if (name[0] === '_' ||
65
+ name[name.length - 1] === '_') {
66
+ return {
67
+ status: false,
68
+ message: `The ${label} can't start or end with an underscore`
69
+ }
70
+ }
71
+
72
+ // Return
73
+ return {
74
+ status: true,
75
+ name: name
76
+ }
77
+ }
78
+ }
@@ -0,0 +1,48 @@
1
+ export class StringUtilsService {
2
+
3
+ toNaturalCase(input: string) {
4
+
5
+ if (!input) return ''
6
+
7
+ // Step 1: Normalize input (handle snake_case, kebab-case, camelCase)
8
+ let words = input
9
+ // Insert space before capital letters (camelCase to space-separated)
10
+ .replace(/([a-z])([A-Z])/g, '$1 $2')
11
+ // Replace underscores and hyphens with space
12
+ .replace(/[_\-]+/g, ' ')
13
+ // Split into words
14
+ .split(' ')
15
+
16
+ // Step 2: Capitalize each word, but keep acronyms (like TV, AI) in uppercase
17
+ return words
18
+ .map((word: string) => {
19
+ if (word.length <= 2 && word === word.toUpperCase()) {
20
+ // likely an acronym: TV, AI, ML
21
+ return word;
22
+ }
23
+ return word.charAt(0).toUpperCase() + word.slice(1).toLowerCase();
24
+ })
25
+ .join(' ')
26
+ }
27
+
28
+ getShortLocaleString(date: Date) {
29
+
30
+ const tz = date.toLocaleDateString('en', {
31
+ day: '2-digit',
32
+ timeZoneName: 'short'
33
+ }).slice(4)
34
+
35
+ return `${date.toLocaleString()} ${tz}`
36
+ }
37
+
38
+ getSnippet(
39
+ text: string,
40
+ maxChars: number) {
41
+
42
+ if (text.length < maxChars) {
43
+ return text
44
+ }
45
+
46
+ return text.substring(0, maxChars) + '..'
47
+ }
48
+ }
@@ -0,0 +1,18 @@
1
+ export class CustomError extends Error {
2
+
3
+ name = 'CustomError'
4
+
5
+ constructor(message: string) {
6
+ super(message)
7
+ this.name = 'CustomError'
8
+ Error.captureStackTrace?.(this, CustomError)
9
+ }
10
+
11
+ toJSON() {
12
+ return {
13
+ name: this.name,
14
+ message: this.message,
15
+ stack: this.stack,
16
+ }
17
+ }
18
+ }
@@ -0,0 +1,19 @@
1
+ export class SereneCoreServerTypes {
2
+
3
+ // Statuses
4
+ static activeStatus = 'A'
5
+ static newStatus = 'A'
6
+
7
+ // Names
8
+ static credits = 'Credits'
9
+
10
+ // Paid/free pricing tiers
11
+ static free = 'free'
12
+ static paid = 'paid'
13
+ }
14
+
15
+ export class UserTypes {
16
+
17
+ static botRoleOwnerType = 'B'
18
+ static humanRoleOwnerType = 'H'
19
+ }
package/tsconfig.json ADDED
@@ -0,0 +1,25 @@
1
+ {
2
+ "compilerOptions": {
3
+ "baseUrl": ".",
4
+ "target": "ES2023",
5
+ "module": "esnext",
6
+ "moduleResolution": "bundler",
7
+ "outDir": "dist", // Compiled files go here
8
+ "declaration": true, // Generate .d.ts types for consumers
9
+ "strict": true, // Strict type checking
10
+ "esModuleInterop": true, // Allow default imports from CommonJS
11
+ "forceConsistentCasingInFileNames": true,
12
+ "paths": {
13
+ "@/*": ["./src/*"],
14
+ "@/prisma/*": ["./prisma/generated/prisma/*"]
15
+ }
16
+ },
17
+ "include": [
18
+ "next-env.d.ts",
19
+ "**/*.ts",
20
+ "**/*.tsx",
21
+ ".next/types/**/*.ts",
22
+ ".next/dev/types/**/*.ts",
23
+ "**/*.mts"
24
+ ],
25
+ }