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
package/lib/constructs/auth.js
DELETED
|
@@ -1,135 +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.Authentication = 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 Authentication extends constructs_1.Construct {
|
|
32
|
-
constructor(scope, id, props) {
|
|
33
|
-
var _a, _b, _c;
|
|
34
|
-
super(scope, id);
|
|
35
|
-
this.userpool = new aws_cdk_lib_1.aws_cognito.UserPool(this, 'UserPool', {
|
|
36
|
-
autoVerify: { email: true },
|
|
37
|
-
passwordPolicy: {
|
|
38
|
-
minLength: 12,
|
|
39
|
-
requireDigits: false,
|
|
40
|
-
requireLowercase: false,
|
|
41
|
-
requireSymbols: false,
|
|
42
|
-
requireUppercase: false,
|
|
43
|
-
},
|
|
44
|
-
standardAttributes: {
|
|
45
|
-
fullname: {
|
|
46
|
-
mutable: true,
|
|
47
|
-
required: true,
|
|
48
|
-
},
|
|
49
|
-
email: {
|
|
50
|
-
mutable: false,
|
|
51
|
-
required: true,
|
|
52
|
-
},
|
|
53
|
-
},
|
|
54
|
-
selfSignUpEnabled: false,
|
|
55
|
-
signInAliases: {
|
|
56
|
-
email: true,
|
|
57
|
-
},
|
|
58
|
-
signInCaseSensitive: false,
|
|
59
|
-
...props.userPoolProps,
|
|
60
|
-
});
|
|
61
|
-
if ((_a = props.triggers) === null || _a === void 0 ? void 0 : _a.customMessages) {
|
|
62
|
-
const entryFile = './src/lambda/cognito.custom-message.ts';
|
|
63
|
-
if (!fs.existsSync(entryFile)) {
|
|
64
|
-
fs.writeFileSync(entryFile, `export async function handler(event: AWSLambda.CustomMessageTriggerEvent): Promise<AWSLambda.CustomMessageTriggerEvent> {
|
|
65
|
-
console.log(event);
|
|
66
|
-
|
|
67
|
-
if (event.triggerSource === 'CustomMessage_AdminCreateUser') {
|
|
68
|
-
// event.response.emailSubject = '';
|
|
69
|
-
// event.response.emailMessage = '';
|
|
70
|
-
} else if (event.triggerSource === 'CustomMessage_ForgotPassword') {
|
|
71
|
-
// event.response.emailSubject = '';
|
|
72
|
-
// event.response.emailMessage = '';
|
|
73
|
-
} // ...
|
|
74
|
-
|
|
75
|
-
return event;
|
|
76
|
-
}`, {
|
|
77
|
-
encoding: 'utf-8',
|
|
78
|
-
});
|
|
79
|
-
}
|
|
80
|
-
this.customMessageFunction = new func_1.LambdaFunction(this, 'CustomMessageFunction', {
|
|
81
|
-
entry: entryFile,
|
|
82
|
-
lambdaOptions: {
|
|
83
|
-
bundling: {
|
|
84
|
-
loader: {
|
|
85
|
-
'.html': 'text',
|
|
86
|
-
},
|
|
87
|
-
},
|
|
88
|
-
timeout: aws_cdk_lib_1.Duration.seconds(5),
|
|
89
|
-
},
|
|
90
|
-
});
|
|
91
|
-
this.userpool.addTrigger(aws_cdk_lib_1.aws_cognito.UserPoolOperation.CUSTOM_MESSAGE, this.customMessageFunction);
|
|
92
|
-
}
|
|
93
|
-
if ((_b = props.triggers) === null || _b === void 0 ? void 0 : _b.preTokenGeneration) {
|
|
94
|
-
const entryFile = './src/lambda/cognito.pre-token-generation.ts';
|
|
95
|
-
if (!fs.existsSync(entryFile)) {
|
|
96
|
-
fs.writeFileSync(entryFile, `export async function handler(event: AWSLambda.PreTokenGenerationTriggerEvent): Promise<AWSLambda.PreTokenGenerationTriggerEvent> {
|
|
97
|
-
console.log(JSON.stringify(event));
|
|
98
|
-
|
|
99
|
-
// modify event.response here ...
|
|
100
|
-
|
|
101
|
-
return event;
|
|
102
|
-
}`, {
|
|
103
|
-
encoding: 'utf-8',
|
|
104
|
-
});
|
|
105
|
-
}
|
|
106
|
-
this.preTokenGenerationFunction = new func_1.LambdaFunction(this, 'PreTokenGenerationFunction', {
|
|
107
|
-
lambdaOptions: {
|
|
108
|
-
timeout: aws_cdk_lib_1.Duration.seconds(5),
|
|
109
|
-
},
|
|
110
|
-
entry: entryFile,
|
|
111
|
-
});
|
|
112
|
-
this.userpool.addTrigger(aws_cdk_lib_1.aws_cognito.UserPoolOperation.PRE_TOKEN_GENERATION, this.preTokenGenerationFunction);
|
|
113
|
-
}
|
|
114
|
-
if (props.sesEmailSender) {
|
|
115
|
-
this.userpool.node.defaultChild.emailConfiguration = {
|
|
116
|
-
emailSendingAccount: 'DEVELOPER',
|
|
117
|
-
from: `${props.sesEmailSender.name} <${props.sesEmailSender.email}>`,
|
|
118
|
-
sourceArn: `arn:aws:ses:${(_c = props.sesEmailSender.region) !== null && _c !== void 0 ? _c : aws_cdk_lib_1.Stack.of(this).region}:${aws_cdk_lib_1.Stack.of(this).account}:identity/${props.sesEmailSender.email}`,
|
|
119
|
-
};
|
|
120
|
-
}
|
|
121
|
-
for (const groupName in props.groups) {
|
|
122
|
-
if (Object.prototype.hasOwnProperty.call(props.groups, groupName)) {
|
|
123
|
-
const groupDescription = props.groups[groupName];
|
|
124
|
-
new aws_cdk_lib_1.aws_cognito.CfnUserPoolGroup(this, `Group${groupName}`, {
|
|
125
|
-
userPoolId: this.userpool.userPoolId,
|
|
126
|
-
groupName,
|
|
127
|
-
description: groupDescription,
|
|
128
|
-
});
|
|
129
|
-
}
|
|
130
|
-
}
|
|
131
|
-
new aws_cdk_lib_1.CfnOutput(this, 'UserPoolId', { value: this.userpool.userPoolId });
|
|
132
|
-
}
|
|
133
|
-
}
|
|
134
|
-
exports.Authentication = Authentication;
|
|
135
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb25zdHJ1Y3RzL2F1dGgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSx1Q0FBeUI7QUFDekIsNkNBR3FCO0FBQ3JCLDJDQUF1QztBQUN2QyxpQ0FBd0M7QUFnRXhDLE1BQWEsY0FBZSxTQUFRLHNCQUFTO0lBTTNDLFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBMEI7O1FBQ2xFLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFakIsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLHlCQUFPLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxVQUFVLEVBQUU7WUFDckQsVUFBVSxFQUFFLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRTtZQUMzQixjQUFjLEVBQUU7Z0JBQ2QsU0FBUyxFQUFFLEVBQUU7Z0JBQ2IsYUFBYSxFQUFFLEtBQUs7Z0JBQ3BCLGdCQUFnQixFQUFFLEtBQUs7Z0JBQ3ZCLGNBQWMsRUFBRSxLQUFLO2dCQUNyQixnQkFBZ0IsRUFBRSxLQUFLO2FBQ3hCO1lBQ0Qsa0JBQWtCLEVBQUU7Z0JBQ2xCLFFBQVEsRUFBRTtvQkFDUixPQUFPLEVBQUUsSUFBSTtvQkFDYixRQUFRLEVBQUUsSUFBSTtpQkFDZjtnQkFDRCxLQUFLLEVBQUU7b0JBQ0wsT0FBTyxFQUFFLEtBQUs7b0JBQ2QsUUFBUSxFQUFFLElBQUk7aUJBQ2Y7YUFDRjtZQUNELGlCQUFpQixFQUFFLEtBQUs7WUFDeEIsYUFBYSxFQUFFO2dCQUNiLEtBQUssRUFBRSxJQUFJO2FBQ1o7WUFDRCxtQkFBbUIsRUFBRSxLQUFLO1lBQzFCLEdBQUcsS0FBSyxDQUFDLGFBQWE7U0FDdkIsQ0FBQyxDQUFDO1FBRUgsSUFBSSxNQUFBLEtBQUssQ0FBQyxRQUFRLDBDQUFFLGNBQWMsRUFBRTtZQUNsQyxNQUFNLFNBQVMsR0FBRyx3Q0FBd0MsQ0FBQztZQUUzRCxJQUFJLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsRUFBRTtnQkFDN0IsRUFBRSxDQUFDLGFBQWEsQ0FBQyxTQUFTLEVBQUU7Ozs7Ozs7Ozs7OztFQVlsQyxFQUFFO29CQUNNLFFBQVEsRUFBRSxPQUFPO2lCQUNsQixDQUFDLENBQUM7YUFDSjtZQUVELElBQUksQ0FBQyxxQkFBcUIsR0FBRyxJQUFJLHFCQUFjLENBQUMsSUFBSSxFQUFFLHVCQUF1QixFQUFFO2dCQUM3RSxLQUFLLEVBQUUsU0FBUztnQkFDaEIsYUFBYSxFQUFFO29CQUNiLFFBQVEsRUFBRTt3QkFDUixNQUFNLEVBQUU7NEJBQ04sT0FBTyxFQUFFLE1BQU07eUJBQ2hCO3FCQUNGO29CQUNELE9BQU8sRUFBRSxzQkFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7aUJBQzdCO2FBQ0YsQ0FBQyxDQUFDO1lBQ0gsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMseUJBQU8sQ0FBQyxpQkFBaUIsQ0FBQyxjQUFjLEVBQUUsSUFBSSxDQUFDLHFCQUFxQixDQUFDLENBQUM7U0FDaEc7UUFFRCxJQUFJLE1BQUEsS0FBSyxDQUFDLFFBQVEsMENBQUUsa0JBQWtCLEVBQUU7WUFDdEMsTUFBTSxTQUFTLEdBQUcsOENBQThDLENBQUM7WUFFakUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLEVBQUU7Z0JBQzdCLEVBQUUsQ0FBQyxhQUFhLENBQUMsU0FBUyxFQUFFOzs7Ozs7RUFNbEMsRUFBRTtvQkFDTSxRQUFRLEVBQUUsT0FBTztpQkFDbEIsQ0FBQyxDQUFDO2FBQ0o7WUFFRCxJQUFJLENBQUMsMEJBQTBCLEdBQUcsSUFBSSxxQkFBYyxDQUFDLElBQUksRUFBRSw0QkFBNEIsRUFBRTtnQkFDdkYsYUFBYSxFQUFFO29CQUNiLE9BQU8sRUFBRSxzQkFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7aUJBQzdCO2dCQUNELEtBQUssRUFBRSxTQUFTO2FBQ2pCLENBQUMsQ0FBQztZQUNILElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLHlCQUFPLENBQUMsaUJBQWlCLENBQUMsb0JBQW9CLEVBQUUsSUFBSSxDQUFDLDBCQUEwQixDQUFDLENBQUM7U0FDM0c7UUFFRCxJQUFJLEtBQUssQ0FBQyxjQUFjLEVBQUU7WUFDdkIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsWUFBb0MsQ0FBQyxrQkFBa0IsR0FBRztnQkFDNUUsbUJBQW1CLEVBQUUsV0FBVztnQkFDaEMsSUFBSSxFQUFFLEdBQUcsS0FBSyxDQUFDLGNBQWMsQ0FBQyxJQUFJLEtBQUssS0FBSyxDQUFDLGNBQWMsQ0FBQyxLQUFLLEdBQUc7Z0JBQ3BFLFNBQVMsRUFBRSxlQUFlLE1BQUEsS0FBSyxDQUFDLGNBQWMsQ0FBQyxNQUFNLG1DQUFJLG1CQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sSUFBSSxtQkFBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLGFBQWEsS0FBSyxDQUFDLGNBQWMsQ0FBQyxLQUFLLEVBQUU7YUFDbEosQ0FBQztTQUNIO1FBRUQsS0FBSyxNQUFNLFNBQVMsSUFBSSxLQUFLLENBQUMsTUFBTSxFQUFFO1lBQ3BDLElBQUksTUFBTSxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsU0FBUyxDQUFDLEVBQUU7Z0JBQ2pFLE1BQU0sZ0JBQWdCLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztnQkFDakQsSUFBSSx5QkFBTyxDQUFDLGdCQUFnQixDQUFDLElBQUksRUFBRSxRQUFRLFNBQVMsRUFBRSxFQUFFO29CQUN0RCxVQUFVLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVO29CQUNwQyxTQUFTO29CQUNULFdBQVcsRUFBRSxnQkFBZ0I7aUJBQzlCLENBQUMsQ0FBQzthQUNKO1NBQ0Y7UUFFRCxJQUFJLHVCQUFTLENBQUMsSUFBSSxFQUFFLFlBQVksRUFBRSxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUM7SUFDekUsQ0FBQztDQUNGO0FBcEhELHdDQW9IQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGZzIGZyb20gJ2ZzJztcbmltcG9ydCB7XG4gIGF3c19jb2duaXRvIGFzIGNvZ25pdG8sIENmbk91dHB1dCwgRHVyYXRpb24sIFN0YWNrLFxuXG59IGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0IHsgTGFtYmRhRnVuY3Rpb24gfSBmcm9tICcuL2Z1bmMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIElBdXRoZW50aWNhdGlvbiB7XG4gIHJlYWRvbmx5IHVzZXJwb29sOiBjb2duaXRvLklVc2VyUG9vbDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBdXRoZW50aWNhdGlvblByb3BzIHtcblxuICAvKipcbiAgICogQ29uZmlndXJlIENvZ25pdG8gTGFtYmRhIHRyaWdnZXJzXG4gICAqL1xuICB0cmlnZ2Vycz86IHtcbiAgICAvKipcbiAgICAgKiBBdHRhY2hlcyBhIGxhbWJkYSBmdW5jdGlvbiB0byB0aGUgY3VzdG9tIG1lc3NhZ2UgdHJpZ2dlclxuICAgICAqXG4gICAgICogQ29kZSBoYXMgdG8gcmVzaWRlIGluICcuL3NyYy9sYW1iZGEvY29nbml0by5jdXN0b20tbWVzc2FnZS50cycgd2l0aCBhIG1ldGhvZCAnaGFuZGxlcidcbiAgICAgKlxuICAgICAqIEBkZWZhdWx0IGZhbHNlXG4gICAgICovXG4gICAgY3VzdG9tTWVzc2FnZXM/OiBib29sZWFuO1xuXG4gICAgLyoqXG4gICAgICogQXR0YWNoZXMgYSBsYW1iZGEgZnVuY3Rpb24gdG8gdGhlIHByZSB0b2tlbiBnZW5lcmF0aW9uIHRyaWdnZXJcbiAgICAgKlxuICAgICAqIENvZGUgaGFzIHRvIHJlc2lkZSBpbiAnLi9zcmMvbGFtYmRhL2NvZ25pdG8ucHJlLXRva2VuLWdlbmVyYXRpb24udHMnIHdpdGggYSBtZXRob2QgJ2hhbmRsZXInXG4gICAgICpcbiAgICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgICAqL1xuICAgIHByZVRva2VuR2VuZXJhdGlvbj86IGJvb2xlYW47XG4gIH07XG5cbiAgLyoqXG4gICAqIFByb3BlcnRpZXMgb2YgdGhlIENvZ25pdG8gdXNlciBwb29sXG4gICAqL1xuICB1c2VyUG9vbFByb3BzPzogY29nbml0by5Vc2VyUG9vbFByb3BzO1xuXG4gIC8qKlxuICAgKiBDb25maWd1cmUgU0VTIG1haWwgc2VuZGluZ1xuICAgKi9cbiAgc2VzRW1haWxTZW5kZXI/OiB7XG4gICAgLyoqXG4gICAgICogQVdTIHJlZ2lvbiB0byB1c2UgZm9yIFNFU1xuICAgICAqL1xuICAgIHJlZ2lvbjogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIFNlbmRlciBuYW1lXG4gICAgICovXG4gICAgbmFtZTogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIFNlbmRlciBlbWFpbC4gTmVlZHMgdG8gYmUgdmVyaWZpZWQgaW4gU0VTXG4gICAgICovXG4gICAgZW1haWw6IHN0cmluZztcbiAgfTtcblxuICAvKipcbiAgICogR3JvdXBzIHRvIGNyZWF0ZSBpbiBDb2duaXRvIHVzZXIgcG9vbFxuICAgKiBLZXk6IGdyb3VwIG5hbWVcbiAgICogVmFsdWU6IGdyb3VwIGRlc2NyaXB0aW9uXG4gICAqL1xuICBncm91cHM/OiB7XG4gICAgW25hbWU6IHN0cmluZ106IHN0cmluZztcbiAgfTtcbn1cblxuZXhwb3J0IGNsYXNzIEF1dGhlbnRpY2F0aW9uIGV4dGVuZHMgQ29uc3RydWN0IGltcGxlbWVudHMgSUF1dGhlbnRpY2F0aW9uIHtcblxuICBwdWJsaWMgcmVhZG9ubHkgdXNlcnBvb2w6IGNvZ25pdG8uVXNlclBvb2w7XG4gIHB1YmxpYyByZWFkb25seSBjdXN0b21NZXNzYWdlRnVuY3Rpb24/OiBMYW1iZGFGdW5jdGlvbjtcbiAgcHVibGljIHJlYWRvbmx5IHByZVRva2VuR2VuZXJhdGlvbkZ1bmN0aW9uPzogTGFtYmRhRnVuY3Rpb247XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IEF1dGhlbnRpY2F0aW9uUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuXG4gICAgdGhpcy51c2VycG9vbCA9IG5ldyBjb2duaXRvLlVzZXJQb29sKHRoaXMsICdVc2VyUG9vbCcsIHtcbiAgICAgIGF1dG9WZXJpZnk6IHsgZW1haWw6IHRydWUgfSxcbiAgICAgIHBhc3N3b3JkUG9saWN5OiB7XG4gICAgICAgIG1pbkxlbmd0aDogMTIsXG4gICAgICAgIHJlcXVpcmVEaWdpdHM6IGZhbHNlLFxuICAgICAgICByZXF1aXJlTG93ZXJjYXNlOiBmYWxzZSxcbiAgICAgICAgcmVxdWlyZVN5bWJvbHM6IGZhbHNlLFxuICAgICAgICByZXF1aXJlVXBwZXJjYXNlOiBmYWxzZSxcbiAgICAgIH0sXG4gICAgICBzdGFuZGFyZEF0dHJpYnV0ZXM6IHtcbiAgICAgICAgZnVsbG5hbWU6IHtcbiAgICAgICAgICBtdXRhYmxlOiB0cnVlLFxuICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICB9LFxuICAgICAgICBlbWFpbDoge1xuICAgICAgICAgIG11dGFibGU6IGZhbHNlLFxuICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIHNlbGZTaWduVXBFbmFibGVkOiBmYWxzZSxcbiAgICAgIHNpZ25JbkFsaWFzZXM6IHtcbiAgICAgICAgZW1haWw6IHRydWUsXG4gICAgICB9LFxuICAgICAgc2lnbkluQ2FzZVNlbnNpdGl2ZTogZmFsc2UsXG4gICAgICAuLi5wcm9wcy51c2VyUG9vbFByb3BzLFxuICAgIH0pO1xuXG4gICAgaWYgKHByb3BzLnRyaWdnZXJzPy5jdXN0b21NZXNzYWdlcykge1xuICAgICAgY29uc3QgZW50cnlGaWxlID0gJy4vc3JjL2xhbWJkYS9jb2duaXRvLmN1c3RvbS1tZXNzYWdlLnRzJztcblxuICAgICAgaWYgKCFmcy5leGlzdHNTeW5jKGVudHJ5RmlsZSkpIHtcbiAgICAgICAgZnMud3JpdGVGaWxlU3luYyhlbnRyeUZpbGUsIGBleHBvcnQgYXN5bmMgZnVuY3Rpb24gaGFuZGxlcihldmVudDogQVdTTGFtYmRhLkN1c3RvbU1lc3NhZ2VUcmlnZ2VyRXZlbnQpOiBQcm9taXNlPEFXU0xhbWJkYS5DdXN0b21NZXNzYWdlVHJpZ2dlckV2ZW50PiB7XG4gIGNvbnNvbGUubG9nKGV2ZW50KTtcblxuICBpZiAoZXZlbnQudHJpZ2dlclNvdXJjZSA9PT0gJ0N1c3RvbU1lc3NhZ2VfQWRtaW5DcmVhdGVVc2VyJykge1xuICAgIC8vIGV2ZW50LnJlc3BvbnNlLmVtYWlsU3ViamVjdCA9ICcnO1xuICAgIC8vIGV2ZW50LnJlc3BvbnNlLmVtYWlsTWVzc2FnZSA9ICcnO1xuICB9IGVsc2UgaWYgKGV2ZW50LnRyaWdnZXJTb3VyY2UgPT09ICdDdXN0b21NZXNzYWdlX0ZvcmdvdFBhc3N3b3JkJykge1xuICAgIC8vIGV2ZW50LnJlc3BvbnNlLmVtYWlsU3ViamVjdCA9ICcnO1xuICAgIC8vIGV2ZW50LnJlc3BvbnNlLmVtYWlsTWVzc2FnZSA9ICcnO1xuICB9IC8vIC4uLlxuXG4gIHJldHVybiBldmVudDtcbn1gLCB7XG4gICAgICAgICAgZW5jb2Rpbmc6ICd1dGYtOCcsXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmN1c3RvbU1lc3NhZ2VGdW5jdGlvbiA9IG5ldyBMYW1iZGFGdW5jdGlvbih0aGlzLCAnQ3VzdG9tTWVzc2FnZUZ1bmN0aW9uJywge1xuICAgICAgICBlbnRyeTogZW50cnlGaWxlLFxuICAgICAgICBsYW1iZGFPcHRpb25zOiB7XG4gICAgICAgICAgYnVuZGxpbmc6IHtcbiAgICAgICAgICAgIGxvYWRlcjoge1xuICAgICAgICAgICAgICAnLmh0bWwnOiAndGV4dCcsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgICAgdGltZW91dDogRHVyYXRpb24uc2Vjb25kcyg1KSxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgICAgdGhpcy51c2VycG9vbC5hZGRUcmlnZ2VyKGNvZ25pdG8uVXNlclBvb2xPcGVyYXRpb24uQ1VTVE9NX01FU1NBR0UsIHRoaXMuY3VzdG9tTWVzc2FnZUZ1bmN0aW9uKTtcbiAgICB9XG5cbiAgICBpZiAocHJvcHMudHJpZ2dlcnM/LnByZVRva2VuR2VuZXJhdGlvbikge1xuICAgICAgY29uc3QgZW50cnlGaWxlID0gJy4vc3JjL2xhbWJkYS9jb2duaXRvLnByZS10b2tlbi1nZW5lcmF0aW9uLnRzJztcblxuICAgICAgaWYgKCFmcy5leGlzdHNTeW5jKGVudHJ5RmlsZSkpIHtcbiAgICAgICAgZnMud3JpdGVGaWxlU3luYyhlbnRyeUZpbGUsIGBleHBvcnQgYXN5bmMgZnVuY3Rpb24gaGFuZGxlcihldmVudDogQVdTTGFtYmRhLlByZVRva2VuR2VuZXJhdGlvblRyaWdnZXJFdmVudCk6IFByb21pc2U8QVdTTGFtYmRhLlByZVRva2VuR2VuZXJhdGlvblRyaWdnZXJFdmVudD4ge1xuICBjb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeShldmVudCkpO1xuXG4gIC8vIG1vZGlmeSBldmVudC5yZXNwb25zZSBoZXJlIC4uLlxuXG4gIHJldHVybiBldmVudDtcbn1gLCB7XG4gICAgICAgICAgZW5jb2Rpbmc6ICd1dGYtOCcsXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnByZVRva2VuR2VuZXJhdGlvbkZ1bmN0aW9uID0gbmV3IExhbWJkYUZ1bmN0aW9uKHRoaXMsICdQcmVUb2tlbkdlbmVyYXRpb25GdW5jdGlvbicsIHtcbiAgICAgICAgbGFtYmRhT3B0aW9uczoge1xuICAgICAgICAgIHRpbWVvdXQ6IER1cmF0aW9uLnNlY29uZHMoNSksXG4gICAgICAgIH0sXG4gICAgICAgIGVudHJ5OiBlbnRyeUZpbGUsXG4gICAgICB9KTtcbiAgICAgIHRoaXMudXNlcnBvb2wuYWRkVHJpZ2dlcihjb2duaXRvLlVzZXJQb29sT3BlcmF0aW9uLlBSRV9UT0tFTl9HRU5FUkFUSU9OLCB0aGlzLnByZVRva2VuR2VuZXJhdGlvbkZ1bmN0aW9uKTtcbiAgICB9XG5cbiAgICBpZiAocHJvcHMuc2VzRW1haWxTZW5kZXIpIHtcbiAgICAgICh0aGlzLnVzZXJwb29sLm5vZGUuZGVmYXVsdENoaWxkIGFzIGNvZ25pdG8uQ2ZuVXNlclBvb2wpLmVtYWlsQ29uZmlndXJhdGlvbiA9IHtcbiAgICAgICAgZW1haWxTZW5kaW5nQWNjb3VudDogJ0RFVkVMT1BFUicsXG4gICAgICAgIGZyb206IGAke3Byb3BzLnNlc0VtYWlsU2VuZGVyLm5hbWV9IDwke3Byb3BzLnNlc0VtYWlsU2VuZGVyLmVtYWlsfT5gLFxuICAgICAgICBzb3VyY2VBcm46IGBhcm46YXdzOnNlczoke3Byb3BzLnNlc0VtYWlsU2VuZGVyLnJlZ2lvbiA/PyBTdGFjay5vZih0aGlzKS5yZWdpb259OiR7U3RhY2sub2YodGhpcykuYWNjb3VudH06aWRlbnRpdHkvJHtwcm9wcy5zZXNFbWFpbFNlbmRlci5lbWFpbH1gLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IGdyb3VwTmFtZSBpbiBwcm9wcy5ncm91cHMpIHtcbiAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocHJvcHMuZ3JvdXBzLCBncm91cE5hbWUpKSB7XG4gICAgICAgIGNvbnN0IGdyb3VwRGVzY3JpcHRpb24gPSBwcm9wcy5ncm91cHNbZ3JvdXBOYW1lXTtcbiAgICAgICAgbmV3IGNvZ25pdG8uQ2ZuVXNlclBvb2xHcm91cCh0aGlzLCBgR3JvdXAke2dyb3VwTmFtZX1gLCB7XG4gICAgICAgICAgdXNlclBvb2xJZDogdGhpcy51c2VycG9vbC51c2VyUG9vbElkLFxuICAgICAgICAgIGdyb3VwTmFtZSxcbiAgICAgICAgICBkZXNjcmlwdGlvbjogZ3JvdXBEZXNjcmlwdGlvbixcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgbmV3IENmbk91dHB1dCh0aGlzLCAnVXNlclBvb2xJZCcsIHsgdmFsdWU6IHRoaXMudXNlcnBvb2wudXNlclBvb2xJZCB9KTtcbiAgfVxufSJdfQ==
|
|
@@ -1,44 +0,0 @@
|
|
|
1
|
-
import * as appsync from '@aws-cdk/aws-appsync-alpha';
|
|
2
|
-
import { Construct } from 'constructs';
|
|
3
|
-
import { BaseApi, BaseApiProps } from './base-api';
|
|
4
|
-
import { LambdaFunction } from './func';
|
|
5
|
-
export interface GraphQlApiProps extends BaseApiProps {
|
|
6
|
-
}
|
|
7
|
-
export interface VtlResolverOptions {
|
|
8
|
-
/**
|
|
9
|
-
* The datasource the VTL resolver targets
|
|
10
|
-
*/
|
|
11
|
-
dataSource: appsync.BaseDataSource;
|
|
12
|
-
/**
|
|
13
|
-
* string replacements to process on the VTL
|
|
14
|
-
*
|
|
15
|
-
* @default no variable expansions
|
|
16
|
-
*/
|
|
17
|
-
variables?: {
|
|
18
|
-
[name: string]: string;
|
|
19
|
-
};
|
|
20
|
-
}
|
|
21
|
-
export declare class GraphQlApi extends BaseApi {
|
|
22
|
-
private props;
|
|
23
|
-
readonly api: appsync.GraphqlApi;
|
|
24
|
-
readonly tableDataSource?: appsync.DynamoDbDataSource;
|
|
25
|
-
private _functions;
|
|
26
|
-
constructor(scope: Construct, id: string, props: GraphQlApiProps);
|
|
27
|
-
/**
|
|
28
|
-
* getFunctionForOperation
|
|
29
|
-
*/
|
|
30
|
-
getFunctionForOperation<TYPE extends {
|
|
31
|
-
__typename?: any;
|
|
32
|
-
}>(typeName: TYPE['__typename'], fieldName: keyof Omit<TYPE, '__typename'>): LambdaFunction;
|
|
33
|
-
addLambdaResolver<TYPE extends {
|
|
34
|
-
__typename?: any;
|
|
35
|
-
}>(typeName: TYPE['__typename'], fieldName: keyof Omit<TYPE, '__typename'>): LambdaFunction;
|
|
36
|
-
addDynamoDbVtlResolver<TYPE extends {
|
|
37
|
-
__typename?: any;
|
|
38
|
-
}>(typeName: TYPE['__typename'], fieldName: keyof Omit<TYPE, '__typename'>, options?: Omit<VtlResolverOptions, 'dataSource'>): void;
|
|
39
|
-
addVtlResolver<TYPE extends {
|
|
40
|
-
__typename?: any;
|
|
41
|
-
}>(typeName: TYPE['__typename'], fieldName: keyof Omit<TYPE, '__typename'>, options: VtlResolverOptions): void;
|
|
42
|
-
private substVariables;
|
|
43
|
-
private createEntryFile;
|
|
44
|
-
}
|
|
@@ -1,221 +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.GraphQlApi = void 0;
|
|
27
|
-
const fs = __importStar(require("fs"));
|
|
28
|
-
const appsync = __importStar(require("@aws-cdk/aws-appsync-alpha"));
|
|
29
|
-
const aws_cdk_lib_1 = require("aws-cdk-lib");
|
|
30
|
-
const cdk = __importStar(require("aws-cdk-lib"));
|
|
31
|
-
const base_api_1 = require("./base-api");
|
|
32
|
-
const func_1 = require("./func");
|
|
33
|
-
class GraphQlApi extends base_api_1.BaseApi {
|
|
34
|
-
constructor(scope, id, props) {
|
|
35
|
-
var _a, _b;
|
|
36
|
-
super(scope, id, props);
|
|
37
|
-
this.props = props;
|
|
38
|
-
this._functions = {};
|
|
39
|
-
this.api = new appsync.GraphqlApi(this, 'Resource', {
|
|
40
|
-
name: `${props.apiName} [${props.stageName}]`,
|
|
41
|
-
logConfig: {
|
|
42
|
-
fieldLogLevel: appsync.FieldLogLevel.ALL,
|
|
43
|
-
},
|
|
44
|
-
schema: appsync.Schema.fromAsset('schema.graphql'),
|
|
45
|
-
...this.authentication && {
|
|
46
|
-
authorizationConfig: {
|
|
47
|
-
additionalAuthorizationModes: [{
|
|
48
|
-
authorizationType: appsync.AuthorizationType.USER_POOL,
|
|
49
|
-
userPoolConfig: {
|
|
50
|
-
userPool: this.authentication.userpool,
|
|
51
|
-
defaultAction: appsync.UserPoolDefaultAction.DENY,
|
|
52
|
-
},
|
|
53
|
-
}],
|
|
54
|
-
},
|
|
55
|
-
},
|
|
56
|
-
});
|
|
57
|
-
if (((_a = props.monitoring) !== null && _a !== void 0 ? _a : true) && this.monitoring) {
|
|
58
|
-
this.monitoring.apiErrorsWidget.addLeftMetric(new aws_cdk_lib_1.aws_cloudwatch.Metric({
|
|
59
|
-
namespace: 'AWS/AppSync',
|
|
60
|
-
metricName: '5XXError',
|
|
61
|
-
dimensionsMap: {
|
|
62
|
-
GraphQLAPIId: this.api.apiId,
|
|
63
|
-
},
|
|
64
|
-
statistic: 'sum',
|
|
65
|
-
}));
|
|
66
|
-
this.monitoring.apiErrorsWidget.addLeftMetric(new aws_cdk_lib_1.aws_cloudwatch.Metric({
|
|
67
|
-
namespace: 'AWS/AppSync',
|
|
68
|
-
metricName: '4XXError',
|
|
69
|
-
dimensionsMap: {
|
|
70
|
-
GraphQLAPIId: this.api.apiId,
|
|
71
|
-
},
|
|
72
|
-
statistic: 'sum',
|
|
73
|
-
}));
|
|
74
|
-
this.monitoring.apiLatencyWidget.addLeftMetric(new aws_cdk_lib_1.aws_cloudwatch.Metric({
|
|
75
|
-
namespace: 'AWS/AppSync',
|
|
76
|
-
metricName: 'Latency',
|
|
77
|
-
dimensionsMap: {
|
|
78
|
-
GraphQLAPIId: this.api.apiId,
|
|
79
|
-
},
|
|
80
|
-
statistic: 'Average',
|
|
81
|
-
}));
|
|
82
|
-
this.monitoring.apiLatencyWidget.addLeftMetric(new aws_cdk_lib_1.aws_cloudwatch.Metric({
|
|
83
|
-
namespace: 'AWS/AppSync',
|
|
84
|
-
metricName: 'Latency',
|
|
85
|
-
dimensionsMap: {
|
|
86
|
-
GraphQLAPIId: this.api.apiId,
|
|
87
|
-
},
|
|
88
|
-
statistic: 'p90',
|
|
89
|
-
}));
|
|
90
|
-
this.monitoring.apiLatencyTailWidget.addLeftMetric(new aws_cdk_lib_1.aws_cloudwatch.Metric({
|
|
91
|
-
namespace: 'AWS/AppSync',
|
|
92
|
-
metricName: 'Latency',
|
|
93
|
-
dimensionsMap: {
|
|
94
|
-
GraphQLAPIId: this.api.apiId,
|
|
95
|
-
},
|
|
96
|
-
statistic: 'p95',
|
|
97
|
-
}));
|
|
98
|
-
this.monitoring.apiLatencyTailWidget.addLeftMetric(new aws_cdk_lib_1.aws_cloudwatch.Metric({
|
|
99
|
-
namespace: 'AWS/AppSync',
|
|
100
|
-
metricName: 'Latency',
|
|
101
|
-
dimensionsMap: {
|
|
102
|
-
GraphQLAPIId: this.api.apiId,
|
|
103
|
-
},
|
|
104
|
-
statistic: 'p99',
|
|
105
|
-
}));
|
|
106
|
-
}
|
|
107
|
-
if (this.singleTableDatastore) {
|
|
108
|
-
this.tableDataSource = new appsync.DynamoDbDataSource(this, 'SingleTableSource', {
|
|
109
|
-
api: this.api,
|
|
110
|
-
table: (_b = this.singleTableDatastore) === null || _b === void 0 ? void 0 : _b.table,
|
|
111
|
-
});
|
|
112
|
-
}
|
|
113
|
-
}
|
|
114
|
-
/**
|
|
115
|
-
* getFunctionForOperation
|
|
116
|
-
*/
|
|
117
|
-
getFunctionForOperation(typeName, fieldName) {
|
|
118
|
-
return this._functions[`${typeName}.${fieldName}`];
|
|
119
|
-
}
|
|
120
|
-
addLambdaResolver(typeName, fieldName) {
|
|
121
|
-
var _a;
|
|
122
|
-
const operationId = `${typeName}.${fieldName}`;
|
|
123
|
-
const description = `Type ${typeName} Field ${fieldName} Resolver`;
|
|
124
|
-
const entryFile = `./src/lambda/${operationId}.ts`;
|
|
125
|
-
if (!fs.existsSync(entryFile)) {
|
|
126
|
-
this.createEntryFile(entryFile, typeName, fieldName);
|
|
127
|
-
}
|
|
128
|
-
const fn = new func_1.LambdaFunction(this, `Fn${operationId}`, {
|
|
129
|
-
stageName: this.props.stageName,
|
|
130
|
-
additionalEnv: this.props.additionalEnv,
|
|
131
|
-
entry: entryFile,
|
|
132
|
-
description: `[${this.props.stageName}] ${description}`,
|
|
133
|
-
...this.authentication && {
|
|
134
|
-
userPool: (_a = this.authentication) === null || _a === void 0 ? void 0 : _a.userpool,
|
|
135
|
-
},
|
|
136
|
-
...this.singleTableDatastore && {
|
|
137
|
-
table: this.singleTableDatastore.table,
|
|
138
|
-
tableWrites: typeName === 'Mutation',
|
|
139
|
-
},
|
|
140
|
-
...this.assetCdn && {
|
|
141
|
-
assetDomainName: this.assetCdn.assetDomainName,
|
|
142
|
-
assetBucket: this.assetCdn.assetBucket,
|
|
143
|
-
},
|
|
144
|
-
lambdaOptions: this.props.lambdaOptions,
|
|
145
|
-
lambdaTracing: this.props.lambdaTracing,
|
|
146
|
-
});
|
|
147
|
-
this._functions[operationId] = fn;
|
|
148
|
-
cdk.Tags.of(fn).add('GraphQL', description);
|
|
149
|
-
if (this.monitoring) {
|
|
150
|
-
this.monitoring.lambdaDurationsWidget.addLeftMetric(fn.metricDuration());
|
|
151
|
-
this.monitoring.lambdaInvokesWidget.addLeftMetric(fn.metricInvocations());
|
|
152
|
-
this.monitoring.lambdaErrorsWidget.addLeftMetric(fn.metricErrors());
|
|
153
|
-
this.monitoring.lambdaErrorsWidget.addLeftMetric(fn.metricThrottles());
|
|
154
|
-
}
|
|
155
|
-
const dataSource = new appsync.LambdaDataSource(this, `LambdaDS${operationId}`, {
|
|
156
|
-
api: this.api,
|
|
157
|
-
name: `Lambda_${typeName}_${fieldName}`,
|
|
158
|
-
lambdaFunction: fn,
|
|
159
|
-
});
|
|
160
|
-
new appsync.Resolver(this, `Resolver${operationId}`, {
|
|
161
|
-
api: this.api,
|
|
162
|
-
typeName,
|
|
163
|
-
fieldName: fieldName,
|
|
164
|
-
dataSource,
|
|
165
|
-
});
|
|
166
|
-
return fn;
|
|
167
|
-
}
|
|
168
|
-
addDynamoDbVtlResolver(typeName, fieldName, options) {
|
|
169
|
-
if (!this.tableDataSource) {
|
|
170
|
-
throw new Error('DynamoDB is not initialized');
|
|
171
|
-
}
|
|
172
|
-
this.addVtlResolver(typeName, fieldName, {
|
|
173
|
-
dataSource: this.tableDataSource,
|
|
174
|
-
...options,
|
|
175
|
-
});
|
|
176
|
-
}
|
|
177
|
-
addVtlResolver(typeName, fieldName, options) {
|
|
178
|
-
const operationId = `${typeName}.${fieldName}`;
|
|
179
|
-
const mappingReqFile = `./src/vtl/${operationId}.req.vtl`;
|
|
180
|
-
if (!fs.existsSync(mappingReqFile)) {
|
|
181
|
-
fs.writeFileSync(mappingReqFile, '## Request mapping', { encoding: 'utf-8' });
|
|
182
|
-
}
|
|
183
|
-
const mappingResFile = `./src/vtl/${operationId}.res.vtl`;
|
|
184
|
-
if (!fs.existsSync(mappingResFile)) {
|
|
185
|
-
fs.writeFileSync(mappingResFile, '$util.toJson($ctx.result)', { encoding: 'utf-8' });
|
|
186
|
-
}
|
|
187
|
-
new appsync.Resolver(this, `Resolver${operationId}`, {
|
|
188
|
-
api: this.api,
|
|
189
|
-
typeName,
|
|
190
|
-
fieldName: fieldName,
|
|
191
|
-
dataSource: options.dataSource,
|
|
192
|
-
requestMappingTemplate: appsync.MappingTemplate.fromString(this.substVariables(fs.readFileSync(mappingReqFile).toString('utf-8'), options.variables)),
|
|
193
|
-
responseMappingTemplate: appsync.MappingTemplate.fromString(this.substVariables(fs.readFileSync(mappingResFile).toString('utf-8'), options.variables)),
|
|
194
|
-
});
|
|
195
|
-
}
|
|
196
|
-
substVariables(data, vars = {}) {
|
|
197
|
-
let res = data;
|
|
198
|
-
for (const name in vars) {
|
|
199
|
-
if (Object.prototype.hasOwnProperty.call(vars, name)) {
|
|
200
|
-
const value = vars[name];
|
|
201
|
-
res = res.replace(new RegExp(`\\$\{${name}\}`, 'g'), value);
|
|
202
|
-
}
|
|
203
|
-
}
|
|
204
|
-
return res;
|
|
205
|
-
}
|
|
206
|
-
createEntryFile(entryFile, typeName, fieldName) {
|
|
207
|
-
fs.writeFileSync(entryFile, `import { http } from '@taimos/lambda-toolbox';
|
|
208
|
-
|
|
209
|
-
// TODO: Replace QUERYTYPE with the input type of the field ${typeName}.${fieldName}
|
|
210
|
-
// TODO: Replace RETURNTYPE with the return type of the field ${typeName}.${fieldName}
|
|
211
|
-
|
|
212
|
-
export const handler = http.createAppSyncHandler<QUERYTYPE, RETURNTYPE>(async (ctx) => {
|
|
213
|
-
ctx.logger.info(ctx.event);
|
|
214
|
-
throw new Error('Not yet implemented');
|
|
215
|
-
});`, {
|
|
216
|
-
encoding: 'utf-8',
|
|
217
|
-
});
|
|
218
|
-
}
|
|
219
|
-
}
|
|
220
|
-
exports.GraphQlApi = GraphQlApi;
|
|
221
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JhcGhxbC1hcGkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29uc3RydWN0cy9ncmFwaHFsLWFwaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLHVDQUF5QjtBQUN6QixvRUFBc0Q7QUFDdEQsNkNBQTJEO0FBQzNELGlEQUFtQztBQUVuQyx5Q0FBbUQ7QUFDbkQsaUNBQXdDO0FBb0J4QyxNQUFhLFVBQVcsU0FBUSxrQkFBTztJQU9yQyxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFVLEtBQXNCOztRQUN0RSxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUR3QixVQUFLLEdBQUwsS0FBSyxDQUFpQjtRQUZoRSxlQUFVLEdBQThDLEVBQUUsQ0FBQztRQUtqRSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksT0FBTyxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsVUFBVSxFQUFFO1lBQ2xELElBQUksRUFBRSxHQUFHLEtBQUssQ0FBQyxPQUFPLEtBQUssS0FBSyxDQUFDLFNBQVMsR0FBRztZQUM3QyxTQUFTLEVBQUU7Z0JBQ1QsYUFBYSxFQUFFLE9BQU8sQ0FBQyxhQUFhLENBQUMsR0FBRzthQUN6QztZQUNELE1BQU0sRUFBRSxPQUFPLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxnQkFBZ0IsQ0FBQztZQUNsRCxHQUFHLElBQUksQ0FBQyxjQUFjLElBQUk7Z0JBQ3hCLG1CQUFtQixFQUFFO29CQUNuQiw0QkFBNEIsRUFBRSxDQUFDOzRCQUM3QixpQkFBaUIsRUFBRSxPQUFPLENBQUMsaUJBQWlCLENBQUMsU0FBUzs0QkFDdEQsY0FBYyxFQUFFO2dDQUNkLFFBQVEsRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVE7Z0NBQ3RDLGFBQWEsRUFBRSxPQUFPLENBQUMscUJBQXFCLENBQUMsSUFBSTs2QkFDbEQ7eUJBQ0YsQ0FBQztpQkFDSDth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cHN5bmMgZnJvbSAnQGF3cy1jZGsvYXdzLWFwcHN5bmMtYWxwaGEnO1xuaW1wb3J0IHsgYXdzX2Nsb3Vkd2F0Y2ggYXMgY2xvdWR3YXRjaCB9IGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCAqIGFzIGNkayBmcm9tICdhd3MtY2RrLWxpYic7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcbmltcG9ydCB7IEJhc2VBcGksIEJhc2VBcGlQcm9wcyB9IGZyb20gJy4vYmFzZS1hcGknO1xuaW1wb3J0IHsgTGFtYmRhRnVuY3Rpb24gfSBmcm9tICcuL2Z1bmMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEdyYXBoUWxBcGlQcm9wcyBleHRlbmRzIEJhc2VBcGlQcm9wcyB7XG4gIC8vXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVnRsUmVzb2x2ZXJPcHRpb25zIHtcbiAgLyoqXG4gICAqIFRoZSBkYXRhc291cmNlIHRoZSBWVEwgcmVzb2x2ZXIgdGFyZ2V0c1xuICAgKi9cbiAgZGF0YVNvdXJjZTogYXBwc3luYy5CYXNlRGF0YVNvdXJjZTtcblxuICAvKipcbiAgICogc3RyaW5nIHJlcGxhY2VtZW50cyB0byBwcm9jZXNzIG9uIHRoZSBWVExcbiAgICpcbiAgICogQGRlZmF1bHQgbm8gdmFyaWFibGUgZXhwYW5zaW9uc1xuICAgKi9cbiAgdmFyaWFibGVzPzogeyBbbmFtZTogc3RyaW5nXTogc3RyaW5nIH07XG59XG5cbmV4cG9ydCBjbGFzcyBHcmFwaFFsQXBpIGV4dGVuZHMgQmFzZUFwaSB7XG5cbiAgcHVibGljIHJlYWRvbmx5IGFwaTogYXBwc3luYy5HcmFwaHFsQXBpO1xuICBwdWJsaWMgcmVhZG9ubHkgdGFibGVEYXRhU291cmNlPzogYXBwc3luYy5EeW5hbW9EYkRhdGFTb3VyY2U7XG5cbiAgcHJpdmF0ZSBfZnVuY3Rpb25zOiB7IFtvcGVyYXRpb25JZDogc3RyaW5nXTogTGFtYmRhRnVuY3Rpb24gfSA9IHt9O1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByaXZhdGUgcHJvcHM6IEdyYXBoUWxBcGlQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwgcHJvcHMpO1xuXG4gICAgdGhpcy5hcGkgPSBuZXcgYXBwc3luYy5HcmFwaHFsQXBpKHRoaXMsICdSZXNvdXJjZScsIHtcbiAgICAgIG5hbWU6IGAke3Byb3BzLmFwaU5hbWV9IFske3Byb3BzLnN0YWdlTmFtZX1dYCxcbiAgICAgIGxvZ0NvbmZpZzoge1xuICAgICAgICBmaWVsZExvZ0xldmVsOiBhcHBzeW5jLkZpZWxkTG9nTGV2ZWwuQUxMLFxuICAgICAgfSxcbiAgICAgIHNjaGVtYTogYXBwc3luYy5TY2hlbWEuZnJvbUFzc2V0KCdzY2hlbWEuZ3JhcGhxbCcpLFxuICAgICAgLi4udGhpcy5hdXRoZW50aWNhdGlvbiAmJiB7XG4gICAgICAgIGF1dGhvcml6YXRpb25Db25maWc6IHtcbiAgICAgICAgICBhZGRpdGlvbmFsQXV0aG9yaXphdGlvbk1vZGVzOiBbe1xuICAgICAgICAgICAgYXV0aG9yaXphdGlvblR5cGU6IGFwcHN5bmMuQXV0aG9yaXphdGlvblR5cGUuVVNFUl9QT09MLFxuICAgICAgICAgICAgdXNlclBvb2xDb25maWc6IHtcbiAgICAgICAgICAgICAgdXNlclBvb2w6IHRoaXMuYXV0aGVudGljYXRpb24udXNlcnBvb2wsXG4gICAgICAgICAgICAgIGRlZmF1bHRBY3Rpb246IGFwcHN5bmMuVXNlclBvb2xEZWZhdWx0QWN0aW9uLkRFTlksXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH1dLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIGlmICgocHJvcHMubW9uaXRvcmluZyA/PyB0cnVlKSAmJiB0aGlzLm1vbml0b3JpbmcpIHtcbiAgICAgIHRoaXMubW9uaXRvcmluZy5hcGlFcnJvcnNXaWRnZXQuYWRkTGVmdE1ldHJpYyhuZXcgY2xvdWR3YXRjaC5NZXRyaWMoe1xuICAgICAgICBuYW1lc3BhY2U6ICdBV1MvQXBwU3luYycsXG4gICAgICAgIG1ldHJpY05hbWU6ICc1WFhFcnJvcicsXG4gICAgICAgIGRpbWVuc2lvbnNNYXA6IHtcbiAgICAgICAgICBHcmFwaFFMQVBJSWQ6IHRoaXMuYXBpLmFwaUlkLFxuICAgICAgICB9LFxuICAgICAgICBzdGF0aXN0aWM6ICdzdW0nLFxuICAgICAgfSkpO1xuICAgICAgdGhpcy5tb25pdG9yaW5nLmFwaUVycm9yc1dpZGdldC5hZGRMZWZ0TWV0cmljKG5ldyBjbG91ZHdhdGNoLk1ldHJpYyh7XG4gICAgICAgIG5hbWVzcGFjZTogJ0FXUy9BcHBTeW5jJyxcbiAgICAgICAgbWV0cmljTmFtZTogJzRYWEVycm9yJyxcbiAgICAgICAgZGltZW5zaW9uc01hcDoge1xuICAgICAgICAgIEdyYXBoUUxBUElJZDogdGhpcy5hcGkuYXBpSWQsXG4gICAgICAgIH0sXG4gICAgICAgIHN0YXRpc3RpYzogJ3N1bScsXG4gICAgICB9KSk7XG4gICAgICB0aGlzLm1vbml0b3JpbmcuYXBpTGF0ZW5jeVdpZGdldC5hZGRMZWZ0TWV0cmljKG5ldyBjbG91ZHdhdGNoLk1ldHJpYyh7XG4gICAgICAgIG5hbWVzcGFjZTogJ0FXUy9BcHBTeW5jJyxcbiAgICAgICAgbWV0cmljTmFtZTogJ0xhdGVuY3knLFxuICAgICAgICBkaW1lbnNpb25zTWFwOiB7XG4gICAgICAgICAgR3JhcGhRTEFQSUlkOiB0aGlzLmFwaS5hcGlJZCxcbiAgICAgICAgfSxcbiAgICAgICAgc3RhdGlzdGljOiAnQXZlcmFnZScsXG4gICAgICB9KSk7XG4gICAgICB0aGlzLm1vbml0b3JpbmcuYXBpTGF0ZW5jeVdpZGdldC5hZGRMZWZ0TWV0cmljKG5ldyBjbG91ZHdhdGNoLk1ldHJpYyh7XG4gICAgICAgIG5hbWVzcGFjZTogJ0FXUy9BcHBTeW5jJyxcbiAgICAgICAgbWV0cmljTmFtZTogJ0xhdGVuY3knLFxuICAgICAgICBkaW1lbnNpb25zTWFwOiB7XG4gICAgICAgICAgR3JhcGhRTEFQSUlkOiB0aGlzLmFwaS5hcGlJZCxcbiAgICAgICAgfSxcbiAgICAgICAgc3RhdGlzdGljOiAncDkwJyxcbiAgICAgIH0pKTtcbiAgICAgIHRoaXMubW9uaXRvcmluZy5hcGlMYXRlbmN5VGFpbFdpZGdldC5hZGRMZWZ0TWV0cmljKG5ldyBjbG91ZHdhdGNoLk1ldHJpYyh7XG4gICAgICAgIG5hbWVzcGFjZTogJ0FXUy9BcHBTeW5jJyxcbiAgICAgICAgbWV0cmljTmFtZTogJ0xhdGVuY3knLFxuICAgICAgICBkaW1lbnNpb25zTWFwOiB7XG4gICAgICAgICAgR3JhcGhRTEFQSUlkOiB0aGlzLmFwaS5hcGlJZCxcbiAgICAgICAgfSxcbiAgICAgICAgc3RhdGlzdGljOiAncDk1JyxcbiAgICAgIH0pKTtcbiAgICAgIHRoaXMubW9uaXRvcmluZy5hcGlMYXRlbmN5VGFpbFdpZGdldC5hZGRMZWZ0TWV0cmljKG5ldyBjbG91ZHdhdGNoLk1ldHJpYyh7XG4gICAgICAgIG5hbWVzcGFjZTogJ0FXUy9BcHBTeW5jJyxcbiAgICAgICAgbWV0cmljTmFtZTogJ0xhdGVuY3knLFxuICAgICAgICBkaW1lbnNpb25zTWFwOiB7XG4gICAgICAgICAgR3JhcGhRTEFQSUlkOiB0aGlzLmFwaS5hcGlJZCxcbiAgICAgICAgfSxcbiAgICAgICAgc3RhdGlzdGljOiAncDk5JyxcbiAgICAgIH0pKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5zaW5nbGVUYWJsZURhdGFzdG9yZSkge1xuICAgICAgdGhpcy50YWJsZURhdGFTb3VyY2UgPSBuZXcgYXBwc3luYy5EeW5hbW9EYkRhdGFTb3VyY2UodGhpcywgJ1NpbmdsZVRhYmxlU291cmNlJywge1xuICAgICAgICBhcGk6IHRoaXMuYXBpLFxuICAgICAgICB0YWJsZTogdGhpcy5zaW5nbGVUYWJsZURhdGFzdG9yZT8udGFibGUsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogZ2V0RnVuY3Rpb25Gb3JPcGVyYXRpb25cbiAgICovXG4gIHB1YmxpYyBnZXRGdW5jdGlvbkZvck9wZXJhdGlvbjxUWVBFIGV4dGVuZHMgeyBfX3R5cGVuYW1lPzogYW55IH0+KHR5cGVOYW1lOiBUWVBFWydfX3R5cGVuYW1lJ10sIGZpZWxkTmFtZToga2V5b2YgT21pdDxUWVBFLCAnX190eXBlbmFtZSc+KTogTGFtYmRhRnVuY3Rpb24ge1xuICAgIHJldHVybiB0aGlzLl9mdW5jdGlvbnNbYCR7dHlwZU5hbWV9LiR7ZmllbGROYW1lfWBdO1xuICB9XG5cbiAgcHVibGljIGFkZExhbWJkYVJlc29sdmVyPFRZUEUgZXh0ZW5kcyB7IF9fdHlwZW5hbWU/OiBhbnkgfT4odHlwZU5hbWU6IFRZUEVbJ19fdHlwZW5hbWUnXSwgZmllbGROYW1lOiBrZXlvZiBPbWl0PFRZUEUsICdfX3R5cGVuYW1lJz4pOiBMYW1iZGFGdW5jdGlvbiB7XG4gICAgY29uc3Qgb3BlcmF0aW9uSWQgPSBgJHt0eXBlTmFtZX0uJHtmaWVsZE5hbWV9YDtcbiAgICBjb25zdCBkZXNjcmlwdGlvbiA9IGBUeXBlICR7dHlwZU5hbWV9IEZpZWxkICR7ZmllbGROYW1lfSBSZXNvbHZlcmA7XG5cbiAgICBjb25zdCBlbnRyeUZpbGUgPSBgLi9zcmMvbGFtYmRhLyR7b3BlcmF0aW9uSWR9LnRzYDtcbiAgICBpZiAoIWZzLmV4aXN0c1N5bmMoZW50cnlGaWxlKSkge1xuICAgICAgdGhpcy5jcmVhdGVFbnRyeUZpbGUoZW50cnlGaWxlLCB0eXBlTmFtZSwgZmllbGROYW1lIGFzIHN0cmluZyk7XG4gICAgfVxuXG4gICAgY29uc3QgZm4gPSBuZXcgTGFtYmRhRnVuY3Rpb24odGhpcywgYEZuJHtvcGVyYXRpb25JZH1gLCB7XG4gICAgICBzdGFnZU5hbWU6IHRoaXMucHJvcHMuc3RhZ2VOYW1lLFxuICAgICAgYWRkaXRpb25hbEVudjogdGhpcy5wcm9wcy5hZGRpdGlvbmFsRW52LFxuICAgICAgZW50cnk6IGVudHJ5RmlsZSxcbiAgICAgIGRlc2NyaXB0aW9uOiBgWyR7dGhpcy5wcm9wcy5zdGFnZU5hbWV9XSAke2Rlc2NyaXB0aW9ufWAsXG4gICAgICAuLi50aGlzLmF1dGhlbnRpY2F0aW9uICYmIHtcbiAgICAgICAgdXNlclBvb2w6IHRoaXMuYXV0aGVudGljYXRpb24/LnVzZXJwb29sLFxuICAgICAgfSxcbiAgICAgIC4uLnRoaXMuc2luZ2xlVGFibGVEYXRhc3RvcmUgJiYge1xuICAgICAgICB0YWJsZTogdGhpcy5zaW5nbGVUYWJsZURhdGFzdG9yZS50YWJsZSxcbiAgICAgICAgdGFibGVXcml0ZXM6IHR5cGVOYW1lID09PSAnTXV0YXRpb24nLFxuICAgICAgfSxcbiAgICAgIC4uLnRoaXMuYXNzZXRDZG4gJiYge1xuICAgICAgICBhc3NldERvbWFpbk5hbWU6IHRoaXMuYXNzZXRDZG4uYXNzZXREb21haW5OYW1lLFxuICAgICAgICBhc3NldEJ1Y2tldDogdGhpcy5hc3NldENkbi5hc3NldEJ1Y2tldCxcbiAgICAgIH0sXG4gICAgICBsYW1iZGFPcHRpb25zOiB0aGlzLnByb3BzLmxhbWJkYU9wdGlvbnMsXG4gICAgICBsYW1iZGFUcmFjaW5nOiB0aGlzLnByb3BzLmxhbWJkYVRyYWNpbmcsXG4gICAgfSk7XG4gICAgdGhpcy5fZnVuY3Rpb25zW29wZXJhdGlvbklkXSA9IGZuO1xuICAgIGNkay5UYWdzLm9mKGZuKS5hZGQoJ0dyYXBoUUwnLCBkZXNjcmlwdGlvbik7XG5cbiAgICBpZiAodGhpcy5tb25pdG9yaW5nKSB7XG4gICAgICB0aGlzLm1vbml0b3JpbmcubGFtYmRhRHVyYXRpb25zV2lkZ2V0LmFkZExlZnRNZXRyaWMoZm4ubWV0cmljRHVyYXRpb24oKSk7XG4gICAgICB0aGlzLm1vbml0b3JpbmcubGFtYmRhSW52b2tlc1dpZGdldC5hZGRMZWZ0TWV0cmljKGZuLm1ldHJpY0ludm9jYXRpb25zKCkpO1xuICAgICAgdGhpcy5tb25pdG9yaW5nLmxhbWJkYUVycm9yc1dpZGdldC5hZGRMZWZ0TWV0cmljKGZuLm1ldHJpY0Vycm9ycygpKTtcbiAgICAgIHRoaXMubW9uaXRvcmluZy5sYW1iZGFFcnJvcnNXaWRnZXQuYWRkTGVmdE1ldHJpYyhmbi5tZXRyaWNUaHJvdHRsZXMoKSk7XG4gICAgfVxuXG4gICAgY29uc3QgZGF0YVNvdXJjZSA9IG5ldyBhcHBzeW5jLkxhbWJkYURhdGFTb3VyY2UodGhpcywgYExhbWJkYURTJHtvcGVyYXRpb25JZH1gLCB7XG4gICAgICBhcGk6IHRoaXMuYXBpLFxuICAgICAgbmFtZTogYExhbWJkYV8ke3R5cGVOYW1lfV8ke2ZpZWxkTmFtZX1gLFxuICAgICAgbGFtYmRhRnVuY3Rpb246IGZuLFxuICAgIH0pO1xuXG4gICAgbmV3IGFwcHN5bmMuUmVzb2x2ZXIodGhpcywgYFJlc29sdmVyJHtvcGVyYXRpb25JZH1gLCB7XG4gICAgICBhcGk6IHRoaXMuYXBpLFxuICAgICAgdHlwZU5hbWUsXG4gICAgICBmaWVsZE5hbWU6IGZpZWxkTmFtZSBhcyBzdHJpbmcsXG4gICAgICBkYXRhU291cmNlLFxuICAgIH0pO1xuICAgIHJldHVybiBmbjtcbiAgfVxuXG4gIHB1YmxpYyBhZGREeW5hbW9EYlZ0bFJlc29sdmVyPFRZUEUgZXh0ZW5kcyB7IF9fdHlwZW5hbWU/OiBhbnkgfT4odHlwZU5hbWU6IFRZUEVbJ19fdHlwZW5hbWUnXSwgZmllbGROYW1lOiBrZXlvZiBPbWl0PFRZUEUsICdfX3R5cGVuYW1lJz4sIG9wdGlvbnM/OiBPbWl0PFZ0bFJlc29sdmVyT3B0aW9ucywgJ2RhdGFTb3VyY2UnPik6IHZvaWQge1xuICAgIGlmICghdGhpcy50YWJsZURhdGFTb3VyY2UpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignRHluYW1vREIgaXMgbm90IGluaXRpYWxpemVkJyk7XG4gICAgfVxuICAgIHRoaXMuYWRkVnRsUmVzb2x2ZXIodHlwZU5hbWUsIGZpZWxkTmFtZSwge1xuICAgICAgZGF0YVNvdXJjZTogdGhpcy50YWJsZURhdGFTb3VyY2UsXG4gICAgICAuLi5vcHRpb25zLFxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGFkZFZ0bFJlc29sdmVyPFRZUEUgZXh0ZW5kcyB7IF9fdHlwZW5hbWU/OiBhbnkgfT4odHlwZU5hbWU6IFRZUEVbJ19fdHlwZW5hbWUnXSwgZmllbGROYW1lOiBrZXlvZiBPbWl0PFRZUEUsICdfX3R5cGVuYW1lJz4sIG9wdGlvbnM6IFZ0bFJlc29sdmVyT3B0aW9ucyk6IHZvaWQge1xuICAgIGNvbnN0IG9wZXJhdGlvbklkID0gYCR7dHlwZU5hbWV9LiR7ZmllbGROYW1lfWA7XG5cbiAgICBjb25zdCBtYXBwaW5nUmVxRmlsZSA9IGAuL3NyYy92dGwvJHtvcGVyYXRpb25JZH0ucmVxLnZ0bGA7XG4gICAgaWYgKCFmcy5leGlzdHNTeW5jKG1hcHBpbmdSZXFGaWxlKSkge1xuICAgICAgZnMud3JpdGVGaWxlU3luYyhtYXBwaW5nUmVxRmlsZSwgJyMjIFJlcXVlc3QgbWFwcGluZycsIHsgZW5jb2Rpbmc6ICd1dGYtOCcgfSk7XG4gICAgfVxuICAgIGNvbnN0IG1hcHBpbmdSZXNGaWxlID0gYC4vc3JjL3Z0bC8ke29wZXJhdGlvbklkfS5yZXMudnRsYDtcbiAgICBpZiAoIWZzLmV4aXN0c1N5bmMobWFwcGluZ1Jlc0ZpbGUpKSB7XG4gICAgICBmcy53cml0ZUZpbGVTeW5jKG1hcHBpbmdSZXNGaWxlLCAnJHV0aWwudG9Kc29uKCRjdHgucmVzdWx0KScsIHsgZW5jb2Rpbmc6ICd1dGYtOCcgfSk7XG4gICAgfVxuXG4gICAgbmV3IGFwcHN5bmMuUmVzb2x2ZXIodGhpcywgYFJlc29sdmVyJHtvcGVyYXRpb25JZH1gLCB7XG4gICAgICBhcGk6IHRoaXMuYXBpLFxuICAgICAgdHlwZU5hbWUsXG4gICAgICBmaWVsZE5hbWU6IGZpZWxkTmFtZSBhcyBzdHJpbmcsXG4gICAgICBkYXRhU291cmNlOiBvcHRpb25zLmRhdGFTb3VyY2UsXG4gICAgICByZXF1ZXN0TWFwcGluZ1RlbXBsYXRlOiBhcHBzeW5jLk1hcHBpbmdUZW1wbGF0ZS5mcm9tU3RyaW5nKHRoaXMuc3Vic3RWYXJpYWJsZXMoZnMucmVhZEZpbGVTeW5jKG1hcHBpbmdSZXFGaWxlKS50b1N0cmluZygndXRmLTgnKSwgb3B0aW9ucy52YXJpYWJsZXMpKSxcbiAgICAgIHJlc3BvbnNlTWFwcGluZ1RlbXBsYXRlOiBhcHBzeW5jLk1hcHBpbmdUZW1wbGF0ZS5mcm9tU3RyaW5nKHRoaXMuc3Vic3RWYXJpYWJsZXMoZnMucmVhZEZpbGVTeW5jKG1hcHBpbmdSZXNGaWxlKS50b1N0cmluZygndXRmLTgnKSwgb3B0aW9ucy52YXJpYWJsZXMpKSxcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgc3Vic3RWYXJpYWJsZXMoZGF0YTogc3RyaW5nLCB2YXJzOiB7IFtuYW1lOiBzdHJpbmddOiBzdHJpbmcgfSA9IHt9KTogc3RyaW5nIHtcbiAgICBsZXQgcmVzID0gZGF0YTtcbiAgICBmb3IgKGNvbnN0IG5hbWUgaW4gdmFycykge1xuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh2YXJzLCBuYW1lKSkge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IHZhcnNbbmFtZV07XG4gICAgICAgIHJlcyA9IHJlcy5yZXBsYWNlKG5ldyBSZWdFeHAoYFxcXFwkXFx7JHtuYW1lfVxcfWAsICdnJyksIHZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlRW50cnlGaWxlKGVudHJ5RmlsZTogc3RyaW5nLCB0eXBlTmFtZTogc3RyaW5nLCBmaWVsZE5hbWU6IHN0cmluZykge1xuICAgIGZzLndyaXRlRmlsZVN5bmMoZW50cnlGaWxlLCBgaW1wb3J0IHsgaHR0cCB9IGZyb20gJ0B0YWltb3MvbGFtYmRhLXRvb2xib3gnO1xuXG4vLyBUT0RPOiBSZXBsYWNlIFFVRVJZVFlQRSB3aXRoIHRoZSBpbnB1dCB0eXBlIG9mIHRoZSBmaWVsZCAke3R5cGVOYW1lfS4ke2ZpZWxkTmFtZX1cbi8vIFRPRE86IFJlcGxhY2UgUkVUVVJOVFlQRSB3aXRoIHRoZSByZXR1cm4gdHlwZSBvZiB0aGUgZmllbGQgJHt0eXBlTmFtZX0uJHtmaWVsZE5hbWV9XG5cbmV4cG9ydCBjb25zdCBoYW5kbGVyID0gaHR0cC5jcmVhdGVBcHBTeW5jSGFuZGxlcjxRVUVSWVRZUEUsIFJFVFVSTlRZUEU+KGFzeW5jIChjdHgpID0+IHtcbiAgY3R4LmxvZ2dlci5pbmZvKGN0eC5ldmVudCk7XG4gIHRocm93IG5ldyBFcnJvcignTm90IHlldCBpbXBsZW1lbnRlZCcpO1xufSk7YCwge1xuICAgICAgZW5jb2Rpbmc6ICd1dGYtOCcsXG4gICAgfSk7XG4gIH1cbn0iXX0=
|
|
@@ -1,58 +0,0 @@
|
|
|
1
|
-
import * as apiGW from '@aws-cdk/aws-apigatewayv2-alpha';
|
|
2
|
-
import { aws_lambda as lambda } from 'aws-cdk-lib';
|
|
3
|
-
import { Construct } from 'constructs';
|
|
4
|
-
import { OpenAPI3 } from 'openapi-typescript';
|
|
5
|
-
import { BaseApi, BaseApiProps } from './base-api';
|
|
6
|
-
import { LambdaFunction, LambdaOptions } from './func';
|
|
7
|
-
export interface HttpApiProps<OPS> extends BaseApiProps {
|
|
8
|
-
/**
|
|
9
|
-
* Domain name of the API (e.g. example.com)
|
|
10
|
-
*
|
|
11
|
-
* @default - No custom domain is configured
|
|
12
|
-
*/
|
|
13
|
-
domainName?: string;
|
|
14
|
-
/**
|
|
15
|
-
* Hostname of the API if a domain name is specified
|
|
16
|
-
*
|
|
17
|
-
* @default api
|
|
18
|
-
*/
|
|
19
|
-
apiHostname?: string;
|
|
20
|
-
/**
|
|
21
|
-
* Generate routes for all endpoints configured in the openapi.yaml file
|
|
22
|
-
*
|
|
23
|
-
* @default true
|
|
24
|
-
*/
|
|
25
|
-
autoGenerateRoutes?: boolean;
|
|
26
|
-
/**
|
|
27
|
-
* custom options for the created HttpApi
|
|
28
|
-
*
|
|
29
|
-
* @default -
|
|
30
|
-
*/
|
|
31
|
-
httpApiProps?: apiGW.HttpApiProps;
|
|
32
|
-
/**
|
|
33
|
-
* additional options for the underlying Lambda function construct per operationId
|
|
34
|
-
*
|
|
35
|
-
* @default -
|
|
36
|
-
*/
|
|
37
|
-
lambdaOptionsByOperation?: {
|
|
38
|
-
[operationId in keyof OPS]?: LambdaOptions;
|
|
39
|
-
};
|
|
40
|
-
}
|
|
41
|
-
export declare class HttpApi<PATHS, OPS> extends BaseApi {
|
|
42
|
-
private props;
|
|
43
|
-
readonly api: apiGW.HttpApi;
|
|
44
|
-
readonly apiSpec: OpenAPI3;
|
|
45
|
-
private _functions;
|
|
46
|
-
constructor(scope: Construct, id: string, props: HttpApiProps<OPS>);
|
|
47
|
-
/**
|
|
48
|
-
* getFunctionForOperation
|
|
49
|
-
*/
|
|
50
|
-
getFunctionForOperation(operationId: keyof OPS): LambdaFunction;
|
|
51
|
-
addRoute<P extends keyof PATHS>(path: P, method: keyof PATHS[P], handler: lambda.IFunction): void;
|
|
52
|
-
addCustomRoute(path: string, method: string, handler: lambda.IFunction): void;
|
|
53
|
-
addRestResource<P extends keyof PATHS>(path: P, method: keyof PATHS[P]): LambdaFunction;
|
|
54
|
-
addCustomRestResource(path: string, method: string, operationId: string, description: string, additionalLambdaOptions?: LambdaOptions): LambdaFunction;
|
|
55
|
-
private createEntryFile;
|
|
56
|
-
private tableWriteAccessForMethod;
|
|
57
|
-
private methodTransform;
|
|
58
|
-
}
|