@friggframework/core 2.0.0-next.66 → 2.0.0-next.68

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.
@@ -101,47 +101,74 @@ class ModuleRepositoryDocumentDB extends ModuleRepositoryInterface {
101
101
  }
102
102
 
103
103
  async createEntity(entityData) {
104
+ const {
105
+ user,
106
+ userId,
107
+ credential,
108
+ credentialId,
109
+ name,
110
+ moduleName,
111
+ externalId,
112
+ ...dynamicData
113
+ } = entityData;
114
+
104
115
  const document = {
105
- userId: toObjectId(entityData.user || entityData.userId),
106
- credentialId: toObjectId(entityData.credential || entityData.credentialId) || null,
107
- name: entityData.name ?? null,
108
- moduleName: entityData.moduleName ?? null,
109
- externalId: entityData.externalId ?? null,
110
- accountId: entityData.accountId ?? null,
116
+ userId: toObjectId(userId || user),
117
+ credentialId: toObjectId(credentialId || credential) || null,
118
+ name: name ?? null,
119
+ moduleName: moduleName ?? null,
120
+ externalId: externalId ?? null,
121
+ data: dynamicData,
111
122
  };
112
123
  const insertedId = await insertOne(this.prisma, 'Entity', document);
113
124
  const created = await findOne(this.prisma, 'Entity', { _id: insertedId });
114
- const credential = await this._fetchCredential(created?.credentialId);
115
- return this._mapEntity(created, credential);
125
+ const credentialObj = await this._fetchCredential(created?.credentialId);
126
+ return this._mapEntity(created, credentialObj);
116
127
  }
117
128
 
