@friggframework/core 2.0.0-next.44 → 2.0.0-next.46

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 (166) hide show
  1. package/README.md +28 -0
  2. package/application/commands/integration-commands.js +19 -0
  3. package/core/Worker.js +8 -21
  4. package/credential/repositories/credential-repository-mongo.js +14 -8
  5. package/credential/repositories/credential-repository-postgres.js +14 -8
  6. package/credential/repositories/credential-repository.js +3 -8
  7. package/database/MONGODB_TRANSACTION_FIX.md +198 -0
  8. package/database/adapters/lambda-invoker.js +97 -0
  9. package/database/config.js +11 -2
  10. package/database/models/WebsocketConnection.js +11 -10
  11. package/database/prisma.js +63 -3
  12. package/database/repositories/health-check-repository-mongodb.js +3 -0
  13. package/database/repositories/migration-status-repository-s3.js +137 -0
  14. package/database/use-cases/check-database-state-use-case.js +81 -0
  15. package/database/use-cases/check-encryption-health-use-case.js +3 -2
  16. package/database/use-cases/get-database-state-via-worker-use-case.js +61 -0
  17. package/database/use-cases/get-migration-status-use-case.js +93 -0
  18. package/database/use-cases/run-database-migration-use-case.js +137 -0
  19. package/database/use-cases/trigger-database-migration-use-case.js +157 -0
  20. package/database/utils/mongodb-collection-utils.js +91 -0
  21. package/database/utils/mongodb-schema-init.js +106 -0
  22. package/database/utils/prisma-runner.js +400 -0
  23. package/database/utils/prisma-schema-parser.js +182 -0
  24. package/encrypt/Cryptor.js +14 -16
  25. package/generated/prisma-mongodb/client.d.ts +1 -0
  26. package/generated/prisma-mongodb/client.js +4 -0
  27. package/generated/prisma-mongodb/default.d.ts +1 -0
  28. package/generated/prisma-mongodb/default.js +4 -0
  29. package/generated/prisma-mongodb/edge.d.ts +1 -0
  30. package/generated/prisma-mongodb/edge.js +334 -0
  31. package/generated/prisma-mongodb/index-browser.js +316 -0
  32. package/generated/prisma-mongodb/index.d.ts +22897 -0
  33. package/generated/prisma-mongodb/index.js +359 -0
  34. package/generated/prisma-mongodb/package.json +183 -0
  35. package/generated/prisma-mongodb/query-engine-debian-openssl-3.0.x +0 -0
  36. package/generated/prisma-mongodb/query-engine-rhel-openssl-3.0.x +0 -0
  37. package/generated/prisma-mongodb/runtime/binary.d.ts +1 -0
  38. package/generated/prisma-mongodb/runtime/binary.js +289 -0
  39. package/generated/prisma-mongodb/runtime/edge-esm.js +34 -0
  40. package/generated/prisma-mongodb/runtime/edge.js +34 -0
  41. package/generated/prisma-mongodb/runtime/index-browser.d.ts +370 -0
  42. package/generated/prisma-mongodb/runtime/index-browser.js +16 -0
  43. package/generated/prisma-mongodb/runtime/library.d.ts +3977 -0
  44. package/generated/prisma-mongodb/runtime/react-native.js +83 -0
  45. package/generated/prisma-mongodb/runtime/wasm-compiler-edge.js +84 -0
  46. package/generated/prisma-mongodb/runtime/wasm-engine-edge.js +36 -0
  47. package/generated/prisma-mongodb/schema.prisma +362 -0
  48. package/generated/prisma-mongodb/wasm-edge-light-loader.mjs +4 -0
  49. package/generated/prisma-mongodb/wasm-worker-loader.mjs +4 -0
  50. package/generated/prisma-mongodb/wasm.d.ts +1 -0
  51. package/generated/prisma-mongodb/wasm.js +341 -0
  52. package/generated/prisma-postgresql/client.d.ts +1 -0
  53. package/generated/prisma-postgresql/client.js +4 -0
  54. package/generated/prisma-postgresql/default.d.ts +1 -0
  55. package/generated/prisma-postgresql/default.js +4 -0
  56. package/generated/prisma-postgresql/edge.d.ts +1 -0
  57. package/generated/prisma-postgresql/edge.js +356 -0
  58. package/generated/prisma-postgresql/index-browser.js +338 -0
  59. package/generated/prisma-postgresql/index.d.ts +25071 -0
  60. package/generated/prisma-postgresql/index.js +381 -0
  61. package/generated/prisma-postgresql/package.json +183 -0
  62. package/generated/prisma-postgresql/query-engine-debian-openssl-3.0.x +0 -0
  63. package/generated/prisma-postgresql/query-engine-rhel-openssl-3.0.x +0 -0
  64. package/generated/prisma-postgresql/query_engine_bg.js +2 -0
  65. package/generated/prisma-postgresql/query_engine_bg.wasm +0 -0
  66. package/generated/prisma-postgresql/runtime/binary.d.ts +1 -0
  67. package/generated/prisma-postgresql/runtime/binary.js +289 -0
  68. package/generated/prisma-postgresql/runtime/edge-esm.js +34 -0
  69. package/generated/prisma-postgresql/runtime/edge.js +34 -0
  70. package/generated/prisma-postgresql/runtime/index-browser.d.ts +370 -0
  71. package/generated/prisma-postgresql/runtime/index-browser.js +16 -0
  72. package/generated/prisma-postgresql/runtime/library.d.ts +3977 -0
  73. package/generated/prisma-postgresql/runtime/react-native.js +83 -0
  74. package/generated/prisma-postgresql/runtime/wasm-compiler-edge.js +84 -0
  75. package/generated/prisma-postgresql/runtime/wasm-engine-edge.js +36 -0
  76. package/generated/prisma-postgresql/schema.prisma +345 -0
  77. package/generated/prisma-postgresql/wasm-edge-light-loader.mjs +4 -0
  78. package/generated/prisma-postgresql/wasm-worker-loader.mjs +4 -0
  79. package/generated/prisma-postgresql/wasm.d.ts +1 -0
  80. package/generated/prisma-postgresql/wasm.js +363 -0
  81. package/handlers/WEBHOOKS.md +653 -0
  82. package/handlers/backend-utils.js +118 -3
  83. package/handlers/database-migration-handler.js +227 -0
  84. package/handlers/routers/auth.js +1 -1
  85. package/handlers/routers/db-migration.handler.js +29 -0
  86. package/handlers/routers/db-migration.js +256 -0
  87. package/handlers/routers/health.js +41 -6
  88. package/handlers/routers/integration-webhook-routers.js +67 -0
  89. package/handlers/use-cases/check-integrations-health-use-case.js +22 -10
  90. package/handlers/workers/db-migration.js +352 -0
  91. package/index.js +28 -0
  92. package/integrations/WEBHOOK-QUICKSTART.md +151 -0
  93. package/integrations/integration-base.js +74 -3
  94. package/integrations/integration-router.js +60 -70
  95. package/integrations/repositories/integration-repository-interface.js +12 -0
  96. package/integrations/repositories/integration-repository-mongo.js +32 -0
  97. package/integrations/repositories/integration-repository-postgres.js +33 -0
  98. package/integrations/repositories/process-repository-postgres.js +43 -20
  99. package/integrations/tests/doubles/dummy-integration-class.js +1 -8
  100. package/integrations/tests/doubles/test-integration-repository.js +2 -2
  101. package/logs/logger.js +0 -4
  102. package/modules/entity.js +0 -1
  103. package/modules/repositories/module-repository-mongo.js +3 -12
  104. package/modules/repositories/module-repository-postgres.js +0 -11
  105. package/modules/repositories/module-repository.js +1 -12
  106. package/modules/use-cases/get-entity-options-by-id.js +1 -1
  107. package/modules/use-cases/get-module.js +1 -2
  108. package/modules/use-cases/refresh-entity-options.js +1 -1
  109. package/modules/use-cases/test-module-auth.js +1 -1
  110. package/package.json +82 -66
  111. package/prisma-mongodb/schema.prisma +21 -21
  112. package/prisma-postgresql/schema.prisma +15 -15
  113. package/queues/queuer-util.js +28 -15
  114. package/types/core/index.d.ts +2 -2
  115. package/types/module-plugin/index.d.ts +0 -2
  116. package/user/repositories/user-repository-mongo.js +53 -12
  117. package/user/repositories/user-repository-postgres.js +53 -14
  118. package/user/use-cases/authenticate-user.js +127 -0
  119. package/user/use-cases/authenticate-with-shared-secret.js +48 -0
  120. package/user/use-cases/get-user-from-adopter-jwt.js +149 -0
  121. package/user/use-cases/get-user-from-x-frigg-headers.js +106 -0
  122. package/user/use-cases/login-user.js +1 -1
  123. package/user/user.js +18 -2
  124. package/websocket/repositories/websocket-connection-repository-mongo.js +11 -10
  125. package/websocket/repositories/websocket-connection-repository-postgres.js +11 -10
  126. package/websocket/repositories/websocket-connection-repository.js +11 -10
  127. package/application/commands/integration-commands.test.js +0 -123
  128. package/database/encryption/encryption-integration.test.js +0 -553
  129. package/database/encryption/encryption-schema-registry.test.js +0 -392
  130. package/database/encryption/field-encryption-service.test.js +0 -525
  131. package/database/encryption/mongo-decryption-fix-verification.test.js +0 -348
  132. package/database/encryption/postgres-decryption-fix-verification.test.js +0 -371
  133. package/database/encryption/postgres-relation-decryption.test.js +0 -245
  134. package/database/encryption/prisma-encryption-extension.test.js +0 -439
  135. package/errors/base-error.test.js +0 -32
  136. package/errors/fetch-error.test.js +0 -79
  137. package/errors/halt-error.test.js +0 -11
  138. package/errors/validation-errors.test.js +0 -120
  139. package/handlers/auth-flow.integration.test.js +0 -147
  140. package/handlers/integration-event-dispatcher.test.js +0 -141
  141. package/handlers/routers/health.test.js +0 -210
  142. package/integrations/tests/use-cases/create-integration.test.js +0 -131
  143. package/integrations/tests/use-cases/delete-integration-for-user.test.js +0 -150
  144. package/integrations/tests/use-cases/find-integration-context-by-external-entity-id.test.js +0 -92
  145. package/integrations/tests/use-cases/get-integration-for-user.test.js +0 -150
  146. package/integrations/tests/use-cases/get-integration-instance.test.js +0 -176
  147. package/integrations/tests/use-cases/get-integrations-for-user.test.js +0 -176
  148. package/integrations/tests/use-cases/get-possible-integrations.test.js +0 -188
  149. package/integrations/tests/use-cases/update-integration-messages.test.js +0 -142
  150. package/integrations/tests/use-cases/update-integration-status.test.js +0 -103
  151. package/integrations/tests/use-cases/update-integration.test.js +0 -141
  152. package/integrations/use-cases/create-process.test.js +0 -178
  153. package/integrations/use-cases/get-process.test.js +0 -190
  154. package/integrations/use-cases/load-integration-context-full.test.js +0 -329
  155. package/integrations/use-cases/load-integration-context.test.js +0 -114
  156. package/integrations/use-cases/update-process-metrics.test.js +0 -308
  157. package/integrations/use-cases/update-process-state.test.js +0 -256
  158. package/lambda/TimeoutCatcher.test.js +0 -68
  159. package/logs/logger.test.js +0 -76
  160. package/modules/module-hydration.test.js +0 -205
  161. package/modules/requester/requester.test.js +0 -28
  162. package/user/tests/use-cases/create-individual-user.test.js +0 -24
  163. package/user/tests/use-cases/create-organization-user.test.js +0 -28
  164. package/user/tests/use-cases/create-token-for-user-id.test.js +0 -19
  165. package/user/tests/use-cases/get-user-from-bearer-token.test.js +0 -64
  166. package/user/tests/use-cases/login-user.test.js +0 -140
