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,678 @@
1
+ import { PrismaClient } from '@/prisma/client'
2
+ import { Encrypter } from '../../services/access/encrypt-service'
3
+ import { CustomError } from '../../types/errors'
4
+
5
+ export class ChatMessageModel {
6
+
7
+ // Consts
8
+ clName = 'ChatMessageModel'
9
+
10
+ msPerMinute = 60000
11
+
12
+ // Services
13
+ encrypter
14
+
15
+ // Code
16
+ constructor(encryptionKey: string | undefined) {
17
+
18
+ this.encrypter = new Encrypter(encryptionKey)
19
+ }
20
+
21
+ async countMessages(
22
+ prisma: PrismaClient,
23
+ userProfileId: string,
24
+ startDate: Date,
25
+ sentByAi: boolean) {
26
+
27
+ // Debug
28
+ const fnName = `${this.clName}.countMessages()`
29
+
30
+ // Query
31
+ const count = await prisma.chatMessage.count({
32
+ where: {
33
+ sentByAi: sentByAi,
34
+ chatSession: {
35
+ createdById: userProfileId,
36
+ },
37
+ created: {
38
+ gte: startDate,
39
+ },
40
+ },
41
+ })
42
+
43
+ // Return
44
+ return count
45
+ }
46
+
47
+ async create(prisma: PrismaClient,
48
+ id: string | undefined,
49
+ chatSession: any,
50
+ replyToId: string | null,
51
+ fromUserProfileId: string,
52
+ fromChatParticipantId: string,
53
+ toChatParticipantId: string,
54
+ externalId: string | null,
55
+ sentByAi: boolean,
56
+ message: string) {
57
+
58
+ // Debug
59
+ const fnName = `${this.clName}.create()`
60
+
61
+ // Validate
62
+ if (chatSession == null) {
63
+
64
+ throw new CustomError(`${fnName}: chatMessage == null`)
65
+ }
66
+
67
+ // Encrypt the message if required
68
+ if (chatSession.isEncryptedAtRest === true) {
69
+
70
+ message = this.encrypter.encrypt(message)
71
+ }
72
+
73
+ // Create record
74
+ var chatMessage: any = undefined
75
+
76
+ try {
77
+ chatMessage = await prisma.chatMessage.create({
78
+ data: {
79
+ id: id,
80
+ chatSessionId: chatSession.id,
81
+ replyToId: replyToId,
82
+ fromChatParticipantId: fromChatParticipantId,
83
+ toChatParticipantId: toChatParticipantId,
84
+ externalId: externalId,
85
+ sentByAi: sentByAi,
86
+ message: message
87
+ }
88
+ })
89
+ } catch(error) {
90
+ console.error(`${fnName}: error: ${error}`)
91
+ throw 'Prisma error'
92
+ }
93
+
94
+ // Return
95
+ return chatMessage
96
+ }
97
+
98
+ async deleteByChatSessionId(
99
+ prisma: PrismaClient,
100
+ chatSessionId: string) {
101
+
102
+ // Debug
103
+ const fnName = `${this.clName}.deleteByChatSessionId()`
104
+
105
+ // Delete records
106
+ try {
107
+ await prisma.chatMessage.deleteMany({
108
+ where: {
109
+ chatSessionId: chatSessionId
110
+ }
111
+ })
112
+ } catch(error: any) {
113
+ console.error(`${fnName}: error: ${error}`)
114
+ throw 'Prisma error'
115
+ }
116
+ }
117
+
118
+ async deleteById(
119
+ prisma: PrismaClient,
120
+ id: string) {
121
+
122
+ // Debug
123
+ const fnName = `${this.clName}.deleteById()`
124
+
125
+ // Delete record
126
+ try {
127
+ await prisma.chatMessage.delete({
128
+ where: {
129
+ id: id
130
+ }
131
+ })
132
+ } catch(error: any) {
133
+ console.error(`${fnName}: error: ${error}`)
134
+ throw 'Prisma error'
135
+ }
136
+ }
137
+
138
+ async getById(prisma: PrismaClient,
139
+ id: string,
140
+ chatSession: any) {
141
+
142
+ // Debug
143
+ const fnName = `${this.clName}.getById()`
144
+
145
+ // Validate
146
+ if (chatSession == null) {
147
+
148
+ throw new CustomError(`${fnName}: chatMessage == null`)
149
+ }
150
+
151
+ // Query record
152
+ var chatMessage: any = undefined
153
+
154
+ try {
155
+ chatMessage = await prisma.chatMessage.findUnique({
156
+ where: {
157
+ id: id
158
+ }
159
+ })
160
+ } catch(error: any) {
161
+ if (!(error instanceof error.NotFound)) {
162
+ console.error(`${fnName}: error: ${error}`)
163
+ throw 'Prisma error'
164
+ }
165
+ }
166
+
167
+ // Decrypt message if required
168
+ if (chatSession.isEncryptedAtRest === true) {
169
+
170
+ chatMessage.message = this.encrypter.decrypt(chatMessage.message)
171
+ }
172
+
173
+ // Return OK
174
+ return chatMessage
175
+ }
176
+
177
+ async getByChatSessionId(
178
+ prisma: PrismaClient,
179
+ chatSession: any,
180
+ maxPrevMessages: number | null) {
181
+
182
+ // Debug
183
+ const fnName = `${this.clName}.getByChatSessionId()`
184
+
185
+ // Validate
186
+ if (chatSession == null) {
187
+ console.error(`${fnName}: chatSessionId == null`)
188
+ throw 'Prisma error'
189
+ }
190
+
191
+ if (chatSession.id == null) {
192
+ console.error(`${fnName}: chatSession.id == null`)
193
+ throw 'Prisma error'
194
+ }
195
+
196
+ // Query records
197
+ var chatMessages: any[] = []
198
+
199
+ if (maxPrevMessages == null) {
200
+
201
+ // No max prev messages; get all messages
202
+ try {
203
+ chatMessages = await prisma.chatMessage.findMany({
204
+ where: {
205
+ chatSessionId: chatSession.id
206
+ },
207
+ orderBy: [
208
+ {
209
+ created: 'asc'
210
+ }
211
+ ]
212
+ })
213
+ } catch(error) {
214
+ console.error(`${fnName}: error: ${error}`)
215
+ throw 'Prisma error'
216
+ }
217
+ } else {
218
+
219
+ // Limit by max prev messages
220
+ try {
221
+ chatMessages = await prisma.chatMessage.findMany({
222
+ take: maxPrevMessages,
223
+ where: {
224
+ chatSessionId: chatSession.id
225
+ },
226
+ orderBy: [
227
+ {
228
+ created: 'desc'
229
+ }
230
+ ]
231
+ })
232
+ } catch(error) {
233
+ console.error(`${fnName}: error: ${error}`)
234
+ throw 'Prisma error'
235
+ }
236
+
237
+ chatMessages.reverse()
238
+ }
239
+
240
+ // Decrypts message if required
241
+ if (chatSession.isEncryptedAtRest === true) {
242
+
243
+ for (const chatMessage of chatMessages) {
244
+
245
+ chatMessage.message = this.encrypter.decrypt(chatMessage.message)
246
+ }
247
+ }
248
+
249
+ // Return
250
+ return chatMessages
251
+ }
252
+
253
+ async getByChatSessionAndExternalId(
254
+ prisma: PrismaClient,
255
+ chatSession: any,
256
+ externalId: string) {
257
+
258
+ // Debug
259
+ const fnName = `${this.clName}.getByChatSessionIdAndExternalId()`
260
+
261
+ // Validate
262
+ if (chatSession == null) {
263
+
264
+ throw new CustomError(`${fnName}: chatSessionId == null`)
265
+ }
266
+
267
+ if (externalId == null) {
268
+
269
+ throw new CustomError(`${fnName}: externalId == null`)
270
+ }
271
+
272
+ // Query record
273
+ var chatMessage: any = undefined
274
+
275
+ try {
276
+ chatMessage = await prisma.chatMessage.findFirst({
277
+ where: {
278
+ chatSessionId: chatSession.id,
279
+ externalId: externalId
280
+ }
281
+ })
282
+ } catch(error: any) {
283
+ if (!(error instanceof error.NotFound)) {
284
+ console.error(`${fnName}: error: ${error}`)
285
+ throw 'Prisma error'
286
+ }
287
+ }
288
+
289
+ // Decrypt message if required
290
+ if (chatSession.isEncryptedAtRest === true) {
291
+
292
+ chatMessage.message = this.encrypter.decrypt(chatMessage.message)
293
+ }
294
+
295
+ // Return OK
296
+ return chatMessage
297
+ }
298
+
299
+ async getByLastMessageId(
300
+ prisma: PrismaClient,
301
+ chatSession: any,
302
+ lastMessageId: string) {
303
+
304
+ // Debug
305
+ const fnName = `${this.clName}.getByLastMessageId()`
306
+
307
+ // Validate
308
+ if (chatSession == null) {
309
+
310
+ throw new CustomError(`${fnName}: chatMessage == null`)
311
+ }
312
+
313
+ // Get the last message if specified
314
+ var lastMessageCreated = new Date()
315
+
316
+ if (lastMessageId != null) {
317
+
318
+ const lastMessage = await
319
+ this.getById(
320
+ prisma,
321
+ lastMessageId,
322
+ chatSession)
323
+
324
+ if (lastMessage != null) {
325
+ lastMessageCreated = lastMessage.created
326
+ }
327
+ }
328
+
329
+ // Query records
330
+ var chatMessages: any[] = []
331
+
332
+ try {
333
+ chatMessages = await prisma.chatMessage.findMany({
334
+ where: {
335
+ chatSessionId: chatSession.id,
336
+ created: {
337
+ gt: lastMessageCreated
338
+ }
339
+ },
340
+ orderBy: [
341
+ {
342
+ created: 'asc'
343
+ }
344
+ ]
345
+ })
346
+ } catch(error: any) {
347
+ if (!(error instanceof error.NotFound)) {
348
+ console.error(`${fnName}: error: ${error}`)
349
+ throw 'Prisma error'
350
+ }
351
+ }
352
+
353
+ // Decrypts message if required
354
+ if (chatSession.isEncryptedAtRest === true) {
355
+
356
+ for (const chatMessage of chatMessages) {
357
+
358
+ chatMessage.message = this.encrypter.decrypt(chatMessage.message)
359
+ }
360
+ }
361
+
362
+ // Return
363
+ return chatMessages
364
+ }
365
+
366
+ async getEarliestUnread(
367
+ prisma: PrismaClient,
368
+ chatSession: any) {
369
+
370
+ // Debug
371
+ const fnName = `${this.clName}.getEarliestUnread()`
372
+
373
+ // Validate
374
+ if (chatSession == null) {
375
+ throw new CustomError(`${fnName}: chatMessage == null`)
376
+ }
377
+
378
+ // Query record
379
+ var chatMessage: any = undefined
380
+
381
+ try {
382
+ chatMessage = await prisma.chatMessage.findFirst({
383
+ where: {
384
+ chatSessionId: chatSession.id,
385
+ sentByAi: true
386
+ },
387
+ orderBy: [
388
+ {
389
+ created: 'desc'
390
+ }
391
+ ]
392
+ })
393
+ } catch(error: any) {
394
+ if (!(error instanceof error.NotFound)) {
395
+ console.error(`${fnName}: error: ${error}`)
396
+ throw 'Prisma error'
397
+ }
398
+ }
399
+
400
+ // Decrypt message if required
401
+ if (chatSession.isEncryptedAtRest === true) {
402
+
403
+ chatMessage.message = this.encrypter.decrypt(chatMessage.message)
404
+ }
405
+
406
+ // Return OK
407
+ return chatMessage
408
+ }
409
+
410
+ async getFirst(
411
+ prisma: PrismaClient,
412
+ chatSession: any) {
413
+
414
+ // Debug
415
+ const fnName = `${this.clName}.getFirst()`
416
+
417
+ // Validate
418
+ if (chatSession == null) {
419
+
420
+ throw new CustomError(`${fnName}: chatMessage == null`)
421
+ }
422
+
423
+ // Query record
424
+ var chatMessage: any = undefined
425
+
426
+ try {
427
+ chatMessage = await prisma.chatMessage.findFirst({
428
+ where: {
429
+ chatSessionId: chatSession.id
430
+ },
431
+ orderBy: [
432
+ {
433
+ created: 'asc'
434
+ }
435
+ ]
436
+ })
437
+ } catch(error: any) {
438
+ if (!(error instanceof error.NotFound)) {
439
+ console.error(`${fnName}: error: ${error}`)
440
+ throw 'Prisma error'
441
+ }
442
+ }
443
+
444
+ // Decrypt message if required
445
+ if (chatSession.isEncryptedAtRest === true) {
446
+
447
+ chatMessage.message = this.encrypter.decrypt(chatMessage.message)
448
+ }
449
+
450
+ // Return OK
451
+ return chatMessage
452
+ }
453
+
454
+ async getLast(
455
+ prisma: PrismaClient,
456
+ chatSession: any) {
457
+
458
+ // Debug
459
+ const fnName = `${this.clName}.getLast()`
460
+
461
+ // Validate
462
+ if (chatSession == null) {
463
+
464
+ throw new CustomError(`${fnName}: chatMessage == null`)
465
+ }
466
+
467
+ // Query record
468
+ var chatMessage: any = undefined
469
+
470
+ try {
471
+ chatMessage = await prisma.chatMessage.findFirst({
472
+ where: {
473
+ chatSessionId: chatSession.id
474
+ },
475
+ orderBy: [
476
+ {
477
+ created: 'desc'
478
+ }
479
+ ]
480
+ })
481
+ } catch(error: any) {
482
+ if (!(error instanceof error.NotFound)) {
483
+ console.error(`${fnName}: error: ${error}`)
484
+ throw 'Prisma error'
485
+ }
486
+ }
487
+
488
+ // Decrypt message if required
489
+ if (chatSession.isEncryptedAtRest === true) {
490
+
491
+ chatMessage.message = this.encrypter.decrypt(chatMessage.message)
492
+ }
493
+
494
+ // Return OK
495
+ return chatMessage
496
+ }
497
+
498
+ async setExternalId(
499
+ prisma: PrismaClient,
500
+ id: string,
501
+ externalId: string | null) {
502
+
503
+ // Debug
504
+ const fnName = `${this.clName}.setExternalId()`
505
+
506
+ // Validate
507
+ if (id == null) {
508
+
509
+ throw new CustomError(`${fnName}: id == null`)
510
+ }
511
+
512
+ if (externalId === undefined) {
513
+
514
+ throw new CustomError(`${fnName}: externalId == null`)
515
+ }
516
+
517
+ // Update record
518
+ try {
519
+ return await prisma.chatMessage.update({
520
+ data: {
521
+ externalId: externalId
522
+ },
523
+ where: {
524
+ id: id
525
+ }
526
+ })
527
+ } catch(error: any) {
528
+ // Don't fail, this can happen due to a unique constraint violation in
529
+ // some valid scenarios.
530
+ // Trying to handle the specific Prisma error code didn't work
531
+ console.warn(`${fnName}: warning: ` + JSON.stringify(error))
532
+ return null
533
+ }
534
+ }
535
+
536
+ async update(prisma: PrismaClient,
537
+ id: string,
538
+ chatSession: any,
539
+ replyToId: string | null | undefined,
540
+ fromChatParticipantId: string | undefined,
541
+ toChatParticipantId: string | undefined,
542
+ externalId: string | null | undefined,
543
+ sentByAi: boolean | undefined,
544
+ message: string | undefined) {
545
+
546
+ // Debug
547
+ const fnName = `${this.clName}.update()`
548
+
549
+ // Validate
550
+ if (chatSession == null) {
551
+
552
+ throw new CustomError(`${fnName}: chatMessage == null`)
553
+ }
554
+
555
+ // Encrypt the message if required
556
+ if (message != null &&
557
+ chatSession.isEncryptedAtRest === true) {
558
+
559
+ message = this.encrypter.encrypt(message)
560
+ }
561
+
562
+ // Update record
563
+ try {
564
+ return await prisma.chatMessage.update({
565
+ data: {
566
+ chatSessionId: chatSession.id,
567
+ replyToId: replyToId,
568
+ fromChatParticipantId: fromChatParticipantId,
569
+ toChatParticipantId: toChatParticipantId,
570
+ externalId: externalId,
571
+ sentByAi: sentByAi,
572
+ message: message
573
+ },
574
+ where: {
575
+ id: id
576
+ }
577
+ })
578
+ } catch(error) {
579
+ console.error(`${fnName}: error: ${error}`)
580
+ throw 'Prisma error'
581
+ }
582
+ }
583
+
584
+ async upsert(prisma: PrismaClient,
585
+ id: string,
586
+ chatSession: any,
587
+ replyToId: string | null | undefined,
588
+ fromUserProfileId: string | undefined,
589
+ fromChatParticipantId: string | undefined,
590
+ toChatParticipantId: string | undefined,
591
+ externalId: string | null | undefined,
592
+ sentByAi: boolean | undefined,
593
+ message: string | undefined) {
594
+
595
+ // Debug
596
+ const fnName = `${this.clName}.upsert()`
597
+
598
+ // If the id is specified, try to get it
599
+ if (id != null) {
600
+
601
+ const chatMessage = await
602
+ this.getById(
603
+ prisma,
604
+ id,
605
+ chatSession)
606
+
607
+ if (chatMessage != null) {
608
+ id = chatMessage.id
609
+ }
610
+ }
611
+
612
+ // Upsert
613
+ if (id == null) {
614
+
615
+ // Validate for create (mainly for type validation of the create call)
616
+ if (replyToId === undefined) {
617
+ console.error(`${fnName}: id is null and replyToId is undefined`)
618
+ throw 'Prisma error'
619
+ }
620
+
621
+ if (fromUserProfileId == null) {
622
+ console.error(`${fnName}: id is null and fromUserProfileId is null`)
623
+ throw 'Prisma error'
624
+ }
625
+
626
+ if (fromChatParticipantId === undefined) {
627
+ console.error(`${fnName}: id is null and fromChatParticipantId is undefined`)
628
+ throw 'Prisma error'
629
+ }
630
+
631
+ if (toChatParticipantId === undefined) {
632
+ console.error(`${fnName}: id is null and toChatParticipantId is undefined`)
633
+ throw 'Prisma error'
634
+ }
635
+
636
+ if (externalId === undefined) {
637
+ console.error(`${fnName}: id is null and externalId is undefined`)
638
+ throw 'Prisma error'
639
+ }
640
+
641
+ if (sentByAi === undefined) {
642
+ console.error(`${fnName}: id is null and sentByAi is undefined`)
643
+ throw 'Prisma error'
644
+ }
645
+
646
+ if (message === undefined) {
647
+ console.error(`${fnName}: id is null and message is undefined`)
648
+ throw 'Prisma error'
649
+ }
650
+
651
+ // Create
652
+ return await this.create(
653
+ prisma,
654
+ id,
655
+ chatSession,
656
+ replyToId,
657
+ fromUserProfileId,
658
+ fromChatParticipantId,
659
+ toChatParticipantId,
660
+ externalId,
661
+ sentByAi,
662
+ message)
663
+ } else {
664
+
665
+ // Update
666
+ return await this.update(
667
+ prisma,
668
+ id,
669
+ chatSession,
670
+ replyToId,
671
+ fromChatParticipantId,
672
+ toChatParticipantId,
673
+ externalId,
674
+ sentByAi,
675
+ message)
676
+ }
677
+ }
678
+ }