118
129
  async updateEntity(entityId, updates) {
119
130
  const objectId = toObjectId(entityId);
120
131
  if (!objectId) return null;
132
+
133
+ const existing = await findOne(this.prisma, 'Entity', { _id: objectId });
134
+ if (!existing) return null;
135
+
136
+ const {
137
+ user,
138
+ userId,
139
+ credential,
140
+ credentialId,
141
+ name,
142
+ moduleName,
143
+ externalId,
144
+ ...dynamicData
145
+ } = updates;
146
+
121
147
  const updatePayload = {};
122
- if (updates.user !== undefined || updates.userId !== undefined) {
123
- const userVal = updates.user !== undefined ? updates.user : updates.userId;
124
- updatePayload.userId = toObjectId(userVal) || null;
148
+ if (user !== undefined || userId !== undefined) {
149
+ updatePayload.userId = toObjectId(userId || user) || null;
150
+ }
151
+ if (credential !== undefined || credentialId !== undefined) {
152
+ updatePayload.credentialId = toObjectId(credentialId || credential) || null;
125
153
  }
126
- if (updates.credential !== undefined || updates.credentialId !== undefined) {
127
- const credVal = updates.credential !== undefined ? updates.credential : updates.credentialId;
128
- updatePayload.credentialId = toObjectId(credVal) || null;
154
+ if (name !== undefined) updatePayload.name = name;
155
+ if (moduleName !== undefined) updatePayload.moduleName = moduleName;
156
+ if (externalId !== undefined) updatePayload.externalId = externalId;
157
+
158
+ if (Object.keys(dynamicData).length > 0) {
159
+ updatePayload.data = { ...(existing.data || {}), ...dynamicData };
129
160
  }
130
- if (updates.name !== undefined) updatePayload.name = updates.name;
131
- if (updates.moduleName !== undefined) updatePayload.moduleName = updates.moduleName;
132
- if (updates.externalId !== undefined) updatePayload.externalId = updates.externalId;
133
- if (updates.accountId !== undefined) updatePayload.accountId = updates.accountId;
134
- const result = await updateOne(
161
+
162
+ await updateOne(
135
163
  this.prisma,
136
164
  'Entity',
137
165
  { _id: objectId },
138
166
  { $set: updatePayload }
139
167
  );
140
- const modified = result?.nModified ?? result?.n ?? 0;
141
- if (modified === 0) return null;
142
168
  const updated = await findOne(this.prisma, 'Entity', { _id: objectId });
143
- const credential = await this._fetchCredential(updated?.credentialId);
144
- return this._mapEntity(updated, credential);
169
+ if (!updated) return null;
170
+ const credentialObj = await this._fetchCredential(updated?.credentialId);
171
+ return this._mapEntity(updated, credentialObj);
145
172
  }
146
173
 
147
174
  async deleteEntity(entityId) {
@@ -291,14 +318,15 @@ class ModuleRepositoryDocumentDB extends ModuleRepositoryInterface {
291
318
  }
292
319
 
293
320
  _mapEntity(doc, credential) {
321
+ const dynamicData = doc?.data || {};
294
322
  return {
295
323
  id: fromObjectId(doc?._id),
296
- accountId: doc?.accountId ?? null,
297
324
  credential,
298
325
  userId: fromObjectId(doc?.userId),
299
326
  name: doc?.name ?? null,
300
327
  externalId: doc?.externalId ?? null,
301
328
  moduleName: doc?.moduleName ?? null,
329
+ ...dynamicData,
302
330
  };
303
331
  }
304
332
  }
@@ -97,12 +97,12 @@ class ModuleRepositoryMongo extends ModuleRepositoryInterface {
97
97
 
98
98
  return {
99
99
  id: entity.id,
100
- accountId: entity.accountId,
101
100
  credential,
102
101
  userId: entity.userId,
103
102
  name: entity.name,
104
103
  externalId: entity.externalId,
105
104
  moduleName: entity.moduleName,
105
+ ...(entity.data || {}),
106
106
  };
107
107
  }
108
108
 
@@ -123,12 +123,12 @@ class ModuleRepositoryMongo extends ModuleRepositoryInterface {
123
123
 
124
124
  return entities.map((e) => ({
125
125
  id: e.id,
126
- accountId: e.accountId,
127
126
  credential: credentialMap.get(e.credentialId) || null,
128
127
  userId: e.userId,
129
128
  name: e.name,
130
129
  externalId: e.externalId,
131
130
  moduleName: e.moduleName,
131
+ ...(e.data || {}),
132
132
  }));
133
133
  }
134
134
 
@@ -149,12 +149,12 @@ class ModuleRepositoryMongo extends ModuleRepositoryInterface {
149
149
 
150
150
  return entities.map((e) => ({
151
151
  id: e.id,
152
- accountId: e.accountId,
153
152
  credential: credentialMap.get(e.credentialId) || null,
154
153
  userId: e.userId,
155
154
  name: e.name,
156
155
  externalId: e.externalId,
157
156
  moduleName: e.moduleName,
157
+ ...(e.data || {}),
158
158
  }));
159
159
  }
160
160
 
@@ -179,12 +179,12 @@ class ModuleRepositoryMongo extends ModuleRepositoryInterface {
179
179
 
180
180
  return entities.map((e) => ({
181
181
  id: e.id,
182
- accountId: e.accountId,
183
182
  credential: credentialMap.get(e.credentialId) || null,
184
183
  userId: e.userId,
185
184
  name: e.name,
186
185
  externalId: e.externalId,
187
186
  moduleName: e.moduleName,
187
+ ...(e.data || {}),
188
188
  }));
189
189
  }
190
190
 
@@ -225,12 +225,12 @@ class ModuleRepositoryMongo extends ModuleRepositoryInterface {
225
225
 
226
226
  return {
227
227
  id: entity.id,
228
- accountId: entity.accountId,
229
228
  credential,
230
229
  userId: entity.userId,
231
230
  name: entity.name,
232
231
  externalId: entity.externalId,
233
232
  moduleName: entity.moduleName,
233
+ ...(entity.data || {}),
234
234
  };
235
235
  }
236
236
 
@@ -242,29 +242,40 @@ class ModuleRepositoryMongo extends ModuleRepositoryInterface {
242
242
  * @returns {Promise<Object>} Created entity object with string IDs
243
243
  */
244
244
  async createEntity(entityData) {
245
+ const {
246
+ user,
247
+ userId,
248
+ credential,
249
+ credentialId,
250
+ name,
251
+ moduleName,
252
+ externalId,
253
+ ...dynamicData
254
+ } = entityData;
255
+
245
256
  const data = {
246
- userId: entityData.user || entityData.userId,
247
- credentialId: entityData.credential || entityData.credentialId,
248
- name: entityData.name,
249
- moduleName: entityData.moduleName,
250
- externalId: entityData.externalId,
251
- accountId: entityData.accountId,
257
+ userId: userId || user,
258
+ credentialId: credentialId || credential,
259
+ name,
260
+ moduleName,
261
+ externalId,
262
+ data: dynamicData,
252
263
  };
253
264
 
254
265
  const entity = await this.prisma.entity.create({
255
266
  data,
256
267
  });
257
268
 
258
- const credential = await this._fetchCredential(entity.credentialId);
269
+ const credentialObj = await this._fetchCredential(entity.credentialId);
259
270
 
260
271
  return {
261
272
  id: entity.id,
262
- accountId: entity.accountId,
263
- credential,
273
+ credential: credentialObj,
264
274
  userId: entity.userId,
265
275
  name: entity.name,
266
276
  externalId: entity.externalId,
267
277
  moduleName: entity.moduleName,
278
+ ...(entity.data || {}),
268
279
  };
269
280
  }
270
281
 
@@ -277,36 +288,56 @@ class ModuleRepositoryMongo extends ModuleRepositoryInterface {
277
288
  * @returns {Promise<Object|null>} Updated entity object with string IDs or null if not found
278
289
  */
279
290
  async updateEntity(entityId, updates) {
280
- const data = {};
281
- if (updates.user !== undefined) data.userId = updates.user;
282
- if (updates.userId !== undefined) data.userId = updates.userId;
283
- if (updates.credential !== undefined)
284
- data.credentialId = updates.credential;
285
- if (updates.credentialId !== undefined)
286
- data.credentialId = updates.credentialId;
287
- if (updates.name !== undefined) data.name = updates.name;
288
- if (updates.moduleName !== undefined)
289
- data.moduleName = updates.moduleName;
290
- if (updates.externalId !== undefined)
291
- data.externalId = updates.externalId;
292
- if (updates.accountId !== undefined) data.accountId = updates.accountId;
291
+ const existing = await this.prisma.entity.findUnique({
292
+ where: { id: entityId },
293
+ });
294
+
295
+ if (!existing) {
296
+ return null;
297
+ }
298
+
299
+ const {
300
+ user,
301
+ userId,
302
+ credential,
303
+ credentialId,
304
+ name,
305
+ moduleName,
306
+ externalId,
307
+ ...dynamicData
308
+ } = updates;
309
+
310
+ const schemaUpdates = {};
311
+ if (user !== undefined || userId !== undefined) {
312
+ schemaUpdates.userId = userId || user;
313
+ }
314
+ if (credential !== undefined || credentialId !== undefined) {
315
+ schemaUpdates.credentialId = credentialId || credential;
316
+ }
317
+ if (name !== undefined) schemaUpdates.name = name;
318
+ if (moduleName !== undefined) schemaUpdates.moduleName = moduleName;
319
+ if (externalId !== undefined) schemaUpdates.externalId = externalId;
320
+
321
+ if (Object.keys(dynamicData).length > 0) {
322
+ schemaUpdates.data = { ...(existing.data || {}), ...dynamicData };
323
+ }
293
324
 
294
325
  try {
295
326
  const entity = await this.prisma.entity.update({
296
327
  where: { id: entityId },
297
- data,
328
+ data: schemaUpdates,
298
329
  });
299
330
 
300
- const credential = await this._fetchCredential(entity.credentialId);
331
+ const credentialObj = await this._fetchCredential(entity.credentialId);
301
332
 
302
333
  return {
303
334
  id: entity.id,
304
- accountId: entity.accountId,
305
- credential,
335
+ credential: credentialObj,
306
336
  userId: entity.userId,
307
337
  name: entity.name,
308
338
  externalId: entity.externalId,
309
339
  moduleName: entity.moduleName,
340
+ ...(entity.data || {}),
310
341
  };
311
342
  } catch (error) {
312
343
  if (error.code === 'P2025') {
@@ -131,12 +131,12 @@ class ModuleRepositoryPostgres extends ModuleRepositoryInterface {
131
131
 
132
132
  return {
133
133
  id: entity.id.toString(),
134
- accountId: entity.accountId,
135
134
  credential,
136
135
  userId: entity.userId?.toString(),
137
136
  name: entity.name,
138
137
  externalId: entity.externalId,
139
138
  moduleName: entity.moduleName,
139
+ ...(entity.data || {}),
140
140
  };
141
141
  }
142
142
 
@@ -159,12 +159,12 @@ class ModuleRepositoryPostgres extends ModuleRepositoryInterface {
159
159
 
160
160
  return entities.map((e) => ({
161
161
  id: e.id.toString(),
162
- accountId: e.accountId,
163
162
  credential: credentialMap.get(e.credentialId) || null,
164
163
  userId: e.userId?.toString(),
165
164
  name: e.name,
166
165
  externalId: e.externalId,
167
166
  moduleName: e.moduleName,
167
+ ...(e.data || {}),
168
168
  }));
169
169
  }
170
170
 
@@ -187,12 +187,12 @@ class ModuleRepositoryPostgres extends ModuleRepositoryInterface {
187
187
 
188
188
  return entities.map((e) => ({
189
189
  id: e.id.toString(),
190
- accountId: e.accountId,
191
190
  credential: credentialMap.get(e.credentialId) || null,
192
191
  userId: e.userId?.toString(),
193
192
  name: e.name,
194
193
  externalId: e.externalId,
195
194
  moduleName: e.moduleName,
195
+ ...(e.data || {}),
196
196
  }));
197
197
  }
198
198
 
@@ -219,12 +219,12 @@ class ModuleRepositoryPostgres extends ModuleRepositoryInterface {
219
219
 
220
220
  return entities.map((e) => ({
221
221
  id: e.id.toString(),
222
- accountId: e.accountId,
223
222
  credential: credentialMap.get(e.credentialId) || null,
224
223
  userId: e.userId?.toString(),
225
224
  name: e.name,
226
225
  externalId: e.externalId,
227
226
  moduleName: e.moduleName,
227
+ ...(e.data || {}),
228
228
  }));
229
229
  }
230
230
 
@@ -266,12 +266,12 @@ class ModuleRepositoryPostgres extends ModuleRepositoryInterface {
266
266
 
267
267
  return {
268
268
  id: entity.id.toString(),
269
- accountId: entity.accountId,
270
269
  credential,
271
270
  userId: entity.userId?.toString(),
272
271
  name: entity.name,
273
272
  externalId: entity.externalId,
274
273
  moduleName: entity.moduleName,
274
+ ...(entity.data || {}),
275
275
  };
276
276
  }
277
277
 
@@ -283,31 +283,40 @@ class ModuleRepositoryPostgres extends ModuleRepositoryInterface {
283
283
  * @returns {Promise<Object>} Created entity object with string IDs
284
284
  */
285
285
  async createEntity(entityData) {
286
+ const {
287
+ user,
288
+ userId,
289
+ credential,
290
+ credentialId,
291
+ name,
292
+ moduleName,
293
+ externalId,
294
+ ...dynamicData
295
+ } = entityData;
296
+
286
297
  const data = {
287
- userId: this._convertId(entityData.user || entityData.userId),
288
- credentialId: this._convertId(
289
- entityData.credential || entityData.credentialId
290
- ),
291
- name: entityData.name,
292
- moduleName: entityData.moduleName,
293
- externalId: entityData.externalId,
294
- accountId: entityData.accountId,
298
+ userId: this._convertId(userId || user),
299
+ credentialId: this._convertId(credentialId || credential),
300
+ name,
301
+ moduleName,
302
+ externalId,
303
+ data: dynamicData,
295
304
  };
296
305
 
297
306
  const entity = await this.prisma.entity.create({
298
307
  data,
299
308
  });
300
309
 
301
- const credential = await this._fetchCredential(entity.credentialId);
310
+ const credentialObj = await this._fetchCredential(entity.credentialId);
302
311
 
303
312
  return {
304
313
  id: entity.id.toString(),
305
- accountId: entity.accountId,
306
- credential,
314
+ credential: credentialObj,
307
315
  userId: entity.userId?.toString(),
308
316
  name: entity.name,
309
317
  externalId: entity.externalId,
310
318
  moduleName: entity.moduleName,
319
+ ...(entity.data || {}),
311
320
  };
312
321
  }
313
322
 
@@ -320,40 +329,58 @@ class ModuleRepositoryPostgres extends ModuleRepositoryInterface {
320
329
  * @returns {Promise<Object|null>} Updated entity object with string IDs or null if not found
321
330
  */
322
331
  async updateEntity(entityId, updates) {
323
- const data = {};
324
- if (updates.user !== undefined)
325
- data.userId = this._convertId(updates.user);
326
- if (updates.userId !== undefined)
327
- data.userId = this._convertId(updates.userId);
328
- if (updates.credential !== undefined)
329
- data.credentialId = this._convertId(updates.credential);
330
- if (updates.credentialId !== undefined)
331
- data.credentialId = this._convertId(updates.credentialId);
332
- if (updates.name !== undefined) data.name = updates.name;
333
- if (updates.moduleName !== undefined)
334
- data.moduleName = updates.moduleName;
335
- if (updates.externalId !== undefined)
336
- data.externalId = updates.externalId;
337
- if (updates.accountId !== undefined) data.accountId = updates.accountId;
332
+ const intId = this._convertId(entityId);
338
333
 
339
- try {
340
- const intId = this._convertId(entityId);
334
+ const existing = await this.prisma.entity.findUnique({
335
+ where: { id: intId },
336
+ });
341
337
 
338
+ if (!existing) {
339
+ return null;
340
+ }
341
+
342
+ const {
343
+ user,
344
+ userId,
345
+ credential,
346
+ credentialId,
347
+ name,
348
+ moduleName,
349
+ externalId,
350
+ ...dynamicData
351
+ } = updates;
352
+
353
+ const schemaUpdates = {};
354
+ if (user !== undefined || userId !== undefined) {
355
+ schemaUpdates.userId = this._convertId(userId || user);
356
+ }
357
+ if (credential !== undefined || credentialId !== undefined) {
358
+ schemaUpdates.credentialId = this._convertId(credentialId || credential);
359
+ }
360
+ if (name !== undefined) schemaUpdates.name = name;
361
+ if (moduleName !== undefined) schemaUpdates.moduleName = moduleName;
362
+ if (externalId !== undefined) schemaUpdates.externalId = externalId;
363
+
364
+ if (Object.keys(dynamicData).length > 0) {
365
+ schemaUpdates.data = { ...(existing.data || {}), ...dynamicData };
366
+ }
367
+
368
+ try {
342
369
  const entity = await this.prisma.entity.update({
343
370
  where: { id: intId },
344
- data,
371
+ data: schemaUpdates,
345
372
  });
346
373
 
347
- const credential = await this._fetchCredential(entity.credentialId);
374
+ const credentialObj = await this._fetchCredential(entity.credentialId);
348
375
 
349
376
  return {
350
377
  id: entity.id.toString(),
351
- accountId: entity.accountId,
352
- credential,
378
+ credential: credentialObj,
353
379
  userId: entity.userId?.toString(),
354
380
  name: entity.name,
355
381
  externalId: entity.externalId,
356
382
  moduleName: entity.moduleName,
383
+ ...(entity.data || {}),
357
384
  };
358
385
  } catch (error) {
359
386
  if (error.code === 'P2025') {