@@ -1,5 +1,7 @@
1
1
  const { prisma } = require('../../database/prisma');
2
- const { ProcessRepositoryInterface } = require('./process-repository-interface');
2
+ const {
3
+ ProcessRepositoryInterface,
4
+ } = require('./process-repository-interface');
3
5
 
4
6
  /**
5
7
  * PostgreSQL Process Repository Adapter
@@ -22,6 +24,22 @@ class ProcessRepositoryPostgres extends ProcessRepositoryInterface {
22
24
  this.prisma = prisma;
23
25
  }
24
26
 
27
+ /**
28
+ * Convert string ID to integer for PostgreSQL queries
29
+ * @private
30
+ * @param {string|number|null|undefined} id - ID to convert
31
+ * @returns {number|null|undefined} Integer ID or null/undefined
32
+ * @throws {Error} If ID cannot be converted to integer
33
+ */
34
+ _convertId(id) {
35
+ if (id === null || id === undefined) return id;
36
+ const parsed = parseInt(id, 10);
37
+ if (isNaN(parsed)) {
38
+ throw new Error(`Invalid ID: ${id} cannot be converted to integer`);
39
+ }
40
+ return parsed;
41
+ }
42
+
25
43
  /**
26
44
  * Create a new process record
27
45
  * @param {Object} processData - Process data to create
@@ -30,15 +48,14 @@ class ProcessRepositoryPostgres extends ProcessRepositoryInterface {
30
48
  async create(processData) {
31
49
  const process = await this.prisma.process.create({
32
50
  data: {
33
- userId: processData.userId,
34
- integrationId: processData.integrationId,
51
+ userId: this._convertId(processData.userId),
52
+ integrationId: this._convertId(processData.integrationId),
35
53
  name: processData.name,
36
54
  type: processData.type,
37
55
  state: processData.state || 'INITIALIZING',
38
56
  context: processData.context || {},
39
57
  results: processData.results || {},
40
- childProcesses: processData.childProcesses || [],
41
- parentProcessId: processData.parentProcessId || null,
58
+ parentProcessId: this._convertId(processData.parentProcessId),
42
59
  },
43
60
  });
44
61
 
@@ -52,7 +69,7 @@ class ProcessRepositoryPostgres extends ProcessRepositoryInterface {
52
69
  */
