@friggframework/core 2.0.0--canary.522.cbd3d5a.0 → 2.0.0--canary.517.35ee143.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 (225) hide show
  1. package/CHANGELOG.md +67 -66
  2. package/CLAUDE.md +124 -148
  3. package/README.md +130 -165
  4. package/admin-scripts/index.js +16 -30
  5. package/admin-scripts/repositories/{admin-api-key-repository-documentdb.js → admin-process-repository-documentdb.js} +5 -5
  6. package/admin-scripts/repositories/{admin-api-key-repository-factory.js → admin-process-repository-factory.js} +15 -19
  7. package/admin-scripts/repositories/admin-process-repository-interface.js +150 -0
  8. package/admin-scripts/repositories/admin-process-repository-mongo.js +213 -0
  9. package/admin-scripts/repositories/admin-process-repository-postgres.js +251 -0
  10. package/admin-scripts/repositories/script-schedule-repository-factory.js +2 -6
  11. package/admin-scripts/repositories/script-schedule-repository-interface.js +14 -36
  12. package/admin-scripts/repositories/script-schedule-repository-mongo.js +13 -25
  13. package/admin-scripts/repositories/script-schedule-repository-postgres.js +13 -25
  14. package/application/commands/admin-script-commands.js +102 -266
  15. package/application/commands/integration-commands.js +6 -12
  16. package/application/index.js +3 -1
  17. package/assertions/get.js +4 -1
  18. package/associations/association.js +57 -59
  19. package/associations/model.js +41 -41
  20. package/core/CLAUDE.md +156 -222
  21. package/core/Worker.js +1 -5
  22. package/credential/repositories/credential-repository-documentdb.js +1 -71
  23. package/credential/repositories/credential-repository-interface.js +2 -8
  24. package/credential/repositories/credential-repository-mongo.js +4 -45
  25. package/credential/repositories/credential-repository-postgres.js +3 -44
  26. package/credential/repositories/credential-repository.js +4 -6
  27. package/credential/use-cases/get-credential-for-user.js +3 -21
  28. package/credential/use-cases/update-authentication-status.js +2 -5
  29. package/database/MONGODB_TRANSACTION_FIX.md +52 -72
  30. package/database/adapters/lambda-invoker.js +7 -8
  31. package/database/config.js +13 -15
  32. package/database/documentdb-encryption-service.js +13 -29
  33. package/database/documentdb-utils.js +12 -21
  34. package/database/encryption/README.md +36 -53
  35. package/database/encryption/encryption-schema-registry.js +9 -21
  36. package/database/encryption/field-encryption-service.js +4 -15
  37. package/database/encryption/logger.js +2 -3
  38. package/database/encryption/prisma-encryption-extension.js +8 -5
  39. package/database/index.js +2 -4
  40. package/database/models/IndividualUser.js +15 -15
  41. package/database/models/OrganizationUser.js +4 -6
  42. package/database/models/UserModel.js +2 -2
  43. package/database/models/WebsocketConnection.js +1 -4
  44. package/database/mongoose.js +2 -2
  45. package/database/prisma.js +14 -22
  46. package/database/repositories/health-check-repository-documentdb.js +7 -22
  47. package/database/repositories/health-check-repository-factory.js +3 -9
  48. package/database/repositories/health-check-repository-interface.js +5 -15
  49. package/database/repositories/health-check-repository-mongodb.js +6 -9
  50. package/database/repositories/health-check-repository-postgres.js +1 -1
  51. package/database/repositories/migration-status-repository-s3.js +5 -10
  52. package/database/use-cases/check-database-health-use-case.js +2 -3
  53. package/database/use-cases/check-database-state-use-case.js +7 -9
  54. package/database/use-cases/get-database-state-via-worker-use-case.js +12 -15
  55. package/database/use-cases/get-migration-status-use-case.js +2 -4
  56. package/database/use-cases/run-database-migration-use-case.js +9 -41
  57. package/database/use-cases/test-encryption-use-case.js +5 -4
  58. package/database/use-cases/trigger-database-migration-use-case.js +8 -9
  59. package/database/utils/mongodb-collection-utils.js +3 -11
  60. package/database/utils/mongodb-schema-init.js +4 -10
  61. package/database/utils/prisma-runner.js +74 -144
  62. package/database/utils/prisma-schema-parser.js +2 -2
  63. package/docs/PROCESS_MANAGEMENT_QUEUE_SPEC.md +80 -135
  64. package/encrypt/Cryptor.js +2 -8
  65. package/errors/fetch-error.js +1 -1
  66. package/generated/prisma-mongodb/edge.js +16 -59
  67. package/generated/prisma-mongodb/index-browser.js +12 -62
  68. package/generated/prisma-mongodb/index.d.ts +4850 -8136
  69. package/generated/prisma-mongodb/index.js +16 -59
  70. package/generated/prisma-mongodb/package.json +1 -1
  71. package/generated/prisma-mongodb/schema.prisma +33 -75
  72. package/generated/prisma-mongodb/wasm.js +16 -59
  73. package/generated/prisma-postgresql/edge.js +15 -59
  74. package/generated/prisma-postgresql/index-browser.js +11 -62
  75. package/generated/prisma-postgresql/index.d.ts +5963 -8930
  76. package/generated/prisma-postgresql/index.js +15 -59
  77. package/generated/prisma-postgresql/package.json +1 -1
  78. package/generated/prisma-postgresql/schema.prisma +33 -73
  79. package/generated/prisma-postgresql/wasm.js +15 -59
  80. package/handlers/WEBHOOKS.md +81 -104
  81. package/handlers/app-definition-loader.js +1 -1
  82. package/handlers/app-handler-helpers.js +2 -14
  83. package/handlers/backend-utils.js +1 -0
  84. package/handlers/database-migration-handler.js +45 -64
  85. package/handlers/middleware/admin-auth.js +53 -0
  86. package/handlers/routers/HEALTHCHECK.md +135 -170
  87. package/handlers/routers/auth.js +2 -23
  88. package/handlers/routers/db-migration.handler.js +3 -2
  89. package/handlers/routers/db-migration.js +33 -69
  90. package/handlers/routers/health.js +8 -23
  91. package/handlers/routers/integration-defined-routers.js +4 -4
  92. package/handlers/routers/integration-webhook-routers.js +7 -17
  93. package/handlers/routers/websocket.js +3 -9
  94. package/handlers/use-cases/check-integrations-health-use-case.js +6 -13
  95. package/handlers/workers/db-migration.js +26 -54
  96. package/index.js +9 -5
  97. package/integrations/WEBHOOK-QUICKSTART.md +14 -21
  98. package/integrations/index.js +0 -4
  99. package/integrations/integration-base.js +6 -9
  100. package/integrations/integration-router.js +146 -1817
  101. package/integrations/options.js +20 -47
  102. package/integrations/repositories/integration-repository-documentdb.js +24 -53
  103. package/integrations/repositories/integration-repository-factory.js +2 -6
  104. package/integrations/repositories/integration-repository-interface.js +9 -27
  105. package/integrations/repositories/integration-repository-postgres.js +3 -3
  106. package/integrations/repositories/process-repository-factory.js +1 -0
  107. package/integrations/repositories/process-repository-interface.js +5 -9
  108. package/integrations/repositories/process-repository-mongo.js +3 -7
  109. package/integrations/repositories/process-repository-postgres.js +2 -2
  110. package/integrations/tests/doubles/config-capturing-integration.js +8 -9
  111. package/integrations/tests/doubles/dummy-integration-class.js +8 -81
  112. package/integrations/tests/doubles/test-integration-repository.js +11 -51
  113. package/integrations/use-cases/create-integration.js +32 -36
  114. package/integrations/use-cases/create-process.js +9 -20
  115. package/integrations/use-cases/delete-integration-for-user.js +4 -5
  116. package/integrations/use-cases/get-integration-for-user.js +10 -25
  117. package/integrations/use-cases/get-integration-instance-by-definition.js +7 -13
  118. package/integrations/use-cases/get-integrations-for-user.js +1 -4
  119. package/integrations/use-cases/get-possible-integrations.js +1 -1
  120. package/integrations/use-cases/get-process.js +6 -5
  121. package/integrations/use-cases/index.js +1 -3
  122. package/integrations/use-cases/load-integration-context.js +5 -1
  123. package/integrations/use-cases/update-process-state.js +8 -10
  124. package/integrations/utils/map-integration-dto.js +3 -9
  125. package/jest-setup.js +1 -1
  126. package/jest-teardown.js +1 -1
  127. package/lambda/TimeoutCatcher.js +30 -32
  128. package/lambda/index.js +1 -1
  129. package/logs/index.js +3 -3
  130. package/modules/module.js +1 -3
  131. package/modules/repositories/module-repository-documentdb.js +48 -114
  132. package/modules/repositories/module-repository-interface.js +0 -13
  133. package/modules/repositories/module-repository-mongo.js +6 -46
  134. package/modules/repositories/module-repository-postgres.js +6 -48
  135. package/modules/repositories/module-repository.js +1 -34
  136. package/modules/requester/api-key.js +2 -0
  137. package/modules/requester/basic.js +1 -0
  138. package/modules/requester/oauth-2.js +2 -3
  139. package/modules/test/mock-api/definition.js +10 -15
  140. package/modules/test/mock-api/mocks/hubspot.js +36 -36
  141. package/modules/tests/doubles/test-module-factory.js +4 -10
  142. package/modules/tests/doubles/test-module-repository.js +1 -1
  143. package/modules/use-cases/get-entities-for-user.js +1 -1
  144. package/modules/use-cases/get-entity-options-by-id.js +6 -8
  145. package/modules/use-cases/get-module.js +9 -12
  146. package/modules/use-cases/process-authorization-callback.js +6 -12
  147. package/modules/use-cases/refresh-entity-options.js +6 -8
  148. package/modules/use-cases/test-module-auth.js +6 -8
  149. package/modules/utils/map-module-dto.js +2 -2
  150. package/package.json +5 -7
  151. package/prisma-mongodb/schema.prisma +33 -75
  152. package/prisma-postgresql/schema.prisma +33 -73
  153. package/queues/queuer-util.js +1 -5
  154. package/syncs/model.js +51 -51
  155. package/syncs/repositories/sync-repository-documentdb.js +19 -39
  156. package/syncs/repositories/sync-repository-interface.js +2 -6
  157. package/syncs/repositories/sync-repository-postgres.js +13 -19
  158. package/syncs/sync.js +100 -104
  159. package/token/repositories/token-repository-factory.js +3 -1
  160. package/types/assertions/index.d.ts +72 -72
  161. package/types/associations/index.d.ts +57 -57
  162. package/types/core/index.d.ts +53 -59
  163. package/types/database/index.d.ts +2 -2
  164. package/types/encrypt/index.d.ts +3 -3
  165. package/types/errors/index.d.ts +54 -61
  166. package/types/eslint-config/index.d.ts +40 -40
  167. package/types/integrations/index.d.ts +183 -185
  168. package/types/lambda/index.d.ts +26 -26
  169. package/types/logs/index.d.ts +4 -4
  170. package/types/module-plugin/index.d.ts +237 -239
  171. package/types/prettier-config/index.d.ts +5 -5
  172. package/types/syncs/index.d.ts +108 -102
  173. package/types/test-environment/index.d.ts +14 -14
  174. package/types/tsconfig.json +93 -95
  175. package/user/tests/doubles/test-user-repository.js +2 -5
  176. package/user/use-cases/authenticate-user.js +4 -2
  177. package/user/use-cases/authenticate-with-shared-secret.js +1 -1
  178. package/user/use-cases/create-individual-user.js +7 -8
  179. package/user/use-cases/create-organization-user.js +1 -1
  180. package/user/use-cases/create-token-for-user-id.js +1 -1
  181. package/user/use-cases/get-user-from-adopter-jwt.js +2 -0
  182. package/user/use-cases/get-user-from-bearer-token.js +3 -7
  183. package/user/use-cases/get-user-from-x-frigg-headers.js +11 -14
  184. package/user/use-cases/login-user.js +8 -8
  185. package/user/user.js +4 -18
  186. package/utils/backend-path.js +2 -2
  187. package/utils/index.js +1 -4
  188. package/websocket/repositories/websocket-connection-repository-documentdb.js +8 -21
  189. package/websocket/repositories/websocket-connection-repository-mongo.js +4 -8
  190. package/websocket/repositories/websocket-connection-repository-postgres.js +4 -8
  191. package/websocket/repositories/websocket-connection-repository.js +4 -8
  192. package/admin-scripts/repositories/admin-api-key-repository-interface.js +0 -121
  193. package/admin-scripts/repositories/admin-api-key-repository-mongo.js +0 -155
  194. package/admin-scripts/repositories/admin-api-key-repository-postgres.js +0 -189
  195. package/admin-scripts/repositories/script-execution-repository-documentdb.js +0 -21
  196. package/admin-scripts/repositories/script-execution-repository-factory.js +0 -55
  197. package/admin-scripts/repositories/script-execution-repository-interface.js +0 -193
  198. package/admin-scripts/repositories/script-execution-repository-mongo.js +0 -278
  199. package/admin-scripts/repositories/script-execution-repository-postgres.js +0 -320
  200. package/credential/credential-router.js +0 -262
  201. package/credential/use-cases/delete-credential-for-user.js +0 -50
  202. package/credential/use-cases/list-credentials-for-user.js +0 -31
  203. package/credential/use-cases/reauthorize-credential.js +0 -103
  204. package/handlers/routers/admin.js +0 -450
  205. package/handlers/routers/docs.js +0 -180
  206. package/handlers/routers/middleware/loadUser.js +0 -39
  207. package/handlers/routers/middleware/requireAdmin.js +0 -41
  208. package/handlers/routers/middleware/requireLoggedInUser.js +0 -19
  209. package/integrations/use-cases/execute-proxy-request.js +0 -564
  210. package/modules/domain/entities/AuthorizationSession.js +0 -131
  211. package/modules/domain/entities/index.js +0 -10
  212. package/modules/repositories/authorization-session-repository-factory.js +0 -55
  213. package/modules/repositories/authorization-session-repository-interface.js +0 -75
  214. package/modules/repositories/authorization-session-repository-mongo.js +0 -169
  215. package/modules/repositories/authorization-session-repository-postgres.js +0 -170
  216. package/modules/use-cases/delete-module-entity.js +0 -23
  217. package/modules/use-cases/get-authorization-requirements.js +0 -110
  218. package/modules/use-cases/get-module-entity-by-id.js +0 -16
  219. package/modules/use-cases/process-authorization-step.js +0 -160
  220. package/modules/use-cases/start-authorization-session.js +0 -86
  221. package/modules/use-cases/update-module-entity.js +0 -27
  222. package/openapi/openapi-spec-generator.js +0 -370
  223. package/openapi/openapi-v1.yaml +0 -1360
  224. package/openapi/openapi-v2.yaml +0 -1535
  225. package/user/use-cases/delete-user.js +0 -47
