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.
Files changed (134) hide show
  1. package/README.md +3 -116
  2. package/docs/constructs/.nojekyll +1 -0
  3. package/docs/constructs/assets/highlight.css +92 -0
  4. package/docs/constructs/assets/main.js +58 -0
  5. package/docs/constructs/assets/search.js +1 -0
  6. package/docs/constructs/assets/style.css +1338 -0
  7. package/docs/constructs/classes/AssetCdn.html +165 -0
  8. package/docs/constructs/classes/BaseApi.html +152 -0
  9. package/docs/constructs/classes/CognitoAuthentication.html +172 -0
  10. package/docs/constructs/classes/LambdaFunction.html +1101 -0
  11. package/docs/constructs/classes/RestApi.html +306 -0
  12. package/docs/constructs/classes/SingleTableDatastore.html +155 -0
  13. package/docs/constructs/classes/Workflow.html +170 -0
  14. package/docs/constructs/index.html +122 -0
  15. package/docs/constructs/interfaces/AssetCdnProps.html +89 -0
  16. package/docs/constructs/interfaces/BaseApiProps.html +158 -0
  17. package/docs/constructs/interfaces/CognitoAuthenticationProps.html +151 -0
  18. package/docs/constructs/interfaces/ICognitoAuthentication.html +86 -0
  19. package/docs/constructs/interfaces/IJwtAuthentication.html +96 -0
  20. package/docs/constructs/interfaces/LambdaFunctionProps.html +189 -0
  21. package/docs/constructs/interfaces/LambdaTracingOptions.html +85 -0
  22. package/docs/constructs/interfaces/RestApiProps.html +227 -0
  23. package/docs/constructs/interfaces/SingleTableDatastoreProps.html +109 -0
  24. package/docs/constructs/interfaces/SingleTableDesign.html +113 -0
  25. package/docs/constructs/interfaces/WorkflowProps.html +105 -0
  26. package/docs/constructs/modules.html +85 -0
  27. package/docs/constructs/types/LambdaOptions.html +58 -0
  28. package/docs/lambda/.nojekyll +1 -0
  29. package/docs/lambda/assets/highlight.css +36 -0
  30. package/docs/lambda/assets/main.js +58 -0
  31. package/docs/lambda/assets/search.js +1 -0
  32. package/docs/lambda/assets/style.css +1338 -0
  33. package/docs/lambda/classes/auth.ApiGatewayv1CognitoAuthorizer.html +323 -0
  34. package/docs/lambda/classes/auth.ApiGatewayv1JwtAuthorizer.html +322 -0
  35. package/docs/lambda/classes/auth.ApiGatewayv2CognitoAuthorizer.html +324 -0
  36. package/docs/lambda/classes/auth.ApiGatewayv2JwtAuthorizer.html +320 -0
  37. package/docs/lambda/classes/auth.AppSyncCognitoAuthorizer.html +314 -0
  38. package/docs/lambda/classes/auth.CognitoAuthorizer.html +303 -0
  39. package/docs/lambda/classes/auth.JwtAuthorizer.html +298 -0
  40. package/docs/lambda/classes/errors.BadRequestError.html +193 -0
  41. package/docs/lambda/classes/errors.ForbiddenError.html +193 -0
  42. package/docs/lambda/classes/errors.HttpError.html +199 -0
  43. package/docs/lambda/classes/errors.NotFoundError.html +193 -0
  44. package/docs/lambda/classes/errors.UnauthenticatedError.html +193 -0
  45. package/docs/lambda/functions/api.createAppSyncHandler.html +98 -0
  46. package/docs/lambda/functions/api.createHttpHandler.html +95 -0
  47. package/docs/lambda/functions/api.createOpenApiHandler.html +95 -0
  48. package/docs/lambda/functions/api.createOpenApiHandlerWithRequestBody.html +95 -0
  49. package/docs/lambda/functions/api.createOpenApiHandlerWithRequestBodyNoResponse.html +93 -0
  50. package/docs/lambda/index.html +140 -0
  51. package/docs/lambda/interfaces/api.AppSyncHandlerContext.html +123 -0
  52. package/docs/lambda/interfaces/api.HttpHandlerContext.html +122 -0
  53. package/docs/lambda/interfaces/api.HttpResponseContext.html +117 -0
  54. package/docs/lambda/interfaces/api.Operation.html +109 -0
  55. package/docs/lambda/interfaces/api.OperationWithRequestBody.html +123 -0
  56. package/docs/lambda/modules/api.html +100 -0
  57. package/docs/lambda/modules/auth.html +88 -0
  58. package/docs/lambda/modules/errors.html +86 -0
  59. package/docs/lambda/modules.html +81 -0
  60. package/docs/lambda/types/api.APIGatewayv1Handler.html +79 -0
  61. package/docs/lambda/types/api.AppSyncHandler.html +100 -0
  62. package/docs/lambda/types/api.HttpHandler.html +101 -0
  63. package/docs/projen/.nojekyll +1 -0
  64. package/docs/projen/assets/highlight.css +85 -0
  65. package/docs/projen/assets/main.js +58 -0
  66. package/docs/projen/assets/search.js +1 -0
  67. package/docs/projen/assets/style.css +1338 -0
  68. package/docs/projen/classes/Datastore.html +180 -0
  69. package/docs/projen/classes/RestApi.html +184 -0
  70. package/docs/projen/classes/ServerlessProject.html +1246 -0
  71. package/docs/projen/classes/Workflow.html +178 -0
  72. package/docs/projen/index.html +112 -0
  73. package/docs/projen/interfaces/DatastoreOptions.html +75 -0
  74. package/docs/projen/interfaces/RestApiOptions.html +75 -0
  75. package/docs/projen/interfaces/ServerlessProjectOptions.html +1921 -0
  76. package/docs/projen/interfaces/WorkflowOptions.html +75 -0
  77. package/docs/projen/modules.html +65 -0
  78. package/docs/projen/variables/PACKAGE_NAME.html +48 -0
  79. package/lib/constructs/asset-cdn.js +2 -1
  80. package/lib/constructs/{auth.d.ts → authentication.d.ts} +32 -15
  81. package/lib/constructs/authentication.js +136 -0
  82. package/lib/constructs/base-api.d.ts +10 -21
  83. package/lib/constructs/base-api.js +2 -37
  84. package/lib/constructs/func.d.ts +6 -25
  85. package/lib/constructs/func.js +16 -37
  86. package/lib/constructs/index.d.ts +4 -6
  87. package/lib/constructs/index.js +5 -7
  88. package/lib/constructs/rest-api.d.ts +73 -0
  89. package/lib/constructs/rest-api.js +278 -0
  90. package/lib/constructs/table.d.ts +25 -6
  91. package/lib/constructs/table.js +12 -70
  92. package/lib/constructs/workflow.d.ts +18 -0
  93. package/lib/constructs/workflow.js +58 -0
  94. package/lib/lambda/auth.d.ts +144 -0
  95. package/lib/lambda/auth.js +309 -0
  96. package/lib/lambda/errors.d.ts +16 -0
  97. package/lib/lambda/errors.js +35 -0
  98. package/lib/lambda/handler.d.ts +90 -0
  99. package/lib/lambda/handler.js +217 -0
  100. package/lib/lambda/index.d.ts +3 -0
  101. package/lib/lambda/index.js +30 -0
  102. package/lib/projen/core.d.ts +4 -14
  103. package/lib/projen/core.js +25 -29
  104. package/lib/projen/datastore.d.ts +13 -0
  105. package/lib/projen/datastore.js +145 -0
  106. package/lib/projen/index.d.ts +3 -2
  107. package/lib/projen/index.js +5 -3
  108. package/lib/projen/rest-api.d.ts +13 -0
  109. package/lib/projen/rest-api.js +127 -0
  110. package/lib/projen/workflow.d.ts +18 -0
  111. package/lib/projen/workflow.js +99 -0
  112. package/package.json +44 -35
  113. package/CHANGELOG.md +0 -170
  114. package/img/autocomplete.gif +0 -0
  115. package/lib/constructs/auth.js +0 -135
  116. package/lib/constructs/graphql-api.d.ts +0 -44
  117. package/lib/constructs/graphql-api.js +0 -221
  118. package/lib/constructs/http-api.d.ts +0 -58
  119. package/lib/constructs/http-api.js +0 -242
  120. package/lib/constructs/monitoring.d.ts +0 -23
  121. package/lib/constructs/monitoring.js +0 -47
  122. package/lib/constructs/scheduled-func.d.ts +0 -63
  123. package/lib/constructs/scheduled-func.js +0 -54
  124. package/lib/constructs/webhook.d.ts +0 -33
  125. package/lib/constructs/webhook.js +0 -86
  126. package/lib/projen/graphql-api.d.ts +0 -7
  127. package/lib/projen/graphql-api.js +0 -58
  128. package/lib/projen/http-api.d.ts +0 -7
  129. package/lib/projen/http-api.js +0 -43
  130. package/lib/types/index.d.ts +0 -1
  131. package/lib/types/index.js +0 -18
  132. package/lib/types/table.d.ts +0 -34
  133. package/lib/types/table.js +0 -31
  134. 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
- }