53
70
  async findById(processId) {
54
71
  const process = await this.prisma.process.findUnique({
55
- where: { id: processId },
72
+ where: { id: this._convertId(processId) },
56
73
  });
57
74
 
58
75
  return process ? this._toPlainObject(process) : null;
@@ -77,15 +94,14 @@ class ProcessRepositoryPostgres extends ProcessRepositoryInterface {
77
94
  if (updates.results !== undefined) {
78
95
  updateData.results = updates.results;
79
96
  }
80
- if (updates.childProcesses !== undefined) {
81
- updateData.childProcesses = updates.childProcesses;
82
- }
83
97
  if (updates.parentProcessId !== undefined) {
84
- updateData.parentProcessId = updates.parentProcessId;
98
+ updateData.parentProcessId = this._convertId(
99
+ updates.parentProcessId
100
+ );
85
101
  }
86
102
 
87
103
  const process = await this.prisma.process.update({
88
- where: { id: processId },
104
+ where: { id: this._convertId(processId) },
89
105
  data: updateData,
90
106
  });
91
107
 
@@ -101,7 +117,7 @@ class ProcessRepositoryPostgres extends ProcessRepositoryInterface {
101
117
  async findByIntegrationAndType(integrationId, type) {
102
118
  const processes = await this.prisma.process.findMany({
103
119
  where: {
104
- integrationId,
120
+ integrationId: this._convertId(integrationId),
105
121
  type,
106
122
  },
107
123
  orderBy: {
@@ -118,10 +134,13 @@ class ProcessRepositoryPostgres extends ProcessRepositoryInterface {
118
134
  * @param {string[]} [excludeStates=['COMPLETED', 'ERROR']] - States to exclude
119
135
  * @returns {Promise<Array>} Array of active process records
120
136
  */
121
- async findActiveProcesses(integrationId, excludeStates = ['COMPLETED', 'ERROR']) {
137
+ async findActiveProcesses(
138
+ integrationId,
139
+ excludeStates = ['COMPLETED', 'ERROR']
140
+ ) {
122
141
  const processes = await this.prisma.process.findMany({
123
142
  where: {
124
- integrationId,
143
+ integrationId: this._convertId(integrationId),
125
144
  state: {
126
145
  notIn: excludeStates,
127
146
  },
@@ -157,7 +176,7 @@ class ProcessRepositoryPostgres extends ProcessRepositoryInterface {
157
176
  */
158
177
  async deleteById(processId) {
159
178
  await this.prisma.process.delete({
160
- where: { id: processId },
179
+ where: { id: this._convertId(processId) },
161
180
  });
162
181
  }
163
182
 
@@ -179,11 +198,16 @@ class ProcessRepositoryPostgres extends ProcessRepositoryInterface {
179
198
  context: process.context,
180
199
  results: process.results,
181
200
  childProcesses: Array.isArray(process.childProcesses)
182
- ? (process.childProcesses.length > 0 && typeof process.childProcesses[0] === 'object' && process.childProcesses[0] !== null
183
- ? process.childProcesses.map(child => String(child.id))
184
- : process.childProcesses)
201
+ ? process.childProcesses.length > 0 &&
202
+ typeof process.childProcesses[0] === 'object' &&
203
+ process.childProcesses[0] !== null
204
+ ? process.childProcesses.map((child) => String(child.id))
205
+ : process.childProcesses
185
206
  : [],
186
- parentProcessId: process.parentProcessId !== null ? String(process.parentProcessId) : null,
207
+ parentProcessId:
208
+ process.parentProcessId !== null
209
+ ? String(process.parentProcessId)
210
+ : null,
187
211
  createdAt: process.createdAt,
188
212
  updatedAt: process.updatedAt,
189
213
  };
@@ -191,4 +215,3 @@ class ProcessRepositoryPostgres extends ProcessRepositoryInterface {
191
215
  }
192
216
 
193
217
  module.exports = { ProcessRepositoryPostgres };
194
-
@@ -47,23 +47,16 @@ class DummyIntegration extends IntegrationBase {
47
47
  this.updateIntegrationMessages = {
48
48
  execute: jest.fn().mockResolvedValue({})
49
49
  };
50
-
51
- this.registerEventHandlers();
52
50
  }
53
51
 
54
52
  async loadDynamicUserActions() {
55
53
  return {};
56
54
  }
57
55
 
58
- async registerEventHandlers() {
59
- super.registerEventHandlers();
60
- return;
61
- }
62
-
63
56
  async send(event, data) {
64
57
  this.sendSpy(event, data);
65
58
  this.eventCallHistory.push({ event, data, timestamp: Date.now() });
66
- return super.send(event, data);
59
+ return { event, data };
67
60
  }
68
61
 
69
62
  async initialize() {
@@ -62,11 +62,11 @@ class TestIntegrationRepository {
62
62
  const rec = this.store.get(id);
63
63
  if (!rec) {
64
64
  this.operationHistory.push({ operation: 'updateConfig', id, success: false });
65
- return false;
65
+ throw new Error(`Integration with id ${id} not found`);
66
66
  }
67
67
  rec.config = config;
68
68
  this.operationHistory.push({ operation: 'updateConfig', id, success: true });
69
- return true;
69
+ return rec;
70
70
  }
71
71
 
72
72
  async deleteIntegrationById(id) {
package/logs/logger.js CHANGED
@@ -1,5 +1,4 @@
1
1
  const util = require('util');
2
- const aws = require('aws-sdk');
3
2
 
4
3
  // Except in some outlier circumstances, for example steam or event error handlers, this should be the only place that calls `console.*`. That way, this file can be modified to log everything properly on a variety of platforms because all the logging code is here in one place.
5
4
  /* eslint-disable no-console */
@@ -7,9 +6,6 @@ const aws = require('aws-sdk');
7
6
  const logs = [];
8
7
  let flushCalled = false;
9
8
 
10
- // Log AWS SDK calls
11
- aws.config.logger = { log: debug };
12
-
13
9
  function debug(...messages) {
14
10
  if (messages.length) {
15
11
  const date = new Date();
package/modules/entity.js CHANGED
@@ -6,7 +6,6 @@ const schema = new mongoose.Schema(
6
6
  ref: 'Credential',
7
7
  required: false,
8
8
  },
9
- subType: { type: String },
10
9
  user: {
11
10
  type: mongoose.Schema.Types.ObjectId,
12
11
  ref: 'User',
@@ -8,7 +8,9 @@ const { ModuleRepositoryInterface } = require('./module-repository-interface');
8
8
  * MongoDB-specific characteristics:
9
9
  * - Uses String IDs (ObjectId)
10
10
  * - No ID conversion needed (IDs are already strings)
11
- * - entity.__t (discriminator) → entity.subType
11
+ *
12
+ * Prisma Migration Notes:
13
+ * - Mongoose discriminator (__t) → moduleName field (module type: salesforce, hubspot, etc.)
12
14
  */
13
15
  class ModuleRepositoryMongo extends ModuleRepositoryInterface {
14
16
  constructor() {
@@ -100,7 +102,6 @@ class ModuleRepositoryMongo extends ModuleRepositoryInterface {
100
102
  userId: entity.userId,
101
103
  name: entity.name,
102
104
  externalId: entity.externalId,
103
- type: entity.subType,
104
105
  moduleName: entity.moduleName,
105
106
  };
106
107
  }
@@ -127,7 +128,6 @@ class ModuleRepositoryMongo extends ModuleRepositoryInterface {
127
128
  userId: e.userId,
128
129
  name: e.name,
129
130
  externalId: e.externalId,
130
- type: e.subType,
131
131
  moduleName: e.moduleName,
132
132
  }));
133
133
  }
@@ -154,7 +154,6 @@ class ModuleRepositoryMongo extends ModuleRepositoryInterface {
154
154
  userId: e.userId,
155
155
  name: e.name,
156
156
  externalId: e.externalId,
157
- type: e.subType,
158
157
  moduleName: e.moduleName,
159
158
  }));
160
159
  }
@@ -185,7 +184,6 @@ class ModuleRepositoryMongo extends ModuleRepositoryInterface {
185
184
  userId: e.userId,
186
185
  name: e.name,
187
186
  externalId: e.externalId,
188
- type: e.subType,
189
187
  moduleName: e.moduleName,
190
188
  }));
191
189
  }
@@ -232,7 +230,6 @@ class ModuleRepositoryMongo extends ModuleRepositoryInterface {
232
230
  userId: entity.userId,
233
231
  name: entity.name,
234
232
  externalId: entity.externalId,
235
- type: entity.subType,
236
233
  moduleName: entity.moduleName,
237
234
  };
238
235
  }
@@ -248,7 +245,6 @@ class ModuleRepositoryMongo extends ModuleRepositoryInterface {
248
245
  const data = {
249
246
  userId: entityData.user || entityData.userId,
250
247
  credentialId: entityData.credential || entityData.credentialId,
251
- subType: entityData.type || entityData.subType,
252
248
  name: entityData.name,
253
249
  moduleName: entityData.moduleName,
254
250
  externalId: entityData.externalId,
@@ -268,7 +264,6 @@ class ModuleRepositoryMongo extends ModuleRepositoryInterface {
268
264
  userId: entity.userId,
269
265
  name: entity.name,
270
266
  externalId: entity.externalId,
271
- type: entity.subType,
272
267
  moduleName: entity.moduleName,
273
268
  };
274
269
  }
@@ -289,8 +284,6 @@ class ModuleRepositoryMongo extends ModuleRepositoryInterface {
289
284
  data.credentialId = updates.credential;
290
285
  if (updates.credentialId !== undefined)
291
286
  data.credentialId = updates.credentialId;
292
- if (updates.type !== undefined) data.subType = updates.type;
293
- if (updates.subType !== undefined) data.subType = updates.subType;
294
287
  if (updates.name !== undefined) data.name = updates.name;
295
288
  if (updates.moduleName !== undefined)
296
289
  data.moduleName = updates.moduleName;
@@ -313,7 +306,6 @@ class ModuleRepositoryMongo extends ModuleRepositoryInterface {
313
306
  userId: entity.userId,
314
307
  name: entity.name,
315
308
  externalId: entity.externalId,
316
- type: entity.subType,
317
309
  moduleName: entity.moduleName,
318
310
  };
319
311
  } catch (error) {
@@ -377,7 +369,6 @@ class ModuleRepositoryMongo extends ModuleRepositoryInterface {
377
369
  if (filter.name) where.name = filter.name;
378
370
  if (filter.moduleName) where.moduleName = filter.moduleName;
379
371
  if (filter.externalId) where.externalId = this._toString(filter.externalId);
380
- if (filter.subType) where.subType = filter.subType;
381
372
 
382
373
  return where;
383
374
  }
@@ -136,7 +136,6 @@ class ModuleRepositoryPostgres extends ModuleRepositoryInterface {
136
136
  userId: entity.userId?.toString(),
137
137
  name: entity.name,
138
138
  externalId: entity.externalId,
139
- type: entity.subType,
140
139
  moduleName: entity.moduleName,
141
140
  };
142
141
  }
@@ -165,7 +164,6 @@ class ModuleRepositoryPostgres extends ModuleRepositoryInterface {
165
164
  userId: e.userId?.toString(),
166
165
  name: e.name,
167
166
  externalId: e.externalId,
168
- type: e.subType,
169
167
  moduleName: e.moduleName,
170
168
  }));
171
169
  }
@@ -194,7 +192,6 @@ class ModuleRepositoryPostgres extends ModuleRepositoryInterface {
194
192
  userId: e.userId?.toString(),
195
193
  name: e.name,
196
194
  externalId: e.externalId,
197
- type: e.subType,
198
195
  moduleName: e.moduleName,
199
196
  }));
200
197
  }
@@ -227,7 +224,6 @@ class ModuleRepositoryPostgres extends ModuleRepositoryInterface {
227
224
  userId: e.userId?.toString(),
228
225
  name: e.name,
229
226
  externalId: e.externalId,
230
- type: e.subType,
231
227
  moduleName: e.moduleName,
232
228
  }));
233
229
  }
@@ -275,7 +271,6 @@ class ModuleRepositoryPostgres extends ModuleRepositoryInterface {
275
271
  userId: entity.userId?.toString(),
276
272
  name: entity.name,
277
273
  externalId: entity.externalId,
278
- type: entity.subType,
279
274
  moduleName: entity.moduleName,
280
275
  };
281
276
  }
@@ -293,7 +288,6 @@ class ModuleRepositoryPostgres extends ModuleRepositoryInterface {
293
288
  credentialId: this._convertId(
294
289
  entityData.credential || entityData.credentialId
295
290
  ),
296
- subType: entityData.type || entityData.subType,
297
291
  name: entityData.name,
298
292
  moduleName: entityData.moduleName,
299
293
  externalId: entityData.externalId,
@@ -313,7 +307,6 @@ class ModuleRepositoryPostgres extends ModuleRepositoryInterface {
313
307
  userId: entity.userId?.toString(),
314
308
  name: entity.name,
315
309
  externalId: entity.externalId,
316
- type: entity.subType,
317
310
  moduleName: entity.moduleName,
318
311
  };
319
312
  }
@@ -336,8 +329,6 @@ class ModuleRepositoryPostgres extends ModuleRepositoryInterface {
336
329
  data.credentialId = this._convertId(updates.credential);
337
330
  if (updates.credentialId !== undefined)
338
331
  data.credentialId = this._convertId(updates.credentialId);
339
- if (updates.type !== undefined) data.subType = updates.type;
340
- if (updates.subType !== undefined) data.subType = updates.subType;
341
332
  if (updates.name !== undefined) data.name = updates.name;
342
333
  if (updates.moduleName !== undefined)
343
334
  data.moduleName = updates.moduleName;
@@ -362,7 +353,6 @@ class ModuleRepositoryPostgres extends ModuleRepositoryInterface {
362
353
  userId: entity.userId?.toString(),
363
354
  name: entity.name,
364
355
  externalId: entity.externalId,
365
- type: entity.subType,
366
356
  moduleName: entity.moduleName,
367
357
  };
368
358
  } catch (error) {
@@ -428,7 +418,6 @@ class ModuleRepositoryPostgres extends ModuleRepositoryInterface {
428
418
  if (filter.name) where.name = filter.name;
429
419
  if (filter.moduleName) where.moduleName = filter.moduleName;
430
420
  if (filter.externalId) where.externalId = this._toString(filter.externalId);
431
- if (filter.subType) where.subType = filter.subType;
432
421
 
433
422
  return where;
434
423
  }
@@ -13,7 +13,7 @@ const { ModuleRepositoryInterface } = require('./module-repository-interface');
13
13
  * Migration from Mongoose:
14
14
  * - Constructor injection of Prisma client
15
15
  * - populate('credential') → include: { credential: true }
16
- * - entity.__t (discriminator) → entity.subType
16
+ * - Mongoose discriminator (__t) → moduleName field (module type: salesforce, hubspot, etc.)
17
17
  * - _id → id conversion automatic in Prisma
18
18
  */
19
19
  class ModuleRepository extends ModuleRepositoryInterface {
@@ -47,7 +47,6 @@ class ModuleRepository extends ModuleRepositoryInterface {
47
47
  userId: entity.userId,
48
48
  name: entity.name,
49
49
  externalId: entity.externalId,
50
- type: entity.subType,
51
50
  moduleName: entity.moduleName,
52
51
  };
53
52
  }
@@ -72,7 +71,6 @@ class ModuleRepository extends ModuleRepositoryInterface {
72
71
  userId: e.userId,
73
72
  name: e.name,
74
73
  externalId: e.externalId,
75
- type: e.subType,
76
74
  moduleName: e.moduleName,
77
75
  }));
