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
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"execution.service.js","sourceRoot":"","sources":["../../../../src/modules/instance-ai/eval/execution.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { EvalLlmMockHandler } from 'n8n-core';
|
|
2
|
+
interface MockHandlerOptions {
|
|
3
|
+
scenarioHints?: string;
|
|
4
|
+
globalContext?: string;
|
|
5
|
+
nodeHints?: Record<string, string>;
|
|
6
|
+
maxRetries?: number;
|
|
7
|
+
}
|
|
8
|
+
export declare function createLlmMockHandler(options?: MockHandlerOptions): EvalLlmMockHandler;
|
|
9
|
+
export {};
|
|
@@ -0,0 +1,264 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createLlmMockHandler = createLlmMockHandler;
|
|
4
|
+
const backend_common_1 = require("@n8n/backend-common");
|
|
5
|
+
const di_1 = require("@n8n/di");
|
|
6
|
+
const n8n_workflow_1 = require("n8n-workflow");
|
|
7
|
+
const zod_1 = require("zod");
|
|
8
|
+
const instance_ai_1 = require("@n8n/instance-ai");
|
|
9
|
+
const api_docs_1 = require("./api-docs");
|
|
10
|
+
const node_config_1 = require("./node-config");
|
|
11
|
+
const request_sanitizer_1 = require("./request-sanitizer");
|
|
12
|
+
const MOCK_SYSTEM_PROMPT = `You are an API mock server generating realistic HTTP responses for n8n workflow evaluation.
|
|
13
|
+
|
|
14
|
+
## Your tools
|
|
15
|
+
|
|
16
|
+
You have two tools. Call them before generating your response:
|
|
17
|
+
|
|
18
|
+
"lookup_api_docs" — Fetches real API documentation for a service endpoint. Use this to learn the correct response STRUCTURE (what fields, what nesting, what types the real API returns). Pay special attention to what the real API returns for the exact HTTP method and URL path you're responding to.
|
|
19
|
+
|
|
20
|
+
"get_node_config" — Returns the n8n node's configuration parameters. This tells you what the node is set up to work with. The configuration contains the values the node expects to find in API responses — resource IDs, field names, column names, etc. Every node type has different parameters, so you need to interpret the config intelligently. Key patterns:
|
|
21
|
+
- Objects with "__rl" are resource selectors — "value" is the selected resource (a document ID, channel, project, etc.)
|
|
22
|
+
- "schema" arrays list the columns/fields the node expects. CRITICAL: use the "id" field as the exact column/field name in your response — NOT "displayName". For example, if schema has {"id": "timestamp", "displayName": "Timestamp"}, the API response must use "timestamp" (lowercase), not "Timestamp"
|
|
23
|
+
- "operation" and "resource" describe what the node does (e.g. "send" a "message", "create" an "issue")
|
|
24
|
+
- Strings starting with "=" are expressions (ignore these) — all other strings are literal values
|
|
25
|
+
|
|
26
|
+
## How to combine them
|
|
27
|
+
|
|
28
|
+
The API docs tell you the response SHAPE. The node config tells you the exact DATA VALUES to put in that shape. All names, IDs, and identifiers from the node config are case-sensitive — use them character-for-character.
|
|
29
|
+
|
|
30
|
+
## Output format
|
|
31
|
+
|
|
32
|
+
Respond with ONLY a JSON object. No explanation, no markdown, no prose.
|
|
33
|
+
|
|
34
|
+
{ "type": "json", "body": { ...realistic API response... } }
|
|
35
|
+
{ "type": "binary", "contentType": "application/pdf", "filename": "doc.pdf" }
|
|
36
|
+
{ "type": "error", "statusCode": 404, "body": { ...service error format... } }
|
|
37
|
+
|
|
38
|
+
## Rules
|
|
39
|
+
|
|
40
|
+
- A node may make MULTIPLE sequential HTTP requests in a single execution (e.g., first GET metadata, then GET headers, then POST data). You are responding to ONE specific request. Match your response to the URL + method of THIS request only. A GET to a metadata endpoint must return metadata — not a write result — even if the node's overall purpose is to write data.
|
|
41
|
+
- Echo request values faithfully. If the request contains an identifier, name, or reference value (even one that looks like a placeholder such as "YOUR_CHAT_ID" or "YOUR_API_KEY"), echo it back exactly in the corresponding response field. The real API would reflect the same value the client sent.
|
|
42
|
+
- Some APIs return empty or minimal responses on success (204 with no body, 202 with empty body). If the API documentation indicates an empty response body, return { "type": "json", "body": {} }. Don't invent additional response fields.
|
|
43
|
+
- No pagination — always indicate end of results (has_more=false, nextPageToken=null, etc.)`;
|
|
44
|
+
const DEFAULT_MAX_RETRIES = 1;
|
|
45
|
+
function createLlmMockHandler(options) {
|
|
46
|
+
const nodeConfigCache = new Map();
|
|
47
|
+
return async (requestOptions, node) => {
|
|
48
|
+
if (!nodeConfigCache.has(node.name)) {
|
|
49
|
+
nodeConfigCache.set(node.name, (0, node_config_1.extractNodeConfig)(node));
|
|
50
|
+
}
|
|
51
|
+
return await generateMockResponse(requestOptions, node, {
|
|
52
|
+
scenarioHints: options?.scenarioHints,
|
|
53
|
+
globalContext: options?.globalContext,
|
|
54
|
+
nodeHint: options?.nodeHints?.[node.name],
|
|
55
|
+
nodeConfig: nodeConfigCache.get(node.name) ?? '',
|
|
56
|
+
maxRetries: options?.maxRetries ?? DEFAULT_MAX_RETRIES,
|
|
57
|
+
});
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
async function generateMockResponse(request, node, context) {
|
|
61
|
+
const serviceName = extractServiceName(request.url);
|
|
62
|
+
const endpoint = extractEndpoint(request.url);
|
|
63
|
+
const sections = [
|
|
64
|
+
'## Request',
|
|
65
|
+
`Service: ${serviceName}`,
|
|
66
|
+
`Node: "${node.name}" (${node.type})`,
|
|
67
|
+
(request.method ?? 'GET') + ' ' + endpoint,
|
|
68
|
+
'Generate the response for this EXACT endpoint and method.',
|
|
69
|
+
];
|
|
70
|
+
if (request.body) {
|
|
71
|
+
const sanitized = (0, request_sanitizer_1.redactSecretKeys)(request.body);
|
|
72
|
+
const serialized = (0, request_sanitizer_1.truncateForLlm)(JSON.stringify(sanitized));
|
|
73
|
+
sections.push(`Body: ${serialized}`);
|
|
74
|
+
}
|
|
75
|
+
if (request.qs && Object.keys(request.qs).length > 0) {
|
|
76
|
+
const sanitizedQs = (0, request_sanitizer_1.redactSecretKeys)(request.qs);
|
|
77
|
+
sections.push(`Query: ${JSON.stringify(sanitizedQs)}`);
|
|
78
|
+
}
|
|
79
|
+
const isGraphQL = endpoint.includes('/graphql') ||
|
|
80
|
+
(typeof request.body === 'object' && request.body !== null && 'query' in request.body);
|
|
81
|
+
if (isGraphQL) {
|
|
82
|
+
sections.push('', '## GraphQL format requirement');
|
|
83
|
+
sections.push('This is a GraphQL endpoint. ALL responses MUST use GraphQL response format:', '- Success: { "data": { ...fields matching the query... } }', '- Error: { "errors": [{ "message": "...", "extensions": { "code": "..." } }], "data": null }', 'Never return flat REST-style error objects.');
|
|
84
|
+
}
|
|
85
|
+
if (context.nodeConfig) {
|
|
86
|
+
sections.push('', '## Node Configuration', context.nodeConfig);
|
|
87
|
+
}
|
|
88
|
+
if (context.globalContext || context.nodeHint || context.scenarioHints) {
|
|
89
|
+
sections.push('', '## Context');
|
|
90
|
+
if (context.globalContext)
|
|
91
|
+
sections.push(`Data: ${context.globalContext}`);
|
|
92
|
+
if (context.nodeHint)
|
|
93
|
+
sections.push(`Hint: ${context.nodeHint}`);
|
|
94
|
+
if (context.scenarioHints) {
|
|
95
|
+
sections.push(`Scenario: ${context.scenarioHints}`);
|
|
96
|
+
sections.push(isGraphQL
|
|
97
|
+
? '(For error scenarios, use GraphQL error format with "data": null. Don\'t use "type": "error" wrapper.)'
|
|
98
|
+
: '(Use "error" type with appropriate statusCode for error scenarios.)');
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
const userPrompt = sections.join('\n');
|
|
102
|
+
const safeUrl = extractEndpoint(request.url);
|
|
103
|
+
let lastError = '';
|
|
104
|
+
for (let attempt = 0; attempt <= context.maxRetries; attempt++) {
|
|
105
|
+
try {
|
|
106
|
+
const spec = await callLlm(userPrompt, context.nodeConfig);
|
|
107
|
+
return materializeSpec(spec);
|
|
108
|
+
}
|
|
109
|
+
catch (error) {
|
|
110
|
+
lastError = error instanceof Error ? error.message : String(error);
|
|
111
|
+
if (attempt < context.maxRetries) {
|
|
112
|
+
di_1.Container.get(backend_common_1.Logger).warn(`[EvalMock] Mock generation failed for ${request.method ?? 'GET'} ${safeUrl}, retrying (${attempt + 1}/${context.maxRetries}): ${lastError}`);
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
di_1.Container.get(backend_common_1.Logger).error(`[EvalMock] Mock generation failed for ${request.method ?? 'GET'} ${safeUrl} after ${context.maxRetries + 1} attempts: ${lastError}`);
|
|
117
|
+
return {
|
|
118
|
+
body: { _evalMockError: true, message: `Mock generation failed: ${lastError}` },
|
|
119
|
+
headers: { 'content-type': 'application/json' },
|
|
120
|
+
statusCode: 200,
|
|
121
|
+
};
|
|
122
|
+
}
|
|
123
|
+
const apiDocsTool = new instance_ai_1.Tool('lookup_api_docs')
|
|
124
|
+
.description('Look up official API documentation for a specific REST endpoint to understand the exact response format.')
|
|
125
|
+
.input(zod_1.z.object({
|
|
126
|
+
serviceName: zod_1.z
|
|
127
|
+
.string()
|
|
128
|
+
.describe('The API service name (e.g. "Google Sheets", "Gmail", "Slack")'),
|
|
129
|
+
endpointDescription: zod_1.z
|
|
130
|
+
.string()
|
|
131
|
+
.describe('Description of the endpoint (e.g. "GET spreadsheets values response format")'),
|
|
132
|
+
}))
|
|
133
|
+
.handler(async (input) => {
|
|
134
|
+
return await (0, api_docs_1.fetchApiDocs)(input.serviceName, input.endpointDescription);
|
|
135
|
+
})
|
|
136
|
+
.build();
|
|
137
|
+
function createNodeConfigTool(nodeConfig) {
|
|
138
|
+
return new instance_ai_1.Tool('get_node_config')
|
|
139
|
+
.description("Get the n8n node's configuration parameters — resource IDs, field names, settings, etc. Your mock data must match these exact values.")
|
|
140
|
+
.input(zod_1.z.object({}))
|
|
141
|
+
.handler(async () => nodeConfig)
|
|
142
|
+
.build();
|
|
143
|
+
}
|
|
144
|
+
async function callLlm(userPrompt, nodeConfig) {
|
|
145
|
+
const agent = (0, instance_ai_1.createEvalAgent)('eval-mock-responder', {
|
|
146
|
+
instructions: MOCK_SYSTEM_PROMPT,
|
|
147
|
+
})
|
|
148
|
+
.tool(apiDocsTool)
|
|
149
|
+
.tool(createNodeConfigTool(nodeConfig));
|
|
150
|
+
const result = await agent.generate(userPrompt);
|
|
151
|
+
const text = (0, instance_ai_1.extractText)(result);
|
|
152
|
+
return parseResponseText(text);
|
|
153
|
+
}
|
|
154
|
+
function parseResponseText(raw) {
|
|
155
|
+
let text = raw.trim();
|
|
156
|
+
const fencedMatch = text.match(/```(?:json)?\s*\n?([\s\S]*?)\n?\s*```/i);
|
|
157
|
+
if (fencedMatch) {
|
|
158
|
+
text = fencedMatch[1].trim();
|
|
159
|
+
}
|
|
160
|
+
text = text
|
|
161
|
+
.replace(/^```(?:json)?\s*\n?/i, '')
|
|
162
|
+
.replace(/\n?\s*```\s*$/i, '')
|
|
163
|
+
.trim();
|
|
164
|
+
if (text.length > 0 && !text.startsWith('{') && !text.startsWith('[')) {
|
|
165
|
+
const extracted = extractJsonObject(text);
|
|
166
|
+
if (extracted) {
|
|
167
|
+
text = extracted;
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
const parsed = (0, n8n_workflow_1.jsonParse)(text);
|
|
171
|
+
if (!parsed.type || !['json', 'binary', 'error'].includes(parsed.type)) {
|
|
172
|
+
return { type: 'json', body: parsed };
|
|
173
|
+
}
|
|
174
|
+
return parsed;
|
|
175
|
+
}
|
|
176
|
+
function materializeSpec(spec) {
|
|
177
|
+
switch (spec.type) {
|
|
178
|
+
case 'json':
|
|
179
|
+
return {
|
|
180
|
+
body: spec.body ?? { ok: true },
|
|
181
|
+
headers: { 'content-type': 'application/json' },
|
|
182
|
+
statusCode: 200,
|
|
183
|
+
};
|
|
184
|
+
case 'binary': {
|
|
185
|
+
const filename = spec.filename ?? 'mock-file.dat';
|
|
186
|
+
const contentType = spec.contentType ?? 'application/octet-stream';
|
|
187
|
+
const content = `[eval-mock] Synthetic file: ${filename} (${contentType})`;
|
|
188
|
+
return {
|
|
189
|
+
body: Buffer.from(content),
|
|
190
|
+
headers: { 'content-type': contentType },
|
|
191
|
+
statusCode: 200,
|
|
192
|
+
};
|
|
193
|
+
}
|
|
194
|
+
case 'error':
|
|
195
|
+
return {
|
|
196
|
+
body: spec.body ?? { error: 'Mock error' },
|
|
197
|
+
headers: { 'content-type': 'application/json' },
|
|
198
|
+
statusCode: spec.statusCode ?? 500,
|
|
199
|
+
};
|
|
200
|
+
default:
|
|
201
|
+
return {
|
|
202
|
+
body: spec.body ?? { ok: true },
|
|
203
|
+
headers: { 'content-type': 'application/json' },
|
|
204
|
+
statusCode: 200,
|
|
205
|
+
};
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
function extractJsonObject(text) {
|
|
209
|
+
const start = text.indexOf('{');
|
|
210
|
+
if (start < 0)
|
|
211
|
+
return undefined;
|
|
212
|
+
let depth = 0;
|
|
213
|
+
let inString = false;
|
|
214
|
+
let escape = false;
|
|
215
|
+
for (let i = start; i < text.length; i++) {
|
|
216
|
+
const ch = text[i];
|
|
217
|
+
if (escape) {
|
|
218
|
+
escape = false;
|
|
219
|
+
continue;
|
|
220
|
+
}
|
|
221
|
+
if (ch === '\\' && inString) {
|
|
222
|
+
escape = true;
|
|
223
|
+
continue;
|
|
224
|
+
}
|
|
225
|
+
if (ch === '"') {
|
|
226
|
+
inString = !inString;
|
|
227
|
+
continue;
|
|
228
|
+
}
|
|
229
|
+
if (inString)
|
|
230
|
+
continue;
|
|
231
|
+
if (ch === '{')
|
|
232
|
+
depth++;
|
|
233
|
+
if (ch === '}') {
|
|
234
|
+
depth--;
|
|
235
|
+
if (depth === 0) {
|
|
236
|
+
return text.slice(start, i + 1);
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
return text.slice(start);
|
|
241
|
+
}
|
|
242
|
+
function extractServiceName(url) {
|
|
243
|
+
try {
|
|
244
|
+
const hostname = new URL(url).hostname;
|
|
245
|
+
const parts = hostname
|
|
246
|
+
.replace(/^api\./, '')
|
|
247
|
+
.replace(/^www\./, '')
|
|
248
|
+
.split('.');
|
|
249
|
+
return parts[0].charAt(0).toUpperCase() + parts[0].slice(1);
|
|
250
|
+
}
|
|
251
|
+
catch {
|
|
252
|
+
return 'Unknown';
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
function extractEndpoint(url) {
|
|
256
|
+
try {
|
|
257
|
+
const parsed = new URL(url);
|
|
258
|
+
return parsed.pathname + (parsed.search ? parsed.search : '');
|
|
259
|
+
}
|
|
260
|
+
catch {
|
|
261
|
+
return url;
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
//# sourceMappingURL=mock-handler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mock-handler.js","sourceRoot":"","sources":["../../../../src/modules/instance-ai/eval/mock-handler.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.extractNodeConfig = extractNodeConfig;
|
|
4
|
+
function extractNodeConfig(node) {
|
|
5
|
+
const params = node.parameters;
|
|
6
|
+
if (!params || typeof params !== 'object')
|
|
7
|
+
return '';
|
|
8
|
+
try {
|
|
9
|
+
return JSON.stringify(params);
|
|
10
|
+
}
|
|
11
|
+
catch {
|
|
12
|
+
return '';
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=node-config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"node-config.js","sourceRoot":"","sources":["../../../../src/modules/instance-ai/eval/node-config.ts"],"names":[],"mappings":";;AAQA,8CASC;AATD,SAAgB,iBAAiB,CAAC,IAAW;IAC5C,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC;IAC/B,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ;QAAE,OAAO,EAAE,CAAC;IAErD,IAAI,CAAC;QACJ,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;IAC/B,CAAC;IAAC,MAAM,CAAC;QACR,OAAO,EAAE,CAAC;IACX,CAAC;AACF,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { WorkflowJSON } from '@n8n/workflow-sdk';
|
|
2
|
+
type PinData = Record<string, Array<Record<string, unknown>>>;
|
|
3
|
+
interface PinDataGenerationInstructions {
|
|
4
|
+
dataDescription: string;
|
|
5
|
+
}
|
|
6
|
+
export interface GeneratePinDataOptions {
|
|
7
|
+
workflow: WorkflowJSON;
|
|
8
|
+
nodeNames: string[];
|
|
9
|
+
instructions?: PinDataGenerationInstructions;
|
|
10
|
+
}
|
|
11
|
+
export declare function generatePinData(options: GeneratePinDataOptions): Promise<PinData>;
|
|
12
|
+
export {};
|
|
@@ -0,0 +1,301 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.generatePinData = generatePinData;
|
|
4
|
+
const fs_1 = require("fs");
|
|
5
|
+
const path_1 = require("path");
|
|
6
|
+
const instance_ai_1 = require("@n8n/instance-ai");
|
|
7
|
+
let _resolvedNodesBasePath;
|
|
8
|
+
function resolveNodesBasePath() {
|
|
9
|
+
if (_resolvedNodesBasePath !== undefined) {
|
|
10
|
+
return _resolvedNodesBasePath ?? undefined;
|
|
11
|
+
}
|
|
12
|
+
let dir = __dirname;
|
|
13
|
+
for (let i = 0; i < 10; i++) {
|
|
14
|
+
const candidate = (0, path_1.join)(dir, 'packages', 'nodes-base', 'nodes');
|
|
15
|
+
if ((0, fs_1.existsSync)(candidate)) {
|
|
16
|
+
_resolvedNodesBasePath = candidate;
|
|
17
|
+
return candidate;
|
|
18
|
+
}
|
|
19
|
+
const parent = (0, path_1.join)(dir, '..');
|
|
20
|
+
if (parent === dir)
|
|
21
|
+
break;
|
|
22
|
+
dir = parent;
|
|
23
|
+
}
|
|
24
|
+
_resolvedNodesBasePath = null;
|
|
25
|
+
return undefined;
|
|
26
|
+
}
|
|
27
|
+
const schemaMapCache = new Map();
|
|
28
|
+
function buildSchemaMap(nodesBasePath) {
|
|
29
|
+
const cached = schemaMapCache.get(nodesBasePath);
|
|
30
|
+
if (cached)
|
|
31
|
+
return cached;
|
|
32
|
+
const result = new Map();
|
|
33
|
+
function scanDir(dir) {
|
|
34
|
+
try {
|
|
35
|
+
for (const entry of (0, fs_1.readdirSync)(dir, { withFileTypes: true })) {
|
|
36
|
+
if (!entry.isDirectory())
|
|
37
|
+
continue;
|
|
38
|
+
const entryPath = (0, path_1.join)(dir, entry.name);
|
|
39
|
+
const schemaDir = (0, path_1.join)(entryPath, '__schema__');
|
|
40
|
+
if ((0, fs_1.existsSync)(schemaDir)) {
|
|
41
|
+
const nodeFiles = (0, fs_1.readdirSync)(entryPath).filter((f) => f.endsWith('.node.ts') || f.endsWith('.node.js'));
|
|
42
|
+
for (const nodeFile of nodeFiles) {
|
|
43
|
+
try {
|
|
44
|
+
const content = (0, fs_1.readFileSync)((0, path_1.join)(entryPath, nodeFile), 'utf-8');
|
|
45
|
+
const nameMatch = content.match(/name:\s*['"]([^'"]+)['"]/);
|
|
46
|
+
if (nameMatch) {
|
|
47
|
+
result.set(`n8n-nodes-base.${nameMatch[1]}`, entryPath);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
catch {
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
scanDir(entryPath);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
catch {
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
scanDir(nodesBasePath);
|
|
61
|
+
schemaMapCache.set(nodesBasePath, result);
|
|
62
|
+
return result;
|
|
63
|
+
}
|
|
64
|
+
function normalizeVersion(version) {
|
|
65
|
+
const str = String(version);
|
|
66
|
+
const parts = str.split('.');
|
|
67
|
+
while (parts.length < 3)
|
|
68
|
+
parts.push('0');
|
|
69
|
+
return parts.join('.');
|
|
70
|
+
}
|
|
71
|
+
function resolveSchemaForNode(nodeType, typeVersion, resource, operation, nodesBasePath) {
|
|
72
|
+
const schemaMap = buildSchemaMap(nodesBasePath);
|
|
73
|
+
const nodeDir = schemaMap.get(nodeType);
|
|
74
|
+
if (!nodeDir)
|
|
75
|
+
return undefined;
|
|
76
|
+
const schemaBaseDir = (0, path_1.join)(nodeDir, '__schema__');
|
|
77
|
+
if (!(0, fs_1.existsSync)(schemaBaseDir))
|
|
78
|
+
return undefined;
|
|
79
|
+
const versionStr = normalizeVersion(typeVersion);
|
|
80
|
+
const versionDirs = [
|
|
81
|
+
`v${versionStr}`,
|
|
82
|
+
...(0, fs_1.readdirSync)(schemaBaseDir)
|
|
83
|
+
.filter((d) => d.startsWith('v'))
|
|
84
|
+
.sort((a, b) => {
|
|
85
|
+
const partsA = a.slice(1).split('.').map(Number);
|
|
86
|
+
const partsB = b.slice(1).split('.').map(Number);
|
|
87
|
+
for (let i = 0; i < Math.max(partsA.length, partsB.length); i++) {
|
|
88
|
+
const diff = (partsB[i] ?? 0) - (partsA[i] ?? 0);
|
|
89
|
+
if (diff !== 0)
|
|
90
|
+
return diff;
|
|
91
|
+
}
|
|
92
|
+
return 0;
|
|
93
|
+
}),
|
|
94
|
+
];
|
|
95
|
+
for (const vDir of [...new Set(versionDirs)]) {
|
|
96
|
+
const versionPath = (0, path_1.join)(schemaBaseDir, vDir);
|
|
97
|
+
if (!(0, fs_1.existsSync)(versionPath))
|
|
98
|
+
continue;
|
|
99
|
+
const parts = [versionPath, resource, operation ? `${operation}.json` : undefined].filter(Boolean);
|
|
100
|
+
const schemaFile = (0, path_1.join)(...parts);
|
|
101
|
+
if ((0, fs_1.existsSync)(schemaFile)) {
|
|
102
|
+
try {
|
|
103
|
+
return JSON.parse((0, fs_1.readFileSync)(schemaFile, 'utf-8'));
|
|
104
|
+
}
|
|
105
|
+
catch {
|
|
106
|
+
return undefined;
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
return undefined;
|
|
111
|
+
}
|
|
112
|
+
function buildSchemaContexts(nodes, nodesBasePath) {
|
|
113
|
+
return nodes.map((node) => {
|
|
114
|
+
const params = node.parameters;
|
|
115
|
+
const resource = typeof params?.resource === 'string' ? params.resource : undefined;
|
|
116
|
+
const operation = typeof params?.operation === 'string' ? params.operation : undefined;
|
|
117
|
+
let schema;
|
|
118
|
+
if (nodesBasePath) {
|
|
119
|
+
schema = resolveSchemaForNode(node.type, node.typeVersion, resource, operation, nodesBasePath);
|
|
120
|
+
}
|
|
121
|
+
return {
|
|
122
|
+
nodeName: node.name ?? node.type,
|
|
123
|
+
nodeType: node.type,
|
|
124
|
+
typeVersion: node.typeVersion,
|
|
125
|
+
resource,
|
|
126
|
+
operation,
|
|
127
|
+
schema,
|
|
128
|
+
};
|
|
129
|
+
});
|
|
130
|
+
}
|
|
131
|
+
function workflowToMermaid(workflow) {
|
|
132
|
+
const lines = ['flowchart LR'];
|
|
133
|
+
const nodeIdMap = new Map();
|
|
134
|
+
workflow.nodes.forEach((node, i) => {
|
|
135
|
+
if (node.name)
|
|
136
|
+
nodeIdMap.set(node.name, `n${String(i)}`);
|
|
137
|
+
});
|
|
138
|
+
for (const node of workflow.nodes) {
|
|
139
|
+
if (!node.name)
|
|
140
|
+
continue;
|
|
141
|
+
const id = nodeIdMap.get(node.name);
|
|
142
|
+
if (!id)
|
|
143
|
+
continue;
|
|
144
|
+
const params = node.parameters;
|
|
145
|
+
const resource = typeof params?.resource === 'string' ? params.resource : undefined;
|
|
146
|
+
const operation = typeof params?.operation === 'string' ? params.operation : undefined;
|
|
147
|
+
const shortType = node.type.split('.').pop() ?? node.type;
|
|
148
|
+
let label = `${node.name} (${shortType} v${String(node.typeVersion)}`;
|
|
149
|
+
if (resource)
|
|
150
|
+
label += `, resource:${resource}`;
|
|
151
|
+
if (operation)
|
|
152
|
+
label += `, op:${operation}`;
|
|
153
|
+
label += ')';
|
|
154
|
+
lines.push(` ${id}["${label}"]`);
|
|
155
|
+
}
|
|
156
|
+
const { connections } = workflow;
|
|
157
|
+
for (const [sourceName, nodeConns] of Object.entries(connections)) {
|
|
158
|
+
const sourceId = nodeIdMap.get(sourceName);
|
|
159
|
+
if (!sourceId)
|
|
160
|
+
continue;
|
|
161
|
+
for (const [, outputConnections] of Object.entries(nodeConns)) {
|
|
162
|
+
if (!Array.isArray(outputConnections))
|
|
163
|
+
continue;
|
|
164
|
+
for (const outputGroup of outputConnections) {
|
|
165
|
+
if (!Array.isArray(outputGroup))
|
|
166
|
+
continue;
|
|
167
|
+
for (const conn of outputGroup) {
|
|
168
|
+
if (typeof conn !== 'object' || conn === null || !('node' in conn))
|
|
169
|
+
continue;
|
|
170
|
+
const targetId = nodeIdMap.get(conn.node);
|
|
171
|
+
if (targetId) {
|
|
172
|
+
lines.push(` ${sourceId} --> ${targetId}`);
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
return lines.join('\n');
|
|
179
|
+
}
|
|
180
|
+
const SYSTEM_PROMPT = `You are a test data generator for n8n workflow automation. Generate realistic mock API response data for service nodes in a workflow.
|
|
181
|
+
|
|
182
|
+
RULES:
|
|
183
|
+
1. Data must be consistent across nodes. If node A creates an entity with id "abc-123", downstream nodes referencing that entity must use "abc-123".
|
|
184
|
+
2. Generate 1-2 items per node.
|
|
185
|
+
3. When a JSON Schema is provided, follow its structure exactly.
|
|
186
|
+
4. When no schema is provided, generate a realistic response based on the node type, resource, and operation.
|
|
187
|
+
5. Use realistic but clearly fake values (e.g., "jane@example.com", "proj_abc123", "2024-01-15T10:30:00Z").
|
|
188
|
+
6. Return ONLY a valid JSON object, no explanation or markdown fencing.
|
|
189
|
+
7. CRITICAL: You MUST generate data for EVERY node listed in "Nodes Requiring Mock Data". Never skip a node, even if the test scenario describes an empty or error response. An empty response is still valid data.`;
|
|
190
|
+
function buildUserPrompt(workflow, contexts, instructions) {
|
|
191
|
+
const mermaid = workflowToMermaid(workflow);
|
|
192
|
+
const sections = ['Generate mock output data for service nodes in this workflow.'];
|
|
193
|
+
if (instructions?.dataDescription) {
|
|
194
|
+
sections.push('');
|
|
195
|
+
sections.push('## Data Generation Instructions');
|
|
196
|
+
sections.push('');
|
|
197
|
+
sections.push(instructions.dataDescription);
|
|
198
|
+
}
|
|
199
|
+
sections.push('');
|
|
200
|
+
sections.push('## Workflow Graph');
|
|
201
|
+
sections.push('');
|
|
202
|
+
sections.push('```mermaid');
|
|
203
|
+
sections.push(mermaid);
|
|
204
|
+
sections.push('```');
|
|
205
|
+
sections.push('');
|
|
206
|
+
sections.push('## Nodes Requiring Mock Data');
|
|
207
|
+
for (const ctx of contexts) {
|
|
208
|
+
sections.push('');
|
|
209
|
+
sections.push(`### ${ctx.nodeName} (${ctx.nodeType} v${String(ctx.typeVersion)})`);
|
|
210
|
+
if (ctx.resource || ctx.operation) {
|
|
211
|
+
const parts = [];
|
|
212
|
+
if (ctx.resource)
|
|
213
|
+
parts.push(`Resource: ${ctx.resource}`);
|
|
214
|
+
if (ctx.operation)
|
|
215
|
+
parts.push(`Operation: ${ctx.operation}`);
|
|
216
|
+
sections.push(`- ${parts.join(' | ')}`);
|
|
217
|
+
}
|
|
218
|
+
if (ctx.schema) {
|
|
219
|
+
const schemaStr = JSON.stringify(ctx.schema, null, 2);
|
|
220
|
+
const truncated = schemaStr.length > 3000 ? schemaStr.slice(0, 3000) + '\n...' : schemaStr;
|
|
221
|
+
sections.push('- Output JSON Schema:');
|
|
222
|
+
sections.push('```json');
|
|
223
|
+
sections.push(truncated);
|
|
224
|
+
sections.push('```');
|
|
225
|
+
}
|
|
226
|
+
else {
|
|
227
|
+
sections.push('(no schema available — generate based on API knowledge)');
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
sections.push('');
|
|
231
|
+
sections.push('## Expected Output Format');
|
|
232
|
+
sections.push('');
|
|
233
|
+
sections.push('Return a JSON object where each key is the exact node name and the value is an array of items, each wrapped in a "json" key:');
|
|
234
|
+
sections.push('');
|
|
235
|
+
sections.push('```json');
|
|
236
|
+
sections.push('{');
|
|
237
|
+
for (let i = 0; i < Math.min(contexts.length, 2); i++) {
|
|
238
|
+
const ctx = contexts[i];
|
|
239
|
+
const comma = i < Math.min(contexts.length, 2) - 1 ? ',' : '';
|
|
240
|
+
sections.push(` "${ctx.nodeName}": [{ "json": { ... } }]${comma}`);
|
|
241
|
+
}
|
|
242
|
+
if (contexts.length > 2) {
|
|
243
|
+
sections.push(' ...');
|
|
244
|
+
}
|
|
245
|
+
sections.push('}');
|
|
246
|
+
sections.push('```');
|
|
247
|
+
return sections.join('\n');
|
|
248
|
+
}
|
|
249
|
+
function parsePinDataResponse(responseText, expectedNodes) {
|
|
250
|
+
let cleaned = responseText.trim();
|
|
251
|
+
if (cleaned.startsWith('```')) {
|
|
252
|
+
cleaned = cleaned.replace(/^```(?:json)?\n?/, '').replace(/\n?```$/, '');
|
|
253
|
+
}
|
|
254
|
+
let parsed;
|
|
255
|
+
try {
|
|
256
|
+
parsed = JSON.parse(cleaned);
|
|
257
|
+
}
|
|
258
|
+
catch {
|
|
259
|
+
return {};
|
|
260
|
+
}
|
|
261
|
+
const pinData = {};
|
|
262
|
+
for (const nodeName of expectedNodes) {
|
|
263
|
+
const nodeData = parsed[nodeName];
|
|
264
|
+
if (!Array.isArray(nodeData) || nodeData.length === 0)
|
|
265
|
+
continue;
|
|
266
|
+
pinData[nodeName] = nodeData.map((item) => {
|
|
267
|
+
if (typeof item === 'object' && item !== null && 'json' in item) {
|
|
268
|
+
return item;
|
|
269
|
+
}
|
|
270
|
+
return { json: item ?? {} };
|
|
271
|
+
});
|
|
272
|
+
}
|
|
273
|
+
return pinData;
|
|
274
|
+
}
|
|
275
|
+
async function generatePinData(options) {
|
|
276
|
+
const { workflow, nodeNames, instructions } = options;
|
|
277
|
+
if (nodeNames.length === 0)
|
|
278
|
+
return {};
|
|
279
|
+
const targetNodes = workflow.nodes.filter((n) => n.name && nodeNames.includes(n.name));
|
|
280
|
+
if (targetNodes.length === 0)
|
|
281
|
+
return {};
|
|
282
|
+
const nodesBasePath = resolveNodesBasePath();
|
|
283
|
+
const contexts = buildSchemaContexts(targetNodes, nodesBasePath);
|
|
284
|
+
const userPrompt = buildUserPrompt(workflow, contexts, instructions);
|
|
285
|
+
const expectedNodeNames = contexts.map((c) => c.nodeName);
|
|
286
|
+
try {
|
|
287
|
+
const agent = (0, instance_ai_1.createEvalAgent)('eval-pin-data-generator', {
|
|
288
|
+
instructions: SYSTEM_PROMPT,
|
|
289
|
+
cache: true,
|
|
290
|
+
});
|
|
291
|
+
const result = await agent.generate(userPrompt, {
|
|
292
|
+
providerOptions: { anthropic: { maxTokens: 16_384 } },
|
|
293
|
+
});
|
|
294
|
+
const responseText = (0, instance_ai_1.extractText)(result);
|
|
295
|
+
return parsePinDataResponse(responseText, expectedNodeNames);
|
|
296
|
+
}
|
|
297
|
+
catch {
|
|
298
|
+
return {};
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
//# sourceMappingURL=pin-data-generator.js.map
|