@friggframework/core 2.0.0--canary.545.ccb5010.0 → 2.0.0--canary.549.922386d.0

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 (598) hide show
  1. package/CHANGELOG.md +67 -66
  2. package/CLAUDE.md +124 -148
  3. package/README.md +130 -165
  4. package/assertions/jest.config.ts +7 -0
  5. package/core/CLAUDE.md +156 -222
  6. package/database/MONGODB_TRANSACTION_FIX.md +52 -72
  7. package/database/encryption/README.md +36 -53
  8. package/database/jest.config.ts +7 -0
  9. package/database/models/WorkflowExecutionModel.ts +315 -0
  10. package/database/models/WorkflowModel.ts +129 -0
  11. package/docs/PROCESS_MANAGEMENT_QUEUE_SPEC.md +80 -135
  12. package/generated/prisma-mongodb/edge.js +5 -60
  13. package/generated/prisma-mongodb/index-browser.js +1 -49
  14. package/generated/prisma-mongodb/index.d.ts +57 -4019
  15. package/generated/prisma-mongodb/index.js +11 -66
  16. package/generated/prisma-mongodb/package.json +1 -1
  17. package/generated/prisma-mongodb/{libquery_engine-debian-openssl-3.0.x.so.node → query-engine-debian-openssl-3.0.x} +0 -0
  18. package/generated/prisma-mongodb/{libquery_engine-rhel-openssl-3.0.x.so.node → query-engine-rhel-openssl-3.0.x} +0 -0
  19. package/generated/prisma-mongodb/runtime/binary.d.ts +1 -0
  20. package/generated/prisma-mongodb/runtime/binary.js +289 -0
  21. package/generated/prisma-mongodb/schema.prisma +2 -89
  22. package/generated/prisma-mongodb/wasm.js +5 -60
  23. package/generated/prisma-postgresql/edge.js +5 -59
  24. package/generated/prisma-postgresql/index-browser.js +1 -48
  25. package/generated/prisma-postgresql/index.d.ts +44 -4732
  26. package/generated/prisma-postgresql/index.js +11 -65
  27. package/generated/prisma-postgresql/package.json +1 -1
  28. package/generated/prisma-postgresql/{libquery_engine-debian-openssl-3.0.x.so.node → query-engine-debian-openssl-3.0.x} +0 -0
  29. package/generated/prisma-postgresql/{libquery_engine-rhel-openssl-3.0.x.so.node → query-engine-rhel-openssl-3.0.x} +0 -0
  30. package/generated/prisma-postgresql/runtime/binary.d.ts +1 -0
  31. package/generated/prisma-postgresql/runtime/binary.js +289 -0
  32. package/generated/prisma-postgresql/schema.prisma +2 -87
  33. package/generated/prisma-postgresql/wasm.js +5 -59
  34. package/handlers/WEBHOOKS.md +81 -104
  35. package/handlers/routers/HEALTHCHECK.md +135 -170
  36. package/integrations/WEBHOOK-QUICKSTART.md +14 -21
  37. package/jest-global-setup-noop.ts +3 -0
  38. package/jest-global-teardown-noop.ts +3 -0
  39. package/jest-resolver.ts +36 -0
  40. package/jest-setup.ts +1 -0
  41. package/jest-teardown.ts +1 -0
  42. package/jest.config.ts +20 -0
  43. package/package.json +32 -8
  44. package/prisma-mongodb/schema.prisma +2 -89
  45. package/prisma-postgresql/schema.prisma +2 -87
  46. package/src/application/commands/command-utils.ts +17 -0
  47. package/src/application/commands/credential-commands.ts +226 -0
  48. package/src/application/commands/entity-commands.ts +265 -0
  49. package/src/application/commands/integration-commands.test.ts +158 -0
  50. package/src/application/commands/integration-commands.ts +205 -0
  51. package/{application/commands/scheduler-commands.js → src/application/commands/scheduler-commands.ts} +82 -104
  52. package/{application/commands/user-commands.js → src/application/commands/user-commands.ts} +72 -96
  53. package/src/application/index.ts +82 -0
  54. package/src/assertions/get.ts +196 -0
  55. package/src/assertions/index.ts +9 -0
  56. package/src/associations/association.ts +103 -0
  57. package/src/associations/index.ts +3 -0
  58. package/src/core/Delegate.ts +41 -0
  59. package/src/core/Worker.test.ts +158 -0
  60. package/src/core/Worker.ts +86 -0
  61. package/{core/create-handler.js → src/core/create-handler.ts} +43 -15
  62. package/src/core/index.ts +15 -0
  63. package/src/core/load-installed-modules.ts +31 -0
  64. package/{core/secrets-to-env.js → src/core/secrets-to-env.ts} +14 -14
  65. package/src/credential/index.ts +9 -0
  66. package/src/credential/repositories/credential-repository-documentdb.ts +185 -0
  67. package/src/credential/repositories/credential-repository-factory.ts +26 -0
  68. package/src/credential/repositories/credential-repository-interface.ts +62 -0
  69. package/src/credential/repositories/credential-repository-mongo.ts +163 -0
  70. package/src/credential/repositories/credential-repository-postgres.ts +169 -0
  71. package/src/credential/repositories/credential-repository.ts +162 -0
  72. package/src/credential/use-cases/get-credential-for-user.ts +27 -0
  73. package/src/credential/use-cases/update-authentication-status.ts +17 -0
  74. package/src/database/adapters/index.ts +1 -0
  75. package/src/database/adapters/lambda-invoker.test.ts +104 -0
  76. package/src/database/adapters/lambda-invoker.ts +61 -0
  77. package/src/database/config.ts +142 -0
  78. package/src/database/documentdb-encryption-service.ts +191 -0
  79. package/src/database/documentdb-utils.ts +160 -0
  80. package/src/database/encryption/encryption-schema-registry.test.ts +397 -0
  81. package/src/database/encryption/encryption-schema-registry.ts +248 -0
  82. package/src/database/encryption/field-encryption-service.test.ts +511 -0
  83. package/{database/encryption/field-encryption-service.js → src/database/encryption/field-encryption-service.ts} +46 -67
  84. package/src/database/encryption/index.ts +24 -0
  85. package/{database/encryption/logger.js → src/database/encryption/logger.ts} +19 -21
  86. package/src/database/encryption/mongo-decryption-fix-verification.test.ts +337 -0
  87. package/src/database/encryption/postgres-decryption-fix-verification.test.ts +335 -0
  88. package/src/database/encryption/postgres-relation-decryption.test.ts +205 -0
  89. package/src/database/encryption/prisma-encryption-extension.test.ts +433 -0
  90. package/{database/encryption/prisma-encryption-extension.js → src/database/encryption/prisma-encryption-extension.ts} +58 -77
  91. package/src/database/index.ts +126 -0
  92. package/src/database/prisma.test.ts +65 -0
  93. package/src/database/prisma.ts +166 -0
  94. package/{database/repositories/health-check-repository-documentdb.js → src/database/repositories/health-check-repository-documentdb.ts} +34 -45
  95. package/src/database/repositories/health-check-repository-factory.ts +38 -0
  96. package/src/database/repositories/health-check-repository-interface.ts +20 -0
  97. package/src/database/repositories/health-check-repository-mongodb.test.ts +178 -0
  98. package/src/database/repositories/health-check-repository-mongodb.ts +79 -0
  99. package/src/database/repositories/health-check-repository-postgres.test.ts +94 -0
  100. package/src/database/repositories/health-check-repository-postgres.ts +70 -0
  101. package/src/database/repositories/index.ts +10 -0
  102. package/src/database/repositories/migration-status-repository-s3.test.ts +150 -0
  103. package/src/database/repositories/migration-status-repository-s3.ts +127 -0
  104. package/src/database/use-cases/check-database-health-use-case.test.ts +131 -0
  105. package/src/database/use-cases/check-database-health-use-case.ts +30 -0
  106. package/src/database/use-cases/check-database-state-use-case.test.ts +131 -0
  107. package/src/database/use-cases/check-database-state-use-case.ts +66 -0
  108. package/src/database/use-cases/check-encryption-health-use-case.test.ts +183 -0
  109. package/{database/use-cases/check-encryption-health-use-case.js → src/database/use-cases/check-encryption-health-use-case.ts} +38 -15
  110. package/src/database/use-cases/get-database-state-via-worker-use-case.test.ts +126 -0
  111. package/src/database/use-cases/get-database-state-via-worker-use-case.ts +31 -0
  112. package/src/database/use-cases/get-migration-status-use-case.test.ts +160 -0
  113. package/src/database/use-cases/get-migration-status-use-case.ts +57 -0
  114. package/src/database/use-cases/index.ts +14 -0
  115. package/src/database/use-cases/run-database-migration-use-case.test.ts +350 -0
  116. package/src/database/use-cases/run-database-migration-use-case.ts +113 -0
  117. package/src/database/use-cases/test-encryption-use-case.ts +197 -0
  118. package/src/database/use-cases/trigger-database-migration-use-case.test.ts +256 -0
  119. package/src/database/use-cases/trigger-database-migration-use-case.ts +131 -0
  120. package/src/database/utils/index.ts +26 -0
  121. package/src/database/utils/mongodb-collection-utils.test.ts +133 -0
  122. package/src/database/utils/mongodb-collection-utils.ts +45 -0
  123. package/src/database/utils/mongodb-schema-init.test.ts +152 -0
  124. package/src/database/utils/mongodb-schema-init.ts +51 -0
  125. package/src/database/utils/prisma-runner.test.ts +513 -0
  126. package/src/database/utils/prisma-runner.ts +336 -0
  127. package/src/database/utils/prisma-schema-parser.test.ts +283 -0
  128. package/src/database/utils/prisma-schema-parser.ts +90 -0
  129. package/src/declarations.d.ts +141 -0
  130. package/src/encrypt/Cryptor.test.ts +137 -0
  131. package/src/encrypt/Cryptor.ts +92 -0
  132. package/{encrypt/aes.js → src/encrypt/aes.ts} +4 -9
  133. package/src/encrypt/index.ts +2 -0
  134. package/src/errors/base-error.test.ts +32 -0
  135. package/src/errors/base-error.ts +15 -0
  136. package/src/errors/client-safe-error.ts +12 -0
  137. package/src/errors/fetch-error.test.ts +105 -0
  138. package/{errors/fetch-error.js → src/errors/fetch-error.ts} +36 -17
  139. package/src/errors/halt-error.test.ts +11 -0
  140. package/src/errors/halt-error.ts +10 -0
  141. package/src/errors/index.ts +9 -0
  142. package/src/errors/validation-errors.test.ts +122 -0
  143. package/src/errors/validation-errors.ts +33 -0
  144. package/src/handlers/app-definition-loader.ts +52 -0
  145. package/src/handlers/app-handler-helpers.ts +64 -0
  146. package/src/handlers/auth-flow.integration.test.ts +149 -0
  147. package/{handlers/backend-utils.js → src/handlers/backend-utils.ts} +55 -52
  148. package/src/handlers/database-migration-handler.ts +172 -0
  149. package/src/handlers/index.ts +22 -0
  150. package/src/handlers/integration-event-dispatcher.test.ts +211 -0
  151. package/{handlers/integration-event-dispatcher.js → src/handlers/integration-event-dispatcher.ts} +33 -9
  152. package/src/handlers/routers/auth.ts +20 -0
  153. package/src/handlers/routers/db-migration.handler.ts +28 -0
  154. package/src/handlers/routers/db-migration.test.ts +69 -0
  155. package/src/handlers/routers/db-migration.ts +173 -0
  156. package/src/handlers/routers/health.test.ts +251 -0
  157. package/src/handlers/routers/health.ts +390 -0
  158. package/src/handlers/routers/index.ts +8 -0
  159. package/src/handlers/routers/integration-defined-routers.ts +50 -0
  160. package/src/handlers/routers/integration-webhook-routers.test.ts +116 -0
  161. package/src/handlers/routers/integration-webhook-routers.ts +72 -0
  162. package/src/handlers/routers/user.ts +63 -0
  163. package/{handlers/routers/websocket.js → src/handlers/routers/websocket.ts} +25 -28
  164. package/{handlers/use-cases/check-external-apis-health-use-case.js → src/handlers/use-cases/check-external-apis-health-use-case.ts} +31 -12
  165. package/src/handlers/use-cases/check-integrations-health-use-case.test.ts +124 -0
  166. package/src/handlers/use-cases/check-integrations-health-use-case.ts +69 -0
  167. package/src/handlers/use-cases/index.ts +9 -0
  168. package/src/handlers/webhook-flow.integration.test.ts +318 -0
  169. package/src/handlers/workers/db-migration.test.ts +168 -0
  170. package/src/handlers/workers/db-migration.ts +173 -0
  171. package/src/handlers/workers/index.ts +3 -0
  172. package/src/handlers/workers/integration-defined-workers.test.ts +254 -0
  173. package/src/handlers/workers/integration-defined-workers.ts +35 -0
  174. package/src/index.ts +400 -0
  175. package/src/infrastructure/index.ts +14 -0
  176. package/src/infrastructure/scheduler/eventbridge-scheduler-adapter.ts +148 -0
  177. package/src/infrastructure/scheduler/index.ts +19 -0
  178. package/{infrastructure/scheduler/mock-scheduler-adapter.js → src/infrastructure/scheduler/mock-scheduler-adapter.ts} +25 -59
  179. package/src/infrastructure/scheduler/scheduler-service-factory.ts +50 -0
  180. package/src/infrastructure/scheduler/scheduler-service-interface.ts +31 -0
  181. package/src/integrations/index.ts +79 -0
  182. package/src/integrations/integration-base.module-keys.test.ts +204 -0
  183. package/{integrations/integration-base.js → src/integrations/integration-base.ts} +161 -169
  184. package/src/integrations/integration-router.ts +645 -0
  185. package/src/integrations/options.ts +57 -0
  186. package/{integrations/repositories/integration-mapping-repository-documentdb.js → src/integrations/repositories/integration-mapping-repository-documentdb.ts} +54 -134
  187. package/src/integrations/repositories/integration-mapping-repository-factory.ts +27 -0
  188. package/src/integrations/repositories/integration-mapping-repository-interface.ts +56 -0
  189. package/src/integrations/repositories/integration-mapping-repository-mongo.ts +89 -0
  190. package/src/integrations/repositories/integration-mapping-repository-postgres.ts +129 -0
  191. package/src/integrations/repositories/integration-mapping-repository.ts +71 -0
  192. package/{integrations/repositories/integration-repository-documentdb.js → src/integrations/repositories/integration-repository-documentdb.ts} +51 -89
  193. package/src/integrations/repositories/integration-repository-factory.ts +27 -0
  194. package/src/integrations/repositories/integration-repository-interface.ts +52 -0
  195. package/src/integrations/repositories/integration-repository-mongo.ts +186 -0
  196. package/src/integrations/repositories/integration-repository-postgres.ts +227 -0
  197. package/{integrations/repositories/process-repository-documentdb.js → src/integrations/repositories/process-repository-documentdb.ts} +57 -124
  198. package/src/integrations/repositories/process-repository-factory.ts +27 -0
  199. package/src/integrations/repositories/process-repository-interface.ts +34 -0
  200. package/src/integrations/repositories/process-repository-mongo.ts +102 -0
  201. package/src/integrations/repositories/process-repository-postgres.ts +123 -0
  202. package/{integrations/tests/doubles/config-capturing-integration.js → src/integrations/tests/doubles/config-capturing-integration.ts} +21 -22
  203. package/src/integrations/tests/doubles/dummy-integration-class.ts +109 -0
  204. package/src/integrations/tests/doubles/test-integration-repository.ts +100 -0
  205. package/src/integrations/tests/integration-router-multi-auth.test.ts +531 -0
  206. package/src/integrations/tests/use-cases/create-integration.test.ts +131 -0
  207. package/src/integrations/tests/use-cases/delete-integration-for-user.test.ts +150 -0
  208. package/src/integrations/tests/use-cases/find-integration-context-by-external-entity-id.test.ts +92 -0
  209. package/src/integrations/tests/use-cases/get-integration-for-user.test.ts +150 -0
  210. package/src/integrations/tests/use-cases/get-integration-instance.test.ts +176 -0
  211. package/src/integrations/tests/use-cases/get-integrations-for-user.test.ts +176 -0
  212. package/src/integrations/tests/use-cases/get-possible-integrations.test.ts +188 -0
  213. package/src/integrations/tests/use-cases/update-integration-messages.test.ts +142 -0
  214. package/src/integrations/tests/use-cases/update-integration-status.test.ts +103 -0
  215. package/src/integrations/tests/use-cases/update-integration.test.ts +208 -0
  216. package/src/integrations/types.ts +195 -0
  217. package/src/integrations/use-cases/create-integration.ts +70 -0
  218. package/src/integrations/use-cases/create-process.test.ts +172 -0
  219. package/src/integrations/use-cases/create-process.ts +77 -0
  220. package/src/integrations/use-cases/delete-integration-for-user.ts +87 -0
  221. package/src/integrations/use-cases/find-integration-context-by-external-entity-id.ts +92 -0
  222. package/src/integrations/use-cases/get-integration-for-user.ts +74 -0
  223. package/src/integrations/use-cases/get-integration-instance-by-definition.ts +69 -0
  224. package/{integrations/use-cases/get-integration-instance.js → src/integrations/use-cases/get-integration-instance.ts} +20 -31
  225. package/src/integrations/use-cases/get-integrations-for-user.ts +75 -0
  226. package/src/integrations/use-cases/get-possible-integrations.ts +15 -0
  227. package/src/integrations/use-cases/get-process.test.ts +181 -0
  228. package/src/integrations/use-cases/get-process.ts +49 -0
  229. package/src/integrations/use-cases/index.ts +16 -0
  230. package/src/integrations/use-cases/load-integration-context-full.test.ts +316 -0
  231. package/src/integrations/use-cases/load-integration-context.test.ts +115 -0
  232. package/{integrations/use-cases/load-integration-context.js → src/integrations/use-cases/load-integration-context.ts} +34 -14
  233. package/src/integrations/use-cases/update-integration-messages.ts +26 -0
  234. package/src/integrations/use-cases/update-integration-status.ts +17 -0
  235. package/src/integrations/use-cases/update-integration.ts +76 -0
  236. package/src/integrations/use-cases/update-process-metrics.test.ts +278 -0
  237. package/src/integrations/use-cases/update-process-metrics.ts +128 -0
  238. package/src/integrations/use-cases/update-process-state.test.ts +249 -0
  239. package/src/integrations/use-cases/update-process-state.ts +73 -0
  240. package/src/integrations/utils/map-integration-dto.ts +55 -0
  241. package/src/lambda/TimeoutCatcher.test.ts +69 -0
  242. package/src/lambda/TimeoutCatcher.ts +57 -0
  243. package/src/lambda/index.ts +2 -0
  244. package/src/logs/index.ts +2 -0
  245. package/src/logs/logger.test.ts +76 -0
  246. package/{logs/logger.js → src/logs/logger.ts} +15 -10
  247. package/src/modules/ModuleConstants.ts +11 -0
  248. package/src/modules/index.ts +38 -0
  249. package/{modules/module-factory.js → src/modules/module-factory.ts} +16 -20
  250. package/src/modules/module-hydration.test.ts +203 -0
  251. package/src/modules/module.ts +283 -0
  252. package/src/modules/repositories/module-repository-documentdb.ts +303 -0
  253. package/src/modules/repositories/module-repository-factory.ts +29 -0
  254. package/src/modules/repositories/module-repository-interface.ts +73 -0
  255. package/src/modules/repositories/module-repository-mongo.ts +260 -0
  256. package/src/modules/repositories/module-repository-postgres.ts +293 -0
  257. package/src/modules/repositories/module-repository.ts +210 -0
  258. package/src/modules/requester/api-key.ts +58 -0
  259. package/src/modules/requester/basic.ts +49 -0
  260. package/src/modules/requester/oauth-2.test.ts +425 -0
  261. package/src/modules/requester/oauth-2.ts +298 -0
  262. package/src/modules/requester/requester.test.ts +28 -0
  263. package/src/modules/requester/requester.ts +212 -0
  264. package/{modules/test/mock-api/api.js → src/modules/test/mock-api/api.ts} +6 -8
  265. package/{modules/test/mock-api/definition.js → src/modules/test/mock-api/definition.ts} +15 -21
  266. package/src/modules/test/mock-api/mocks/hubspot.ts +41 -0
  267. package/src/modules/tests/doubles/test-module-factory.ts +11 -0
  268. package/{modules/tests/doubles/test-module-repository.js → src/modules/tests/doubles/test-module-repository.ts} +7 -7
  269. package/src/modules/tests/module-on-token-update.test.ts +125 -0
  270. package/src/modules/use-cases/get-entities-for-user.ts +36 -0
  271. package/src/modules/use-cases/get-entity-options-by-id.ts +64 -0
  272. package/src/modules/use-cases/get-entity-options-by-type.ts +25 -0
  273. package/src/modules/use-cases/get-module-instance-from-type.ts +23 -0
  274. package/src/modules/use-cases/get-module.ts +70 -0
  275. package/{modules/use-cases/process-authorization-callback.js → src/modules/use-cases/process-authorization-callback.ts} +50 -49
  276. package/src/modules/use-cases/refresh-entity-options.ts +65 -0
  277. package/src/modules/use-cases/test-module-auth.ts +64 -0
  278. package/src/modules/utils/map-module-dto.ts +23 -0
  279. package/src/queues/index.ts +1 -0
  280. package/src/queues/queuer-util.test.ts +131 -0
  281. package/src/queues/queuer-util.ts +59 -0
  282. package/src/syncs/index.ts +14 -0
  283. package/{syncs/manager.js → src/syncs/manager.ts} +140 -142
  284. package/{syncs/repositories/sync-repository-documentdb.js → src/syncs/repositories/sync-repository-documentdb.ts} +46 -67
  285. package/src/syncs/repositories/sync-repository-factory.ts +30 -0
  286. package/src/syncs/repositories/sync-repository-interface.ts +68 -0
  287. package/src/syncs/repositories/sync-repository-mongo.ts +149 -0
  288. package/src/syncs/repositories/sync-repository-postgres.ts +221 -0
  289. package/src/syncs/sync.ts +119 -0
  290. package/src/token/index.ts +7 -0
  291. package/src/token/repositories/token-repository-documentdb.ts +110 -0
  292. package/src/token/repositories/token-repository-factory.ts +26 -0
  293. package/src/token/repositories/token-repository-interface.ts +57 -0
  294. package/src/token/repositories/token-repository-mongo.ts +81 -0
  295. package/src/token/repositories/token-repository-postgres.ts +105 -0
  296. package/src/token/repositories/token-repository.ts +125 -0
  297. package/src/user/index.ts +17 -0
  298. package/src/user/repositories/user-repository-documentdb.ts +286 -0
  299. package/src/user/repositories/user-repository-factory.ts +26 -0
  300. package/src/user/repositories/user-repository-interface.ts +109 -0
  301. package/src/user/repositories/user-repository-mongo.ts +130 -0
  302. package/src/user/repositories/user-repository-postgres.ts +175 -0
  303. package/{user/tests/doubles/test-user-repository.js → src/user/tests/doubles/test-user-repository.ts} +16 -19
  304. package/src/user/tests/use-cases/create-individual-user.test.ts +24 -0
  305. package/src/user/tests/use-cases/create-organization-user.test.ts +28 -0
  306. package/src/user/tests/use-cases/create-token-for-user-id.test.ts +18 -0
  307. package/src/user/tests/use-cases/get-user-from-adopter-jwt.test.ts +113 -0
  308. package/src/user/tests/use-cases/get-user-from-bearer-token.test.ts +64 -0
  309. package/src/user/tests/use-cases/get-user-from-x-frigg-headers.test.ts +440 -0
  310. package/src/user/tests/use-cases/login-user.test.ts +220 -0
  311. package/src/user/use-cases/authenticate-user.ts +98 -0
  312. package/src/user/use-cases/authenticate-with-shared-secret.test.ts +127 -0
  313. package/src/user/use-cases/authenticate-with-shared-secret.ts +19 -0
  314. package/src/user/use-cases/create-individual-user.ts +59 -0
  315. package/src/user/use-cases/create-organization-user.ts +44 -0
  316. package/src/user/use-cases/create-token-for-user-id.ts +19 -0
  317. package/src/user/use-cases/get-user-from-adopter-jwt.ts +40 -0
  318. package/{user/use-cases/get-user-from-bearer-token.js → src/user/use-cases/get-user-from-bearer-token.ts} +23 -30
  319. package/src/user/use-cases/get-user-from-x-frigg-headers.ts +119 -0
  320. package/src/user/use-cases/login-user.ts +110 -0
  321. package/src/user/user.ts +125 -0
  322. package/{utils/backend-path.js → src/utils/backend-path.ts} +5 -8
  323. package/src/utils/index.ts +2 -0
  324. package/src/websocket/index.ts +7 -0
  325. package/src/websocket/repositories/websocket-connection-repository-documentdb.ts +93 -0
  326. package/src/websocket/repositories/websocket-connection-repository-factory.ts +26 -0
  327. package/src/websocket/repositories/websocket-connection-repository-interface.ts +47 -0
  328. package/src/websocket/repositories/websocket-connection-repository-mongo.ts +77 -0
  329. package/src/websocket/repositories/websocket-connection-repository-postgres.ts +94 -0
  330. package/src/websocket/repositories/websocket-connection-repository.test.ts +220 -0
  331. package/src/websocket/repositories/websocket-connection-repository.ts +101 -0
  332. package/tsconfig.json +17 -0
  333. package/tsconfig.test.json +10 -0
  334. package/workflows/frigg-workflow.ts +322 -0
  335. package/workflows/index.ts +205 -0
  336. package/workflows/steps/fan-out-step.ts +275 -0
  337. package/workflows/steps/function-step.ts +174 -0
  338. package/workflows/steps/index.ts +30 -0
  339. package/workflows/steps/workflow-step.ts +115 -0
  340. package/workflows/use-cases/create-workflow.ts +332 -0
  341. package/workflows/use-cases/execute-workflow-step.ts +465 -0
  342. package/workflows/use-cases/execute-workflow.ts +403 -0
  343. package/workflows/workflow-execution-repository.ts +415 -0
  344. package/workflows/workflow-execution.ts +209 -0
  345. package/workflows/workflow-queue-service.ts +379 -0
  346. package/workflows/workflow-repository.ts +295 -0
  347. package/workflows/workflow.ts +117 -0
  348. package/admin-scripts/index.js +0 -52
  349. package/admin-scripts/repositories/admin-api-key-repository-documentdb.js +0 -21
  350. package/admin-scripts/repositories/admin-api-key-repository-factory.js +0 -51
  351. package/admin-scripts/repositories/admin-api-key-repository-interface.js +0 -121
  352. package/admin-scripts/repositories/admin-api-key-repository-mongo.js +0 -155
  353. package/admin-scripts/repositories/admin-api-key-repository-postgres.js +0 -189
  354. package/admin-scripts/repositories/admin-process-repository-documentdb.js +0 -21
  355. package/admin-scripts/repositories/admin-process-repository-factory.js +0 -49
  356. package/admin-scripts/repositories/admin-process-repository-interface.js +0 -150
  357. package/admin-scripts/repositories/admin-process-repository-mongo.js +0 -213
  358. package/admin-scripts/repositories/admin-process-repository-postgres.js +0 -251
  359. package/admin-scripts/repositories/script-execution-repository-documentdb.js +0 -21
  360. package/admin-scripts/repositories/script-execution-repository-factory.js +0 -51
  361. package/admin-scripts/repositories/script-execution-repository-interface.js +0 -193
  362. package/admin-scripts/repositories/script-execution-repository-mongo.js +0 -278
  363. package/admin-scripts/repositories/script-execution-repository-postgres.js +0 -320
  364. package/admin-scripts/repositories/script-schedule-repository-documentdb.js +0 -21
  365. package/admin-scripts/repositories/script-schedule-repository-factory.js +0 -49
  366. package/admin-scripts/repositories/script-schedule-repository-interface.js +0 -108
  367. package/admin-scripts/repositories/script-schedule-repository-mongo.js +0 -179
  368. package/admin-scripts/repositories/script-schedule-repository-postgres.js +0 -210
  369. package/application/commands/admin-script-commands.js +0 -348
  370. package/application/commands/credential-commands.js +0 -245
  371. package/application/commands/entity-commands.js +0 -336
  372. package/application/commands/integration-commands.js +0 -216
  373. package/application/index.js +0 -75
  374. package/assertions/get.js +0 -149
  375. package/assertions/index.js +0 -16
  376. package/assertions/jest.config.js +0 -5
  377. package/associations/association.js +0 -80
  378. package/core/Delegate.js +0 -29
  379. package/core/Worker.js +0 -93
  380. package/core/index.js +0 -6
  381. package/core/load-installed-modules.js +0 -28
  382. package/credential/credential-router.js +0 -262
  383. package/credential/repositories/credential-repository-documentdb.js +0 -374
  384. package/credential/repositories/credential-repository-factory.js +0 -52
  385. package/credential/repositories/credential-repository-interface.js +0 -104
  386. package/credential/repositories/credential-repository-mongo.js +0 -310
  387. package/credential/repositories/credential-repository-postgres.js +0 -328
  388. package/credential/repositories/credential-repository.js +0 -302
  389. package/credential/use-cases/delete-credential-for-user.js +0 -50
  390. package/credential/use-cases/get-credential-for-user.js +0 -43
  391. package/credential/use-cases/list-credentials-for-user.js +0 -31
  392. package/credential/use-cases/reauthorize-credential.js +0 -103
  393. package/credential/use-cases/update-authentication-status.js +0 -18
  394. package/database/config.js +0 -108
  395. package/database/documentdb-encryption-service.js +0 -346
  396. package/database/documentdb-utils.js +0 -145
  397. package/database/encryption/encryption-schema-registry.js +0 -314
  398. package/database/index.js +0 -25
  399. package/database/jest.config.js +0 -5
  400. package/database/prisma.js +0 -193
  401. package/database/repositories/health-check-repository-factory.js +0 -50
  402. package/database/repositories/health-check-repository-interface.js +0 -92
  403. package/database/repositories/health-check-repository-mongodb.js +0 -89
  404. package/database/repositories/health-check-repository-postgres.js +0 -82
  405. package/database/use-cases/check-database-health-use-case.js +0 -30
  406. package/database/use-cases/check-database-state-use-case.js +0 -82
  407. package/database/use-cases/get-database-state-via-worker-use-case.js +0 -64
  408. package/database/use-cases/get-migration-status-use-case.js +0 -95
  409. package/database/use-cases/run-database-migration-use-case.js +0 -171
  410. package/database/use-cases/test-encryption-use-case.js +0 -252
  411. package/database/use-cases/trigger-database-migration-use-case.js +0 -158
  412. package/database/utils/mongodb-collection-utils.js +0 -102
  413. package/database/utils/mongodb-schema-init.js +0 -114
  414. package/database/utils/prisma-runner.js +0 -547
  415. package/database/utils/prisma-schema-parser.js +0 -182
  416. package/encrypt/Cryptor.js +0 -107
  417. package/encrypt/aes-encryption-key-provider.js +0 -82
  418. package/encrypt/encryption-key-provider-interface.js +0 -50
  419. package/encrypt/index.js +0 -3
  420. package/errors/base-error.js +0 -23
  421. package/errors/client-safe-error.js +0 -26
  422. package/errors/halt-error.js +0 -10
  423. package/errors/index.js +0 -17
  424. package/errors/validation-errors.js +0 -23
  425. package/extensions/bootstrap-runner.js +0 -43
  426. package/extensions/extension-loader.js +0 -167
  427. package/extensions/index.js +0 -37
  428. package/extensions/initialize-app.js +0 -123
  429. package/extensions/route-mounter.js +0 -59
  430. package/extensions/schema-composer.js +0 -188
  431. package/generated/prisma-mongodb/runtime/library.js +0 -146
  432. package/generated/prisma-postgresql/runtime/library.js +0 -146
  433. package/handlers/app-definition-loader.js +0 -81
  434. package/handlers/app-handler-helpers.js +0 -68
  435. package/handlers/database-migration-handler.js +0 -246
  436. package/handlers/middleware/admin-auth.js +0 -53
  437. package/handlers/routers/admin.js +0 -474
  438. package/handlers/routers/auth.js +0 -57
  439. package/handlers/routers/db-migration.handler.js +0 -28
  440. package/handlers/routers/db-migration.js +0 -362
  441. package/handlers/routers/docs.js +0 -180
  442. package/handlers/routers/health.js +0 -317
  443. package/handlers/routers/integration-defined-routers.js +0 -56
  444. package/handlers/routers/integration-webhook-routers.js +0 -88
  445. package/handlers/routers/middleware/loadUser.js +0 -39
  446. package/handlers/routers/middleware/requireAdmin.js +0 -43
  447. package/handlers/routers/middleware/requireLoggedInUser.js +0 -19
  448. package/handlers/routers/user.js +0 -79
  449. package/handlers/use-cases/check-integrations-health-use-case.js +0 -51
  450. package/handlers/workers/db-migration.js +0 -391
  451. package/handlers/workers/integration-defined-workers.js +0 -38
  452. package/index.js +0 -220
  453. package/infrastructure/scheduler/index.js +0 -37
  454. package/infrastructure/scheduler/netlify-scheduler-adapter.js +0 -185
  455. package/infrastructure/scheduler/scheduler-service-factory.js +0 -80
  456. package/infrastructure/scheduler/scheduler-service-interface.js +0 -47
  457. package/integrations/index.js +0 -25
  458. package/integrations/integration-router.js +0 -2354
  459. package/integrations/options.js +0 -80
  460. package/integrations/repositories/integration-mapping-repository-factory.js +0 -53
  461. package/integrations/repositories/integration-mapping-repository-interface.js +0 -106
  462. package/integrations/repositories/integration-mapping-repository-mongo.js +0 -161
  463. package/integrations/repositories/integration-mapping-repository-postgres.js +0 -227
  464. package/integrations/repositories/integration-mapping-repository.js +0 -156
  465. package/integrations/repositories/integration-repository-factory.js +0 -51
  466. package/integrations/repositories/integration-repository-interface.js +0 -145
  467. package/integrations/repositories/integration-repository-mongo.js +0 -303
  468. package/integrations/repositories/integration-repository-postgres.js +0 -352
  469. package/integrations/repositories/process-repository-factory.js +0 -50
  470. package/integrations/repositories/process-repository-interface.js +0 -94
  471. package/integrations/repositories/process-repository-mongo.js +0 -194
  472. package/integrations/repositories/process-repository-postgres.js +0 -217
  473. package/integrations/tests/doubles/dummy-integration-class.js +0 -178
  474. package/integrations/tests/doubles/test-integration-repository.js +0 -139
  475. package/integrations/use-cases/create-integration.js +0 -87
  476. package/integrations/use-cases/create-process.js +0 -139
  477. package/integrations/use-cases/delete-integration-for-user.js +0 -102
  478. package/integrations/use-cases/execute-proxy-request.js +0 -564
  479. package/integrations/use-cases/find-integration-context-by-external-entity-id.js +0 -72
  480. package/integrations/use-cases/get-integration-for-user.js +0 -93
  481. package/integrations/use-cases/get-integration-instance-by-definition.js +0 -73
  482. package/integrations/use-cases/get-integrations-for-user.js +0 -91
  483. package/integrations/use-cases/get-possible-integrations.js +0 -27
  484. package/integrations/use-cases/get-process.js +0 -86
  485. package/integrations/use-cases/index.js +0 -21
  486. package/integrations/use-cases/update-integration-messages.js +0 -44
  487. package/integrations/use-cases/update-integration-status.js +0 -32
  488. package/integrations/use-cases/update-integration.js +0 -92
  489. package/integrations/use-cases/update-process-metrics.js +0 -201
  490. package/integrations/use-cases/update-process-state.js +0 -121
  491. package/integrations/utils/map-integration-dto.js +0 -43
  492. package/jest-global-setup-noop.js +0 -3
  493. package/jest-global-teardown-noop.js +0 -3
  494. package/jest-setup.js +0 -2
  495. package/jest-teardown.js +0 -2
  496. package/jest.config.js +0 -21
  497. package/lambda/TimeoutCatcher.js +0 -45
  498. package/lambda/index.js +0 -3
  499. package/logs/index.js +0 -7
  500. package/modules/ModuleConstants.js +0 -10
  501. package/modules/domain/entities/AuthorizationSession.js +0 -131
  502. package/modules/domain/entities/index.js +0 -10
  503. package/modules/index.js +0 -15
  504. package/modules/module.js +0 -261
  505. package/modules/repositories/authorization-session-repository-factory.js +0 -53
  506. package/modules/repositories/authorization-session-repository-interface.js +0 -75
  507. package/modules/repositories/authorization-session-repository-mongo.js +0 -169
  508. package/modules/repositories/authorization-session-repository-postgres.js +0 -170
  509. package/modules/repositories/module-repository-documentdb.js +0 -383
  510. package/modules/repositories/module-repository-factory.js +0 -38
  511. package/modules/repositories/module-repository-interface.js +0 -142
  512. package/modules/repositories/module-repository-mongo.js +0 -443
  513. package/modules/repositories/module-repository-postgres.js +0 -490
  514. package/modules/repositories/module-repository.js +0 -373
  515. package/modules/requester/api-key.js +0 -50
  516. package/modules/requester/basic.js +0 -42
  517. package/modules/requester/oauth-2.js +0 -385
  518. package/modules/requester/requester.js +0 -167
  519. package/modules/test/mock-api/mocks/hubspot.js +0 -43
  520. package/modules/tests/doubles/test-module-factory.js +0 -22
  521. package/modules/use-cases/delete-module-entity.js +0 -23
  522. package/modules/use-cases/get-authorization-requirements.js +0 -110
  523. package/modules/use-cases/get-entities-for-user.js +0 -32
  524. package/modules/use-cases/get-entity-options-by-id.js +0 -73
  525. package/modules/use-cases/get-entity-options-by-type.js +0 -34
  526. package/modules/use-cases/get-module-entity-by-id.js +0 -16
  527. package/modules/use-cases/get-module-instance-from-type.js +0 -31
  528. package/modules/use-cases/get-module.js +0 -77
  529. package/modules/use-cases/process-authorization-step.js +0 -160
  530. package/modules/use-cases/refresh-entity-options.js +0 -74
  531. package/modules/use-cases/start-authorization-session.js +0 -86
  532. package/modules/use-cases/test-module-auth.js +0 -74
  533. package/modules/use-cases/update-module-entity.js +0 -27
  534. package/modules/utils/map-module-dto.js +0 -18
  535. package/openapi/openapi-spec-generator.js +0 -370
  536. package/openapi/openapi-v1.yaml +0 -1360
  537. package/openapi/openapi-v2.yaml +0 -1535
  538. package/prisma-postgresql/migrations/20260222000000_add_admin_process_and_script_schedule/migration.sql +0 -55
  539. package/providers/index.js +0 -13
  540. package/providers/resolve-provider.js +0 -93
  541. package/queues/index.js +0 -23
  542. package/queues/providers/index.js +0 -7
  543. package/queues/providers/netlify-background-provider.js +0 -76
  544. package/queues/providers/qstash-queue-provider.js +0 -122
  545. package/queues/queue-client-interface.js +0 -55
  546. package/queues/queue-provider-factory.js +0 -93
  547. package/queues/queue-provider.js +0 -46
  548. package/queues/queuer-util.js +0 -74
  549. package/syncs/repositories/sync-repository-factory.js +0 -43
  550. package/syncs/repositories/sync-repository-interface.js +0 -113
  551. package/syncs/repositories/sync-repository-mongo.js +0 -239
  552. package/syncs/repositories/sync-repository-postgres.js +0 -325
  553. package/syncs/sync.js +0 -117
  554. package/token/repositories/token-repository-documentdb.js +0 -137
  555. package/token/repositories/token-repository-factory.js +0 -38
  556. package/token/repositories/token-repository-interface.js +0 -131
  557. package/token/repositories/token-repository-mongo.js +0 -219
  558. package/token/repositories/token-repository-postgres.js +0 -264
  559. package/token/repositories/token-repository.js +0 -219
  560. package/types/assertions/index.d.ts +0 -83
  561. package/types/associations/index.d.ts +0 -57
  562. package/types/core/index.d.ts +0 -99
  563. package/types/database/index.d.ts +0 -11
  564. package/types/encrypt/index.d.ts +0 -7
  565. package/types/errors/index.d.ts +0 -73
  566. package/types/eslint-config/index.d.ts +0 -41
  567. package/types/index.d.ts +0 -14
  568. package/types/integrations/index.d.ts +0 -186
  569. package/types/lambda/index.d.ts +0 -31
  570. package/types/logs/index.d.ts +0 -5
  571. package/types/module-plugin/index.d.ts +0 -241
  572. package/types/prettier-config/index.d.ts +0 -6
  573. package/types/syncs/index.d.ts +0 -111
  574. package/types/test-environment/index.d.ts +0 -17
  575. package/types/tsconfig.json +0 -105
  576. package/user/repositories/user-repository-documentdb.js +0 -441
  577. package/user/repositories/user-repository-factory.js +0 -52
  578. package/user/repositories/user-repository-interface.js +0 -201
  579. package/user/repositories/user-repository-mongo.js +0 -308
  580. package/user/repositories/user-repository-postgres.js +0 -360
  581. package/user/use-cases/authenticate-user.js +0 -125
  582. package/user/use-cases/authenticate-with-shared-secret.js +0 -48
  583. package/user/use-cases/create-individual-user.js +0 -62
  584. package/user/use-cases/create-organization-user.js +0 -47
  585. package/user/use-cases/create-token-for-user-id.js +0 -30
  586. package/user/use-cases/delete-user.js +0 -47
  587. package/user/use-cases/get-user-from-adopter-jwt.js +0 -147
  588. package/user/use-cases/get-user-from-x-frigg-headers.js +0 -135
  589. package/user/use-cases/login-user.js +0 -122
  590. package/user/user.js +0 -139
  591. package/utils/index.js +0 -9
  592. package/websocket/repositories/websocket-connection-repository-documentdb.js +0 -144
  593. package/websocket/repositories/websocket-connection-repository-factory.js +0 -40
  594. package/websocket/repositories/websocket-connection-repository-interface.js +0 -106
  595. package/websocket/repositories/websocket-connection-repository-mongo.js +0 -166
  596. package/websocket/repositories/websocket-connection-repository-postgres.js +0 -207
  597. package/websocket/repositories/websocket-connection-repository.js +0 -167
  598. package/websocket/websocket-message-sender-interface.js +0 -38