78
76
  }
@@ -97,7 +95,6 @@ class ModuleRepository extends ModuleRepositoryInterface {
97
95
  userId: e.userId,
98
96
  name: e.name,
99
97
  externalId: e.externalId,
100
- type: e.subType,
101
98
  moduleName: e.moduleName,
102
99
  }));
103
100
  }
@@ -126,7 +123,6 @@ class ModuleRepository extends ModuleRepositoryInterface {
126
123
  userId: e.userId,
127
124
  name: e.name,
128
125
  externalId: e.externalId,
129
- type: e.subType,
130
126
  moduleName: e.moduleName,
131
127
  }));
132
128
  }
@@ -172,7 +168,6 @@ class ModuleRepository extends ModuleRepositoryInterface {
172
168
  userId: entity.userId,
173
169
  name: entity.name,
174
170
  externalId: entity.externalId,
175
- type: entity.subType,
176
171
  moduleName: entity.moduleName,
177
172
  };
178
173
  }
@@ -189,7 +184,6 @@ class ModuleRepository extends ModuleRepositoryInterface {
189
184
  const data = {
190
185
  userId: entityData.user || entityData.userId,
191
186
  credentialId: entityData.credential || entityData.credentialId,
192
- subType: entityData.type || entityData.subType,
193
187
  name: entityData.name,
194
188
  moduleName: entityData.moduleName,
195
189
  externalId: entityData.externalId,
@@ -208,7 +202,6 @@ class ModuleRepository extends ModuleRepositoryInterface {
208
202
  userId: entity.userId,
209
203
  name: entity.name,
210
204
  externalId: entity.externalId,
211
- type: entity.subType,
212
205
  moduleName: entity.moduleName,
213
206
  };
214
207
  }
@@ -230,8 +223,6 @@ class ModuleRepository extends ModuleRepositoryInterface {
230
223
  data.credentialId = updates.credential;
231
224
  if (updates.credentialId !== undefined)
232
225
  data.credentialId = updates.credentialId;
233
- if (updates.type !== undefined) data.subType = updates.type;
234
- if (updates.subType !== undefined) data.subType = updates.subType;
235
226
  if (updates.name !== undefined) data.name = updates.name;
236
227
  if (updates.moduleName !== undefined)
237
228
  data.moduleName = updates.moduleName;
@@ -253,7 +244,6 @@ class ModuleRepository extends ModuleRepositoryInterface {
253
244
  userId: entity.userId,
254
245
  name: entity.name,
255
246
  externalId: entity.externalId,
256
- type: entity.subType,
257
247
  moduleName: entity.moduleName,
258
248
  };
259
249
  } catch (error) {
@@ -318,7 +308,6 @@ class ModuleRepository extends ModuleRepositoryInterface {
318
308
  if (filter.name) where.name = filter.name;
319
309
  if (filter.moduleName) where.moduleName = filter.moduleName;
320
310
  if (filter.externalId) where.externalId = filter.externalId;
321
- if (filter.subType) where.subType = filter.subType;
322
311
 
323
312
  return where;
324
313
  }
@@ -32,7 +32,7 @@ class GetEntityOptionsById {
32
32
  );
33
33
  }
34
34
 
35
- const entityType = entity.type;
35
+ const entityType = entity.moduleName;
36
36
  const moduleDefinition = this.moduleDefinitions.find((def) => {
37
37
  const modelName =
38
38
  Module.getEntityModelFromDefinition(def).modelName;
@@ -22,7 +22,7 @@ class GetModule {
22
22
  );
23
23
  }
24
24
 
25
- const entityType = entity.type;
25
+ const entityType = entity.moduleName;
26
26
  const moduleDefinition = this.moduleDefinitions.find((def) => {
27
27
  const modelName = Module.getEntityModelFromDefinition(def).modelName;
28
28
  return entityType === modelName;
@@ -44,7 +44,6 @@ class GetModule {
44
44
  return {
45
45
  id: module.entity.id,
46
46
  name: module.entity.name,
47
- type: module.entity.moduleName,
48
47
  moduleName: module.entity.moduleName,
49
48
  credential: module.credential,
50
49
  externalId: module.entity.externalId,
@@ -32,7 +32,7 @@ class RefreshEntityOptions {
32
32
  );
33
33
  }
34
34
 
35
- const entityType = entity.type;
35
+ const entityType = entity.moduleName;
36
36
  const moduleDefinition = this.moduleDefinitions.find((def) => {
37
37
  const modelName =
38
38
  Module.getEntityModelFromDefinition(def).modelName;
@@ -27,7 +27,7 @@ class TestModuleAuth {
27
27
  );
28
28
  }
29
29
 
30
- const entityType = entity.type;
30
+ const entityType = entity.moduleName;
31
31
  const moduleDefinition = this.moduleDefinitions.find((def) => {
32
32
  const modelName =
33
33
  Module.getEntityModelFromDefinition(def).modelName;
package/package.json CHANGED
@@ -1,68 +1,84 @@
1
1
  {
2
- "name": "@friggframework/core",
3
- "prettier": "@friggframework/prettier-config",
4
- "version": "2.0.0-next.44",
5
- "dependencies": {
6
- "@hapi/boom": "^10.0.1",
7
- "@prisma/client": "^6.16.3",
8
- "aws-sdk": "^2.1200.0",
9
- "bcryptjs": "^2.4.3",
10
- "body-parser": "^1.20.2",
11
- "common-tags": "^1.8.2",
12
- "cors": "^2.8.5",
13
- "dotenv": "^16.4.7",
14
- "express": "^4.19.2",
15
- "express-async-handler": "^1.2.0",
16
- "form-data": "^4.0.0",
17
- "fs-extra": "^11.2.0",
18
- "lodash": "4.17.21",
19
- "lodash.get": "^4.4.2",
20
- "mongoose": "6.11.6",
21
- "node-fetch": "^2.6.7",
22
- "serverless-http": "^2.7.0",
23
- "uuid": "^9.0.1"
24
- },
25
- "devDependencies": {
26
- "@friggframework/eslint-config": "2.0.0-next.44",
27
- "@friggframework/prettier-config": "2.0.0-next.44",
28
- "@friggframework/test": "2.0.0-next.44",
29
- "@types/lodash": "4.17.15",
30
- "@typescript-eslint/eslint-plugin": "^8.0.0",
31
- "chai": "^4.3.6",
32
- "eslint": "^8.22.0",
33
- "eslint-plugin-import": "^2.29.1",
34
- "eslint-plugin-n": "^17.10.2",
35
- "eslint-plugin-promise": "^7.0.0",
36
- "jest": "^29.7.0",
37
- "prettier": "^2.7.1",
38
- "prisma": "^6.16.3",
39
- "sinon": "^16.1.1",
40
- "typescript": "^5.0.2"
41
- },
42
- "scripts": {
43
- "lint:fix": "prettier --write --loglevel error . && eslint . --fix",
44
- "test": "jest --passWithNoTests # TODO",
45
- "prisma:generate:mongo": "npx prisma generate --schema ./prisma-mongodb/schema.prisma",
46
- "prisma:generate:postgres": "npx prisma generate --schema ./prisma-postgresql/schema.prisma",
47
- "prisma:generate": "npm run prisma:generate:mongo && npm run prisma:generate:postgres",
48
- "prisma:push:mongo": "npx prisma db push --schema ./prisma-mongodb/schema.prisma",
49
- "prisma:migrate:postgres": "npx prisma migrate dev --schema ./prisma-postgresql/schema.prisma",
50
- "postinstall": "npm run prisma:generate"
51
- },
52
- "author": "",
53
- "license": "MIT",
54
- "main": "index.js",
55
- "repository": {
56
- "type": "git",
57
- "url": "git+https://github.com/friggframework/frigg.git"
58
- },
59
- "bugs": {
60
- "url": "https://github.com/friggframework/frigg/issues"
61
- },
62
- "homepage": "https://github.com/friggframework/frigg#readme",
63
- "description": "",
64
- "publishConfig": {
65
- "access": "public"
66
- },
67
- "gitHead": "87c8479d50810d28eb7dc73c347e0117d872273a"
2
+ "name": "@friggframework/core",
3
+ "prettier": "@friggframework/prettier-config",
4
+ "version": "2.0.0-next.46",
5
+ "dependencies": {
6
+ "@aws-sdk/client-apigatewaymanagementapi": "^3.588.0",
7
+ "@aws-sdk/client-kms": "^3.588.0",
8
+ "@aws-sdk/client-lambda": "^3.714.0",
9
+ "@aws-sdk/client-sqs": "^3.588.0",
10
+ "@hapi/boom": "^10.0.1",
11
+ "bcryptjs": "^2.4.3",
12
+ "body-parser": "^1.20.2",
13
+ "chalk": "^4.1.2",
14
+ "common-tags": "^1.8.2",
15
+ "cors": "^2.8.5",
16
+ "dotenv": "^16.4.7",
17
+ "express": "^4.19.2",
18
+ "express-async-handler": "^1.2.0",
19
+ "form-data": "^4.0.0",
20
+ "fs-extra": "^11.2.0",
21
+ "lodash": "4.17.21",
22
+ "lodash.get": "^4.4.2",
23
+ "mongoose": "6.11.6",
24
+ "node-fetch": "^2.6.7",
25
+ "serverless-http": "^2.7.0",
26
+ "uuid": "^9.0.1"
27
+ },
28
+ "peerDependencies": {
29
+ "@prisma/client": "^6.16.3",
30
+ "prisma": "^6.16.3"
31
+ },
32
+ "peerDependenciesMeta": {
33
+ "@prisma/client": {
34
+ "optional": true
35
+ },
36
+ "prisma": {
37
+ "optional": true
38
+ }
39
+ },
40
+ "devDependencies": {
41
+ "@friggframework/eslint-config": "2.0.0-next.46",
42
+ "@friggframework/prettier-config": "2.0.0-next.46",
43
+ "@friggframework/test": "2.0.0-next.46",
44
+ "@prisma/client": "^6.17.0",
45
+ "@types/lodash": "4.17.15",
46
+ "@typescript-eslint/eslint-plugin": "^8.0.0",
47
+ "chai": "^4.3.6",
48
+ "eslint": "^8.22.0",
49
+ "eslint-plugin-import": "^2.29.1",
50
+ "eslint-plugin-n": "^17.10.2",
51
+ "eslint-plugin-promise": "^7.0.0",
52
+ "jest": "^29.7.0",
53
+ "prettier": "^2.7.1",
54
+ "prisma": "^6.17.0",
55
+ "sinon": "^16.1.1",
56
+ "typescript": "^5.0.2"
57
+ },
58
+ "scripts": {
59
+ "lint:fix": "prettier --write --loglevel error . && eslint . --fix",
60
+ "test": "jest --passWithNoTests # TODO",
61
+ "prisma:generate:mongo": "npx prisma generate --schema ./prisma-mongodb/schema.prisma",
62
+ "prisma:generate:postgres": "npx prisma generate --schema ./prisma-postgresql/schema.prisma",
63
+ "prisma:generate": "npm run prisma:generate:mongo && npm run prisma:generate:postgres",
64
+ "prisma:push:mongo": "npx prisma db push --schema ./prisma-mongodb/schema.prisma",
65
+ "prisma:migrate:postgres": "npx prisma migrate dev --schema ./prisma-postgresql/schema.prisma",
66
+ "prepublishOnly": "npm run prisma:generate"
67
+ },
68
+ "author": "",
69
+ "license": "MIT",
70
+ "main": "index.js",
71
+ "repository": {
72
+ "type": "git",
73
+ "url": "git+https://github.com/friggframework/frigg.git"
74
+ },
75
+ "bugs": {
76
+ "url": "https://github.com/friggframework/frigg/issues"
77
+ },
78
+ "homepage": "https://github.com/friggframework/frigg#readme",
79
+ "description": "",
80
+ "publishConfig": {
81
+ "access": "public"
82
+ },
83
+ "gitHead": "5ebdd873fa7e010a66133ed69fccbc3bee29de9d"
68
84
  }