n8n 2.38.0 → 2.38.1
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/dist/build.tsbuildinfo +1 -1
- package/dist/controllers/invitation.controller.d.ts +1 -5
- package/dist/controllers/invitation.controller.js +3 -32
- package/dist/controllers/invitation.controller.js.map +1 -1
- package/dist/controllers/users.controller.d.ts +2 -27
- package/dist/controllers/users.controller.js +6 -132
- package/dist/controllers/users.controller.js.map +1 -1
- package/dist/evaluation.ee/evaluation-test-run.service.d.ts +46 -0
- package/dist/evaluation.ee/evaluation-test-run.service.js +65 -0
- package/dist/evaluation.ee/evaluation-test-run.service.js.map +1 -0
- package/dist/evaluation.ee/insights/insights-context-builder.js +4 -2
- package/dist/evaluation.ee/insights/insights-context-builder.js.map +1 -1
- package/dist/evaluation.ee/test-runs.controller.ee.d.ts +1 -1
- package/dist/evaluation.ee/test-runs.controller.ee.js +5 -2
- package/dist/evaluation.ee/test-runs.controller.ee.js.map +1 -1
- package/dist/modules/agents/agent-interrupted-execution-sweeper.d.ts +5 -1
- package/dist/modules/agents/agent-interrupted-execution-sweeper.js +14 -2
- package/dist/modules/agents/agent-interrupted-execution-sweeper.js.map +1 -1
- package/dist/modules/agents/agent-runtime-reconstruction.service.d.ts +1 -0
- package/dist/modules/agents/agent-runtime-reconstruction.service.js +35 -2
- package/dist/modules/agents/agent-runtime-reconstruction.service.js.map +1 -1
- package/dist/modules/agents/agents.module.d.ts +1 -1
- package/dist/modules/agents/agents.module.js +3 -0
- package/dist/modules/agents/agents.module.js.map +1 -1
- package/dist/modules/agents/background/agent-background-job.service.d.ts +34 -0
- package/dist/modules/agents/background/agent-background-job.service.js +168 -0
- package/dist/modules/agents/background/agent-background-job.service.js.map +1 -0
- package/dist/modules/agents/background/background-job-tools.d.ts +21 -0
- package/dist/modules/agents/background/background-job-tools.js +157 -0
- package/dist/modules/agents/background/background-job-tools.js.map +1 -0
- package/dist/modules/agents/background/sub-agent-background-runner.d.ts +27 -0
- package/dist/modules/agents/background/sub-agent-background-runner.js +123 -0
- package/dist/modules/agents/background/sub-agent-background-runner.js.map +1 -0
- package/dist/modules/agents/builder/get-resource-locator-options.tool.d.ts +2 -2
- package/dist/modules/agents/entities/agent-background-job.entity.d.ts +18 -0
- package/dist/modules/agents/entities/agent-background-job.entity.js +78 -0
- package/dist/modules/agents/entities/agent-background-job.entity.js.map +1 -0
- package/dist/modules/agents/repositories/agent-background-job.repository.d.ts +37 -0
- package/dist/modules/agents/repositories/agent-background-job.repository.js +61 -0
- package/dist/modules/agents/repositories/agent-background-job.repository.js.map +1 -0
- package/dist/modules/agents/sub-agents/delegate-sub-agent-tool.d.ts +4 -5
- package/dist/modules/agents/sub-agents/delegate-sub-agent-tool.js +4 -14
- package/dist/modules/agents/sub-agents/delegate-sub-agent-tool.js.map +1 -1
- package/dist/modules/agents/sub-agents/format-sub-agent-tool-output.d.ts +3 -0
- package/dist/modules/agents/sub-agents/format-sub-agent-tool-output.js +14 -0
- package/dist/modules/agents/sub-agents/format-sub-agent-tool-output.js.map +1 -0
- package/dist/modules/agents/sub-agents/{sub-agent-foreground-runner.d.ts → sub-agent-runner.d.ts} +5 -5
- package/dist/modules/agents/sub-agents/{sub-agent-foreground-runner.js → sub-agent-runner.js} +8 -11
- package/dist/modules/agents/sub-agents/sub-agent-runner.js.map +1 -0
- package/dist/public-api/v1/handlers/evaluations/evaluations.handler.js +11 -35
- package/dist/public-api/v1/handlers/evaluations/evaluations.handler.js.map +1 -1
- package/dist/public-api/v1/handlers/users/users.handler.ee.d.ts +1 -1
- package/dist/public-api/v1/handlers/users/users.handler.ee.js +16 -18
- package/dist/public-api/v1/handlers/users/users.handler.ee.js.map +1 -1
- package/dist/public-api/v1/handlers/users/users.mapper.d.ts +12 -0
- package/dist/public-api/v1/handlers/users/users.mapper.js +27 -0
- package/dist/public-api/v1/handlers/users/users.mapper.js.map +1 -0
- package/dist/scaling/constants.d.ts +2 -2
- package/dist/scaling/constants.js +1 -0
- package/dist/scaling/constants.js.map +1 -1
- package/dist/scaling/pubsub/pubsub.event-map.d.ts +3 -0
- package/dist/scaling/pubsub/pubsub.types.d.ts +2 -1
- package/dist/services/project.service.ee.d.ts +1 -0
- package/dist/services/project.service.ee.js +3 -0
- package/dist/services/project.service.ee.js.map +1 -1
- package/dist/services/user.service.d.ts +41 -8
- package/dist/services/user.service.js +174 -8
- package/dist/services/user.service.js.map +1 -1
- package/package.json +22 -22
- package/dist/modules/agents/sub-agents/sub-agent-foreground-runner.js.map +0 -1
- package/dist/public-api/v1/handlers/users/users.service.ee.d.ts +0 -21
- package/dist/public-api/v1/handlers/users/users.service.ee.js +0 -68
- package/dist/public-api/v1/handlers/users/users.service.ee.js.map +0 -1
|
@@ -5,10 +5,8 @@ import { Response } from 'express';
|
|
|
5
5
|
import { AuthService } from '../auth/auth.service';
|
|
6
6
|
import { EventService } from '../events/event.service';
|
|
7
7
|
import { ExternalHooks } from '../external-hooks';
|
|
8
|
-
import { License } from '../license';
|
|
9
8
|
import { PostHogClient } from '../posthog';
|
|
10
9
|
import { AuthlessRequest } from '../requests';
|
|
11
|
-
import { OwnershipService } from '../services/ownership.service';
|
|
12
10
|
import { PasswordUtility } from '../services/password.utility';
|
|
13
11
|
import { UserService } from '../services/user.service';
|
|
14
12
|
export declare class InvitationController {
|
|
@@ -16,13 +14,11 @@ export declare class InvitationController {
|
|
|
16
14
|
private readonly externalHooks;
|
|
17
15
|
private readonly authService;
|
|
18
16
|
private readonly userService;
|
|
19
|
-
private readonly license;
|
|
20
17
|
private readonly passwordUtility;
|
|
21
18
|
private readonly userRepository;
|
|
22
19
|
private readonly postHog;
|
|
23
20
|
private readonly eventService;
|
|
24
|
-
|
|
25
|
-
constructor(logger: Logger, externalHooks: ExternalHooks, authService: AuthService, userService: UserService, license: License, passwordUtility: PasswordUtility, userRepository: UserRepository, postHog: PostHogClient, eventService: EventService, ownershipService: OwnershipService);
|
|
21
|
+
constructor(logger: Logger, externalHooks: ExternalHooks, authService: AuthService, userService: UserService, passwordUtility: PasswordUtility, userRepository: UserRepository, postHog: PostHogClient, eventService: EventService);
|
|
26
22
|
inviteUser(req: AuthenticatedRequest, _res: Response, invitations: InviteUsersRequestDto): Promise<import("../requests").UserRequest.InviteResponse[]>;
|
|
27
23
|
private processInvitationAcceptance;
|
|
28
24
|
acceptInvitationWithToken(req: AuthlessRequest, res: Response, payload: AcceptInvitationRequestDto): Promise<import("@n8n/db").PublicUser>;
|
|
@@ -19,55 +19,26 @@ const constants_1 = require("@n8n/constants");
|
|
|
19
19
|
const db_1 = require("@n8n/db");
|
|
20
20
|
const decorators_1 = require("@n8n/decorators");
|
|
21
21
|
const auth_service_1 = require("../auth/auth.service");
|
|
22
|
-
const constants_2 = require("../constants");
|
|
23
22
|
const bad_request_error_1 = require("../errors/response-errors/bad-request.error");
|
|
24
|
-
const forbidden_error_1 = require("../errors/response-errors/forbidden.error");
|
|
25
23
|
const event_service_1 = require("../events/event.service");
|
|
26
24
|
const external_hooks_1 = require("../external-hooks");
|
|
27
|
-
const license_1 = require("../license");
|
|
28
25
|
const posthog_1 = require("../posthog");
|
|
29
|
-
const ownership_service_1 = require("../services/ownership.service");
|
|
30
26
|
const password_utility_1 = require("../services/password.utility");
|
|
31
27
|
const user_service_1 = require("../services/user.service");
|
|
32
28
|
const sso_helpers_1 = require("../sso.ee/sso-helpers");
|
|
33
29
|
let InvitationController = class InvitationController {
|
|
34
|
-
constructor(logger, externalHooks, authService, userService,
|
|
30
|
+
constructor(logger, externalHooks, authService, userService, passwordUtility, userRepository, postHog, eventService) {
|
|
35
31
|
this.logger = logger;
|
|
36
32
|
this.externalHooks = externalHooks;
|
|
37
33
|
this.authService = authService;
|
|
38
34
|
this.userService = userService;
|
|
39
|
-
this.license = license;
|
|
40
35
|
this.passwordUtility = passwordUtility;
|
|
41
36
|
this.userRepository = userRepository;
|
|
42
37
|
this.postHog = postHog;
|
|
43
38
|
this.eventService = eventService;
|
|
44
|
-
this.ownershipService = ownershipService;
|
|
45
39
|
}
|
|
46
40
|
async inviteUser(req, _res, invitations) {
|
|
47
|
-
|
|
48
|
-
return [];
|
|
49
|
-
const isWithinUsersLimit = this.license.isWithinUsersLimit();
|
|
50
|
-
if ((0, sso_helpers_1.isSsoCurrentAuthenticationMethod)()) {
|
|
51
|
-
this.logger.debug('SSO is enabled, so users are managed by the Identity Provider and cannot be added through invites');
|
|
52
|
-
throw new bad_request_error_1.BadRequestError('SSO is enabled, so users are managed by the Identity Provider and cannot be added through invites');
|
|
53
|
-
}
|
|
54
|
-
if (!isWithinUsersLimit) {
|
|
55
|
-
this.logger.debug('Request to send email invite(s) to user(s) failed because the user limit quota has been reached');
|
|
56
|
-
throw new forbidden_error_1.ForbiddenError(constants_2.RESPONSE_ERROR_MESSAGES.USERS_QUOTA_REACHED);
|
|
57
|
-
}
|
|
58
|
-
if (!(await this.ownershipService.hasInstanceOwner())) {
|
|
59
|
-
this.logger.debug('Request to send email invite(s) to user(s) failed because the owner account is not set up');
|
|
60
|
-
throw new bad_request_error_1.BadRequestError('You must set up your own account before inviting others');
|
|
61
|
-
}
|
|
62
|
-
const attributes = invitations.map(({ email, role }) => {
|
|
63
|
-
if (role === 'global:admin' && !this.license.isAdvancedPermissionsLicensed()) {
|
|
64
|
-
throw new forbidden_error_1.ForbiddenError('Cannot invite admin user without advanced permissions. Please upgrade to a license that includes this feature.');
|
|
65
|
-
}
|
|
66
|
-
return { email, role };
|
|
67
|
-
});
|
|
68
|
-
const { usersInvited, usersCreated } = await this.userService.inviteUsers(req.user, attributes);
|
|
69
|
-
await this.externalHooks.run('user.invited', [usersCreated]);
|
|
70
|
-
return usersInvited;
|
|
41
|
+
return await this.userService.inviteUser(req.user, invitations);
|
|
71
42
|
}
|
|
72
43
|
async processInvitationAcceptance(inviterId, inviteeId, firstName, lastName, password, req, res) {
|
|
73
44
|
const users = await this.userRepository.find({
|
|
@@ -139,6 +110,6 @@ __decorate([
|
|
|
139
110
|
], InvitationController.prototype, "acceptInvitationWithToken", null);
|
|
140
111
|
exports.InvitationController = InvitationController = __decorate([
|
|
141
112
|
(0, decorators_1.RestController)('/invitations'),
|
|
142
|
-
__metadata("design:paramtypes", [backend_common_1.Logger, external_hooks_1.ExternalHooks, auth_service_1.AuthService, user_service_1.UserService,
|
|
113
|
+
__metadata("design:paramtypes", [backend_common_1.Logger, external_hooks_1.ExternalHooks, auth_service_1.AuthService, user_service_1.UserService, password_utility_1.PasswordUtility, db_1.UserRepository, posthog_1.PostHogClient, event_service_1.EventService])
|
|
143
114
|
], InvitationController);
|
|
144
115
|
//# sourceMappingURL=invitation.controller.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"invitation.controller.js","sourceRoot":"","sources":["../../src/controllers/invitation.controller.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,8CAAmF;AACnF,wDAA6C;AAC7C,8CAAsC;AAEtC,gCAA+D;AAC/D,gDAA0E;AAG1E,sDAAkD;AAClD,
|
|
1
|
+
{"version":3,"file":"invitation.controller.js","sourceRoot":"","sources":["../../src/controllers/invitation.controller.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,8CAAmF;AACnF,wDAA6C;AAC7C,8CAAsC;AAEtC,gCAA+D;AAC/D,gDAA0E;AAG1E,sDAAkD;AAClD,kFAA6E;AAC7E,0DAAsD;AACtD,qDAAiD;AACjD,uCAA0C;AAE1C,kEAA8D;AAC9D,0DAAsD;AACtD,sDAAwE;AAGjE,IAAM,oBAAoB,GAA1B,MAAM,oBAAoB;IAChC,YACkB,MAAc,EACd,aAA4B,EAC5B,WAAwB,EACxB,WAAwB,EACxB,eAAgC,EAChC,cAA8B,EAC9B,OAAsB,EACtB,YAA0B;sBAP1B,MAAM;6BACN,aAAa;2BACb,WAAW;2BACX,WAAW;+BACX,eAAe;8BACf,cAAc;uBACd,OAAO;4BACP,YAAY;IAC3B,CAAC;IAQE,AAAN,KAAK,CAAC,UAAU,CACf,GAAyB,EACzB,IAAc,EACR,WAAkC;QAExC,OAAO,MAAM,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;IACjE,CAAC;IAKO,KAAK,CAAC,2BAA2B,CACxC,SAAiB,EACjB,SAAiB,EACjB,SAAiB,EACjB,QAAgB,EAChB,QAAgB,EAChB,GAAoB,EACpB,GAAa;QAEb,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC;YAC5C,KAAK,EAAE,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,EAAE,EAAE,SAAS,EAAE,CAAC;YAC7C,SAAS,EAAE,CAAC,MAAM,CAAC;SACnB,CAAC,CAAC;QAEH,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACxB,IAAI,CAAC,MAAM,CAAC,KAAK,CAChB,6GAA6G,EAC7G;gBACC,SAAS;gBACT,SAAS;aACT,CACD,CAAC;YACF,MAAM,IAAI,mCAAe,CAAC,wBAAwB,CAAC,CAAC;QACrD,CAAC;QAED,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,KAAK,SAAS,CAAS,CAAC;QAEpE,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;YACtB,IAAI,CAAC,MAAM,CAAC,KAAK,CAChB,sFAAsF,EACtF,EAAE,SAAS,EAAE,CACb,CAAC;YACF,MAAM,IAAI,mCAAe,CAAC,uCAAuC,CAAC,CAAC;QACpE,CAAC;QAED,OAAO,CAAC,SAAS,GAAG,SAAS,CAAC;QAC9B,OAAO,CAAC,QAAQ,GAAG,QAAQ,CAAC;QAC5B,OAAO,CAAC,QAAQ,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAE7D,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC,CAAC;QAEpF,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,GAAG,EAAE,WAAW,EAAE,KAAK,EAAE,GAAG,CAAC,SAAS,CAAC,CAAC;QAErE,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,gBAAgB,EAAE;YACxC,IAAI,EAAE,WAAW;YACjB,QAAQ,EAAE,OAAO;YACjB,mBAAmB,EAAE,KAAK;SAC1B,CAAC,CAAC;QAEH,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;QAE/D,MAAM,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,qBAAqB,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC,CAAC;QACpF,MAAM,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,sBAAsB,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;QAExF,OAAO,MAAM,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,WAAW,EAAE;YACnD,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,UAAU,EAAE,IAAI;SAChB,CAAC,CAAC;IACJ,CAAC;IAWK,AAAN,KAAK,CAAC,yBAAyB,CAC9B,GAAoB,EACpB,GAAa,EACP,OAAmC;QAEzC,IAAI,IAAA,8CAAgC,GAAE,EAAE,CAAC;YACxC,IAAI,CAAC,MAAM,CAAC,KAAK,CAChB,mFAAmF,CACnF,CAAC;YACF,MAAM,IAAI,mCAAe,CACxB,mFAAmF,CACnF,CAAC;QACH,CAAC;QAED,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;YACpB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,8DAA8D,CAAC,CAAC;YAClF,MAAM,IAAI,mCAAe,CAAC,mBAAmB,CAAC,CAAC;QAChD,CAAC;QAED,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC;QAGlD,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,2BAA2B,CAClF,OAAO,CAAC,KAAK,CACb,CAAC;QAEF,OAAO,MAAM,IAAI,CAAC,2BAA2B,CAC5C,SAAS,EACT,SAAS,EACT,SAAS,EACT,QAAQ,EACR,QAAQ,EACR,GAAG,EACH,GAAG,CACH,CAAC;IACH,CAAC;CACD,CAAA;;AApHM;IAFL,IAAA,iBAAI,EAAC,GAAG,EAAE,EAAE,WAAW,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,CAAC;IACzC,IAAA,wBAAW,EAAC,aAAa,CAAC;IAIzB,WAAA,iBAAI,CAAA;;qDAAc,iCAAqB;;sDAGxC;AA0EK;IANL,IAAA,iBAAI,EAAC,SAAS,EAAE;QAChB,QAAQ,EAAE,IAAI;QAGd,WAAW,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC,GAAG,gBAAI,CAAC,OAAO,CAAC,cAAc,EAAE;KACtE,CAAC;IAIA,WAAA,iBAAI,CAAA;;qDAAU,sCAA0B;;qEAgCzC;+BArIW,oBAAoB;IADhC,IAAA,2BAAc,EAAC,cAAc,CAAC;qCAGJ,uBAAM,EACC,8BAAa,EACf,0BAAW,EACX,0BAAW,EACP,kCAAe,EAChB,mBAAc,EACrB,uBAAa,EACR,4BAAY;GAThC,oBAAoB,CAsIhC"}
|
|
@@ -1,43 +1,18 @@
|
|
|
1
1
|
import { RoleChangeRequestDto, SettingsUpdateRequestDto, UsersListFilterDto } from '@n8n/api-types';
|
|
2
|
-
import {
|
|
3
|
-
import { ProjectRepository, SharedCredentialsRepository, SharedWorkflowRepository, UserRepository, AuthenticatedRequest } from '@n8n/db';
|
|
2
|
+
import { UserRepository, AuthenticatedRequest } from '@n8n/db';
|
|
4
3
|
import { Response } from 'express';
|
|
5
4
|
import { AuthService } from '../auth/auth.service';
|
|
6
|
-
import { CredentialsService } from '../credentials/credentials.service';
|
|
7
|
-
import { EventService } from '../events/event.service';
|
|
8
|
-
import { ExternalHooks } from '../external-hooks';
|
|
9
|
-
import { ProvisioningService } from '../modules/provisioning.ee/provisioning.service.ee';
|
|
10
5
|
import { UserRequest } from '../requests';
|
|
11
6
|
import { JwtService } from '../services/jwt.service';
|
|
12
|
-
import { OwnershipTransferService } from '../services/ownership-transfer/ownership-transfer.service';
|
|
13
7
|
import { UrlService } from '../services/url.service';
|
|
14
8
|
import { UserService } from '../services/user.service';
|
|
15
|
-
import { WorkflowService } from '../workflows/workflow.service';
|
|
16
9
|
export declare class UsersController {
|
|
17
|
-
private readonly logger;
|
|
18
|
-
private readonly externalHooks;
|
|
19
|
-
private readonly sharedCredentialsRepository;
|
|
20
|
-
private readonly sharedWorkflowRepository;
|
|
21
10
|
private readonly userRepository;
|
|
22
11
|
private readonly authService;
|
|
23
12
|
private readonly userService;
|
|
24
|
-
private readonly projectRepository;
|
|
25
|
-
private readonly workflowService;
|
|
26
|
-
private readonly credentialsService;
|
|
27
|
-
private readonly eventService;
|
|
28
13
|
private readonly jwtService;
|
|
29
14
|
private readonly urlService;
|
|
30
|
-
|
|
31
|
-
private readonly ownershipTransferService;
|
|
32
|
-
constructor(logger: Logger, externalHooks: ExternalHooks, sharedCredentialsRepository: SharedCredentialsRepository, sharedWorkflowRepository: SharedWorkflowRepository, userRepository: UserRepository, authService: AuthService, userService: UserService, projectRepository: ProjectRepository, workflowService: WorkflowService, credentialsService: CredentialsService, eventService: EventService, jwtService: JwtService, urlService: UrlService, provisioningService: ProvisioningService, ownershipTransferService: OwnershipTransferService);
|
|
33
|
-
static ERROR_MESSAGES: {
|
|
34
|
-
readonly CHANGE_ROLE: {
|
|
35
|
-
readonly NO_USER: 'Target user not found';
|
|
36
|
-
readonly NO_ADMIN_ON_OWNER: 'Admin cannot change role on global owner';
|
|
37
|
-
readonly NO_OWNER_ON_OWNER: 'Owner cannot change role on global owner';
|
|
38
|
-
readonly CANNOT_CHANGE_OWN_ROLE: 'Cannot change your own global role';
|
|
39
|
-
};
|
|
40
|
-
};
|
|
15
|
+
constructor(userRepository: UserRepository, authService: AuthService, userService: UserService, jwtService: JwtService, urlService: UrlService);
|
|
41
16
|
private removeSupplementaryFields;
|
|
42
17
|
listUsers(req: AuthenticatedRequest, _res: Response, listQueryOptions: UsersListFilterDto): Promise<{
|
|
43
18
|
count: number;
|
|
@@ -11,44 +11,25 @@ var __metadata = (this && this.__metadata) || function (k, v) {
|
|
|
11
11
|
var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
12
12
|
return function (target, key) { decorator(target, key, paramIndex); }
|
|
13
13
|
};
|
|
14
|
-
var UsersController_1;
|
|
15
14
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
16
15
|
exports.UsersController = void 0;
|
|
17
16
|
const api_types_1 = require("@n8n/api-types");
|
|
18
|
-
const backend_common_1 = require("@n8n/backend-common");
|
|
19
17
|
const db_1 = require("@n8n/db");
|
|
20
18
|
const decorators_1 = require("@n8n/decorators");
|
|
21
19
|
const permissions_1 = require("@n8n/permissions");
|
|
22
20
|
const auth_service_1 = require("../auth/auth.service");
|
|
23
|
-
const credentials_service_1 = require("../credentials/credentials.service");
|
|
24
|
-
const bad_request_error_1 = require("../errors/response-errors/bad-request.error");
|
|
25
21
|
const forbidden_error_1 = require("../errors/response-errors/forbidden.error");
|
|
26
22
|
const not_found_error_1 = require("../errors/response-errors/not-found.error");
|
|
27
|
-
const event_service_1 = require("../events/event.service");
|
|
28
|
-
const external_hooks_1 = require("../external-hooks");
|
|
29
|
-
const provisioning_service_ee_1 = require("../modules/provisioning.ee/provisioning.service.ee");
|
|
30
23
|
const jwt_service_1 = require("../services/jwt.service");
|
|
31
|
-
const ownership_transfer_service_1 = require("../services/ownership-transfer/ownership-transfer.service");
|
|
32
24
|
const url_service_1 = require("../services/url.service");
|
|
33
25
|
const user_service_1 = require("../services/user.service");
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
constructor(logger, externalHooks, sharedCredentialsRepository, sharedWorkflowRepository, userRepository, authService, userService, projectRepository, workflowService, credentialsService, eventService, jwtService, urlService, provisioningService, ownershipTransferService) {
|
|
37
|
-
this.logger = logger;
|
|
38
|
-
this.externalHooks = externalHooks;
|
|
39
|
-
this.sharedCredentialsRepository = sharedCredentialsRepository;
|
|
40
|
-
this.sharedWorkflowRepository = sharedWorkflowRepository;
|
|
26
|
+
let UsersController = class UsersController {
|
|
27
|
+
constructor(userRepository, authService, userService, jwtService, urlService) {
|
|
41
28
|
this.userRepository = userRepository;
|
|
42
29
|
this.authService = authService;
|
|
43
30
|
this.userService = userService;
|
|
44
|
-
this.projectRepository = projectRepository;
|
|
45
|
-
this.workflowService = workflowService;
|
|
46
|
-
this.credentialsService = credentialsService;
|
|
47
|
-
this.eventService = eventService;
|
|
48
31
|
this.jwtService = jwtService;
|
|
49
32
|
this.urlService = urlService;
|
|
50
|
-
this.provisioningService = provisioningService;
|
|
51
|
-
this.ownershipTransferService = ownershipTransferService;
|
|
52
33
|
}
|
|
53
34
|
removeSupplementaryFields(publicUsers, listQueryOptions, currentUser) {
|
|
54
35
|
const { select } = listQueryOptions;
|
|
@@ -136,120 +117,13 @@ let UsersController = UsersController_1 = class UsersController {
|
|
|
136
117
|
return user.settings;
|
|
137
118
|
}
|
|
138
119
|
async deleteUser(req) {
|
|
139
|
-
|
|
140
|
-
if (req.user.id === idToDelete) {
|
|
141
|
-
this.logger.debug('Request to delete a user failed because it attempted to delete the requesting user', { userId: req.user.id });
|
|
142
|
-
throw new bad_request_error_1.BadRequestError('Cannot delete your own user');
|
|
143
|
-
}
|
|
144
|
-
const { transferId } = req.query;
|
|
145
|
-
const userToDelete = await this.userRepository.findOne({
|
|
146
|
-
where: { id: idToDelete },
|
|
147
|
-
relations: ['role'],
|
|
148
|
-
});
|
|
149
|
-
if (!userToDelete) {
|
|
150
|
-
throw new not_found_error_1.NotFoundError('Request to delete a user failed because the user to delete was not found in DB');
|
|
151
|
-
}
|
|
152
|
-
if (userToDelete.role.slug === db_1.GLOBAL_OWNER_ROLE.slug) {
|
|
153
|
-
throw new forbidden_error_1.ForbiddenError('Instance owner cannot be deleted.');
|
|
154
|
-
}
|
|
155
|
-
const personalProjectToDelete = await this.projectRepository.getPersonalProjectForUserOrFail(userToDelete.id);
|
|
156
|
-
if (transferId === personalProjectToDelete.id) {
|
|
157
|
-
throw new bad_request_error_1.BadRequestError('Request to delete a user failed because the user to delete and the transferee are the same user');
|
|
158
|
-
}
|
|
159
|
-
let transfereeId;
|
|
160
|
-
let transfereeProject = null;
|
|
161
|
-
if (transferId) {
|
|
162
|
-
transfereeProject = await this.projectRepository.findOneBy({ id: transferId });
|
|
163
|
-
if (!transfereeProject) {
|
|
164
|
-
throw new not_found_error_1.NotFoundError('Request to delete a user failed because the transferee project was not found in DB');
|
|
165
|
-
}
|
|
166
|
-
const transfereeProjectId = transfereeProject.id;
|
|
167
|
-
const transferee = await this.userRepository.findOneByOrFail({
|
|
168
|
-
projectRelations: {
|
|
169
|
-
projectId: transfereeProjectId,
|
|
170
|
-
},
|
|
171
|
-
});
|
|
172
|
-
transfereeId = transferee.id;
|
|
173
|
-
await this.ownershipTransferService.transferAllResources([personalProjectToDelete.id], transfereeProjectId);
|
|
174
|
-
}
|
|
175
|
-
const [ownedSharedWorkflows, ownedSharedCredentials] = await Promise.all([
|
|
176
|
-
this.sharedWorkflowRepository.find({
|
|
177
|
-
select: { workflowId: true },
|
|
178
|
-
where: { projectId: personalProjectToDelete.id, role: 'workflow:owner' },
|
|
179
|
-
}),
|
|
180
|
-
this.sharedCredentialsRepository.find({
|
|
181
|
-
relations: { credentials: true },
|
|
182
|
-
where: { projectId: personalProjectToDelete.id, role: 'credential:owner' },
|
|
183
|
-
}),
|
|
184
|
-
]);
|
|
185
|
-
const ownedCredentials = ownedSharedCredentials.map(({ credentials }) => credentials);
|
|
186
|
-
for (const { workflowId } of ownedSharedWorkflows) {
|
|
187
|
-
await this.workflowService.delete(userToDelete, workflowId, true);
|
|
188
|
-
}
|
|
189
|
-
for (const credential of ownedCredentials) {
|
|
190
|
-
await this.credentialsService.delete(userToDelete, credential.id);
|
|
191
|
-
}
|
|
192
|
-
if (!transfereeProject) {
|
|
193
|
-
await this.ownershipTransferService.deleteModuleOwnedResources([personalProjectToDelete.id]);
|
|
194
|
-
}
|
|
195
|
-
await this.userService.getManager().transaction(async (trx) => {
|
|
196
|
-
await trx.delete(db_1.AuthIdentity, { userId: userToDelete.id });
|
|
197
|
-
await trx.delete(db_1.Project, { id: personalProjectToDelete.id });
|
|
198
|
-
await trx.delete(db_1.User, { id: userToDelete.id });
|
|
199
|
-
});
|
|
200
|
-
this.eventService.emit('user-deleted', {
|
|
201
|
-
user: req.user,
|
|
202
|
-
publicApi: false,
|
|
203
|
-
targetUserOldStatus: userToDelete.isPending ? 'invited' : 'active',
|
|
204
|
-
targetUserId: idToDelete,
|
|
205
|
-
migrationStrategy: transferId ? 'transfer_data' : 'delete_data',
|
|
206
|
-
migrationUserId: transfereeId,
|
|
207
|
-
});
|
|
208
|
-
await this.externalHooks.run('user.deleted', [await this.userService.toPublic(userToDelete)]);
|
|
209
|
-
return { success: true };
|
|
120
|
+
return await this.userService.deleteUser(req.user, req.params.id, req.query.transferId);
|
|
210
121
|
}
|
|
211
122
|
async changeGlobalRole(req, _, payload, id) {
|
|
212
|
-
|
|
213
|
-
throw new forbidden_error_1.ForbiddenError('Instance roles are managed automatically and cannot be changed manually');
|
|
214
|
-
}
|
|
215
|
-
const { NO_ADMIN_ON_OWNER, NO_USER, NO_OWNER_ON_OWNER, CANNOT_CHANGE_OWN_ROLE } = UsersController_1.ERROR_MESSAGES.CHANGE_ROLE;
|
|
216
|
-
if (req.user.id === id) {
|
|
217
|
-
throw new forbidden_error_1.ForbiddenError(CANNOT_CHANGE_OWN_ROLE);
|
|
218
|
-
}
|
|
219
|
-
const targetUser = await this.userRepository.findOne({
|
|
220
|
-
where: { id },
|
|
221
|
-
relations: ['role'],
|
|
222
|
-
});
|
|
223
|
-
if (targetUser === null) {
|
|
224
|
-
throw new not_found_error_1.NotFoundError(NO_USER);
|
|
225
|
-
}
|
|
226
|
-
if (req.user.role.slug === db_1.GLOBAL_ADMIN_ROLE.slug &&
|
|
227
|
-
targetUser.role.slug === db_1.GLOBAL_OWNER_ROLE.slug) {
|
|
228
|
-
throw new forbidden_error_1.ForbiddenError(NO_ADMIN_ON_OWNER);
|
|
229
|
-
}
|
|
230
|
-
if (req.user.role.slug === db_1.GLOBAL_OWNER_ROLE.slug &&
|
|
231
|
-
targetUser.role.slug === db_1.GLOBAL_OWNER_ROLE.slug) {
|
|
232
|
-
throw new forbidden_error_1.ForbiddenError(NO_OWNER_ON_OWNER);
|
|
233
|
-
}
|
|
234
|
-
await this.userService.changeUserRole(targetUser, payload);
|
|
235
|
-
this.eventService.emit('user-changed-role', {
|
|
236
|
-
userId: req.user.id,
|
|
237
|
-
targetUserId: targetUser.id,
|
|
238
|
-
targetUserNewRole: payload.newRoleName,
|
|
239
|
-
publicApi: false,
|
|
240
|
-
});
|
|
241
|
-
return { success: true };
|
|
123
|
+
return await this.userService.changeGlobalRole(req.user, id, payload);
|
|
242
124
|
}
|
|
243
125
|
};
|
|
244
126
|
exports.UsersController = UsersController;
|
|
245
|
-
UsersController.ERROR_MESSAGES = {
|
|
246
|
-
CHANGE_ROLE: {
|
|
247
|
-
NO_USER: 'Target user not found',
|
|
248
|
-
NO_ADMIN_ON_OWNER: 'Admin cannot change role on global owner',
|
|
249
|
-
NO_OWNER_ON_OWNER: 'Owner cannot change role on global owner',
|
|
250
|
-
CANNOT_CHANGE_OWN_ROLE: 'Cannot change your own global role',
|
|
251
|
-
},
|
|
252
|
-
};
|
|
253
127
|
__decorate([
|
|
254
128
|
(0, decorators_1.Get)('/'),
|
|
255
129
|
(0, decorators_1.GlobalScope)('user:list'),
|
|
@@ -298,8 +172,8 @@ __decorate([
|
|
|
298
172
|
__metadata("design:paramtypes", [Object, Object, api_types_1.RoleChangeRequestDto, String]),
|
|
299
173
|
__metadata("design:returntype", Promise)
|
|
300
174
|
], UsersController.prototype, "changeGlobalRole", null);
|
|
301
|
-
exports.UsersController = UsersController =
|
|
175
|
+
exports.UsersController = UsersController = __decorate([
|
|
302
176
|
(0, decorators_1.RestController)('/users'),
|
|
303
|
-
__metadata("design:paramtypes", [
|
|
177
|
+
__metadata("design:paramtypes", [db_1.UserRepository, auth_service_1.AuthService, user_service_1.UserService, jwt_service_1.JwtService, url_service_1.UrlService])
|
|
304
178
|
], UsersController);
|
|
305
179
|
//# sourceMappingURL=users.controller.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"users.controller.js","sourceRoot":"","sources":["../../src/controllers/users.controller.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"users.controller.js","sourceRoot":"","sources":["../../src/controllers/users.controller.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { LicenseState } from '@n8n/backend-common';
|
|
2
|
+
import type { TestRun } from '@n8n/db';
|
|
3
|
+
import { TestCaseExecutionRepository, TestRunRepository, WorkflowRepository } from '@n8n/db';
|
|
4
|
+
type Pagination = {
|
|
5
|
+
offset: number;
|
|
6
|
+
limit: number;
|
|
7
|
+
};
|
|
8
|
+
export declare class EvaluationTestRunService {
|
|
9
|
+
private readonly testRunRepository;
|
|
10
|
+
private readonly testCaseExecutionRepository;
|
|
11
|
+
private readonly workflowRepository;
|
|
12
|
+
private readonly licenseState;
|
|
13
|
+
constructor(testRunRepository: TestRunRepository, testCaseExecutionRepository: TestCaseExecutionRepository, workflowRepository: WorkflowRepository, licenseState: LicenseState);
|
|
14
|
+
findManyAndCount(workflowId: string, pagination: Pagination, status?: TestRun['status']): Promise<{
|
|
15
|
+
testRuns: {
|
|
16
|
+
id: string;
|
|
17
|
+
updatedAt: Date;
|
|
18
|
+
createdAt: Date;
|
|
19
|
+
status: import("@n8n/db/dist/entities/test-run.ee").TestRunStatus;
|
|
20
|
+
runAt: Date | null;
|
|
21
|
+
completedAt: Date | null;
|
|
22
|
+
metrics: import("@n8n/db").AggregatedTestRunMetrics;
|
|
23
|
+
errorCode: import("@n8n/db").TestRunErrorCode | null;
|
|
24
|
+
errorDetails: import("n8n-workflow").IDataObject | null;
|
|
25
|
+
workflow: import("@n8n/db").WorkflowEntity;
|
|
26
|
+
workflowId: string;
|
|
27
|
+
runningInstanceId: string | null;
|
|
28
|
+
cancelRequested: boolean;
|
|
29
|
+
workflowVersionId: string | null;
|
|
30
|
+
evaluationConfigId: string | null;
|
|
31
|
+
evaluationConfigSnapshot: import("n8n-workflow").IDataObject | null;
|
|
32
|
+
collectionId: string | null;
|
|
33
|
+
finalResult: import("@n8n/db").TestRunFinalResult | null;
|
|
34
|
+
testCaseCount: number;
|
|
35
|
+
}[];
|
|
36
|
+
count: number;
|
|
37
|
+
}>;
|
|
38
|
+
findSummaryByWorkflowId(runId: string, workflowId: string): Promise<import("@n8n/db").TestRunSummary | null>;
|
|
39
|
+
findOneByIdAndWorkflowId(runId: string, workflowId: string): Promise<TestRun | null>;
|
|
40
|
+
findTestCasesAndCount(runId: string, workflowId: string, pagination: Pagination): Promise<{
|
|
41
|
+
testCases: import("@n8n/db").TestCaseExecution[];
|
|
42
|
+
count: number;
|
|
43
|
+
} | null>;
|
|
44
|
+
assertEvaluationQuotaAvailable(workflowId: string): Promise<void>;
|
|
45
|
+
}
|
|
46
|
+
export {};
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
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
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.EvaluationTestRunService = void 0;
|
|
13
|
+
const backend_common_1 = require("@n8n/backend-common");
|
|
14
|
+
const constants_1 = require("@n8n/constants");
|
|
15
|
+
const db_1 = require("@n8n/db");
|
|
16
|
+
const di_1 = require("@n8n/di");
|
|
17
|
+
const payment_required_error_1 = require("../errors/response-errors/payment-required.error");
|
|
18
|
+
let EvaluationTestRunService = class EvaluationTestRunService {
|
|
19
|
+
constructor(testRunRepository, testCaseExecutionRepository, workflowRepository, licenseState) {
|
|
20
|
+
this.testRunRepository = testRunRepository;
|
|
21
|
+
this.testCaseExecutionRepository = testCaseExecutionRepository;
|
|
22
|
+
this.workflowRepository = workflowRepository;
|
|
23
|
+
this.licenseState = licenseState;
|
|
24
|
+
}
|
|
25
|
+
async findManyAndCount(workflowId, pagination, status) {
|
|
26
|
+
const [testRuns, count] = await Promise.all([
|
|
27
|
+
this.testRunRepository.getMany(workflowId, pagination, status),
|
|
28
|
+
this.testRunRepository.countByWorkflowId(workflowId, status),
|
|
29
|
+
]);
|
|
30
|
+
return { testRuns, count };
|
|
31
|
+
}
|
|
32
|
+
async findSummaryByWorkflowId(runId, workflowId) {
|
|
33
|
+
return await this.testRunRepository.getTestRunSummaryByWorkflowId(runId, workflowId);
|
|
34
|
+
}
|
|
35
|
+
async findOneByIdAndWorkflowId(runId, workflowId) {
|
|
36
|
+
return await this.testRunRepository.findOneByIdAndWorkflowId(runId, workflowId);
|
|
37
|
+
}
|
|
38
|
+
async findTestCasesAndCount(runId, workflowId, pagination) {
|
|
39
|
+
if (!(await this.testRunRepository.existsInWorkflow(runId, workflowId))) {
|
|
40
|
+
return null;
|
|
41
|
+
}
|
|
42
|
+
const [testCases, count] = await Promise.all([
|
|
43
|
+
this.testCaseExecutionRepository.getManyByTestRunId(runId, pagination),
|
|
44
|
+
this.testCaseExecutionRepository.countByTestRunId(runId),
|
|
45
|
+
]);
|
|
46
|
+
return { testCases, count };
|
|
47
|
+
}
|
|
48
|
+
async assertEvaluationQuotaAvailable(workflowId) {
|
|
49
|
+
const limit = this.licenseState.getMaxWorkflowsWithEvaluations();
|
|
50
|
+
if (limit === constants_1.UNLIMITED_LICENSE_QUOTA)
|
|
51
|
+
return;
|
|
52
|
+
if ((await this.testRunRepository.countByWorkflowId(workflowId)) > 0)
|
|
53
|
+
return;
|
|
54
|
+
const used = await this.workflowRepository.getWorkflowsWithEvaluationCount();
|
|
55
|
+
if (used >= limit) {
|
|
56
|
+
throw new payment_required_error_1.PaymentRequiredError(`Evaluation quota exceeded: ${used}/${limit} workflows already have evaluations`);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
};
|
|
60
|
+
exports.EvaluationTestRunService = EvaluationTestRunService;
|
|
61
|
+
exports.EvaluationTestRunService = EvaluationTestRunService = __decorate([
|
|
62
|
+
(0, di_1.Service)(),
|
|
63
|
+
__metadata("design:paramtypes", [db_1.TestRunRepository, db_1.TestCaseExecutionRepository, db_1.WorkflowRepository, backend_common_1.LicenseState])
|
|
64
|
+
], EvaluationTestRunService);
|
|
65
|
+
//# sourceMappingURL=evaluation-test-run.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"evaluation-test-run.service.js","sourceRoot":"","sources":["../../src/evaluation.ee/evaluation-test-run.service.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,wDAAmD;AACnD,8CAAyD;AAEzD,gCAA6F;AAC7F,gCAAkC;AAElC,4FAAuF;AAShF,IAAM,wBAAwB,GAA9B,MAAM,wBAAwB;IACpC,YACkB,iBAAoC,EACpC,2BAAwD,EACxD,kBAAsC,EACtC,YAA0B;iCAH1B,iBAAiB;2CACjB,2BAA2B;kCAC3B,kBAAkB;4BAClB,YAAY;IAC3B,CAAC;IAEJ,KAAK,CAAC,gBAAgB,CAAC,UAAkB,EAAE,UAAsB,EAAE,MAA0B;QAC5F,MAAM,CAAC,QAAQ,EAAE,KAAK,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;YAC3C,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,UAAU,EAAE,UAAU,EAAE,MAAM,CAAC;YAC9D,IAAI,CAAC,iBAAiB,CAAC,iBAAiB,CAAC,UAAU,EAAE,MAAM,CAAC;SAC5D,CAAC,CAAC;QACH,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;IAC5B,CAAC;IAED,KAAK,CAAC,uBAAuB,CAAC,KAAa,EAAE,UAAkB;QAC9D,OAAO,MAAM,IAAI,CAAC,iBAAiB,CAAC,6BAA6B,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;IACtF,CAAC;IAED,KAAK,CAAC,wBAAwB,CAAC,KAAa,EAAE,UAAkB;QAC/D,OAAO,MAAM,IAAI,CAAC,iBAAiB,CAAC,wBAAwB,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;IACjF,CAAC;IAED,KAAK,CAAC,qBAAqB,CAAC,KAAa,EAAE,UAAkB,EAAE,UAAsB;QACpF,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,iBAAiB,CAAC,gBAAgB,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC,EAAE,CAAC;YACzE,OAAO,IAAI,CAAC;QACb,CAAC;QAED,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;YAC5C,IAAI,CAAC,2BAA2B,CAAC,kBAAkB,CAAC,KAAK,EAAE,UAAU,CAAC;YACtE,IAAI,CAAC,2BAA2B,CAAC,gBAAgB,CAAC,KAAK,CAAC;SACxD,CAAC,CAAC;QACH,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;IAC7B,CAAC;IAMD,KAAK,CAAC,8BAA8B,CAAC,UAAkB;QACtD,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,8BAA8B,EAAE,CAAC;QACjE,IAAI,KAAK,KAAK,mCAAuB;YAAE,OAAO;QAE9C,IAAI,CAAC,MAAM,IAAI,CAAC,iBAAiB,CAAC,iBAAiB,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC;YAAE,OAAO;QAE7E,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,+BAA+B,EAAE,CAAC;QAC7E,IAAI,IAAI,IAAI,KAAK,EAAE,CAAC;YACnB,MAAM,IAAI,6CAAoB,CAC7B,8BAA8B,IAAI,IAAI,KAAK,qCAAqC,CAChF,CAAC;QACH,CAAC;IACF,CAAC;CACD,CAAA;;mCArDY,wBAAwB;IADpC,IAAA,YAAO,GAAE;qCAG4B,sBAAiB,EACP,gCAA2B,EACpC,uBAAkB,EACxB,6BAAY;GALhC,wBAAwB,CAqDpC"}
|
|
@@ -102,7 +102,8 @@ let InsightsContextBuilder = class InsightsContextBuilder {
|
|
|
102
102
|
}
|
|
103
103
|
async loadCasesByRunIndex(testRunId) {
|
|
104
104
|
const cases = await this.testCaseExecutionRepo.getManyByTestRunId(testRunId, {
|
|
105
|
-
|
|
105
|
+
offset: 0,
|
|
106
|
+
limit: CASE_FETCH_LIMIT,
|
|
106
107
|
});
|
|
107
108
|
const byIndex = new Map();
|
|
108
109
|
cases.forEach((testCase, position) => {
|
|
@@ -142,7 +143,8 @@ let InsightsContextBuilder = class InsightsContextBuilder {
|
|
|
142
143
|
}
|
|
143
144
|
async regressedCases(baseCasesByIndex, baseScales, version) {
|
|
144
145
|
const versionCases = await this.testCaseExecutionRepo.getManyByTestRunId(version.testRunId, {
|
|
145
|
-
|
|
146
|
+
offset: 0,
|
|
147
|
+
limit: CASE_FETCH_LIMIT,
|
|
146
148
|
});
|
|
147
149
|
const rows = [];
|
|
148
150
|
versionCases.forEach((testCase, position) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"insights-context-builder.js","sourceRoot":"","sources":["../../../src/evaluation.ee/insights/insights-context-builder.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"insights-context-builder.js","sourceRoot":"","sources":["../../../src/evaluation.ee/insights/insights-context-builder.ts"],"names":[],"mappings":"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"}
|
|
@@ -37,7 +37,7 @@ export declare class TestRunsController {
|
|
|
37
37
|
finalResult: import("@n8n/db").TestRunFinalResult | null;
|
|
38
38
|
testCaseCount: number;
|
|
39
39
|
}[]>;
|
|
40
|
-
getOne(req: TestRunsRequest.GetOne): Promise<import("@n8n/db
|
|
40
|
+
getOne(req: TestRunsRequest.GetOne): Promise<import("@n8n/db").TestRunSummary>;
|
|
41
41
|
getTestCases(req: TestRunsRequest.GetCases): Promise<import("@n8n/db").TestCaseExecution[]>;
|
|
42
42
|
delete(req: TestRunsRequest.Delete): Promise<{
|
|
43
43
|
success: boolean;
|
|
@@ -21,13 +21,13 @@ const db_1 = require("@n8n/db");
|
|
|
21
21
|
const decorators_1 = require("@n8n/decorators");
|
|
22
22
|
const express_1 = __importDefault(require("express"));
|
|
23
23
|
const n8n_workflow_1 = require("n8n-workflow");
|
|
24
|
+
const metric_scales_1 = require("./metric-scales");
|
|
24
25
|
const conflict_error_1 = require("../errors/response-errors/conflict.error");
|
|
25
26
|
const not_found_error_1 = require("../errors/response-errors/not-found.error");
|
|
26
27
|
const test_runner_service_ee_1 = require("../evaluation.ee/test-runner/test-runner.service.ee");
|
|
27
28
|
const middlewares_1 = require("../middlewares");
|
|
28
29
|
const telemetry_1 = require("../telemetry");
|
|
29
30
|
const workflow_finder_service_1 = require("../workflows/workflow-finder.service");
|
|
30
|
-
const metric_scales_1 = require("./metric-scales");
|
|
31
31
|
let TestRunsController = class TestRunsController {
|
|
32
32
|
constructor(testRunRepository, workflowFinderService, testCaseExecutionRepository, testRunnerService, telemetry, evaluationConfigRepository) {
|
|
33
33
|
this.testRunRepository = testRunRepository;
|
|
@@ -70,7 +70,10 @@ let TestRunsController = class TestRunsController {
|
|
|
70
70
|
async getMany(req) {
|
|
71
71
|
const { workflowId } = req.params;
|
|
72
72
|
await this.assertUserHasAccessToWorkflow(workflowId, req.user);
|
|
73
|
-
const testRuns = await this.testRunRepository.getMany(workflowId,
|
|
73
|
+
const testRuns = await this.testRunRepository.getMany(workflowId, {
|
|
74
|
+
offset: req.listQueryOptions?.skip,
|
|
75
|
+
limit: req.listQueryOptions?.take,
|
|
76
|
+
});
|
|
74
77
|
return await this.attachMetricScales(testRuns, workflowId);
|
|
75
78
|
}
|
|
76
79
|
async getOne(req) {
|