@friggframework/core 2.0.0-next.8 → 2.0.0-next.81

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 (305) hide show
  1. package/CLAUDE.md +702 -0
  2. package/README.md +959 -50
  3. package/application/commands/README.md +451 -0
  4. package/application/commands/credential-commands.js +245 -0
  5. package/application/commands/entity-commands.js +336 -0
  6. package/application/commands/integration-commands.js +210 -0
  7. package/application/commands/scheduler-commands.js +263 -0
  8. package/application/commands/user-commands.js +283 -0
  9. package/application/index.js +73 -0
  10. package/assertions/index.js +0 -3
  11. package/core/CLAUDE.md +690 -0
  12. package/core/Worker.js +60 -24
  13. package/core/create-handler.js +79 -8
  14. package/credential/repositories/credential-repository-documentdb.js +304 -0
  15. package/credential/repositories/credential-repository-factory.js +54 -0
  16. package/credential/repositories/credential-repository-interface.js +98 -0
  17. package/credential/repositories/credential-repository-mongo.js +269 -0
  18. package/credential/repositories/credential-repository-postgres.js +287 -0
  19. package/credential/repositories/credential-repository.js +300 -0
  20. package/credential/use-cases/get-credential-for-user.js +25 -0
  21. package/credential/use-cases/update-authentication-status.js +15 -0
  22. package/database/MONGODB_TRANSACTION_FIX.md +198 -0
  23. package/database/adapters/lambda-invoker.js +97 -0
  24. package/database/config.js +154 -0
  25. package/database/documentdb-encryption-service.js +330 -0
  26. package/database/documentdb-utils.js +136 -0
  27. package/database/encryption/README.md +839 -0
  28. package/database/encryption/documentdb-encryption-service.md +3575 -0
  29. package/database/encryption/encryption-schema-registry.js +268 -0
  30. package/database/encryption/field-encryption-service.js +226 -0
  31. package/database/encryption/logger.js +79 -0
  32. package/database/encryption/prisma-encryption-extension.js +222 -0
  33. package/database/index.js +21 -21
  34. package/database/prisma.js +182 -0
  35. package/database/repositories/health-check-repository-documentdb.js +138 -0
  36. package/database/repositories/health-check-repository-factory.js +48 -0
  37. package/database/repositories/health-check-repository-interface.js +82 -0
  38. package/database/repositories/health-check-repository-mongodb.js +89 -0
  39. package/database/repositories/health-check-repository-postgres.js +82 -0
  40. package/database/repositories/migration-status-repository-s3.js +137 -0
  41. package/database/use-cases/check-database-health-use-case.js +29 -0
  42. package/database/use-cases/check-database-state-use-case.js +81 -0
  43. package/database/use-cases/check-encryption-health-use-case.js +83 -0
  44. package/database/use-cases/get-database-state-via-worker-use-case.js +61 -0
  45. package/database/use-cases/get-migration-status-use-case.js +93 -0
  46. package/database/use-cases/run-database-migration-use-case.js +139 -0
  47. package/database/use-cases/test-encryption-use-case.js +253 -0
  48. package/database/use-cases/trigger-database-migration-use-case.js +157 -0
  49. package/database/utils/mongodb-collection-utils.js +94 -0
  50. package/database/utils/mongodb-schema-init.js +108 -0
  51. package/database/utils/prisma-runner.js +477 -0
  52. package/database/utils/prisma-schema-parser.js +182 -0
  53. package/docs/PROCESS_MANAGEMENT_QUEUE_SPEC.md +517 -0
  54. package/encrypt/Cryptor.js +34 -168
  55. package/encrypt/index.js +1 -2
  56. package/errors/client-safe-error.js +26 -0
  57. package/errors/fetch-error.js +15 -7
  58. package/errors/index.js +2 -0
  59. package/generated/prisma-mongodb/client.d.ts +1 -0
  60. package/generated/prisma-mongodb/client.js +4 -0
  61. package/generated/prisma-mongodb/default.d.ts +1 -0
  62. package/generated/prisma-mongodb/default.js +4 -0
  63. package/generated/prisma-mongodb/edge.d.ts +1 -0
  64. package/generated/prisma-mongodb/edge.js +335 -0
  65. package/generated/prisma-mongodb/index-browser.js +317 -0
  66. package/generated/prisma-mongodb/index.d.ts +22955 -0
  67. package/generated/prisma-mongodb/index.js +360 -0
  68. package/generated/prisma-mongodb/libquery_engine-debian-openssl-3.0.x.so.node +0 -0
  69. package/generated/prisma-mongodb/libquery_engine-rhel-openssl-3.0.x.so.node +0 -0
  70. package/generated/prisma-mongodb/package.json +183 -0
  71. package/generated/prisma-mongodb/runtime/edge-esm.js +34 -0
  72. package/generated/prisma-mongodb/runtime/edge.js +34 -0
  73. package/generated/prisma-mongodb/runtime/index-browser.d.ts +370 -0
  74. package/generated/prisma-mongodb/runtime/index-browser.js +16 -0
  75. package/generated/prisma-mongodb/runtime/library.d.ts +3977 -0
  76. package/generated/prisma-mongodb/runtime/library.js +146 -0
  77. package/generated/prisma-mongodb/runtime/react-native.js +83 -0
  78. package/generated/prisma-mongodb/runtime/wasm-compiler-edge.js +84 -0
  79. package/generated/prisma-mongodb/runtime/wasm-engine-edge.js +36 -0
  80. package/generated/prisma-mongodb/schema.prisma +368 -0
  81. package/generated/prisma-mongodb/wasm-edge-light-loader.mjs +4 -0
  82. package/generated/prisma-mongodb/wasm-worker-loader.mjs +4 -0
  83. package/generated/prisma-mongodb/wasm.d.ts +1 -0
  84. package/generated/prisma-mongodb/wasm.js +342 -0
  85. package/generated/prisma-postgresql/client.d.ts +1 -0
  86. package/generated/prisma-postgresql/client.js +4 -0
  87. package/generated/prisma-postgresql/default.d.ts +1 -0
  88. package/generated/prisma-postgresql/default.js +4 -0
  89. package/generated/prisma-postgresql/edge.d.ts +1 -0
  90. package/generated/prisma-postgresql/edge.js +357 -0
  91. package/generated/prisma-postgresql/index-browser.js +339 -0
  92. package/generated/prisma-postgresql/index.d.ts +25135 -0
  93. package/generated/prisma-postgresql/index.js +382 -0
  94. package/generated/prisma-postgresql/libquery_engine-debian-openssl-3.0.x.so.node +0 -0
  95. package/generated/prisma-postgresql/libquery_engine-rhel-openssl-3.0.x.so.node +0 -0
  96. package/generated/prisma-postgresql/package.json +183 -0
  97. package/generated/prisma-postgresql/query_engine_bg.js +2 -0
  98. package/generated/prisma-postgresql/query_engine_bg.wasm +0 -0
  99. package/generated/prisma-postgresql/runtime/edge-esm.js +34 -0
  100. package/generated/prisma-postgresql/runtime/edge.js +34 -0
  101. package/generated/prisma-postgresql/runtime/index-browser.d.ts +370 -0
  102. package/generated/prisma-postgresql/runtime/index-browser.js +16 -0
  103. package/generated/prisma-postgresql/runtime/library.d.ts +3977 -0
  104. package/generated/prisma-postgresql/runtime/library.js +146 -0
  105. package/generated/prisma-postgresql/runtime/react-native.js +83 -0
  106. package/generated/prisma-postgresql/runtime/wasm-compiler-edge.js +84 -0
  107. package/generated/prisma-postgresql/runtime/wasm-engine-edge.js +36 -0
  108. package/generated/prisma-postgresql/schema.prisma +351 -0
  109. package/generated/prisma-postgresql/wasm-edge-light-loader.mjs +4 -0
  110. package/generated/prisma-postgresql/wasm-worker-loader.mjs +4 -0
  111. package/generated/prisma-postgresql/wasm.d.ts +1 -0
  112. package/generated/prisma-postgresql/wasm.js +364 -0
  113. package/handlers/WEBHOOKS.md +653 -0
  114. package/handlers/app-definition-loader.js +38 -0
  115. package/handlers/app-handler-helpers.js +57 -0
  116. package/handlers/backend-utils.js +262 -0
  117. package/handlers/database-migration-handler.js +227 -0
  118. package/handlers/integration-event-dispatcher.js +54 -0
  119. package/handlers/routers/HEALTHCHECK.md +342 -0
  120. package/handlers/routers/auth.js +15 -0
  121. package/handlers/routers/db-migration.handler.js +29 -0
  122. package/handlers/routers/db-migration.js +326 -0
  123. package/handlers/routers/health.js +516 -0
  124. package/handlers/routers/integration-defined-routers.js +45 -0
  125. package/handlers/routers/integration-webhook-routers.js +67 -0
  126. package/handlers/routers/user.js +63 -0
  127. package/handlers/routers/websocket.js +57 -0
  128. package/handlers/use-cases/check-external-apis-health-use-case.js +81 -0
  129. package/handlers/use-cases/check-integrations-health-use-case.js +44 -0
  130. package/handlers/workers/db-migration.js +352 -0
  131. package/handlers/workers/dlq-processor.js +63 -0
  132. package/handlers/workers/integration-defined-workers.js +23 -0
  133. package/index.js +82 -46
  134. package/infrastructure/scheduler/eventbridge-scheduler-adapter.js +184 -0
  135. package/infrastructure/scheduler/index.js +33 -0
  136. package/infrastructure/scheduler/mock-scheduler-adapter.js +143 -0
  137. package/infrastructure/scheduler/scheduler-service-factory.js +73 -0
  138. package/infrastructure/scheduler/scheduler-service-interface.js +47 -0
  139. package/integrations/WEBHOOK-QUICKSTART.md +151 -0
  140. package/integrations/index.js +12 -10
  141. package/integrations/integration-base.js +364 -55
  142. package/integrations/integration-router.js +376 -179
  143. package/integrations/options.js +1 -1
  144. package/integrations/repositories/integration-mapping-repository-documentdb.js +280 -0
  145. package/integrations/repositories/integration-mapping-repository-factory.js +57 -0
  146. package/integrations/repositories/integration-mapping-repository-interface.js +106 -0
  147. package/integrations/repositories/integration-mapping-repository-mongo.js +161 -0
  148. package/integrations/repositories/integration-mapping-repository-postgres.js +227 -0
  149. package/integrations/repositories/integration-mapping-repository.js +156 -0
  150. package/integrations/repositories/integration-repository-documentdb.js +219 -0
  151. package/integrations/repositories/integration-repository-factory.js +51 -0
  152. package/integrations/repositories/integration-repository-interface.js +144 -0
  153. package/integrations/repositories/integration-repository-mongo.js +330 -0
  154. package/integrations/repositories/integration-repository-postgres.js +385 -0
  155. package/integrations/repositories/process-repository-documentdb.js +311 -0
  156. package/integrations/repositories/process-repository-factory.js +53 -0
  157. package/integrations/repositories/process-repository-interface.js +136 -0
  158. package/integrations/repositories/process-repository-mongo.js +262 -0
  159. package/integrations/repositories/process-repository-postgres.js +380 -0
  160. package/integrations/repositories/process-update-ops-shared.js +112 -0
  161. package/integrations/tests/doubles/config-capturing-integration.js +81 -0
  162. package/integrations/tests/doubles/dummy-integration-class.js +105 -0
  163. package/integrations/tests/doubles/test-integration-repository.js +112 -0
  164. package/integrations/use-cases/create-integration.js +83 -0
  165. package/integrations/use-cases/create-process.js +128 -0
  166. package/integrations/use-cases/delete-integration-for-user.js +101 -0
  167. package/integrations/use-cases/find-integration-context-by-external-entity-id.js +72 -0
  168. package/integrations/use-cases/get-integration-for-user.js +78 -0
  169. package/integrations/use-cases/get-integration-instance-by-definition.js +67 -0
  170. package/integrations/use-cases/get-integration-instance.js +83 -0
  171. package/integrations/use-cases/get-integrations-for-user.js +88 -0
  172. package/integrations/use-cases/get-possible-integrations.js +27 -0
  173. package/integrations/use-cases/get-process.js +87 -0
  174. package/integrations/use-cases/index.js +19 -0
  175. package/integrations/use-cases/load-integration-context.js +71 -0
  176. package/integrations/use-cases/update-integration-messages.js +44 -0
  177. package/integrations/use-cases/update-integration-status.js +32 -0
  178. package/integrations/use-cases/update-integration.js +92 -0
  179. package/integrations/use-cases/update-process-metrics.js +205 -0
  180. package/integrations/use-cases/update-process-state.js +158 -0
  181. package/integrations/utils/map-integration-dto.js +37 -0
  182. package/jest-global-setup-noop.js +3 -0
  183. package/jest-global-teardown-noop.js +3 -0
  184. package/logs/logger.js +0 -4
  185. package/{module-plugin → modules}/index.js +0 -10
  186. package/modules/module-factory.js +56 -0
  187. package/modules/module.js +258 -0
  188. package/modules/repositories/module-repository-documentdb.js +335 -0
  189. package/modules/repositories/module-repository-factory.js +40 -0
  190. package/modules/repositories/module-repository-interface.js +129 -0
  191. package/modules/repositories/module-repository-mongo.js +408 -0
  192. package/modules/repositories/module-repository-postgres.js +453 -0
  193. package/modules/repositories/module-repository.js +345 -0
  194. package/modules/requester/api-key.js +52 -0
  195. package/modules/requester/oauth-2.js +396 -0
  196. package/modules/requester/requester.js +275 -0
  197. package/{module-plugin → modules}/test/mock-api/api.js +8 -3
  198. package/{module-plugin → modules}/test/mock-api/definition.js +14 -10
  199. package/modules/tests/doubles/test-module-factory.js +16 -0
  200. package/modules/tests/doubles/test-module-repository.js +39 -0
  201. package/modules/use-cases/get-entities-for-user.js +32 -0
  202. package/modules/use-cases/get-entity-options-by-id.js +71 -0
  203. package/modules/use-cases/get-entity-options-by-type.js +34 -0
  204. package/modules/use-cases/get-module-instance-from-type.js +34 -0
  205. package/modules/use-cases/get-module.js +74 -0
  206. package/modules/use-cases/process-authorization-callback.js +177 -0
  207. package/modules/use-cases/refresh-entity-options.js +72 -0
  208. package/modules/use-cases/test-module-auth.js +72 -0
  209. package/modules/utils/map-module-dto.js +18 -0
  210. package/package.json +82 -50
  211. package/prisma-mongodb/schema.prisma +368 -0
  212. package/prisma-postgresql/migrations/20250930193005_init/migration.sql +315 -0
  213. package/prisma-postgresql/migrations/20251006135218_init/migration.sql +9 -0
  214. package/prisma-postgresql/migrations/20251010000000_remove_unused_entity_reference_map/migration.sql +3 -0
  215. package/prisma-postgresql/migrations/20251112195422_update_user_unique_constraints/migration.sql +25 -0
  216. package/prisma-postgresql/migrations/20260422120000_add_entity_data_column/migration.sql +10 -0
  217. package/prisma-postgresql/migrations/20260422120001_create_process_table/migration.sql +48 -0
  218. package/prisma-postgresql/migrations/migration_lock.toml +3 -0
  219. package/prisma-postgresql/schema.prisma +351 -0
  220. package/queues/queuer-util.js +103 -21
  221. package/syncs/manager.js +468 -443
  222. package/syncs/repositories/sync-repository-documentdb.js +240 -0
  223. package/syncs/repositories/sync-repository-factory.js +43 -0
  224. package/syncs/repositories/sync-repository-interface.js +109 -0
  225. package/syncs/repositories/sync-repository-mongo.js +239 -0
  226. package/syncs/repositories/sync-repository-postgres.js +319 -0
  227. package/syncs/sync.js +0 -1
  228. package/token/repositories/token-repository-documentdb.js +137 -0
  229. package/token/repositories/token-repository-factory.js +40 -0
  230. package/token/repositories/token-repository-interface.js +131 -0
  231. package/token/repositories/token-repository-mongo.js +219 -0
  232. package/token/repositories/token-repository-postgres.js +264 -0
  233. package/token/repositories/token-repository.js +219 -0
  234. package/types/associations/index.d.ts +0 -17
  235. package/types/core/index.d.ts +12 -4
  236. package/types/database/index.d.ts +10 -2
  237. package/types/encrypt/index.d.ts +5 -3
  238. package/types/integrations/index.d.ts +3 -8
  239. package/types/module-plugin/index.d.ts +17 -69
  240. package/types/syncs/index.d.ts +0 -17
  241. package/user/repositories/user-repository-documentdb.js +441 -0
  242. package/user/repositories/user-repository-factory.js +52 -0
  243. package/user/repositories/user-repository-interface.js +201 -0
  244. package/user/repositories/user-repository-mongo.js +308 -0
  245. package/user/repositories/user-repository-postgres.js +360 -0
  246. package/user/tests/doubles/test-user-repository.js +72 -0
  247. package/user/use-cases/authenticate-user.js +127 -0
  248. package/user/use-cases/authenticate-with-shared-secret.js +48 -0
  249. package/user/use-cases/create-individual-user.js +61 -0
  250. package/user/use-cases/create-organization-user.js +47 -0
  251. package/user/use-cases/create-token-for-user-id.js +30 -0
  252. package/user/use-cases/get-user-from-adopter-jwt.js +149 -0
  253. package/user/use-cases/get-user-from-bearer-token.js +77 -0
  254. package/user/use-cases/get-user-from-x-frigg-headers.js +132 -0
  255. package/user/use-cases/login-user.js +122 -0
  256. package/user/user.js +125 -0
  257. package/utils/backend-path.js +38 -0
  258. package/utils/index.js +6 -0
  259. package/websocket/repositories/websocket-connection-repository-documentdb.js +119 -0
  260. package/websocket/repositories/websocket-connection-repository-factory.js +44 -0
  261. package/websocket/repositories/websocket-connection-repository-interface.js +106 -0
  262. package/websocket/repositories/websocket-connection-repository-mongo.js +156 -0
  263. package/websocket/repositories/websocket-connection-repository-postgres.js +196 -0
  264. package/websocket/repositories/websocket-connection-repository.js +161 -0
  265. package/assertions/is-equal.js +0 -17
  266. package/associations/model.js +0 -54
  267. package/database/models/IndividualUser.js +0 -76
  268. package/database/models/OrganizationUser.js +0 -29
  269. package/database/models/State.js +0 -9
  270. package/database/models/Token.js +0 -70
  271. package/database/models/UserModel.js +0 -7
  272. package/database/models/WebsocketConnection.js +0 -49
  273. package/database/mongo.js +0 -45
  274. package/database/mongoose.js +0 -5
  275. package/encrypt/Cryptor.test.js +0 -32
  276. package/encrypt/encrypt.js +0 -132
  277. package/encrypt/encrypt.test.js +0 -1069
  278. package/encrypt/test-encrypt.js +0 -107
  279. package/errors/base-error.test.js +0 -32
  280. package/errors/fetch-error.test.js +0 -79
  281. package/errors/halt-error.test.js +0 -11
  282. package/errors/validation-errors.test.js +0 -120
  283. package/integrations/create-frigg-backend.js +0 -31
  284. package/integrations/integration-factory.js +0 -251
  285. package/integrations/integration-mapping.js +0 -43
  286. package/integrations/integration-model.js +0 -46
  287. package/integrations/integration-user.js +0 -144
  288. package/integrations/test/integration-base.test.js +0 -144
  289. package/lambda/TimeoutCatcher.test.js +0 -68
  290. package/logs/logger.test.js +0 -76
  291. package/module-plugin/auther.js +0 -393
  292. package/module-plugin/credential.js +0 -22
  293. package/module-plugin/entity-manager.js +0 -70
  294. package/module-plugin/entity.js +0 -46
  295. package/module-plugin/manager.js +0 -169
  296. package/module-plugin/module-factory.js +0 -61
  297. package/module-plugin/requester/api-key.js +0 -36
  298. package/module-plugin/requester/oauth-2.js +0 -219
  299. package/module-plugin/requester/requester.js +0 -165
  300. package/module-plugin/requester/requester.test.js +0 -28
  301. package/module-plugin/test/auther.test.js +0 -97
  302. package/syncs/model.js +0 -62
  303. /package/{module-plugin → modules}/ModuleConstants.js +0 -0
  304. /package/{module-plugin → modules}/requester/basic.js +0 -0
  305. /package/{module-plugin → modules}/test/mock-api/mocks/hubspot.js +0 -0
