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,95 @@
1
+ import { PrismaClient } from '@/prisma/client'
2
+ import { CustomError } from '../../types/errors'
3
+ import { TechModel } from '../../models/tech/tech-model'
4
+ import { RateLimitedApiModel } from '../../models/tech/rate-limited-api-model'
5
+ import { RateLimitedApiEventModel } from '../../models/tech/rate-limited-api-event-model'
6
+
7
+ export class ApiUsageBaseService {
8
+
9
+ // Consts
10
+ clName = 'ApiUsageBaseService'
11
+
12
+ // Models
13
+ rateLimitedApiEventModel = new RateLimitedApiEventModel()
14
+ rateLimitedApiModel = new RateLimitedApiModel()
15
+ techModel = new TechModel()
16
+
17
+ // Code
18
+ async isRateLimited(
19
+ prisma: PrismaClient,
20
+ variantName: string | undefined = undefined,
21
+ techId: string | undefined = undefined) {
22
+
23
+ // Debug
24
+ const fnName = `${this.clName}.isRateLimited()`
25
+
26
+ // Validate
27
+ if (techId == null &&
28
+ variantName == null) {
29
+
30
+ throw new CustomError(`Either a techId or variantName must be specified`)
31
+ }
32
+
33
+ // Get the techId for the Apollo.io API
34
+ if (techId == null &&
35
+ variantName != null) {
36
+
37
+ const tech = await
38
+ this.techModel.getByVariantName(
39
+ prisma,
40
+ variantName)
41
+
42
+ techId = tech.id
43
+ }
44
+
45
+ if (techId == null) {
46
+ throw new CustomError(`techId not found`)
47
+ }
48
+
49
+ // Get API rate limiting data
50
+ const rateLimitedApi = await
51
+ this.rateLimitedApiModel.getByTechId(
52
+ prisma,
53
+ techId)
54
+
55
+ // Return null if not a rate-limited tech
56
+ if (rateLimitedApi == null) {
57
+ return null
58
+ }
59
+
60
+ // Determine if rate-limited
61
+ const eventCount = await
62
+ this.rateLimitedApiEventModel.getUserSentForLastSpecifiedMinutes(
63
+ prisma,
64
+ 1) // For the last minute
65
+
66
+ // console.log(`${fnName}: is eventCount: ${eventCount} >= ` +
67
+ // `rateLimitedApi.ratePerMinute: ${rateLimitedApi.ratePerMinute}`)
68
+
69
+ // Is the API currently rate limited?
70
+ var isRateLimited = false
71
+ var waitSeconds: number | null = 0
72
+
73
+ if (eventCount >= rateLimitedApi.ratePerMinute) {
74
+ isRateLimited = true
75
+
76
+ // Get last record within the window
77
+ waitSeconds = await
78
+ this.rateLimitedApiEventModel.getWaitSecondsSinceLastSpecifiedMinutes(
79
+ prisma,
80
+ 1) // For the last minute
81
+
82
+ if (waitSeconds == null ||
83
+ waitSeconds === 0) {
84
+
85
+ isRateLimited = false
86
+ }
87
+ }
88
+
89
+ return {
90
+ isRateLimited: isRateLimited,
91
+ waitSeconds: waitSeconds,
92
+ rateLimitedApiId: rateLimitedApi.id
93
+ }
94
+ }
95
+ }
@@ -0,0 +1,24 @@
1
+ import chalk from 'chalk'
2
+ import * as readline from 'node:readline/promises'
3
+ import { stdin as input, stdout } from 'node:process'
4
+
5
+ // Note: this class's console services can clash with other CLI libraries.
6
+
7
+ class ConsoleService {
8
+ private rl = readline.createInterface({ input })
9
+
10
+ async askQuestion(query: string): Promise<string> {
11
+
12
+ // Reuse the class-level interface
13
+ stdout.write(chalk.bold.cyan(query))
14
+ const answer = await this.rl.question('')
15
+ return answer
16
+ }
17
+
18
+ close(): void {
19
+ this.rl.close()
20
+ }
21
+ }
22
+
23
+ // Export a single instance so that the interface is only created once
24
+ export const consoleService = new ConsoleService()
@@ -0,0 +1,119 @@
1
+ export type PgRecordEstimateInput = {
2
+ numberFields?: number[]
3
+ booleanFields?: boolean[]
4
+ stringFields?: string[]
5
+ jsonFields?: any[]
6
+
7
+ bigStringValues?: any[]
8
+ bigJsonValues?: any[]
9
+ }
10
+
11
+ export class PgEstimateSizeService {
12
+
13
+ // Consts
14
+ clName = 'PgEstimateSizeService'
15
+
16
+ // Code
17
+ estimateRecordSize(
18
+ records: PgRecordEstimateInput[]
19
+ ): { totalInline: number; totalToast: number; total: number } {
20
+
21
+ // Debug
22
+ const fnName = `${this.clName}.estimateRecordSize()`
23
+
24
+ // console.log(`${fnName}: starting..`)
25
+
26
+ // Consts and initial vars
27
+ const TOAST_THRESHOLD = 2000 // bytes
28
+ const ROW_OVERHEAD = 24
29
+ const TOAST_POINTER_SIZE = 20
30
+
31
+ let totalInline = 0
32
+ let totalToast = 0
33
+
34
+ // Per record
35
+ for (const record of records) {
36
+
37
+ // Debug
38
+ // console.log(`${fnName}: record: ` + JSON.stringify(record))
39
+
40
+ // Start with initial rowSize
41
+ let rowSize = ROW_OVERHEAD
42
+
43
+ // Estimate primitive sizes
44
+ rowSize += (record.numberFields?.length ?? 0) * 8
45
+ rowSize += (record.booleanFields?.length ?? 0) * 1
46
+
47
+ if (record.stringFields) {
48
+ for (const str of record.stringFields) {
49
+ if (str != null) {
50
+ rowSize += Buffer.byteLength(str, 'utf8')
51
+ }
52
+ }
53
+ }
54
+
55
+ if (record.jsonFields) {
56
+ for (const json of record.jsonFields) {
57
+ if (json != null) {
58
+ rowSize += Buffer.byteLength(JSON.stringify(json), 'utf8')
59
+ }
60
+ }
61
+ }
62
+
63
+ // Estimate for bigStringValues
64
+ if (record.bigStringValues) {
65
+
66
+ for (const bigStringValue of record.bigStringValues) {
67
+
68
+ if (bigStringValue == null) {
69
+ continue
70
+ }
71
+
72
+ const strSize = Buffer.byteLength(bigStringValue, 'utf8')
73
+
74
+ if (strSize > TOAST_THRESHOLD) {
75
+ rowSize += TOAST_POINTER_SIZE
76
+ totalToast += strSize
77
+ } else {
78
+ rowSize += strSize
79
+ }
80
+
81
+ totalInline += rowSize
82
+ }
83
+ }
84
+
85
+ // Estimate for bigJsonValues
86
+ if (record.bigJsonValues) {
87
+
88
+ for (const bigJsonValue of record.bigJsonValues) {
89
+
90
+ if (bigJsonValue == null) {
91
+ continue
92
+ }
93
+
94
+ const jsonStr = JSON.stringify(bigJsonValue)
95
+ const jsonSize = Buffer.byteLength(jsonStr, 'utf8')
96
+
97
+ if (jsonSize > TOAST_THRESHOLD) {
98
+ rowSize += TOAST_POINTER_SIZE
99
+ totalToast += jsonSize
100
+ } else {
101
+ rowSize += jsonSize
102
+ }
103
+
104
+ totalInline += rowSize
105
+ }
106
+ }
107
+ }
108
+
109
+ // Debug
110
+ // console.log(`${fnName}: returning..`)
111
+
112
+ // Return
113
+ return {
114
+ totalInline,
115
+ totalToast,
116
+ total: totalInline + totalToast
117
+ }
118
+ }
119
+ }
@@ -0,0 +1,7 @@
1
+ export interface WalkDirConfig {
2
+
3
+ recursive: boolean,
4
+ fileExts?: string[]
5
+ ignoreDirs?: Set<string>
6
+ ignoreFilePatterns?: RegExp[]
7
+ }
@@ -0,0 +1,135 @@
1
+ const fs = require('fs')
2
+ const path = require('path')
3
+ import { WalkDirConfig } from './types'
4
+
5
+ export class WalkDirService {
6
+
7
+ // Consts
8
+ clName = 'WalkDirService'
9
+
10
+ // Code
11
+ private normalizePath(p: string) {
12
+ return path.resolve(p)
13
+ }
14
+
15
+ private isPathIgnored(
16
+ fullPath: string,
17
+ root: string,
18
+ config: WalkDirConfig): boolean {
19
+
20
+ // Validate
21
+ if (config.ignoreDirs == null) {
22
+ return false
23
+ }
24
+
25
+ // Is path ignored?
26
+ const normalizedPath = this.normalizePath(fullPath)
27
+ const relative = path.relative(root, normalizedPath)
28
+ const segments = relative.split(path.sep)
29
+
30
+ return segments.some((s: string) => config.ignoreDirs?.has(s))
31
+ }
32
+
33
+ private isFileIgnored(
34
+ fullPath: string,
35
+ root: string,
36
+ config: WalkDirConfig): boolean {
37
+
38
+ // Validate
39
+ if (config.ignoreFilePatterns == null) {
40
+ return false
41
+ }
42
+
43
+ // Is path ignored?
44
+ if (this.isPathIgnored(
45
+ fullPath,
46
+ root,
47
+ config)) return true
48
+
49
+ const filename = path.basename(fullPath)
50
+
51
+ return config.ignoreFilePatterns.some((re) => re.test(filename))
52
+ }
53
+
54
+ async walkDir(
55
+ dir: string,
56
+ fileList: string[] = [],
57
+ config: WalkDirConfig,
58
+ root?: string): Promise<string[]> {
59
+
60
+ // Debug
61
+ const fnName = `${this.clName}.walkDir()`
62
+
63
+ // Init root
64
+ if (root == null) {
65
+ root = dir
66
+ }
67
+
68
+ // Ignore this path?
69
+ const normalizedDir = this.normalizePath(dir)
70
+
71
+ if (config.ignoreDirs != null) {
72
+
73
+ if (this.isPathIgnored(
74
+ normalizedDir,
75
+ root,
76
+ config)) return []
77
+ }
78
+
79
+ // Read the dir
80
+ const files = await
81
+ fs.promises.readdir(
82
+ dir,
83
+ { withFileTypes: true })
84
+
85
+ // Walk files
86
+ for (const file of files) {
87
+
88
+ // Get filePath
89
+ const filePath = path.join(dir, file.name)
90
+
91
+ // If a directory, call this function (if recursive)
92
+ if (file.isDirectory()) {
93
+
94
+ // Directories
95
+ if (config.recursive === true) {
96
+
97
+ await this.walkDir(
98
+ filePath,
99
+ fileList,
100
+ config,
101
+ root)
102
+
103
+ continue
104
+ }
105
+
106
+ }
107
+
108
+ if (config.ignoreFilePatterns != null &&
109
+ this.isFileIgnored(
110
+ filePath,
111
+ root,
112
+ config)) {
113
+
114
+ continue
115
+ }
116
+
117
+ // Files
118
+ // In fileExts list?
119
+ if (config.fileExts != null &&
120
+ !config.fileExts.includes(path.extname(filePath))) {
121
+
122
+ continue
123
+ }
124
+
125
+ // Add file to list
126
+ fileList.push(filePath)
127
+ }
128
+
129
+ // Debug
130
+ // console.log(`${fnName}: fileList: ${fileList.length}`)
131
+
132
+ // Return file list
133
+ return fileList
134
+ }
135
+ }