package/CLAUDE.md CHANGED
@@ -4,12 +4,12 @@ This file provides guidance to Claude Code when working with the Frigg Framework
4
4
 
5
5
  ## Critical Context (Read First)
6
6
 
7
- - **Package Purpose**: Core framework functionality for building enterprise serverless integrations
8
- - **Main Architecture**: Hexagonal/DDD architecture with clear separation of adapters, use cases, and repositories
9
- - **Key Technologies**: Node.js, Express, AWS Lambda, MongoDB/PostgreSQL (Prisma), AWS KMS encryption
10
- - **Core Value**: Provides building blocks for integration developers - they extend IntegrationBase and use framework services
11
- - **Security Model**: Field-level encryption, OAuth2 flows, signature validation, VPC deployment
12
- - **DO NOT**: Bypass architectural layers, skip encryption for sensitive data, expose internal errors to users
7
+ - **Package Purpose**: Core framework functionality for building enterprise serverless integrations
8
+ - **Main Architecture**: Hexagonal/DDD architecture with clear separation of adapters, use cases, and repositories
9
+ - **Key Technologies**: Node.js, Express, AWS Lambda, MongoDB/PostgreSQL (Prisma), AWS KMS encryption
10
+ - **Core Value**: Provides building blocks for integration developers - they extend IntegrationBase and use framework services
11
+ - **Security Model**: Field-level encryption, OAuth2 flows, signature validation, VPC deployment
12
+ - **DO NOT**: Bypass architectural layers, skip encryption for sensitive data, expose internal errors to users
13
13
 