@@ -0,0 +1,315 @@
1
+ -- CreateEnum
2
+ CREATE TYPE "UserType" AS ENUM ('INDIVIDUAL', 'ORGANIZATION');
3
+
4
+ -- CreateEnum
5
+ CREATE TYPE "IntegrationStatus" AS ENUM ('ENABLED', 'NEEDS_CONFIG', 'PROCESSING', 'DISABLED', 'ERROR');
6
+
7
+ -- CreateEnum
8
+ CREATE TYPE "AssociationType" AS ENUM ('ONE_TO_MANY', 'ONE_TO_ONE', 'MANY_TO_ONE');
9
+
10
+ -- CreateTable
11
+ CREATE TABLE "User" (
12
+ "id" SERIAL NOT NULL,
13
+ "type" "UserType" NOT NULL,
14
+ "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
15
+ "updatedAt" TIMESTAMP(3) NOT NULL,
16
+ "email" TEXT,
17
+ "username" TEXT,
18
+ "hashword" TEXT,
19
+ "appUserId" TEXT,
20
+ "organizationId" INTEGER,
21
+ "appOrgId" TEXT,
22
+ "name" TEXT,
23
+
24
+ CONSTRAINT "User_pkey" PRIMARY KEY ("id")
25
+ );
26
+
27
+ -- CreateTable
28
+ CREATE TABLE "Token" (
29
+ "id" SERIAL NOT NULL,
30
+ "token" TEXT NOT NULL,
31
+ "created" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
32
+ "expires" TIMESTAMP(3),
33
+ "userId" INTEGER NOT NULL,
34
+
35
+ CONSTRAINT "Token_pkey" PRIMARY KEY ("id")
36
+ );
37
+
38
+ -- CreateTable
39
+ CREATE TABLE "Credential" (
40
+ "id" SERIAL NOT NULL,
41
+ "userId" INTEGER,
42
+ "subType" TEXT,
43
+ "auth_is_valid" BOOLEAN,
44
+ "externalId" TEXT,
45
+ "data" JSONB NOT NULL DEFAULT '{}',
46
+ "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
47
+ "updatedAt" TIMESTAMP(3) NOT NULL,
48
+
49
+ CONSTRAINT "Credential_pkey" PRIMARY KEY ("id")
50
+ );
51
+
52
+ -- CreateTable
53
+ CREATE TABLE "Entity" (
54
+ "id" SERIAL NOT NULL,
55
+ "credentialId" INTEGER,
56
+ "subType" TEXT,
57
+ "userId" INTEGER,
58
+ "name" TEXT,
59
+ "moduleName" TEXT,
60
+ "externalId" TEXT,
61
+ "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
62
+ "updatedAt" TIMESTAMP(3) NOT NULL,
63
+
64
+ CONSTRAINT "Entity_pkey" PRIMARY KEY ("id")
65
+ );
66
+
67
+ -- CreateTable
68
+ CREATE TABLE "Integration" (
69
+ "id" SERIAL NOT NULL,
70
+ "userId" INTEGER,
71
+ "status" "IntegrationStatus" NOT NULL DEFAULT 'ENABLED',
72
+ "config" JSONB,
73
+ "version" TEXT,
74
+ "entityReferenceMap" JSONB DEFAULT '{}',
75
+ "errors" JSONB NOT NULL DEFAULT '[]',
76
+ "warnings" JSONB NOT NULL DEFAULT '[]',
77
+ "info" JSONB NOT NULL DEFAULT '[]',
78
+ "logs" JSONB NOT NULL DEFAULT '[]',
79
+ "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
80
+ "updatedAt" TIMESTAMP(3) NOT NULL,
81
+
82
+ CONSTRAINT "Integration_pkey" PRIMARY KEY ("id")
83
+ );
84
+
85
+ -- CreateTable
86
+ CREATE TABLE "IntegrationMapping" (
87
+ "id" SERIAL NOT NULL,
88
+ "integrationId" INTEGER NOT NULL,
89
+ "sourceId" TEXT,
90
+ "mapping" JSONB,
91
+ "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
92
+ "updatedAt" TIMESTAMP(3) NOT NULL,
93
+
94
+ CONSTRAINT "IntegrationMapping_pkey" PRIMARY KEY ("id")
95
+ );
96
+
97
+ -- CreateTable
98
+ CREATE TABLE "Sync" (
99
+ "id" SERIAL NOT NULL,
100
+ "integrationId" INTEGER,
101
+ "hash" TEXT NOT NULL,
102
+ "name" TEXT NOT NULL,
103
+
104
+ CONSTRAINT "Sync_pkey" PRIMARY KEY ("id")
105
+ );
106
+
107
+ -- CreateTable
108
+ CREATE TABLE "DataIdentifier" (
109
+ "id" SERIAL NOT NULL,
110
+ "syncId" INTEGER,
111
+ "entityId" INTEGER NOT NULL,
112
+ "idData" JSONB NOT NULL,
113
+ "hash" TEXT NOT NULL,
114
+
115
+ CONSTRAINT "DataIdentifier_pkey" PRIMARY KEY ("id")
116
+ );
117
+
118
+ -- CreateTable
119
+ CREATE TABLE "Association" (
120
+ "id" SERIAL NOT NULL,
121
+ "integrationId" INTEGER NOT NULL,
122
+ "name" TEXT NOT NULL,
123
+ "type" "AssociationType" NOT NULL,
124
+ "primaryObject" TEXT NOT NULL,
125
+
126
+ CONSTRAINT "Association_pkey" PRIMARY KEY ("id")
127
+ );
128
+
129
+ -- CreateTable
130
+ CREATE TABLE "AssociationObject" (
131
+ "id" SERIAL NOT NULL,
132
+ "associationId" INTEGER NOT NULL,
133
+ "entityId" INTEGER NOT NULL,
134
+ "objectType" TEXT NOT NULL,
135
+ "objId" TEXT NOT NULL,
136
+ "metadata" JSONB,
137
+
138
+ CONSTRAINT "AssociationObject_pkey" PRIMARY KEY ("id")
139
+ );
140
+
141
+ -- CreateTable
142
+ CREATE TABLE "State" (
143
+ "id" SERIAL NOT NULL,
144
+ "state" JSONB,
145
+
146
+ CONSTRAINT "State_pkey" PRIMARY KEY ("id")
147
+ );
148
+
149
+ -- CreateTable
150
+ CREATE TABLE "WebsocketConnection" (
151
+ "id" SERIAL NOT NULL,
152
+ "connectionId" TEXT,
153
+
154
+ CONSTRAINT "WebsocketConnection_pkey" PRIMARY KEY ("id")
155
+ );
156
+
157
+ -- CreateTable
158
+ CREATE TABLE "_EntityToIntegration" (
159
+ "A" INTEGER NOT NULL,
160
+ "B" INTEGER NOT NULL,
161
+
162
+ CONSTRAINT "_EntityToIntegration_AB_pkey" PRIMARY KEY ("A","B")
163
+ );
164
+
165
+ -- CreateTable
166
+ CREATE TABLE "_EntityToSync" (
167
+ "A" INTEGER NOT NULL,
168
+ "B" INTEGER NOT NULL,
169
+
170
+ CONSTRAINT "_EntityToSync_AB_pkey" PRIMARY KEY ("A","B")
171
+ );
172
+
173
+ -- CreateIndex
174
+ CREATE INDEX "User_type_idx" ON "User"("type");
175
+
176
+ -- CreateIndex
177
+ CREATE INDEX "User_appUserId_idx" ON "User"("appUserId");
178
+
179
+ -- CreateIndex
180
+ CREATE UNIQUE INDEX "User_email_key" ON "User"("email");
181
+
182
+ -- CreateIndex
183
+ CREATE UNIQUE INDEX "User_username_key" ON "User"("username");
184
+
185
+ -- CreateIndex
186
+ CREATE UNIQUE INDEX "User_appOrgId_key" ON "User"("appOrgId");
187
+
188
+ -- CreateIndex
189
+ CREATE INDEX "Token_userId_idx" ON "Token"("userId");
190
+
191
+ -- CreateIndex
192
+ CREATE INDEX "Token_expires_idx" ON "Token"("expires");
193
+
194
+ -- CreateIndex
195
+ CREATE INDEX "Credential_userId_idx" ON "Credential"("userId");
196
+
197
+ -- CreateIndex
198
+ CREATE INDEX "Credential_externalId_idx" ON "Credential"("externalId");
199
+
200
+ -- CreateIndex
201
+ CREATE INDEX "Entity_userId_idx" ON "Entity"("userId");
202
+
203
+ -- CreateIndex
204
+ CREATE INDEX "Entity_externalId_idx" ON "Entity"("externalId");
205
+
206
+ -- CreateIndex
207
+ CREATE INDEX "Entity_moduleName_idx" ON "Entity"("moduleName");
208
+
209
+ -- CreateIndex
210
+ CREATE INDEX "Entity_credentialId_idx" ON "Entity"("credentialId");
211
+
212
+ -- CreateIndex
213
+ CREATE INDEX "Integration_userId_idx" ON "Integration"("userId");
214
+
215
+ -- CreateIndex
216
+ CREATE INDEX "Integration_status_idx" ON "Integration"("status");
217
+
218
+ -- CreateIndex
219
+ CREATE INDEX "IntegrationMapping_integrationId_idx" ON "IntegrationMapping"("integrationId");
220
+
221
+ -- CreateIndex
222
+ CREATE INDEX "IntegrationMapping_sourceId_idx" ON "IntegrationMapping"("sourceId");
223
+
224
+ -- CreateIndex
225
+ CREATE UNIQUE INDEX "IntegrationMapping_integrationId_sourceId_key" ON "IntegrationMapping"("integrationId", "sourceId");
226
+
227
+ -- CreateIndex
228
+ CREATE INDEX "Sync_integrationId_idx" ON "Sync"("integrationId");
229
+
230
+ -- CreateIndex
231
+ CREATE INDEX "Sync_hash_idx" ON "Sync"("hash");
232
+
233
+ -- CreateIndex
234
+ CREATE INDEX "Sync_name_idx" ON "Sync"("name");
235
+
236
+ -- CreateIndex
237
+ CREATE INDEX "DataIdentifier_syncId_idx" ON "DataIdentifier"("syncId");
238
+
239
+ -- CreateIndex
240
+ CREATE INDEX "DataIdentifier_entityId_idx" ON "DataIdentifier"("entityId");
241
+
242
+ -- CreateIndex
243
+ CREATE INDEX "DataIdentifier_hash_idx" ON "DataIdentifier"("hash");
244
+
245
+ -- CreateIndex
246
+ CREATE INDEX "Association_integrationId_idx" ON "Association"("integrationId");
247
+
248
+ -- CreateIndex
249
+ CREATE INDEX "Association_name_idx" ON "Association"("name");
250
+
251
+ -- CreateIndex
252
+ CREATE INDEX "AssociationObject_associationId_idx" ON "AssociationObject"("associationId");
253
+
254
+ -- CreateIndex
255
+ CREATE INDEX "AssociationObject_entityId_idx" ON "AssociationObject"("entityId");
256
+
257
+ -- CreateIndex
258
+ CREATE INDEX "WebsocketConnection_connectionId_idx" ON "WebsocketConnection"("connectionId");
259
+
260
+ -- CreateIndex
261
+ CREATE INDEX "_EntityToIntegration_B_index" ON "_EntityToIntegration"("B");
262
+
263
+ -- CreateIndex
264
+ CREATE INDEX "_EntityToSync_B_index" ON "_EntityToSync"("B");
265
+
266
+ -- AddForeignKey
267
+ ALTER TABLE "User" ADD CONSTRAINT "User_organizationId_fkey" FOREIGN KEY ("organizationId") REFERENCES "User"("id") ON DELETE NO ACTION ON UPDATE NO ACTION;
268
+
269
+ -- AddForeignKey
270
+ ALTER TABLE "Token" ADD CONSTRAINT "Token_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE CASCADE ON UPDATE CASCADE;
271
+
272
+ -- AddForeignKey
273
+ ALTER TABLE "Credential" ADD CONSTRAINT "Credential_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE CASCADE ON UPDATE CASCADE;
274
+
275
+ -- AddForeignKey
276
+ ALTER TABLE "Entity" ADD CONSTRAINT "Entity_credentialId_fkey" FOREIGN KEY ("credentialId") REFERENCES "Credential"("id") ON DELETE SET NULL ON UPDATE CASCADE;
277
+
278
+ -- AddForeignKey
279
+ ALTER TABLE "Entity" ADD CONSTRAINT "Entity_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE CASCADE ON UPDATE CASCADE;
280
+
281
+ -- AddForeignKey
282
+ ALTER TABLE "Integration" ADD CONSTRAINT "Integration_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE CASCADE ON UPDATE CASCADE;
283
+
284
+ -- AddForeignKey
285
+ ALTER TABLE "IntegrationMapping" ADD CONSTRAINT "IntegrationMapping_integrationId_fkey" FOREIGN KEY ("integrationId") REFERENCES "Integration"("id") ON DELETE CASCADE ON UPDATE CASCADE;
286
+
287
+ -- AddForeignKey
288
+ ALTER TABLE "Sync" ADD CONSTRAINT "Sync_integrationId_fkey" FOREIGN KEY ("integrationId") REFERENCES "Integration"("id") ON DELETE CASCADE ON UPDATE CASCADE;
289
+
290
+ -- AddForeignKey
291
+ ALTER TABLE "DataIdentifier" ADD CONSTRAINT "DataIdentifier_syncId_fkey" FOREIGN KEY ("syncId") REFERENCES "Sync"("id") ON DELETE CASCADE ON UPDATE CASCADE;
292
+
293
+ -- AddForeignKey
294
+ ALTER TABLE "DataIdentifier" ADD CONSTRAINT "DataIdentifier_entityId_fkey" FOREIGN KEY ("entityId") REFERENCES "Entity"("id") ON DELETE CASCADE ON UPDATE CASCADE;
295
+
296
+ -- AddForeignKey
297
+ ALTER TABLE "Association" ADD CONSTRAINT "Association_integrationId_fkey" FOREIGN KEY ("integrationId") REFERENCES "Integration"("id") ON DELETE CASCADE ON UPDATE CASCADE;
298
+
299
+ -- AddForeignKey
300
+ ALTER TABLE "AssociationObject" ADD CONSTRAINT "AssociationObject_associationId_fkey" FOREIGN KEY ("associationId") REFERENCES "Association"("id") ON DELETE CASCADE ON UPDATE CASCADE;
301
+
302
+ -- AddForeignKey
303
+ ALTER TABLE "AssociationObject" ADD CONSTRAINT "AssociationObject_entityId_fkey" FOREIGN KEY ("entityId") REFERENCES "Entity"("id") ON DELETE CASCADE ON UPDATE CASCADE;
304
+
305
+ -- AddForeignKey
306
+ ALTER TABLE "_EntityToIntegration" ADD CONSTRAINT "_EntityToIntegration_A_fkey" FOREIGN KEY ("A") REFERENCES "Entity"("id") ON DELETE CASCADE ON UPDATE CASCADE;
307
+
308
+ -- AddForeignKey
309
+ ALTER TABLE "_EntityToIntegration" ADD CONSTRAINT "_EntityToIntegration_B_fkey" FOREIGN KEY ("B") REFERENCES "Integration"("id") ON DELETE CASCADE ON UPDATE CASCADE;
310
+
311
+ -- AddForeignKey
312
+ ALTER TABLE "_EntityToSync" ADD CONSTRAINT "_EntityToSync_A_fkey" FOREIGN KEY ("A") REFERENCES "Entity"("id") ON DELETE CASCADE ON UPDATE CASCADE;
313
+
314
+ -- AddForeignKey
315
+ ALTER TABLE "_EntityToSync" ADD CONSTRAINT "_EntityToSync_B_fkey" FOREIGN KEY ("B") REFERENCES "Sync"("id") ON DELETE CASCADE ON UPDATE CASCADE;
@@ -0,0 +1,9 @@
1
+ /*
2
+ Warnings:
3
+
4
+ - You are about to drop the column `auth_is_valid` on the `Credential` table. All the data in the column will be lost.
5
+
6
+ */
7
+ -- AlterTable
8
+ ALTER TABLE "Credential" DROP COLUMN "auth_is_valid",
9
+ ADD COLUMN "authIsValid" BOOLEAN;
@@ -0,0 +1,3 @@
1
+ -- AlterTable
2
+ -- Remove unused entityReferenceMap field from Integration table
3
+ ALTER TABLE "Integration" DROP COLUMN "entityReferenceMap";
@@ -0,0 +1,25 @@
1
+ /*
2
+ Warnings:
3
+
4
+ - You are about to drop the column `subType` on the `Credential` table. All the data in the column will be lost.
5
+ - You are about to drop the column `subType` on the `Entity` table. All the data in the column will be lost.
6
+ - A unique constraint covering the columns `[username,appUserId]` on the table `User` will be added. If there are existing duplicate values, this will fail.
7
+
8
+ */
9
+ -- DropIndex
10
+ DROP INDEX "User_appOrgId_key";
11
+
12
+ -- DropIndex
13
+ DROP INDEX "User_email_key";
14
+
15
+ -- DropIndex
16
+ DROP INDEX "User_username_key";
17
+
18
+ -- AlterTable
19
+ ALTER TABLE "Credential" DROP COLUMN "subType";
20
+
21
+ -- AlterTable
22
+ ALTER TABLE "Entity" DROP COLUMN "subType";
23
+
24
+ -- CreateIndex
25
+ CREATE UNIQUE INDEX "User_username_appUserId_key" ON "User"("username", "appUserId");
@@ -0,0 +1,10 @@
1
+ -- AlterTable
2
+ -- Backfill the Entity.data JSONB field declared in schema.prisma but never
3
+ -- migrated. ModuleRepositoryPostgres.createEntity / findEntity use this
4
+ -- column to persist & rehydrate identifiers/details fields that fall
5
+ -- outside the six named columns (id, userId, credentialId, name,
6
+ -- moduleName, externalId). Without the column, any integration whose
7
+ -- getEntityDetails returns an extra field (e.g. `firm_subdomain`) causes
8
+ -- prisma.entity.create to throw P2022 at runtime.
9
+ ALTER TABLE "Entity"
10
+ ADD COLUMN IF NOT EXISTS "data" JSONB NOT NULL DEFAULT '{}';
@@ -0,0 +1,48 @@
1
+ -- CreateTable
2
+ -- The Process model is declared in schema.prisma but was never created by
3
+ -- any prior migration. ProcessRepositoryPostgres (read/write) and
4
+ -- FriggProcessManager rely on this table for long-running job tracking —
5
+ -- e.g. fan-out sync progress, batch state machines. Without the table,
6
+ -- any `prisma.process.create` at runtime throws P2021.
7
+ CREATE TABLE "Process" (
8
+ "id" SERIAL NOT NULL,
9
+ "userId" INTEGER NOT NULL,
10
+ "integrationId" INTEGER NOT NULL,
11
+ "name" TEXT NOT NULL,
12
+ "type" TEXT NOT NULL,
13
+ "state" TEXT NOT NULL,
14
+ "context" JSONB NOT NULL DEFAULT '{}',
15
+ "results" JSONB NOT NULL DEFAULT '{}',
16
+ "parentProcessId" INTEGER,
17
+ "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
18
+ "updatedAt" TIMESTAMP(3) NOT NULL,
19
+
20
+ CONSTRAINT "Process_pkey" PRIMARY KEY ("id")
21
+ );
22
+
23
+ -- CreateIndex
24
+ CREATE INDEX "Process_userId_idx" ON "Process"("userId");
25
+
26
+ -- CreateIndex
27
+ CREATE INDEX "Process_integrationId_idx" ON "Process"("integrationId");
28
+
29
+ -- CreateIndex
30
+ CREATE INDEX "Process_type_idx" ON "Process"("type");
31
+
32
+ -- CreateIndex
33
+ CREATE INDEX "Process_state_idx" ON "Process"("state");
34
+
35
+ -- CreateIndex
36
+ CREATE INDEX "Process_name_idx" ON "Process"("name");
37
+
38
+ -- CreateIndex
39
+ CREATE INDEX "Process_parentProcessId_idx" ON "Process"("parentProcessId");
40
+
41
+ -- AddForeignKey
42
+ ALTER TABLE "Process" ADD CONSTRAINT "Process_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE CASCADE ON UPDATE CASCADE;
43
+
44
+ -- AddForeignKey
45
+ ALTER TABLE "Process" ADD CONSTRAINT "Process_integrationId_fkey" FOREIGN KEY ("integrationId") REFERENCES "Integration"("id") ON DELETE CASCADE ON UPDATE CASCADE;
46
+
47
+ -- AddForeignKey
48
+ ALTER TABLE "Process" ADD CONSTRAINT "Process_parentProcessId_fkey" FOREIGN KEY ("parentProcessId") REFERENCES "Process"("id") ON DELETE SET NULL ON UPDATE CASCADE;
@@ -0,0 +1,3 @@
1
+ # Please do not edit this file manually
2
+ # It should be added in your version-control system (e.g., Git)
3
+ provider = "postgresql"