@n8n/decorators 1.36.2 → 1.37.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/dist/build.tsbuildinfo +1 -1
- package/dist/controller/api-error-response.d.ts +5 -1
- package/dist/controller/api-error-response.js +5 -2
- package/dist/controller/api-error-response.js.map +1 -1
- package/dist/controller/index.d.ts +1 -1
- package/dist/controller/index.js.map +1 -1
- package/dist/controller/types.d.ts +6 -1
- package/dist/credential-resolver/credential-resolver.d.ts +5 -5
- package/dist/index.d.ts +1 -0
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/policy-check/index.d.ts +2 -0
- package/dist/policy-check/index.js +23 -0
- package/dist/policy-check/index.js.map +1 -0
- package/dist/policy-check/policy-check-metadata.d.ts +18 -0
- package/dist/policy-check/policy-check-metadata.js +47 -0
- package/dist/policy-check/policy-check-metadata.js.map +1 -0
- package/dist/policy-check/policy-check.d.ts +80 -0
- package/dist/policy-check/policy-check.js +22 -0
- package/dist/policy-check/policy-check.js.map +1 -0
- package/dist/pubsub/pubsub-metadata.d.ts +1 -1
- package/dist/pubsub/pubsub-metadata.js.map +1 -1
- package/package.json +9 -9
|
@@ -1 +1,5 @@
|
|
|
1
|
-
|
|
1
|
+
import type { ResponseDtoClass } from './types';
|
|
2
|
+
export declare const ApiErrorResponse: (status: number, { dto, description }?: {
|
|
3
|
+
dto?: ResponseDtoClass;
|
|
4
|
+
description?: string;
|
|
5
|
+
}) => MethodDecorator;
|
|
@@ -3,9 +3,12 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.ApiErrorResponse = void 0;
|
|
4
4
|
const di_1 = require("@n8n/di");
|
|
5
5
|
const controller_registry_metadata_1 = require("./controller-registry-metadata");
|
|
6
|
-
const ApiErrorResponse = (status) => (target, handlerName) => {
|
|
6
|
+
const ApiErrorResponse = (status, { dto, description } = {}) => (target, handlerName) => {
|
|
7
7
|
const routeMetadata = di_1.Container.get(controller_registry_metadata_1.ControllerRegistryMetadata).getRouteMetadata(target.constructor, String(handlerName));
|
|
8
|
-
routeMetadata.errorResponses = [
|
|
8
|
+
routeMetadata.errorResponses = [
|
|
9
|
+
...(routeMetadata.errorResponses ?? []),
|
|
10
|
+
{ status, ...(dto ? { dto } : {}), ...(description ? { description } : {}) },
|
|
11
|
+
].sort((a, b) => a.status - b.status);
|
|
9
12
|
};
|
|
10
13
|
exports.ApiErrorResponse = ApiErrorResponse;
|
|
11
14
|
//# sourceMappingURL=api-error-response.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api-error-response.js","sourceRoot":"","sources":["../../src/controller/api-error-response.ts"],"names":[],"mappings":";;;AAAA,gCAAoC;AAEpC,iFAA4E;
|
|
1
|
+
{"version":3,"file":"api-error-response.js","sourceRoot":"","sources":["../../src/controller/api-error-response.ts"],"names":[],"mappings":";;;AAAA,gCAAoC;AAEpC,iFAA4E;AAUrE,MAAM,gBAAgB,GAC5B,CACC,MAAc,EACd,EAAE,GAAG,EAAE,WAAW,EAAE,GAAqD,EAAE,EACzD,EAAE,CACrB,CAAC,MAAM,EAAE,WAAW,EAAE,EAAE;IACvB,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,cAAc,GAAG;QAC9B,GAAG,CAAC,aAAa,CAAC,cAAc,IAAI,EAAE,CAAC;QACvC,EAAE,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE;KAC5E,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC;AACvC,CAAC,CAAC;AAdU,QAAA,gBAAgB,GAAhB,gBAAgB,CAc1B"}
|
|
@@ -14,5 +14,5 @@ export { ControllerRegistryMetadata } from './controller-registry-metadata';
|
|
|
14
14
|
export { Licensed } from './licensed';
|
|
15
15
|
export { Deprecated } from './deprecated';
|
|
16
16
|
export { GlobalScope, ProjectScope } from './scoped';
|
|
17
|
-
export type { AccessScope, ApiKeyScopeRequirement, Arg, Controller, CorsOptions, DeprecationInfo, HandlerName, Method, ResponseDtoClass, RouteMetadata, StaticRouterMetadata, SuccessStatus, } from './types';
|
|
17
|
+
export type { AccessScope, ApiKeyScopeRequirement, Arg, Controller, CorsOptions, DeprecationInfo, ErrorResponse, HandlerName, Method, ResponseDtoClass, RouteMetadata, StaticRouterMetadata, SuccessStatus, } from './types';
|
|
18
18
|
export { type RateLimiterLimits, type BodyKeyedRateLimiterConfig, type UserKeyedRateLimiterConfig, type KeyedRateLimiterConfig, createBodyKeyedRateLimiter, createUserKeyedRateLimiter, createIpRateLimit, } from './rate-limit';
|
|
@@ -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;
|
|
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"}
|
|
@@ -11,6 +11,11 @@ export type ApiKeyScopeRequirement = ApiKeyScope | {
|
|
|
11
11
|
};
|
|
12
12
|
export type ResponseDtoClass = Pick<ZodClass, 'parse'>;
|
|
13
13
|
export type SuccessStatus = 200 | 201 | 202 | 204;
|
|
14
|
+
export interface ErrorResponse {
|
|
15
|
+
status: number;
|
|
16
|
+
dto?: ResponseDtoClass;
|
|
17
|
+
description?: string;
|
|
18
|
+
}
|
|
14
19
|
export type Method = 'get' | 'post' | 'put' | 'patch' | 'delete' | 'head' | 'options';
|
|
15
20
|
export type Arg = {
|
|
16
21
|
type: 'body' | 'query';
|
|
@@ -55,7 +60,7 @@ export interface RouteMetadata {
|
|
|
55
60
|
summary?: string;
|
|
56
61
|
description?: string;
|
|
57
62
|
tags?: string[];
|
|
58
|
-
errorResponses?:
|
|
63
|
+
errorResponses?: ErrorResponse[];
|
|
59
64
|
deprecated?: DeprecationInfo;
|
|
60
65
|
args: Arg[];
|
|
61
66
|
router?: Router;
|
|
@@ -14,13 +14,13 @@ export interface CredentialResolverMetadata {
|
|
|
14
14
|
}
|
|
15
15
|
export interface ICredentialResolver {
|
|
16
16
|
metadata: CredentialResolverMetadata;
|
|
17
|
-
getSecret(credentialId: string, context: ICredentialContext, handle: CredentialResolverHandle): Promise<ICredentialDataDecryptedObject>;
|
|
18
|
-
setSecret(credentialId: string, context: ICredentialContext, data: ICredentialDataDecryptedObject, handle: CredentialResolverHandle): Promise<void>;
|
|
19
|
-
deleteSecret?(credentialId: string, context: ICredentialContext, handle: CredentialResolverHandle): Promise<void>;
|
|
17
|
+
getSecret(credentialId: string, context: ICredentialContext, handle: CredentialResolverHandle, executionId?: string): Promise<ICredentialDataDecryptedObject>;
|
|
18
|
+
setSecret(credentialId: string, context: ICredentialContext, data: ICredentialDataDecryptedObject, handle: CredentialResolverHandle, executionId?: string): Promise<void>;
|
|
19
|
+
deleteSecret?(credentialId: string, context: ICredentialContext, handle: CredentialResolverHandle, executionId?: string): Promise<void>;
|
|
20
20
|
deleteAllSecrets?(handle: CredentialResolverHandle): Promise<void>;
|
|
21
21
|
validateOptions(options: CredentialResolverConfiguration): Promise<void>;
|
|
22
|
-
validateIdentity?(context: ICredentialContext, handle: CredentialResolverHandle): Promise<void>;
|
|
23
|
-
resolveOwningUserId?(context: ICredentialContext, handle: CredentialResolverHandle): Promise<string | undefined>;
|
|
22
|
+
validateIdentity?(context: ICredentialContext, handle: CredentialResolverHandle, executionId?: string): Promise<void>;
|
|
23
|
+
resolveOwningUserId?(context: ICredentialContext, handle: CredentialResolverHandle, executionId?: string): Promise<string | undefined>;
|
|
24
24
|
init?(): Promise<void>;
|
|
25
25
|
}
|
|
26
26
|
export type CredentialResolverClass = Constructable<ICredentialResolver>;
|
package/dist/index.d.ts
CHANGED
|
@@ -10,6 +10,7 @@ export * from './context-establishment';
|
|
|
10
10
|
export * from './credential-resolver';
|
|
11
11
|
export * from './module';
|
|
12
12
|
export * from './multi-main';
|
|
13
|
+
export * from './policy-check';
|
|
13
14
|
export * from './pubsub';
|
|
14
15
|
export { Redactable } from './redactable';
|
|
15
16
|
export * from './shutdown';
|
package/dist/index.js
CHANGED
|
@@ -29,6 +29,7 @@ __exportStar(require("./context-establishment"), exports);
|
|
|
29
29
|
__exportStar(require("./credential-resolver"), exports);
|
|
30
30
|
__exportStar(require("./module"), exports);
|
|
31
31
|
__exportStar(require("./multi-main"), exports);
|
|
32
|
+
__exportStar(require("./policy-check"), exports);
|
|
32
33
|
__exportStar(require("./pubsub"), exports);
|
|
33
34
|
var redactable_1 = require("./redactable");
|
|
34
35
|
Object.defineProperty(exports, "Redactable", { enumerable: true, get: function () { return redactable_1.Redactable; } });
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,yDAAuC;AACvC,+CAA6B;AAC7B,4CAA0B;AAC1B,uCAAsC;AAA7B,oGAAA,QAAQ,OAAA;AACjB,wDAAsC;AACtC,uCAAsC;AAA7B,oGAAA,QAAQ,OAAA;AACjB,iDAA+B;AAC/B,kDAAgC;AAChC,0DAAwC;AACxC,wDAAsC;AACtC,2CAAyB;AACzB,+CAA6B;AAC7B,2CAAyB;AACzB,2CAA0C;AAAjC,wGAAA,UAAU,OAAA;AACnB,6CAA2B;AAC3B,2DAAyC;AAEzC,iCAAgC;AAAvB,8FAAA,KAAK,OAAA"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,yDAAuC;AACvC,+CAA6B;AAC7B,4CAA0B;AAC1B,uCAAsC;AAA7B,oGAAA,QAAQ,OAAA;AACjB,wDAAsC;AACtC,uCAAsC;AAA7B,oGAAA,QAAQ,OAAA;AACjB,iDAA+B;AAC/B,kDAAgC;AAChC,0DAAwC;AACxC,wDAAsC;AACtC,2CAAyB;AACzB,+CAA6B;AAC7B,iDAA+B;AAC/B,2CAAyB;AACzB,2CAA0C;AAAjC,wGAAA,UAAU,OAAA;AACnB,6CAA2B;AAC3B,2DAAyC;AAEzC,iCAAgC;AAAvB,8FAAA,KAAK,OAAA"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
exports.UnknownEnforcementPointError = exports.PolicyCheckMetadata = exports.PolicyCheck = void 0;
|
|
18
|
+
var policy_check_metadata_1 = require("./policy-check-metadata");
|
|
19
|
+
Object.defineProperty(exports, "PolicyCheck", { enumerable: true, get: function () { return policy_check_metadata_1.PolicyCheck; } });
|
|
20
|
+
Object.defineProperty(exports, "PolicyCheckMetadata", { enumerable: true, get: function () { return policy_check_metadata_1.PolicyCheckMetadata; } });
|
|
21
|
+
Object.defineProperty(exports, "UnknownEnforcementPointError", { enumerable: true, get: function () { return policy_check_metadata_1.UnknownEnforcementPointError; } });
|
|
22
|
+
__exportStar(require("./policy-check"), exports);
|
|
23
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/policy-check/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AASA,iEAIiC;AAHhC,oHAAA,WAAW,OAAA;AACX,4HAAA,mBAAmB,OAAA;AACnB,qIAAA,4BAA4B,OAAA;AAE7B,iDAA+B"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { UnexpectedError } from 'n8n-workflow';
|
|
2
|
+
import { type PolicyCheckClass, type RegisteredPolicyCheck } from './policy-check';
|
|
3
|
+
type PolicyCheckEntry = {
|
|
4
|
+
class: PolicyCheckClass;
|
|
5
|
+
};
|
|
6
|
+
export declare class UnknownEnforcementPointError extends UnexpectedError {
|
|
7
|
+
constructor(checkClassName: string, unknownMethods: string[]);
|
|
8
|
+
}
|
|
9
|
+
export declare class PolicyCheckMetadata {
|
|
10
|
+
private readonly policyChecks;
|
|
11
|
+
register(entry: PolicyCheckEntry): void;
|
|
12
|
+
getClasses(): PolicyCheckClass[];
|
|
13
|
+
}
|
|
14
|
+
type DecoratedPolicyCheckClass = PolicyCheckClass & {
|
|
15
|
+
readonly prototype: RegisteredPolicyCheck;
|
|
16
|
+
};
|
|
17
|
+
export declare const PolicyCheck: () => <T extends DecoratedPolicyCheckClass>(target: T) => any;
|
|
18
|
+
export {};
|
|
@@ -0,0 +1,47 @@
|
|
|
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
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.PolicyCheck = exports.PolicyCheckMetadata = exports.UnknownEnforcementPointError = void 0;
|
|
10
|
+
const di_1 = require("@n8n/di");
|
|
11
|
+
const n8n_workflow_1 = require("n8n-workflow");
|
|
12
|
+
const policy_check_1 = require("./policy-check");
|
|
13
|
+
class UnknownEnforcementPointError extends n8n_workflow_1.UnexpectedError {
|
|
14
|
+
constructor(checkClassName, unknownMethods) {
|
|
15
|
+
super(`Policy check "${checkClassName}" declares ${unknownMethods.join(', ')}, which ` +
|
|
16
|
+
`match no known enforcement point. Known points: ${policy_check_1.ENFORCEMENT_POINTS.join(', ')}.`);
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
exports.UnknownEnforcementPointError = UnknownEnforcementPointError;
|
|
20
|
+
let PolicyCheckMetadata = class PolicyCheckMetadata {
|
|
21
|
+
constructor() {
|
|
22
|
+
this.policyChecks = new Set();
|
|
23
|
+
}
|
|
24
|
+
register(entry) {
|
|
25
|
+
this.policyChecks.add(entry);
|
|
26
|
+
}
|
|
27
|
+
getClasses() {
|
|
28
|
+
return [...this.policyChecks.values()].map((entry) => entry.class);
|
|
29
|
+
}
|
|
30
|
+
};
|
|
31
|
+
exports.PolicyCheckMetadata = PolicyCheckMetadata;
|
|
32
|
+
exports.PolicyCheckMetadata = PolicyCheckMetadata = __decorate([
|
|
33
|
+
(0, di_1.Service)()
|
|
34
|
+
], PolicyCheckMetadata);
|
|
35
|
+
const KNOWN_POINT_METHODS = new Set(Object.values(policy_check_1.ENFORCEMENT_POINT_METHODS));
|
|
36
|
+
function assertPointsAreKnown(target) {
|
|
37
|
+
const unknown = Object.getOwnPropertyNames(target.prototype).filter((name) => /^on[A-Z]/.test(name) && !KNOWN_POINT_METHODS.has(name));
|
|
38
|
+
if (unknown.length > 0)
|
|
39
|
+
throw new UnknownEnforcementPointError(target.name, unknown);
|
|
40
|
+
}
|
|
41
|
+
const PolicyCheck = () => (target) => {
|
|
42
|
+
assertPointsAreKnown(target);
|
|
43
|
+
di_1.Container.get(PolicyCheckMetadata).register({ class: target });
|
|
44
|
+
return (0, di_1.Service)()(target);
|
|
45
|
+
};
|
|
46
|
+
exports.PolicyCheck = PolicyCheck;
|
|
47
|
+
//# sourceMappingURL=policy-check-metadata.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"policy-check-metadata.js","sourceRoot":"","sources":["../../src/policy-check/policy-check-metadata.ts"],"names":[],"mappings":";;;;;;;;;AAAA,gCAA6C;AAC7C,+CAA+C;AAE/C,iDAKwB;AAoBxB,kCAA0C,SAAQ,8BAAe;IAChE,YAAY,cAAsB,EAAE,cAAwB;QAC3D,KAAK,CACJ,iBAAiB,cAAc,cAAc,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU;YAC/E,mDAAmD,iCAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CACpF,CAAC;IACH,CAAC;CACD;;AAmBM,IAAM,mBAAmB,GAAzB,MAAM,mBAAmB;IAAzB;QACW,iBAAY,GAA0B,IAAI,GAAG,EAAE,CAAC;IAiBlE,CAAC;IARA,QAAQ,CAAC,KAAuB;QAC/B,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IAC9B,CAAC;IAGD,UAAU;QACT,OAAO,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACpE,CAAC;CACD,CAAA;;8BAlBY,mBAAmB;IAD/B,IAAA,YAAO,GAAE;GACG,mBAAmB,CAkB/B;AAOD,MAAM,mBAAmB,GAAG,IAAI,GAAG,CAAS,MAAM,CAAC,MAAM,CAAC,wCAAyB,CAAC,CAAC,CAAC;AAYtF,SAAS,oBAAoB,CAAC,MAAiC;IAC9D,MAAM,OAAO,GAAG,MAAM,CAAC,mBAAmB,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,MAAM,CAClE,CAAC,IAAI,EAAE,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,IAAI,CAAC,CACjE,CAAC;IAEF,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC;QAAE,MAAM,IAAI,4BAA4B,CAAC,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;AACtF,CAAC;AA0BM,MAAM,WAAW,GACvB,GAAG,EAAE,CACL,CAAsC,MAAS,EAAE,EAAE;IAClD,oBAAoB,CAAC,MAAM,CAAC,CAAC;IAE7B,cAAS,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC,QAAQ,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;IAG/D,OAAO,IAAA,YAAO,GAAE,CAAC,MAAM,CAAC,CAAC;AAC1B,CAAC,CAAC;AATU,QAAA,WAAW,GAAX,WAAW,CASrB"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import type { Constructable } from '@n8n/di';
|
|
2
|
+
import type { INode } from 'n8n-workflow';
|
|
3
|
+
export declare const ENFORCEMENT_POINTS: readonly ['workflowSave', 'workflowPublish', 'workflowStart', 'workflowTransfer', 'credentialDecrypt', 'contentImport'];
|
|
4
|
+
export type EnforcementPoint = (typeof ENFORCEMENT_POINTS)[number];
|
|
5
|
+
export type PolicedWorkflow = {
|
|
6
|
+
readonly id: string | null;
|
|
7
|
+
readonly name: string;
|
|
8
|
+
readonly nodes: readonly INode[];
|
|
9
|
+
};
|
|
10
|
+
export type CredentialConsumer = {
|
|
11
|
+
readonly nodeType: string;
|
|
12
|
+
};
|
|
13
|
+
export type WorkflowSaveContext = {
|
|
14
|
+
readonly workflow: PolicedWorkflow;
|
|
15
|
+
readonly storedWorkflow: PolicedWorkflow | null;
|
|
16
|
+
readonly projectId: string | null;
|
|
17
|
+
};
|
|
18
|
+
export type WorkflowPublishContext = {
|
|
19
|
+
readonly workflow: PolicedWorkflow;
|
|
20
|
+
readonly projectId: string | null;
|
|
21
|
+
};
|
|
22
|
+
export type WorkflowStartContext = {
|
|
23
|
+
readonly workflow: PolicedWorkflow;
|
|
24
|
+
readonly projectId: string | null;
|
|
25
|
+
};
|
|
26
|
+
export type WorkflowTransferContext = {
|
|
27
|
+
readonly workflow: PolicedWorkflow;
|
|
28
|
+
readonly targetProjectId: string | null;
|
|
29
|
+
};
|
|
30
|
+
export type CredentialDecryptContext = {
|
|
31
|
+
readonly credentialType: string;
|
|
32
|
+
readonly credentialId: string;
|
|
33
|
+
readonly consumer: CredentialConsumer | null;
|
|
34
|
+
readonly projectId: string | null;
|
|
35
|
+
};
|
|
36
|
+
export type ContentImportContext = {
|
|
37
|
+
readonly workflow: PolicedWorkflow;
|
|
38
|
+
readonly projectId: string | null;
|
|
39
|
+
};
|
|
40
|
+
export type PolicyViolation = {
|
|
41
|
+
kind: string;
|
|
42
|
+
checkId: string;
|
|
43
|
+
message: string;
|
|
44
|
+
subject?: string;
|
|
45
|
+
subjectType?: string;
|
|
46
|
+
scope?: string;
|
|
47
|
+
matchedRuleId?: string;
|
|
48
|
+
};
|
|
49
|
+
export type PolicyVersionRef = {
|
|
50
|
+
scope: string;
|
|
51
|
+
version: number;
|
|
52
|
+
};
|
|
53
|
+
export type PolicyCheckFailure = {
|
|
54
|
+
checkId: string;
|
|
55
|
+
correlationId: string;
|
|
56
|
+
};
|
|
57
|
+
export type PolicyCheckResult = {
|
|
58
|
+
violations: PolicyViolation[];
|
|
59
|
+
policyVersions?: PolicyVersionRef[];
|
|
60
|
+
};
|
|
61
|
+
export type PolicyDecision = {
|
|
62
|
+
violations: PolicyViolation[];
|
|
63
|
+
policyVersions?: PolicyVersionRef[];
|
|
64
|
+
checkErrors?: PolicyCheckFailure[];
|
|
65
|
+
};
|
|
66
|
+
export interface RegisteredPolicyCheck {
|
|
67
|
+
id: string;
|
|
68
|
+
onWorkflowSave?(ctx: WorkflowSaveContext, signal: AbortSignal): Promise<PolicyCheckResult>;
|
|
69
|
+
onWorkflowPublish?(ctx: WorkflowPublishContext, signal: AbortSignal): Promise<PolicyCheckResult>;
|
|
70
|
+
onWorkflowStart?(ctx: WorkflowStartContext, signal: AbortSignal): Promise<PolicyCheckResult>;
|
|
71
|
+
onWorkflowTransfer?(ctx: WorkflowTransferContext, signal: AbortSignal): Promise<PolicyCheckResult>;
|
|
72
|
+
onCredentialDecrypt?(ctx: CredentialDecryptContext, signal: AbortSignal): Promise<PolicyCheckResult>;
|
|
73
|
+
onContentImport?(ctx: ContentImportContext, signal: AbortSignal): Promise<PolicyCheckResult>;
|
|
74
|
+
}
|
|
75
|
+
export type PolicyCheckMethod = `on${Capitalize<EnforcementPoint>}`;
|
|
76
|
+
export declare const ENFORCEMENT_POINT_METHODS: {
|
|
77
|
+
readonly [P in EnforcementPoint]: `on${Capitalize<P>}`;
|
|
78
|
+
};
|
|
79
|
+
export type PolicyCheckClass = Constructable<RegisteredPolicyCheck>;
|
|
80
|
+
export declare const pointsImplementedBy: (check: RegisteredPolicyCheck) => EnforcementPoint[];
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.pointsImplementedBy = exports.ENFORCEMENT_POINT_METHODS = exports.ENFORCEMENT_POINTS = void 0;
|
|
4
|
+
exports.ENFORCEMENT_POINTS = [
|
|
5
|
+
'workflowSave',
|
|
6
|
+
'workflowPublish',
|
|
7
|
+
'workflowStart',
|
|
8
|
+
'workflowTransfer',
|
|
9
|
+
'credentialDecrypt',
|
|
10
|
+
'contentImport',
|
|
11
|
+
];
|
|
12
|
+
exports.ENFORCEMENT_POINT_METHODS = {
|
|
13
|
+
workflowSave: 'onWorkflowSave',
|
|
14
|
+
workflowPublish: 'onWorkflowPublish',
|
|
15
|
+
workflowStart: 'onWorkflowStart',
|
|
16
|
+
workflowTransfer: 'onWorkflowTransfer',
|
|
17
|
+
credentialDecrypt: 'onCredentialDecrypt',
|
|
18
|
+
contentImport: 'onContentImport',
|
|
19
|
+
};
|
|
20
|
+
const pointsImplementedBy = (check) => exports.ENFORCEMENT_POINTS.filter((point) => typeof check[exports.ENFORCEMENT_POINT_METHODS[point]] === 'function');
|
|
21
|
+
exports.pointsImplementedBy = pointsImplementedBy;
|
|
22
|
+
//# sourceMappingURL=policy-check.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"policy-check.js","sourceRoot":"","sources":["../../src/policy-check/policy-check.ts"],"names":[],"mappings":";;;AAUa,QAAA,kBAAkB,GAAG;IACjC,cAAc;IACd,iBAAiB;IACjB,eAAe;IACf,kBAAkB;IAClB,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,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,6 +1,6 @@
|
|
|
1
1
|
import type { InstanceRole, InstanceType } from '@n8n/constants';
|
|
2
2
|
import type { EventHandler } from '../types';
|
|
3
|
-
export type PubSubEventName = 'add-webhooks-triggers-and-pollers' | 'remove-triggers-and-pollers' | 'clear-test-webhooks' | 'display-workflow-activation' | 'display-workflow-deactivation' | 'display-workflow-activation-error' | 'display-workflow-publication-status' | 'workflow-publish-wake-up' | 'community-package-install' | 'community-package-uninstall' | 'community-package-update' | 'get-worker-status' | 'stop-execution' | 'reload-external-secrets-providers' | 'reload-license' | 'reload-oidc-config' | 'reload-saml-config' | 'reload-overwrite-credentials' | 'response-to-get-worker-status' | 'restart-event-bus' | 'relay-execution-lifecycle-event' | 'relay-agent-execution-update' | 'relay-chat-stream-event' | 'relay-instance-ai-event' | 'relay-instance-ai-task-control' | 'relay-chat-human-message' | 'relay-chat-message-edit' | 'reload-sso-provisioning-configuration' | 'reload-source-control-config' | 'reload-mcp-registry' | 'reload-otel-config' | 'reload-instance-ai-settings' | 'cancel-test-run' | 'cancel-collection' | 'agent-chat-integration-changed' | 'agent-chat-subscription-changed' | 'agent-config-changed' | 'agent-tasks-changed' | 'redaction-floor-changed';
|
|
3
|
+
export type PubSubEventName = 'add-webhooks-triggers-and-pollers' | 'remove-triggers-and-pollers' | 'clear-test-webhooks' | 'display-workflow-activation' | 'display-workflow-deactivation' | 'display-workflow-activation-error' | 'display-workflow-publication-status' | 'workflow-publish-wake-up' | 'community-package-install' | 'community-package-uninstall' | 'community-package-update' | 'get-worker-status' | 'stop-execution' | 'reload-external-secrets-providers' | 'reload-license' | 'reload-oidc-config' | 'reload-saml-config' | 'reload-overwrite-credentials' | 'response-to-get-worker-status' | 'restart-event-bus' | 'relay-execution-lifecycle-event' | 'relay-agent-execution-update' | 'relay-chat-stream-event' | 'relay-instance-ai-event' | 'relay-instance-ai-task-control' | 'relay-chat-human-message' | 'relay-chat-message-edit' | 'reload-sso-provisioning-configuration' | 'reload-source-control-config' | 'reload-mcp-registry' | 'reload-otel-config' | 'reload-instance-ai-settings' | 'cancel-test-run' | 'cancel-collection' | 'agent-chat-integration-changed' | 'agent-chat-subscription-changed' | 'agent-chat-leader-channel-request' | 'agent-chat-leader-channel-result' | 'agent-config-changed' | 'agent-tasks-changed' | 'redaction-floor-changed';
|
|
4
4
|
export type PubSubEventFilter = {
|
|
5
5
|
instanceType: 'main';
|
|
6
6
|
instanceRole?: Omit<InstanceRole, 'unset'>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pubsub-metadata.js","sourceRoot":"","sources":["../../src/pubsub/pubsub-metadata.ts"],"names":[],"mappings":";;;;;;;;;AACA,gCAAkC;
|
|
1
|
+
{"version":3,"file":"pubsub-metadata.js","sourceRoot":"","sources":["../../src/pubsub/pubsub-metadata.ts"],"names":[],"mappings":";;;;;;;;;AACA,gCAAkC;AA4D3B,IAAM,cAAc,GAApB,MAAM,cAAc;IAApB;QACW,aAAQ,GAAyB,EAAE,CAAC;IAStD,CAAC;IAPA,QAAQ,CAAC,OAA2B;QACnC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC7B,CAAC;IAED,WAAW;QACV,OAAO,IAAI,CAAC,QAAQ,CAAC;IACtB,CAAC;CACD,CAAA;;yBAVY,cAAc;IAD1B,IAAA,YAAO,GAAE;GACG,cAAc,CAU1B"}
|
package/package.json
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@n8n/decorators",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.37.0",
|
|
4
4
|
"main": "dist/index.js",
|
|
5
5
|
"module": "src/index.ts",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
7
7
|
"files": [
|
|
8
8
|
"dist/**/*",
|
|
9
|
-
"
|
|
10
|
-
"
|
|
9
|
+
"LICENSE_EE.md",
|
|
10
|
+
"LICENSE.md"
|
|
11
11
|
],
|
|
12
12
|
"devDependencies": {
|
|
13
13
|
"@types/express": "^5.0.1",
|
|
@@ -15,16 +15,16 @@
|
|
|
15
15
|
"typescript": "7.0.2",
|
|
16
16
|
"vitest": "^4.1.9",
|
|
17
17
|
"zod": "3.25.76",
|
|
18
|
-
"@n8n/
|
|
19
|
-
"@n8n/
|
|
18
|
+
"@n8n/typescript-config": "1.10.0",
|
|
19
|
+
"@n8n/vitest-config": "1.21.0"
|
|
20
20
|
},
|
|
21
21
|
"dependencies": {
|
|
22
22
|
"lodash": "4.18.1",
|
|
23
|
-
"@n8n/api-types": "1.
|
|
23
|
+
"@n8n/api-types": "1.37.0",
|
|
24
|
+
"@n8n/constants": "0.36.0",
|
|
24
25
|
"@n8n/di": "0.16.0",
|
|
25
|
-
"
|
|
26
|
-
"n8n
|
|
27
|
-
"@n8n/constants": "0.35.0"
|
|
26
|
+
"n8n-workflow": "2.37.0",
|
|
27
|
+
"@n8n/permissions": "0.74.0"
|
|
28
28
|
},
|
|
29
29
|
"license": "SEE LICENSE IN LICENSE.md",
|
|
30
30
|
"homepage": "https://n8n.io",
|