@@ -1,4 +1,4 @@
1
- const md5 = require('md5');
1
+ const md5 = require("md5");
2
2
  const { get } = require('../assertions');
3
3
 
4
4
  /**
@@ -8,73 +8,71 @@ const { get } = require('../assertions');
8
8
  * later...
9
9
  */
10
10
  class Association {
11
- static Config = {
12
- name: 'Association',
13
-
14
- reverseModuleMap: {},
15
- };
16
- constructor(params) {
17
- this.data = {};
18
-
19
- let data = get(params, 'data');
20
- this.moduleName = get(params, 'moduleName');
21
- this.dataIdentifier = get(params, 'dataIdentifier');
22
-
23
- this.dataIdentifierHash = this.constructor.hashJSON(
24
- this.dataIdentifier
25
- );
26
-
27
- for (let key of this.constructor.Config.keys) {
28
- this.data[key] =
29
- this.constructor.Config.moduleMap[this.moduleName][key](data);
30
- }
31
-
32
- // matchHash is used to find matches between two sync objects
33
- let matchHashData = [];
34
- for (let key of this.constructor.Config.matchOn) {
35
- matchHashData.push(this.data[key]);
36
- }
37
- this.matchHash = this.constructor.hashJSON(matchHashData);
38
-
39
- this.syncId = null;
40
- }
41
-
42
- equals(syncObj) {
43
- return this.matchHash === syncObj.matchHash;
44
- }
45
- dataKeyIsReplaceable(key) {
46
- return this.data[key] === null || this.data[key] === '';
47
- }
11
+ static Config = {
12
+ name: "Association",
48
13
 
49
- isModuleInMap(moduleName) {
50
- return this.constructor.Config.moduleMap[name];
51
- }
14
+ reverseModuleMap: {},
15
+ };
16
+ constructor(params) {
17
+ this.data = {};
52
18
 
53
- getName() {
54
- return this.name;
55
- }
19
+ let data = get(params, "data");
20
+ this.moduleName = get(params, "moduleName");
21
+ this.dataIdentifier = get(params, "dataIdentifier");
56
22
 
57
- getHashData() {
58
- let orderedData = [];
59
- for (let key of this.constructor.Config.keys) {
60
- orderedData.push(this.data[key]);
61
- }
23
+ this.dataIdentifierHash = this.constructor.hashJSON(this.dataIdentifier);
62
24
 
63
- return this.constructor.hashJSON(orderedData);
25
+ for (let key of this.constructor.Config.keys) {
26
+ this.data[key] =
27
+ this.constructor.Config.moduleMap[this.moduleName][key](data);
64
28
  }
65
29
 
66
- setSyncId(syncId) {
67
- this.syncId = syncId;
30
+ // matchHash is used to find matches between two sync objects
31
+ let matchHashData = [];
32
+ for (let key of this.constructor.Config.matchOn) {
33
+ matchHashData.push(this.data[key]);
68
34
  }
69
-
70
- reverseModuleMap(moduleName) {
71
- return this.constructor.Config.reverseModuleMap[moduleName](this.data);
35
+ this.matchHash = this.constructor.hashJSON(matchHashData);
36
+
37
+ this.syncId = null;
38
+ }
39
+
40
+ equals(syncObj) {
41
+ return this.matchHash === syncObj.matchHash;
42
+ }
43
+ dataKeyIsReplaceable(key) {
44
+ return this.data[key] === null || this.data[key] === "";
45
+ }
46
+
47
+ isModuleInMap(moduleName) {
48
+ return this.constructor.Config.moduleMap[name];
49
+ }
50
+
51
+ getName() {
52
+ return this.name;
53
+ }
54
+
55
+ getHashData() {
56
+ let orderedData = [];
57
+ for (let key of this.constructor.Config.keys) {
58
+ orderedData.push(this.data[key]);
72
59
  }
73
60
 
74
- static hashJSON(data) {
75
- let dataString = JSON.stringify(data, null, 2);
76
- return md5(dataString);
77
- }
61
+ return this.constructor.hashJSON(orderedData);
62
+ }
63
+
64
+ setSyncId(syncId) {
65
+ this.syncId = syncId;
66
+ }
67
+
68
+ reverseModuleMap(moduleName) {
69
+ return this.constructor.Config.reverseModuleMap[moduleName](this.data);
70
+ }
71
+
72
+ static hashJSON(data) {
73
+ let dataString = JSON.stringify(data, null, 2);
74
+ return md5(dataString);
75
+ }
78
76
  }
79
77
 
80
78
  module.exports = Association;
@@ -1,54 +1,54 @@
1
- const mongoose = require('mongoose');
1
+ const mongoose = require("mongoose");
2
2
 
3
3
  const schema = new mongoose.Schema({
4
- integration: {
4
+ integration: {
5
+ type: mongoose.Schema.Types.ObjectId,
6
+ ref: "Integration",
7
+ required: true,
8
+ },
9
+ name: { type: String, required: true },
10
+ type: {
11
+ type: String,
12
+ enum: ["ONE_TO_MANY", "ONE_TO_ONE", "MANY_TO_ONE"],
13
+ required: true,
14
+ },
15
+ primaryObject: { type: String, required: true },
16
+ objects: [
17
+ {
18
+ entity: {
5
19
  type: mongoose.Schema.Types.ObjectId,
6
- ref: 'Integration',
20
+ ref: "Entity",
7
21
  required: true,
22
+ },
23
+ objectType: { type: String, required: true },
24
+ objId: { type: String, required: true },
25
+ metadata: { type: Object, required: false },
8
26
  },
9
- name: { type: String, required: true },
10
- type: {
11
- type: String,
12
- enum: ['ONE_TO_MANY', 'ONE_TO_ONE', 'MANY_TO_ONE'],
13
- required: true,
14
- },
15
- primaryObject: { type: String, required: true },
16
- objects: [
17
- {
18
- entity: {
19
- type: mongoose.Schema.Types.ObjectId,
20
- ref: 'Entity',
21
- required: true,
22
- },
23
- objectType: { type: String, required: true },
24
- objId: { type: String, required: true },
25
- metadata: { type: Object, required: false },
26
- },
27
- ],
27
+ ],
28
28
  });
29
29
 
30
30
  schema.statics({
31
- addAssociation: async function (id, object) {
32
- return this.update({ _id: id }, { $push: { objects: object } });
33
- },
34
- findAssociation: async function (name, dataIdentifierHash) {
35
- const syncList = await this.list({
36
- name: name,
37
- 'dataIdentifiers.hash': dataIdentifierHash,
38
- });
31
+ addAssociation: async function (id, object) {
32
+ return this.update({ _id: id }, { $push: { objects: object } });
33
+ },
34
+ findAssociation: async function (name, dataIdentifierHash) {
35
+ const syncList = await this.list({
36
+ name: name,
37
+ "dataIdentifiers.hash": dataIdentifierHash,
38
+ });
39
39
 
40
- if (syncList.length === 1) {
41
- return syncList[0];
42
- } else if (syncList.length === 0) {
43
- return null;
44
- } else {
45
- throw new Error(
46
- `there are multiple sync objects with the name ${name}, for entities [${entities}]`
47
- );
48
- }
49
- },
40
+ if (syncList.length === 1) {
41
+ return syncList[0];
42
+ } else if (syncList.length === 0) {
43
+ return null;
44
+ } else {
45
+ throw new Error(
46
+ `there are multiple sync objects with the name ${name}, for entities [${entities}]`
47
+ );
48
+ }
49
+ },
50
50
  });
51
51
 
52
52
  const Association =
53
- mongoose.models.Association || mongoose.model('Association', schema);
53
+ mongoose.models.Association || mongoose.model("Association", schema);
54
54
  module.exports = { Association };