14
14
  ## Table of Contents
15
15
 
@@ -26,14 +26,14 @@ This file provides guidance to Claude Code when working with the Frigg Framework
26
26
 
27
27
  `@friggframework/core` is the foundational package of the Frigg Framework, providing:
28
28
 
29
- - **IntegrationBase**: Base class all integrations extend
30
- - **Database Layer**: Multi-database support (MongoDB, DocumentDB, PostgreSQL) with Prisma ORM
31
- - **Encryption**: Transparent field-level encryption with AWS KMS or AES
32
- - **User Management**: Individual and organizational user support
33
- - **Module System**: API module loading and credential management
34
- - **Lambda Runtime**: Handler factory, worker base class, timeout management
35
- - **Error Handling**: Standardized error types with proper HTTP status codes
36
- - **Event System**: Integration lifecycle events and user actions
29
+ - **IntegrationBase**: Base class all integrations extend
30
+ - **Database Layer**: Multi-database support (MongoDB, DocumentDB, PostgreSQL) with Prisma ORM
31
+ - **Encryption**: Transparent field-level encryption with AWS KMS or AES
32
+ - **User Management**: Individual and organizational user support
33
+ - **Module System**: API module loading and credential management
34
+ - **Lambda Runtime**: Handler factory, worker base class, timeout management
35
+ - **Error Handling**: Standardized error types with proper HTTP status codes
36
+ - **Event System**: Integration lifecycle events and user actions
37
37
 
