@friggframework/core 2.0.0--canary.545.ccb5010.0 → 2.0.0--canary.549.922386d.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/CHANGELOG.md +67 -66
- package/CLAUDE.md +124 -148
- package/README.md +130 -165
- package/assertions/jest.config.ts +7 -0
- package/core/CLAUDE.md +156 -222
- package/database/MONGODB_TRANSACTION_FIX.md +52 -72
- package/database/encryption/README.md +36 -53
- package/database/jest.config.ts +7 -0
- package/database/models/WorkflowExecutionModel.ts +315 -0
- package/database/models/WorkflowModel.ts +129 -0
- package/docs/PROCESS_MANAGEMENT_QUEUE_SPEC.md +80 -135
- package/generated/prisma-mongodb/edge.js +5 -60
- package/generated/prisma-mongodb/index-browser.js +1 -49
- package/generated/prisma-mongodb/index.d.ts +57 -4019
- package/generated/prisma-mongodb/index.js +11 -66
- package/generated/prisma-mongodb/package.json +1 -1
- package/generated/prisma-mongodb/{libquery_engine-debian-openssl-3.0.x.so.node → query-engine-debian-openssl-3.0.x} +0 -0
- package/generated/prisma-mongodb/{libquery_engine-rhel-openssl-3.0.x.so.node → query-engine-rhel-openssl-3.0.x} +0 -0
- package/generated/prisma-mongodb/runtime/binary.d.ts +1 -0
- package/generated/prisma-mongodb/runtime/binary.js +289 -0
- package/generated/prisma-mongodb/schema.prisma +2 -89
- package/generated/prisma-mongodb/wasm.js +5 -60
- package/generated/prisma-postgresql/edge.js +5 -59
- package/generated/prisma-postgresql/index-browser.js +1 -48
- package/generated/prisma-postgresql/index.d.ts +44 -4732
- package/generated/prisma-postgresql/index.js +11 -65
- package/generated/prisma-postgresql/package.json +1 -1
- package/generated/prisma-postgresql/{libquery_engine-debian-openssl-3.0.x.so.node → query-engine-debian-openssl-3.0.x} +0 -0
- package/generated/prisma-postgresql/{libquery_engine-rhel-openssl-3.0.x.so.node → query-engine-rhel-openssl-3.0.x} +0 -0
- package/generated/prisma-postgresql/runtime/binary.d.ts +1 -0
- package/generated/prisma-postgresql/runtime/binary.js +289 -0
- package/generated/prisma-postgresql/schema.prisma +2 -87
- package/generated/prisma-postgresql/wasm.js +5 -59
- package/handlers/WEBHOOKS.md +81 -104
- package/handlers/routers/HEALTHCHECK.md +135 -170
- package/integrations/WEBHOOK-QUICKSTART.md +14 -21
- package/jest-global-setup-noop.ts +3 -0
- package/jest-global-teardown-noop.ts +3 -0
- package/jest-resolver.ts +36 -0
- package/jest-setup.ts +1 -0
- package/jest-teardown.ts +1 -0
- package/jest.config.ts +20 -0
- package/package.json +32 -8
- package/prisma-mongodb/schema.prisma +2 -89
- package/prisma-postgresql/schema.prisma +2 -87
- package/src/application/commands/command-utils.ts +17 -0
- package/src/application/commands/credential-commands.ts +226 -0
- package/src/application/commands/entity-commands.ts +265 -0
- package/src/application/commands/integration-commands.test.ts +158 -0
- package/src/application/commands/integration-commands.ts +205 -0
- package/{application/commands/scheduler-commands.js → src/application/commands/scheduler-commands.ts} +82 -104
- package/{application/commands/user-commands.js → src/application/commands/user-commands.ts} +72 -96
- package/src/application/index.ts +82 -0
- package/src/assertions/get.ts +196 -0
- package/src/assertions/index.ts +9 -0
- package/src/associations/association.ts +103 -0
- package/src/associations/index.ts +3 -0
- package/src/core/Delegate.ts +41 -0
- package/src/core/Worker.test.ts +158 -0
- package/src/core/Worker.ts +86 -0
- package/{core/create-handler.js → src/core/create-handler.ts} +43 -15
- package/src/core/index.ts +15 -0
- package/src/core/load-installed-modules.ts +31 -0
- package/{core/secrets-to-env.js → src/core/secrets-to-env.ts} +14 -14
- package/src/credential/index.ts +9 -0
- package/src/credential/repositories/credential-repository-documentdb.ts +185 -0
- package/src/credential/repositories/credential-repository-factory.ts +26 -0
- package/src/credential/repositories/credential-repository-interface.ts +62 -0
- package/src/credential/repositories/credential-repository-mongo.ts +163 -0
- package/src/credential/repositories/credential-repository-postgres.ts +169 -0
- package/src/credential/repositories/credential-repository.ts +162 -0
- package/src/credential/use-cases/get-credential-for-user.ts +27 -0
- package/src/credential/use-cases/update-authentication-status.ts +17 -0
- package/src/database/adapters/index.ts +1 -0
- package/src/database/adapters/lambda-invoker.test.ts +104 -0
- package/src/database/adapters/lambda-invoker.ts +61 -0
- package/src/database/config.ts +142 -0
- package/src/database/documentdb-encryption-service.ts +191 -0
- package/src/database/documentdb-utils.ts +160 -0
- package/src/database/encryption/encryption-schema-registry.test.ts +397 -0
- package/src/database/encryption/encryption-schema-registry.ts +248 -0
- package/src/database/encryption/field-encryption-service.test.ts +511 -0
- package/{database/encryption/field-encryption-service.js → src/database/encryption/field-encryption-service.ts} +46 -67
- package/src/database/encryption/index.ts +24 -0
- package/{database/encryption/logger.js → src/database/encryption/logger.ts} +19 -21
- package/src/database/encryption/mongo-decryption-fix-verification.test.ts +337 -0
- package/src/database/encryption/postgres-decryption-fix-verification.test.ts +335 -0
- package/src/database/encryption/postgres-relation-decryption.test.ts +205 -0
- package/src/database/encryption/prisma-encryption-extension.test.ts +433 -0
- package/{database/encryption/prisma-encryption-extension.js → src/database/encryption/prisma-encryption-extension.ts} +58 -77
- package/src/database/index.ts +126 -0
- package/src/database/prisma.test.ts +65 -0
- package/src/database/prisma.ts +166 -0
- package/{database/repositories/health-check-repository-documentdb.js → src/database/repositories/health-check-repository-documentdb.ts} +34 -45
- package/src/database/repositories/health-check-repository-factory.ts +38 -0
- package/src/database/repositories/health-check-repository-interface.ts +20 -0
- package/src/database/repositories/health-check-repository-mongodb.test.ts +178 -0
- package/src/database/repositories/health-check-repository-mongodb.ts +79 -0
- package/src/database/repositories/health-check-repository-postgres.test.ts +94 -0
- package/src/database/repositories/health-check-repository-postgres.ts +70 -0
- package/src/database/repositories/index.ts +10 -0
- package/src/database/repositories/migration-status-repository-s3.test.ts +150 -0
- package/src/database/repositories/migration-status-repository-s3.ts +127 -0
- package/src/database/use-cases/check-database-health-use-case.test.ts +131 -0
- package/src/database/use-cases/check-database-health-use-case.ts +30 -0
- package/src/database/use-cases/check-database-state-use-case.test.ts +131 -0
- package/src/database/use-cases/check-database-state-use-case.ts +66 -0
- package/src/database/use-cases/check-encryption-health-use-case.test.ts +183 -0
- package/{database/use-cases/check-encryption-health-use-case.js → src/database/use-cases/check-encryption-health-use-case.ts} +38 -15
- package/src/database/use-cases/get-database-state-via-worker-use-case.test.ts +126 -0
- package/src/database/use-cases/get-database-state-via-worker-use-case.ts +31 -0
- package/src/database/use-cases/get-migration-status-use-case.test.ts +160 -0
- package/src/database/use-cases/get-migration-status-use-case.ts +57 -0
- package/src/database/use-cases/index.ts +14 -0
- package/src/database/use-cases/run-database-migration-use-case.test.ts +350 -0
- package/src/database/use-cases/run-database-migration-use-case.ts +113 -0
- package/src/database/use-cases/test-encryption-use-case.ts +197 -0
- package/src/database/use-cases/trigger-database-migration-use-case.test.ts +256 -0
- package/src/database/use-cases/trigger-database-migration-use-case.ts +131 -0
- package/src/database/utils/index.ts +26 -0
- package/src/database/utils/mongodb-collection-utils.test.ts +133 -0
- package/src/database/utils/mongodb-collection-utils.ts +45 -0
- package/src/database/utils/mongodb-schema-init.test.ts +152 -0
- package/src/database/utils/mongodb-schema-init.ts +51 -0
- package/src/database/utils/prisma-runner.test.ts +513 -0
- package/src/database/utils/prisma-runner.ts +336 -0
- package/src/database/utils/prisma-schema-parser.test.ts +283 -0
- package/src/database/utils/prisma-schema-parser.ts +90 -0
- package/src/declarations.d.ts +141 -0
- package/src/encrypt/Cryptor.test.ts +137 -0
- package/src/encrypt/Cryptor.ts +92 -0
- package/{encrypt/aes.js → src/encrypt/aes.ts} +4 -9
- package/src/encrypt/index.ts +2 -0
- package/src/errors/base-error.test.ts +32 -0
- package/src/errors/base-error.ts +15 -0
- package/src/errors/client-safe-error.ts +12 -0
- package/src/errors/fetch-error.test.ts +105 -0
- package/{errors/fetch-error.js → src/errors/fetch-error.ts} +36 -17
- package/src/errors/halt-error.test.ts +11 -0
- package/src/errors/halt-error.ts +10 -0
- package/src/errors/index.ts +9 -0
- package/src/errors/validation-errors.test.ts +122 -0
- package/src/errors/validation-errors.ts +33 -0
- package/src/handlers/app-definition-loader.ts +52 -0
- package/src/handlers/app-handler-helpers.ts +64 -0
- package/src/handlers/auth-flow.integration.test.ts +149 -0
- package/{handlers/backend-utils.js → src/handlers/backend-utils.ts} +55 -52
- package/src/handlers/database-migration-handler.ts +172 -0
- package/src/handlers/index.ts +22 -0
- package/src/handlers/integration-event-dispatcher.test.ts +211 -0
- package/{handlers/integration-event-dispatcher.js → src/handlers/integration-event-dispatcher.ts} +33 -9
- package/src/handlers/routers/auth.ts +20 -0
- package/src/handlers/routers/db-migration.handler.ts +28 -0
- package/src/handlers/routers/db-migration.test.ts +69 -0
- package/src/handlers/routers/db-migration.ts +173 -0
- package/src/handlers/routers/health.test.ts +251 -0
- package/src/handlers/routers/health.ts +390 -0
- package/src/handlers/routers/index.ts +8 -0
- package/src/handlers/routers/integration-defined-routers.ts +50 -0
- package/src/handlers/routers/integration-webhook-routers.test.ts +116 -0
- package/src/handlers/routers/integration-webhook-routers.ts +72 -0
- package/src/handlers/routers/user.ts +63 -0
- package/{handlers/routers/websocket.js → src/handlers/routers/websocket.ts} +25 -28
- package/{handlers/use-cases/check-external-apis-health-use-case.js → src/handlers/use-cases/check-external-apis-health-use-case.ts} +31 -12
- package/src/handlers/use-cases/check-integrations-health-use-case.test.ts +124 -0
- package/src/handlers/use-cases/check-integrations-health-use-case.ts +69 -0
- package/src/handlers/use-cases/index.ts +9 -0
- package/src/handlers/webhook-flow.integration.test.ts +318 -0
- package/src/handlers/workers/db-migration.test.ts +168 -0
- package/src/handlers/workers/db-migration.ts +173 -0
- package/src/handlers/workers/index.ts +3 -0
- package/src/handlers/workers/integration-defined-workers.test.ts +254 -0
- package/src/handlers/workers/integration-defined-workers.ts +35 -0
- package/src/index.ts +400 -0
- package/src/infrastructure/index.ts +14 -0
- package/src/infrastructure/scheduler/eventbridge-scheduler-adapter.ts +148 -0
- package/src/infrastructure/scheduler/index.ts +19 -0
- package/{infrastructure/scheduler/mock-scheduler-adapter.js → src/infrastructure/scheduler/mock-scheduler-adapter.ts} +25 -59
- package/src/infrastructure/scheduler/scheduler-service-factory.ts +50 -0
- package/src/infrastructure/scheduler/scheduler-service-interface.ts +31 -0
- package/src/integrations/index.ts +79 -0
- package/src/integrations/integration-base.module-keys.test.ts +204 -0
- package/{integrations/integration-base.js → src/integrations/integration-base.ts} +161 -169
- package/src/integrations/integration-router.ts +645 -0
- package/src/integrations/options.ts +57 -0
- package/{integrations/repositories/integration-mapping-repository-documentdb.js → src/integrations/repositories/integration-mapping-repository-documentdb.ts} +54 -134
- package/src/integrations/repositories/integration-mapping-repository-factory.ts +27 -0
- package/src/integrations/repositories/integration-mapping-repository-interface.ts +56 -0
- package/src/integrations/repositories/integration-mapping-repository-mongo.ts +89 -0
- package/src/integrations/repositories/integration-mapping-repository-postgres.ts +129 -0
- package/src/integrations/repositories/integration-mapping-repository.ts +71 -0
- package/{integrations/repositories/integration-repository-documentdb.js → src/integrations/repositories/integration-repository-documentdb.ts} +51 -89
- package/src/integrations/repositories/integration-repository-factory.ts +27 -0
- package/src/integrations/repositories/integration-repository-interface.ts +52 -0
- package/src/integrations/repositories/integration-repository-mongo.ts +186 -0
- package/src/integrations/repositories/integration-repository-postgres.ts +227 -0
- package/{integrations/repositories/process-repository-documentdb.js → src/integrations/repositories/process-repository-documentdb.ts} +57 -124
- package/src/integrations/repositories/process-repository-factory.ts +27 -0
- package/src/integrations/repositories/process-repository-interface.ts +34 -0
- package/src/integrations/repositories/process-repository-mongo.ts +102 -0
- package/src/integrations/repositories/process-repository-postgres.ts +123 -0
- package/{integrations/tests/doubles/config-capturing-integration.js → src/integrations/tests/doubles/config-capturing-integration.ts} +21 -22
- package/src/integrations/tests/doubles/dummy-integration-class.ts +109 -0
- package/src/integrations/tests/doubles/test-integration-repository.ts +100 -0
- package/src/integrations/tests/integration-router-multi-auth.test.ts +531 -0
- package/src/integrations/tests/use-cases/create-integration.test.ts +131 -0
- package/src/integrations/tests/use-cases/delete-integration-for-user.test.ts +150 -0
- package/src/integrations/tests/use-cases/find-integration-context-by-external-entity-id.test.ts +92 -0
- package/src/integrations/tests/use-cases/get-integration-for-user.test.ts +150 -0
- package/src/integrations/tests/use-cases/get-integration-instance.test.ts +176 -0
- package/src/integrations/tests/use-cases/get-integrations-for-user.test.ts +176 -0
- package/src/integrations/tests/use-cases/get-possible-integrations.test.ts +188 -0
- package/src/integrations/tests/use-cases/update-integration-messages.test.ts +142 -0
- package/src/integrations/tests/use-cases/update-integration-status.test.ts +103 -0
- package/src/integrations/tests/use-cases/update-integration.test.ts +208 -0
- package/src/integrations/types.ts +195 -0
- package/src/integrations/use-cases/create-integration.ts +70 -0
- package/src/integrations/use-cases/create-process.test.ts +172 -0
- package/src/integrations/use-cases/create-process.ts +77 -0
- package/src/integrations/use-cases/delete-integration-for-user.ts +87 -0
- package/src/integrations/use-cases/find-integration-context-by-external-entity-id.ts +92 -0
- package/src/integrations/use-cases/get-integration-for-user.ts +74 -0
- package/src/integrations/use-cases/get-integration-instance-by-definition.ts +69 -0
- package/{integrations/use-cases/get-integration-instance.js → src/integrations/use-cases/get-integration-instance.ts} +20 -31
- package/src/integrations/use-cases/get-integrations-for-user.ts +75 -0
- package/src/integrations/use-cases/get-possible-integrations.ts +15 -0
- package/src/integrations/use-cases/get-process.test.ts +181 -0
- package/src/integrations/use-cases/get-process.ts +49 -0
- package/src/integrations/use-cases/index.ts +16 -0
- package/src/integrations/use-cases/load-integration-context-full.test.ts +316 -0
- package/src/integrations/use-cases/load-integration-context.test.ts +115 -0
- package/{integrations/use-cases/load-integration-context.js → src/integrations/use-cases/load-integration-context.ts} +34 -14
- package/src/integrations/use-cases/update-integration-messages.ts +26 -0
- package/src/integrations/use-cases/update-integration-status.ts +17 -0
- package/src/integrations/use-cases/update-integration.ts +76 -0
- package/src/integrations/use-cases/update-process-metrics.test.ts +278 -0
- package/src/integrations/use-cases/update-process-metrics.ts +128 -0
- package/src/integrations/use-cases/update-process-state.test.ts +249 -0
- package/src/integrations/use-cases/update-process-state.ts +73 -0
- package/src/integrations/utils/map-integration-dto.ts +55 -0
- package/src/lambda/TimeoutCatcher.test.ts +69 -0
- package/src/lambda/TimeoutCatcher.ts +57 -0
- package/src/lambda/index.ts +2 -0
- package/src/logs/index.ts +2 -0
- package/src/logs/logger.test.ts +76 -0
- package/{logs/logger.js → src/logs/logger.ts} +15 -10
- package/src/modules/ModuleConstants.ts +11 -0
- package/src/modules/index.ts +38 -0
- package/{modules/module-factory.js → src/modules/module-factory.ts} +16 -20
- package/src/modules/module-hydration.test.ts +203 -0
- package/src/modules/module.ts +283 -0
- package/src/modules/repositories/module-repository-documentdb.ts +303 -0
- package/src/modules/repositories/module-repository-factory.ts +29 -0
- package/src/modules/repositories/module-repository-interface.ts +73 -0
- package/src/modules/repositories/module-repository-mongo.ts +260 -0
- package/src/modules/repositories/module-repository-postgres.ts +293 -0
- package/src/modules/repositories/module-repository.ts +210 -0
- package/src/modules/requester/api-key.ts +58 -0
- package/src/modules/requester/basic.ts +49 -0
- package/src/modules/requester/oauth-2.test.ts +425 -0
- package/src/modules/requester/oauth-2.ts +298 -0
- package/src/modules/requester/requester.test.ts +28 -0
- package/src/modules/requester/requester.ts +212 -0
- package/{modules/test/mock-api/api.js → src/modules/test/mock-api/api.ts} +6 -8
- package/{modules/test/mock-api/definition.js → src/modules/test/mock-api/definition.ts} +15 -21
- package/src/modules/test/mock-api/mocks/hubspot.ts +41 -0
- package/src/modules/tests/doubles/test-module-factory.ts +11 -0
- package/{modules/tests/doubles/test-module-repository.js → src/modules/tests/doubles/test-module-repository.ts} +7 -7
- package/src/modules/tests/module-on-token-update.test.ts +125 -0
- package/src/modules/use-cases/get-entities-for-user.ts +36 -0
- package/src/modules/use-cases/get-entity-options-by-id.ts +64 -0
- package/src/modules/use-cases/get-entity-options-by-type.ts +25 -0
- package/src/modules/use-cases/get-module-instance-from-type.ts +23 -0
- package/src/modules/use-cases/get-module.ts +70 -0
- package/{modules/use-cases/process-authorization-callback.js → src/modules/use-cases/process-authorization-callback.ts} +50 -49
- package/src/modules/use-cases/refresh-entity-options.ts +65 -0
- package/src/modules/use-cases/test-module-auth.ts +64 -0
- package/src/modules/utils/map-module-dto.ts +23 -0
- package/src/queues/index.ts +1 -0
- package/src/queues/queuer-util.test.ts +131 -0
- package/src/queues/queuer-util.ts +59 -0
- package/src/syncs/index.ts +14 -0
- package/{syncs/manager.js → src/syncs/manager.ts} +140 -142
- package/{syncs/repositories/sync-repository-documentdb.js → src/syncs/repositories/sync-repository-documentdb.ts} +46 -67
- package/src/syncs/repositories/sync-repository-factory.ts +30 -0
- package/src/syncs/repositories/sync-repository-interface.ts +68 -0
- package/src/syncs/repositories/sync-repository-mongo.ts +149 -0
- package/src/syncs/repositories/sync-repository-postgres.ts +221 -0
- package/src/syncs/sync.ts +119 -0
- package/src/token/index.ts +7 -0
- package/src/token/repositories/token-repository-documentdb.ts +110 -0
- package/src/token/repositories/token-repository-factory.ts +26 -0
- package/src/token/repositories/token-repository-interface.ts +57 -0
- package/src/token/repositories/token-repository-mongo.ts +81 -0
- package/src/token/repositories/token-repository-postgres.ts +105 -0
- package/src/token/repositories/token-repository.ts +125 -0
- package/src/user/index.ts +17 -0
- package/src/user/repositories/user-repository-documentdb.ts +286 -0
- package/src/user/repositories/user-repository-factory.ts +26 -0
- package/src/user/repositories/user-repository-interface.ts +109 -0
- package/src/user/repositories/user-repository-mongo.ts +130 -0
- package/src/user/repositories/user-repository-postgres.ts +175 -0
- package/{user/tests/doubles/test-user-repository.js → src/user/tests/doubles/test-user-repository.ts} +16 -19
- package/src/user/tests/use-cases/create-individual-user.test.ts +24 -0
- package/src/user/tests/use-cases/create-organization-user.test.ts +28 -0
- package/src/user/tests/use-cases/create-token-for-user-id.test.ts +18 -0
- package/src/user/tests/use-cases/get-user-from-adopter-jwt.test.ts +113 -0
- package/src/user/tests/use-cases/get-user-from-bearer-token.test.ts +64 -0
- package/src/user/tests/use-cases/get-user-from-x-frigg-headers.test.ts +440 -0
- package/src/user/tests/use-cases/login-user.test.ts +220 -0
- package/src/user/use-cases/authenticate-user.ts +98 -0
- package/src/user/use-cases/authenticate-with-shared-secret.test.ts +127 -0
- package/src/user/use-cases/authenticate-with-shared-secret.ts +19 -0
- package/src/user/use-cases/create-individual-user.ts +59 -0
- package/src/user/use-cases/create-organization-user.ts +44 -0
- package/src/user/use-cases/create-token-for-user-id.ts +19 -0
- package/src/user/use-cases/get-user-from-adopter-jwt.ts +40 -0
- package/{user/use-cases/get-user-from-bearer-token.js → src/user/use-cases/get-user-from-bearer-token.ts} +23 -30
- package/src/user/use-cases/get-user-from-x-frigg-headers.ts +119 -0
- package/src/user/use-cases/login-user.ts +110 -0
- package/src/user/user.ts +125 -0
- package/{utils/backend-path.js → src/utils/backend-path.ts} +5 -8
- package/src/utils/index.ts +2 -0
- package/src/websocket/index.ts +7 -0
- package/src/websocket/repositories/websocket-connection-repository-documentdb.ts +93 -0
- package/src/websocket/repositories/websocket-connection-repository-factory.ts +26 -0
- package/src/websocket/repositories/websocket-connection-repository-interface.ts +47 -0
- package/src/websocket/repositories/websocket-connection-repository-mongo.ts +77 -0
- package/src/websocket/repositories/websocket-connection-repository-postgres.ts +94 -0
- package/src/websocket/repositories/websocket-connection-repository.test.ts +220 -0
- package/src/websocket/repositories/websocket-connection-repository.ts +101 -0
- package/tsconfig.json +17 -0
- package/tsconfig.test.json +10 -0
- package/workflows/frigg-workflow.ts +322 -0
- package/workflows/index.ts +205 -0
- package/workflows/steps/fan-out-step.ts +275 -0
- package/workflows/steps/function-step.ts +174 -0
- package/workflows/steps/index.ts +30 -0
- package/workflows/steps/workflow-step.ts +115 -0
- package/workflows/use-cases/create-workflow.ts +332 -0
- package/workflows/use-cases/execute-workflow-step.ts +465 -0
- package/workflows/use-cases/execute-workflow.ts +403 -0
- package/workflows/workflow-execution-repository.ts +415 -0
- package/workflows/workflow-execution.ts +209 -0
- package/workflows/workflow-queue-service.ts +379 -0
- package/workflows/workflow-repository.ts +295 -0
- package/workflows/workflow.ts +117 -0
- package/admin-scripts/index.js +0 -52
- package/admin-scripts/repositories/admin-api-key-repository-documentdb.js +0 -21
- package/admin-scripts/repositories/admin-api-key-repository-factory.js +0 -51
- package/admin-scripts/repositories/admin-api-key-repository-interface.js +0 -121
- package/admin-scripts/repositories/admin-api-key-repository-mongo.js +0 -155
- package/admin-scripts/repositories/admin-api-key-repository-postgres.js +0 -189
- package/admin-scripts/repositories/admin-process-repository-documentdb.js +0 -21
- package/admin-scripts/repositories/admin-process-repository-factory.js +0 -49
- package/admin-scripts/repositories/admin-process-repository-interface.js +0 -150
- package/admin-scripts/repositories/admin-process-repository-mongo.js +0 -213
- package/admin-scripts/repositories/admin-process-repository-postgres.js +0 -251
- package/admin-scripts/repositories/script-execution-repository-documentdb.js +0 -21
- package/admin-scripts/repositories/script-execution-repository-factory.js +0 -51
- package/admin-scripts/repositories/script-execution-repository-interface.js +0 -193
- package/admin-scripts/repositories/script-execution-repository-mongo.js +0 -278
- package/admin-scripts/repositories/script-execution-repository-postgres.js +0 -320
- package/admin-scripts/repositories/script-schedule-repository-documentdb.js +0 -21
- package/admin-scripts/repositories/script-schedule-repository-factory.js +0 -49
- package/admin-scripts/repositories/script-schedule-repository-interface.js +0 -108
- package/admin-scripts/repositories/script-schedule-repository-mongo.js +0 -179
- package/admin-scripts/repositories/script-schedule-repository-postgres.js +0 -210
- package/application/commands/admin-script-commands.js +0 -348
- package/application/commands/credential-commands.js +0 -245
- package/application/commands/entity-commands.js +0 -336
- package/application/commands/integration-commands.js +0 -216
- package/application/index.js +0 -75
- package/assertions/get.js +0 -149
- package/assertions/index.js +0 -16
- package/assertions/jest.config.js +0 -5
- package/associations/association.js +0 -80
- package/core/Delegate.js +0 -29
- package/core/Worker.js +0 -93
- package/core/index.js +0 -6
- package/core/load-installed-modules.js +0 -28
- package/credential/credential-router.js +0 -262
- package/credential/repositories/credential-repository-documentdb.js +0 -374
- package/credential/repositories/credential-repository-factory.js +0 -52
- package/credential/repositories/credential-repository-interface.js +0 -104
- package/credential/repositories/credential-repository-mongo.js +0 -310
- package/credential/repositories/credential-repository-postgres.js +0 -328
- package/credential/repositories/credential-repository.js +0 -302
- package/credential/use-cases/delete-credential-for-user.js +0 -50
- package/credential/use-cases/get-credential-for-user.js +0 -43
- package/credential/use-cases/list-credentials-for-user.js +0 -31
- package/credential/use-cases/reauthorize-credential.js +0 -103
- package/credential/use-cases/update-authentication-status.js +0 -18
- package/database/config.js +0 -108
- package/database/documentdb-encryption-service.js +0 -346
- package/database/documentdb-utils.js +0 -145
- package/database/encryption/encryption-schema-registry.js +0 -314
- package/database/index.js +0 -25
- package/database/jest.config.js +0 -5
- package/database/prisma.js +0 -193
- package/database/repositories/health-check-repository-factory.js +0 -50
- package/database/repositories/health-check-repository-interface.js +0 -92
- package/database/repositories/health-check-repository-mongodb.js +0 -89
- package/database/repositories/health-check-repository-postgres.js +0 -82
- package/database/use-cases/check-database-health-use-case.js +0 -30
- package/database/use-cases/check-database-state-use-case.js +0 -82
- package/database/use-cases/get-database-state-via-worker-use-case.js +0 -64
- package/database/use-cases/get-migration-status-use-case.js +0 -95
- package/database/use-cases/run-database-migration-use-case.js +0 -171
- package/database/use-cases/test-encryption-use-case.js +0 -252
- package/database/use-cases/trigger-database-migration-use-case.js +0 -158
- package/database/utils/mongodb-collection-utils.js +0 -102
- package/database/utils/mongodb-schema-init.js +0 -114
- package/database/utils/prisma-runner.js +0 -547
- package/database/utils/prisma-schema-parser.js +0 -182
- package/encrypt/Cryptor.js +0 -107
- package/encrypt/aes-encryption-key-provider.js +0 -82
- package/encrypt/encryption-key-provider-interface.js +0 -50
- package/encrypt/index.js +0 -3
- package/errors/base-error.js +0 -23
- package/errors/client-safe-error.js +0 -26
- package/errors/halt-error.js +0 -10
- package/errors/index.js +0 -17
- package/errors/validation-errors.js +0 -23
- package/extensions/bootstrap-runner.js +0 -43
- package/extensions/extension-loader.js +0 -167
- package/extensions/index.js +0 -37
- package/extensions/initialize-app.js +0 -123
- package/extensions/route-mounter.js +0 -59
- package/extensions/schema-composer.js +0 -188
- package/generated/prisma-mongodb/runtime/library.js +0 -146
- package/generated/prisma-postgresql/runtime/library.js +0 -146
- package/handlers/app-definition-loader.js +0 -81
- package/handlers/app-handler-helpers.js +0 -68
- package/handlers/database-migration-handler.js +0 -246
- package/handlers/middleware/admin-auth.js +0 -53
- package/handlers/routers/admin.js +0 -474
- package/handlers/routers/auth.js +0 -57
- package/handlers/routers/db-migration.handler.js +0 -28
- package/handlers/routers/db-migration.js +0 -362
- package/handlers/routers/docs.js +0 -180
- package/handlers/routers/health.js +0 -317
- package/handlers/routers/integration-defined-routers.js +0 -56
- package/handlers/routers/integration-webhook-routers.js +0 -88
- package/handlers/routers/middleware/loadUser.js +0 -39
- package/handlers/routers/middleware/requireAdmin.js +0 -43
- package/handlers/routers/middleware/requireLoggedInUser.js +0 -19
- package/handlers/routers/user.js +0 -79
- package/handlers/use-cases/check-integrations-health-use-case.js +0 -51
- package/handlers/workers/db-migration.js +0 -391
- package/handlers/workers/integration-defined-workers.js +0 -38
- package/index.js +0 -220
- package/infrastructure/scheduler/index.js +0 -37
- package/infrastructure/scheduler/netlify-scheduler-adapter.js +0 -185
- package/infrastructure/scheduler/scheduler-service-factory.js +0 -80
- package/infrastructure/scheduler/scheduler-service-interface.js +0 -47
- package/integrations/index.js +0 -25
- package/integrations/integration-router.js +0 -2354
- package/integrations/options.js +0 -80
- package/integrations/repositories/integration-mapping-repository-factory.js +0 -53
- package/integrations/repositories/integration-mapping-repository-interface.js +0 -106
- package/integrations/repositories/integration-mapping-repository-mongo.js +0 -161
- package/integrations/repositories/integration-mapping-repository-postgres.js +0 -227
- package/integrations/repositories/integration-mapping-repository.js +0 -156
- package/integrations/repositories/integration-repository-factory.js +0 -51
- package/integrations/repositories/integration-repository-interface.js +0 -145
- package/integrations/repositories/integration-repository-mongo.js +0 -303
- package/integrations/repositories/integration-repository-postgres.js +0 -352
- package/integrations/repositories/process-repository-factory.js +0 -50
- package/integrations/repositories/process-repository-interface.js +0 -94
- package/integrations/repositories/process-repository-mongo.js +0 -194
- package/integrations/repositories/process-repository-postgres.js +0 -217
- package/integrations/tests/doubles/dummy-integration-class.js +0 -178
- package/integrations/tests/doubles/test-integration-repository.js +0 -139
- package/integrations/use-cases/create-integration.js +0 -87
- package/integrations/use-cases/create-process.js +0 -139
- package/integrations/use-cases/delete-integration-for-user.js +0 -102
- package/integrations/use-cases/execute-proxy-request.js +0 -564
- package/integrations/use-cases/find-integration-context-by-external-entity-id.js +0 -72
- package/integrations/use-cases/get-integration-for-user.js +0 -93
- package/integrations/use-cases/get-integration-instance-by-definition.js +0 -73
- package/integrations/use-cases/get-integrations-for-user.js +0 -91
- package/integrations/use-cases/get-possible-integrations.js +0 -27
- package/integrations/use-cases/get-process.js +0 -86
- package/integrations/use-cases/index.js +0 -21
- package/integrations/use-cases/update-integration-messages.js +0 -44
- package/integrations/use-cases/update-integration-status.js +0 -32
- package/integrations/use-cases/update-integration.js +0 -92
- package/integrations/use-cases/update-process-metrics.js +0 -201
- package/integrations/use-cases/update-process-state.js +0 -121
- package/integrations/utils/map-integration-dto.js +0 -43
- package/jest-global-setup-noop.js +0 -3
- package/jest-global-teardown-noop.js +0 -3
- package/jest-setup.js +0 -2
- package/jest-teardown.js +0 -2
- package/jest.config.js +0 -21
- package/lambda/TimeoutCatcher.js +0 -45
- package/lambda/index.js +0 -3
- package/logs/index.js +0 -7
- package/modules/ModuleConstants.js +0 -10
- package/modules/domain/entities/AuthorizationSession.js +0 -131
- package/modules/domain/entities/index.js +0 -10
- package/modules/index.js +0 -15
- package/modules/module.js +0 -261
- package/modules/repositories/authorization-session-repository-factory.js +0 -53
- package/modules/repositories/authorization-session-repository-interface.js +0 -75
- package/modules/repositories/authorization-session-repository-mongo.js +0 -169
- package/modules/repositories/authorization-session-repository-postgres.js +0 -170
- package/modules/repositories/module-repository-documentdb.js +0 -383
- package/modules/repositories/module-repository-factory.js +0 -38
- package/modules/repositories/module-repository-interface.js +0 -142
- package/modules/repositories/module-repository-mongo.js +0 -443
- package/modules/repositories/module-repository-postgres.js +0 -490
- package/modules/repositories/module-repository.js +0 -373
- package/modules/requester/api-key.js +0 -50
- package/modules/requester/basic.js +0 -42
- package/modules/requester/oauth-2.js +0 -385
- package/modules/requester/requester.js +0 -167
- package/modules/test/mock-api/mocks/hubspot.js +0 -43
- package/modules/tests/doubles/test-module-factory.js +0 -22
- package/modules/use-cases/delete-module-entity.js +0 -23
- package/modules/use-cases/get-authorization-requirements.js +0 -110
- package/modules/use-cases/get-entities-for-user.js +0 -32
- package/modules/use-cases/get-entity-options-by-id.js +0 -73
- package/modules/use-cases/get-entity-options-by-type.js +0 -34
- package/modules/use-cases/get-module-entity-by-id.js +0 -16
- package/modules/use-cases/get-module-instance-from-type.js +0 -31
- package/modules/use-cases/get-module.js +0 -77
- package/modules/use-cases/process-authorization-step.js +0 -160
- package/modules/use-cases/refresh-entity-options.js +0 -74
- package/modules/use-cases/start-authorization-session.js +0 -86
- package/modules/use-cases/test-module-auth.js +0 -74
- package/modules/use-cases/update-module-entity.js +0 -27
- package/modules/utils/map-module-dto.js +0 -18
- package/openapi/openapi-spec-generator.js +0 -370
- package/openapi/openapi-v1.yaml +0 -1360
- package/openapi/openapi-v2.yaml +0 -1535
- package/prisma-postgresql/migrations/20260222000000_add_admin_process_and_script_schedule/migration.sql +0 -55
- package/providers/index.js +0 -13
- package/providers/resolve-provider.js +0 -93
- package/queues/index.js +0 -23
- package/queues/providers/index.js +0 -7
- package/queues/providers/netlify-background-provider.js +0 -76
- package/queues/providers/qstash-queue-provider.js +0 -122
- package/queues/queue-client-interface.js +0 -55
- package/queues/queue-provider-factory.js +0 -93
- package/queues/queue-provider.js +0 -46
- package/queues/queuer-util.js +0 -74
- package/syncs/repositories/sync-repository-factory.js +0 -43
- package/syncs/repositories/sync-repository-interface.js +0 -113
- package/syncs/repositories/sync-repository-mongo.js +0 -239
- package/syncs/repositories/sync-repository-postgres.js +0 -325
- package/syncs/sync.js +0 -117
- package/token/repositories/token-repository-documentdb.js +0 -137
- package/token/repositories/token-repository-factory.js +0 -38
- package/token/repositories/token-repository-interface.js +0 -131
- package/token/repositories/token-repository-mongo.js +0 -219
- package/token/repositories/token-repository-postgres.js +0 -264
- package/token/repositories/token-repository.js +0 -219
- package/types/assertions/index.d.ts +0 -83
- package/types/associations/index.d.ts +0 -57
- package/types/core/index.d.ts +0 -99
- package/types/database/index.d.ts +0 -11
- package/types/encrypt/index.d.ts +0 -7
- package/types/errors/index.d.ts +0 -73
- package/types/eslint-config/index.d.ts +0 -41
- package/types/index.d.ts +0 -14
- package/types/integrations/index.d.ts +0 -186
- package/types/lambda/index.d.ts +0 -31
- package/types/logs/index.d.ts +0 -5
- package/types/module-plugin/index.d.ts +0 -241
- package/types/prettier-config/index.d.ts +0 -6
- package/types/syncs/index.d.ts +0 -111
- package/types/test-environment/index.d.ts +0 -17
- package/types/tsconfig.json +0 -105
- package/user/repositories/user-repository-documentdb.js +0 -441
- package/user/repositories/user-repository-factory.js +0 -52
- package/user/repositories/user-repository-interface.js +0 -201
- package/user/repositories/user-repository-mongo.js +0 -308
- package/user/repositories/user-repository-postgres.js +0 -360
- package/user/use-cases/authenticate-user.js +0 -125
- package/user/use-cases/authenticate-with-shared-secret.js +0 -48
- package/user/use-cases/create-individual-user.js +0 -62
- package/user/use-cases/create-organization-user.js +0 -47
- package/user/use-cases/create-token-for-user-id.js +0 -30
- package/user/use-cases/delete-user.js +0 -47
- package/user/use-cases/get-user-from-adopter-jwt.js +0 -147
- package/user/use-cases/get-user-from-x-frigg-headers.js +0 -135
- package/user/use-cases/login-user.js +0 -122
- package/user/user.js +0 -139
- package/utils/index.js +0 -9
- package/websocket/repositories/websocket-connection-repository-documentdb.js +0 -144
- package/websocket/repositories/websocket-connection-repository-factory.js +0 -40
- package/websocket/repositories/websocket-connection-repository-interface.js +0 -106
- package/websocket/repositories/websocket-connection-repository-mongo.js +0 -166
- package/websocket/repositories/websocket-connection-repository-postgres.js +0 -207
- package/websocket/repositories/websocket-connection-repository.js +0 -167
- package/websocket/websocket-message-sender-interface.js +0 -38
package/CLAUDE.md
CHANGED
|
@@ -4,12 +4,12 @@ This file provides guidance to Claude Code when working with the Frigg Framework
|
|
|
4
4
|
|
|
5
5
|
## Critical Context (Read First)
|
|
6
6
|
|
|
7
|
-
-
|
|
8
|
-
-
|
|
9
|
-
-
|
|
10
|
-
-
|
|
11
|
-
-
|
|
12
|
-
-
|
|
7
|
+
- **Package Purpose**: Core framework functionality for building enterprise serverless integrations
|
|
8
|
+
- **Main Architecture**: Hexagonal/DDD architecture with clear separation of adapters, use cases, and repositories
|
|
9
|
+
- **Key Technologies**: Node.js, Express, AWS Lambda, MongoDB/PostgreSQL (Prisma), AWS KMS encryption
|
|
10
|
+
- **Core Value**: Provides building blocks for integration developers - they extend IntegrationBase and use framework services
|
|
11
|
+
- **Security Model**: Field-level encryption, OAuth2 flows, signature validation, VPC deployment
|
|
12
|
+
- **DO NOT**: Bypass architectural layers, skip encryption for sensitive data, expose internal errors to users
|
|
13
13
|
|
|
14
14
|
## Table of Contents
|
|
15
15
|
|
|
@@ -26,14 +26,14 @@ This file provides guidance to Claude Code when working with the Frigg Framework
|
|
|
26
26
|
|
|
27
27
|
`@friggframework/core` is the foundational package of the Frigg Framework, providing:
|
|
28
28
|
|
|
29
|
-
-
|
|
30
|
-
-
|
|
31
|
-
-
|
|
32
|
-
-
|
|
33
|
-
-
|
|
34
|
-
-
|
|
35
|
-
-
|
|
36
|
-
-
|
|
29
|
+
- **IntegrationBase**: Base class all integrations extend
|
|
30
|
+
- **Database Layer**: Multi-database support (MongoDB, DocumentDB, PostgreSQL) with Prisma ORM
|
|
31
|
+
- **Encryption**: Transparent field-level encryption with AWS KMS or AES
|
|
32
|
+
- **User Management**: Individual and organizational user support
|
|
33
|
+
- **Module System**: API module loading and credential management
|
|
34
|
+
- **Lambda Runtime**: Handler factory, worker base class, timeout management
|
|
35
|
+
- **Error Handling**: Standardized error types with proper HTTP status codes
|
|
36
|
+
- **Event System**: Integration lifecycle events and user actions
|
|
37
37
|
|
|
38
38
|
## Architecture Principles
|
|
39
39
|
|
|
@@ -196,25 +196,22 @@ packages/core/
|
|
|
196
196
|
**Purpose**: Foundation for building integrations between external systems.
|
|
197
197
|
|
|
198
198
|
**Key Files**:
|
|
199
|
-
|
|
200
|
-
-
|
|
201
|
-
-
|
|
202
|
-
- `options.js` - Integration configuration and options
|
|
199
|
+
- `integration-base.js` - Base class all integrations extend
|
|
200
|
+
- `integration.js` - Integration domain aggregate using Proxy pattern
|
|
201
|
+
- `options.js` - Integration configuration and options
|
|
203
202
|
|
|
204
203
|
**Use Cases**:
|
|
205
|
-
|
|
206
|
-
-
|
|
207
|
-
-
|
|
208
|
-
-
|
|
209
|
-
-
|
|
210
|
-
- `load-integration-context.js` - Full integration context loading
|
|
204
|
+
- `create-integration.js` - Create new integration instance
|
|
205
|
+
- `update-integration.js` - Update integration configuration
|
|
206
|
+
- `delete-integration-for-user.js` - Remove integration
|
|
207
|
+
- `get-integration-instance.js` - Load integration with modules
|
|
208
|
+
- `load-integration-context.js` - Full integration context loading
|
|
211
209
|
|
|
212
210
|
**Repositories**:
|
|
213
|
-
|
|
214
|
-
-
|
|
215
|
-
-
|
|
216
|
-
-
|
|
217
|
-
- `integration-mapping-repository-*.js` - Mapping data persistence
|
|
211
|
+
- `integration-repository-factory.js` - Creates database-specific repositories
|
|
212
|
+
- `integration-repository-mongo.js` - MongoDB implementation
|
|
213
|
+
- `integration-repository-postgres.js` - PostgreSQL implementation
|
|
214
|
+
- `integration-mapping-repository-*.js` - Mapping data persistence
|
|
218
215
|
|
|
219
216
|
**Integration developers extend IntegrationBase**:
|
|
220
217
|
|
|
@@ -227,8 +224,8 @@ class MyIntegration extends IntegrationBase {
|
|
|
227
224
|
version: '1.0.0',
|
|
228
225
|
modules: {
|
|
229
226
|
serviceA: 'service-a',
|
|
230
|
-
serviceB: 'service-b'
|
|
231
|
-
}
|
|
227
|
+
serviceB: 'service-b'
|
|
228
|
+
}
|
|
232
229
|
};
|
|
233
230
|
|
|
234
231
|
async onCreate({ integrationId }) {
|
|
@@ -243,60 +240,52 @@ class MyIntegration extends IntegrationBase {
|
|
|
243
240
|
**Purpose**: Multi-database support with transparent encryption.
|
|
244
241
|
|
|
245
242
|
**Key Components**:
|
|
246
|
-
|
|
247
|
-
-
|
|
248
|
-
-
|
|
249
|
-
- `models/` - Mongoose model definitions
|
|
243
|
+
- `prisma.js` - Prisma client initialization with encryption extension
|
|
244
|
+
- `mongo.js` - Mongoose connection management (legacy)
|
|
245
|
+
- `models/` - Mongoose model definitions
|
|
250
246
|
|
|
251
247
|
**Encryption System** (`/database/encryption`):
|
|
252
|
-
|
|
253
|
-
-
|
|
254
|
-
-
|
|
255
|
-
-
|
|
256
|
-
- **Configurable**: Via environment variables and app definition
|
|
248
|
+
- **Transparent encryption**: Application code never sees encrypted data
|
|
249
|
+
- **Database-agnostic**: Works with MongoDB and PostgreSQL
|
|
250
|
+
- **AWS KMS or AES**: Production KMS, development AES
|
|
251
|
+
- **Configurable**: Via environment variables and app definition
|
|
257
252
|
|
|
258
253
|
**See**: `database/encryption/README.md` for comprehensive documentation
|
|
259
254
|
|
|
260
255
|
**Repositories**:
|
|
261
|
-
|
|
262
|
-
-
|
|
263
|
-
-
|
|
264
|
-
-
|
|
265
|
-
- DocumentDB-enabled adapters mirror the MongoDB APIs but execute raw commands (`$runCommandRaw`, `$aggregateRaw`) for compatibility; encrypted models (e.g., credentials) still delegate reads to Prisma so the encryption extension can decrypt secrets transparently.
|
|
256
|
+
- `health-check-repository.js` - Database health monitoring
|
|
257
|
+
- `token-repository.js` - Authentication tokens
|
|
258
|
+
- `websocket-connection-repository.js` - WebSocket connections
|
|
259
|
+
- DocumentDB-enabled adapters mirror the MongoDB APIs but execute raw commands (`$runCommandRaw`, `$aggregateRaw`) for compatibility; encrypted models (e.g., credentials) still delegate reads to Prisma so the encryption extension can decrypt secrets transparently.
|
|
266
260
|
|
|
267
261
|
**Use Cases**:
|
|
268
|
-
|
|
269
|
-
-
|
|
270
|
-
- `test-encryption-use-case.js` - Encryption verification
|
|
262
|
+
- `check-database-health-use-case.js` - Database health checks
|
|
263
|
+
- `test-encryption-use-case.js` - Encryption verification
|
|
271
264
|
|
|
272
265
|
### 3. User Management (`/user`)
|
|
273
266
|
|
|
274
267
|
**Purpose**: Individual and organizational user authentication.
|
|
275
268
|
|
|
276
269
|
**User Types**:
|
|
277
|
-
|
|
278
|
-
-
|
|
279
|
-
-
|
|
280
|
-
- **Hybrid**: Support both simultaneously
|
|
270
|
+
- **Individual Users**: Personal accounts with email/password
|
|
271
|
+
- **Organization Users**: Business accounts with organization-level access
|
|
272
|
+
- **Hybrid**: Support both simultaneously
|
|
281
273
|
|
|
282
274
|
**Authentication Methods**:
|
|
283
|
-
|
|
284
|
-
-
|
|
285
|
-
-
|
|
286
|
-
- App-based (external app user IDs)
|
|
275
|
+
- Password-based (bcrypt hashed)
|
|
276
|
+
- Token-based (Bearer tokens)
|
|
277
|
+
- App-based (external app user IDs)
|
|
287
278
|
|
|
288
279
|
**Use Cases**:
|
|
289
|
-
|
|
290
|
-
-
|
|
291
|
-
-
|
|
292
|
-
-
|
|
293
|
-
- `get-user-from-bearer-token.js` - Token authentication
|
|
280
|
+
- `login-user.js` - User authentication
|
|
281
|
+
- `create-individual-user.js` - Create personal account
|
|
282
|
+
- `create-organization-user.js` - Create business account
|
|
283
|
+
- `get-user-from-bearer-token.js` - Token authentication
|
|
294
284
|
|
|
295
285
|
**Repositories**:
|
|
296
|
-
|
|
297
|
-
-
|
|
298
|
-
-
|
|
299
|
-
- `user-repository-postgres.js` - PostgreSQL implementation
|
|
286
|
+
- `user-repository-factory.js` - Creates database-specific repositories
|
|
287
|
+
- `user-repository-mongo.js` - MongoDB implementation
|
|
288
|
+
- `user-repository-postgres.js` - PostgreSQL implementation
|
|
300
289
|
|
|
301
290
|
**Configuration** (in app definition):
|
|
302
291
|
|
|
@@ -316,24 +305,21 @@ class MyIntegration extends IntegrationBase {
|
|
|
316
305
|
**Purpose**: API module loading, credential management, and HTTP clients.
|
|
317
306
|
|
|
318
307
|
**Key Classes**:
|
|
319
|
-
|
|
320
|
-
-
|
|
321
|
-
-
|
|
322
|
-
-
|
|
323
|
-
-
|
|
324
|
-
-
|
|
325
|
-
- `BasicAuthRequester` - Basic authentication
|
|
308
|
+
- `Credential` - API credentials domain entity
|
|
309
|
+
- `Entity` - External service entity (account, workspace, etc.)
|
|
310
|
+
- `Requester` - Base HTTP client class
|
|
311
|
+
- `OAuth2Requester` - OAuth 2.0 flow implementation
|
|
312
|
+
- `ApiKeyRequester` - API key authentication
|
|
313
|
+
- `BasicAuthRequester` - Basic authentication
|
|
326
314
|
|
|
327
315
|
**Module Factory**:
|
|
328
|
-
|
|
329
|
-
-
|
|
330
|
-
-
|
|
331
|
-
- Manages module lifecycle
|
|
316
|
+
- `ModuleFactory` - Creates and configures API module instances
|
|
317
|
+
- Handles credential injection
|
|
318
|
+
- Manages module lifecycle
|
|
332
319
|
|
|
333
320
|
**Repositories**:
|
|
334
|
-
|
|
335
|
-
-
|
|
336
|
-
- `credential-repository.js` - Credential persistence (encrypted)
|
|
321
|
+
- `module-repository.js` - Module data access
|
|
322
|
+
- `credential-repository.js` - Credential persistence (encrypted)
|
|
337
323
|
|
|
338
324
|
### 5. Core Runtime System (`/core`)
|
|
339
325
|
|
|
@@ -342,11 +328,10 @@ class MyIntegration extends IntegrationBase {
|
|
|
342
328
|
**See**: `core/CLAUDE.md` for comprehensive documentation
|
|
343
329
|
|
|
344
330
|
**Key Components**:
|
|
345
|
-
|
|
346
|
-
-
|
|
347
|
-
-
|
|
348
|
-
-
|
|
349
|
-
- `load-installed-modules.js` - Dynamic module loading
|
|
331
|
+
- `create-handler.js` - Lambda handler factory
|
|
332
|
+
- `Worker.js` - SQS job processing base class
|
|
333
|
+
- `Delegate.js` - Observer/delegation pattern
|
|
334
|
+
- `load-installed-modules.js` - Dynamic module loading
|
|
350
335
|
|
|
351
336
|
**Handler Pattern**:
|
|
352
337
|
|
|
@@ -355,12 +340,12 @@ const { createHandler } = require('@friggframework/core');
|
|
|
355
340
|
|
|
356
341
|
const handler = createHandler({
|
|
357
342
|
eventName: 'MyIntegration',
|
|
358
|
-
isUserFacingResponse: true,
|
|
359
|
-
shouldUseDatabase: true,
|
|
343
|
+
isUserFacingResponse: true, // Sanitize errors
|
|
344
|
+
shouldUseDatabase: true, // Connect to DB
|
|
360
345
|
method: async (event, context) => {
|
|
361
346
|
// Your logic here
|
|
362
347
|
return { statusCode: 200, body: 'Success' };
|
|
363
|
-
}
|
|
348
|
+
}
|
|
364
349
|
});
|
|
365
350
|
```
|
|
366
351
|
|
|
@@ -385,11 +370,10 @@ class MyWorker extends Worker {
|
|
|
385
370
|
**Purpose**: Cryptor adapter for AWS KMS and AES encryption.
|
|
386
371
|
|
|
387
372
|
**Key Class**: `Cryptor.js`
|
|
388
|
-
|
|
389
|
-
-
|
|
390
|
-
-
|
|
391
|
-
-
|
|
392
|
-
- Key rotation support
|
|
373
|
+
- Envelope encryption pattern
|
|
374
|
+
- AWS KMS integration
|
|
375
|
+
- AES-256-GCM fallback
|
|
376
|
+
- Key rotation support
|
|
393
377
|
|
|
394
378
|
**Usage**:
|
|
395
379
|
|
|
@@ -397,7 +381,7 @@ class MyWorker extends Worker {
|
|
|
397
381
|
const { Cryptor } = require('@friggframework/core');
|
|
398
382
|
|
|
399
383
|
const cryptor = new Cryptor({
|
|
400
|
-
shouldUseAws: process.env.KMS_KEY_ARN ? true : false
|
|
384
|
+
shouldUseAws: process.env.KMS_KEY_ARN ? true : false
|
|
401
385
|
});
|
|
402
386
|
|
|
403
387
|
const encrypted = await cryptor.encrypt('sensitive-data');
|
|
@@ -409,33 +393,29 @@ const decrypted = await cryptor.decrypt(encrypted);
|
|
|
409
393
|
**Purpose**: HTTP/Lambda request handling and routing.
|
|
410
394
|
|
|
411
395
|
**Key Routers**:
|
|
412
|
-
|
|
413
|
-
-
|
|
414
|
-
-
|
|
415
|
-
- `health.js` - Health check endpoints with encryption verification
|
|
396
|
+
- `integration-router.js` - Integration CRUD operations
|
|
397
|
+
- `auth.js` - Authentication endpoints
|
|
398
|
+
- `health.js` - Health check endpoints with encryption verification
|
|
416
399
|
|
|
417
400
|
**Handler Types**:
|
|
418
|
-
|
|
419
|
-
-
|
|
420
|
-
-
|
|
421
|
-
- **Background workers**: SQS message processing
|
|
401
|
+
- **User-facing**: Sanitize errors, friendly responses
|
|
402
|
+
- **Server-to-server**: Full error details for debugging
|
|
403
|
+
- **Background workers**: SQS message processing
|
|
422
404
|
|
|
423
405
|
**Event Dispatcher**:
|
|
424
|
-
|
|
425
|
-
-
|
|
426
|
-
- Supports lifecycle events and user actions
|
|
406
|
+
- `integration-event-dispatcher.js` - Routes events to integration handlers
|
|
407
|
+
- Supports lifecycle events and user actions
|
|
427
408
|
|
|
428
409
|
### 8. Error Handling (`/errors`)
|
|
429
410
|
|
|
430
411
|
**Purpose**: Standardized error types with proper HTTP semantics.
|
|
431
412
|
|
|
432
413
|
**Error Types**:
|
|
433
|
-
|
|
434
|
-
-
|
|
435
|
-
-
|
|
436
|
-
-
|
|
437
|
-
-
|
|
438
|
-
- `ParameterTypeError` - Invalid parameter type
|
|
414
|
+
- `BaseError` - Base error class
|
|
415
|
+
- `FetchError` - HTTP request failures
|
|
416
|
+
- `HaltError` - Stop processing without retry
|
|
417
|
+
- `RequiredPropertyError` - Missing required parameters
|
|
418
|
+
- `ParameterTypeError` - Invalid parameter type
|
|
439
419
|
|
|
440
420
|
**Usage**:
|
|
441
421
|
|
|
@@ -452,10 +432,9 @@ if (!userId) {
|
|
|
452
432
|
**Purpose**: Structured logging with debug capabilities.
|
|
453
433
|
|
|
454
434
|
**Functions**:
|
|
455
|
-
|
|
456
|
-
-
|
|
457
|
-
-
|
|
458
|
-
- `flushDebugLog(error)` - Flush logs on error
|
|
435
|
+
- `debug(message, data)` - Debug logging
|
|
436
|
+
- `initDebugLog(eventName, event)` - Initialize debug context
|
|
437
|
+
- `flushDebugLog(error)` - Flush logs on error
|
|
459
438
|
|
|
460
439
|
**Usage**:
|
|
461
440
|
|
|
@@ -473,9 +452,8 @@ flushDebugLog(); // On error
|
|
|
473
452
|
**Purpose**: AWS Lambda-specific utilities.
|
|
474
453
|
|
|
475
454
|
**Key Classes**:
|
|
476
|
-
|
|
477
|
-
-
|
|
478
|
-
- Graceful shutdown handling
|
|
455
|
+
- `TimeoutCatcher` - Detect approaching Lambda timeout
|
|
456
|
+
- Graceful shutdown handling
|
|
479
457
|
|
|
480
458
|
**Usage**:
|
|
481
459
|
|
|
@@ -533,10 +511,10 @@ const appDefinition = {
|
|
|
533
511
|
encryption: {
|
|
534
512
|
schema: {
|
|
535
513
|
MyCustomModel: {
|
|
536
|
-
fields: ['secretData', 'data.apiKey']
|
|
537
|
-
}
|
|
538
|
-
}
|
|
539
|
-
}
|
|
514
|
+
fields: ['secretData', 'data.apiKey']
|
|
515
|
+
}
|
|
516
|
+
}
|
|
517
|
+
}
|
|
540
518
|
};
|
|
541
519
|
```
|
|
542
520
|
|
|
@@ -547,8 +525,8 @@ Edit `database/encryption/encryption-schema-registry.js`:
|
|
|
547
525
|
```javascript
|
|
548
526
|
const ENCRYPTION_SCHEMA = {
|
|
549
527
|
MyModel: {
|
|
550
|
-
fields: ['sensitiveField']
|
|
551
|
-
}
|
|
528
|
+
fields: ['sensitiveField']
|
|
529
|
+
}
|
|
552
530
|
};
|
|
553
531
|
```
|
|
554
532
|
|
|
@@ -593,7 +571,7 @@ describe('MyUseCase', () => {
|
|
|
593
571
|
beforeEach(() => {
|
|
594
572
|
mockRepository = {
|
|
595
573
|
findById: jest.fn(),
|
|
596
|
-
save: jest.fn()
|
|
574
|
+
save: jest.fn()
|
|
597
575
|
};
|
|
598
576
|
useCase = new MyUseCase({ repository: mockRepository });
|
|
599
577
|
});
|
|
@@ -660,35 +638,35 @@ Use test doubles from `@friggframework/test` package for consistent mocking.
|
|
|
660
638
|
|
|
661
639
|
### Required
|
|
662
640
|
|
|
663
|
-
-
|
|
664
|
-
-
|
|
665
|
-
-
|
|
641
|
+
- `AWS_REGION` - AWS region for services
|
|
642
|
+
- `DATABASE_URL` - Database connection string (auto-set)
|
|
643
|
+
- `DB_TYPE` - Database type: 'mongodb' or 'postgresql'
|
|
666
644
|
|
|
667
645
|
### Encryption
|
|
668
646
|
|
|
669
|
-
-
|
|
670
|
-
-
|
|
671
|
-
-
|
|
672
|
-
-
|
|
647
|
+
- `KMS_KEY_ARN` - AWS KMS key ARN (production)
|
|
648
|
+
- `AES_KEY_ID` - AES key ID (development)
|
|
649
|
+
- `AES_KEY` - AES encryption key (development)
|
|
650
|
+
- `STAGE` - Environment stage (dev, test, local bypass encryption)
|
|
673
651
|
|
|
674
652
|
### Optional
|
|
675
653
|
|
|
676
|
-
-
|
|
677
|
-
-
|
|
678
|
-
-
|
|
654
|
+
- `SECRET_ARN` - AWS Secrets Manager ARN for auto-injection
|
|
655
|
+
- `DEBUG` - Debug logging pattern
|
|
656
|
+
- `LOG_LEVEL` - Logging level (debug, info, warn, error)
|
|
679
657
|
|
|
680
658
|
## Version Information
|
|
681
659
|
|
|
682
|
-
-
|
|
683
|
-
-
|
|
684
|
-
-
|
|
660
|
+
- **Current Version**: 2.0.0-next.0 (pre-release)
|
|
661
|
+
- **Node.js**: >=18 required
|
|
662
|
+
- **Dependencies**: See package.json for full list
|
|
685
663
|
|
|
686
664
|
## Support and Documentation
|
|
687
665
|
|
|
688
|
-
-
|
|
689
|
-
-
|
|
690
|
-
-
|
|
691
|
-
-
|
|
666
|
+
- **Main Framework CLAUDE.md**: See root Frigg CLAUDE.md for framework-wide guidance
|
|
667
|
+
- **Core Runtime**: See `core/CLAUDE.md` for Lambda/Worker patterns
|
|
668
|
+
- **Encryption**: See `database/encryption/README.md` for encryption details
|
|
669
|
+
- **Package README**: See `README.md` for API reference
|
|
692
670
|
|
|
693
671
|
## Recent Important Changes
|
|
694
672
|
|
|
@@ -699,15 +677,13 @@ Use test doubles from `@friggframework/test` package for consistent mocking.
|
|
|
699
677
|
**Problem**: The `FieldEncryptionService` was converting objects to the string `"[object Object]"` before encrypting, corrupting JSON fields like `IntegrationMapping.mapping`.
|
|
700
678
|
|
|
701
679
|
**Solution**: Added `_serializeForEncryption()` and `_deserializeAfterDecryption()` methods:
|
|
702
|
-
|
|
703
|
-
-
|
|
704
|
-
-
|
|
705
|
-
- Plain strings work as before
|
|
680
|
+
- Objects are now JSON.stringify'd before encryption
|
|
681
|
+
- Decrypted strings are JSON.parse'd back to objects
|
|
682
|
+
- Plain strings work as before
|
|
706
683
|
|
|
707
684
|
**Files Changed**:
|
|
708
|
-
|
|
709
|
-
-
|
|
710
|
-
- `database/encryption/field-encryption-service.test.js`
|
|
685
|
+
- `database/encryption/field-encryption-service.js`
|
|
686
|
+
- `database/encryption/field-encryption-service.test.js`
|
|
711
687
|
|
|
712
688
|
**Test Coverage**: All 40 tests pass, including new object encryption test.
|
|
713
689
|
|