n8n 2.16.0 → 2.17.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/README.md +1 -1
- package/dist/active-workflow-manager.d.ts +3 -1
- package/dist/active-workflow-manager.js +37 -4
- package/dist/active-workflow-manager.js.map +1 -1
- package/dist/auth/auth.service.d.ts +5 -2
- package/dist/auth/auth.service.js +10 -6
- package/dist/auth/auth.service.js.map +1 -1
- package/dist/build.tsbuildinfo +1 -1
- package/dist/commands/base-command.js +8 -2
- package/dist/commands/base-command.js.map +1 -1
- package/dist/commands/start.d.ts +1 -0
- package/dist/commands/start.js +7 -0
- package/dist/commands/start.js.map +1 -1
- package/dist/constants.d.ts +2 -0
- package/dist/constants.js +5 -1
- package/dist/constants.js.map +1 -1
- package/dist/controllers/ai.controller.d.ts +11 -2
- package/dist/controllers/ai.controller.js +54 -2
- package/dist/controllers/ai.controller.js.map +1 -1
- package/dist/controllers/auth.controller.js +1 -1
- package/dist/controllers/auth.controller.js.map +1 -1
- package/dist/controllers/e2e.controller.js +3 -0
- package/dist/controllers/e2e.controller.js.map +1 -1
- package/dist/controllers/me.controller.d.ts +1 -0
- package/dist/controllers/me.controller.js +12 -0
- package/dist/controllers/me.controller.js.map +1 -1
- package/dist/controllers/project.controller.d.ts +3 -1
- package/dist/controllers/project.controller.js +9 -2
- package/dist/controllers/project.controller.js.map +1 -1
- package/dist/controllers/role.controller.d.ts +6 -4
- package/dist/controllers/role.controller.js +28 -8
- package/dist/controllers/role.controller.js.map +1 -1
- package/dist/controllers/users.controller.d.ts +4 -1
- package/dist/controllers/users.controller.js +8 -2
- package/dist/controllers/users.controller.js.map +1 -1
- package/dist/credentials/credentials.controller.js +3 -0
- package/dist/credentials/credentials.controller.js.map +1 -1
- package/dist/credentials/credentials.service.d.ts +3 -2
- package/dist/credentials/credentials.service.js +21 -10
- package/dist/credentials/credentials.service.js.map +1 -1
- package/dist/credentials/validation.js +2 -2
- package/dist/credentials/validation.js.map +1 -1
- package/dist/credentials-helper.d.ts +3 -1
- package/dist/credentials-helper.js +14 -2
- package/dist/credentials-helper.js.map +1 -1
- package/dist/eventbus/event-message-classes/index.d.ts +2 -2
- package/dist/eventbus/event-message-classes/index.js +7 -0
- package/dist/eventbus/event-message-classes/index.js.map +1 -1
- package/dist/events/maps/relay.event-map.d.ts +92 -0
- package/dist/events/relays/log-streaming.event-relay.d.ts +7 -0
- package/dist/events/relays/log-streaming.event-relay.js +87 -2
- package/dist/events/relays/log-streaming.event-relay.js.map +1 -1
- package/dist/events/relays/telemetry.event-relay.d.ts +5 -0
- package/dist/events/relays/telemetry.event-relay.js +58 -5
- package/dist/events/relays/telemetry.event-relay.js.map +1 -1
- package/dist/execution-lifecycle/execution-lifecycle-hooks.d.ts +1 -1
- package/dist/execution-lifecycle/execution-lifecycle-hooks.js +22 -9
- package/dist/execution-lifecycle/execution-lifecycle-hooks.js.map +1 -1
- package/dist/instance-settings-loader/instance-settings-loader.service.d.ts +9 -0
- package/dist/instance-settings-loader/instance-settings-loader.service.js +36 -0
- package/dist/instance-settings-loader/instance-settings-loader.service.js.map +1 -0
- package/dist/instance-settings-loader/loaders/owner.instance-settings-loader.d.ts +10 -0
- package/dist/instance-settings-loader/loaders/owner.instance-settings-loader.js +72 -0
- package/dist/instance-settings-loader/loaders/owner.instance-settings-loader.js.map +1 -0
- package/dist/modules/chat-hub/stream-capturer.js +3 -0
- package/dist/modules/chat-hub/stream-capturer.js.map +1 -1
- package/dist/modules/dynamic-credentials.ee/credential-resolvers/identifiers/oauth2-introspection-identifier.d.ts +2 -2
- package/dist/modules/external-secrets.ee/external-secrets-settings.controller.ee.d.ts +5 -2
- package/dist/modules/external-secrets.ee/external-secrets-settings.controller.ee.js +10 -3
- package/dist/modules/external-secrets.ee/external-secrets-settings.controller.ee.js.map +1 -1
- package/dist/modules/external-secrets.ee/secrets-providers-connections.controller.ee.js +5 -5
- package/dist/modules/external-secrets.ee/secrets-providers-connections.controller.ee.js.map +1 -1
- package/dist/modules/external-secrets.ee/secrets-providers-connections.service.ee.d.ts +6 -6
- package/dist/modules/external-secrets.ee/secrets-providers-connections.service.ee.js +14 -9
- package/dist/modules/external-secrets.ee/secrets-providers-connections.service.ee.js.map +1 -1
- package/dist/modules/external-secrets.ee/secrets-providers-project.controller.ee.js +3 -3
- package/dist/modules/external-secrets.ee/secrets-providers-project.controller.ee.js.map +1 -1
- package/dist/modules/instance-ai/eval/api-docs.d.ts +1 -0
- package/dist/modules/instance-ai/eval/api-docs.js +78 -0
- package/dist/modules/instance-ai/eval/api-docs.js.map +1 -0
- package/dist/modules/instance-ai/eval/execution.service.d.ts +25 -0
- package/dist/modules/instance-ai/eval/execution.service.js +291 -0
- package/dist/modules/instance-ai/eval/execution.service.js.map +1 -0
- package/dist/modules/instance-ai/eval/mock-handler.d.ts +9 -0
- package/dist/modules/instance-ai/eval/mock-handler.js +264 -0
- package/dist/modules/instance-ai/eval/mock-handler.js.map +1 -0
- package/dist/modules/instance-ai/eval/node-config.d.ts +2 -0
- package/dist/modules/instance-ai/eval/node-config.js +15 -0
- package/dist/modules/instance-ai/eval/node-config.js.map +1 -0
- package/dist/modules/instance-ai/eval/pin-data-generator.d.ts +12 -0
- package/dist/modules/instance-ai/eval/pin-data-generator.js +301 -0
- package/dist/modules/instance-ai/eval/pin-data-generator.js.map +1 -0
- package/dist/modules/instance-ai/eval/request-sanitizer.d.ts +3 -0
- package/dist/modules/instance-ai/eval/request-sanitizer.js +50 -0
- package/dist/modules/instance-ai/eval/request-sanitizer.js.map +1 -0
- package/dist/modules/instance-ai/eval/workflow-analysis.d.ts +16 -0
- package/dist/modules/instance-ai/eval/workflow-analysis.js +217 -0
- package/dist/modules/instance-ai/eval/workflow-analysis.js.map +1 -0
- package/dist/modules/instance-ai/filesystem/index.d.ts +0 -1
- package/dist/modules/instance-ai/filesystem/index.js +1 -3
- package/dist/modules/instance-ai/filesystem/index.js.map +1 -1
- package/dist/modules/instance-ai/filesystem/local-gateway.js +1 -1
- package/dist/modules/instance-ai/instance-ai-memory.service.d.ts +11 -7
- package/dist/modules/instance-ai/instance-ai-memory.service.js +21 -41
- package/dist/modules/instance-ai/instance-ai-memory.service.js.map +1 -1
- package/dist/modules/instance-ai/instance-ai-settings.service.d.ts +4 -0
- package/dist/modules/instance-ai/instance-ai-settings.service.js +26 -6
- package/dist/modules/instance-ai/instance-ai-settings.service.js.map +1 -1
- package/dist/modules/instance-ai/instance-ai.adapter.service.d.ts +8 -3
- package/dist/modules/instance-ai/instance-ai.adapter.service.js +189 -35
- package/dist/modules/instance-ai/instance-ai.adapter.service.js.map +1 -1
- package/dist/modules/instance-ai/instance-ai.controller.d.ts +10 -11
- package/dist/modules/instance-ai/instance-ai.controller.js +101 -44
- package/dist/modules/instance-ai/instance-ai.controller.js.map +1 -1
- package/dist/modules/instance-ai/instance-ai.module.d.ts +1 -2
- package/dist/modules/instance-ai/instance-ai.module.js +4 -5
- package/dist/modules/instance-ai/instance-ai.module.js.map +1 -1
- package/dist/modules/instance-ai/instance-ai.service.d.ts +9 -8
- package/dist/modules/instance-ai/instance-ai.service.js +189 -61
- package/dist/modules/instance-ai/instance-ai.service.js.map +1 -1
- package/dist/modules/instance-ai/internal-messages.js +1 -1
- package/dist/modules/instance-ai/internal-messages.js.map +1 -1
- package/dist/modules/instance-ai/proxy-token-manager.d.ts +15 -0
- package/dist/modules/instance-ai/proxy-token-manager.js +64 -0
- package/dist/modules/instance-ai/proxy-token-manager.js.map +1 -0
- package/dist/modules/instance-ai/snapshot-pruning.service.d.ts +4 -1
- package/dist/modules/instance-ai/snapshot-pruning.service.js +18 -6
- package/dist/modules/instance-ai/snapshot-pruning.service.js.map +1 -1
- package/dist/modules/instance-ai/storage/db-snapshot-storage.d.ts +4 -0
- package/dist/modules/instance-ai/storage/db-snapshot-storage.js +25 -0
- package/dist/modules/instance-ai/storage/db-snapshot-storage.js.map +1 -1
- package/dist/modules/instance-ai/storage/typeorm-memory-storage.js +1 -1
- package/dist/modules/instance-ai/storage/typeorm-memory-storage.js.map +1 -1
- package/dist/modules/instance-ai/web-research/brave-search.d.ts +1 -1
- package/dist/modules/instance-ai/web-research/brave-search.js +2 -1
- package/dist/modules/instance-ai/web-research/brave-search.js.map +1 -1
- package/dist/modules/instance-version-history/database/entities/instance-version-history.entity.d.ts +7 -0
- package/dist/modules/instance-version-history/database/entities/instance-version-history.entity.js +37 -0
- package/dist/modules/instance-version-history/database/entities/instance-version-history.entity.js.map +1 -0
- package/dist/modules/instance-version-history/database/repositories/instance-version-history.repository.d.ts +5 -0
- package/dist/modules/instance-version-history/database/repositories/instance-version-history.repository.js +26 -0
- package/dist/modules/instance-version-history/database/repositories/instance-version-history.repository.js.map +1 -0
- package/dist/modules/instance-version-history/instance-version-history.controller.d.ts +26 -0
- package/dist/modules/instance-version-history/instance-version-history.controller.js +85 -0
- package/dist/modules/instance-version-history/instance-version-history.controller.js.map +1 -0
- package/dist/modules/instance-version-history/instance-version-history.module.d.ts +5 -0
- package/dist/modules/instance-version-history/instance-version-history.module.js +60 -0
- package/dist/modules/instance-version-history/instance-version-history.module.js.map +1 -0
- package/dist/modules/instance-version-history/instance-version-history.service.d.ts +18 -0
- package/dist/modules/instance-version-history/instance-version-history.service.js +120 -0
- package/dist/modules/instance-version-history/instance-version-history.service.js.map +1 -0
- package/dist/modules/instance-version-history/instance-version-history.types.d.ts +12 -0
- package/dist/modules/instance-version-history/instance-version-history.types.js +27 -0
- package/dist/modules/instance-version-history/instance-version-history.types.js.map +1 -0
- package/dist/modules/provisioning.ee/provisioning.service.ee.d.ts +5 -2
- package/dist/modules/provisioning.ee/provisioning.service.ee.js +55 -11
- package/dist/modules/provisioning.ee/provisioning.service.ee.js.map +1 -1
- package/dist/modules/provisioning.ee/role-mapping-rule.controller.ee.d.ts +7 -5
- package/dist/modules/provisioning.ee/role-mapping-rule.controller.ee.js +40 -10
- package/dist/modules/provisioning.ee/role-mapping-rule.controller.ee.js.map +1 -1
- package/dist/modules/provisioning.ee/role-mapping-rule.service.ee.d.ts +3 -1
- package/dist/modules/provisioning.ee/role-mapping-rule.service.ee.js +1 -0
- package/dist/modules/provisioning.ee/role-mapping-rule.service.ee.js.map +1 -1
- package/dist/modules/provisioning.ee/role-resolver-types.d.ts +14 -2
- package/dist/modules/provisioning.ee/role-resolver.service.ee.js +16 -6
- package/dist/modules/provisioning.ee/role-resolver.service.ee.js.map +1 -1
- package/dist/modules/source-control.ee/source-control-context.factory.d.ts +12 -0
- package/dist/modules/source-control.ee/source-control-context.factory.js +112 -0
- package/dist/modules/source-control.ee/source-control-context.factory.js.map +1 -0
- package/dist/modules/source-control.ee/source-control-export.service.ee.d.ts +2 -2
- package/dist/modules/source-control.ee/source-control-export.service.ee.js +9 -11
- package/dist/modules/source-control.ee/source-control-export.service.ee.js.map +1 -1
- package/dist/modules/source-control.ee/source-control-git.service.ee.js +3 -3
- package/dist/modules/source-control.ee/source-control-git.service.ee.js.map +1 -1
- package/dist/modules/source-control.ee/source-control-import.service.ee.d.ts +6 -4
- package/dist/modules/source-control.ee/source-control-import.service.ee.js +29 -85
- package/dist/modules/source-control.ee/source-control-import.service.ee.js.map +1 -1
- package/dist/modules/source-control.ee/source-control-scoped.service.d.ts +4 -4
- package/dist/modules/source-control.ee/source-control-scoped.service.js +9 -40
- package/dist/modules/source-control.ee/source-control-scoped.service.js.map +1 -1
- package/dist/modules/source-control.ee/source-control-status.service.ee.d.ts +3 -1
- package/dist/modules/source-control.ee/source-control-status.service.ee.js +99 -59
- package/dist/modules/source-control.ee/source-control-status.service.ee.js.map +1 -1
- package/dist/modules/source-control.ee/source-control.service.ee.d.ts +3 -1
- package/dist/modules/source-control.ee/source-control.service.ee.js +6 -4
- package/dist/modules/source-control.ee/source-control.service.ee.js.map +1 -1
- package/dist/modules/source-control.ee/types/source-control-context.d.ts +12 -4
- package/dist/modules/source-control.ee/types/source-control-context.js +32 -6
- package/dist/modules/source-control.ee/types/source-control-context.js.map +1 -1
- package/dist/modules/sso-saml/saml.controller.ee.d.ts +2 -3
- package/dist/modules/sso-saml/saml.controller.ee.js +3 -15
- package/dist/modules/sso-saml/saml.controller.ee.js.map +1 -1
- package/dist/modules/token-exchange/controllers/embed-auth.controller.d.ts +5 -1
- package/dist/modules/token-exchange/controllers/embed-auth.controller.js +50 -11
- package/dist/modules/token-exchange/controllers/embed-auth.controller.js.map +1 -1
- package/dist/modules/token-exchange/{token-exchange.controller.d.ts → controllers/token-exchange.controller.d.ts} +1 -1
- package/dist/modules/token-exchange/{token-exchange.controller.js → controllers/token-exchange.controller.js} +50 -5
- package/dist/modules/token-exchange/controllers/token-exchange.controller.js.map +1 -0
- package/dist/modules/token-exchange/database/entities/trusted-key-source.entity.d.ts +10 -0
- package/dist/modules/token-exchange/database/entities/trusted-key-source.entity.js +45 -0
- package/dist/modules/token-exchange/database/entities/trusted-key-source.entity.js.map +1 -0
- package/dist/modules/token-exchange/database/entities/trusted-key.entity.d.ts +9 -0
- package/dist/modules/token-exchange/database/entities/trusted-key.entity.js +43 -0
- package/dist/modules/token-exchange/database/entities/trusted-key.entity.js.map +1 -0
- package/dist/modules/token-exchange/database/repositories/trusted-key-source.repository.d.ts +5 -0
- package/dist/modules/token-exchange/database/repositories/trusted-key-source.repository.js +26 -0
- package/dist/modules/token-exchange/database/repositories/trusted-key-source.repository.js.map +1 -0
- package/dist/modules/token-exchange/database/repositories/trusted-key.repository.d.ts +7 -0
- package/dist/modules/token-exchange/database/repositories/trusted-key.repository.js +32 -0
- package/dist/modules/token-exchange/database/repositories/trusted-key.repository.js.map +1 -0
- package/dist/modules/token-exchange/services/identity-resolution.service.d.ts +20 -2
- package/dist/modules/token-exchange/services/identity-resolution.service.js +178 -4
- package/dist/modules/token-exchange/services/identity-resolution.service.js.map +1 -1
- package/dist/modules/token-exchange/services/jti-cleanup.service.js +1 -1
- package/dist/modules/token-exchange/services/jti-cleanup.service.js.map +1 -1
- package/dist/modules/token-exchange/services/jwks-resolver.d.ts +30 -0
- package/dist/modules/token-exchange/services/jwks-resolver.js +190 -0
- package/dist/modules/token-exchange/services/jwks-resolver.js.map +1 -0
- package/dist/modules/token-exchange/services/scoped-jwt.strategy.d.ts +12 -0
- package/dist/modules/token-exchange/services/scoped-jwt.strategy.js +92 -0
- package/dist/modules/token-exchange/services/scoped-jwt.strategy.js.map +1 -0
- package/dist/modules/token-exchange/services/token-exchange.service.d.ts +18 -4
- package/dist/modules/token-exchange/services/token-exchange.service.js +65 -6
- package/dist/modules/token-exchange/services/token-exchange.service.js.map +1 -1
- package/dist/modules/token-exchange/services/trusted-key.service.d.ts +40 -6
- package/dist/modules/token-exchange/services/trusted-key.service.js +374 -32
- package/dist/modules/token-exchange/services/trusted-key.service.js.map +1 -1
- package/dist/modules/token-exchange/token-exchange.config.d.ts +4 -0
- package/dist/modules/token-exchange/token-exchange.config.js +20 -0
- package/dist/modules/token-exchange/token-exchange.config.js.map +1 -1
- package/dist/modules/token-exchange/token-exchange.module.js +7 -2
- package/dist/modules/token-exchange/token-exchange.module.js.map +1 -1
- package/dist/modules/token-exchange/token-exchange.schemas.d.ts +35 -5
- package/dist/modules/token-exchange/token-exchange.schemas.js +16 -7
- package/dist/modules/token-exchange/token-exchange.schemas.js.map +1 -1
- package/dist/modules/token-exchange/token-exchange.types.d.ts +5 -2
- package/dist/modules/token-exchange/token-exchange.types.js +2 -0
- package/dist/modules/token-exchange/token-exchange.types.js.map +1 -1
- package/dist/oauth/oauth.service.d.ts +1 -0
- package/dist/oauth/oauth.service.js +39 -2
- package/dist/oauth/oauth.service.js.map +1 -1
- package/dist/public-api/index.js +32 -4
- package/dist/public-api/index.js.map +1 -1
- package/dist/public-api/types.d.ts +11 -1
- package/dist/public-api/v1/handlers/community-packages/community-packages.handler.d.ts +1 -0
- package/dist/public-api/v1/handlers/community-packages/community-packages.handler.js +5 -5
- package/dist/public-api/v1/handlers/community-packages/community-packages.handler.js.map +1 -1
- package/dist/public-api/v1/handlers/credentials/credentials.handler.js +7 -12
- package/dist/public-api/v1/handlers/credentials/credentials.handler.js.map +1 -1
- package/dist/public-api/v1/handlers/credentials/credentials.service.d.ts +3 -4
- package/dist/public-api/v1/handlers/credentials/credentials.service.js +21 -33
- package/dist/public-api/v1/handlers/credentials/credentials.service.js.map +1 -1
- package/dist/public-api/v1/handlers/data-tables/data-tables.handler.js +5 -5
- package/dist/public-api/v1/handlers/data-tables/data-tables.rows.handler.js +5 -5
- package/dist/public-api/v1/handlers/executions/executions.handler.js +8 -8
- package/dist/public-api/v1/handlers/insights/insights.handler.d.ts +6 -0
- package/dist/public-api/v1/handlers/insights/insights.handler.js +57 -0
- package/dist/public-api/v1/handlers/insights/insights.handler.js.map +1 -0
- package/dist/public-api/v1/handlers/workflows/workflows.handler.js +14 -35
- package/dist/public-api/v1/handlers/workflows/workflows.handler.js.map +1 -1
- package/dist/public-api/v1/handlers/workflows/workflows.service.d.ts +6 -4
- package/dist/public-api/v1/handlers/workflows/workflows.service.js +7 -15
- package/dist/public-api/v1/handlers/workflows/workflows.service.js.map +1 -1
- package/dist/public-api/v1/openapi.yml +322 -7
- package/dist/public-api/v1/shared/middlewares/global.middleware.d.ts +1 -1
- package/dist/public-api/v1/shared/middlewares/global.middleware.js +19 -8
- package/dist/public-api/v1/shared/middlewares/global.middleware.js.map +1 -1
- package/dist/security-audit/risk-reporters/credentials-risk-reporter.d.ts +2 -3
- package/dist/security-audit/risk-reporters/credentials-risk-reporter.js +2 -5
- package/dist/security-audit/risk-reporters/credentials-risk-reporter.js.map +1 -1
- package/dist/services/ai-gateway.service.d.ts +44 -0
- package/dist/services/ai-gateway.service.js +228 -0
- package/dist/services/ai-gateway.service.js.map +1 -0
- package/dist/services/api-key-auth.strategy.d.ts +10 -0
- package/dist/services/api-key-auth.strategy.js +71 -0
- package/dist/services/api-key-auth.strategy.js.map +1 -0
- package/dist/services/frontend.service.js +7 -0
- package/dist/services/frontend.service.js.map +1 -1
- package/dist/services/import.service.d.ts +1 -0
- package/dist/services/import.service.js +25 -2
- package/dist/services/import.service.js.map +1 -1
- package/dist/services/ownership.service.d.ts +4 -1
- package/dist/services/ownership.service.js +11 -5
- package/dist/services/ownership.service.js.map +1 -1
- package/dist/services/project.service.ee.js +1 -1
- package/dist/services/project.service.ee.js.map +1 -1
- package/dist/services/pruning/workflow-history-compaction.service.js +4 -4
- package/dist/services/pruning/workflow-history-compaction.service.js.map +1 -1
- package/dist/services/public-api-key.service.d.ts +6 -13
- package/dist/services/public-api-key.service.js +12 -80
- package/dist/services/public-api-key.service.js.map +1 -1
- package/dist/services/user.service.js +6 -0
- package/dist/services/user.service.js.map +1 -1
- package/dist/utils/validate-redirect-url.d.ts +1 -0
- package/dist/utils/validate-redirect-url.js +17 -0
- package/dist/utils/validate-redirect-url.js.map +1 -0
- package/dist/webhooks/webhook-form-data.js +6 -2
- package/dist/webhooks/webhook-form-data.js.map +1 -1
- package/dist/webhooks/webhook.service.js +19 -4
- package/dist/webhooks/webhook.service.js.map +1 -1
- package/dist/workflow-execute-additional-data.js +2 -0
- package/dist/workflow-execute-additional-data.js.map +1 -1
- package/dist/workflow-helpers.d.ts +1 -0
- package/dist/workflow-helpers.js +21 -0
- package/dist/workflow-helpers.js.map +1 -1
- package/dist/workflow-runner.js +25 -1
- package/dist/workflow-runner.js.map +1 -1
- package/dist/workflows/workflow-creation.service.d.ts +8 -5
- package/dist/workflows/workflow-creation.service.js +36 -17
- package/dist/workflows/workflow-creation.service.js.map +1 -1
- package/dist/workflows/workflow.service.ee.js +4 -1
- package/dist/workflows/workflow.service.ee.js.map +1 -1
- package/dist/workflows/workflow.service.js +4 -1
- package/dist/workflows/workflow.service.js.map +1 -1
- package/dist/workflows/workflows.controller.d.ts +2 -2
- package/package.json +25 -26
- package/dist/modules/instance-ai/filesystem/local-fs-provider.d.ts +0 -26
- package/dist/modules/instance-ai/filesystem/local-fs-provider.js +0 -321
- package/dist/modules/instance-ai/filesystem/local-fs-provider.js.map +0 -1
- package/dist/modules/token-exchange/token-exchange.controller.js.map +0 -1
- package/dist/modules/token-exchange/token-exchange.service.d.ts +0 -9
- package/dist/modules/token-exchange/token-exchange.service.js +0 -66
- package/dist/modules/token-exchange/token-exchange.service.js.map +0 -1
|
@@ -1,13 +1,49 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
2
18
|
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
19
|
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
20
|
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
21
|
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
22
|
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
23
|
};
|
|
24
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
25
|
+
var ownKeys = function(o) {
|
|
26
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
27
|
+
var ar = [];
|
|
28
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
29
|
+
return ar;
|
|
30
|
+
};
|
|
31
|
+
return ownKeys(o);
|
|
32
|
+
};
|
|
33
|
+
return function (mod) {
|
|
34
|
+
if (mod && mod.__esModule) return mod;
|
|
35
|
+
var result = {};
|
|
36
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
37
|
+
__setModuleDefault(result, mod);
|
|
38
|
+
return result;
|
|
39
|
+
};
|
|
40
|
+
})();
|
|
8
41
|
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
42
|
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
43
|
};
|
|
44
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
45
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
46
|
+
};
|
|
11
47
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
48
|
exports.InstanceAiAdapterService = void 0;
|
|
13
49
|
exports.truncateResultData = truncateResultData;
|
|
@@ -16,6 +52,8 @@ exports.truncateNodeOutput = truncateNodeOutput;
|
|
|
16
52
|
exports.extractNodeOutput = extractNodeOutput;
|
|
17
53
|
exports.extractExecutionDebugInfo = extractExecutionDebugInfo;
|
|
18
54
|
const node_crypto_1 = require("node:crypto");
|
|
55
|
+
const promises_1 = require("node:fs/promises");
|
|
56
|
+
const node_path_1 = __importDefault(require("node:path"));
|
|
19
57
|
const instance_ai_1 = require("@n8n/instance-ai");
|
|
20
58
|
const config_1 = require("@n8n/config");
|
|
21
59
|
const constants_1 = require("@n8n/constants");
|
|
@@ -28,6 +66,7 @@ const di_1 = require("@n8n/di");
|
|
|
28
66
|
const permissions_1 = require("@n8n/permissions");
|
|
29
67
|
const typeorm_1 = require("@n8n/typeorm");
|
|
30
68
|
const n8n_workflow_1 = require("n8n-workflow");
|
|
69
|
+
const n8n_core_1 = require("n8n-core");
|
|
31
70
|
const active_executions_1 = require("../../active-executions");
|
|
32
71
|
const credentials_finder_service_1 = require("../../credentials/credentials-finder.service");
|
|
33
72
|
const credentials_service_1 = require("../../credentials/credentials.service");
|
|
@@ -48,6 +87,7 @@ const workflow_finder_service_1 = require("../../workflows/workflow-finder.servi
|
|
|
48
87
|
const workflow_history_service_1 = require("../../workflows/workflow-history/workflow-history.service");
|
|
49
88
|
const workflow_service_1 = require("../../workflows/workflow.service");
|
|
50
89
|
const workflow_service_ee_1 = require("../../workflows/workflow.service.ee");
|
|
90
|
+
const telemetry_1 = require("../../telemetry");
|
|
51
91
|
const workflow_runner_1 = require("../../workflow-runner");
|
|
52
92
|
const workflow_execute_additional_data_1 = require("../../workflow-execute-additional-data");
|
|
53
93
|
let InstanceAiAdapterService = class InstanceAiAdapterService {
|
|
@@ -55,14 +95,15 @@ let InstanceAiAdapterService = class InstanceAiAdapterService {
|
|
|
55
95
|
if (this.nodesCache && Date.now() < this.nodesCache.expiresAt) {
|
|
56
96
|
return await this.nodesCache.promise;
|
|
57
97
|
}
|
|
58
|
-
const
|
|
98
|
+
const filePath = node_path_1.default.join(this.instanceSettings.staticCacheDir, 'types/nodes.json');
|
|
99
|
+
const promise = (0, promises_1.readFile)(filePath, 'utf-8').then((json) => (0, n8n_workflow_1.jsonParse)(json));
|
|
59
100
|
this.nodesCache = { promise, expiresAt: Date.now() + this.NODES_CACHE_TTL_MS };
|
|
60
101
|
promise.catch(() => {
|
|
61
102
|
this.nodesCache = null;
|
|
62
103
|
});
|
|
63
104
|
return await promise;
|
|
64
105
|
}
|
|
65
|
-
constructor(logger, globalConfig, workflowService, workflowFinderService, workflowRepository, sharedWorkflowRepository, projectRepository, executionRepository, credentialsService, credentialsFinderService, activeExecutions, workflowRunner, loadNodesAndCredentials, dataTableService, dataTableRepository, dynamicNodeParametersService, folderService, projectService, tagService, sourceControlPreferencesService, settingsService, workflowHistoryService, enterpriseWorkflowService, license, executionPersistence, eventService, roleService) {
|
|
106
|
+
constructor(logger, globalConfig, workflowService, workflowFinderService, workflowRepository, sharedWorkflowRepository, projectRepository, executionRepository, credentialsService, credentialsFinderService, activeExecutions, workflowRunner, loadNodesAndCredentials, instanceSettings, dataTableService, dataTableRepository, dynamicNodeParametersService, folderService, projectService, tagService, sourceControlPreferencesService, settingsService, workflowHistoryService, enterpriseWorkflowService, license, executionPersistence, eventService, roleService, telemetry) {
|
|
66
107
|
this.workflowService = workflowService;
|
|
67
108
|
this.workflowFinderService = workflowFinderService;
|
|
68
109
|
this.workflowRepository = workflowRepository;
|
|
@@ -74,6 +115,7 @@ let InstanceAiAdapterService = class InstanceAiAdapterService {
|
|
|
74
115
|
this.activeExecutions = activeExecutions;
|
|
75
116
|
this.workflowRunner = workflowRunner;
|
|
76
117
|
this.loadNodesAndCredentials = loadNodesAndCredentials;
|
|
118
|
+
this.instanceSettings = instanceSettings;
|
|
77
119
|
this.dataTableService = dataTableService;
|
|
78
120
|
this.dataTableRepository = dataTableRepository;
|
|
79
121
|
this.dynamicNodeParametersService = dynamicNodeParametersService;
|
|
@@ -88,6 +130,7 @@ let InstanceAiAdapterService = class InstanceAiAdapterService {
|
|
|
88
130
|
this.executionPersistence = executionPersistence;
|
|
89
131
|
this.eventService = eventService;
|
|
90
132
|
this.roleService = roleService;
|
|
133
|
+
this.telemetry = telemetry;
|
|
91
134
|
this.nodesCache = null;
|
|
92
135
|
this.NODES_CACHE_TTL_MS = 5 * 60 * 1000;
|
|
93
136
|
this.webResearchCache = new web_research_1.LRUCache({
|
|
@@ -102,18 +145,17 @@ let InstanceAiAdapterService = class InstanceAiAdapterService {
|
|
|
102
145
|
this.allowSendingParameterValues = globalConfig.ai.allowSendingParameterValues;
|
|
103
146
|
}
|
|
104
147
|
createContext(user, options) {
|
|
105
|
-
const {
|
|
148
|
+
const { searchProxyConfig, pushRef, threadId } = options ?? {};
|
|
106
149
|
return {
|
|
107
150
|
userId: user.id,
|
|
108
|
-
workflowService: this.createWorkflowAdapter(user),
|
|
109
|
-
executionService: this.createExecutionAdapter(user, pushRef),
|
|
151
|
+
workflowService: this.createWorkflowAdapter(user, threadId),
|
|
152
|
+
executionService: this.createExecutionAdapter(user, pushRef, threadId),
|
|
110
153
|
credentialService: this.createCredentialAdapter(user),
|
|
111
154
|
nodeService: this.createNodeAdapter(user),
|
|
112
155
|
dataTableService: this.createDataTableAdapter(user),
|
|
113
156
|
webResearchService: this.createWebResearchAdapter(user, searchProxyConfig),
|
|
114
157
|
workspaceService: this.createWorkspaceAdapter(user),
|
|
115
158
|
licenseHints: this.buildLicenseHints(),
|
|
116
|
-
...(filesystemService ? { filesystemService } : {}),
|
|
117
159
|
};
|
|
118
160
|
}
|
|
119
161
|
buildLicenseHints() {
|
|
@@ -126,6 +168,11 @@ let InstanceAiAdapterService = class InstanceAiAdapterService {
|
|
|
126
168
|
}
|
|
127
169
|
return hints;
|
|
128
170
|
}
|
|
171
|
+
assertInstanceNotReadOnly(resourceType) {
|
|
172
|
+
if (this.sourceControlPreferencesService.getPreferences().branchReadOnly) {
|
|
173
|
+
throw new Error(`Cannot modify ${resourceType} on a protected instance. This instance is in read-only mode.`);
|
|
174
|
+
}
|
|
175
|
+
}
|
|
129
176
|
createProjectScopeHelpers(user) {
|
|
130
177
|
const { projectRepository } = this;
|
|
131
178
|
let personalProjectIdPromise = null;
|
|
@@ -148,8 +195,9 @@ let InstanceAiAdapterService = class InstanceAiAdapterService {
|
|
|
148
195
|
};
|
|
149
196
|
return { getPersonalProjectId, assertProjectScope, resolveProjectId };
|
|
150
197
|
}
|
|
151
|
-
createWorkflowAdapter(user) {
|
|
152
|
-
const { workflowService, workflowFinderService, workflowRepository, sharedWorkflowRepository, workflowHistoryService, enterpriseWorkflowService, license, allowSendingParameterValues, } = this;
|
|
198
|
+
createWorkflowAdapter(user, threadId) {
|
|
199
|
+
const { workflowService, workflowFinderService, workflowRepository, sharedWorkflowRepository, workflowHistoryService, enterpriseWorkflowService, license, allowSendingParameterValues, telemetry, } = this;
|
|
200
|
+
const assertNotReadOnly = () => this.assertInstanceNotReadOnly('workflows');
|
|
153
201
|
const { resolveProjectId } = this.createProjectScopeHelpers(user);
|
|
154
202
|
const redactParameters = !allowSendingParameterValues;
|
|
155
203
|
return {
|
|
@@ -182,9 +230,11 @@ let InstanceAiAdapterService = class InstanceAiAdapterService {
|
|
|
182
230
|
return toWorkflowDetail(workflow, { redactParameters });
|
|
183
231
|
},
|
|
184
232
|
async archive(workflowId) {
|
|
233
|
+
assertNotReadOnly();
|
|
185
234
|
await workflowService.archive(user, workflowId, { skipArchived: true });
|
|
186
235
|
},
|
|
187
236
|
async delete(workflowId) {
|
|
237
|
+
assertNotReadOnly();
|
|
188
238
|
await workflowService.delete(user, workflowId);
|
|
189
239
|
},
|
|
190
240
|
async publish(workflowId, options) {
|
|
@@ -196,6 +246,12 @@ let InstanceAiAdapterService = class InstanceAiAdapterService {
|
|
|
196
246
|
if (!wf.activeVersionId) {
|
|
197
247
|
throw new Error(`Workflow ${workflowId} was not activated — no active version set`);
|
|
198
248
|
}
|
|
249
|
+
if (threadId) {
|
|
250
|
+
telemetry.track('Builder published workflow', {
|
|
251
|
+
thread_id: threadId,
|
|
252
|
+
executed_by: 'ai',
|
|
253
|
+
});
|
|
254
|
+
}
|
|
199
255
|
return { activeVersionId: wf.activeVersionId };
|
|
200
256
|
},
|
|
201
257
|
async unpublish(workflowId) {
|
|
@@ -210,6 +266,7 @@ let InstanceAiAdapterService = class InstanceAiAdapterService {
|
|
|
210
266
|
return toWorkflowJSON(wf, { redactParameters });
|
|
211
267
|
},
|
|
212
268
|
async createFromWorkflowJSON(json, options) {
|
|
269
|
+
assertNotReadOnly();
|
|
213
270
|
const projectId = await resolveProjectId(['workflow:create'], options?.projectId);
|
|
214
271
|
const settings = (json.settings ?? {});
|
|
215
272
|
if (settings.redactionPolicy !== undefined) {
|
|
@@ -243,9 +300,16 @@ let InstanceAiAdapterService = class InstanceAiAdapterService {
|
|
|
243
300
|
updateData = await enterpriseWorkflowService.preventTampering(updateData, saved.id, user);
|
|
244
301
|
}
|
|
245
302
|
const updated = await workflowService.update(user, updateData, saved.id);
|
|
303
|
+
if (threadId) {
|
|
304
|
+
telemetry.track('Builder created workflow', {
|
|
305
|
+
thread_id: threadId,
|
|
306
|
+
workflow_id: updated.id,
|
|
307
|
+
});
|
|
308
|
+
}
|
|
246
309
|
return toWorkflowDetail(updated, { redactParameters });
|
|
247
310
|
},
|
|
248
311
|
async updateFromWorkflowJSON(workflowId, json, _options) {
|
|
312
|
+
assertNotReadOnly();
|
|
249
313
|
const settings = (json.settings ?? {});
|
|
250
314
|
if (settings.redactionPolicy !== undefined) {
|
|
251
315
|
const canUpdateRedaction = await (0, check_access_1.userHasScopes)(user, ['workflow:updateRedactionSetting'], false, { workflowId });
|
|
@@ -264,6 +328,12 @@ let InstanceAiAdapterService = class InstanceAiAdapterService {
|
|
|
264
328
|
updateData = await enterpriseWorkflowService.preventTampering(updateData, workflowId, user);
|
|
265
329
|
}
|
|
266
330
|
const updated = await workflowService.update(user, updateData, workflowId);
|
|
331
|
+
if (threadId) {
|
|
332
|
+
telemetry.track('Builder modified workflow', {
|
|
333
|
+
thread_id: threadId,
|
|
334
|
+
workflow_id: workflowId,
|
|
335
|
+
});
|
|
336
|
+
}
|
|
267
337
|
return toWorkflowDetail(updated, { redactParameters });
|
|
268
338
|
},
|
|
269
339
|
async listVersions(workflowId, options) {
|
|
@@ -328,8 +398,9 @@ let InstanceAiAdapterService = class InstanceAiAdapterService {
|
|
|
328
398
|
: {}),
|
|
329
399
|
};
|
|
330
400
|
}
|
|
331
|
-
createExecutionAdapter(user, pushRef) {
|
|
332
|
-
const { workflowFinderService, workflowRunner, activeExecutions, executionRepository, allowSendingParameterValues, license, roleService, } = this;
|
|
401
|
+
createExecutionAdapter(user, pushRef, threadId) {
|
|
402
|
+
const { workflowFinderService, workflowRunner, activeExecutions, executionRepository, allowSendingParameterValues, license, roleService, telemetry, } = this;
|
|
403
|
+
const assertNotReadOnly = () => this.assertInstanceNotReadOnly('executions');
|
|
333
404
|
const DEFAULT_TIMEOUT_MS = 5 * constants_1.Time.minutes.toMilliseconds;
|
|
334
405
|
const MAX_TIMEOUT_MS = 10 * constants_1.Time.minutes.toMilliseconds;
|
|
335
406
|
const assertExecutionAccess = async (executionId, scopes = ['workflow:read']) => {
|
|
@@ -385,6 +456,7 @@ let InstanceAiAdapterService = class InstanceAiAdapterService {
|
|
|
385
456
|
}));
|
|
386
457
|
},
|
|
387
458
|
async run(workflowId, inputData, options) {
|
|
459
|
+
assertNotReadOnly();
|
|
388
460
|
const workflow = await workflowFinderService.findWorkflowForUser(workflowId, user, [
|
|
389
461
|
'workflow:execute',
|
|
390
462
|
]);
|
|
@@ -473,6 +545,14 @@ let InstanceAiAdapterService = class InstanceAiAdapterService {
|
|
|
473
545
|
throw error;
|
|
474
546
|
}
|
|
475
547
|
}
|
|
548
|
+
if (threadId) {
|
|
549
|
+
telemetry.track('Builder executed workflow', {
|
|
550
|
+
thread_id: threadId,
|
|
551
|
+
executed_by: 'ai',
|
|
552
|
+
pinned_node_count: Object.keys(runData.pinData ?? {}).length,
|
|
553
|
+
exec_type: runData.executionMode,
|
|
554
|
+
});
|
|
555
|
+
}
|
|
476
556
|
return await extractExecutionResult(executionRepository, executionId, allowSendingParameterValues);
|
|
477
557
|
},
|
|
478
558
|
async getStatus(executionId) {
|
|
@@ -491,6 +571,7 @@ let InstanceAiAdapterService = class InstanceAiAdapterService {
|
|
|
491
571
|
return await extractExecutionResult(executionRepository, executionId, allowSendingParameterValues);
|
|
492
572
|
},
|
|
493
573
|
async stop(executionId) {
|
|
574
|
+
assertNotReadOnly();
|
|
494
575
|
await assertExecutionAccess(executionId, ['workflow:execute']);
|
|
495
576
|
if (!activeExecutions.has(executionId)) {
|
|
496
577
|
return {
|
|
@@ -541,8 +622,6 @@ let InstanceAiAdapterService = class InstanceAiAdapterService {
|
|
|
541
622
|
id: c.id,
|
|
542
623
|
name: c.name,
|
|
543
624
|
type: c.type,
|
|
544
|
-
createdAt: c.createdAt.toISOString(),
|
|
545
|
-
updatedAt: c.updatedAt.toISOString(),
|
|
546
625
|
}));
|
|
547
626
|
},
|
|
548
627
|
async get(credentialId) {
|
|
@@ -551,8 +630,6 @@ let InstanceAiAdapterService = class InstanceAiAdapterService {
|
|
|
551
630
|
id: credential.id,
|
|
552
631
|
name: credential.name,
|
|
553
632
|
type: credential.type,
|
|
554
|
-
createdAt: credential.createdAt.toISOString(),
|
|
555
|
-
updatedAt: credential.updatedAt.toISOString(),
|
|
556
633
|
};
|
|
557
634
|
},
|
|
558
635
|
async delete(credentialId) {
|
|
@@ -686,15 +763,54 @@ let InstanceAiAdapterService = class InstanceAiAdapterService {
|
|
|
686
763
|
}
|
|
687
764
|
return results;
|
|
688
765
|
},
|
|
766
|
+
async getAccountContext(credentialId) {
|
|
767
|
+
const credential = await credentialsFinderService.findCredentialForUser(credentialId, user, ['credential:read']);
|
|
768
|
+
if (!credential) {
|
|
769
|
+
return { accountIdentifier: undefined };
|
|
770
|
+
}
|
|
771
|
+
const mask = (id) => {
|
|
772
|
+
const atIdx = id.indexOf('@');
|
|
773
|
+
if (atIdx > 0) {
|
|
774
|
+
const local = id.slice(0, atIdx);
|
|
775
|
+
const domain = id.slice(atIdx);
|
|
776
|
+
const keep = Math.min(2, local.length);
|
|
777
|
+
return local.slice(0, keep) + '***' + domain;
|
|
778
|
+
}
|
|
779
|
+
if (id.length <= 3)
|
|
780
|
+
return id;
|
|
781
|
+
return id.slice(0, 2) + '***' + id.slice(-1);
|
|
782
|
+
};
|
|
783
|
+
try {
|
|
784
|
+
const redacted = credentialsService.decrypt(credential, false);
|
|
785
|
+
if (typeof redacted.accountIdentifier === 'string' && redacted.accountIdentifier) {
|
|
786
|
+
return { accountIdentifier: mask(redacted.accountIdentifier) };
|
|
787
|
+
}
|
|
788
|
+
for (const key of ['email', 'user', 'username', 'account', 'serviceAccountEmail']) {
|
|
789
|
+
const value = redacted[key];
|
|
790
|
+
if (typeof value === 'string' && value) {
|
|
791
|
+
return { accountIdentifier: mask(value) };
|
|
792
|
+
}
|
|
793
|
+
}
|
|
794
|
+
const raw = credentialsService.decrypt(credential, true);
|
|
795
|
+
const tokenData = raw.oauthTokenData;
|
|
796
|
+
if (tokenData && typeof tokenData === 'object') {
|
|
797
|
+
const { OauthService } = await Promise.resolve().then(() => __importStar(require('../../oauth/oauth.service')));
|
|
798
|
+
const identifier = OauthService.extractAccountIdentifier(tokenData);
|
|
799
|
+
if (identifier) {
|
|
800
|
+
return { accountIdentifier: mask(identifier) };
|
|
801
|
+
}
|
|
802
|
+
}
|
|
803
|
+
return { accountIdentifier: undefined };
|
|
804
|
+
}
|
|
805
|
+
catch {
|
|
806
|
+
return { accountIdentifier: undefined };
|
|
807
|
+
}
|
|
808
|
+
},
|
|
689
809
|
};
|
|
690
810
|
}
|
|
691
811
|
createDataTableAdapter(user) {
|
|
692
|
-
const { dataTableService, dataTableRepository
|
|
693
|
-
const
|
|
694
|
-
if (sourceControlPreferencesService.getPreferences().branchReadOnly) {
|
|
695
|
-
throw new Error('Cannot modify data tables on a protected instance. This instance is in read-only mode.');
|
|
696
|
-
}
|
|
697
|
-
};
|
|
812
|
+
const { dataTableService, dataTableRepository } = this;
|
|
813
|
+
const assertNotReadOnly = () => this.assertInstanceNotReadOnly('data tables');
|
|
698
814
|
const { resolveProjectId } = this.createProjectScopeHelpers(user);
|
|
699
815
|
const resolveProjectIdForTable = async (scopes, dataTableId) => {
|
|
700
816
|
const allowed = await (0, check_access_1.userHasScopes)(user, scopes, false, { dataTableId });
|
|
@@ -704,6 +820,14 @@ let InstanceAiAdapterService = class InstanceAiAdapterService {
|
|
|
704
820
|
const table = await dataTableRepository.findOneByOrFail({ id: dataTableId });
|
|
705
821
|
return table.projectId;
|
|
706
822
|
};
|
|
823
|
+
const resolveTableMeta = async (scopes, dataTableId) => {
|
|
824
|
+
const allowed = await (0, check_access_1.userHasScopes)(user, scopes, false, { dataTableId });
|
|
825
|
+
if (!allowed) {
|
|
826
|
+
throw new Error(`Data table "${dataTableId}" not found`);
|
|
827
|
+
}
|
|
828
|
+
const table = await dataTableRepository.findOneByOrFail({ id: dataTableId });
|
|
829
|
+
return { projectId: table.projectId, tableName: table.name };
|
|
830
|
+
};
|
|
707
831
|
return {
|
|
708
832
|
async list(options) {
|
|
709
833
|
const projectId = await resolveProjectId(['dataTable:listProject'], options?.projectId);
|
|
@@ -720,7 +844,7 @@ let InstanceAiAdapterService = class InstanceAiAdapterService {
|
|
|
720
844
|
}));
|
|
721
845
|
},
|
|
722
846
|
async create(name, columns, options) {
|
|
723
|
-
|
|
847
|
+
assertNotReadOnly();
|
|
724
848
|
const projectId = await resolveProjectId(['dataTable:create'], options?.projectId);
|
|
725
849
|
const result = await dataTableService.createDataTable(projectId, { name, columns });
|
|
726
850
|
return {
|
|
@@ -733,7 +857,7 @@ let InstanceAiAdapterService = class InstanceAiAdapterService {
|
|
|
733
857
|
};
|
|
734
858
|
},
|
|
735
859
|
async delete(dataTableId) {
|
|
736
|
-
|
|
860
|
+
assertNotReadOnly();
|
|
737
861
|
const projectId = await resolveProjectIdForTable(['dataTable:delete'], dataTableId);
|
|
738
862
|
await dataTableService.deleteDataTable(dataTableId, projectId);
|
|
739
863
|
},
|
|
@@ -748,7 +872,7 @@ let InstanceAiAdapterService = class InstanceAiAdapterService {
|
|
|
748
872
|
}));
|
|
749
873
|
},
|
|
750
874
|
async addColumn(dataTableId, column) {
|
|
751
|
-
|
|
875
|
+
assertNotReadOnly();
|
|
752
876
|
const projectId = await resolveProjectIdForTable(['dataTable:update'], dataTableId);
|
|
753
877
|
const result = await dataTableService.addColumn(dataTableId, projectId, column);
|
|
754
878
|
return {
|
|
@@ -759,12 +883,12 @@ let InstanceAiAdapterService = class InstanceAiAdapterService {
|
|
|
759
883
|
};
|
|
760
884
|
},
|
|
761
885
|
async deleteColumn(dataTableId, columnId) {
|
|
762
|
-
|
|
886
|
+
assertNotReadOnly();
|
|
763
887
|
const projectId = await resolveProjectIdForTable(['dataTable:update'], dataTableId);
|
|
764
888
|
await dataTableService.deleteColumn(dataTableId, projectId, columnId);
|
|
765
889
|
},
|
|
766
890
|
async renameColumn(dataTableId, columnId, newName) {
|
|
767
|
-
|
|
891
|
+
assertNotReadOnly();
|
|
768
892
|
const projectId = await resolveProjectIdForTable(['dataTable:update'], dataTableId);
|
|
769
893
|
await dataTableService.renameColumn(dataTableId, projectId, columnId, {
|
|
770
894
|
name: newName,
|
|
@@ -779,22 +903,37 @@ let InstanceAiAdapterService = class InstanceAiAdapterService {
|
|
|
779
903
|
});
|
|
780
904
|
},
|
|
781
905
|
async insertRows(dataTableId, rows) {
|
|
782
|
-
|
|
783
|
-
const projectId = await
|
|
906
|
+
assertNotReadOnly();
|
|
907
|
+
const { projectId, tableName } = await resolveTableMeta(['dataTable:writeRow'], dataTableId);
|
|
784
908
|
const result = await dataTableService.insertRows(dataTableId, projectId, rows, 'count');
|
|
785
|
-
return {
|
|
909
|
+
return {
|
|
910
|
+
insertedCount: typeof result === 'number' ? result : rows.length,
|
|
911
|
+
dataTableId,
|
|
912
|
+
tableName,
|
|
913
|
+
projectId,
|
|
914
|
+
};
|
|
786
915
|
},
|
|
787
916
|
async updateRows(dataTableId, filter, data) {
|
|
788
|
-
|
|
789
|
-
const projectId = await
|
|
917
|
+
assertNotReadOnly();
|
|
918
|
+
const { projectId, tableName } = await resolveTableMeta(['dataTable:writeRow'], dataTableId);
|
|
790
919
|
const result = await dataTableService.updateRows(dataTableId, projectId, { filter: filter, data: data }, true);
|
|
791
|
-
return {
|
|
920
|
+
return {
|
|
921
|
+
updatedCount: Array.isArray(result) ? result.length : 0,
|
|
922
|
+
dataTableId,
|
|
923
|
+
tableName,
|
|
924
|
+
projectId,
|
|
925
|
+
};
|
|
792
926
|
},
|
|
793
927
|
async deleteRows(dataTableId, filter) {
|
|
794
|
-
|
|
795
|
-
const projectId = await
|
|
928
|
+
assertNotReadOnly();
|
|
929
|
+
const { projectId, tableName } = await resolveTableMeta(['dataTable:writeRow'], dataTableId);
|
|
796
930
|
const result = await dataTableService.deleteRows(dataTableId, projectId, { filter: filter }, true);
|
|
797
|
-
return {
|
|
931
|
+
return {
|
|
932
|
+
deletedCount: Array.isArray(result) ? result.length : 0,
|
|
933
|
+
dataTableId,
|
|
934
|
+
tableName,
|
|
935
|
+
projectId,
|
|
936
|
+
};
|
|
798
937
|
},
|
|
799
938
|
};
|
|
800
939
|
}
|
|
@@ -1123,6 +1262,13 @@ let InstanceAiAdapterService = class InstanceAiAdapterService {
|
|
|
1123
1262
|
for (const credType of Object.keys(credentialIssues)) {
|
|
1124
1263
|
credentialTypes.add(credType);
|
|
1125
1264
|
}
|
|
1265
|
+
if (parameters.authentication === 'genericCredentialType' && parameters.genericAuthType) {
|
|
1266
|
+
credentialTypes.add(parameters.genericAuthType);
|
|
1267
|
+
}
|
|
1268
|
+
else if (parameters.authentication === 'predefinedCredentialType' &&
|
|
1269
|
+
parameters.nodeCredentialType) {
|
|
1270
|
+
credentialTypes.add(parameters.nodeCredentialType);
|
|
1271
|
+
}
|
|
1126
1272
|
if (existingCredentials) {
|
|
1127
1273
|
for (const credType of Object.keys(existingCredentials)) {
|
|
1128
1274
|
credentialTypes.add(credType);
|
|
@@ -1204,6 +1350,7 @@ let InstanceAiAdapterService = class InstanceAiAdapterService {
|
|
|
1204
1350
|
}
|
|
1205
1351
|
createWorkspaceAdapter(user) {
|
|
1206
1352
|
const { projectService, folderService, tagService, workflowFinderService, workflowService, executionRepository, executionPersistence, eventService, } = this;
|
|
1353
|
+
const assertNotReadOnly = (resource) => this.assertInstanceNotReadOnly(resource);
|
|
1207
1354
|
const { assertProjectScope } = this.createProjectScopeHelpers(user);
|
|
1208
1355
|
const adapter = {
|
|
1209
1356
|
async getProject(projectId) {
|
|
@@ -1232,6 +1379,7 @@ let InstanceAiAdapterService = class InstanceAiAdapterService {
|
|
|
1232
1379
|
}));
|
|
1233
1380
|
},
|
|
1234
1381
|
async createFolder(name, projectId, parentFolderId) {
|
|
1382
|
+
assertNotReadOnly('folders');
|
|
1235
1383
|
await assertProjectScope(['folder:create'], projectId);
|
|
1236
1384
|
const folder = await folderService.createFolder({ name, parentFolderId: parentFolderId ?? undefined }, projectId);
|
|
1237
1385
|
return {
|
|
@@ -1241,12 +1389,14 @@ let InstanceAiAdapterService = class InstanceAiAdapterService {
|
|
|
1241
1389
|
};
|
|
1242
1390
|
},
|
|
1243
1391
|
async deleteFolder(folderId, projectId, transferToFolderId) {
|
|
1392
|
+
assertNotReadOnly('folders');
|
|
1244
1393
|
await assertProjectScope(['folder:delete'], projectId);
|
|
1245
1394
|
await folderService.deleteFolder(user, folderId, projectId, {
|
|
1246
1395
|
transferToFolderId: transferToFolderId ?? undefined,
|
|
1247
1396
|
});
|
|
1248
1397
|
},
|
|
1249
1398
|
async moveWorkflowToFolder(workflowId, folderId) {
|
|
1399
|
+
assertNotReadOnly('workflows');
|
|
1250
1400
|
const workflow = await workflowFinderService.findWorkflowForUser(workflowId, user, [
|
|
1251
1401
|
'workflow:update',
|
|
1252
1402
|
]);
|
|
@@ -1260,6 +1410,7 @@ let InstanceAiAdapterService = class InstanceAiAdapterService {
|
|
|
1260
1410
|
}
|
|
1261
1411
|
: {}),
|
|
1262
1412
|
async tagWorkflow(workflowId, tagNames) {
|
|
1413
|
+
assertNotReadOnly('workflows');
|
|
1263
1414
|
const workflow = await workflowFinderService.findWorkflowForUser(workflowId, user, [
|
|
1264
1415
|
'workflow:update',
|
|
1265
1416
|
]);
|
|
@@ -1305,6 +1456,7 @@ let InstanceAiAdapterService = class InstanceAiAdapterService {
|
|
|
1305
1456
|
return { id: saved.id, name: saved.name };
|
|
1306
1457
|
},
|
|
1307
1458
|
async cleanupTestExecutions(workflowId, options) {
|
|
1459
|
+
assertNotReadOnly('executions');
|
|
1308
1460
|
const workflow = await workflowFinderService.findWorkflowForUser(workflowId, user, [
|
|
1309
1461
|
'workflow:execute',
|
|
1310
1462
|
]);
|
|
@@ -1363,6 +1515,7 @@ exports.InstanceAiAdapterService = InstanceAiAdapterService = __decorate([
|
|
|
1363
1515
|
active_executions_1.ActiveExecutions,
|
|
1364
1516
|
workflow_runner_1.WorkflowRunner,
|
|
1365
1517
|
load_nodes_and_credentials_1.LoadNodesAndCredentials,
|
|
1518
|
+
n8n_core_1.InstanceSettings,
|
|
1366
1519
|
data_table_service_1.DataTableService,
|
|
1367
1520
|
data_table_repository_1.DataTableRepository,
|
|
1368
1521
|
dynamic_node_parameters_service_1.DynamicNodeParametersService,
|
|
@@ -1376,7 +1529,8 @@ exports.InstanceAiAdapterService = InstanceAiAdapterService = __decorate([
|
|
|
1376
1529
|
license_1.License,
|
|
1377
1530
|
execution_persistence_1.ExecutionPersistence,
|
|
1378
1531
|
event_service_1.EventService,
|
|
1379
|
-
role_service_1.RoleService
|
|
1532
|
+
role_service_1.RoleService,
|
|
1533
|
+
telemetry_1.Telemetry])
|
|
1380
1534
|
], InstanceAiAdapterService);
|
|
1381
1535
|
const MAX_RESULT_CHARS = 20_000;
|
|
1382
1536
|
const MAX_NODE_OUTPUT_CHARS = 1_000;
|