@friggframework/core 2.0.0--canary.689.e2b05a4.0 → 2.0.0--canary.703.6a9383b.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.
- package/CLAUDE.md +0 -40
- package/application/commands/integration-commands.js +0 -63
- package/database/documentdb-utils.js +2 -0
- package/generated/prisma-mongodb/edge.js +52 -4
- package/generated/prisma-mongodb/index-browser.js +49 -1
- package/generated/prisma-mongodb/index.d.ts +3504 -58
- package/generated/prisma-mongodb/index.js +52 -4
- package/generated/prisma-mongodb/package.json +1 -1
- package/generated/prisma-mongodb/schema.prisma +65 -0
- package/generated/prisma-mongodb/wasm.js +52 -4
- package/generated/prisma-postgresql/edge.js +52 -4
- package/generated/prisma-postgresql/index-browser.js +49 -1
- package/generated/prisma-postgresql/index.d.ts +3872 -142
- package/generated/prisma-postgresql/index.js +52 -4
- package/generated/prisma-postgresql/package.json +1 -1
- package/generated/prisma-postgresql/schema.prisma +63 -0
- package/generated/prisma-postgresql/wasm.js +52 -4
- package/handlers/app-handler-helpers.js +5 -2
- package/handlers/integration-event-dispatcher.js +7 -3
- package/handlers/routers/integration-webhook-routers.js +26 -38
- package/handlers/workers/integration-triggers.js +25 -0
- package/index.js +11 -0
- package/infrastructure/scheduler/recurrence.js +204 -0
- package/integrations/define/DESIGN.md +108 -0
- package/integrations/define/config.js +98 -0
- package/integrations/define/define-app.js +52 -0
- package/integrations/define/define-extension.js +154 -0
- package/integrations/define/define-integration.js +292 -0
- package/integrations/define/examples/deal-alerts.js +138 -0
- package/integrations/define/extension-binding.js +174 -0
- package/integrations/define/index.js +11 -0
- package/integrations/define/json-schema-lite.js +68 -0
- package/integrations/define/subscriptions.js +93 -0
- package/integrations/define/tests/fixtures/hubspot.js +109 -0
- package/integrations/define/tests/fixtures/slack.js +26 -0
- package/integrations/define/use.js +39 -0
- package/integrations/definitions/README.md +278 -0
- package/integrations/definitions/canonical.js +11 -0
- package/integrations/definitions/capabilities/AUDIT.md +480 -0
- package/integrations/definitions/capabilities/acmeerp.capabilities.json +633 -0
- package/integrations/definitions/capabilities/asana.capabilities.json +279 -0
- package/integrations/definitions/capabilities/calendly.capabilities.json +385 -0
- package/integrations/definitions/capabilities/docusign.capabilities.json +314 -0
- package/integrations/definitions/capabilities/fathom.capabilities.json +238 -0
- package/integrations/definitions/capabilities/github.capabilities.json +585 -0
- package/integrations/definitions/capabilities/hubspot.capabilities.json +822 -0
- package/integrations/definitions/capabilities/jira.capabilities.json +391 -0
- package/integrations/definitions/capabilities/klaviyo.capabilities.json +503 -0
- package/integrations/definitions/capabilities/linear.capabilities.json +378 -0
- package/integrations/definitions/capabilities/netsuite.capabilities.json +535 -0
- package/integrations/definitions/capabilities/notion.capabilities.json +208 -0
- package/integrations/definitions/capabilities/phone.capabilities.json +511 -0
- package/integrations/definitions/capabilities/pipedrive.capabilities.json +430 -0
- package/integrations/definitions/capabilities/quickbooks.capabilities.json +635 -0
- package/integrations/definitions/capabilities/salesforce.capabilities.json +568 -0
- package/integrations/definitions/capabilities/shopify.capabilities.json +1128 -0
- package/integrations/definitions/capabilities/slack.capabilities.json +373 -0
- package/integrations/definitions/capabilities/stripe.capabilities.json +630 -0
- package/integrations/definitions/capabilities/webflow.capabilities.json +196 -0
- package/integrations/definitions/capabilities/zendesk.capabilities.json +422 -0
- package/integrations/definitions/compile.js +80 -0
- package/integrations/definitions/config-form.js +137 -0
- package/integrations/definitions/examples/acme-erp-quickbooks.definition.json +467 -0
- package/integrations/definitions/examples/asana-slack.definition.json +219 -0
- package/integrations/definitions/examples/calendly-salesforce.definition.json +459 -0
- package/integrations/definitions/examples/docusign-salesforce.definition.json +305 -0
- package/integrations/definitions/examples/fathom-hubspot-notion.definition.json +575 -0
- package/integrations/definitions/examples/github-linear.definition.json +322 -0
- package/integrations/definitions/examples/hubspot-slack.definition.json +427 -0
- package/integrations/definitions/examples/klaviyo-hubspot.definition.json +336 -0
- package/integrations/definitions/examples/phone-hubspot.definition.json +633 -0
- package/integrations/definitions/examples/pipedrive-hubspot.definition.json +136 -0
- package/integrations/definitions/examples/pipedrive-phone.definition.json +340 -0
- package/integrations/definitions/examples/records/phone-hubspot.definition-version.json +652 -0
- package/integrations/definitions/examples/records/phone-hubspot.integration.json +86 -0
- package/integrations/definitions/examples/records/phone-hubspot.mappings.json +39 -0
- package/integrations/definitions/examples/records/phone-hubspot.workflow-run.json +62 -0
- package/integrations/definitions/examples/shopify-klaviyo.definition.json +488 -0
- package/integrations/definitions/examples/shopify-netsuite.definition.json +622 -0
- package/integrations/definitions/examples/stripe-quickbooks.definition.json +476 -0
- package/integrations/definitions/examples/webflow-hubspot-slack.definition.json +262 -0
- package/integrations/definitions/examples/zendesk-jira.definition.json +604 -0
- package/integrations/definitions/expressions.js +229 -0
- package/integrations/definitions/index.js +48 -0
- package/integrations/definitions/integration-runtime.js +779 -0
- package/integrations/definitions/interpreter.js +104 -0
- package/integrations/definitions/manifests.js +177 -0
- package/integrations/definitions/renderers/common.js +67 -0
- package/integrations/definitions/renderers/html.js +129 -0
- package/integrations/definitions/renderers/hubspot.js +59 -0
- package/integrations/definitions/renderers/preview.js +154 -0
- package/integrations/definitions/renderers/slack.js +146 -0
- package/integrations/definitions/repositories/definition-version-repository.js +67 -0
- package/integrations/definitions/repositories/workflow-run-repository.js +80 -0
- package/integrations/definitions/router.js +170 -0
- package/integrations/definitions/runtime.js +268 -0
- package/integrations/definitions/schema/capability-manifest.v0.1.schema.json +549 -0
- package/integrations/definitions/schema/installation.v0.1.schema.json +130 -0
- package/integrations/definitions/schema/integration-definition.v0.1.schema.json +909 -0
- package/integrations/definitions/schema/records.md +105 -0
- package/integrations/definitions/schema-check.js +58 -0
- package/integrations/definitions/scripts/check-manifests.js +220 -0
- package/integrations/definitions/scripts/validate.js +66 -0
- package/integrations/definitions/steps.js +123 -0
- package/integrations/definitions/sync-engine.js +297 -0
- package/integrations/definitions/tests/helpers-fake-crm.js +49 -0
- package/integrations/definitions/transforms.js +91 -0
- package/integrations/definitions/use-cases/definition-use-cases.js +245 -0
- package/integrations/definitions/validate.js +436 -0
- package/integrations/definitions/versioning.js +176 -0
- package/integrations/definitions/webhooks.js +119 -0
- package/integrations/index.js +12 -0
- package/integrations/integration-base.js +134 -2
- package/integrations/integration-router.js +6 -1
- package/integrations/integration-types.js +73 -0
- package/integrations/repositories/integration-repository-documentdb.js +6 -34
- package/integrations/repositories/integration-repository-interface.js +3 -30
- package/integrations/repositories/integration-repository-mongo.js +19 -56
- package/integrations/repositories/integration-repository-postgres.js +5 -59
- package/integrations/triggers.js +244 -0
- package/integrations/use-cases/create-integration.js +33 -61
- package/integrations/use-cases/delete-integration-for-user.js +4 -4
- package/integrations/use-cases/get-integration-for-user.js +4 -2
- package/integrations/use-cases/get-integration-instance.js +4 -4
- package/integrations/use-cases/get-integrations-for-user.js +4 -4
- package/integrations/use-cases/get-possible-integrations.js +7 -2
- package/integrations/use-cases/run-trigger-tick.js +155 -0
- package/integrations/use-cases/run-trigger.js +77 -0
- package/integrations/use-cases/update-integration.js +4 -4
- package/package.json +7 -5
- package/prisma-mongodb/schema.prisma +65 -0
- package/prisma-postgresql/migrations/20261018000000_add_data_defined_integrations/migration.sql +66 -0
- package/prisma-postgresql/migrations/20261019000000_workflow_run_waits/migration.sql +7 -0
- package/prisma-postgresql/migrations/20261019120000_definition_workspace/migration.sql +5 -0
- package/prisma-postgresql/schema.prisma +63 -0
- package/queues/queuer-util.js +9 -2
- package/integrations/use-cases/add-entities-to-integration.js +0 -92
- package/integrations/use-cases/remove-entities-from-integration.js +0 -70
- package/integrations/utils/assert-entity-ids-input.js +0 -42
package/CLAUDE.md
CHANGED
|
@@ -206,51 +206,11 @@ packages/core/
|
|
|
206
206
|
- `delete-integration-for-user.js` - Remove integration
|
|
207
207
|
- `get-integration-instance.js` - Load integration with modules
|
|
208
208
|
- `load-integration-context.js` - Full integration context loading
|
|
209
|
-
- `add-entities-to-integration.js` / `remove-entities-from-integration.js` - Attach or detach entities on an existing integration
|
|
210
209
|
|
|
211
210
|
**Repositories**:
|
|
212
211
|
- `integration-repository-factory.js` - Creates database-specific repositories
|
|
213
212
|
- `integration-repository-mongo.js` - MongoDB implementation
|
|
214
213
|
- `integration-repository-postgres.js` - PostgreSQL implementation
|
|
215
|
-
- `addEntitiesToIntegration(integrationId, entityIds)` /
|
|
216
|
-
`removeEntitiesFromIntegration(integrationId, entityIds)` change the entity
|
|
217
|
-
set of an existing integration (all three adapters; `null` for an unknown
|
|
218
|
-
integration). Reach them through the `addEntitiesToIntegration` /
|
|
219
|
-
`removeEntitiesFromIntegration` commands. The add use case
|
|
220
|
-
(`add-entities-to-integration.js`) rejects unknown entities
|
|
221
|
-
(`ENTITIES_NOT_FOUND`, 404), entities of another user
|
|
222
|
-
(`ENTITY_USER_MISMATCH`, 403) and entities of a module the integration does
|
|
223
|
-
not already hold (`ENTITY_MODULE_MISMATCH`, 400). The remove use case
|
|
224
|
-
(`remove-entities-from-integration.js`) refuses to leave a module with no
|
|
225
|
-
entity (`LAST_ENTITY_OF_MODULE`, 409). Re-adding an attached entity or
|
|
226
|
-
removing a detached one changes nothing; a detached entity is not deleted.
|
|
227
|
-
`integration-repository-entities-parity.test.js` runs every adapter against
|
|
228
|
-
real databases when `INTEGRATION_ENTITIES_PARITY_MONGO_URL` /
|
|
229
|
-
`INTEGRATION_ENTITIES_PARITY_POSTGRES_URL` are set. The DocumentDB adapter
|
|
230
|
-
writes only `Integration.entityIds` (as its `createIntegration` does), not
|
|
231
|
-
`Entity.integrationIds`.
|
|
232
|
-
**One credential, many accounts**: when one credential covers several
|
|
233
|
-
provider accounts, give each account its own entity (externalId = account
|
|
234
|
-
id) and attach them all to one integration; webhooks then route with
|
|
235
|
-
`findIntegrationByEntityExternalId`. Traps:
|
|
236
|
-
(1) `IntegrationBase` keys modules by module name, so `this.<moduleKey>`
|
|
237
|
-
holds only one entity's module, and on the queue/webhook path
|
|
238
|
-
(`get-integration-instance.js`) `this.entities` holds entity **ids**, not
|
|
239
|
-
records. For per-account work (a webhook for one account, teardown of every
|
|
240
|
-
account in `onDelete`), load
|
|
241
|
-
`this.commands.loadIntegrationContextById(this.id)` and use
|
|
242
|
-
`context.modules`: one module per entity, each with its record on
|
|
243
|
-
`module.entity` (pick by `module.entity.externalId`).
|
|
244
|
-
(2) `findIntegrationByEntityExternalId` counts every entity with that
|
|
245
|
-
externalId, attached or not, across users: reuse an existing entity
|
|
246
|
-
(`findEntity`) when an account comes back, or delete it when it is revoked,
|
|
247
|
-
never create a second one.
|
|
248
|
-
(3) `createIntegration` reuses an existing integration of the same user
|
|
249
|
-
and type whose entities include all requested ones (an exact match wins),
|
|
250
|
-
so a reconnect that sends the original entities finds the integration that
|
|
251
|
-
now holds more.
|
|
252
|
-
(4) Every module's delegate is the integration: an auth failure on any
|
|
253
|
-
account marks the shared credential invalid and the integration ERROR.
|
|
254
214
|
- `integration-mapping-repository-*.js` - Mapping data persistence.
|
|
255
215
|
`queryMappings(integrationId, { where, orderBy, skip, take, omit })`
|
|
256
216
|
returns `{ mappings, total }`: one filtered, ordered page of an
|
|
@@ -29,12 +29,6 @@ const {
|
|
|
29
29
|
const {
|
|
30
30
|
PatchIntegrationConfig,
|
|
31
31
|
} = require('../../integrations/use-cases/patch-integration-config');
|
|
32
|
-
const {
|
|
33
|
-
AddEntitiesToIntegration,
|
|
34
|
-
} = require('../../integrations/use-cases/add-entities-to-integration');
|
|
35
|
-
const {
|
|
36
|
-
RemoveEntitiesFromIntegration,
|
|
37
|
-
} = require('../../integrations/use-cases/remove-entities-from-integration');
|
|
38
32
|
const {
|
|
39
33
|
getModulesDefinitionFromIntegrationClasses,
|
|
40
34
|
} = require('../../integrations/utils/map-integration-dto');
|
|
@@ -46,11 +40,6 @@ const ERROR_CODE_MAP = {
|
|
|
46
40
|
EXTERNAL_ID_REQUIRED: 400,
|
|
47
41
|
TYPE_REQUIRED: 400,
|
|
48
42
|
INTEGRATION_RECORD_NOT_FOUND: 404,
|
|
49
|
-
INVALID_INTEGRATION_DATA: 400,
|
|
50
|
-
ENTITIES_NOT_FOUND: 404,
|
|
51
|
-
ENTITY_USER_MISMATCH: 403,
|
|
52
|
-
ENTITY_MODULE_MISMATCH: 400,
|
|
53
|
-
LAST_ENTITY_OF_MODULE: 409,
|
|
54
43
|
};
|
|
55
44
|
|
|
56
45
|
function mapErrorToResponse(error) {
|
|
@@ -174,17 +163,6 @@ function createIntegrationCommands({ integrationClass } = {}) {
|
|
|
174
163
|
integrationRepository,
|
|
175
164
|
});
|
|
176
165
|
|
|
177
|
-
const addEntitiesToIntegrationUseCase = new AddEntitiesToIntegration({
|
|
178
|
-
integrationRepository,
|
|
179
|
-
moduleRepository,
|
|
180
|
-
});
|
|
181
|
-
|
|
182
|
-
const removeEntitiesFromIntegrationUseCase =
|
|
183
|
-
new RemoveEntitiesFromIntegration({
|
|
184
|
-
integrationRepository,
|
|
185
|
-
moduleRepository,
|
|
186
|
-
});
|
|
187
|
-
|
|
188
166
|
return {
|
|
189
167
|
findIntegrationById,
|
|
190
168
|
listIntegrations,
|
|
@@ -329,47 +307,6 @@ function createIntegrationCommands({ integrationClass } = {}) {
|
|
|
329
307
|
}
|
|
330
308
|
},
|
|
331
309
|
|
|
332
|
-
/**
|
|
333
|
-
* Attach entities to an existing integration. Every entity must
|
|
334
|
-
* exist, belong to the integration's user, and be of a module the
|
|
335
|
-
* integration already holds; entities that are already attached are
|
|
336
|
-
* left as they are.
|
|
337
|
-
* @param {Object} params
|
|
338
|
-
* @param {string} params.integrationId - Integration ID
|
|
339
|
-
* @param {Array<string>} params.entityIds - Entity IDs to attach
|
|
340
|
-
* @returns {Promise<Object>} Updated integration
|
|
341
|
-
*/
|
|
342
|
-
async addEntitiesToIntegration({ integrationId, entityIds }) {
|
|
343
|
-
try {
|
|
344
|
-
return await addEntitiesToIntegrationUseCase.execute(
|
|
345
|
-
integrationId,
|
|
346
|
-
entityIds
|
|
347
|
-
);
|
|
348
|
-
} catch (error) {
|
|
349
|
-
return mapErrorToResponse(error);
|
|
350
|
-
}
|
|
351
|
-
},
|
|
352
|
-
|
|
353
|
-
/**
|
|
354
|
-
* Detach entities from an integration. Entities that are not
|
|
355
|
-
* attached are ignored; detached entities are not deleted. Each
|
|
356
|
-
* module must keep at least one entity.
|
|
357
|
-
* @param {Object} params
|
|
358
|
-
* @param {string} params.integrationId - Integration ID
|
|
359
|
-
* @param {Array<string>} params.entityIds - Entity IDs to detach
|
|
360
|
-
* @returns {Promise<Object>} Updated integration
|
|
361
|
-
*/
|
|
362
|
-
async removeEntitiesFromIntegration({ integrationId, entityIds }) {
|
|
363
|
-
try {
|
|
364
|
-
return await removeEntitiesFromIntegrationUseCase.execute(
|
|
365
|
-
integrationId,
|
|
366
|
-
entityIds
|
|
367
|
-
);
|
|
368
|
-
} catch (error) {
|
|
369
|
-
return mapErrorToResponse(error);
|
|
370
|
-
}
|
|
371
|
-
},
|
|
372
|
-
|
|
373
310
|
/**
|
|
374
311
|
* Delete an integration by ID
|
|
375
312
|
* @param {string} integrationId - Integration ID to delete
|
|
@@ -25,6 +25,8 @@ async function findMany(client, collection, filter = {}, options = {}) {
|
|
|
25
25
|
if (options.projection) command.projection = options.projection;
|
|
26
26
|
if (options.sort) command.sort = options.sort;
|
|
27
27
|
if (options.limit) command.limit = options.limit;
|
|
28
|
+
// The first batch holds 101 documents unless asked for more; a page wants all of its rows.
|
|
29
|
+
if (options.batchSize) command.batchSize = options.batchSize;
|
|
28
30
|
const result = await client.$runCommandRaw(command);
|
|
29
31
|
return result?.cursor?.firstBatch || [];
|
|
30
32
|
}
|