cdk-serverless 1.1.44 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -116
- package/docs/constructs/.nojekyll +1 -0
- package/docs/constructs/assets/highlight.css +92 -0
- package/docs/constructs/assets/main.js +58 -0
- package/docs/constructs/assets/search.js +1 -0
- package/docs/constructs/assets/style.css +1338 -0
- package/docs/constructs/classes/AssetCdn.html +165 -0
- package/docs/constructs/classes/BaseApi.html +152 -0
- package/docs/constructs/classes/CognitoAuthentication.html +172 -0
- package/docs/constructs/classes/LambdaFunction.html +1101 -0
- package/docs/constructs/classes/RestApi.html +306 -0
- package/docs/constructs/classes/SingleTableDatastore.html +155 -0
- package/docs/constructs/classes/Workflow.html +170 -0
- package/docs/constructs/index.html +122 -0
- package/docs/constructs/interfaces/AssetCdnProps.html +89 -0
- package/docs/constructs/interfaces/BaseApiProps.html +158 -0
- package/docs/constructs/interfaces/CognitoAuthenticationProps.html +151 -0
- package/docs/constructs/interfaces/ICognitoAuthentication.html +86 -0
- package/docs/constructs/interfaces/IJwtAuthentication.html +96 -0
- package/docs/constructs/interfaces/LambdaFunctionProps.html +189 -0
- package/docs/constructs/interfaces/LambdaTracingOptions.html +85 -0
- package/docs/constructs/interfaces/RestApiProps.html +227 -0
- package/docs/constructs/interfaces/SingleTableDatastoreProps.html +109 -0
- package/docs/constructs/interfaces/SingleTableDesign.html +113 -0
- package/docs/constructs/interfaces/WorkflowProps.html +105 -0
- package/docs/constructs/modules.html +85 -0
- package/docs/constructs/types/LambdaOptions.html +58 -0
- package/docs/lambda/.nojekyll +1 -0
- package/docs/lambda/assets/highlight.css +36 -0
- package/docs/lambda/assets/main.js +58 -0
- package/docs/lambda/assets/search.js +1 -0
- package/docs/lambda/assets/style.css +1338 -0
- package/docs/lambda/classes/auth.ApiGatewayv1CognitoAuthorizer.html +323 -0
- package/docs/lambda/classes/auth.ApiGatewayv1JwtAuthorizer.html +322 -0
- package/docs/lambda/classes/auth.ApiGatewayv2CognitoAuthorizer.html +324 -0
- package/docs/lambda/classes/auth.ApiGatewayv2JwtAuthorizer.html +320 -0
- package/docs/lambda/classes/auth.AppSyncCognitoAuthorizer.html +314 -0
- package/docs/lambda/classes/auth.CognitoAuthorizer.html +303 -0
- package/docs/lambda/classes/auth.JwtAuthorizer.html +298 -0
- package/docs/lambda/classes/errors.BadRequestError.html +193 -0
- package/docs/lambda/classes/errors.ForbiddenError.html +193 -0
- package/docs/lambda/classes/errors.HttpError.html +199 -0
- package/docs/lambda/classes/errors.NotFoundError.html +193 -0
- package/docs/lambda/classes/errors.UnauthenticatedError.html +193 -0
- package/docs/lambda/functions/api.createAppSyncHandler.html +98 -0
- package/docs/lambda/functions/api.createHttpHandler.html +95 -0
- package/docs/lambda/functions/api.createOpenApiHandler.html +95 -0
- package/docs/lambda/functions/api.createOpenApiHandlerWithRequestBody.html +95 -0
- package/docs/lambda/functions/api.createOpenApiHandlerWithRequestBodyNoResponse.html +93 -0
- package/docs/lambda/index.html +140 -0
- package/docs/lambda/interfaces/api.AppSyncHandlerContext.html +123 -0
- package/docs/lambda/interfaces/api.HttpHandlerContext.html +122 -0
- package/docs/lambda/interfaces/api.HttpResponseContext.html +117 -0
- package/docs/lambda/interfaces/api.Operation.html +109 -0
- package/docs/lambda/interfaces/api.OperationWithRequestBody.html +123 -0
- package/docs/lambda/modules/api.html +100 -0
- package/docs/lambda/modules/auth.html +88 -0
- package/docs/lambda/modules/errors.html +86 -0
- package/docs/lambda/modules.html +81 -0
- package/docs/lambda/types/api.APIGatewayv1Handler.html +79 -0
- package/docs/lambda/types/api.AppSyncHandler.html +100 -0
- package/docs/lambda/types/api.HttpHandler.html +101 -0
- package/docs/projen/.nojekyll +1 -0
- package/docs/projen/assets/highlight.css +85 -0
- package/docs/projen/assets/main.js +58 -0
- package/docs/projen/assets/search.js +1 -0
- package/docs/projen/assets/style.css +1338 -0
- package/docs/projen/classes/Datastore.html +180 -0
- package/docs/projen/classes/RestApi.html +184 -0
- package/docs/projen/classes/ServerlessProject.html +1246 -0
- package/docs/projen/classes/Workflow.html +178 -0
- package/docs/projen/index.html +112 -0
- package/docs/projen/interfaces/DatastoreOptions.html +75 -0
- package/docs/projen/interfaces/RestApiOptions.html +75 -0
- package/docs/projen/interfaces/ServerlessProjectOptions.html +1921 -0
- package/docs/projen/interfaces/WorkflowOptions.html +75 -0
- package/docs/projen/modules.html +65 -0
- package/docs/projen/variables/PACKAGE_NAME.html +48 -0
- package/lib/constructs/asset-cdn.js +2 -1
- package/lib/constructs/{auth.d.ts → authentication.d.ts} +32 -15
- package/lib/constructs/authentication.js +136 -0
- package/lib/constructs/base-api.d.ts +10 -21
- package/lib/constructs/base-api.js +2 -37
- package/lib/constructs/func.d.ts +6 -25
- package/lib/constructs/func.js +16 -37
- package/lib/constructs/index.d.ts +4 -6
- package/lib/constructs/index.js +5 -7
- package/lib/constructs/rest-api.d.ts +73 -0
- package/lib/constructs/rest-api.js +278 -0
- package/lib/constructs/table.d.ts +25 -6
- package/lib/constructs/table.js +12 -70
- package/lib/constructs/workflow.d.ts +18 -0
- package/lib/constructs/workflow.js +58 -0
- package/lib/lambda/auth.d.ts +144 -0
- package/lib/lambda/auth.js +309 -0
- package/lib/lambda/errors.d.ts +16 -0
- package/lib/lambda/errors.js +35 -0
- package/lib/lambda/handler.d.ts +90 -0
- package/lib/lambda/handler.js +217 -0
- package/lib/lambda/index.d.ts +3 -0
- package/lib/lambda/index.js +30 -0
- package/lib/projen/core.d.ts +4 -14
- package/lib/projen/core.js +25 -29
- package/lib/projen/datastore.d.ts +13 -0
- package/lib/projen/datastore.js +145 -0
- package/lib/projen/index.d.ts +3 -2
- package/lib/projen/index.js +5 -3
- package/lib/projen/rest-api.d.ts +13 -0
- package/lib/projen/rest-api.js +127 -0
- package/lib/projen/workflow.d.ts +18 -0
- package/lib/projen/workflow.js +99 -0
- package/package.json +44 -35
- package/CHANGELOG.md +0 -170
- package/img/autocomplete.gif +0 -0
- package/lib/constructs/auth.js +0 -135
- package/lib/constructs/graphql-api.d.ts +0 -44
- package/lib/constructs/graphql-api.js +0 -221
- package/lib/constructs/http-api.d.ts +0 -58
- package/lib/constructs/http-api.js +0 -242
- package/lib/constructs/monitoring.d.ts +0 -23
- package/lib/constructs/monitoring.js +0 -47
- package/lib/constructs/scheduled-func.d.ts +0 -63
- package/lib/constructs/scheduled-func.js +0 -54
- package/lib/constructs/webhook.d.ts +0 -33
- package/lib/constructs/webhook.js +0 -86
- package/lib/projen/graphql-api.d.ts +0 -7
- package/lib/projen/graphql-api.js +0 -58
- package/lib/projen/http-api.d.ts +0 -7
- package/lib/projen/http-api.js +0 -43
- package/lib/types/index.d.ts +0 -1
- package/lib/types/index.js +0 -18
- package/lib/types/table.d.ts +0 -34
- package/lib/types/table.js +0 -31
- package/version.json +0 -3
|
@@ -1,242 +0,0 @@
|
|
|
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 __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
-
if (mod && mod.__esModule) return mod;
|
|
20
|
-
var result = {};
|
|
21
|
-
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
-
__setModuleDefault(result, mod);
|
|
23
|
-
return result;
|
|
24
|
-
};
|
|
25
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
|
-
exports.HttpApi = void 0;
|
|
27
|
-
const fs = __importStar(require("fs"));
|
|
28
|
-
const apiGW = __importStar(require("@aws-cdk/aws-apigatewayv2-alpha"));
|
|
29
|
-
const apiGWInteg = __importStar(require("@aws-cdk/aws-apigatewayv2-integrations-alpha"));
|
|
30
|
-
const aws_cdk_lib_1 = require("aws-cdk-lib");
|
|
31
|
-
const cdk = __importStar(require("aws-cdk-lib"));
|
|
32
|
-
const yaml = __importStar(require("js-yaml"));
|
|
33
|
-
const base_api_1 = require("./base-api");
|
|
34
|
-
const func_1 = require("./func");
|
|
35
|
-
class HttpApi extends base_api_1.BaseApi {
|
|
36
|
-
constructor(scope, id, props) {
|
|
37
|
-
var _a, _b, _c;
|
|
38
|
-
super(scope, id, props);
|
|
39
|
-
this.props = props;
|
|
40
|
-
this._functions = {};
|
|
41
|
-
this.apiSpec = yaml.load(fs.readFileSync('openapi.yaml').toString());
|
|
42
|
-
let customDomainName;
|
|
43
|
-
if (props.domainName) {
|
|
44
|
-
const hostedZone = aws_cdk_lib_1.aws_route53.HostedZone.fromLookup(this, 'Zone', { domainName: props.domainName });
|
|
45
|
-
const apiDomainName = `${(_a = props.apiHostname) !== null && _a !== void 0 ? _a : 'api'}.${props.domainName}`;
|
|
46
|
-
customDomainName = new apiGW.DomainName(this, 'DomainName', {
|
|
47
|
-
domainName: apiDomainName,
|
|
48
|
-
certificate: new aws_cdk_lib_1.aws_certificatemanager.Certificate(this, 'Cert', {
|
|
49
|
-
domainName: apiDomainName,
|
|
50
|
-
validation: aws_cdk_lib_1.aws_certificatemanager.CertificateValidation.fromDns(hostedZone),
|
|
51
|
-
}),
|
|
52
|
-
});
|
|
53
|
-
new aws_cdk_lib_1.aws_route53.ARecord(this, 'DnsRecord', {
|
|
54
|
-
zone: hostedZone,
|
|
55
|
-
recordName: apiDomainName,
|
|
56
|
-
target: aws_cdk_lib_1.aws_route53.RecordTarget.fromAlias(new aws_cdk_lib_1.aws_route53_targets.ApiGatewayv2DomainProperties(customDomainName.regionalDomainName, customDomainName.regionalHostedZoneId)),
|
|
57
|
-
});
|
|
58
|
-
}
|
|
59
|
-
this.api = new apiGW.HttpApi(this, 'Resource', {
|
|
60
|
-
apiName: `${props.apiName} [${props.stageName}]`,
|
|
61
|
-
...customDomainName && {
|
|
62
|
-
defaultDomainMapping: {
|
|
63
|
-
domainName: customDomainName,
|
|
64
|
-
},
|
|
65
|
-
},
|
|
66
|
-
...props.httpApiProps,
|
|
67
|
-
});
|
|
68
|
-
if (((_b = props.monitoring) !== null && _b !== void 0 ? _b : true) && this.monitoring) {
|
|
69
|
-
this.monitoring.apiErrorsWidget.addLeftMetric(this.api.metricServerError({
|
|
70
|
-
statistic: 'sum',
|
|
71
|
-
}));
|
|
72
|
-
this.monitoring.apiErrorsWidget.addLeftMetric(this.api.metricClientError({
|
|
73
|
-
statistic: 'sum',
|
|
74
|
-
}));
|
|
75
|
-
this.monitoring.apiLatencyWidget.addLeftMetric(this.api.metricLatency({
|
|
76
|
-
statistic: 'Average',
|
|
77
|
-
}));
|
|
78
|
-
this.monitoring.apiLatencyWidget.addLeftMetric(this.api.metricLatency({
|
|
79
|
-
statistic: 'p90',
|
|
80
|
-
}));
|
|
81
|
-
this.monitoring.apiLatencyTailWidget.addLeftMetric(this.api.metricLatency({
|
|
82
|
-
statistic: 'p95',
|
|
83
|
-
}));
|
|
84
|
-
this.monitoring.apiLatencyTailWidget.addLeftMetric(this.api.metricLatency({
|
|
85
|
-
statistic: 'p99',
|
|
86
|
-
}));
|
|
87
|
-
}
|
|
88
|
-
if ((_c = props.autoGenerateRoutes) !== null && _c !== void 0 ? _c : true) {
|
|
89
|
-
for (const path in this.apiSpec.paths) {
|
|
90
|
-
if (Object.prototype.hasOwnProperty.call(this.apiSpec.paths, path)) {
|
|
91
|
-
const pathItem = this.apiSpec.paths[path];
|
|
92
|
-
for (const method in pathItem) {
|
|
93
|
-
if (Object.prototype.hasOwnProperty.call(pathItem, method) &&
|
|
94
|
-
['get', 'post', 'put', 'delete', 'patch', 'options', 'head'].indexOf(method) >= 0) {
|
|
95
|
-
// Add all operations
|
|
96
|
-
this.addRestResource(path, method);
|
|
97
|
-
}
|
|
98
|
-
}
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
|
-
}
|
|
103
|
-
/**
|
|
104
|
-
* getFunctionForOperation
|
|
105
|
-
*/
|
|
106
|
-
getFunctionForOperation(operationId) {
|
|
107
|
-
return this._functions[operationId];
|
|
108
|
-
}
|
|
109
|
-
addRoute(path, method, handler) {
|
|
110
|
-
this.addCustomRoute(path, method, handler);
|
|
111
|
-
}
|
|
112
|
-
addCustomRoute(path, method, handler) {
|
|
113
|
-
const apiMethod = this.methodTransform(method);
|
|
114
|
-
new apiGW.HttpRoute(this, `${apiMethod}${path}`, {
|
|
115
|
-
httpApi: this.api,
|
|
116
|
-
routeKey: apiGW.HttpRouteKey.with(path, apiMethod),
|
|
117
|
-
integration: new apiGWInteg.HttpLambdaIntegration(`${apiMethod}${path}Integration`, handler),
|
|
118
|
-
});
|
|
119
|
-
}
|
|
120
|
-
addRestResource(path, method) {
|
|
121
|
-
const oaPath = this.apiSpec.paths[path];
|
|
122
|
-
const operation = oaPath[method];
|
|
123
|
-
const operationId = operation.operationId;
|
|
124
|
-
const description = `${method} ${path} - ${operation.summary}`;
|
|
125
|
-
const customLambdaOptions = this.props.lambdaOptionsByOperation ? this.props.lambdaOptionsByOperation[operationId] : undefined;
|
|
126
|
-
return this.addCustomRestResource(path, method, operationId, description, customLambdaOptions);
|
|
127
|
-
}
|
|
128
|
-
addCustomRestResource(path, method, operationId, description, additionalLambdaOptions = {}) {
|
|
129
|
-
var _a;
|
|
130
|
-
const entryFile = `./src/lambda/rest.${operationId}.ts`;
|
|
131
|
-
if (!fs.existsSync(entryFile)) {
|
|
132
|
-
this.createEntryFile(entryFile, method, operationId);
|
|
133
|
-
}
|
|
134
|
-
const lambdaOptions = {
|
|
135
|
-
...this.props.lambdaOptions && {
|
|
136
|
-
...this.props.lambdaOptions,
|
|
137
|
-
},
|
|
138
|
-
...additionalLambdaOptions,
|
|
139
|
-
};
|
|
140
|
-
const fn = new func_1.LambdaFunction(this, `Fn${operationId}`, {
|
|
141
|
-
stageName: this.props.stageName,
|
|
142
|
-
additionalEnv: {
|
|
143
|
-
...this.props.domainName && {
|
|
144
|
-
DOMAIN_NAME: this.props.domainName,
|
|
145
|
-
},
|
|
146
|
-
...this.props.additionalEnv,
|
|
147
|
-
},
|
|
148
|
-
entry: entryFile,
|
|
149
|
-
description: `[${this.props.stageName}] ${description}`,
|
|
150
|
-
...this.authentication && {
|
|
151
|
-
userPool: (_a = this.authentication) === null || _a === void 0 ? void 0 : _a.userpool,
|
|
152
|
-
},
|
|
153
|
-
...this.singleTableDatastore && {
|
|
154
|
-
table: this.singleTableDatastore.table,
|
|
155
|
-
tableWrites: this.tableWriteAccessForMethod(method),
|
|
156
|
-
},
|
|
157
|
-
...this.assetCdn && {
|
|
158
|
-
assetDomainName: this.assetCdn.assetDomainName,
|
|
159
|
-
assetBucket: this.assetCdn.assetBucket,
|
|
160
|
-
},
|
|
161
|
-
lambdaOptions,
|
|
162
|
-
lambdaTracing: this.props.lambdaTracing,
|
|
163
|
-
});
|
|
164
|
-
this._functions[operationId] = fn;
|
|
165
|
-
cdk.Tags.of(fn).add('OpenAPI', description.replace(/[^\w\s\d_.:/=+\-@]/g, ''));
|
|
166
|
-
if (this.monitoring) {
|
|
167
|
-
this.monitoring.lambdaDurationsWidget.addLeftMetric(fn.metricDuration());
|
|
168
|
-
this.monitoring.lambdaInvokesWidget.addLeftMetric(fn.metricInvocations());
|
|
169
|
-
this.monitoring.lambdaErrorsWidget.addLeftMetric(fn.metricErrors());
|
|
170
|
-
this.monitoring.lambdaErrorsWidget.addLeftMetric(fn.metricThrottles());
|
|
171
|
-
}
|
|
172
|
-
const hasVersionConfig = lambdaOptions.currentVersionOptions != undefined;
|
|
173
|
-
this.addCustomRoute(path, method, hasVersionConfig ? fn.currentVersion : fn);
|
|
174
|
-
return fn;
|
|
175
|
-
}
|
|
176
|
-
createEntryFile(entryFile, method, operationId) {
|
|
177
|
-
let factoryCall;
|
|
178
|
-
let logs;
|
|
179
|
-
switch (method.toLowerCase()) {
|
|
180
|
-
case 'post':
|
|
181
|
-
case 'put':
|
|
182
|
-
case 'patch':
|
|
183
|
-
factoryCall = `http.createOpenApiHandlerWithRequestBody<operations['${operationId}']>(async (ctx, data) => {`;
|
|
184
|
-
logs = 'ctx.logger.info(JSON.stringify(data));';
|
|
185
|
-
break;
|
|
186
|
-
case 'options':
|
|
187
|
-
case 'delete':
|
|
188
|
-
case 'get':
|
|
189
|
-
case 'head':
|
|
190
|
-
default:
|
|
191
|
-
factoryCall = `http.createOpenApiHandler<operations['${operationId}']>(async (ctx) => {`;
|
|
192
|
-
logs = '';
|
|
193
|
-
break;
|
|
194
|
-
}
|
|
195
|
-
fs.writeFileSync(entryFile, `import { http, errors } from '@taimos/lambda-toolbox';
|
|
196
|
-
import { operations } from './types.generated';
|
|
197
|
-
|
|
198
|
-
export const handler = ${factoryCall}
|
|
199
|
-
ctx.logger.info(JSON.stringify(ctx.event));
|
|
200
|
-
${logs}
|
|
201
|
-
throw new errors.HttpError(500, 'Not yet implemented');
|
|
202
|
-
});`, {
|
|
203
|
-
encoding: 'utf-8',
|
|
204
|
-
});
|
|
205
|
-
}
|
|
206
|
-
tableWriteAccessForMethod(method) {
|
|
207
|
-
switch (method.toLowerCase()) {
|
|
208
|
-
case 'delete':
|
|
209
|
-
case 'post':
|
|
210
|
-
case 'put':
|
|
211
|
-
case 'patch':
|
|
212
|
-
return true;
|
|
213
|
-
case 'options':
|
|
214
|
-
case 'get':
|
|
215
|
-
case 'head':
|
|
216
|
-
default:
|
|
217
|
-
return false;
|
|
218
|
-
}
|
|
219
|
-
}
|
|
220
|
-
methodTransform(method) {
|
|
221
|
-
switch (method.toLowerCase()) {
|
|
222
|
-
case 'get':
|
|
223
|
-
return apiGW.HttpMethod.GET;
|
|
224
|
-
case 'delete':
|
|
225
|
-
return apiGW.HttpMethod.DELETE;
|
|
226
|
-
case 'post':
|
|
227
|
-
return apiGW.HttpMethod.POST;
|
|
228
|
-
case 'put':
|
|
229
|
-
return apiGW.HttpMethod.PUT;
|
|
230
|
-
case 'head':
|
|
231
|
-
return apiGW.HttpMethod.HEAD;
|
|
232
|
-
case 'options':
|
|
233
|
-
return apiGW.HttpMethod.OPTIONS;
|
|
234
|
-
case 'patch':
|
|
235
|
-
return apiGW.HttpMethod.PATCH;
|
|
236
|
-
default:
|
|
237
|
-
return apiGW.HttpMethod.ANY;
|
|
238
|
-
}
|
|
239
|
-
}
|
|
240
|
-
}
|
|
241
|
-
exports.HttpApi = HttpApi;
|
|
242
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHR0cC1hcGkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29uc3RydWN0cy9odHRwLWFwaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLHVDQUF5QjtBQUN6Qix1RUFBeUQ7QUFDekQseUZBQTJFO0FBQzNFLDZDQUtxQjtBQUNyQixpREFBbUM7QUFFbkMsOENBQWdDO0FBRWhDLHlDQUFtRDtBQUNuRCxpQ0FBdUQ7QUF5Q3ZELE1BQWEsT0FBb0IsU0FBUSxrQkFBTztJQU85QyxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFVLEtBQXdCOztRQUN4RSxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUR3QixVQUFLLEdBQUwsS0FBSyxDQUFtQjtRQUZsRSxlQUFVLEdBQThDLEVBQUUsQ0FBQztRQUtqRSxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxjQUFjLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBYSxDQUFDO1FBRWpGLElBQUksZ0JBQWdCLENBQUM7UUFDckIsSUFBSSxLQUFLLENBQUMsVUFBVSxFQUFFO1lBQ3BCLE1BQU0sVUFBVSxHQUFHLHlCQUFPLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLEVBQUUsVUFBVSxFQUFFLEtBQUssQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDO1lBQ2pHLE1BQU0sYUFBYSxHQUFHLEdBQUcsTUFBQSxLQUFLLENBQUMsV0FBVyxtQ0FBSSxLQUFLLElBQUksS0FBSyxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQzFFLGdCQUFnQixHQUFHLElBQUksS0FBSyxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsWUFBWSxFQUFFO2dCQUMxRCxVQUFVLEVBQUUsYUFBYTtnQkFDekIsV0FBVyxFQUFFLElBQUksb0NBQUcsQ0FBQyxX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ICogYXMgZnMgZnJvbSAnZnMnO1xuaW1wb3J0ICogYXMgYXBpR1cgZnJvbSAnQGF3cy1jZGsvYXdzLWFwaWdhdGV3YXl2Mi1hbHBoYSc7XG5pbXBvcnQgKiBhcyBhcGlHV0ludGVnIGZyb20gJ0Bhd3MtY2RrL2F3cy1hcGlnYXRld2F5djItaW50ZWdyYXRpb25zLWFscGhhJztcbmltcG9ydCB7XG4gIGF3c19jZXJ0aWZpY2F0ZW1hbmFnZXIgYXMgYWNtLFxuICBhd3NfbGFtYmRhIGFzIGxhbWJkYSxcbiAgYXdzX3JvdXRlNTMgYXMgcm91dGU1MyxcbiAgYXdzX3JvdXRlNTNfdGFyZ2V0cyBhcyByb3V0ZTUzVGFyZ2V0LFxufSBmcm9tICdhd3MtY2RrLWxpYic7XG5pbXBvcnQgKiBhcyBjZGsgZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG5pbXBvcnQgKiBhcyB5YW1sIGZyb20gJ2pzLXlhbWwnO1xuaW1wb3J0IHsgT3BlbkFQSTMsIE9wZXJhdGlvbk9iamVjdCwgUGF0aEl0ZW1PYmplY3QgfSBmcm9tICdvcGVuYXBpLXR5cGVzY3JpcHQnO1xuaW1wb3J0IHsgQmFzZUFwaSwgQmFzZUFwaVByb3BzIH0gZnJvbSAnLi9iYXNlLWFwaSc7XG5pbXBvcnQgeyBMYW1iZGFGdW5jdGlvbiwgTGFtYmRhT3B0aW9ucyB9IGZyb20gJy4vZnVuYyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSHR0cEFwaVByb3BzPE9QUz4gZXh0ZW5kcyBCYXNlQXBpUHJvcHMge1xuXG4gIC8qKlxuICAgKiBEb21haW4gbmFtZSBvZiB0aGUgQVBJIChlLmcuIGV4YW1wbGUuY29tKVxuICAgKlxuICAgKiBAZGVmYXVsdCAtIE5vIGN1c3RvbSBkb21haW4gaXMgY29uZmlndXJlZFxuICAgKi9cbiAgZG9tYWluTmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogSG9zdG5hbWUgb2YgdGhlIEFQSSBpZiBhIGRvbWFpbiBuYW1lIGlzIHNwZWNpZmllZFxuICAgKlxuICAgKiBAZGVmYXVsdCBhcGlcbiAgICovXG4gIGFwaUhvc3RuYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBHZW5lcmF0ZSByb3V0ZXMgZm9yIGFsbCBlbmRwb2ludHMgY29uZmlndXJlZCBpbiB0aGUgb3BlbmFwaS55YW1sIGZpbGVcbiAgICpcbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgYXV0b0dlbmVyYXRlUm91dGVzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogY3VzdG9tIG9wdGlvbnMgZm9yIHRoZSBjcmVhdGVkIEh0dHBBcGlcbiAgICpcbiAgICogQGRlZmF1bHQgLVxuICAgKi9cbiAgaHR0cEFwaVByb3BzPzogYXBpR1cuSHR0cEFwaVByb3BzO1xuXG4gIC8qKlxuICAgKiBhZGRpdGlvbmFsIG9wdGlvbnMgZm9yIHRoZSB1bmRlcmx5aW5nIExhbWJkYSBmdW5jdGlvbiBjb25zdHJ1Y3QgcGVyIG9wZXJhdGlvbklkXG4gICAqXG4gICAqIEBkZWZhdWx0IC1cbiAgICovXG4gIGxhbWJkYU9wdGlvbnNCeU9wZXJhdGlvbj86IHsgW29wZXJhdGlvbklkIGluIGtleW9mIE9QU10/OiBMYW1iZGFPcHRpb25zIH07XG5cbn1cblxuZXhwb3J0IGNsYXNzIEh0dHBBcGk8UEFUSFMsIE9QUz4gZXh0ZW5kcyBCYXNlQXBpIHtcblxuICBwdWJsaWMgcmVhZG9ubHkgYXBpOiBhcGlHVy5IdHRwQXBpO1xuICBwdWJsaWMgcmVhZG9ubHkgYXBpU3BlYzogT3BlbkFQSTM7XG5cbiAgcHJpdmF0ZSBfZnVuY3Rpb25zOiB7IFtvcGVyYXRpb25JZDogc3RyaW5nXTogTGFtYmRhRnVuY3Rpb24gfSA9IHt9O1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByaXZhdGUgcHJvcHM6IEh0dHBBcGlQcm9wczxPUFM+KSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCBwcm9wcyk7XG5cbiAgICB0aGlzLmFwaVNwZWMgPSB5YW1sLmxvYWQoZnMucmVhZEZpbGVTeW5jKCdvcGVuYXBpLnlhbWwnKS50b1N0cmluZygpKSBhcyBPcGVuQVBJMztcblxuICAgIGxldCBjdXN0b21Eb21haW5OYW1lO1xuICAgIGlmIChwcm9wcy5kb21haW5OYW1lKSB7XG4gICAgICBjb25zdCBob3N0ZWRab25lID0gcm91dGU1My5Ib3N0ZWRab25lLmZyb21Mb29rdXAodGhpcywgJ1pvbmUnLCB7IGRvbWFpbk5hbWU6IHByb3BzLmRvbWFpbk5hbWUgfSk7XG4gICAgICBjb25zdCBhcGlEb21haW5OYW1lID0gYCR7cHJvcHMuYXBpSG9zdG5hbWUgPz8gJ2FwaSd9LiR7cHJvcHMuZG9tYWluTmFtZX1gO1xuICAgICAgY3VzdG9tRG9tYWluTmFtZSA9IG5ldyBhcGlHVy5Eb21haW5OYW1lKHRoaXMsICdEb21haW5OYW1lJywge1xuICAgICAgICBkb21haW5OYW1lOiBhcGlEb21haW5OYW1lLFxuICAgICAgICBjZXJ0aWZpY2F0ZTogbmV3IGFjbS5DZXJ0aWZpY2F0ZSh0aGlzLCAnQ2VydCcsIHtcbiAgICAgICAgICBkb21haW5OYW1lOiBhcGlEb21haW5OYW1lLFxuICAgICAgICAgIHZhbGlkYXRpb246IGFjbS5DZXJ0aWZpY2F0ZVZhbGlkYXRpb24uZnJvbURucyhob3N0ZWRab25lKSxcbiAgICAgICAgfSksXG4gICAgICB9KTtcbiAgICAgIG5ldyByb3V0ZTUzLkFSZWNvcmQodGhpcywgJ0Ruc1JlY29yZCcsIHtcbiAgICAgICAgem9uZTogaG9zdGVkWm9uZSxcbiAgICAgICAgcmVjb3JkTmFtZTogYXBpRG9tYWluTmFtZSxcbiAgICAgICAgdGFyZ2V0OiByb3V0ZTUzLlJlY29yZFRhcmdldC5mcm9tQWxpYXMoXG4gICAgICAgICAgbmV3IHJvdXRlNTNUYXJnZXQuQXBpR2F0ZXdheXYyRG9tYWluUHJvcGVydGllcyhjdXN0b21Eb21haW5OYW1lLnJlZ2lvbmFsRG9tYWluTmFtZSwgY3VzdG9tRG9tYWluTmFtZS5yZWdpb25hbEhvc3RlZFpvbmVJZCksXG4gICAgICAgICksXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICB0aGlzLmFwaSA9IG5ldyBhcGlHVy5IdHRwQXBpKHRoaXMsICdSZXNvdXJjZScsIHtcbiAgICAgIGFwaU5hbWU6IGAke3Byb3BzLmFwaU5hbWV9IFske3Byb3BzLnN0YWdlTmFtZX1dYCxcbiAgICAgIC4uLmN1c3RvbURvbWFpbk5hbWUgJiYge1xuICAgICAgICBkZWZhdWx0RG9tYWluTWFwcGluZzoge1xuICAgICAgICAgIGRvbWFpbk5hbWU6IGN1c3RvbURvbWFpbk5hbWUsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgLi4ucHJvcHMuaHR0cEFwaVByb3BzLFxuICAgIH0pO1xuXG4gICAgaWYgKChwcm9wcy5tb25pdG9yaW5nID8/IHRydWUpICYmIHRoaXMubW9uaXRvcmluZykge1xuICAgICAgdGhpcy5tb25pdG9yaW5nLmFwaUVycm9yc1dpZGdldC5hZGRMZWZ0TWV0cmljKHRoaXMuYXBpLm1ldHJpY1NlcnZlckVycm9yKHtcbiAgICAgICAgc3RhdGlzdGljOiAnc3VtJyxcbiAgICAgIH0pKTtcbiAgICAgIHRoaXMubW9uaXRvcmluZy5hcGlFcnJvcnNXaWRnZXQuYWRkTGVmdE1ldHJpYyh0aGlzLmFwaS5tZXRyaWNDbGllbnRFcnJvcih7XG4gICAgICAgIHN0YXRpc3RpYzogJ3N1bScsXG4gICAgICB9KSk7XG5cbiAgICAgIHRoaXMubW9uaXRvcmluZy5hcGlMYXRlbmN5V2lkZ2V0LmFkZExlZnRNZXRyaWModGhpcy5hcGkubWV0cmljTGF0ZW5jeSh7XG4gICAgICAgIHN0YXRpc3RpYzogJ0F2ZXJhZ2UnLFxuICAgICAgfSkpO1xuICAgICAgdGhpcy5tb25pdG9yaW5nLmFwaUxhdGVuY3lXaWRnZXQuYWRkTGVmdE1ldHJpYyh0aGlzLmFwaS5tZXRyaWNMYXRlbmN5KHtcbiAgICAgICAgc3RhdGlzdGljOiAncDkwJyxcbiAgICAgIH0pKTtcbiAgICAgIHRoaXMubW9uaXRvcmluZy5hcGlMYXRlbmN5VGFpbFdpZGdldC5hZGRMZWZ0TWV0cmljKHRoaXMuYXBpLm1ldHJpY0xhdGVuY3koe1xuICAgICAgICBzdGF0aXN0aWM6ICdwOTUnLFxuICAgICAgfSkpO1xuICAgICAgdGhpcy5tb25pdG9yaW5nLmFwaUxhdGVuY3lUYWlsV2lkZ2V0LmFkZExlZnRNZXRyaWModGhpcy5hcGkubWV0cmljTGF0ZW5jeSh7XG4gICAgICAgIHN0YXRpc3RpYzogJ3A5OScsXG4gICAgICB9KSk7XG4gICAgfVxuXG4gICAgaWYgKHByb3BzLmF1dG9HZW5lcmF0ZVJvdXRlcyA/PyB0cnVlKSB7XG4gICAgICBmb3IgKGNvbnN0IHBhdGggaW4gdGhpcy5hcGlTcGVjLnBhdGhzKSB7XG4gICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy5hcGlTcGVjLnBhdGhzLCBwYXRoKSkge1xuICAgICAgICAgIGNvbnN0IHBhdGhJdGVtID0gdGhpcy5hcGlTcGVjLnBhdGhzW3BhdGhdO1xuICAgICAgICAgIGZvciAoY29uc3QgbWV0aG9kIGluIHBhdGhJdGVtKSB7XG4gICAgICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHBhdGhJdGVtLCBtZXRob2QpICYmXG4gICAgICAgICAgICAgIFsnZ2V0JywgJ3Bvc3QnLCAncHV0JywgJ2RlbGV0ZScsICdwYXRjaCcsICdvcHRpb25zJywgJ2hlYWQnXS5pbmRleE9mKG1ldGhvZCkgPj0gMCkge1xuICAgICAgICAgICAgICAvLyBBZGQgYWxsIG9wZXJhdGlvbnNcbiAgICAgICAgICAgICAgdGhpcy5hZGRSZXN0UmVzb3VyY2UocGF0aCBhcyBhbnksIG1ldGhvZCBhcyBhbnkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICB9XG5cbiAgLyoqXG4gICAqIGdldEZ1bmN0aW9uRm9yT3BlcmF0aW9uXG4gICAqL1xuICBwdWJsaWMgZ2V0RnVuY3Rpb25Gb3JPcGVyYXRpb24ob3BlcmF0aW9uSWQ6IGtleW9mIE9QUyk6IExhbWJkYUZ1bmN0aW9uIHtcbiAgICByZXR1cm4gdGhpcy5fZnVuY3Rpb25zW29wZXJhdGlvbklkIGFzIHN0cmluZ107XG4gIH1cblxuICBwdWJsaWMgYWRkUm91dGU8UCBleHRlbmRzIGtleW9mIFBBVEhTPihwYXRoOiBQLCBtZXRob2Q6IGtleW9mIFBBVEhTW1BdLCBoYW5kbGVyOiBsYW1iZGEuSUZ1bmN0aW9uKSB7XG4gICAgdGhpcy5hZGRDdXN0b21Sb3V0ZShwYXRoIGFzIHN0cmluZywgbWV0aG9kIGFzIHN0cmluZywgaGFuZGxlcik7XG4gIH1cblxuICBwdWJsaWMgYWRkQ3VzdG9tUm91dGUocGF0aDogc3RyaW5nLCBtZXRob2Q6IHN0cmluZywgaGFuZGxlcjogbGFtYmRhLklGdW5jdGlvbikge1xuICAgIGNvbnN0IGFwaU1ldGhvZCA9IHRoaXMubWV0aG9kVHJhbnNmb3JtKG1ldGhvZCk7XG4gICAgbmV3IGFwaUdXLkh0dHBSb3V0ZSh0aGlzLCBgJHthcGlNZXRob2R9JHtwYXRofWAsIHtcbiAgICAgIGh0dHBBcGk6IHRoaXMuYXBpLFxuICAgICAgcm91dGVLZXk6IGFwaUdXLkh0dHBSb3V0ZUtleS53aXRoKHBhdGgsIGFwaU1ldGhvZCksXG4gICAgICBpbnRlZ3JhdGlvbjogbmV3IGFwaUdXSW50ZWcuSHR0cExhbWJkYUludGVncmF0aW9uKGAke2FwaU1ldGhvZH0ke3BhdGh9SW50ZWdyYXRpb25gLCBoYW5kbGVyKSxcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBhZGRSZXN0UmVzb3VyY2U8UCBleHRlbmRzIGtleW9mIFBBVEhTPihwYXRoOiBQLCBtZXRob2Q6IGtleW9mIFBBVEhTW1BdKSB7XG4gICAgY29uc3Qgb2FQYXRoID0gdGhpcy5hcGlTcGVjLnBhdGhzIVtwYXRoIGFzIHN0cmluZ107XG4gICAgY29uc3Qgb3BlcmF0aW9uID0gb2FQYXRoW21ldGhvZCBhcyBrZXlvZiBQYXRoSXRlbU9iamVjdF0gYXMgT3BlcmF0aW9uT2JqZWN0O1xuICAgIGNvbnN0IG9wZXJhdGlvbklkID0gb3BlcmF0aW9uLm9wZXJhdGlvbklkITtcbiAgICBjb25zdCBkZXNjcmlwdGlvbiA9IGAke21ldGhvZH0gJHtwYXRofSAtICR7b3BlcmF0aW9uLnN1bW1hcnl9YDtcblxuICAgIGNvbnN0IGN1c3RvbUxhbWJkYU9wdGlvbnMgPSB0aGlzLnByb3BzLmxhbWJkYU9wdGlvbnNCeU9wZXJhdGlvbiA/IHRoaXMucHJvcHMubGFtYmRhT3B0aW9uc0J5T3BlcmF0aW9uW29wZXJhdGlvbklkIGFzIGtleW9mIE9QU10gOiB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIHRoaXMuYWRkQ3VzdG9tUmVzdFJlc291cmNlKHBhdGggYXMgc3RyaW5nLCBtZXRob2QgYXMgc3RyaW5nLCBvcGVyYXRpb25JZCwgZGVzY3JpcHRpb24sIGN1c3RvbUxhbWJkYU9wdGlvbnMpO1xuICB9XG5cbiAgcHVibGljIGFkZEN1c3RvbVJlc3RSZXNvdXJjZShwYXRoOiBzdHJpbmcsIG1ldGhvZDogc3RyaW5nLCBvcGVyYXRpb25JZDogc3RyaW5nLCBkZXNjcmlwdGlvbjogc3RyaW5nLCBhZGRpdGlvbmFsTGFtYmRhT3B0aW9uczogTGFtYmRhT3B0aW9ucyA9IHt9KSB7XG5cbiAgICBjb25zdCBlbnRyeUZpbGUgPSBgLi9zcmMvbGFtYmRhL3Jlc3QuJHtvcGVyYXRpb25JZH0udHNgO1xuICAgIGlmICghZnMuZXhpc3RzU3luYyhlbnRyeUZpbGUpKSB7XG4gICAgICB0aGlzLmNyZWF0ZUVudHJ5RmlsZShlbnRyeUZpbGUsIG1ldGhvZCwgb3BlcmF0aW9uSWQpO1xuICAgIH1cblxuICAgIGNvbnN0IGxhbWJkYU9wdGlvbnMgPSB7XG4gICAgICAuLi50aGlzLnByb3BzLmxhbWJkYU9wdGlvbnMgJiYge1xuICAgICAgICAuLi50aGlzLnByb3BzLmxhbWJkYU9wdGlvbnMsXG4gICAgICB9LFxuICAgICAgLi4uYWRkaXRpb25hbExhbWJkYU9wdGlvbnMsXG4gICAgfTtcblxuICAgIGNvbnN0IGZuID0gbmV3IExhbWJkYUZ1bmN0aW9uKHRoaXMsIGBGbiR7b3BlcmF0aW9uSWR9YCwge1xuICAgICAgc3RhZ2VOYW1lOiB0aGlzLnByb3BzLnN0YWdlTmFtZSxcbiAgICAgIGFkZGl0aW9uYWxFbnY6IHtcbiAgICAgICAgLi4udGhpcy5wcm9wcy5kb21haW5OYW1lICYmIHtcbiAgICAgICAgICBET01BSU5fTkFNRTogdGhpcy5wcm9wcy5kb21haW5OYW1lLFxuICAgICAgICB9LFxuICAgICAgICAuLi50aGlzLnByb3BzLmFkZGl0aW9uYWxFbnYsXG4gICAgICB9LFxuICAgICAgZW50cnk6IGVudHJ5RmlsZSxcbiAgICAgIGRlc2NyaXB0aW9uOiBgWyR7dGhpcy5wcm9wcy5zdGFnZU5hbWV9XSAke2Rlc2NyaXB0aW9ufWAsXG4gICAgICAuLi50aGlzLmF1dGhlbnRpY2F0aW9uICYmIHtcbiAgICAgICAgdXNlclBvb2w6IHRoaXMuYXV0aGVudGljYXRpb24/LnVzZXJwb29sLFxuICAgICAgfSxcbiAgICAgIC4uLnRoaXMuc2luZ2xlVGFibGVEYXRhc3RvcmUgJiYge1xuICAgICAgICB0YWJsZTogdGhpcy5zaW5nbGVUYWJsZURhdGFzdG9yZS50YWJsZSxcbiAgICAgICAgdGFibGVXcml0ZXM6IHRoaXMudGFibGVXcml0ZUFjY2Vzc0Zvck1ldGhvZChtZXRob2QpLFxuICAgICAgfSxcbiAgICAgIC4uLnRoaXMuYXNzZXRDZG4gJiYge1xuICAgICAgICBhc3NldERvbWFpbk5hbWU6IHRoaXMuYXNzZXRDZG4uYXNzZXREb21haW5OYW1lLFxuICAgICAgICBhc3NldEJ1Y2tldDogdGhpcy5hc3NldENkbi5hc3NldEJ1Y2tldCxcbiAgICAgIH0sXG4gICAgICBsYW1iZGFPcHRpb25zLFxuICAgICAgbGFtYmRhVHJhY2luZzogdGhpcy5wcm9wcy5sYW1iZGFUcmFjaW5nLFxuICAgIH0pO1xuICAgIHRoaXMuX2Z1bmN0aW9uc1tvcGVyYXRpb25JZF0gPSBmbjtcbiAgICBjZGsuVGFncy5vZihmbikuYWRkKCdPcGVuQVBJJywgZGVzY3JpcHRpb24ucmVwbGFjZSgvW15cXHdcXHNcXGRfLjovPStcXC1AXS9nLCAnJykpO1xuXG4gICAgaWYgKHRoaXMubW9uaXRvcmluZykge1xuICAgICAgdGhpcy5tb25pdG9yaW5nLmxhbWJkYUR1cmF0aW9uc1dpZGdldC5hZGRMZWZ0TWV0cmljKGZuLm1ldHJpY0R1cmF0aW9uKCkpO1xuICAgICAgdGhpcy5tb25pdG9yaW5nLmxhbWJkYUludm9rZXNXaWRnZXQuYWRkTGVmdE1ldHJpYyhmbi5tZXRyaWNJbnZvY2F0aW9ucygpKTtcbiAgICAgIHRoaXMubW9uaXRvcmluZy5sYW1iZGFFcnJvcnNXaWRnZXQuYWRkTGVmdE1ldHJpYyhmbi5tZXRyaWNFcnJvcnMoKSk7XG4gICAgICB0aGlzLm1vbml0b3JpbmcubGFtYmRhRXJyb3JzV2lkZ2V0LmFkZExlZnRNZXRyaWMoZm4ubWV0cmljVGhyb3R0bGVzKCkpO1xuICAgIH1cblxuICAgIGNvbnN0IGhhc1ZlcnNpb25Db25maWcgPSBsYW1iZGFPcHRpb25zLmN1cnJlbnRWZXJzaW9uT3B0aW9ucyAhPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5hZGRDdXN0b21Sb3V0ZShwYXRoLCBtZXRob2QsIGhhc1ZlcnNpb25Db25maWcgPyBmbi5jdXJyZW50VmVyc2lvbiA6IGZuKTtcblxuICAgIHJldHVybiBmbjtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlRW50cnlGaWxlKGVudHJ5RmlsZTogc3RyaW5nLCBtZXRob2Q6IHN0cmluZywgb3BlcmF0aW9uSWQ6IHN0cmluZykge1xuICAgIGxldCBmYWN0b3J5Q2FsbDtcbiAgICBsZXQgbG9ncztcbiAgICBzd2l0Y2ggKG1ldGhvZC50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICBjYXNlICdwb3N0JzpcbiAgICAgIGNhc2UgJ3B1dCc6XG4gICAgICBjYXNlICdwYXRjaCc6XG4gICAgICAgIGZhY3RvcnlDYWxsID0gYGh0dHAuY3JlYXRlT3BlbkFwaUhhbmRsZXJXaXRoUmVxdWVzdEJvZHk8b3BlcmF0aW9uc1snJHtvcGVyYXRpb25JZH0nXT4oYXN5bmMgKGN0eCwgZGF0YSkgPT4ge2A7XG4gICAgICAgIGxvZ3MgPSAnY3R4LmxvZ2dlci5pbmZvKEpTT04uc3RyaW5naWZ5KGRhdGEpKTsnO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ29wdGlvbnMnOlxuICAgICAgY2FzZSAnZGVsZXRlJzpcbiAgICAgIGNhc2UgJ2dldCc6XG4gICAgICBjYXNlICdoZWFkJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGZhY3RvcnlDYWxsID0gYGh0dHAuY3JlYXRlT3BlbkFwaUhhbmRsZXI8b3BlcmF0aW9uc1snJHtvcGVyYXRpb25JZH0nXT4oYXN5bmMgKGN0eCkgPT4ge2A7XG4gICAgICAgIGxvZ3MgPSAnJztcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgZnMud3JpdGVGaWxlU3luYyhlbnRyeUZpbGUsIGBpbXBvcnQgeyBodHRwLCBlcnJvcnMgfSBmcm9tICdAdGFpbW9zL2xhbWJkYS10b29sYm94JztcbmltcG9ydCB7IG9wZXJhdGlvbnMgfSBmcm9tICcuL3R5cGVzLmdlbmVyYXRlZCc7XG5cbmV4cG9ydCBjb25zdCBoYW5kbGVyID0gJHtmYWN0b3J5Q2FsbH1cbiAgY3R4LmxvZ2dlci5pbmZvKEpTT04uc3RyaW5naWZ5KGN0eC5ldmVudCkpO1xuICAke2xvZ3N9XG4gIHRocm93IG5ldyBlcnJvcnMuSHR0cEVycm9yKDUwMCwgJ05vdCB5ZXQgaW1wbGVtZW50ZWQnKTtcbn0pO2AsIHtcbiAgICAgIGVuY29kaW5nOiAndXRmLTgnLFxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSB0YWJsZVdyaXRlQWNjZXNzRm9yTWV0aG9kKG1ldGhvZDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgc3dpdGNoIChtZXRob2QudG9Mb3dlckNhc2UoKSkge1xuICAgICAgY2FzZSAnZGVsZXRlJzpcbiAgICAgIGNhc2UgJ3Bvc3QnOlxuICAgICAgY2FzZSAncHV0JzpcbiAgICAgIGNhc2UgJ3BhdGNoJzpcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICBjYXNlICdvcHRpb25zJzpcbiAgICAgIGNhc2UgJ2dldCc6XG4gICAgICBjYXNlICdoZWFkJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIG1ldGhvZFRyYW5zZm9ybShtZXRob2Q6IHN0cmluZykge1xuICAgIHN3aXRjaCAobWV0aG9kLnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgIGNhc2UgJ2dldCc6XG4gICAgICAgIHJldHVybiBhcGlHVy5IdHRwTWV0aG9kLkdFVDtcbiAgICAgIGNhc2UgJ2RlbGV0ZSc6XG4gICAgICAgIHJldHVybiBhcGlHVy5IdHRwTWV0aG9kLkRFTEVURTtcbiAgICAgIGNhc2UgJ3Bvc3QnOlxuICAgICAgICByZXR1cm4gYXBpR1cuSHR0cE1ldGhvZC5QT1NUO1xuICAgICAgY2FzZSAncHV0JzpcbiAgICAgICAgcmV0dXJuIGFwaUdXLkh0dHBNZXRob2QuUFVUO1xuICAgICAgY2FzZSAnaGVhZCc6XG4gICAgICAgIHJldHVybiBhcGlHVy5IdHRwTWV0aG9kLkhFQUQ7XG4gICAgICBjYXNlICdvcHRpb25zJzpcbiAgICAgICAgcmV0dXJuIGFwaUdXLkh0dHBNZXRob2QuT1BUSU9OUztcbiAgICAgIGNhc2UgJ3BhdGNoJzpcbiAgICAgICAgcmV0dXJuIGFwaUdXLkh0dHBNZXRob2QuUEFUQ0g7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gYXBpR1cuSHR0cE1ldGhvZC5BTlk7XG4gICAgfVxuICB9XG59Il19
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
import { aws_cloudwatch as cloudwatch } from 'aws-cdk-lib';
|
|
2
|
-
import { Construct } from 'constructs';
|
|
3
|
-
export interface MonitoringProps {
|
|
4
|
-
/**
|
|
5
|
-
* Name of the API
|
|
6
|
-
*/
|
|
7
|
-
apiName: string;
|
|
8
|
-
/**
|
|
9
|
-
* Deployment stage (e.g. dev)
|
|
10
|
-
*/
|
|
11
|
-
stageName: string;
|
|
12
|
-
}
|
|
13
|
-
export declare class Monitoring extends Construct {
|
|
14
|
-
readonly dashboard: cloudwatch.Dashboard;
|
|
15
|
-
readonly apiErrorsWidget: cloudwatch.GraphWidget;
|
|
16
|
-
readonly apiLatencyWidget: cloudwatch.GraphWidget;
|
|
17
|
-
readonly apiLatencyTailWidget: cloudwatch.GraphWidget;
|
|
18
|
-
readonly lambdaErrorsWidget: cloudwatch.GraphWidget;
|
|
19
|
-
readonly lambdaInvokesWidget: cloudwatch.GraphWidget;
|
|
20
|
-
readonly lambdaDurationsWidget: cloudwatch.GraphWidget;
|
|
21
|
-
constructor(scope: Construct, id: string, props: MonitoringProps);
|
|
22
|
-
getTextWidget(fileName: string): cloudwatch.TextWidget;
|
|
23
|
-
}
|
|
@@ -1,47 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.Monitoring = void 0;
|
|
4
|
-
const fs_1 = require("fs");
|
|
5
|
-
const aws_cdk_lib_1 = require("aws-cdk-lib");
|
|
6
|
-
const constructs_1 = require("constructs");
|
|
7
|
-
class Monitoring extends constructs_1.Construct {
|
|
8
|
-
constructor(scope, id, props) {
|
|
9
|
-
super(scope, id);
|
|
10
|
-
this.dashboard = new aws_cdk_lib_1.aws_cloudwatch.Dashboard(this, 'Dashboard', {
|
|
11
|
-
dashboardName: `${props.apiName}-${props.stageName}`.replace(/[^\w-]/g, '-'),
|
|
12
|
-
});
|
|
13
|
-
this.apiErrorsWidget = new aws_cdk_lib_1.aws_cloudwatch.GraphWidget({
|
|
14
|
-
title: 'API Errors',
|
|
15
|
-
});
|
|
16
|
-
this.apiLatencyWidget = new aws_cdk_lib_1.aws_cloudwatch.GraphWidget({
|
|
17
|
-
title: 'API Latency',
|
|
18
|
-
});
|
|
19
|
-
this.apiLatencyTailWidget = new aws_cdk_lib_1.aws_cloudwatch.GraphWidget({
|
|
20
|
-
title: 'API Latency Longtail',
|
|
21
|
-
});
|
|
22
|
-
this.dashboard.addWidgets(this.getTextWidget('api'), this.apiErrorsWidget, this.apiLatencyWidget, this.apiLatencyTailWidget);
|
|
23
|
-
this.lambdaErrorsWidget = new aws_cdk_lib_1.aws_cloudwatch.GraphWidget({
|
|
24
|
-
title: 'Lambda Errors/Throttles',
|
|
25
|
-
});
|
|
26
|
-
this.lambdaInvokesWidget = new aws_cdk_lib_1.aws_cloudwatch.GraphWidget({
|
|
27
|
-
title: 'Lambda Invocations',
|
|
28
|
-
});
|
|
29
|
-
this.lambdaDurationsWidget = new aws_cdk_lib_1.aws_cloudwatch.GraphWidget({
|
|
30
|
-
title: 'Lambda Duration',
|
|
31
|
-
});
|
|
32
|
-
this.dashboard.addWidgets(this.getTextWidget('functions'), this.lambdaErrorsWidget, this.lambdaInvokesWidget, this.lambdaDurationsWidget);
|
|
33
|
-
}
|
|
34
|
-
getTextWidget(fileName) {
|
|
35
|
-
const file = `./dashboard/${fileName}.md`;
|
|
36
|
-
let markdown = `Create a file called './dashboard/${fileName}.md' to describe this widget`;
|
|
37
|
-
if ((0, fs_1.existsSync)(file)) {
|
|
38
|
-
markdown = (0, fs_1.readFileSync)(file).toString('utf-8');
|
|
39
|
-
}
|
|
40
|
-
return new aws_cdk_lib_1.aws_cloudwatch.TextWidget({
|
|
41
|
-
markdown,
|
|
42
|
-
height: 6,
|
|
43
|
-
});
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
exports.Monitoring = Monitoring;
|
|
47
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9uaXRvcmluZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb25zdHJ1Y3RzL21vbml0b3JpbmcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsMkJBQThDO0FBQzlDLDZDQUEyRDtBQUMzRCwyQ0FBdUM7QUFldkMsTUFBYSxVQUFXLFNBQVEsc0JBQVM7SUFZdkMsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUFzQjtRQUM5RCxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRWpCLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSw0QkFBVSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsV0FBVyxFQUFFO1lBQzNELGFBQWEsRUFBRSxHQUFHLEtBQUssQ0FBQyxPQUFPLElBQUksS0FBSyxDQUFDLFNBQVMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsR0FBRyxDQUFDO1NBQzdFLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSw0QkFBVSxDQUFDLFdBQVcsQ0FBQztZQUNoRCxLQUFLLEVBQUUsWUFBWTtTQUNwQixDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSw0QkFBVSxDQUFDLFdBQVcsQ0FBQztZQUNqRCxLQUFLLEVBQUUsYUFBYTtTQUNyQixDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsb0JBQW9CLEdBQUcsSUFBSSw0QkFBVSxDQUFDLFdBQVcsQ0FBQztZQUNyRCxLQUFLLEVBQUUsc0JBQXNCO1NBQzlCLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUN2QixJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxFQUN6QixJQUFJLENBQUMsZUFBZSxFQUNwQixJQUFJLENBQUMsZ0JBQWdCLEVBQ3JCLElBQUksQ0FBQyxvQkFBb0IsQ0FDMUIsQ0FBQztRQUVGLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLDRCQUFVLENBQUMsV0FBVyxDQUFDO1lBQ25ELEtBQUssRUFBRSx5QkFBeUI7U0FDakMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLG1CQUFtQixHQUFHLElBQUksNEJBQVUsQ0FBQyxXQUFXLENBQUM7WUFDcEQsS0FBSyxFQUFFLG9CQUFvQjtTQUM1QixDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMscUJBQXFCLEdBQUcsSUFBSSw0QkFBVSxDQUFDLFdBQVcsQ0FBQztZQUN0RCxLQUFLLEVBQUUsaUJBQWlCO1NBQ3pCLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUN2QixJQUFJLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQyxFQUMvQixJQUFJLENBQUMsa0JBQWtCLEVBQ3ZCLElBQUksQ0FBQyxtQkFBbUIsRUFDeEIsSUFBSSxDQUFDLHFCQUFxQixDQUMzQixDQUFDO0lBQ0osQ0FBQztJQUVELGFBQWEsQ0FBQyxRQUFnQjtRQUM1QixNQUFNLElBQUksR0FBRyxlQUFlLFFBQVEsS0FBSyxDQUFDO1FBQzFDLElBQUksUUFBUSxHQUFHLHFDQUFxQyxRQUFRLDhCQUE4QixDQUFDO1FBQzNGLElBQUksSUFBQSxlQUFVLEVBQUMsSUFBSSxDQUFDLEVBQUU7WUFDcEIsUUFBUSxHQUFHLElBQUEsaUJBQVksRUFBQyxJQUFJLENBQUMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUM7U0FDakQ7UUFDRCxPQUFPLElBQUksNEJBQVUsQ0FBQyxVQUFVLENBQUM7WUFDL0IsUUFBUTtZQUNSLE1BQU0sRUFBRSxDQUFDO1NBQ1YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztDQUNGO0FBakVELGdDQWlFQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGV4aXN0c1N5bmMsIHJlYWRGaWxlU3luYyB9IGZyb20gJ2ZzJztcbmltcG9ydCB7IGF3c19jbG91ZHdhdGNoIGFzIGNsb3Vkd2F0Y2ggfSBmcm9tICdhd3MtY2RrLWxpYic7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcblxuZXhwb3J0IGludGVyZmFjZSBNb25pdG9yaW5nUHJvcHMge1xuXG4gIC8qKlxuICAgKiBOYW1lIG9mIHRoZSBBUElcbiAgICovXG4gIGFwaU5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogRGVwbG95bWVudCBzdGFnZSAoZS5nLiBkZXYpXG4gICAqL1xuICBzdGFnZU5hbWU6IHN0cmluZztcbn1cblxuZXhwb3J0IGNsYXNzIE1vbml0b3JpbmcgZXh0ZW5kcyBDb25zdHJ1Y3Qge1xuXG4gIHB1YmxpYyByZWFkb25seSBkYXNoYm9hcmQ6IGNsb3Vkd2F0Y2guRGFzaGJvYXJkO1xuXG4gIHB1YmxpYyByZWFkb25seSBhcGlFcnJvcnNXaWRnZXQ6IGNsb3Vkd2F0Y2guR3JhcGhXaWRnZXQ7XG4gIHB1YmxpYyByZWFkb25seSBhcGlMYXRlbmN5V2lkZ2V0OiBjbG91ZHdhdGNoLkdyYXBoV2lkZ2V0O1xuICBwdWJsaWMgcmVhZG9ubHkgYXBpTGF0ZW5jeVRhaWxXaWRnZXQ6IGNsb3Vkd2F0Y2guR3JhcGhXaWRnZXQ7XG5cbiAgcHVibGljIHJlYWRvbmx5IGxhbWJkYUVycm9yc1dpZGdldDogY2xvdWR3YXRjaC5HcmFwaFdpZGdldDtcbiAgcHVibGljIHJlYWRvbmx5IGxhbWJkYUludm9rZXNXaWRnZXQ6IGNsb3Vkd2F0Y2guR3JhcGhXaWRnZXQ7XG4gIHB1YmxpYyByZWFkb25seSBsYW1iZGFEdXJhdGlvbnNXaWRnZXQ6IGNsb3Vkd2F0Y2guR3JhcGhXaWRnZXQ7XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IE1vbml0b3JpbmdQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICB0aGlzLmRhc2hib2FyZCA9IG5ldyBjbG91ZHdhdGNoLkRhc2hib2FyZCh0aGlzLCAnRGFzaGJvYXJkJywge1xuICAgICAgZGFzaGJvYXJkTmFtZTogYCR7cHJvcHMuYXBpTmFtZX0tJHtwcm9wcy5zdGFnZU5hbWV9YC5yZXBsYWNlKC9bXlxcdy1dL2csICctJyksXG4gICAgfSk7XG5cbiAgICB0aGlzLmFwaUVycm9yc1dpZGdldCA9IG5ldyBjbG91ZHdhdGNoLkdyYXBoV2lkZ2V0KHtcbiAgICAgIHRpdGxlOiAnQVBJIEVycm9ycycsXG4gICAgfSk7XG4gICAgdGhpcy5hcGlMYXRlbmN5V2lkZ2V0ID0gbmV3IGNsb3Vkd2F0Y2guR3JhcGhXaWRnZXQoe1xuICAgICAgdGl0bGU6ICdBUEkgTGF0ZW5jeScsXG4gICAgfSk7XG4gICAgdGhpcy5hcGlMYXRlbmN5VGFpbFdpZGdldCA9IG5ldyBjbG91ZHdhdGNoLkdyYXBoV2lkZ2V0KHtcbiAgICAgIHRpdGxlOiAnQVBJIExhdGVuY3kgTG9uZ3RhaWwnLFxuICAgIH0pO1xuXG4gICAgdGhpcy5kYXNoYm9hcmQuYWRkV2lkZ2V0cyhcbiAgICAgIHRoaXMuZ2V0VGV4dFdpZGdldCgnYXBpJyksXG4gICAgICB0aGlzLmFwaUVycm9yc1dpZGdldCxcbiAgICAgIHRoaXMuYXBpTGF0ZW5jeVdpZGdldCxcbiAgICAgIHRoaXMuYXBpTGF0ZW5jeVRhaWxXaWRnZXQsXG4gICAgKTtcblxuICAgIHRoaXMubGFtYmRhRXJyb3JzV2lkZ2V0ID0gbmV3IGNsb3Vkd2F0Y2guR3JhcGhXaWRnZXQoe1xuICAgICAgdGl0bGU6ICdMYW1iZGEgRXJyb3JzL1Rocm90dGxlcycsXG4gICAgfSk7XG4gICAgdGhpcy5sYW1iZGFJbnZva2VzV2lkZ2V0ID0gbmV3IGNsb3Vkd2F0Y2guR3JhcGhXaWRnZXQoe1xuICAgICAgdGl0bGU6ICdMYW1iZGEgSW52b2NhdGlvbnMnLFxuICAgIH0pO1xuICAgIHRoaXMubGFtYmRhRHVyYXRpb25zV2lkZ2V0ID0gbmV3IGNsb3Vkd2F0Y2guR3JhcGhXaWRnZXQoe1xuICAgICAgdGl0bGU6ICdMYW1iZGEgRHVyYXRpb24nLFxuICAgIH0pO1xuXG4gICAgdGhpcy5kYXNoYm9hcmQuYWRkV2lkZ2V0cyhcbiAgICAgIHRoaXMuZ2V0VGV4dFdpZGdldCgnZnVuY3Rpb25zJyksXG4gICAgICB0aGlzLmxhbWJkYUVycm9yc1dpZGdldCxcbiAgICAgIHRoaXMubGFtYmRhSW52b2tlc1dpZGdldCxcbiAgICAgIHRoaXMubGFtYmRhRHVyYXRpb25zV2lkZ2V0LFxuICAgICk7XG4gIH1cblxuICBnZXRUZXh0V2lkZ2V0KGZpbGVOYW1lOiBzdHJpbmcpOiBjbG91ZHdhdGNoLlRleHRXaWRnZXQge1xuICAgIGNvbnN0IGZpbGUgPSBgLi9kYXNoYm9hcmQvJHtmaWxlTmFtZX0ubWRgO1xuICAgIGxldCBtYXJrZG93biA9IGBDcmVhdGUgYSBmaWxlIGNhbGxlZCAnLi9kYXNoYm9hcmQvJHtmaWxlTmFtZX0ubWQnIHRvIGRlc2NyaWJlIHRoaXMgd2lkZ2V0YDtcbiAgICBpZiAoZXhpc3RzU3luYyhmaWxlKSkge1xuICAgICAgbWFya2Rvd24gPSByZWFkRmlsZVN5bmMoZmlsZSkudG9TdHJpbmcoJ3V0Zi04Jyk7XG4gICAgfVxuICAgIHJldHVybiBuZXcgY2xvdWR3YXRjaC5UZXh0V2lkZ2V0KHtcbiAgICAgIG1hcmtkb3duLFxuICAgICAgaGVpZ2h0OiA2LFxuICAgIH0pO1xuICB9XG59Il19
|
|
@@ -1,63 +0,0 @@
|
|
|
1
|
-
import { aws_cognito as cognito, aws_dynamodb as dynamodb, aws_events as events, aws_s3 as s3 } from 'aws-cdk-lib';
|
|
2
|
-
import { Construct } from 'constructs';
|
|
3
|
-
import { LambdaFunction, LambdaOptions } from './func';
|
|
4
|
-
export interface ScheduledFunctionProps {
|
|
5
|
-
/**
|
|
6
|
-
* Name of the scheduler
|
|
7
|
-
*/
|
|
8
|
-
name: string;
|
|
9
|
-
/**
|
|
10
|
-
* Deployment stage (e.g. dev)
|
|
11
|
-
*/
|
|
12
|
-
stageName: string;
|
|
13
|
-
/**
|
|
14
|
-
* DynamoDB that is used as datastore
|
|
15
|
-
* The Lambda function will have read access to this table automatically
|
|
16
|
-
* The name of the table is available as process.env.TABLE
|
|
17
|
-
*/
|
|
18
|
-
table?: dynamodb.ITable;
|
|
19
|
-
/**
|
|
20
|
-
* Activate write permissions to the DynamoDB table
|
|
21
|
-
*/
|
|
22
|
-
tableWrites?: boolean;
|
|
23
|
-
/**
|
|
24
|
-
* Cognito user pool
|
|
25
|
-
* The name of the pool is available as process.env.USER_POOL_ID
|
|
26
|
-
*/
|
|
27
|
-
userPool?: cognito.IUserPool;
|
|
28
|
-
/**
|
|
29
|
-
* Bucket that is used for assets and published using the asset CDN
|
|
30
|
-
* The name of the bucket is available as process.env.ASSET_BUCKET
|
|
31
|
-
*/
|
|
32
|
-
assetBucket?: s3.Bucket;
|
|
33
|
-
/**
|
|
34
|
-
* Fully qualified domain name of the asset CDN
|
|
35
|
-
* It is available as process.env.ASSET_DOMAIN_NAME
|
|
36
|
-
*/
|
|
37
|
-
assetDomainName?: string;
|
|
38
|
-
/**
|
|
39
|
-
* Should the AWS-SDK be packaged with the Lambda code or excluded
|
|
40
|
-
*
|
|
41
|
-
* @default false (exclude SDK and use runtime provided one)
|
|
42
|
-
*/
|
|
43
|
-
includeSDK?: boolean;
|
|
44
|
-
/**
|
|
45
|
-
* additional environment variables of the Lambda function
|
|
46
|
-
*/
|
|
47
|
-
additionalEnv?: {
|
|
48
|
-
[key: string]: string;
|
|
49
|
-
};
|
|
50
|
-
/**
|
|
51
|
-
* additional options for the underlying Lambda function construct
|
|
52
|
-
*/
|
|
53
|
-
lambdaOptions?: LambdaOptions;
|
|
54
|
-
/**
|
|
55
|
-
* The schedule to run the function
|
|
56
|
-
*/
|
|
57
|
-
schedule: events.Schedule;
|
|
58
|
-
}
|
|
59
|
-
export declare class ScheduledFunction extends Construct {
|
|
60
|
-
readonly lambdaFunction: LambdaFunction;
|
|
61
|
-
readonly rule: events.Rule;
|
|
62
|
-
constructor(scope: Construct, id: string, props: ScheduledFunctionProps);
|
|
63
|
-
}
|
|
@@ -1,54 +0,0 @@
|
|
|
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 __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
-
if (mod && mod.__esModule) return mod;
|
|
20
|
-
var result = {};
|
|
21
|
-
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
-
__setModuleDefault(result, mod);
|
|
23
|
-
return result;
|
|
24
|
-
};
|
|
25
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
|
-
exports.ScheduledFunction = void 0;
|
|
27
|
-
const fs = __importStar(require("fs"));
|
|
28
|
-
const aws_cdk_lib_1 = require("aws-cdk-lib");
|
|
29
|
-
const constructs_1 = require("constructs");
|
|
30
|
-
const func_1 = require("./func");
|
|
31
|
-
class ScheduledFunction extends constructs_1.Construct {
|
|
32
|
-
constructor(scope, id, props) {
|
|
33
|
-
super(scope, id);
|
|
34
|
-
const entryFile = `./src/lambda/schedule.${props.name.toLowerCase().replace(/[^\w-]/g, '-')}.ts`;
|
|
35
|
-
if (!fs.existsSync(entryFile)) {
|
|
36
|
-
fs.writeFileSync(entryFile, `export async function handler(_event: AWSLambda.ScheduledEvent): Promise<void> {
|
|
37
|
-
throw new Error('Not yet implemented');
|
|
38
|
-
});`, {
|
|
39
|
-
encoding: 'utf-8',
|
|
40
|
-
});
|
|
41
|
-
}
|
|
42
|
-
this.lambdaFunction = new func_1.LambdaFunction(this, 'Resource', {
|
|
43
|
-
entry: entryFile,
|
|
44
|
-
description: `Scheduler for ${props.name}`,
|
|
45
|
-
...props,
|
|
46
|
-
});
|
|
47
|
-
this.rule = new aws_cdk_lib_1.aws_events.Rule(this, 'RuleNotifyHosts', {
|
|
48
|
-
schedule: props.schedule,
|
|
49
|
-
targets: [new aws_cdk_lib_1.aws_events_targets.LambdaFunction(this.lambdaFunction)],
|
|
50
|
-
});
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
exports.ScheduledFunction = ScheduledFunction;
|
|
54
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NoZWR1bGVkLWZ1bmMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29uc3RydWN0cy9zY2hlZHVsZWQtZnVuYy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLHVDQUF5QjtBQUN6Qiw2Q0FNcUI7QUFDckIsMkNBQXVDO0FBQ3ZDLGlDQUF1RDtBQW9FdkQsTUFBYSxpQkFBa0IsU0FBUSxzQkFBUztJQUs5QyxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQTZCO1FBQ3JFLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFakIsTUFBTSxTQUFTLEdBQUcseUJBQXlCLEtBQUssQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxHQUFHLENBQUMsS0FBSyxDQUFDO1FBQ2pHLElBQUksQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxFQUFFO1lBQzdCLEVBQUUsQ0FBQyxhQUFhLENBQUMsU0FBUyxFQUFFOztJQUU5QixFQUFFO2dCQUNFLFFBQVEsRUFBRSxPQUFPO2FBQ2xCLENBQUMsQ0FBQztTQUNKO1FBRUQsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLHFCQUFjLENBQUMsSUFBSSxFQUFFLFVBQVUsRUFBRTtZQUN6RCxLQUFLLEVBQUUsU0FBUztZQUNoQixXQUFXLEVBQUUsaUJBQWlCLEtBQUssQ0FBQyxJQUFJLEVBQUU7WUFDMUMsR0FBRyxLQUFLO1NBQ1QsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLHdCQUFNLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxpQkFBaUIsRUFBRTtZQUNuRCxRQUFRLEVBQUUsS0FBSyxDQUFDLFFBQVE7WUFDeEIsT0FBTyxFQUFFLENBQUMsSUFBSSxnQ0FBYSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7U0FDakUsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztDQUNGO0FBM0JELDhDQTJCQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGZzIGZyb20gJ2ZzJztcbmltcG9ydCB7XG4gIGF3c19jb2duaXRvIGFzIGNvZ25pdG8sXG4gIGF3c19keW5hbW9kYiBhcyBkeW5hbW9kYixcbiAgYXdzX2V2ZW50cyBhcyBldmVudHMsXG4gIGF3c19ldmVudHNfdGFyZ2V0cyBhcyBldmVudHNUYXJnZXRzLFxuICBhd3NfczMgYXMgczMsXG59IGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0IHsgTGFtYmRhRnVuY3Rpb24sIExhbWJkYU9wdGlvbnMgfSBmcm9tICcuL2Z1bmMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFNjaGVkdWxlZEZ1bmN0aW9uUHJvcHMge1xuICAvKipcbiAgICogTmFtZSBvZiB0aGUgc2NoZWR1bGVyXG4gICAqL1xuICBuYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIERlcGxveW1lbnQgc3RhZ2UgKGUuZy4gZGV2KVxuICAgKi9cbiAgc3RhZ2VOYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIER5bmFtb0RCIHRoYXQgaXMgdXNlZCBhcyBkYXRhc3RvcmVcbiAgICogVGhlIExhbWJkYSBmdW5jdGlvbiB3aWxsIGhhdmUgcmVhZCBhY2Nlc3MgdG8gdGhpcyB0YWJsZSBhdXRvbWF0aWNhbGx5XG4gICAqIFRoZSBuYW1lIG9mIHRoZSB0YWJsZSBpcyBhdmFpbGFibGUgYXMgcHJvY2Vzcy5lbnYuVEFCTEVcbiAgICovXG4gIHRhYmxlPzogZHluYW1vZGIuSVRhYmxlO1xuXG4gIC8qKlxuICAgKiBBY3RpdmF0ZSB3cml0ZSBwZXJtaXNzaW9ucyB0byB0aGUgRHluYW1vREIgdGFibGVcbiAgICovXG4gIHRhYmxlV3JpdGVzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQ29nbml0byB1c2VyIHBvb2xcbiAgICogVGhlIG5hbWUgb2YgdGhlIHBvb2wgaXMgYXZhaWxhYmxlIGFzIHByb2Nlc3MuZW52LlVTRVJfUE9PTF9JRFxuICAgKi9cbiAgdXNlclBvb2w/OiBjb2duaXRvLklVc2VyUG9vbDtcblxuICAvKipcbiAgICogQnVja2V0IHRoYXQgaXMgdXNlZCBmb3IgYXNzZXRzIGFuZCBwdWJsaXNoZWQgdXNpbmcgdGhlIGFzc2V0IENETlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgYnVja2V0IGlzIGF2YWlsYWJsZSBhcyBwcm9jZXNzLmVudi5BU1NFVF9CVUNLRVRcbiAgICovXG4gIGFzc2V0QnVja2V0PzogczMuQnVja2V0O1xuXG4gIC8qKlxuICAgKiBGdWxseSBxdWFsaWZpZWQgZG9tYWluIG5hbWUgb2YgdGhlIGFzc2V0IENETlxuICAgKiBJdCBpcyBhdmFpbGFibGUgYXMgcHJvY2Vzcy5lbnYuQVNTRVRfRE9NQUlOX05BTUVcbiAgICovXG4gIGFzc2V0RG9tYWluTmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogU2hvdWxkIHRoZSBBV1MtU0RLIGJlIHBhY2thZ2VkIHdpdGggdGhlIExhbWJkYSBjb2RlIG9yIGV4Y2x1ZGVkXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlIChleGNsdWRlIFNESyBhbmQgdXNlIHJ1bnRpbWUgcHJvdmlkZWQgb25lKVxuICAgKi9cbiAgaW5jbHVkZVNESz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIGFkZGl0aW9uYWwgZW52aXJvbm1lbnQgdmFyaWFibGVzIG9mIHRoZSBMYW1iZGEgZnVuY3Rpb25cbiAgICovXG4gIGFkZGl0aW9uYWxFbnY/OiB7XG4gICAgW2tleTogc3RyaW5nXTogc3RyaW5nO1xuICB9O1xuXG4gIC8qKlxuICAgKiBhZGRpdGlvbmFsIG9wdGlvbnMgZm9yIHRoZSB1bmRlcmx5aW5nIExhbWJkYSBmdW5jdGlvbiBjb25zdHJ1Y3RcbiAgICovXG4gIGxhbWJkYU9wdGlvbnM/OiBMYW1iZGFPcHRpb25zO1xuXG4gIC8qKlxuICAgKiBUaGUgc2NoZWR1bGUgdG8gcnVuIHRoZSBmdW5jdGlvblxuICAgKi9cbiAgc2NoZWR1bGU6IGV2ZW50cy5TY2hlZHVsZTtcbn1cblxuZXhwb3J0IGNsYXNzIFNjaGVkdWxlZEZ1bmN0aW9uIGV4dGVuZHMgQ29uc3RydWN0IHtcblxuICBwdWJsaWMgcmVhZG9ubHkgbGFtYmRhRnVuY3Rpb246IExhbWJkYUZ1bmN0aW9uO1xuICBwdWJsaWMgcmVhZG9ubHkgcnVsZTogZXZlbnRzLlJ1bGU7XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IFNjaGVkdWxlZEZ1bmN0aW9uUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuXG4gICAgY29uc3QgZW50cnlGaWxlID0gYC4vc3JjL2xhbWJkYS9zY2hlZHVsZS4ke3Byb3BzLm5hbWUudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9bXlxcdy1dL2csICctJyl9LnRzYDtcbiAgICBpZiAoIWZzLmV4aXN0c1N5bmMoZW50cnlGaWxlKSkge1xuICAgICAgZnMud3JpdGVGaWxlU3luYyhlbnRyeUZpbGUsIGBleHBvcnQgYXN5bmMgZnVuY3Rpb24gaGFuZGxlcihfZXZlbnQ6IEFXU0xhbWJkYS5TY2hlZHVsZWRFdmVudCk6IFByb21pc2U8dm9pZD4ge1xuICB0aHJvdyBuZXcgRXJyb3IoJ05vdCB5ZXQgaW1wbGVtZW50ZWQnKTtcbn0pO2AsIHtcbiAgICAgICAgZW5jb2Rpbmc6ICd1dGYtOCcsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICB0aGlzLmxhbWJkYUZ1bmN0aW9uID0gbmV3IExhbWJkYUZ1bmN0aW9uKHRoaXMsICdSZXNvdXJjZScsIHtcbiAgICAgIGVudHJ5OiBlbnRyeUZpbGUsXG4gICAgICBkZXNjcmlwdGlvbjogYFNjaGVkdWxlciBmb3IgJHtwcm9wcy5uYW1lfWAsXG4gICAgICAuLi5wcm9wcyxcbiAgICB9KTtcbiAgICB0aGlzLnJ1bGUgPSBuZXcgZXZlbnRzLlJ1bGUodGhpcywgJ1J1bGVOb3RpZnlIb3N0cycsIHtcbiAgICAgIHNjaGVkdWxlOiBwcm9wcy5zY2hlZHVsZSxcbiAgICAgIHRhcmdldHM6IFtuZXcgZXZlbnRzVGFyZ2V0cy5MYW1iZGFGdW5jdGlvbih0aGlzLmxhbWJkYUZ1bmN0aW9uKV0sXG4gICAgfSk7XG4gIH1cbn0iXX0=
|
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
import * as apiGW from '@aws-cdk/aws-apigatewayv2-alpha';
|
|
2
|
-
import { Construct } from 'constructs';
|
|
3
|
-
import { LambdaFunction, LambdaOptions } from './func';
|
|
4
|
-
export interface HttpWebhookProps {
|
|
5
|
-
/**
|
|
6
|
-
* Name of the webhook
|
|
7
|
-
*/
|
|
8
|
-
name: string;
|
|
9
|
-
/**
|
|
10
|
-
* Deployment stage (e.g. dev)
|
|
11
|
-
*/
|
|
12
|
-
stageName: string;
|
|
13
|
-
/**
|
|
14
|
-
* Domain name of the Webhook API (e.g. example.com)
|
|
15
|
-
*/
|
|
16
|
-
domainName: string;
|
|
17
|
-
/**
|
|
18
|
-
* Hostname of the Webhook API
|
|
19
|
-
*/
|
|
20
|
-
hostname: string;
|
|
21
|
-
/**
|
|
22
|
-
* additional options for the underlying Lambda construct of all created functions
|
|
23
|
-
*/
|
|
24
|
-
lambdaOptions?: LambdaOptions;
|
|
25
|
-
}
|
|
26
|
-
export declare class HttpWebhook extends Construct {
|
|
27
|
-
private props;
|
|
28
|
-
readonly api: apiGW.HttpApi;
|
|
29
|
-
readonly handler: LambdaFunction;
|
|
30
|
-
private webhookDomainName;
|
|
31
|
-
constructor(scope: Construct, id: string, props: HttpWebhookProps);
|
|
32
|
-
private createHandler;
|
|
33
|
-
}
|
|
@@ -1,86 +0,0 @@
|
|
|
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 __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
-
if (mod && mod.__esModule) return mod;
|
|
20
|
-
var result = {};
|
|
21
|
-
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
-
__setModuleDefault(result, mod);
|
|
23
|
-
return result;
|
|
24
|
-
};
|
|
25
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
|
-
exports.HttpWebhook = void 0;
|
|
27
|
-
const fs = __importStar(require("fs"));
|
|
28
|
-
const apiGW = __importStar(require("@aws-cdk/aws-apigatewayv2-alpha"));
|
|
29
|
-
const apiGWInteg = __importStar(require("@aws-cdk/aws-apigatewayv2-integrations-alpha"));
|
|
30
|
-
const aws_cdk_lib_1 = require("aws-cdk-lib");
|
|
31
|
-
const constructs_1 = require("constructs");
|
|
32
|
-
const func_1 = require("./func");
|
|
33
|
-
class HttpWebhook extends constructs_1.Construct {
|
|
34
|
-
constructor(scope, id, props) {
|
|
35
|
-
super(scope, id);
|
|
36
|
-
this.props = props;
|
|
37
|
-
const hostedZone = aws_cdk_lib_1.aws_route53.HostedZone.fromLookup(this, 'Zone', { domainName: props.domainName });
|
|
38
|
-
this.webhookDomainName = `${props.hostname}.${props.domainName}`;
|
|
39
|
-
const dn = new apiGW.DomainName(this, 'DomainName', {
|
|
40
|
-
domainName: this.webhookDomainName,
|
|
41
|
-
certificate: new aws_cdk_lib_1.aws_certificatemanager.Certificate(this, 'Cert', {
|
|
42
|
-
domainName: this.webhookDomainName,
|
|
43
|
-
validation: aws_cdk_lib_1.aws_certificatemanager.CertificateValidation.fromDns(hostedZone),
|
|
44
|
-
}),
|
|
45
|
-
});
|
|
46
|
-
this.handler = this.createHandler();
|
|
47
|
-
this.api = new apiGW.HttpApi(this, 'Resource', {
|
|
48
|
-
apiName: `Webhook ${props.name} [${props.stageName}]`,
|
|
49
|
-
defaultDomainMapping: {
|
|
50
|
-
domainName: dn,
|
|
51
|
-
},
|
|
52
|
-
defaultIntegration: new apiGWInteg.HttpLambdaIntegration('Integration', this.handler),
|
|
53
|
-
});
|
|
54
|
-
new aws_cdk_lib_1.aws_route53.ARecord(this, 'DnsRecord', {
|
|
55
|
-
zone: hostedZone,
|
|
56
|
-
recordName: this.webhookDomainName,
|
|
57
|
-
target: aws_cdk_lib_1.aws_route53.RecordTarget.fromAlias(new aws_cdk_lib_1.aws_route53_targets.ApiGatewayv2DomainProperties(dn.regionalDomainName, dn.regionalHostedZoneId)),
|
|
58
|
-
});
|
|
59
|
-
}
|
|
60
|
-
createHandler() {
|
|
61
|
-
const description = `Webhook ${this.props.name}`;
|
|
62
|
-
const entryFile = `./src/lambda/webhook.${this.props.name.toLowerCase().replace(/[^\w-]/g, '-')}.ts`;
|
|
63
|
-
if (!fs.existsSync(entryFile)) {
|
|
64
|
-
fs.mkdirSync('./src/lambda', { recursive: true });
|
|
65
|
-
fs.writeFileSync(entryFile, `import { http, errors } from '@taimos/lambda-toolbox';
|
|
66
|
-
|
|
67
|
-
export const handler = http.createHttpHandler<any, any>(async (ctx) => {
|
|
68
|
-
ctx.logger.info(JSON.stringify(ctx.event));
|
|
69
|
-
throw new errors.HttpError(500, 'Not yet implemented');
|
|
70
|
-
});`, {
|
|
71
|
-
encoding: 'utf-8',
|
|
72
|
-
});
|
|
73
|
-
}
|
|
74
|
-
return new func_1.LambdaFunction(this, 'LambdaHandler', {
|
|
75
|
-
stageName: this.props.stageName,
|
|
76
|
-
additionalEnv: {
|
|
77
|
-
DOMAIN_NAME: this.props.domainName,
|
|
78
|
-
},
|
|
79
|
-
entry: entryFile,
|
|
80
|
-
description: `[${this.props.stageName}] ${description}`,
|
|
81
|
-
lambdaOptions: this.props.lambdaOptions,
|
|
82
|
-
});
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
exports.HttpWebhook = HttpWebhook;
|
|
86
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2ViaG9vay5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb25zdHJ1Y3RzL3dlYmhvb2sudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSx1Q0FBeUI7QUFDekIsdUVBQXlEO0FBQ3pELHlGQUEyRTtBQUMzRSw2Q0FJcUI7QUFDckIsMkNBQXVDO0FBQ3ZDLGlDQUF1RDtBQThCdkQsTUFBYSxXQUFZLFNBQVEsc0JBQVM7SUFNeEMsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBVSxLQUF1QjtRQUN2RSxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRCtCLFVBQUssR0FBTCxLQUFLLENBQWtCO1FBR3ZFLE1BQU0sVUFBVSxHQUFHLHlCQUFPLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLEVBQUUsVUFBVSxFQUFFLEtBQUssQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDO1FBQ2pHLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxHQUFHLEtBQUssQ0FBQyxRQUFRLElBQUksS0FBSyxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBRWpFLE1BQU0sRUFBRSxHQUFHLElBQUksS0FBSyxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsWUFBWSxFQUFFO1lBQ2xELFVBQVUsRUFBRSxJQUFJLENBQUMsaUJBQWlCO1lBQ2xDLFdBQVcsRUFBRSxJQUFJLG9DQUFHLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUU7Z0JBQzdDLFVBQVUsRUFBRSxJQUFJLENBQUMsaUJBQWlCO2dCQUNsQyxVQUFVLEVBQUUsb0NBQUcsQ0FBQyxxQkFBcUIsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDO2FBQzFELENBQUM7U0FDSCxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUNwQyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsVUFBVSxFQUFFO1lBQzdDLE9BQU8sRUFBRSxXQUFXLEtBQUssQ0FBQyxJQUFJLEtBQUssS0FBSyxDQUFDLFNBQVMsR0FBRztZQUNyRCxvQkFBb0IsRUFBRTtnQkFDcEIsVUFBVSxFQUFFLEVBQUU7YUFDZjtZQUNELGtCQUFrQixFQUFFLElBQUksVUFBVSxDQUFDLHFCQUFxQixDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDO1NBQ3RGLENBQUMsQ0FBQztRQUNILElBQUkseUJBQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLFdBQVcsRUFBRTtZQUNyQyxJQUFJLEVBQUUsVUFBVTtZQUNoQixVQUFVLEVBQUUsSUFBSSxDQUFDLGlCQUFpQjtZQUNsQyxNQUFNLEVBQUUseUJBQU8sQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLElBQUksaUNBQWEsQ0FBQyw0QkFBNEIsQ0FBQyxFQUFFLENBQUMsa0JBQWtCLEVBQUUsRUFBRSxDQUFDLG9CQUFvQixDQUFDLENBQUM7U0FDdkksQ0FBQyxDQUFDO0lBRUwsQ0FBQztJQUVPLGFBQWE7UUFDbkIsTUFBTSxXQUFXLEdBQUcsV0FBVyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDO1FBRWpELE1BQU0sU0FBUyxHQUFHLHdCQUF3QixJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLEdBQUcsQ0FBQyxLQUFLLENBQUM7UUFDckcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLEVBQUU7WUFDN0IsRUFBRSxDQUFDLFNBQVMsQ0FBQyxjQUFjLEVBQUUsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztZQUNsRCxFQUFFLENBQUMsYUFBYSxDQUFDLFNBQVMsRUFBRTs7Ozs7SUFLOUIsRUFBRTtnQkFDRSxRQUFRLEVBQUUsT0FBTzthQUNsQixDQUFDLENBQUM7U0FDSjtRQUVELE9BQU8sSUFBSSxxQkFBYyxDQUFDLElBQUksRUFBRSxlQUFlLEVBQUU7WUFDL0MsU0FBUyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUztZQUMvQixhQUFhLEVBQUU7Z0JBQ2IsV0FBVyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVTthQUNuQztZQUNELEtBQUssRUFBRSxTQUFTO1lBQ2hCLFdBQVcsRUFBRSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxLQUFLLFdBQVcsRUFBRTtZQUN2RCxhQUFhLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhO1NBQ3hDLENBQUMsQ0FBQztJQUNMLENBQUM7Q0FFRjtBQTlERCxrQ0E4REMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBmcyBmcm9tICdmcyc7XG5pbXBvcnQgKiBhcyBhcGlHVyBmcm9tICdAYXdzLWNkay9hd3MtYXBpZ2F0ZXdheXYyLWFscGhhJztcbmltcG9ydCAqIGFzIGFwaUdXSW50ZWcgZnJvbSAnQGF3cy1jZGsvYXdzLWFwaWdhdGV3YXl2Mi1pbnRlZ3JhdGlvbnMtYWxwaGEnO1xuaW1wb3J0IHtcbiAgYXdzX2NlcnRpZmljYXRlbWFuYWdlciBhcyBhY20sXG4gIGF3c19yb3V0ZTUzIGFzIHJvdXRlNTMsXG4gIGF3c19yb3V0ZTUzX3RhcmdldHMgYXMgcm91dGU1M1RhcmdldCxcbn0gZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG5pbXBvcnQgeyBMYW1iZGFGdW5jdGlvbiwgTGFtYmRhT3B0aW9ucyB9IGZyb20gJy4vZnVuYyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSHR0cFdlYmhvb2tQcm9wcyB7XG5cbiAgLyoqXG4gICAqIE5hbWUgb2YgdGhlIHdlYmhvb2tcbiAgICovXG4gIG5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogRGVwbG95bWVudCBzdGFnZSAoZS5nLiBkZXYpXG4gICAqL1xuICBzdGFnZU5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogRG9tYWluIG5hbWUgb2YgdGhlIFdlYmhvb2sgQVBJIChlLmcuIGV4YW1wbGUuY29tKVxuICAgKi9cbiAgZG9tYWluTmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBIb3N0bmFtZSBvZiB0aGUgV2ViaG9vayBBUElcbiAgICovXG4gIGhvc3RuYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIGFkZGl0aW9uYWwgb3B0aW9ucyBmb3IgdGhlIHVuZGVybHlpbmcgTGFtYmRhIGNvbnN0cnVjdCBvZiBhbGwgY3JlYXRlZCBmdW5jdGlvbnNcbiAgICovXG4gIGxhbWJkYU9wdGlvbnM/OiBMYW1iZGFPcHRpb25zO1xufVxuXG5leHBvcnQgY2xhc3MgSHR0cFdlYmhvb2sgZXh0ZW5kcyBDb25zdHJ1Y3Qge1xuXG4gIHB1YmxpYyByZWFkb25seSBhcGk6IGFwaUdXLkh0dHBBcGk7XG4gIHB1YmxpYyByZWFkb25seSBoYW5kbGVyOiBMYW1iZGFGdW5jdGlvbjtcbiAgcHJpdmF0ZSB3ZWJob29rRG9tYWluTmFtZTogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByaXZhdGUgcHJvcHM6IEh0dHBXZWJob29rUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuXG4gICAgY29uc3QgaG9zdGVkWm9uZSA9IHJvdXRlNTMuSG9zdGVkWm9uZS5mcm9tTG9va3VwKHRoaXMsICdab25lJywgeyBkb21haW5OYW1lOiBwcm9wcy5kb21haW5OYW1lIH0pO1xuICAgIHRoaXMud2ViaG9va0RvbWFpbk5hbWUgPSBgJHtwcm9wcy5ob3N0bmFtZX0uJHtwcm9wcy5kb21haW5OYW1lfWA7XG5cbiAgICBjb25zdCBkbiA9IG5ldyBhcGlHVy5Eb21haW5OYW1lKHRoaXMsICdEb21haW5OYW1lJywge1xuICAgICAgZG9tYWluTmFtZTogdGhpcy53ZWJob29rRG9tYWluTmFtZSxcbiAgICAgIGNlcnRpZmljYXRlOiBuZXcgYWNtLkNlcnRpZmljYXRlKHRoaXMsICdDZXJ0Jywge1xuICAgICAgICBkb21haW5OYW1lOiB0aGlzLndlYmhvb2tEb21haW5OYW1lLFxuICAgICAgICB2YWxpZGF0aW9uOiBhY20uQ2VydGlmaWNhdGVWYWxpZGF0aW9uLmZyb21EbnMoaG9zdGVkWm9uZSksXG4gICAgICB9KSxcbiAgICB9KTtcbiAgICB0aGlzLmhhbmRsZXIgPSB0aGlzLmNyZWF0ZUhhbmRsZXIoKTtcbiAgICB0aGlzLmFwaSA9IG5ldyBhcGlHVy5IdHRwQXBpKHRoaXMsICdSZXNvdXJjZScsIHtcbiAgICAgIGFwaU5hbWU6IGBXZWJob29rICR7cHJvcHMubmFtZX0gWyR7cHJvcHMuc3RhZ2VOYW1lfV1gLFxuICAgICAgZGVmYXVsdERvbWFpbk1hcHBpbmc6IHtcbiAgICAgICAgZG9tYWluTmFtZTogZG4sXG4gICAgICB9LFxuICAgICAgZGVmYXVsdEludGVncmF0aW9uOiBuZXcgYXBpR1dJbnRlZy5IdHRwTGFtYmRhSW50ZWdyYXRpb24oJ0ludGVncmF0aW9uJywgdGhpcy5oYW5kbGVyKSxcbiAgICB9KTtcbiAgICBuZXcgcm91dGU1My5BUmVjb3JkKHRoaXMsICdEbnNSZWNvcmQnLCB7XG4gICAgICB6b25lOiBob3N0ZWRab25lLFxuICAgICAgcmVjb3JkTmFtZTogdGhpcy53ZWJob29rRG9tYWluTmFtZSxcbiAgICAgIHRhcmdldDogcm91dGU1My5SZWNvcmRUYXJnZXQuZnJvbUFsaWFzKG5ldyByb3V0ZTUzVGFyZ2V0LkFwaUdhdGV3YXl2MkRvbWFpblByb3BlcnRpZXMoZG4ucmVnaW9uYWxEb21haW5OYW1lLCBkbi5yZWdpb25hbEhvc3RlZFpvbmVJZCkpLFxuICAgIH0pO1xuXG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZUhhbmRsZXIoKSB7XG4gICAgY29uc3QgZGVzY3JpcHRpb24gPSBgV2ViaG9vayAke3RoaXMucHJvcHMubmFtZX1gO1xuXG4gICAgY29uc3QgZW50cnlGaWxlID0gYC4vc3JjL2xhbWJkYS93ZWJob29rLiR7dGhpcy5wcm9wcy5uYW1lLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvW15cXHctXS9nLCAnLScpfS50c2A7XG4gICAgaWYgKCFmcy5leGlzdHNTeW5jKGVudHJ5RmlsZSkpIHtcbiAgICAgIGZzLm1rZGlyU3luYygnLi9zcmMvbGFtYmRhJywgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgICBmcy53cml0ZUZpbGVTeW5jKGVudHJ5RmlsZSwgYGltcG9ydCB7IGh0dHAsIGVycm9ycyB9IGZyb20gJ0B0YWltb3MvbGFtYmRhLXRvb2xib3gnO1xuXG5leHBvcnQgY29uc3QgaGFuZGxlciA9IGh0dHAuY3JlYXRlSHR0cEhhbmRsZXI8YW55LCBhbnk+KGFzeW5jIChjdHgpID0+IHtcbiAgY3R4LmxvZ2dlci5pbmZvKEpTT04uc3RyaW5naWZ5KGN0eC5ldmVudCkpO1xuICB0aHJvdyBuZXcgZXJyb3JzLkh0dHBFcnJvcig1MDAsICdOb3QgeWV0IGltcGxlbWVudGVkJyk7XG59KTtgLCB7XG4gICAgICAgIGVuY29kaW5nOiAndXRmLTgnLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBMYW1iZGFGdW5jdGlvbih0aGlzLCAnTGFtYmRhSGFuZGxlcicsIHtcbiAgICAgIHN0YWdlTmFtZTogdGhpcy5wcm9wcy5zdGFnZU5hbWUsXG4gICAgICBhZGRpdGlvbmFsRW52OiB7XG4gICAgICAgIERPTUFJTl9OQU1FOiB0aGlzLnByb3BzLmRvbWFpbk5hbWUsXG4gICAgICB9LFxuICAgICAgZW50cnk6IGVudHJ5RmlsZSxcbiAgICAgIGRlc2NyaXB0aW9uOiBgWyR7dGhpcy5wcm9wcy5zdGFnZU5hbWV9XSAke2Rlc2NyaXB0aW9ufWAsXG4gICAgICBsYW1iZGFPcHRpb25zOiB0aGlzLnByb3BzLmxhbWJkYU9wdGlvbnMsXG4gICAgfSk7XG4gIH1cblxufSJdfQ==
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
import * as pj from 'projen';
|
|
2
|
-
import { CoreAspect, CoreAspectOptions } from './core';
|
|
3
|
-
export interface GraphQlApiAspectOptions extends CoreAspectOptions {
|
|
4
|
-
}
|
|
5
|
-
export declare class GraphQlApiAspect extends CoreAspect {
|
|
6
|
-
constructor(app: pj.awscdk.AwsCdkTypeScriptApp, options?: GraphQlApiAspectOptions);
|
|
7
|
-
}
|