@n8n/decorators 1.40.1 → 1.41.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/controller/index.d.ts +1 -0
- package/dist/controller/index.js +3 -1
- package/dist/controller/index.js.map +1 -1
- package/dist/controller/requires-user-quota.d.ts +1 -0
- package/dist/controller/requires-user-quota.js +11 -0
- package/dist/controller/requires-user-quota.js.map +1 -0
- package/dist/controller/types.d.ts +1 -0
- package/dist/policy-check/policy-check.d.ts +11 -1
- package/dist/policy-check/policy-check.js +2 -0
- package/dist/policy-check/policy-check.js.map +1 -1
- package/dist/policy-check/policy-cleared.d.ts +3 -1
- package/dist/policy-check/policy-cleared.js +11 -0
- package/dist/policy-check/policy-cleared.js.map +1 -1
- package/package.json +4 -4
|
@@ -12,6 +12,7 @@ export { Get, Post, Put, Patch, Delete, Head, Options } from './route';
|
|
|
12
12
|
export { Middleware } from './middleware';
|
|
13
13
|
export { ControllerRegistryMetadata } from './controller-registry-metadata';
|
|
14
14
|
export { Licensed } from './licensed';
|
|
15
|
+
export { RequiresUserQuota } from './requires-user-quota';
|
|
15
16
|
export { Deprecated } from './deprecated';
|
|
16
17
|
export { GlobalScope, ProjectScope } from './scoped';
|
|
17
18
|
export type { AccessScope, ApiKeyScopeRequirement, Arg, Controller, CorsOptions, DeprecationInfo, ErrorResponse, HandlerName, Method, ResponseDtoClass, RouteMetadata, StaticRouterMetadata, SuccessStatus, } from './types';
|
package/dist/controller/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.createIpRateLimit = exports.createUserKeyedRateLimiter = exports.createBodyKeyedRateLimiter = exports.ProjectScope = exports.GlobalScope = exports.Deprecated = exports.Licensed = exports.ControllerRegistryMetadata = exports.Middleware = exports.Options = exports.Head = exports.Delete = exports.Patch = exports.Put = exports.Post = exports.Get = exports.ApiErrorResponse = exports.ApiTags = exports.ApiSummary = exports.ApiDescription = exports.ApiResponse = exports.ApiKeyScope = exports.PublicApiController = exports.RootLevelController = exports.RestController = exports.Param = exports.Query = exports.Body = void 0;
|
|
3
|
+
exports.createIpRateLimit = exports.createUserKeyedRateLimiter = exports.createBodyKeyedRateLimiter = exports.ProjectScope = exports.GlobalScope = exports.Deprecated = exports.RequiresUserQuota = exports.Licensed = exports.ControllerRegistryMetadata = exports.Middleware = exports.Options = exports.Head = exports.Delete = exports.Patch = exports.Put = exports.Post = exports.Get = exports.ApiErrorResponse = exports.ApiTags = exports.ApiSummary = exports.ApiDescription = exports.ApiResponse = exports.ApiKeyScope = exports.PublicApiController = exports.RootLevelController = exports.RestController = exports.Param = exports.Query = exports.Body = void 0;
|
|
4
4
|
var args_1 = require("./args");
|
|
5
5
|
Object.defineProperty(exports, "Body", { enumerable: true, get: function () { return args_1.Body; } });
|
|
6
6
|
Object.defineProperty(exports, "Query", { enumerable: true, get: function () { return args_1.Query; } });
|
|
@@ -37,6 +37,8 @@ var controller_registry_metadata_1 = require("./controller-registry-metadata");
|
|
|
37
37
|
Object.defineProperty(exports, "ControllerRegistryMetadata", { enumerable: true, get: function () { return controller_registry_metadata_1.ControllerRegistryMetadata; } });
|
|
38
38
|
var licensed_1 = require("./licensed");
|
|
39
39
|
Object.defineProperty(exports, "Licensed", { enumerable: true, get: function () { return licensed_1.Licensed; } });
|
|
40
|
+
var requires_user_quota_1 = require("./requires-user-quota");
|
|
41
|
+
Object.defineProperty(exports, "RequiresUserQuota", { enumerable: true, get: function () { return requires_user_quota_1.RequiresUserQuota; } });
|
|
40
42
|
var deprecated_1 = require("./deprecated");
|
|
41
43
|
Object.defineProperty(exports, "Deprecated", { enumerable: true, get: function () { return deprecated_1.Deprecated; } });
|
|
42
44
|
var scoped_1 = require("./scoped");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/controller/index.ts"],"names":[],"mappings":";;;AAAA,+BAA4C;AAAnC,4FAAA,IAAI,OAAA;AAAE,6FAAA,KAAK,OAAA;AAAE,6FAAA,KAAK,OAAA;AAC3B,qDAAmD;AAA1C,iHAAA,cAAc,OAAA;AACvB,iEAA8D;AAArD,4HAAA,mBAAmB,OAAA;AAC5B,iEAA8D;AAArD,4HAAA,mBAAmB,OAAA;AAC5B,iDAA8C;AAArC,4GAAA,WAAW,OAAA;AACpB,+CAA6C;AAApC,2GAAA,WAAW,OAAA;AACpB,qDAAmD;AAA1C,iHAAA,cAAc,OAAA;AACvB,6CAA2C;AAAlC,yGAAA,UAAU,OAAA;AACnB,uCAAqC;AAA5B,mGAAA,OAAO,OAAA;AAChB,2DAAwD;AAA/C,sHAAA,gBAAgB,OAAA;AACzB,iCAAuE;AAA9D,4FAAA,GAAG,OAAA;AAAE,6FAAA,IAAI,OAAA;AAAE,4FAAA,GAAG,OAAA;AAAE,8FAAA,KAAK,OAAA;AAAE,+FAAA,MAAM,OAAA;AAAE,6FAAA,IAAI,OAAA;AAAE,gGAAA,OAAO,OAAA;AACrD,2CAA0C;AAAjC,wGAAA,UAAU,OAAA;AACnB,+EAA4E;AAAnE,0IAAA,0BAA0B,OAAA;AACnC,uCAAsC;AAA7B,oGAAA,QAAQ,OAAA;AACjB,2CAA0C;AAAjC,wGAAA,UAAU,OAAA;AACnB,mCAAqD;AAA5C,qGAAA,WAAW,OAAA;AAAE,sGAAA,YAAY,OAAA;AAgBlC,2CAQsB;AAHrB,wHAAA,0BAA0B,OAAA;AAC1B,wHAAA,0BAA0B,OAAA;AAC1B,+GAAA,iBAAiB,OAAA"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/controller/index.ts"],"names":[],"mappings":";;;AAAA,+BAA4C;AAAnC,4FAAA,IAAI,OAAA;AAAE,6FAAA,KAAK,OAAA;AAAE,6FAAA,KAAK,OAAA;AAC3B,qDAAmD;AAA1C,iHAAA,cAAc,OAAA;AACvB,iEAA8D;AAArD,4HAAA,mBAAmB,OAAA;AAC5B,iEAA8D;AAArD,4HAAA,mBAAmB,OAAA;AAC5B,iDAA8C;AAArC,4GAAA,WAAW,OAAA;AACpB,+CAA6C;AAApC,2GAAA,WAAW,OAAA;AACpB,qDAAmD;AAA1C,iHAAA,cAAc,OAAA;AACvB,6CAA2C;AAAlC,yGAAA,UAAU,OAAA;AACnB,uCAAqC;AAA5B,mGAAA,OAAO,OAAA;AAChB,2DAAwD;AAA/C,sHAAA,gBAAgB,OAAA;AACzB,iCAAuE;AAA9D,4FAAA,GAAG,OAAA;AAAE,6FAAA,IAAI,OAAA;AAAE,4FAAA,GAAG,OAAA;AAAE,8FAAA,KAAK,OAAA;AAAE,+FAAA,MAAM,OAAA;AAAE,6FAAA,IAAI,OAAA;AAAE,gGAAA,OAAO,OAAA;AACrD,2CAA0C;AAAjC,wGAAA,UAAU,OAAA;AACnB,+EAA4E;AAAnE,0IAAA,0BAA0B,OAAA;AACnC,uCAAsC;AAA7B,oGAAA,QAAQ,OAAA;AACjB,6DAA0D;AAAjD,wHAAA,iBAAiB,OAAA;AAC1B,2CAA0C;AAAjC,wGAAA,UAAU,OAAA;AACnB,mCAAqD;AAA5C,qGAAA,WAAW,OAAA;AAAE,sGAAA,YAAY,OAAA;AAgBlC,2CAQsB;AAHrB,wHAAA,0BAA0B,OAAA;AAC1B,wHAAA,0BAA0B,OAAA;AAC1B,+GAAA,iBAAiB,OAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const RequiresUserQuota: () => MethodDecorator;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.RequiresUserQuota = void 0;
|
|
4
|
+
const di_1 = require("@n8n/di");
|
|
5
|
+
const controller_registry_metadata_1 = require("./controller-registry-metadata");
|
|
6
|
+
const RequiresUserQuota = () => (target, handlerName) => {
|
|
7
|
+
const routeMetadata = di_1.Container.get(controller_registry_metadata_1.ControllerRegistryMetadata).getRouteMetadata(target.constructor, String(handlerName));
|
|
8
|
+
routeMetadata.requiresUserQuota = true;
|
|
9
|
+
};
|
|
10
|
+
exports.RequiresUserQuota = RequiresUserQuota;
|
|
11
|
+
//# sourceMappingURL=requires-user-quota.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"requires-user-quota.js","sourceRoot":"","sources":["../../src/controller/requires-user-quota.ts"],"names":[],"mappings":";;;AAAA,gCAAoC;AAEpC,iFAA4E;AAMrE,MAAM,iBAAiB,GAAG,GAAoB,EAAE,CAAC,CAAC,MAAM,EAAE,WAAW,EAAE,EAAE;IAC/E,MAAM,aAAa,GAAG,cAAS,CAAC,GAAG,CAAC,yDAA0B,CAAC,CAAC,gBAAgB,CAC/E,MAAM,CAAC,WAAyB,EAChC,MAAM,CAAC,WAAW,CAAC,CACnB,CAAC;IACF,aAAa,CAAC,iBAAiB,GAAG,IAAI,CAAC;AACxC,CAAC,CAAC;AANW,QAAA,iBAAiB,GAAjB,iBAAiB,CAM5B"}
|
|
@@ -58,6 +58,7 @@ export interface RouteMetadata {
|
|
|
58
58
|
ipRateLimit?: boolean | RateLimiterLimits;
|
|
59
59
|
keyedRateLimit?: KeyedRateLimiterConfig;
|
|
60
60
|
licenseFeature?: BooleanLicenseFeature;
|
|
61
|
+
requiresUserQuota?: boolean;
|
|
61
62
|
accessScope?: AccessScope;
|
|
62
63
|
apiKeyScope?: ApiKeyScopeRequirement;
|
|
63
64
|
responseDto?: ResponseDtoClass;
|
|
@@ -2,7 +2,7 @@ import type { PolicyCheckFailure, PolicyViolation } from '@n8n/api-types';
|
|
|
2
2
|
import type { Constructable } from '@n8n/di';
|
|
3
3
|
import type { INode } from 'n8n-workflow';
|
|
4
4
|
export type { PolicyViolation, PolicyCheckFailure };
|
|
5
|
-
export declare const ENFORCEMENT_POINTS: readonly ['workflowSave', 'workflowPublish', 'workflowStart', 'workflowTransfer', 'credentialDecrypt', 'contentImport'];
|
|
5
|
+
export declare const ENFORCEMENT_POINTS: readonly ['workflowSave', 'workflowPublish', 'workflowStart', 'workflowTransfer', 'credentialSave', 'credentialDecrypt', 'contentImport'];
|
|
6
6
|
export type EnforcementPoint = (typeof ENFORCEMENT_POINTS)[number];
|
|
7
7
|
export type PolicedWorkflow = {
|
|
8
8
|
readonly id: string | null;
|
|
@@ -29,6 +29,15 @@ export type WorkflowTransferContext = {
|
|
|
29
29
|
readonly workflow: PolicedWorkflow;
|
|
30
30
|
readonly targetProjectId: string | null;
|
|
31
31
|
};
|
|
32
|
+
export type PolicedCredential = {
|
|
33
|
+
readonly id: string | null;
|
|
34
|
+
readonly type: string;
|
|
35
|
+
};
|
|
36
|
+
export type CredentialSaveContext = {
|
|
37
|
+
readonly credential: PolicedCredential;
|
|
38
|
+
readonly storedCredential: PolicedCredential | null;
|
|
39
|
+
readonly projectId: string | null;
|
|
40
|
+
};
|
|
32
41
|
export type CredentialDecryptContext = {
|
|
33
42
|
readonly credentialType: string;
|
|
34
43
|
readonly credentialId: string;
|
|
@@ -60,6 +69,7 @@ export interface RegisteredPolicyCheck {
|
|
|
60
69
|
onWorkflowPublish?(ctx: WorkflowPublishContext, signal: AbortSignal): Promise<PolicyCheckResult>;
|
|
61
70
|
onWorkflowStart?(ctx: WorkflowStartContext, signal: AbortSignal): Promise<PolicyCheckResult>;
|
|
62
71
|
onWorkflowTransfer?(ctx: WorkflowTransferContext, signal: AbortSignal): Promise<PolicyCheckResult>;
|
|
72
|
+
onCredentialSave?(ctx: CredentialSaveContext, signal: AbortSignal): Promise<PolicyCheckResult>;
|
|
63
73
|
onCredentialDecrypt?(ctx: CredentialDecryptContext, signal: AbortSignal): Promise<PolicyCheckResult>;
|
|
64
74
|
onContentImport?(ctx: ContentImportContext, signal: AbortSignal): Promise<PolicyCheckResult>;
|
|
65
75
|
}
|
|
@@ -6,6 +6,7 @@ exports.ENFORCEMENT_POINTS = [
|
|
|
6
6
|
'workflowPublish',
|
|
7
7
|
'workflowStart',
|
|
8
8
|
'workflowTransfer',
|
|
9
|
+
'credentialSave',
|
|
9
10
|
'credentialDecrypt',
|
|
10
11
|
'contentImport',
|
|
11
12
|
];
|
|
@@ -14,6 +15,7 @@ exports.ENFORCEMENT_POINT_METHODS = {
|
|
|
14
15
|
workflowPublish: 'onWorkflowPublish',
|
|
15
16
|
workflowStart: 'onWorkflowStart',
|
|
16
17
|
workflowTransfer: 'onWorkflowTransfer',
|
|
18
|
+
credentialSave: 'onCredentialSave',
|
|
17
19
|
credentialDecrypt: 'onCredentialDecrypt',
|
|
18
20
|
contentImport: 'onContentImport',
|
|
19
21
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"policy-check.js","sourceRoot":"","sources":["../../src/policy-check/policy-check.ts"],"names":[],"mappings":";;;AAaa,QAAA,kBAAkB,GAAG;IACjC,cAAc;IACd,iBAAiB;IACjB,eAAe;IACf,kBAAkB;IAClB,mBAAmB;IACnB,eAAe;CACN,CAAC;
|
|
1
|
+
{"version":3,"file":"policy-check.js","sourceRoot":"","sources":["../../src/policy-check/policy-check.ts"],"names":[],"mappings":";;;AAaa,QAAA,kBAAkB,GAAG;IACjC,cAAc;IACd,iBAAiB;IACjB,eAAe;IACf,kBAAkB;IAClB,gBAAgB;IAChB,mBAAmB;IACnB,eAAe;CACN,CAAC;AAkNE,QAAA,yBAAyB,GAElC;IACH,YAAY,EAAE,gBAAgB;IAC9B,eAAe,EAAE,mBAAmB;IACpC,aAAa,EAAE,iBAAiB;IAChC,gBAAgB,EAAE,oBAAoB;IACtC,cAAc,EAAE,kBAAkB;IAClC,iBAAiB,EAAE,qBAAqB;IACxC,aAAa,EAAE,iBAAiB;CAChC,CAAC;AAUK,MAAM,mBAAmB,GAAG,CAAC,KAA4B,EAAsB,EAAE,CACvF,QAAA,kBAAkB,CAAC,MAAM,CACxB,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,KAAK,CAAC,QAAA,yBAAyB,CAAC,KAAK,CAAC,CAAC,KAAK,UAAU,CACxE,CAAC;AAHU,QAAA,mBAAmB,GAAnB,mBAAmB,CAG7B"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { brand } from './policy-brand';
|
|
2
|
-
import type { EnforcementPoint, PolicedWorkflow, PolicyDecision, PolicyVersionRef } from './policy-check';
|
|
2
|
+
import type { EnforcementPoint, PolicedCredential, PolicedWorkflow, PolicyDecision, PolicyVersionRef } from './policy-check';
|
|
3
3
|
export type PolicySubjectType = 'workflow' | 'credential';
|
|
4
4
|
export type PolicySubject = {
|
|
5
5
|
readonly type: PolicySubjectType;
|
|
@@ -7,6 +7,8 @@ export type PolicySubject = {
|
|
|
7
7
|
};
|
|
8
8
|
export declare function workflowContentSubject(workflow: Pick<PolicedWorkflow, 'nodes'>): PolicySubject;
|
|
9
9
|
export declare function workflowSubject(workflow: Pick<PolicedWorkflow, 'id' | 'nodes'>): PolicySubject;
|
|
10
|
+
export declare function credentialContentSubject(credential: Pick<PolicedCredential, 'type'>): PolicySubject;
|
|
11
|
+
export declare function credentialSubject(credential: PolicedCredential): PolicySubject;
|
|
10
12
|
export type PolicyCleared<Point extends EnforcementPoint> = {
|
|
11
13
|
readonly [brand]: 'Use the policy enforcement service — a cleared action cannot be forged';
|
|
12
14
|
readonly point: Point;
|
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.workflowContentSubject = workflowContentSubject;
|
|
4
4
|
exports.workflowSubject = workflowSubject;
|
|
5
|
+
exports.credentialContentSubject = credentialContentSubject;
|
|
6
|
+
exports.credentialSubject = credentialSubject;
|
|
5
7
|
exports.assertClearedFor = assertClearedFor;
|
|
6
8
|
const n8n_workflow_1 = require("n8n-workflow");
|
|
7
9
|
const node_crypto_1 = require("node:crypto");
|
|
@@ -15,6 +17,15 @@ function workflowSubject(workflow) {
|
|
|
15
17
|
return { type: 'workflow', id: workflow.id };
|
|
16
18
|
return workflowContentSubject(workflow);
|
|
17
19
|
}
|
|
20
|
+
function credentialContentSubject(credential) {
|
|
21
|
+
const hash = (0, node_crypto_1.createHash)('sha256').update(credential.type).digest('hex');
|
|
22
|
+
return { type: 'credential', id: hash };
|
|
23
|
+
}
|
|
24
|
+
function credentialSubject(credential) {
|
|
25
|
+
if (credential.id)
|
|
26
|
+
return { type: 'credential', id: credential.id };
|
|
27
|
+
return credentialContentSubject(credential);
|
|
28
|
+
}
|
|
18
29
|
function assertClearedFor(cleared, point, subject) {
|
|
19
30
|
if (!cleared)
|
|
20
31
|
throw new n8n_workflow_1.UnexpectedError(`No policy clearance for ${point}`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"policy-cleared.js","sourceRoot":"","sources":["../../src/policy-check/policy-cleared.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"policy-cleared.js","sourceRoot":"","sources":["../../src/policy-check/policy-cleared.ts"],"names":[],"mappings":";;;;;;;AAAA,+CAA+C;AAC/C,6CAAyC;AAEzC,iDAAuC;AAgCvC,gCAAuC,QAAwC;IAE9E,MAAM,IAAI,GAAG,IAAA,wBAAU,EAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAEvF,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC;AACvC,CAAC;AASD,yBAAgC,QAA+C;IAC9E,IAAI,QAAQ,CAAC,EAAE;QAAE,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE,EAAE,QAAQ,CAAC,EAAE,EAAE,CAAC;IAE9D,OAAO,sBAAsB,CAAC,QAAQ,CAAC,CAAC;AACzC,CAAC;AAQD,kCACC,UAA2C;IAE3C,MAAM,IAAI,GAAG,IAAA,wBAAU,EAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAExE,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC;AACzC,CAAC;AAGD,2BAAkC,UAA6B;IAC9D,IAAI,UAAU,CAAC,EAAE;QAAE,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,EAAE,EAAE,UAAU,CAAC,EAAE,EAAE,CAAC;IAEpE,OAAO,wBAAwB,CAAC,UAAU,CAAC,CAAC;AAC7C,CAAC;AA+BD,0BACC,OAAoD,EACpD,KAAuB,EACvB,OAAsB;IAEtB,IAAI,CAAC,OAAO;QAAE,MAAM,IAAI,8BAAe,CAAC,2BAA2B,KAAK,EAAE,CAAC,CAAC;IAC5E,IAAI,OAAO,CAAC,oBAAK,CAAC,KAAK,SAAS,IAAI,OAAO,CAAC,KAAK,KAAK,KAAK;QAC1D,MAAM,IAAI,8BAAe,CAAC,8BAA8B,KAAK,EAAE,CAAC,CAAC;IAClE,IAAI,OAAO,CAAC,OAAO,CAAC,IAAI,KAAK,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,KAAK,OAAO,CAAC,EAAE;QAC7E,MAAM,IAAI,8BAAe,CACxB,oBAAoB,OAAO,CAAC,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,SAAS,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC,EAAE,EAAE,CACnG,CAAC;AACJ,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@n8n/decorators",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.41.1",
|
|
4
4
|
"main": "dist/index.js",
|
|
5
5
|
"module": "src/index.ts",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -31,12 +31,12 @@
|
|
|
31
31
|
"zod": "3.25.76"
|
|
32
32
|
},
|
|
33
33
|
"dependencies": {
|
|
34
|
-
"@n8n/api-types": "1.
|
|
34
|
+
"@n8n/api-types": "1.41.1",
|
|
35
35
|
"@n8n/constants": "0.39.0",
|
|
36
36
|
"@n8n/di": "0.17.0",
|
|
37
|
-
"@n8n/permissions": "0.
|
|
37
|
+
"@n8n/permissions": "0.78.0",
|
|
38
38
|
"lodash": "4.18.1",
|
|
39
|
-
"n8n-workflow": "2.
|
|
39
|
+
"n8n-workflow": "2.41.0"
|
|
40
40
|
},
|
|
41
41
|
"license": "SEE LICENSE IN LICENSE.md",
|
|
42
42
|
"homepage": "https://n8n.io",
|