38
38
  ## Architecture Principles
39
39
 
@@ -196,25 +196,22 @@ packages/core/
196
196
  **Purpose**: Foundation for building integrations between external systems.
197
197
 
198
198
  **Key Files**:
199
-
200
- - `integration-base.js` - Base class all integrations extend
201
- - `integration.js` - Integration domain aggregate using Proxy pattern
202
- - `options.js` - Integration configuration and options
199
+ - `integration-base.js` - Base class all integrations extend
200
+ - `integration.js` - Integration domain aggregate using Proxy pattern
201
+ - `options.js` - Integration configuration and options
203
202
 
204
203
  **Use Cases**:
205
-
206
- - `create-integration.js` - Create new integration instance
207
- - `update-integration.js` - Update integration configuration
208
- - `delete-integration-for-user.js` - Remove integration
209
- - `get-integration-instance.js` - Load integration with modules
210
- - `load-integration-context.js` - Full integration context loading
204
+ - `create-integration.js` - Create new integration instance
205
+ - `update-integration.js` - Update integration configuration
206
+ - `delete-integration-for-user.js` - Remove integration
207
+ - `get-integration-instance.js` - Load integration with modules
208
+ - `load-integration-context.js` - Full integration context loading
211
209
 
212
210
  **Repositories**:
213
-
214
- - `integration-repository-factory.js` - Creates database-specific repositories
215
- - `integration-repository-mongo.js` - MongoDB implementation
216
- - `integration-repository-postgres.js` - PostgreSQL implementation
217
- - `integration-mapping-repository-*.js` - Mapping data persistence
211
+ - `integration-repository-factory.js` - Creates database-specific repositories
212
+ - `integration-repository-mongo.js` - MongoDB implementation
213
+ - `integration-repository-postgres.js` - PostgreSQL implementation
214
+ - `integration-mapping-repository-*.js` - Mapping data persistence
218
215
 
219
216
  **Integration developers extend IntegrationBase**:
220
217
 
@@ -227,8 +224,8 @@ class MyIntegration extends IntegrationBase {
227
224
  version: '1.0.0',
228
225
  modules: {
229
226
  serviceA: 'service-a',
230
- serviceB: 'service-b',
231
- },
227
+ serviceB: 'service-b'
228
+ }
232
229
  };
233
230
 
234
231
  async onCreate({ integrationId }) {
@@ -243,60 +240,52 @@ class MyIntegration extends IntegrationBase {
243
240
  **Purpose**: Multi-database support with transparent encryption.
244
241
 
245
242
  **Key Components**:
246
-
247
- - `prisma.js` - Prisma client initialization with encryption extension
248
- - `mongo.js` - Mongoose connection management (legacy)
249
- - `models/` - Mongoose model definitions
243
+ - `prisma.js` - Prisma client initialization with encryption extension
244
+ - `mongo.js` - Mongoose connection management (legacy)
245
+ - `models/` - Mongoose model definitions
250
246
 
251
247
  **Encryption System** (`/database/encryption`):
252
-
253
- - **Transparent encryption**: Application code never sees encrypted data
254
- - **Database-agnostic**: Works with MongoDB and PostgreSQL
255
- - **AWS KMS or AES**: Production KMS, development AES
256
- - **Configurable**: Via environment variables and app definition
248
+ - **Transparent encryption**: Application code never sees encrypted data
249
+ - **Database-agnostic**: Works with MongoDB and PostgreSQL
250
+ - **AWS KMS or AES**: Production KMS, development AES
251
+ - **Configurable**: Via environment variables and app definition
257
252
 
258
253
  **See**: `database/encryption/README.md` for comprehensive documentation
259
254
 
260
255
  **Repositories**:
261
-
262
- - `health-check-repository.js` - Database health monitoring
263
- - `token-repository.js` - Authentication tokens
264
- - `websocket-connection-repository.js` - WebSocket connections
265
- - DocumentDB-enabled adapters mirror the MongoDB APIs but execute raw commands (`$runCommandRaw`, `$aggregateRaw`) for compatibility; encrypted models (e.g., credentials) still delegate reads to Prisma so the encryption extension can decrypt secrets transparently.
256
+ - `health-check-repository.js` - Database health monitoring
257
+ - `token-repository.js` - Authentication tokens
258
+ - `websocket-connection-repository.js` - WebSocket connections
259
+ - DocumentDB-enabled adapters mirror the MongoDB APIs but execute raw commands (`$runCommandRaw`, `$aggregateRaw`) for compatibility; encrypted models (e.g., credentials) still delegate reads to Prisma so the encryption extension can decrypt secrets transparently.
266
260
 
267
261
  **Use Cases**:
268
-
269
- - `check-database-health-use-case.js` - Database health checks
270
- - `test-encryption-use-case.js` - Encryption verification
262
+ - `check-database-health-use-case.js` - Database health checks
263
+ - `test-encryption-use-case.js` - Encryption verification
271
264
 
272
265
  ### 3. User Management (`/user`)
273
266
 
274
267
  **Purpose**: Individual and organizational user authentication.
275
268
 
276
269
  **User Types**:
277
-
278
- - **Individual Users**: Personal accounts with email/password
279
- - **Organization Users**: Business accounts with organization-level access
280
- - **Hybrid**: Support both simultaneously
270
+ - **Individual Users**: Personal accounts with email/password
271
+ - **Organization Users**: Business accounts with organization-level access
272
+ - **Hybrid**: Support both simultaneously
281
273
 
282
274
  **Authentication Methods**:
283
-
284
- - Password-based (bcrypt hashed)
285
- - Token-based (Bearer tokens)
286
- - App-based (external app user IDs)
275
+ - Password-based (bcrypt hashed)
276
+ - Token-based (Bearer tokens)
277
+ - App-based (external app user IDs)
287
278
 
288
279
  **Use Cases**:
289
-
290
- - `login-user.js` - User authentication
291
- - `create-individual-user.js` - Create personal account
292
- - `create-organization-user.js` - Create business account
293
- - `get-user-from-bearer-token.js` - Token authentication
280
+ - `login-user.js` - User authentication
281
+ - `create-individual-user.js` - Create personal account
282
+ - `create-organization-user.js` - Create business account
283
+ - `get-user-from-bearer-token.js` - Token authentication
294
284
 
295
285
  **Repositories**:
296
-
297
- - `user-repository-factory.js` - Creates database-specific repositories
298
- - `user-repository-mongo.js` - MongoDB implementation
299
- - `user-repository-postgres.js` - PostgreSQL implementation
286
+ - `user-repository-factory.js` - Creates database-specific repositories
287
+ - `user-repository-mongo.js` - MongoDB implementation
288
+ - `user-repository-postgres.js` - PostgreSQL implementation
300
289
 
301
290
  **Configuration** (in app definition):
302
291
 
@@ -316,24 +305,21 @@ class MyIntegration extends IntegrationBase {
316
305
  **Purpose**: API module loading, credential management, and HTTP clients.
317
306
 
318
307
  **Key Classes**:
319
-
320
- - `Credential` - API credentials domain entity
321
- - `Entity` - External service entity (account, workspace, etc.)
322
- - `Requester` - Base HTTP client class
323
- - `OAuth2Requester` - OAuth 2.0 flow implementation
324
- - `ApiKeyRequester` - API key authentication
325
- - `BasicAuthRequester` - Basic authentication
308
+ - `Credential` - API credentials domain entity
309
+ - `Entity` - External service entity (account, workspace, etc.)
310
+ - `Requester` - Base HTTP client class
311
+ - `OAuth2Requester` - OAuth 2.0 flow implementation
312
+ - `ApiKeyRequester` - API key authentication
313
+ - `BasicAuthRequester` - Basic authentication
326
314
 
327
315
  **Module Factory**:
328
-
329
- - `ModuleFactory` - Creates and configures API module instances
330
- - Handles credential injection
331
- - Manages module lifecycle
316
+ - `ModuleFactory` - Creates and configures API module instances
317
+ - Handles credential injection
318
+ - Manages module lifecycle
332
319
 
333
320
  **Repositories**:
334
-
335
- - `module-repository.js` - Module data access
336
- - `credential-repository.js` - Credential persistence (encrypted)
321
+ - `module-repository.js` - Module data access
322
+ - `credential-repository.js` - Credential persistence (encrypted)
337
323
 
338
324
  ### 5. Core Runtime System (`/core`)
339
325
 
@@ -342,11 +328,10 @@ class MyIntegration extends IntegrationBase {
342
328
  **See**: `core/CLAUDE.md` for comprehensive documentation
343
329
 
344
330
  **Key Components**:
345
-
346
- - `create-handler.js` - Lambda handler factory
347
- - `Worker.js` - SQS job processing base class
348
- - `Delegate.js` - Observer/delegation pattern
349
- - `load-installed-modules.js` - Dynamic module loading
331
+ - `create-handler.js` - Lambda handler factory
332
+ - `Worker.js` - SQS job processing base class
333
+ - `Delegate.js` - Observer/delegation pattern
334
+ - `load-installed-modules.js` - Dynamic module loading
350
335
 
351
336
  **Handler Pattern**:
352
337
 
@@ -355,12 +340,12 @@ const { createHandler } = require('@friggframework/core');
355
340
 
356
341
  const handler = createHandler({
357
342
  eventName: 'MyIntegration',
358
- isUserFacingResponse: true, // Sanitize errors
359
- shouldUseDatabase: true, // Connect to DB
343
+ isUserFacingResponse: true, // Sanitize errors
344
+ shouldUseDatabase: true, // Connect to DB
360
345
  method: async (event, context) => {
361
346
  // Your logic here
362
347
  return { statusCode: 200, body: 'Success' };
363
- },
348
+ }
364
349
  });
365
350
  ```
366
351
 
@@ -385,11 +370,10 @@ class MyWorker extends Worker {
385
370
  **Purpose**: Cryptor adapter for AWS KMS and AES encryption.
386
371
 
387
372
  **Key Class**: `Cryptor.js`
388
-
389
- - Envelope encryption pattern
390
- - AWS KMS integration
391
- - AES-256-GCM fallback
392
- - Key rotation support
373
+ - Envelope encryption pattern
374
+ - AWS KMS integration
375
+ - AES-256-GCM fallback
376
+ - Key rotation support
393
377
 
394
378
  **Usage**:
395
379
 
@@ -397,7 +381,7 @@ class MyWorker extends Worker {
397
381
  const { Cryptor } = require('@friggframework/core');
398
382
 
399
383
  const cryptor = new Cryptor({
400
- shouldUseAws: process.env.KMS_KEY_ARN ? true : false,
384
+ shouldUseAws: process.env.KMS_KEY_ARN ? true : false
401
385
  });
402
386
 
403
387
  const encrypted = await cryptor.encrypt('sensitive-data');
@@ -409,33 +393,29 @@ const decrypted = await cryptor.decrypt(encrypted);
409
393
  **Purpose**: HTTP/Lambda request handling and routing.
410
394
 
411
395
  **Key Routers**:
412
-
413
- - `integration-router.js` - Integration CRUD operations
414
- - `auth.js` - Authentication endpoints
415
- - `health.js` - Health check endpoints with encryption verification
396
+ - `integration-router.js` - Integration CRUD operations
397
+ - `auth.js` - Authentication endpoints
398
+ - `health.js` - Health check endpoints with encryption verification
416
399
 
417
400
  **Handler Types**:
418
-
419
- - **User-facing**: Sanitize errors, friendly responses
420
- - **Server-to-server**: Full error details for debugging
421
- - **Background workers**: SQS message processing
401
+ - **User-facing**: Sanitize errors, friendly responses
402
+ - **Server-to-server**: Full error details for debugging
403
+ - **Background workers**: SQS message processing
422
404
 
423
405
  **Event Dispatcher**:
424
-
425
- - `integration-event-dispatcher.js` - Routes events to integration handlers
426
- - Supports lifecycle events and user actions
406
+ - `integration-event-dispatcher.js` - Routes events to integration handlers
407
+ - Supports lifecycle events and user actions
427
408
 
428
409
  ### 8. Error Handling (`/errors`)
429
410
 
430
411
  **Purpose**: Standardized error types with proper HTTP semantics.
431
412
 
432
413
  **Error Types**:
433
-
434
- - `BaseError` - Base error class
435
- - `FetchError` - HTTP request failures
436
- - `HaltError` - Stop processing without retry
437
- - `RequiredPropertyError` - Missing required parameters
438
- - `ParameterTypeError` - Invalid parameter type
414
+ - `BaseError` - Base error class
415
+ - `FetchError` - HTTP request failures
416
+ - `HaltError` - Stop processing without retry
417
+ - `RequiredPropertyError` - Missing required parameters
418
+ - `ParameterTypeError` - Invalid parameter type
439
419
 
440
420
  **Usage**:
441
421
 
@@ -452,10 +432,9 @@ if (!userId) {
452
432
  **Purpose**: Structured logging with debug capabilities.
453
433
 
454
434
  **Functions**:
455
-
456
- - `debug(message, data)` - Debug logging
457
- - `initDebugLog(eventName, event)` - Initialize debug context
458
- - `flushDebugLog(error)` - Flush logs on error
435
+ - `debug(message, data)` - Debug logging
436
+ - `initDebugLog(eventName, event)` - Initialize debug context
437
+ - `flushDebugLog(error)` - Flush logs on error
459
438
 
460
439
  **Usage**:
461
440
 
@@ -473,9 +452,8 @@ flushDebugLog(); // On error
473
452
  **Purpose**: AWS Lambda-specific utilities.
474
453
 
475
454
  **Key Classes**:
476
-
477
- - `TimeoutCatcher` - Detect approaching Lambda timeout
478
- - Graceful shutdown handling
455
+ - `TimeoutCatcher` - Detect approaching Lambda timeout
456
+ - Graceful shutdown handling
479
457
 
480
458
  **Usage**:
481
459
 
@@ -533,10 +511,10 @@ const appDefinition = {
533
511
  encryption: {
534
512
  schema: {
535
513
  MyCustomModel: {
536
- fields: ['secretData', 'data.apiKey'],
537
- },
538
- },
539
- },
514
+ fields: ['secretData', 'data.apiKey']
515
+ }
516
+ }
517
+ }
540
518
  };
541
519
  ```
542
520
 
@@ -547,8 +525,8 @@ Edit `database/encryption/encryption-schema-registry.js`:
547
525
  ```javascript
548
526
  const ENCRYPTION_SCHEMA = {
549
527
  MyModel: {
550
- fields: ['sensitiveField'],
551
- },
528
+ fields: ['sensitiveField']
529
+ }
552
530
  };
553
531
  ```
554
532
 
@@ -593,7 +571,7 @@ describe('MyUseCase', () => {
593
571
  beforeEach(() => {
594
572
  mockRepository = {
595
573
  findById: jest.fn(),
596
- save: jest.fn(),
574
+ save: jest.fn()
597
575
  };
598
576
  useCase = new MyUseCase({ repository: mockRepository });
599
577
  });
@@ -660,35 +638,35 @@ Use test doubles from `@friggframework/test` package for consistent mocking.
660
638
 
661
639
  ### Required
662
640
 
663
- - `AWS_REGION` - AWS region for services
664
- - `DATABASE_URL` - Database connection string (auto-set)
665
- - `DB_TYPE` - Database type: 'mongodb' or 'postgresql'
641
+ - `AWS_REGION` - AWS region for services
642
+ - `DATABASE_URL` - Database connection string (auto-set)
643
+ - `DB_TYPE` - Database type: 'mongodb' or 'postgresql'
666
644
 
667
645
  ### Encryption
668
646
 
669
- - `KMS_KEY_ARN` - AWS KMS key ARN (production)
670
- - `AES_KEY_ID` - AES key ID (development)
671
- - `AES_KEY` - AES encryption key (development)
672
- - `STAGE` - Environment stage (dev, test, local bypass encryption)
647
+ - `KMS_KEY_ARN` - AWS KMS key ARN (production)
648
+ - `AES_KEY_ID` - AES key ID (development)
649
+ - `AES_KEY` - AES encryption key (development)
650
+ - `STAGE` - Environment stage (dev, test, local bypass encryption)
673
651
 
674
652
  ### Optional
675
653
 
676
- - `SECRET_ARN` - AWS Secrets Manager ARN for auto-injection
677
- - `DEBUG` - Debug logging pattern
678
- - `LOG_LEVEL` - Logging level (debug, info, warn, error)
654
+ - `SECRET_ARN` - AWS Secrets Manager ARN for auto-injection
655
+ - `DEBUG` - Debug logging pattern
656
+ - `LOG_LEVEL` - Logging level (debug, info, warn, error)
679
657
 
680
658
  ## Version Information
681
659
 
682
- - **Current Version**: 2.0.0-next.0 (pre-release)
683
- - **Node.js**: >=18 required
684
- - **Dependencies**: See package.json for full list
660
+ - **Current Version**: 2.0.0-next.0 (pre-release)
661
+ - **Node.js**: >=18 required
662
+ - **Dependencies**: See package.json for full list
685
663
 
686
664
  ## Support and Documentation
687
665
 
688
- - **Main Framework CLAUDE.md**: See root Frigg CLAUDE.md for framework-wide guidance
689
- - **Core Runtime**: See `core/CLAUDE.md` for Lambda/Worker patterns
690
- - **Encryption**: See `database/encryption/README.md` for encryption details
691
- - **Package README**: See `README.md` for API reference
666
+ - **Main Framework CLAUDE.md**: See root Frigg CLAUDE.md for framework-wide guidance
667
+ - **Core Runtime**: See `core/CLAUDE.md` for Lambda/Worker patterns
668
+ - **Encryption**: See `database/encryption/README.md` for encryption details
669
+ - **Package README**: See `README.md` for API reference
692
670
 
693
671
  ## Recent Important Changes
694
672
 
@@ -699,15 +677,13 @@ Use test doubles from `@friggframework/test` package for consistent mocking.
699
677
  **Problem**: The `FieldEncryptionService` was converting objects to the string `"[object Object]"` before encrypting, corrupting JSON fields like `IntegrationMapping.mapping`.
700
678
 
701
679
  **Solution**: Added `_serializeForEncryption()` and `_deserializeAfterDecryption()` methods:
702
-
703
- - Objects are now JSON.stringify'd before encryption
704
- - Decrypted strings are JSON.parse'd back to objects
705
- - Plain strings work as before
680
+ - Objects are now JSON.stringify'd before encryption
681
+ - Decrypted strings are JSON.parse'd back to objects
682
+ - Plain strings work as before
706
683
 
707
684
  **Files Changed**:
708
-
709
- - `database/encryption/field-encryption-service.js`
710
- - `database/encryption/field-encryption-service.test.js`
685
+ - `database/encryption/field-encryption-service.js`
686
+ - `database/encryption/field-encryption-service.test.js`
711
687
 
712
688
  **Test Coverage**: All 40 tests pass, including new object encryption test.
713
689