serverless-offline 8.7.0 → 9.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 +91 -95
- package/package.json +41 -69
- package/src/ServerlessOffline.js +412 -0
- package/src/config/commandOptions.js +155 -0
- package/src/config/constants.js +22 -0
- package/{dist → src}/config/defaultOptions.js +8 -17
- package/src/config/index.js +4 -0
- package/src/config/supportedRuntimes.js +47 -0
- package/src/events/authCanExecuteResource.js +35 -0
- package/src/events/authFunctionNameExtractor.js +75 -0
- package/src/events/authMatchPolicyResource.js +71 -0
- package/src/events/authValidateContext.js +51 -0
- package/src/events/http/Endpoint.js +135 -0
- package/src/events/http/Http.js +50 -0
- package/src/events/http/HttpEventDefinition.js +20 -0
- package/src/events/http/HttpServer.js +1277 -0
- package/src/events/http/OfflineEndpoint.js +33 -0
- package/src/events/http/authJWTSettingsExtractor.js +70 -0
- package/src/events/http/createAuthScheme.js +176 -0
- package/src/events/http/createJWTAuthScheme.js +106 -0
- package/src/events/http/index.js +1 -0
- package/src/events/http/javaHelpers.js +102 -0
- package/src/events/http/lambda-events/LambdaIntegrationEvent.js +57 -0
- package/src/events/http/lambda-events/LambdaProxyIntegrationEvent.js +233 -0
- package/src/events/http/lambda-events/LambdaProxyIntegrationEventV2.js +190 -0
- package/src/events/http/lambda-events/VelocityContext.js +147 -0
- package/src/events/http/lambda-events/index.js +4 -0
- package/src/events/http/lambda-events/renderVelocityTemplateObject.js +93 -0
- package/{dist → src}/events/http/parseResources.js +73 -78
- package/src/events/http/payloadSchemaValidator.js +13 -0
- package/{dist → src}/events/http/templates/offline-default.req.vm +0 -0
- package/{dist → src}/events/http/templates/offline-default.res.vm +0 -0
- package/src/events/schedule/Schedule.js +131 -0
- package/src/events/schedule/ScheduleEvent.js +18 -0
- package/src/events/schedule/ScheduleEventDefinition.js +21 -0
- package/src/events/schedule/index.js +1 -0
- package/src/events/websocket/HttpServer.js +69 -0
- package/src/events/websocket/WebSocket.js +52 -0
- package/src/events/websocket/WebSocketClients.js +462 -0
- package/src/events/websocket/WebSocketEventDefinition.js +18 -0
- package/src/events/websocket/WebSocketServer.js +73 -0
- package/src/events/websocket/http-routes/_catchAll/catchAllRoute.js +16 -0
- package/src/events/websocket/http-routes/_catchAll/index.js +1 -0
- package/src/events/websocket/http-routes/connections/ConnectionsController.js +28 -0
- package/src/events/websocket/http-routes/connections/connectionsRoutes.js +70 -0
- package/src/events/websocket/http-routes/connections/index.js +1 -0
- package/src/events/websocket/http-routes/index.js +2 -0
- package/src/events/websocket/index.js +1 -0
- package/src/events/websocket/lambda-events/WebSocketAuthorizerEvent.js +65 -0
- package/src/events/websocket/lambda-events/WebSocketConnectEvent.js +68 -0
- package/src/events/websocket/lambda-events/WebSocketDisconnectEvent.js +31 -0
- package/src/events/websocket/lambda-events/WebSocketEvent.js +29 -0
- package/src/events/websocket/lambda-events/WebSocketRequestContext.js +67 -0
- package/src/events/websocket/lambda-events/index.js +4 -0
- package/src/index.js +12 -0
- package/src/lambda/HttpServer.js +108 -0
- package/src/lambda/Lambda.js +68 -0
- package/src/lambda/LambdaContext.js +33 -0
- package/src/lambda/LambdaFunction.js +308 -0
- package/src/lambda/LambdaFunctionPool.js +109 -0
- package/src/lambda/__tests__/LambdaContext.test.js +30 -0
- package/src/lambda/__tests__/LambdaFunction.test.js +196 -0
- package/src/lambda/__tests__/fixtures/Lambda/LambdaFunctionThatReturnsJSONObject.fixture.js +47 -0
- package/src/lambda/__tests__/fixtures/Lambda/LambdaFunctionThatReturnsNativeString.fixture.js +46 -0
- package/src/lambda/__tests__/fixtures/Lambda/package.json +3 -0
- package/src/lambda/__tests__/fixtures/lambdaFunction.fixture.js +145 -0
- package/src/lambda/__tests__/fixtures/package.json +3 -0
- package/src/lambda/__tests__/routes/invocations/InvocationsController.test.js +42 -0
- package/src/lambda/handler-runner/HandlerRunner.js +136 -0
- package/src/lambda/handler-runner/child-process-runner/ChildProcessRunner.js +72 -0
- package/src/lambda/handler-runner/child-process-runner/childProcessHelper.js +42 -0
- package/src/lambda/handler-runner/child-process-runner/index.js +1 -0
- package/src/lambda/handler-runner/docker-runner/DockerContainer.js +417 -0
- package/src/lambda/handler-runner/docker-runner/DockerImage.js +35 -0
- package/src/lambda/handler-runner/docker-runner/DockerRunner.js +63 -0
- package/src/lambda/handler-runner/docker-runner/index.js +1 -0
- package/src/lambda/handler-runner/go-runner/GoRunner.js +166 -0
- package/src/lambda/handler-runner/go-runner/index.js +1 -0
- package/src/lambda/handler-runner/in-process-runner/InProcessRunner.js +125 -0
- package/src/lambda/handler-runner/in-process-runner/index.js +1 -0
- package/src/lambda/handler-runner/index.js +1 -0
- package/src/lambda/handler-runner/java-runner/JavaRunner.js +114 -0
- package/src/lambda/handler-runner/java-runner/index.js +1 -0
- package/src/lambda/handler-runner/python-runner/PythonRunner.js +138 -0
- package/src/lambda/handler-runner/python-runner/index.js +1 -0
- package/{dist → src}/lambda/handler-runner/python-runner/invoke.py +0 -0
- package/src/lambda/handler-runner/ruby-runner/RubyRunner.js +107 -0
- package/src/lambda/handler-runner/ruby-runner/index.js +1 -0
- package/{dist → src}/lambda/handler-runner/ruby-runner/invoke.rb +0 -0
- package/src/lambda/handler-runner/worker-thread-runner/WorkerThreadRunner.js +70 -0
- package/src/lambda/handler-runner/worker-thread-runner/index.js +1 -0
- package/src/lambda/handler-runner/worker-thread-runner/workerThreadHelper.js +29 -0
- package/src/lambda/index.js +1 -0
- package/src/lambda/routes/index.js +2 -0
- package/src/lambda/routes/invocations/InvocationsController.js +102 -0
- package/src/lambda/routes/invocations/index.js +1 -0
- package/src/lambda/routes/invocations/invocationsRoute.js +77 -0
- package/src/lambda/routes/invoke-async/InvokeAsyncController.js +20 -0
- package/src/lambda/routes/invoke-async/index.js +1 -0
- package/src/lambda/routes/invoke-async/invokeAsyncRoute.js +33 -0
- package/src/utils/__tests__/createUniqueId.test.js +18 -0
- package/src/utils/__tests__/formatToClfTime.test.js +14 -0
- package/src/utils/__tests__/generateHapiPath.test.js +46 -0
- package/src/utils/__tests__/lowerCaseKeys.test.js +30 -0
- package/src/utils/__tests__/parseHeaders.test.js +13 -0
- package/src/utils/__tests__/parseMultiValueHeaders.test.js +24 -0
- package/src/utils/__tests__/parseMultiValueQueryStringParameters.test.js +159 -0
- package/src/utils/__tests__/parseQueryStringParameters.test.js +15 -0
- package/src/utils/__tests__/splitHandlerPathAndName.test.js +54 -0
- package/src/utils/__tests__/unflatten.test.js +32 -0
- package/src/utils/checkDockerDaemon.js +19 -0
- package/src/utils/checkGoVersion.js +16 -0
- package/src/utils/createApiKey.js +5 -0
- package/src/utils/createUniqueId.js +5 -0
- package/src/utils/detectExecutable.js +11 -0
- package/{dist → src}/utils/formatToClfTime.js +6 -14
- package/src/utils/generateHapiPath.js +26 -0
- package/src/utils/getHttpApiCorsConfig.js +28 -0
- package/src/utils/index.js +42 -0
- package/src/utils/jsonPath.js +13 -0
- package/src/utils/logRoutes.js +64 -0
- package/src/utils/lowerCaseKeys.js +6 -0
- package/src/utils/parseHeaders.js +14 -0
- package/src/utils/parseMultiValueHeaders.js +27 -0
- package/src/utils/parseMultiValueQueryStringParameters.js +31 -0
- package/src/utils/parseQueryStringParameters.js +15 -0
- package/src/utils/resolveJoins.js +29 -0
- package/src/utils/splitHandlerPathAndName.js +31 -0
- package/src/utils/unflatten.js +11 -0
- package/dist/ServerlessOffline.js +0 -507
- package/dist/checkEngine.js +0 -21
- package/dist/config/commandOptions.js +0 -149
- package/dist/config/constants.js +0 -30
- package/dist/config/index.js +0 -55
- package/dist/config/supportedRuntimes.js +0 -40
- package/dist/debugLog.js +0 -10
- package/dist/events/authCanExecuteResource.js +0 -35
- package/dist/events/authFunctionNameExtractor.js +0 -87
- package/dist/events/authMatchPolicyResource.js +0 -62
- package/dist/events/http/Endpoint.js +0 -171
- package/dist/events/http/Http.js +0 -77
- package/dist/events/http/HttpEventDefinition.js +0 -36
- package/dist/events/http/HttpServer.js +0 -1363
- package/dist/events/http/OfflineEndpoint.js +0 -40
- package/dist/events/http/authJWTSettingsExtractor.js +0 -76
- package/dist/events/http/authValidateContext.js +0 -48
- package/dist/events/http/createAuthScheme.js +0 -184
- package/dist/events/http/createJWTAuthScheme.js +0 -155
- package/dist/events/http/index.js +0 -15
- package/dist/events/http/javaHelpers.js +0 -99
- package/dist/events/http/lambda-events/LambdaIntegrationEvent.js +0 -85
- package/dist/events/http/lambda-events/LambdaProxyIntegrationEvent.js +0 -244
- package/dist/events/http/lambda-events/LambdaProxyIntegrationEventV2.js +0 -221
- package/dist/events/http/lambda-events/VelocityContext.js +0 -168
- package/dist/events/http/lambda-events/index.js +0 -39
- package/dist/events/http/lambda-events/renderVelocityTemplateObject.js +0 -108
- package/dist/events/http/payloadSchemaValidator.js +0 -13
- package/dist/events/schedule/Schedule.js +0 -182
- package/dist/events/schedule/ScheduleEvent.js +0 -27
- package/dist/events/schedule/ScheduleEventDefinition.js +0 -36
- package/dist/events/schedule/index.js +0 -15
- package/dist/events/websocket/HttpServer.js +0 -112
- package/dist/events/websocket/WebSocket.js +0 -78
- package/dist/events/websocket/WebSocketClients.js +0 -550
- package/dist/events/websocket/WebSocketEventDefinition.js +0 -32
- package/dist/events/websocket/WebSocketServer.js +0 -140
- package/dist/events/websocket/http-routes/_catchAll/catchAllRoute.js +0 -33
- package/dist/events/websocket/http-routes/_catchAll/index.js +0 -15
- package/dist/events/websocket/http-routes/connections/ConnectionsController.js +0 -45
- package/dist/events/websocket/http-routes/connections/connectionsRoutes.js +0 -95
- package/dist/events/websocket/http-routes/connections/index.js +0 -15
- package/dist/events/websocket/http-routes/index.js +0 -23
- package/dist/events/websocket/index.js +0 -15
- package/dist/events/websocket/lambda-events/WebSocketAuthorizerEvent.js +0 -99
- package/dist/events/websocket/lambda-events/WebSocketConnectEvent.js +0 -101
- package/dist/events/websocket/lambda-events/WebSocketDisconnectEvent.js +0 -47
- package/dist/events/websocket/lambda-events/WebSocketEvent.js +0 -54
- package/dist/events/websocket/lambda-events/WebSocketRequestContext.js +0 -98
- package/dist/events/websocket/lambda-events/index.js +0 -39
- package/dist/index.js +0 -19
- package/dist/lambda/HttpServer.js +0 -122
- package/dist/lambda/Lambda.js +0 -113
- package/dist/lambda/LambdaContext.js +0 -53
- package/dist/lambda/LambdaFunction.js +0 -391
- package/dist/lambda/LambdaFunctionPool.js +0 -127
- package/dist/lambda/handler-runner/HandlerRunner.js +0 -223
- package/dist/lambda/handler-runner/child-process-runner/ChildProcessRunner.js +0 -132
- package/dist/lambda/handler-runner/child-process-runner/childProcessHelper.js +0 -40
- package/dist/lambda/handler-runner/child-process-runner/index.js +0 -15
- package/dist/lambda/handler-runner/docker-runner/DockerContainer.js +0 -517
- package/dist/lambda/handler-runner/docker-runner/DockerImage.js +0 -67
- package/dist/lambda/handler-runner/docker-runner/DockerRunner.js +0 -74
- package/dist/lambda/handler-runner/docker-runner/index.js +0 -15
- package/dist/lambda/handler-runner/go-runner/GoRunner.js +0 -211
- package/dist/lambda/handler-runner/go-runner/index.js +0 -15
- package/dist/lambda/handler-runner/in-process-runner/InProcessRunner.js +0 -234
- package/dist/lambda/handler-runner/in-process-runner/index.js +0 -15
- package/dist/lambda/handler-runner/index.js +0 -15
- package/dist/lambda/handler-runner/java-runner/JavaRunner.js +0 -151
- package/dist/lambda/handler-runner/java-runner/index.js +0 -15
- package/dist/lambda/handler-runner/python-runner/PythonRunner.js +0 -180
- package/dist/lambda/handler-runner/python-runner/index.js +0 -15
- package/dist/lambda/handler-runner/ruby-runner/RubyRunner.js +0 -148
- package/dist/lambda/handler-runner/ruby-runner/index.js +0 -15
- package/dist/lambda/handler-runner/worker-thread-runner/WorkerThreadRunner.js +0 -94
- package/dist/lambda/handler-runner/worker-thread-runner/index.js +0 -15
- package/dist/lambda/handler-runner/worker-thread-runner/workerThreadHelper.js +0 -30
- package/dist/lambda/index.js +0 -15
- package/dist/lambda/routes/index.js +0 -23
- package/dist/lambda/routes/invocations/InvocationsController.js +0 -142
- package/dist/lambda/routes/invocations/index.js +0 -15
- package/dist/lambda/routes/invocations/invocationsRoute.js +0 -90
- package/dist/lambda/routes/invoke-async/InvokeAsyncController.js +0 -38
- package/dist/lambda/routes/invoke-async/index.js +0 -15
- package/dist/lambda/routes/invoke-async/invokeAsyncRoute.js +0 -43
- package/dist/main.js +0 -11
- package/dist/serverlessLog.js +0 -91
- package/dist/utils/checkDockerDaemon.js +0 -27
- package/dist/utils/checkGoVersion.js +0 -27
- package/dist/utils/createApiKey.js +0 -12
- package/dist/utils/createUniqueId.js +0 -14
- package/dist/utils/detectExecutable.js +0 -21
- package/dist/utils/generateHapiPath.js +0 -28
- package/dist/utils/getHttpApiCorsConfig.js +0 -44
- package/dist/utils/index.js +0 -158
- package/dist/utils/jsonPath.js +0 -21
- package/dist/utils/parseHeaders.js +0 -23
- package/dist/utils/parseMultiValueHeaders.js +0 -36
- package/dist/utils/parseMultiValueQueryStringParameters.js +0 -40
- package/dist/utils/parseQueryStringParameters.js +0 -26
- package/dist/utils/resolveJoins.js +0 -34
- package/dist/utils/satisfiesVersionRange.js +0 -20
- package/dist/utils/splitHandlerPathAndName.js +0 -41
- package/dist/utils/unflatten.js +0 -18
|
@@ -1,168 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.default = void 0;
|
|
7
|
-
|
|
8
|
-
var _buffer = require("buffer");
|
|
9
|
-
|
|
10
|
-
var _jsStringEscape = _interopRequireDefault(require("js-string-escape"));
|
|
11
|
-
|
|
12
|
-
var _jsonwebtoken = require("jsonwebtoken");
|
|
13
|
-
|
|
14
|
-
var _index = require("../../../utils/index.js");
|
|
15
|
-
|
|
16
|
-
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
17
|
-
|
|
18
|
-
function _classPrivateFieldLooseBase(receiver, privateKey) { if (!Object.prototype.hasOwnProperty.call(receiver, privateKey)) { throw new TypeError("attempted to use private field on non-instance"); } return receiver; }
|
|
19
|
-
|
|
20
|
-
var id = 0;
|
|
21
|
-
|
|
22
|
-
function _classPrivateFieldLooseKey(name) { return "__private_" + id++ + "_" + name; }
|
|
23
|
-
|
|
24
|
-
const {
|
|
25
|
-
parse,
|
|
26
|
-
stringify
|
|
27
|
-
} = JSON;
|
|
28
|
-
const {
|
|
29
|
-
assign,
|
|
30
|
-
entries,
|
|
31
|
-
fromEntries
|
|
32
|
-
} = Object;
|
|
33
|
-
|
|
34
|
-
function escapeJavaScript(x) {
|
|
35
|
-
if (typeof x === 'string') {
|
|
36
|
-
return (0, _jsStringEscape.default)(x).replace(/\\n/g, '\n'); // See #26,
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
if ((0, _index.isPlainObject)(x)) {
|
|
40
|
-
const result = fromEntries(entries(x).map(([key, value]) => [key, (0, _jsStringEscape.default)(value)]));
|
|
41
|
-
return stringify(result); // Is this really how APIG does it?
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
if (typeof x.toString === 'function') {
|
|
45
|
-
return escapeJavaScript(x.toString());
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
return x;
|
|
49
|
-
}
|
|
50
|
-
/*
|
|
51
|
-
Returns a context object that mocks APIG mapping template reference
|
|
52
|
-
http://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-mapping-template-reference.html
|
|
53
|
-
*/
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
var _path = /*#__PURE__*/_classPrivateFieldLooseKey("path");
|
|
57
|
-
|
|
58
|
-
var _payload = /*#__PURE__*/_classPrivateFieldLooseKey("payload");
|
|
59
|
-
|
|
60
|
-
var _request = /*#__PURE__*/_classPrivateFieldLooseKey("request");
|
|
61
|
-
|
|
62
|
-
var _stage = /*#__PURE__*/_classPrivateFieldLooseKey("stage");
|
|
63
|
-
|
|
64
|
-
class VelocityContext {
|
|
65
|
-
constructor(request, stage, payload, path) {
|
|
66
|
-
Object.defineProperty(this, _path, {
|
|
67
|
-
writable: true,
|
|
68
|
-
value: null
|
|
69
|
-
});
|
|
70
|
-
Object.defineProperty(this, _payload, {
|
|
71
|
-
writable: true,
|
|
72
|
-
value: null
|
|
73
|
-
});
|
|
74
|
-
Object.defineProperty(this, _request, {
|
|
75
|
-
writable: true,
|
|
76
|
-
value: null
|
|
77
|
-
});
|
|
78
|
-
Object.defineProperty(this, _stage, {
|
|
79
|
-
writable: true,
|
|
80
|
-
value: null
|
|
81
|
-
});
|
|
82
|
-
_classPrivateFieldLooseBase(this, _path)[_path] = path;
|
|
83
|
-
_classPrivateFieldLooseBase(this, _payload)[_payload] = payload;
|
|
84
|
-
_classPrivateFieldLooseBase(this, _request)[_request] = request;
|
|
85
|
-
_classPrivateFieldLooseBase(this, _stage)[_stage] = stage;
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
getContext() {
|
|
89
|
-
const path = x => (0, _index.jsonPath)(_classPrivateFieldLooseBase(this, _payload)[_payload], x);
|
|
90
|
-
|
|
91
|
-
const authPrincipalId = _classPrivateFieldLooseBase(this, _request)[_request].auth && _classPrivateFieldLooseBase(this, _request)[_request].auth.credentials && _classPrivateFieldLooseBase(this, _request)[_request].auth.credentials.principalId;
|
|
92
|
-
|
|
93
|
-
let authorizer = _classPrivateFieldLooseBase(this, _request)[_request].auth && _classPrivateFieldLooseBase(this, _request)[_request].auth.credentials && _classPrivateFieldLooseBase(this, _request)[_request].auth.credentials.authorizer; // NOTE FIXME request.raw.req.rawHeaders can only be null for testing (hapi shot inject())
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
const headers = (0, _index.parseHeaders)(_classPrivateFieldLooseBase(this, _request)[_request].raw.req.rawHeaders || []);
|
|
97
|
-
let token = headers && (headers.Authorization || headers.authorization);
|
|
98
|
-
|
|
99
|
-
if (token && token.split(' ')[0] === 'Bearer') {
|
|
100
|
-
;
|
|
101
|
-
[, token] = token.split(' ');
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
if (!authorizer) authorizer = {};
|
|
105
|
-
authorizer.principalId = authPrincipalId || process.env.PRINCIPAL_ID || 'offlineContext_authorizer_principalId'; // See #24
|
|
106
|
-
|
|
107
|
-
if (token) {
|
|
108
|
-
try {
|
|
109
|
-
const claims = (0, _jsonwebtoken.decode)(token) || undefined;
|
|
110
|
-
|
|
111
|
-
if (claims) {
|
|
112
|
-
assign(authorizer, {
|
|
113
|
-
claims
|
|
114
|
-
});
|
|
115
|
-
}
|
|
116
|
-
} catch (err) {// Nothing
|
|
117
|
-
}
|
|
118
|
-
}
|
|
119
|
-
|
|
120
|
-
return {
|
|
121
|
-
context: {
|
|
122
|
-
apiId: 'offlineContext_apiId',
|
|
123
|
-
authorizer,
|
|
124
|
-
httpMethod: _classPrivateFieldLooseBase(this, _request)[_request].method.toUpperCase(),
|
|
125
|
-
identity: {
|
|
126
|
-
accountId: 'offlineContext_accountId',
|
|
127
|
-
apiKey: 'offlineContext_apiKey',
|
|
128
|
-
apiKeyId: 'offlineContext_apiKeyId',
|
|
129
|
-
caller: 'offlineContext_caller',
|
|
130
|
-
cognitoAuthenticationProvider: 'offlineContext_cognitoAuthenticationProvider',
|
|
131
|
-
cognitoAuthenticationType: 'offlineContext_cognitoAuthenticationType',
|
|
132
|
-
sourceIp: _classPrivateFieldLooseBase(this, _request)[_request].info.remoteAddress,
|
|
133
|
-
user: 'offlineContext_user',
|
|
134
|
-
userAgent: _classPrivateFieldLooseBase(this, _request)[_request].headers['user-agent'] || '',
|
|
135
|
-
userArn: 'offlineContext_userArn'
|
|
136
|
-
},
|
|
137
|
-
requestId: (0, _index.createUniqueId)(),
|
|
138
|
-
resourceId: 'offlineContext_resourceId',
|
|
139
|
-
resourcePath: _classPrivateFieldLooseBase(this, _path)[_path],
|
|
140
|
-
stage: _classPrivateFieldLooseBase(this, _stage)[_stage]
|
|
141
|
-
},
|
|
142
|
-
input: {
|
|
143
|
-
body: _classPrivateFieldLooseBase(this, _payload)[_payload],
|
|
144
|
-
// Not a string yet, todo
|
|
145
|
-
json: x => stringify(path(x)),
|
|
146
|
-
params: x => typeof x === 'string' ? _classPrivateFieldLooseBase(this, _request)[_request].params[x] || _classPrivateFieldLooseBase(this, _request)[_request].query[x] || headers[x] : {
|
|
147
|
-
header: headers,
|
|
148
|
-
path: { ..._classPrivateFieldLooseBase(this, _request)[_request].params
|
|
149
|
-
},
|
|
150
|
-
querystring: { ..._classPrivateFieldLooseBase(this, _request)[_request].query
|
|
151
|
-
}
|
|
152
|
-
},
|
|
153
|
-
path
|
|
154
|
-
},
|
|
155
|
-
util: {
|
|
156
|
-
base64Decode: x => _buffer.Buffer.from(x.toString(), 'base64').toString('binary'),
|
|
157
|
-
base64Encode: x => _buffer.Buffer.from(x.toString(), 'binary').toString('base64'),
|
|
158
|
-
escapeJavaScript,
|
|
159
|
-
parseJson: parse,
|
|
160
|
-
urlDecode: x => decodeURIComponent(x.replace(/\+/g, ' ')),
|
|
161
|
-
urlEncode: encodeURI
|
|
162
|
-
}
|
|
163
|
-
};
|
|
164
|
-
}
|
|
165
|
-
|
|
166
|
-
}
|
|
167
|
-
|
|
168
|
-
exports.default = VelocityContext;
|
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
Object.defineProperty(exports, "LambdaIntegrationEvent", {
|
|
7
|
-
enumerable: true,
|
|
8
|
-
get: function () {
|
|
9
|
-
return _LambdaIntegrationEvent.default;
|
|
10
|
-
}
|
|
11
|
-
});
|
|
12
|
-
Object.defineProperty(exports, "LambdaProxyIntegrationEvent", {
|
|
13
|
-
enumerable: true,
|
|
14
|
-
get: function () {
|
|
15
|
-
return _LambdaProxyIntegrationEvent.default;
|
|
16
|
-
}
|
|
17
|
-
});
|
|
18
|
-
Object.defineProperty(exports, "VelocityContext", {
|
|
19
|
-
enumerable: true,
|
|
20
|
-
get: function () {
|
|
21
|
-
return _VelocityContext.default;
|
|
22
|
-
}
|
|
23
|
-
});
|
|
24
|
-
Object.defineProperty(exports, "renderVelocityTemplateObject", {
|
|
25
|
-
enumerable: true,
|
|
26
|
-
get: function () {
|
|
27
|
-
return _renderVelocityTemplateObject.default;
|
|
28
|
-
}
|
|
29
|
-
});
|
|
30
|
-
|
|
31
|
-
var _LambdaIntegrationEvent = _interopRequireDefault(require("./LambdaIntegrationEvent.js"));
|
|
32
|
-
|
|
33
|
-
var _LambdaProxyIntegrationEvent = _interopRequireDefault(require("./LambdaProxyIntegrationEvent.js"));
|
|
34
|
-
|
|
35
|
-
var _renderVelocityTemplateObject = _interopRequireDefault(require("./renderVelocityTemplateObject.js"));
|
|
36
|
-
|
|
37
|
-
var _VelocityContext = _interopRequireDefault(require("./VelocityContext.js"));
|
|
38
|
-
|
|
39
|
-
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
@@ -1,108 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.default = renderVelocityTemplateObject;
|
|
7
|
-
|
|
8
|
-
var _velocityjs = require("velocityjs");
|
|
9
|
-
|
|
10
|
-
var _javaHelpers = _interopRequireDefault(require("../javaHelpers.js"));
|
|
11
|
-
|
|
12
|
-
var _debugLog = _interopRequireDefault(require("../../../debugLog.js"));
|
|
13
|
-
|
|
14
|
-
var _index = require("../../../utils/index.js");
|
|
15
|
-
|
|
16
|
-
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
17
|
-
|
|
18
|
-
const {
|
|
19
|
-
entries
|
|
20
|
-
} = Object;
|
|
21
|
-
|
|
22
|
-
function tryToParseJSON(string) {
|
|
23
|
-
let parsed;
|
|
24
|
-
|
|
25
|
-
try {
|
|
26
|
-
parsed = JSON.parse(string);
|
|
27
|
-
} catch (err) {// nothing! Some things are not meant to be parsed.
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
return parsed || string;
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
function renderVelocityString(velocityString, context, v3Utils) {
|
|
34
|
-
const log = v3Utils && v3Utils.log; // runs in a "polluted" (extended) String.prototype replacement scope
|
|
35
|
-
|
|
36
|
-
const renderResult = (0, _javaHelpers.default)(() => // This line can throw, but this function does not handle errors
|
|
37
|
-
// Quick args explanation:
|
|
38
|
-
// { escape: false } --> otherwise would escape &, < and > chars with html (&, < and >)
|
|
39
|
-
// render(context, null, true) --> null: no custom macros; true: silent mode, just like APIG
|
|
40
|
-
new _velocityjs.Compile((0, _velocityjs.parse)(velocityString), {
|
|
41
|
-
escape: false
|
|
42
|
-
}).render(context, null, true));
|
|
43
|
-
|
|
44
|
-
if (log) {
|
|
45
|
-
log.debug('Velocity rendered:', renderResult || 'undefined');
|
|
46
|
-
} else {
|
|
47
|
-
(0, _debugLog.default)('Velocity rendered:', renderResult || 'undefined');
|
|
48
|
-
} // Haaaa Velocity... this language sure loves strings a lot
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
switch (renderResult) {
|
|
52
|
-
case 'undefined':
|
|
53
|
-
return undefined;
|
|
54
|
-
// But we don't, we want JavaScript types
|
|
55
|
-
|
|
56
|
-
case 'null':
|
|
57
|
-
return null;
|
|
58
|
-
|
|
59
|
-
case 'true':
|
|
60
|
-
return true;
|
|
61
|
-
|
|
62
|
-
case 'false':
|
|
63
|
-
return false;
|
|
64
|
-
|
|
65
|
-
default:
|
|
66
|
-
return tryToParseJSON(renderResult);
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
/*
|
|
70
|
-
Deeply traverses a Serverless-style JSON (Velocity) template
|
|
71
|
-
When it finds a string, assumes it's Velocity language and renders it.
|
|
72
|
-
*/
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
function renderVelocityTemplateObject(templateObject, context, v3Utils) {
|
|
76
|
-
const result = {};
|
|
77
|
-
const log = v3Utils && v3Utils.log;
|
|
78
|
-
let toProcess = templateObject; // In some projects, the template object is a string, let us see if it's JSON
|
|
79
|
-
|
|
80
|
-
if (typeof toProcess === 'string') {
|
|
81
|
-
toProcess = tryToParseJSON(toProcess);
|
|
82
|
-
} // Let's check again
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
if ((0, _index.isPlainObject)(toProcess)) {
|
|
86
|
-
entries(toProcess).forEach(([key, value]) => {
|
|
87
|
-
if (log) {
|
|
88
|
-
log.debug('Processing key:', key, '- value:', value);
|
|
89
|
-
} else {
|
|
90
|
-
(0, _debugLog.default)('Processing key:', key, '- value:', value);
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
if (typeof value === 'string') {
|
|
94
|
-
result[key] = renderVelocityString(value, context, v3Utils); // Go deeper
|
|
95
|
-
} else if ((0, _index.isPlainObject)(value)) {
|
|
96
|
-
result[key] = renderVelocityTemplateObject(value, context); // This should never happen: value should either be a string or a plain object
|
|
97
|
-
} else {
|
|
98
|
-
result[key] = value;
|
|
99
|
-
}
|
|
100
|
-
}); // Still a string? Maybe it's some complex Velocity stuff
|
|
101
|
-
} else if (typeof toProcess === 'string') {
|
|
102
|
-
// If the plugin threw here then you should consider reviewing your template or posting an issue.
|
|
103
|
-
const alternativeResult = tryToParseJSON(renderVelocityString(toProcess, context, v3Utils));
|
|
104
|
-
return (0, _index.isPlainObject)(alternativeResult) ? alternativeResult : result;
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
return result;
|
|
108
|
-
}
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
const {
|
|
4
|
-
validate: validateJsonSchema
|
|
5
|
-
} = require('jsonschema');
|
|
6
|
-
|
|
7
|
-
exports.validate = function validate(model, body) {
|
|
8
|
-
const result = validateJsonSchema(body, model);
|
|
9
|
-
|
|
10
|
-
if (result.errors.length > 0) {
|
|
11
|
-
throw new Error(`Request body validation failed: ${result.errors.map(e => e.message).join(', ')}`);
|
|
12
|
-
}
|
|
13
|
-
};
|
|
@@ -1,182 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.default = void 0;
|
|
7
|
-
|
|
8
|
-
var _nodeSchedule = _interopRequireDefault(require("node-schedule"));
|
|
9
|
-
|
|
10
|
-
var _ScheduleEvent = _interopRequireDefault(require("./ScheduleEvent.js"));
|
|
11
|
-
|
|
12
|
-
var _ScheduleEventDefinition = _interopRequireDefault(require("./ScheduleEventDefinition.js"));
|
|
13
|
-
|
|
14
|
-
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
15
|
-
|
|
16
|
-
function _classPrivateFieldLooseBase(receiver, privateKey) { if (!Object.prototype.hasOwnProperty.call(receiver, privateKey)) { throw new TypeError("attempted to use private field on non-instance"); } return receiver; }
|
|
17
|
-
|
|
18
|
-
var id = 0;
|
|
19
|
-
|
|
20
|
-
function _classPrivateFieldLooseKey(name) { return "__private_" + id++ + "_" + name; }
|
|
21
|
-
|
|
22
|
-
// const CRON_LENGTH_WITH_YEAR = 6
|
|
23
|
-
const {
|
|
24
|
-
stringify
|
|
25
|
-
} = JSON;
|
|
26
|
-
|
|
27
|
-
var _lambda = /*#__PURE__*/_classPrivateFieldLooseKey("lambda");
|
|
28
|
-
|
|
29
|
-
var _region = /*#__PURE__*/_classPrivateFieldLooseKey("region");
|
|
30
|
-
|
|
31
|
-
class Schedule {
|
|
32
|
-
constructor(lambda, region, v3Utils) {
|
|
33
|
-
Object.defineProperty(this, _lambda, {
|
|
34
|
-
writable: true,
|
|
35
|
-
value: null
|
|
36
|
-
});
|
|
37
|
-
Object.defineProperty(this, _region, {
|
|
38
|
-
writable: true,
|
|
39
|
-
value: null
|
|
40
|
-
});
|
|
41
|
-
_classPrivateFieldLooseBase(this, _lambda)[_lambda] = lambda;
|
|
42
|
-
_classPrivateFieldLooseBase(this, _region)[_region] = region;
|
|
43
|
-
|
|
44
|
-
if (v3Utils) {
|
|
45
|
-
this.log = v3Utils.log;
|
|
46
|
-
this.progress = v3Utils.progress;
|
|
47
|
-
this.writeText = v3Utils.writeText;
|
|
48
|
-
this.v3Utils = v3Utils;
|
|
49
|
-
}
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
_scheduleEvent(functionKey, scheduleEvent) {
|
|
53
|
-
const {
|
|
54
|
-
enabled,
|
|
55
|
-
input,
|
|
56
|
-
rate
|
|
57
|
-
} = scheduleEvent;
|
|
58
|
-
|
|
59
|
-
if (!enabled) {
|
|
60
|
-
if (this.log) {
|
|
61
|
-
this.log.notice(`Scheduling [${functionKey}] cron: disabled`);
|
|
62
|
-
} else {
|
|
63
|
-
console.log(`Scheduling [${functionKey}] cron: disabled`);
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
return;
|
|
67
|
-
} // Convert string rate to array to support Serverless v2.57.0 and lower.
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
let rates = rate;
|
|
71
|
-
|
|
72
|
-
if (typeof rate === 'string') {
|
|
73
|
-
rates = [rate];
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
rates.forEach(entry => {
|
|
77
|
-
const cron = this._convertExpressionToCron(entry);
|
|
78
|
-
|
|
79
|
-
if (this.log) {
|
|
80
|
-
this.log.notice(`Scheduling [${functionKey}] cron: [${cron}] input: ${stringify(input)}`);
|
|
81
|
-
} else {
|
|
82
|
-
console.log(`Scheduling [${functionKey}] cron: [${cron}] input: ${stringify(input)}`);
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
_nodeSchedule.default.scheduleJob(cron, async () => {
|
|
86
|
-
try {
|
|
87
|
-
const lambdaFunction = _classPrivateFieldLooseBase(this, _lambda)[_lambda].get(functionKey);
|
|
88
|
-
|
|
89
|
-
const event = input !== null && input !== void 0 ? input : new _ScheduleEvent.default(_classPrivateFieldLooseBase(this, _region)[_region]);
|
|
90
|
-
lambdaFunction.setEvent(event);
|
|
91
|
-
/* const result = */
|
|
92
|
-
|
|
93
|
-
await lambdaFunction.runHandler();
|
|
94
|
-
|
|
95
|
-
if (this.log) {
|
|
96
|
-
this.log.notice(`Successfully invoked scheduled function: [${functionKey}]`);
|
|
97
|
-
} else {
|
|
98
|
-
console.log(`Successfully invoked scheduled function: [${functionKey}]`);
|
|
99
|
-
}
|
|
100
|
-
} catch (err) {
|
|
101
|
-
if (this.log) {
|
|
102
|
-
this.log.error(`Failed to execute scheduled function: [${functionKey}] Error: ${err}`);
|
|
103
|
-
} else {
|
|
104
|
-
console.log(`Failed to execute scheduled function: [${functionKey}] Error: ${err}`);
|
|
105
|
-
}
|
|
106
|
-
}
|
|
107
|
-
});
|
|
108
|
-
});
|
|
109
|
-
} // _convertCronSyntax(cronString) {
|
|
110
|
-
// if (cronString.split(' ').length < CRON_LENGTH_WITH_YEAR) {
|
|
111
|
-
// return cronString
|
|
112
|
-
// }
|
|
113
|
-
//
|
|
114
|
-
// return cronString.replace(/\s\S+$/, '')
|
|
115
|
-
// }
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
_convertRateToCron(rate) {
|
|
119
|
-
const [number, unit] = rate.split(' ');
|
|
120
|
-
|
|
121
|
-
switch (unit) {
|
|
122
|
-
case 'minute':
|
|
123
|
-
case 'minutes':
|
|
124
|
-
return `*/${number} * * * *`;
|
|
125
|
-
|
|
126
|
-
case 'hour':
|
|
127
|
-
case 'hours':
|
|
128
|
-
return `0 */${number} * * *`;
|
|
129
|
-
|
|
130
|
-
case 'day':
|
|
131
|
-
case 'days':
|
|
132
|
-
return `0 0 */${number} * *`;
|
|
133
|
-
|
|
134
|
-
default:
|
|
135
|
-
if (this.log) {
|
|
136
|
-
this.log.error(`scheduler: Invalid rate syntax '${rate}', will not schedule`);
|
|
137
|
-
} else {
|
|
138
|
-
console.log(`scheduler: Invalid rate syntax '${rate}', will not schedule`);
|
|
139
|
-
}
|
|
140
|
-
|
|
141
|
-
return null;
|
|
142
|
-
}
|
|
143
|
-
}
|
|
144
|
-
|
|
145
|
-
_convertExpressionToCron(scheduleEvent) {
|
|
146
|
-
const params = scheduleEvent.replace('rate(', '').replace('cron(', '').replace(')', '');
|
|
147
|
-
|
|
148
|
-
if (scheduleEvent.startsWith('cron(')) {
|
|
149
|
-
if (!this.log) console.log('schedule rate "cron" not yet supported!'); // return this._convertCronSyntax(params)
|
|
150
|
-
}
|
|
151
|
-
|
|
152
|
-
if (scheduleEvent.startsWith('rate(')) {
|
|
153
|
-
return this._convertRateToCron(params);
|
|
154
|
-
}
|
|
155
|
-
|
|
156
|
-
if (this.log) {
|
|
157
|
-
this.log.error('scheduler: invalid, schedule syntax');
|
|
158
|
-
} else {
|
|
159
|
-
console.log('scheduler: invalid, schedule syntax');
|
|
160
|
-
}
|
|
161
|
-
|
|
162
|
-
return undefined;
|
|
163
|
-
}
|
|
164
|
-
|
|
165
|
-
_create(functionKey, rawScheduleEventDefinition) {
|
|
166
|
-
const scheduleEvent = new _ScheduleEventDefinition.default(rawScheduleEventDefinition);
|
|
167
|
-
|
|
168
|
-
this._scheduleEvent(functionKey, scheduleEvent);
|
|
169
|
-
}
|
|
170
|
-
|
|
171
|
-
create(events) {
|
|
172
|
-
events.forEach(({
|
|
173
|
-
functionKey,
|
|
174
|
-
schedule
|
|
175
|
-
}) => {
|
|
176
|
-
this._create(functionKey, schedule);
|
|
177
|
-
});
|
|
178
|
-
}
|
|
179
|
-
|
|
180
|
-
}
|
|
181
|
-
|
|
182
|
-
exports.default = Schedule;
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.default = void 0;
|
|
7
|
-
|
|
8
|
-
var _index = require("../../utils/index.js");
|
|
9
|
-
|
|
10
|
-
class ScheduleEvent {
|
|
11
|
-
constructor(region) {
|
|
12
|
-
// format of aws displaying the time, e.g.: 2020-02-09T14:13:57Z
|
|
13
|
-
const time = new Date().toISOString().replace(/\.(.*)(?=Z)/g, '');
|
|
14
|
-
this.account = (0, _index.createUniqueId)();
|
|
15
|
-
this.detail = {};
|
|
16
|
-
this['detail-type'] = 'Scheduled Event';
|
|
17
|
-
this.id = (0, _index.createUniqueId)();
|
|
18
|
-
this.region = region;
|
|
19
|
-
this.resources = [];
|
|
20
|
-
this.source = 'aws.events';
|
|
21
|
-
this.time = time;
|
|
22
|
-
this.version = '0';
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
exports.default = ScheduleEvent;
|
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.default = void 0;
|
|
7
|
-
const {
|
|
8
|
-
assign
|
|
9
|
-
} = Object;
|
|
10
|
-
|
|
11
|
-
class ScheduleEventDefinition {
|
|
12
|
-
constructor(rawHttpEventDefinition) {
|
|
13
|
-
let enabled;
|
|
14
|
-
let rate;
|
|
15
|
-
let rest;
|
|
16
|
-
|
|
17
|
-
if (typeof rawHttpEventDefinition === 'string') {
|
|
18
|
-
rate = rawHttpEventDefinition;
|
|
19
|
-
} else {
|
|
20
|
-
;
|
|
21
|
-
({
|
|
22
|
-
rate,
|
|
23
|
-
enabled,
|
|
24
|
-
...rest
|
|
25
|
-
} = rawHttpEventDefinition);
|
|
26
|
-
} // enabled: true (default)
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
this.enabled = enabled == null ? true : enabled;
|
|
30
|
-
this.rate = rate;
|
|
31
|
-
assign(this, rest);
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
exports.default = ScheduleEventDefinition;
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
Object.defineProperty(exports, "default", {
|
|
7
|
-
enumerable: true,
|
|
8
|
-
get: function () {
|
|
9
|
-
return _Schedule.default;
|
|
10
|
-
}
|
|
11
|
-
});
|
|
12
|
-
|
|
13
|
-
var _Schedule = _interopRequireDefault(require("./Schedule.js"));
|
|
14
|
-
|
|
15
|
-
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|