pepr 0.12.2 → 0.13.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/CODE_OF_CONDUCT.md +83 -0
- package/CONTRIBUTING.md +70 -0
- package/README.md +28 -30
- package/dist/cli.js +644 -679
- package/dist/controller.js +13 -81
- package/dist/lib/assets/deploy.d.ts +3 -0
- package/dist/lib/assets/deploy.d.ts.map +1 -0
- package/dist/lib/assets/index.d.ts +18 -0
- package/dist/lib/assets/index.d.ts.map +1 -0
- package/dist/lib/assets/loader.d.ts +14 -0
- package/dist/lib/assets/loader.d.ts.map +1 -0
- package/dist/lib/assets/networking.d.ts +6 -0
- package/dist/lib/assets/networking.d.ts.map +1 -0
- package/dist/lib/assets/pods.d.ts +8 -0
- package/dist/lib/assets/pods.d.ts.map +1 -0
- package/dist/lib/assets/rbac.d.ts +11 -0
- package/dist/lib/assets/rbac.d.ts.map +1 -0
- package/dist/lib/assets/webhooks.d.ts +6 -0
- package/dist/lib/assets/webhooks.d.ts.map +1 -0
- package/dist/lib/assets/yaml.d.ts +4 -0
- package/dist/lib/assets/yaml.d.ts.map +1 -0
- package/dist/lib/capability.d.ts +1 -3
- package/dist/lib/capability.d.ts.map +1 -1
- package/dist/lib/controller.d.ts +45 -10
- package/dist/lib/controller.d.ts.map +1 -1
- package/dist/lib/filter.d.ts +1 -1
- package/dist/lib/filter.d.ts.map +1 -1
- package/dist/lib/k8s/index.d.ts +2 -1
- package/dist/lib/k8s/index.d.ts.map +1 -1
- package/dist/lib/k8s/kinds.d.ts.map +1 -1
- package/dist/lib/k8s/types.d.ts +13 -13
- package/dist/lib/k8s/types.d.ts.map +1 -1
- package/dist/lib/k8s/upstream.d.ts +2 -2
- package/dist/lib/k8s/upstream.d.ts.map +1 -1
- package/dist/lib/logger.d.ts +8 -54
- package/dist/lib/logger.d.ts.map +1 -1
- package/dist/lib/metrics.d.ts +11 -4
- package/dist/lib/metrics.d.ts.map +1 -1
- package/dist/lib/module.d.ts +2 -2
- package/dist/lib/module.d.ts.map +1 -1
- package/dist/lib/mutate-processor.d.ts +5 -0
- package/dist/lib/mutate-processor.d.ts.map +1 -0
- package/dist/lib/{request.d.ts → mutate-request.d.ts} +5 -5
- package/dist/lib/mutate-request.d.ts.map +1 -0
- package/dist/lib/types.d.ts +45 -46
- package/dist/lib/types.d.ts.map +1 -1
- package/dist/lib/validate-processor.d.ts +4 -0
- package/dist/lib/validate-processor.d.ts.map +1 -0
- package/dist/lib/validate-request.d.ts +54 -0
- package/dist/lib/validate-request.d.ts.map +1 -0
- package/dist/lib.d.ts +3 -2
- package/dist/lib.d.ts.map +1 -1
- package/dist/lib.js +502 -302
- package/dist/lib.js.map +4 -4
- package/package.json +15 -12
- package/src/cli.ts +2 -11
- package/src/lib/assets/deploy.ts +179 -0
- package/src/lib/assets/index.ts +46 -0
- package/src/lib/assets/loader.ts +49 -0
- package/src/lib/assets/networking.ts +58 -0
- package/src/lib/assets/pods.ts +148 -0
- package/src/lib/assets/rbac.ts +57 -0
- package/src/lib/assets/webhooks.ts +139 -0
- package/src/lib/assets/yaml.ts +75 -0
- package/src/lib/capability.ts +54 -44
- package/src/lib/controller.ts +171 -89
- package/src/lib/fetch.ts +1 -1
- package/src/lib/filter.ts +1 -3
- package/src/lib/k8s/index.ts +4 -1
- package/src/lib/k8s/kinds.ts +40 -0
- package/src/lib/k8s/types.ts +16 -14
- package/src/lib/k8s/upstream.ts +5 -1
- package/src/lib/logger.ts +14 -125
- package/src/lib/metrics.ts +67 -23
- package/src/lib/module.ts +13 -11
- package/src/lib/{processor.ts → mutate-processor.ts} +37 -28
- package/src/lib/{request.ts → mutate-request.ts} +4 -4
- package/src/lib/types.ts +51 -51
- package/src/lib/validate-processor.ts +68 -0
- package/src/lib/validate-request.ts +94 -0
- package/src/lib.ts +4 -2
- package/src/runtime/controller.ts +1 -1
- package/dist/lib/k8s/webhook.d.ts +0 -37
- package/dist/lib/k8s/webhook.d.ts.map +0 -1
- package/dist/lib/processor.d.ts +0 -5
- package/dist/lib/processor.d.ts.map +0 -1
- package/dist/lib/request.d.ts.map +0 -1
- package/src/lib/k8s/webhook.ts +0 -643
|
@@ -4,7 +4,7 @@ import { DeepPartial } from "./types";
|
|
|
4
4
|
* The RequestWrapper class provides methods to modify Kubernetes objects in the context
|
|
5
5
|
* of a mutating webhook request.
|
|
6
6
|
*/
|
|
7
|
-
export declare class
|
|
7
|
+
export declare class PeprMutateRequest<T extends KubernetesObject> {
|
|
8
8
|
private _input;
|
|
9
9
|
Raw: T;
|
|
10
10
|
get PermitSideEffects(): boolean;
|
|
@@ -24,7 +24,7 @@ export declare class PeprRequest<T extends KubernetesObject> {
|
|
|
24
24
|
*/
|
|
25
25
|
get Request(): Request<T>;
|
|
26
26
|
/**
|
|
27
|
-
* Creates a new instance of the
|
|
27
|
+
* Creates a new instance of the action class.
|
|
28
28
|
* @param input - The request object containing the Kubernetes resource to modify.
|
|
29
29
|
*/
|
|
30
30
|
constructor(_input: Request<T>);
|
|
@@ -38,14 +38,14 @@ export declare class PeprRequest<T extends KubernetesObject> {
|
|
|
38
38
|
* Updates a label on the Kubernetes resource.
|
|
39
39
|
* @param key - The key of the label to update.
|
|
40
40
|
* @param value - The value of the label.
|
|
41
|
-
* @returns The current
|
|
41
|
+
* @returns The current action instance for method chaining.
|
|
42
42
|
*/
|
|
43
43
|
SetLabel(key: string, value: string): this;
|
|
44
44
|
/**
|
|
45
45
|
* Updates an annotation on the Kubernetes resource.
|
|
46
46
|
* @param key - The key of the annotation to update.
|
|
47
47
|
* @param value - The value of the annotation.
|
|
48
|
-
* @returns The current
|
|
48
|
+
* @returns The current action instance for method chaining.
|
|
49
49
|
*/
|
|
50
50
|
SetAnnotation(key: string, value: string): this;
|
|
51
51
|
/**
|
|
@@ -75,4 +75,4 @@ export declare class PeprRequest<T extends KubernetesObject> {
|
|
|
75
75
|
*/
|
|
76
76
|
HasAnnotation(key: string): boolean;
|
|
77
77
|
}
|
|
78
|
-
//# sourceMappingURL=request.d.ts.map
|
|
78
|
+
//# sourceMappingURL=mutate-request.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mutate-request.d.ts","sourceRoot":"","sources":["../../src/lib/mutate-request.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,gBAAgB,EAAa,OAAO,EAAE,MAAM,aAAa,CAAC;AACnE,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAEtC;;;GAGG;AACH,qBAAa,iBAAiB,CAAC,CAAC,SAAS,gBAAgB;IAmC3C,OAAO,CAAC,MAAM;IAlCnB,GAAG,EAAE,CAAC,CAAC;IAEd,IAAI,iBAAiB,YAEpB;IAED;;;OAGG;IACH,IAAI,QAAQ,wBAEX;IAED;;;OAGG;IACH,IAAI,WAAW,kBAEd;IAED;;;OAGG;IACH,IAAI,OAAO,eAEV;IAED;;;OAGG;gBACiB,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IActC;;;;OAIG;IACH,KAAK,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC,CAAC;IAIzB;;;;;OAKG;IACH,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM;IAUnC;;;;;OAKG;IACH,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM;IAUxC;;;;OAIG;IACH,WAAW,CAAC,GAAG,EAAE,MAAM;IAQvB;;;;OAIG;IACH,gBAAgB,CAAC,GAAG,EAAE,MAAM;IAQ5B;;;;;OAKG;IACH,QAAQ,CAAC,GAAG,EAAE,MAAM;IAIpB;;;;;OAKG;IACH,aAAa,CAAC,GAAG,EAAE,MAAM;CAG1B"}
|
package/dist/lib/types.d.ts
CHANGED
|
@@ -1,17 +1,10 @@
|
|
|
1
1
|
import { GroupVersionKind, KubernetesObject, WebhookIgnore } from "./k8s/types";
|
|
2
|
-
import {
|
|
2
|
+
import { PeprMutateRequest } from "./mutate-request";
|
|
3
|
+
import { PeprValidateRequest } from "./validate-request";
|
|
3
4
|
export type PackageJSON = {
|
|
4
5
|
description: string;
|
|
5
6
|
pepr: ModuleConfig;
|
|
6
7
|
};
|
|
7
|
-
/**
|
|
8
|
-
* The behavior of this module when an error occurs.
|
|
9
|
-
*/
|
|
10
|
-
export declare enum ErrorBehavior {
|
|
11
|
-
ignore = "ignore",
|
|
12
|
-
audit = "audit",
|
|
13
|
-
reject = "reject"
|
|
14
|
-
}
|
|
15
8
|
/**
|
|
16
9
|
* The phase of the Kubernetes admission webhook that the capability is registered for.
|
|
17
10
|
*
|
|
@@ -28,7 +21,7 @@ export type DeepPartial<T> = {
|
|
|
28
21
|
[P in keyof T]?: T[P] extends object ? DeepPartial<T[P]> : T[P];
|
|
29
22
|
};
|
|
30
23
|
/**
|
|
31
|
-
* The type of Kubernetes mutating webhook event that the
|
|
24
|
+
* The type of Kubernetes mutating webhook event that the action is registered for.
|
|
32
25
|
*/
|
|
33
26
|
export declare enum Event {
|
|
34
27
|
Create = "CREATE",
|
|
@@ -51,13 +44,6 @@ export interface CapabilityCfg {
|
|
|
51
44
|
* This does not supersede the `alwaysIgnore` global configuration.
|
|
52
45
|
*/
|
|
53
46
|
namespaces?: string[];
|
|
54
|
-
/**
|
|
55
|
-
* FUTURE USE.
|
|
56
|
-
*
|
|
57
|
-
* Declare if this capability should be used for mutation or validation. Currently this is not used
|
|
58
|
-
* and everything is considered a mutation.
|
|
59
|
-
*/
|
|
60
|
-
mutateOrValidate?: HookPhase;
|
|
61
47
|
}
|
|
62
48
|
export type ModuleSigning = {
|
|
63
49
|
/**
|
|
@@ -86,7 +72,7 @@ export type ModuleConfig = {
|
|
|
86
72
|
/** A description of the Pepr module and what it does. */
|
|
87
73
|
description?: string;
|
|
88
74
|
/** Reject K8s resource AdmissionRequests on error. */
|
|
89
|
-
onError
|
|
75
|
+
onError?: string;
|
|
90
76
|
/** Configure global exclusions that will never be processed by Pepr. */
|
|
91
77
|
alwaysIgnore: WebhookIgnore;
|
|
92
78
|
/**
|
|
@@ -99,17 +85,19 @@ export type ModuleConfig = {
|
|
|
99
85
|
};
|
|
100
86
|
export type GenericClass = abstract new () => any;
|
|
101
87
|
export type WhenSelector<T extends GenericClass> = {
|
|
102
|
-
/** Register
|
|
88
|
+
/** Register an action to be executed when a Kubernetes resource is created or updated. */
|
|
103
89
|
IsCreatedOrUpdated: () => BindingAll<T>;
|
|
104
|
-
/** Register
|
|
90
|
+
/** Register an action to be executed when a Kubernetes resource is created. */
|
|
105
91
|
IsCreated: () => BindingAll<T>;
|
|
106
|
-
/** Register
|
|
92
|
+
/** Register ann action to be executed when a Kubernetes resource is updated. */
|
|
107
93
|
IsUpdated: () => BindingAll<T>;
|
|
108
|
-
/** Register
|
|
94
|
+
/** Register an action to be executed when a Kubernetes resource is deleted. */
|
|
109
95
|
IsDeleted: () => BindingAll<T>;
|
|
110
96
|
};
|
|
111
97
|
export type Binding = {
|
|
112
98
|
event: Event;
|
|
99
|
+
isMutate?: boolean;
|
|
100
|
+
isValidate?: boolean;
|
|
113
101
|
readonly kind: GroupVersionKind;
|
|
114
102
|
readonly filters: {
|
|
115
103
|
name: string;
|
|
@@ -117,11 +105,12 @@ export type Binding = {
|
|
|
117
105
|
labels: Record<string, string>;
|
|
118
106
|
annotations: Record<string, string>;
|
|
119
107
|
};
|
|
120
|
-
readonly
|
|
108
|
+
readonly mutateCallback?: MutateAction<GenericClass, InstanceType<GenericClass>>;
|
|
109
|
+
readonly validateCallback?: ValidateAction<GenericClass, InstanceType<GenericClass>>;
|
|
121
110
|
};
|
|
122
|
-
export type BindingFilter<T extends GenericClass> =
|
|
111
|
+
export type BindingFilter<T extends GenericClass> = CommonActionChain<T> & {
|
|
123
112
|
/**
|
|
124
|
-
* Only apply the
|
|
113
|
+
* Only apply the action if the resource has the specified label. If no value is specified, the label must exist.
|
|
125
114
|
* Note multiple calls to this method will result in an AND condition. e.g.
|
|
126
115
|
*
|
|
127
116
|
* ```ts
|
|
@@ -129,17 +118,17 @@ export type BindingFilter<T extends GenericClass> = BindToActionOrSet<T> & {
|
|
|
129
118
|
* .IsCreated()
|
|
130
119
|
* .WithLabel("foo", "bar")
|
|
131
120
|
* .WithLabel("baz", "qux")
|
|
132
|
-
* .
|
|
121
|
+
* .Mutate(...)
|
|
133
122
|
* ```
|
|
134
123
|
*
|
|
135
|
-
* Will only apply the
|
|
124
|
+
* Will only apply the action if the resource has both the `foo=bar` and `baz=qux` labels.
|
|
136
125
|
*
|
|
137
126
|
* @param key
|
|
138
127
|
* @param value
|
|
139
128
|
*/
|
|
140
129
|
WithLabel: (key: string, value?: string) => BindingFilter<T>;
|
|
141
130
|
/**
|
|
142
|
-
* Only apply the
|
|
131
|
+
* Only apply the action if the resource has the specified annotation. If no value is specified, the annotation must exist.
|
|
143
132
|
* Note multiple calls to this method will result in an AND condition. e.g.
|
|
144
133
|
*
|
|
145
134
|
* ```ts
|
|
@@ -147,10 +136,10 @@ export type BindingFilter<T extends GenericClass> = BindToActionOrSet<T> & {
|
|
|
147
136
|
* .IsCreated()
|
|
148
137
|
* .WithAnnotation("foo", "bar")
|
|
149
138
|
* .WithAnnotation("baz", "qux")
|
|
150
|
-
* .
|
|
139
|
+
* .Mutate(...)
|
|
151
140
|
* ```
|
|
152
141
|
*
|
|
153
|
-
* Will only apply the
|
|
142
|
+
* Will only apply the action if the resource has both the `foo=bar` and `baz=qux` annotations.
|
|
154
143
|
*
|
|
155
144
|
* @param key
|
|
156
145
|
* @param value
|
|
@@ -158,38 +147,48 @@ export type BindingFilter<T extends GenericClass> = BindToActionOrSet<T> & {
|
|
|
158
147
|
WithAnnotation: (key: string, value?: string) => BindingFilter<T>;
|
|
159
148
|
};
|
|
160
149
|
export type BindingWithName<T extends GenericClass> = BindingFilter<T> & {
|
|
161
|
-
/** Only apply the
|
|
150
|
+
/** Only apply the action if the resource name matches the specified name. */
|
|
162
151
|
WithName: (name: string) => BindingFilter<T>;
|
|
163
152
|
};
|
|
164
153
|
export type BindingAll<T extends GenericClass> = BindingWithName<T> & {
|
|
165
|
-
/** Only apply the
|
|
154
|
+
/** Only apply the action if the resource is in one of the specified namespaces.*/
|
|
166
155
|
InNamespace: (...namespaces: string[]) => BindingWithName<T>;
|
|
167
156
|
};
|
|
168
|
-
export type
|
|
157
|
+
export type CommonActionChain<T extends GenericClass> = MutateActionChain<T> & {
|
|
169
158
|
/**
|
|
170
|
-
* Create a new
|
|
159
|
+
* Create a new MUTATE action with the specified callback function and previously specified
|
|
171
160
|
* filters.
|
|
172
|
-
* @param action The
|
|
161
|
+
* @param action The action to be executed when the Kubernetes resource is processed by the AdmissionController.
|
|
173
162
|
*/
|
|
174
|
-
|
|
163
|
+
Mutate: (action: MutateAction<T, InstanceType<T>>) => MutateActionChain<T>;
|
|
175
164
|
};
|
|
176
|
-
export type
|
|
165
|
+
export type MutateActionChain<T extends GenericClass> = {
|
|
177
166
|
/**
|
|
178
|
-
*
|
|
179
|
-
*
|
|
180
|
-
*
|
|
181
|
-
* Example change the `minReadySeconds` to 3 of a deployment when it is created:
|
|
167
|
+
* Create a new VALIDATE action with the specified callback function and previously specified
|
|
168
|
+
* filters. Return the `request.Approve()` or `Request.Deny()` methods to approve or deny the request:
|
|
182
169
|
*
|
|
170
|
+
* @example
|
|
183
171
|
* ```ts
|
|
184
172
|
* When(a.Deployment)
|
|
185
173
|
* .IsCreated()
|
|
186
|
-
* .
|
|
174
|
+
* .Validate(request => {
|
|
175
|
+
* if (request.HasLabel("foo")) {
|
|
176
|
+
* return request.Approve();
|
|
177
|
+
* }
|
|
178
|
+
*
|
|
179
|
+
* return request.Deny("Deployment must have label foo");
|
|
180
|
+
* });
|
|
187
181
|
* ```
|
|
188
182
|
*
|
|
189
|
-
* @param
|
|
190
|
-
* @returns
|
|
183
|
+
* @param action The action to be executed when the Kubernetes resource is processed by the AdmissionController.
|
|
191
184
|
*/
|
|
192
|
-
|
|
185
|
+
Validate: (action: ValidateAction<T, InstanceType<T>>) => void;
|
|
186
|
+
};
|
|
187
|
+
export type MutateAction<T extends GenericClass, K extends KubernetesObject = InstanceType<T>> = (req: PeprMutateRequest<K>) => Promise<void> | void | Promise<PeprMutateRequest<K>> | PeprMutateRequest<K>;
|
|
188
|
+
export type ValidateAction<T extends GenericClass, K extends KubernetesObject = InstanceType<T>> = (req: PeprValidateRequest<K>) => Promise<ValidateResponse> | ValidateResponse;
|
|
189
|
+
export type ValidateResponse = {
|
|
190
|
+
allowed: boolean;
|
|
191
|
+
statusCode?: number;
|
|
192
|
+
statusMessage?: string;
|
|
193
193
|
};
|
|
194
|
-
export type CapabilityAction<T extends GenericClass, K extends KubernetesObject = InstanceType<T>> = (req: PeprRequest<K>) => Promise<void> | void | Promise<PeprRequest<K>> | PeprRequest<K>;
|
|
195
194
|
//# sourceMappingURL=types.d.ts.map
|
package/dist/lib/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/lib/types.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAChF,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/lib/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { Capability } from "./capability";
|
|
2
|
+
import { Request, ValidateResponse } from "./k8s/types";
|
|
3
|
+
export declare function validateProcessor(capabilities: Capability[], req: Request, reqMetadata: Record<string, string>): Promise<ValidateResponse>;
|
|
4
|
+
//# sourceMappingURL=validate-processor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validate-processor.d.ts","sourceRoot":"","sources":["../../src/lib/validate-processor.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C,OAAO,EAAE,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAIxD,wBAAsB,iBAAiB,CACrC,YAAY,EAAE,UAAU,EAAE,EAC1B,GAAG,EAAE,OAAO,EACZ,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAClC,OAAO,CAAC,gBAAgB,CAAC,CAsD3B"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { KubernetesObject, Request } from "./k8s/types";
|
|
2
|
+
import { ValidateResponse } from "./types";
|
|
3
|
+
/**
|
|
4
|
+
* The RequestWrapper class provides methods to modify Kubernetes objects in the context
|
|
5
|
+
* of a mutating webhook request.
|
|
6
|
+
*/
|
|
7
|
+
export declare class PeprValidateRequest<T extends KubernetesObject> {
|
|
8
|
+
protected _input: Request<T>;
|
|
9
|
+
Raw: T;
|
|
10
|
+
/**
|
|
11
|
+
* Provides access to the old resource in the request if available.
|
|
12
|
+
* @returns The old Kubernetes resource object or null if not available.
|
|
13
|
+
*/
|
|
14
|
+
get OldResource(): T | undefined;
|
|
15
|
+
/**
|
|
16
|
+
* Provides access to the request object.
|
|
17
|
+
* @returns The request object containing the Kubernetes resource.
|
|
18
|
+
*/
|
|
19
|
+
get Request(): Request<T>;
|
|
20
|
+
/**
|
|
21
|
+
* Creates a new instance of the Action class.
|
|
22
|
+
* @param input - The request object containing the Kubernetes resource to modify.
|
|
23
|
+
*/
|
|
24
|
+
constructor(_input: Request<T>);
|
|
25
|
+
/**
|
|
26
|
+
* Check if a label exists on the Kubernetes resource.
|
|
27
|
+
*
|
|
28
|
+
* @param key the label key to check
|
|
29
|
+
* @returns
|
|
30
|
+
*/
|
|
31
|
+
HasLabel(key: string): boolean;
|
|
32
|
+
/**
|
|
33
|
+
* Check if an annotation exists on the Kubernetes resource.
|
|
34
|
+
*
|
|
35
|
+
* @param key the annotation key to check
|
|
36
|
+
* @returns
|
|
37
|
+
*/
|
|
38
|
+
HasAnnotation(key: string): boolean;
|
|
39
|
+
/**
|
|
40
|
+
* Create a validation response that allows the request.
|
|
41
|
+
*
|
|
42
|
+
* @returns The validation response.
|
|
43
|
+
*/
|
|
44
|
+
Approve(): ValidateResponse;
|
|
45
|
+
/**
|
|
46
|
+
* Create a validation response that denies the request.
|
|
47
|
+
*
|
|
48
|
+
* @param statusMessage Optional status message to return to the user.
|
|
49
|
+
* @param statusCode Optional status code to return to the user.
|
|
50
|
+
* @returns The validation response.
|
|
51
|
+
*/
|
|
52
|
+
Deny(statusMessage?: string, statusCode?: number): ValidateResponse;
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=validate-request.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validate-request.d.ts","sourceRoot":"","sources":["../../src/lib/validate-request.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,gBAAgB,EAAa,OAAO,EAAE,MAAM,aAAa,CAAC;AACnE,OAAO,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAE3C;;;GAGG;AACH,qBAAa,mBAAmB,CAAC,CAAC,SAAS,gBAAgB;IAuB7C,SAAS,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IAtBjC,GAAG,EAAE,CAAC,CAAC;IAEd;;;OAGG;IACH,IAAI,WAAW,kBAEd;IAED;;;OAGG;IACH,IAAI,OAAO,eAEV;IAED;;;OAGG;gBACmB,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IAcxC;;;;;OAKG;IACH,QAAQ,CAAC,GAAG,EAAE,MAAM;IAIpB;;;;;OAKG;IACH,aAAa,CAAC,GAAG,EAAE,MAAM;IAIzB;;;;OAIG;IACH,OAAO,IAAI,gBAAgB;IAM3B;;;;;;OAMG;IACH,IAAI,CAAC,aAAa,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,gBAAgB;CAOpE"}
|
package/dist/lib.d.ts
CHANGED
|
@@ -6,11 +6,12 @@ import { fetch, fetchRaw } from "./lib/fetch";
|
|
|
6
6
|
import { RegisterKind, a } from "./lib/k8s/index";
|
|
7
7
|
import Log from "./lib/logger";
|
|
8
8
|
import { PeprModule } from "./lib/module";
|
|
9
|
-
import {
|
|
9
|
+
import { PeprMutateRequest } from "./lib/mutate-request";
|
|
10
|
+
import { PeprValidateRequest } from "./lib/validate-request";
|
|
10
11
|
import * as PeprUtils from "./lib/utils";
|
|
11
12
|
import type * as K8sTypes from "@kubernetes/client-node";
|
|
12
13
|
import type * as RTypes from "ramda";
|
|
13
14
|
export { a,
|
|
14
15
|
/** PeprModule is used to setup a complete Pepr Module: `new PeprModule(cfg, {...capabilities})` */
|
|
15
|
-
PeprModule,
|
|
16
|
+
PeprModule, PeprMutateRequest, PeprValidateRequest, PeprUtils, RegisterKind, Capability, Log, R, fetch, fetchRaw, fetchStatus, k8s, RTypes, K8sTypes, };
|
|
16
17
|
//# sourceMappingURL=lib.d.ts.map
|
package/dist/lib.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lib.d.ts","sourceRoot":"","sources":["../src/lib.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,GAAG,MAAM,yBAAyB,CAAC;AAC/C,OAAO,EAAE,WAAW,IAAI,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAC/D,OAAO,KAAK,CAAC,MAAM,OAAO,CAAC;AAC3B,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,CAAC,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,GAAG,MAAM,cAAc,CAAC;AAC/B,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"lib.d.ts","sourceRoot":"","sources":["../src/lib.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,GAAG,MAAM,yBAAyB,CAAC;AAC/C,OAAO,EAAE,WAAW,IAAI,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAC/D,OAAO,KAAK,CAAC,MAAM,OAAO,CAAC;AAC3B,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,CAAC,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,GAAG,MAAM,cAAc,CAAC;AAC/B,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,KAAK,SAAS,MAAM,aAAa,CAAC;AAGzC,OAAO,KAAK,KAAK,QAAQ,MAAM,yBAAyB,CAAC;AACzD,OAAO,KAAK,KAAK,MAAM,MAAM,OAAO,CAAC;AAErC,OAAO,EACL,CAAC;AACD,mGAAmG;AACnG,UAAU,EACV,iBAAiB,EACjB,mBAAmB,EACnB,SAAS,EACT,YAAY,EACZ,UAAU,EACV,GAAG,EACH,CAAC,EACD,KAAK,EACL,QAAQ,EACR,WAAW,EACX,GAAG,EAGH,MAAM,EACN,QAAQ,GACT,CAAC"}
|