serverless-offline 8.8.1 → 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.
Files changed (235) hide show
  1. package/README.md +3 -3
  2. package/package.json +33 -57
  3. package/src/ServerlessOffline.js +412 -0
  4. package/src/config/commandOptions.js +155 -0
  5. package/src/config/constants.js +22 -0
  6. package/{dist → src}/config/defaultOptions.js +8 -17
  7. package/src/config/index.js +4 -0
  8. package/src/config/supportedRuntimes.js +47 -0
  9. package/src/events/authCanExecuteResource.js +35 -0
  10. package/src/events/authFunctionNameExtractor.js +75 -0
  11. package/src/events/authMatchPolicyResource.js +71 -0
  12. package/src/events/authValidateContext.js +51 -0
  13. package/src/events/http/Endpoint.js +135 -0
  14. package/src/events/http/Http.js +50 -0
  15. package/src/events/http/HttpEventDefinition.js +20 -0
  16. package/src/events/http/HttpServer.js +1277 -0
  17. package/src/events/http/OfflineEndpoint.js +33 -0
  18. package/src/events/http/authJWTSettingsExtractor.js +70 -0
  19. package/src/events/http/createAuthScheme.js +176 -0
  20. package/src/events/http/createJWTAuthScheme.js +106 -0
  21. package/src/events/http/index.js +1 -0
  22. package/src/events/http/javaHelpers.js +102 -0
  23. package/src/events/http/lambda-events/LambdaIntegrationEvent.js +57 -0
  24. package/src/events/http/lambda-events/LambdaProxyIntegrationEvent.js +233 -0
  25. package/src/events/http/lambda-events/LambdaProxyIntegrationEventV2.js +190 -0
  26. package/src/events/http/lambda-events/VelocityContext.js +147 -0
  27. package/src/events/http/lambda-events/index.js +4 -0
  28. package/src/events/http/lambda-events/renderVelocityTemplateObject.js +93 -0
  29. package/{dist → src}/events/http/parseResources.js +73 -78
  30. package/src/events/http/payloadSchemaValidator.js +13 -0
  31. package/{dist → src}/events/http/templates/offline-default.req.vm +0 -0
  32. package/{dist → src}/events/http/templates/offline-default.res.vm +0 -0
  33. package/src/events/schedule/Schedule.js +131 -0
  34. package/src/events/schedule/ScheduleEvent.js +18 -0
  35. package/src/events/schedule/ScheduleEventDefinition.js +21 -0
  36. package/src/events/schedule/index.js +1 -0
  37. package/src/events/websocket/HttpServer.js +69 -0
  38. package/src/events/websocket/WebSocket.js +52 -0
  39. package/src/events/websocket/WebSocketClients.js +462 -0
  40. package/src/events/websocket/WebSocketEventDefinition.js +18 -0
  41. package/src/events/websocket/WebSocketServer.js +73 -0
  42. package/src/events/websocket/http-routes/_catchAll/catchAllRoute.js +16 -0
  43. package/src/events/websocket/http-routes/_catchAll/index.js +1 -0
  44. package/src/events/websocket/http-routes/connections/ConnectionsController.js +28 -0
  45. package/src/events/websocket/http-routes/connections/connectionsRoutes.js +70 -0
  46. package/src/events/websocket/http-routes/connections/index.js +1 -0
  47. package/src/events/websocket/http-routes/index.js +2 -0
  48. package/src/events/websocket/index.js +1 -0
  49. package/src/events/websocket/lambda-events/WebSocketAuthorizerEvent.js +65 -0
  50. package/src/events/websocket/lambda-events/WebSocketConnectEvent.js +68 -0
  51. package/src/events/websocket/lambda-events/WebSocketDisconnectEvent.js +31 -0
  52. package/src/events/websocket/lambda-events/WebSocketEvent.js +29 -0
  53. package/src/events/websocket/lambda-events/WebSocketRequestContext.js +67 -0
  54. package/src/events/websocket/lambda-events/index.js +4 -0
  55. package/src/index.js +12 -0
  56. package/src/lambda/HttpServer.js +108 -0
  57. package/src/lambda/Lambda.js +68 -0
  58. package/src/lambda/LambdaContext.js +33 -0
  59. package/src/lambda/LambdaFunction.js +308 -0
  60. package/src/lambda/LambdaFunctionPool.js +109 -0
  61. package/src/lambda/__tests__/LambdaContext.test.js +30 -0
  62. package/src/lambda/__tests__/LambdaFunction.test.js +196 -0
  63. package/src/lambda/__tests__/fixtures/Lambda/LambdaFunctionThatReturnsJSONObject.fixture.js +47 -0
  64. package/src/lambda/__tests__/fixtures/Lambda/LambdaFunctionThatReturnsNativeString.fixture.js +46 -0
  65. package/src/lambda/__tests__/fixtures/Lambda/package.json +3 -0
  66. package/src/lambda/__tests__/fixtures/lambdaFunction.fixture.js +145 -0
  67. package/src/lambda/__tests__/fixtures/package.json +3 -0
  68. package/src/lambda/__tests__/routes/invocations/InvocationsController.test.js +42 -0
  69. package/src/lambda/handler-runner/HandlerRunner.js +136 -0
  70. package/src/lambda/handler-runner/child-process-runner/ChildProcessRunner.js +72 -0
  71. package/src/lambda/handler-runner/child-process-runner/childProcessHelper.js +42 -0
  72. package/src/lambda/handler-runner/child-process-runner/index.js +1 -0
  73. package/src/lambda/handler-runner/docker-runner/DockerContainer.js +417 -0
  74. package/src/lambda/handler-runner/docker-runner/DockerImage.js +35 -0
  75. package/src/lambda/handler-runner/docker-runner/DockerRunner.js +63 -0
  76. package/src/lambda/handler-runner/docker-runner/index.js +1 -0
  77. package/src/lambda/handler-runner/go-runner/GoRunner.js +166 -0
  78. package/src/lambda/handler-runner/go-runner/index.js +1 -0
  79. package/src/lambda/handler-runner/in-process-runner/InProcessRunner.js +125 -0
  80. package/src/lambda/handler-runner/in-process-runner/index.js +1 -0
  81. package/src/lambda/handler-runner/index.js +1 -0
  82. package/src/lambda/handler-runner/java-runner/JavaRunner.js +114 -0
  83. package/src/lambda/handler-runner/java-runner/index.js +1 -0
  84. package/src/lambda/handler-runner/python-runner/PythonRunner.js +138 -0
  85. package/src/lambda/handler-runner/python-runner/index.js +1 -0
  86. package/{dist → src}/lambda/handler-runner/python-runner/invoke.py +0 -0
  87. package/src/lambda/handler-runner/ruby-runner/RubyRunner.js +107 -0
  88. package/src/lambda/handler-runner/ruby-runner/index.js +1 -0
  89. package/{dist → src}/lambda/handler-runner/ruby-runner/invoke.rb +0 -0
  90. package/src/lambda/handler-runner/worker-thread-runner/WorkerThreadRunner.js +70 -0
  91. package/src/lambda/handler-runner/worker-thread-runner/index.js +1 -0
  92. package/src/lambda/handler-runner/worker-thread-runner/workerThreadHelper.js +29 -0
  93. package/src/lambda/index.js +1 -0
  94. package/src/lambda/routes/index.js +2 -0
  95. package/src/lambda/routes/invocations/InvocationsController.js +102 -0
  96. package/src/lambda/routes/invocations/index.js +1 -0
  97. package/src/lambda/routes/invocations/invocationsRoute.js +77 -0
  98. package/src/lambda/routes/invoke-async/InvokeAsyncController.js +20 -0
  99. package/src/lambda/routes/invoke-async/index.js +1 -0
  100. package/src/lambda/routes/invoke-async/invokeAsyncRoute.js +33 -0
  101. package/src/utils/__tests__/createUniqueId.test.js +18 -0
  102. package/src/utils/__tests__/formatToClfTime.test.js +14 -0
  103. package/src/utils/__tests__/generateHapiPath.test.js +46 -0
  104. package/src/utils/__tests__/lowerCaseKeys.test.js +30 -0
  105. package/src/utils/__tests__/parseHeaders.test.js +13 -0
  106. package/src/utils/__tests__/parseMultiValueHeaders.test.js +24 -0
  107. package/src/utils/__tests__/parseMultiValueQueryStringParameters.test.js +159 -0
  108. package/src/utils/__tests__/parseQueryStringParameters.test.js +15 -0
  109. package/src/utils/__tests__/splitHandlerPathAndName.test.js +54 -0
  110. package/src/utils/__tests__/unflatten.test.js +32 -0
  111. package/src/utils/checkDockerDaemon.js +19 -0
  112. package/src/utils/checkGoVersion.js +16 -0
  113. package/src/utils/createApiKey.js +5 -0
  114. package/src/utils/createUniqueId.js +5 -0
  115. package/src/utils/detectExecutable.js +11 -0
  116. package/{dist → src}/utils/formatToClfTime.js +6 -14
  117. package/src/utils/generateHapiPath.js +26 -0
  118. package/src/utils/getHttpApiCorsConfig.js +28 -0
  119. package/src/utils/index.js +42 -0
  120. package/src/utils/jsonPath.js +13 -0
  121. package/src/utils/logRoutes.js +64 -0
  122. package/src/utils/lowerCaseKeys.js +6 -0
  123. package/src/utils/parseHeaders.js +14 -0
  124. package/src/utils/parseMultiValueHeaders.js +27 -0
  125. package/src/utils/parseMultiValueQueryStringParameters.js +31 -0
  126. package/src/utils/parseQueryStringParameters.js +15 -0
  127. package/src/utils/resolveJoins.js +29 -0
  128. package/src/utils/splitHandlerPathAndName.js +31 -0
  129. package/src/utils/unflatten.js +11 -0
  130. package/CHANGELOG.md +0 -78
  131. package/dist/ServerlessOffline.js +0 -508
  132. package/dist/config/commandOptions.js +0 -149
  133. package/dist/config/constants.js +0 -30
  134. package/dist/config/index.js +0 -55
  135. package/dist/config/supportedRuntimes.js +0 -40
  136. package/dist/debugLog.js +0 -12
  137. package/dist/events/authCanExecuteResource.js +0 -35
  138. package/dist/events/authFunctionNameExtractor.js +0 -87
  139. package/dist/events/authMatchPolicyResource.js +0 -62
  140. package/dist/events/authValidateContext.js +0 -53
  141. package/dist/events/http/Endpoint.js +0 -173
  142. package/dist/events/http/Http.js +0 -77
  143. package/dist/events/http/HttpEventDefinition.js +0 -36
  144. package/dist/events/http/HttpServer.js +0 -1370
  145. package/dist/events/http/OfflineEndpoint.js +0 -38
  146. package/dist/events/http/authJWTSettingsExtractor.js +0 -76
  147. package/dist/events/http/createAuthScheme.js +0 -184
  148. package/dist/events/http/createJWTAuthScheme.js +0 -159
  149. package/dist/events/http/index.js +0 -15
  150. package/dist/events/http/javaHelpers.js +0 -99
  151. package/dist/events/http/lambda-events/LambdaIntegrationEvent.js +0 -87
  152. package/dist/events/http/lambda-events/LambdaProxyIntegrationEvent.js +0 -246
  153. package/dist/events/http/lambda-events/LambdaProxyIntegrationEventV2.js +0 -225
  154. package/dist/events/http/lambda-events/VelocityContext.js +0 -170
  155. package/dist/events/http/lambda-events/index.js +0 -39
  156. package/dist/events/http/lambda-events/renderVelocityTemplateObject.js +0 -111
  157. package/dist/events/http/payloadSchemaValidator.js +0 -13
  158. package/dist/events/schedule/Schedule.js +0 -183
  159. package/dist/events/schedule/ScheduleEvent.js +0 -27
  160. package/dist/events/schedule/ScheduleEventDefinition.js +0 -36
  161. package/dist/events/schedule/index.js +0 -15
  162. package/dist/events/websocket/HttpServer.js +0 -114
  163. package/dist/events/websocket/WebSocket.js +0 -78
  164. package/dist/events/websocket/WebSocketClients.js +0 -577
  165. package/dist/events/websocket/WebSocketEventDefinition.js +0 -32
  166. package/dist/events/websocket/WebSocketServer.js +0 -139
  167. package/dist/events/websocket/http-routes/_catchAll/catchAllRoute.js +0 -33
  168. package/dist/events/websocket/http-routes/_catchAll/index.js +0 -15
  169. package/dist/events/websocket/http-routes/connections/ConnectionsController.js +0 -45
  170. package/dist/events/websocket/http-routes/connections/connectionsRoutes.js +0 -95
  171. package/dist/events/websocket/http-routes/connections/index.js +0 -15
  172. package/dist/events/websocket/http-routes/index.js +0 -23
  173. package/dist/events/websocket/index.js +0 -15
  174. package/dist/events/websocket/lambda-events/WebSocketAuthorizerEvent.js +0 -99
  175. package/dist/events/websocket/lambda-events/WebSocketConnectEvent.js +0 -101
  176. package/dist/events/websocket/lambda-events/WebSocketDisconnectEvent.js +0 -47
  177. package/dist/events/websocket/lambda-events/WebSocketEvent.js +0 -54
  178. package/dist/events/websocket/lambda-events/WebSocketRequestContext.js +0 -98
  179. package/dist/events/websocket/lambda-events/index.js +0 -39
  180. package/dist/index.js +0 -15
  181. package/dist/lambda/HttpServer.js +0 -124
  182. package/dist/lambda/Lambda.js +0 -117
  183. package/dist/lambda/LambdaContext.js +0 -53
  184. package/dist/lambda/LambdaFunction.js +0 -390
  185. package/dist/lambda/LambdaFunctionPool.js +0 -127
  186. package/dist/lambda/handler-runner/HandlerRunner.js +0 -195
  187. package/dist/lambda/handler-runner/child-process-runner/ChildProcessRunner.js +0 -124
  188. package/dist/lambda/handler-runner/child-process-runner/childProcessHelper.js +0 -49
  189. package/dist/lambda/handler-runner/child-process-runner/index.js +0 -15
  190. package/dist/lambda/handler-runner/docker-runner/DockerContainer.js +0 -515
  191. package/dist/lambda/handler-runner/docker-runner/DockerImage.js +0 -67
  192. package/dist/lambda/handler-runner/docker-runner/DockerRunner.js +0 -74
  193. package/dist/lambda/handler-runner/docker-runner/index.js +0 -15
  194. package/dist/lambda/handler-runner/go-runner/GoRunner.js +0 -230
  195. package/dist/lambda/handler-runner/go-runner/index.js +0 -15
  196. package/dist/lambda/handler-runner/in-process-runner/InProcessRunner.js +0 -228
  197. package/dist/lambda/handler-runner/in-process-runner/index.js +0 -15
  198. package/dist/lambda/handler-runner/index.js +0 -15
  199. package/dist/lambda/handler-runner/java-runner/JavaRunner.js +0 -153
  200. package/dist/lambda/handler-runner/java-runner/index.js +0 -15
  201. package/dist/lambda/handler-runner/python-runner/PythonRunner.js +0 -185
  202. package/dist/lambda/handler-runner/python-runner/index.js +0 -15
  203. package/dist/lambda/handler-runner/ruby-runner/RubyRunner.js +0 -147
  204. package/dist/lambda/handler-runner/ruby-runner/index.js +0 -15
  205. package/dist/lambda/handler-runner/worker-thread-runner/WorkerThreadRunner.js +0 -92
  206. package/dist/lambda/handler-runner/worker-thread-runner/index.js +0 -15
  207. package/dist/lambda/handler-runner/worker-thread-runner/workerThreadHelper.js +0 -31
  208. package/dist/lambda/index.js +0 -15
  209. package/dist/lambda/routes/index.js +0 -23
  210. package/dist/lambda/routes/invocations/InvocationsController.js +0 -142
  211. package/dist/lambda/routes/invocations/index.js +0 -15
  212. package/dist/lambda/routes/invocations/invocationsRoute.js +0 -90
  213. package/dist/lambda/routes/invoke-async/InvokeAsyncController.js +0 -38
  214. package/dist/lambda/routes/invoke-async/index.js +0 -15
  215. package/dist/lambda/routes/invoke-async/invokeAsyncRoute.js +0 -43
  216. package/dist/main.js +0 -11
  217. package/dist/serverlessLog.js +0 -91
  218. package/dist/utils/checkDockerDaemon.js +0 -27
  219. package/dist/utils/checkGoVersion.js +0 -27
  220. package/dist/utils/createApiKey.js +0 -12
  221. package/dist/utils/createUniqueId.js +0 -14
  222. package/dist/utils/detectExecutable.js +0 -21
  223. package/dist/utils/generateHapiPath.js +0 -28
  224. package/dist/utils/getHttpApiCorsConfig.js +0 -40
  225. package/dist/utils/index.js +0 -165
  226. package/dist/utils/jsonPath.js +0 -21
  227. package/dist/utils/lowerCaseKeys.js +0 -14
  228. package/dist/utils/parseHeaders.js +0 -23
  229. package/dist/utils/parseMultiValueHeaders.js +0 -36
  230. package/dist/utils/parseMultiValueQueryStringParameters.js +0 -40
  231. package/dist/utils/parseQueryStringParameters.js +0 -26
  232. package/dist/utils/resolveJoins.js +0 -36
  233. package/dist/utils/satisfiesVersionRange.js +0 -20
  234. package/dist/utils/splitHandlerPathAndName.js +0 -37
  235. package/dist/utils/unflatten.js +0 -18
@@ -1,55 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- var _exportNames = {
7
- commandOptions: true,
8
- defaultOptions: true
9
- };
10
- Object.defineProperty(exports, "commandOptions", {
11
- enumerable: true,
12
- get: function () {
13
- return _commandOptions.default;
14
- }
15
- });
16
- Object.defineProperty(exports, "defaultOptions", {
17
- enumerable: true,
18
- get: function () {
19
- return _defaultOptions.default;
20
- }
21
- });
22
-
23
- var _commandOptions = _interopRequireDefault(require("./commandOptions.js"));
24
-
25
- var _constants = require("./constants.js");
26
-
27
- Object.keys(_constants).forEach(function (key) {
28
- if (key === "default" || key === "__esModule") return;
29
- if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
30
- if (key in exports && exports[key] === _constants[key]) return;
31
- Object.defineProperty(exports, key, {
32
- enumerable: true,
33
- get: function () {
34
- return _constants[key];
35
- }
36
- });
37
- });
38
-
39
- var _defaultOptions = _interopRequireDefault(require("./defaultOptions.js"));
40
-
41
- var _supportedRuntimes = require("./supportedRuntimes.js");
42
-
43
- Object.keys(_supportedRuntimes).forEach(function (key) {
44
- if (key === "default" || key === "__esModule") return;
45
- if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
46
- if (key in exports && exports[key] === _supportedRuntimes[key]) return;
47
- Object.defineProperty(exports, key, {
48
- enumerable: true,
49
- get: function () {
50
- return _supportedRuntimes[key];
51
- }
52
- });
53
- });
54
-
55
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
@@ -1,40 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.supportedRuntimes = exports.supportedRuby = exports.supportedPython = exports.supportedProvided = exports.supportedNodejs = exports.supportedJava = exports.supportedGo = exports.supportedDotnetcore = void 0;
7
- // native runtime support for AWS
8
- // https://docs.aws.amazon.com/lambda/latest/dg/lambda-runtimes.html
9
- // .NET CORE
10
- const supportedDotnetcore = new Set([// deprecated
11
- // 'dotnetcore1.0',
12
- // 'dotnetcore2.0',
13
- // supported
14
- // 'dotnetcore2.1'
15
- ]); // GO
16
-
17
- exports.supportedDotnetcore = supportedDotnetcore;
18
- const supportedGo = new Set(['go1.x']); // JAVA
19
-
20
- exports.supportedGo = supportedGo;
21
- const supportedJava = new Set(['java8', 'java11']); // NODE.JS
22
-
23
- exports.supportedJava = supportedJava;
24
- const supportedNodejs = new Set([// deprecated, but still working
25
- 'nodejs4.3', 'nodejs6.10', 'nodejs8.10', // supported
26
- 'nodejs10.x', 'nodejs12.x', 'nodejs14.x', 'nodejs16.x']); // PROVIDED
27
-
28
- exports.supportedNodejs = supportedNodejs;
29
- const supportedProvided = new Set(['provided']); // PYTHON
30
-
31
- exports.supportedProvided = supportedProvided;
32
- const supportedPython = new Set(['python2.7', 'python3.6', 'python3.7', 'python3.8', 'python3.9']); // RUBY
33
-
34
- exports.supportedPython = supportedPython;
35
- const supportedRuby = new Set(['ruby2.5', 'ruby2.7']); // deprecated runtimes
36
- // https://docs.aws.amazon.com/lambda/latest/dg/runtime-support-policy.html
37
-
38
- exports.supportedRuby = supportedRuby;
39
- const supportedRuntimes = new Set([...supportedDotnetcore, ...supportedGo, ...supportedJava, ...supportedNodejs, ...supportedProvided, ...supportedPython, ...supportedRuby]);
40
- exports.supportedRuntimes = supportedRuntimes;
package/dist/debugLog.js DELETED
@@ -1,12 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.default = void 0;
7
-
8
- var _process = require("process");
9
-
10
- var _default = typeof _process.env.SLS_DEBUG !== 'undefined' ? console.log.bind(null, '[offline]') : () => null;
11
-
12
- exports.default = _default;
@@ -1,35 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.default = authCanExecuteResource;
7
-
8
- var _authMatchPolicyResource = _interopRequireDefault(require("./authMatchPolicyResource.js"));
9
-
10
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
11
-
12
- const {
13
- isArray
14
- } = Array;
15
-
16
- function checkStatementsAgainstResource(Statement, resource, effect) {
17
- return Statement.some(statement => {
18
- const resourceArray = isArray(statement.Resource) ? statement.Resource : [statement.Resource];
19
- return statement.Effect.toLowerCase() === effect.toLowerCase() && resourceArray.some(policyResource => (0, _authMatchPolicyResource.default)(policyResource, resource));
20
- });
21
- }
22
-
23
- function authCanExecuteResource(policy, resource) {
24
- const {
25
- Statement
26
- } = policy; // check for explicit deny
27
-
28
- const denyStatementFound = checkStatementsAgainstResource(Statement, resource, 'Deny');
29
-
30
- if (denyStatementFound) {
31
- return false;
32
- }
33
-
34
- return checkStatementsAgainstResource(Statement, resource, 'Allow');
35
- }
@@ -1,87 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.default = authFunctionNameExtractor;
7
-
8
- var _serverlessLog2 = _interopRequireDefault(require("../serverlessLog.js"));
9
-
10
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
11
-
12
- // FIXME "slessLog" param is only remaining for tests, should be removed
13
- function authFunctionNameExtractor(endpoint, slessLog, v3Utils) {
14
- const buildFailureResult = warningMessage => {
15
- const log = v3Utils && v3Utils.log;
16
-
17
- const _serverlessLog = slessLog || _serverlessLog2.default; // FIXME remove
18
-
19
-
20
- if (log) {
21
- log.warning(warningMessage);
22
- } else {
23
- _serverlessLog(`WARNING: ${warningMessage}`);
24
- }
25
-
26
- return {
27
- unsupportedAuth: true
28
- };
29
- };
30
-
31
- const buildSuccessResult = authorizerName => ({
32
- authorizerName
33
- });
34
-
35
- const handleStringAuthorizer = authorizerString => {
36
- if (authorizerString.toUpperCase() === 'AWS_IAM') {
37
- return buildFailureResult('Serverless Offline does not support the AWS_IAM authorization type');
38
- }
39
-
40
- return buildSuccessResult(authorizerString);
41
- };
42
-
43
- const handleObjectAuthorizer = authorizerObject => {
44
- const {
45
- arn,
46
- authorizerId,
47
- name,
48
- type
49
- } = authorizerObject;
50
-
51
- if (type && type.toUpperCase() === 'AWS_IAM') {
52
- return buildFailureResult('Serverless Offline does not support the AWS_IAM authorization type');
53
- }
54
-
55
- if (arn) {
56
- return buildFailureResult(`Serverless Offline does not support non local authorizers (arn): ${arn}`);
57
- }
58
-
59
- if (authorizerId) {
60
- return buildFailureResult(`Serverless Offline does not support non local authorizers (authorizerId): ${authorizerId}`);
61
- }
62
-
63
- if (!name) {
64
- return buildFailureResult('Serverless Offline supports local authorizers but authorizer name is missing');
65
- }
66
-
67
- return buildSuccessResult(name);
68
- };
69
-
70
- const {
71
- authorizer
72
- } = endpoint;
73
-
74
- if (!authorizer) {
75
- return buildSuccessResult(null);
76
- }
77
-
78
- if (typeof authorizer === 'string') {
79
- return handleStringAuthorizer(authorizer);
80
- }
81
-
82
- if (typeof authorizer === 'object') {
83
- return handleObjectAuthorizer(authorizer);
84
- }
85
-
86
- return buildFailureResult('Serverless Offline supports only local authorizers defined as string or object');
87
- }
@@ -1,62 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.default = authMatchPolicyResource;
7
-
8
- function parseResource(resource) {
9
- const [, region, accountId, restApiId, path] = resource.match(/arn:aws:execute-api:(.*?):(.*?):(.*?)\/(.*)/);
10
- return {
11
- accountId,
12
- path,
13
- region,
14
- restApiId
15
- };
16
- }
17
-
18
- function authMatchPolicyResource(policyResource, resource) {
19
- // resource and policyResource are ARNs
20
- if (policyResource === resource) {
21
- return true;
22
- }
23
-
24
- if (policyResource === '*') {
25
- return true;
26
- }
27
-
28
- if (policyResource === 'arn:aws:execute-api:**') {
29
- // better fix for #523
30
- return true;
31
- }
32
-
33
- if (policyResource === 'arn:aws:execute-api:*:*:*') {
34
- return true;
35
- }
36
-
37
- if (policyResource.includes('*') || policyResource.includes('?')) {
38
- // Policy contains a wildcard resource
39
- const parsedPolicyResource = parseResource(policyResource);
40
- const parsedResource = parseResource(resource);
41
-
42
- if (parsedPolicyResource.region !== '*' && parsedPolicyResource.region !== parsedResource.region) {
43
- return false;
44
- }
45
-
46
- if (parsedPolicyResource.accountId !== '*' && parsedPolicyResource.accountId !== parsedResource.accountId) {
47
- return false;
48
- }
49
-
50
- if (parsedPolicyResource.restApiId !== '*' && parsedPolicyResource.restApiId !== parsedResource.restApiId) {
51
- return false;
52
- } // The path contains stage, method and the path
53
- // for the requested resource and the resource defined in the policy
54
- // Need to create a regex replacing ? with one character and * with any number of characters
55
-
56
-
57
- const regExp = new RegExp(parsedPolicyResource.path.replace(/\*/g, '.*').replace(/\?/g, '.'));
58
- return regExp.test(parsedResource.path);
59
- }
60
-
61
- return false;
62
- }
@@ -1,53 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.default = authValidateContext;
7
-
8
- var _boom = _interopRequireDefault(require("@hapi/boom"));
9
-
10
- var _serverlessLog = _interopRequireDefault(require("../serverlessLog.js"));
11
-
12
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
13
-
14
- const {
15
- keys,
16
- values
17
- } = Object;
18
-
19
- function internalServerError(message) {
20
- const errorType = 'AuthorizerConfigurationException';
21
-
22
- const error = _boom.default.internal();
23
-
24
- error.output.payload.message = message;
25
- error.output.payload.error = errorType;
26
- error.output.headers['x-amzn-ErrorType'] = errorType;
27
- return error;
28
- }
29
-
30
- function isValidContext(context) {
31
- return values(context).every(i => typeof i === 'string' || typeof i === 'boolean' || typeof i === 'number');
32
- }
33
-
34
- function transform(context) {
35
- keys(context).forEach(i => {
36
- context[i] = context[i].toString();
37
- });
38
- return context;
39
- }
40
-
41
- function authValidateContext(context, authFunName) {
42
- if (typeof context !== 'object') {
43
- return internalServerError('Authorizer response context must be an object');
44
- }
45
-
46
- if (!isValidContext(context)) {
47
- const error = 'Authorizer response context values must be of type string, number, or boolean';
48
- (0, _serverlessLog.default)(`Detected invalid value types returned in authorizer context: (λ: ${authFunName}). ${error}. ` + 'More info: https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-lambda-authorizer-output.html');
49
- return internalServerError(error);
50
- }
51
-
52
- return transform(context);
53
- }
@@ -1,173 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.default = void 0;
7
-
8
- var _fs = require("fs");
9
-
10
- var _path = require("path");
11
-
12
- var _OfflineEndpoint = _interopRequireDefault(require("./OfflineEndpoint.js"));
13
-
14
- var _debugLog = _interopRequireDefault(require("../../debugLog.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
- keys
26
- } = Object;
27
-
28
- function readFile(filePath) {
29
- return (0, _fs.readFileSync)(filePath, 'utf8');
30
- } // velocity template defaults
31
-
32
-
33
- const defaultRequestTemplate = readFile((0, _path.resolve)(__dirname, './templates/offline-default.req.vm'));
34
- const defaultResponseTemplate = readFile((0, _path.resolve)(__dirname, './templates/offline-default.res.vm'));
35
-
36
- function getResponseContentType(fep) {
37
- if (fep.response && fep.response.headers['Content-Type']) {
38
- return fep.response.headers['Content-Type'].replace(/'/gm, '');
39
- }
40
-
41
- return 'application/json';
42
- }
43
-
44
- var _handlerPath = /*#__PURE__*/_classPrivateFieldLooseKey("handlerPath");
45
-
46
- var _http = /*#__PURE__*/_classPrivateFieldLooseKey("http");
47
-
48
- class Endpoint {
49
- constructor(handlerPath, http, v3Utils) {
50
- Object.defineProperty(this, _handlerPath, {
51
- writable: true,
52
- value: null
53
- });
54
- Object.defineProperty(this, _http, {
55
- writable: true,
56
- value: null
57
- });
58
- _classPrivateFieldLooseBase(this, _handlerPath)[_handlerPath] = handlerPath;
59
- _classPrivateFieldLooseBase(this, _http)[_http] = http;
60
-
61
- if (v3Utils) {
62
- this.log = v3Utils.log;
63
- this.progress = v3Utils.progress;
64
- this.writeText = v3Utils.writeText;
65
- this.v3Utils = v3Utils;
66
- } // TODO FIXME
67
- // eslint-disable-next-line no-constructor-return
68
-
69
-
70
- return this._generate();
71
- } // determine whether we have function level overrides for velocity templates
72
- // if not we will use defaults
73
-
74
-
75
- _setVmTemplates(fullEndpoint) {
76
- // determine requestTemplate
77
- // first check if requestTemplate is set through serverless
78
- const fep = fullEndpoint;
79
-
80
- try {
81
- // determine request template override
82
- const reqFilename = `${_classPrivateFieldLooseBase(this, _handlerPath)[_handlerPath]}.req.vm`; // check if serverless framework populates the object itself
83
-
84
- if (typeof _classPrivateFieldLooseBase(this, _http)[_http].request === 'object' && typeof _classPrivateFieldLooseBase(this, _http)[_http].request.template === 'object') {
85
- const templatesConfig = _classPrivateFieldLooseBase(this, _http)[_http].request.template;
86
-
87
- keys(templatesConfig).forEach(key => {
88
- fep.requestTemplates[key] = templatesConfig[key];
89
- });
90
- } // load request template if exists if not use default from serverless offline
91
- else if ((0, _fs.existsSync)(reqFilename)) {
92
- fep.requestTemplates['application/json'] = readFile(reqFilename);
93
- } else {
94
- fep.requestTemplates['application/json'] = defaultRequestTemplate;
95
- } // determine response template
96
-
97
-
98
- const resFilename = `${_classPrivateFieldLooseBase(this, _handlerPath)[_handlerPath]}.res.vm`;
99
- fep.responseContentType = getResponseContentType(fep);
100
-
101
- if (this.log) {
102
- this.log.debug('Response Content-Type ', fep.responseContentType);
103
- } else {
104
- (0, _debugLog.default)('Response Content-Type ', fep.responseContentType);
105
- } // load response template from http response template, or load file if exists other use default
106
-
107
-
108
- if (fep.response && fep.response.template) {
109
- fep.responses.default.responseTemplates[fep.responseContentType] = fep.response.template;
110
- } else if ((0, _fs.existsSync)(resFilename)) {
111
- fep.responses.default.responseTemplates[fep.responseContentType] = readFile(resFilename);
112
- } else {
113
- fep.responses.default.responseTemplates[fep.responseContentType] = defaultResponseTemplate;
114
- }
115
- } catch (err) {
116
- if (this.log) {
117
- this.log.debug(`Error: ${err}`);
118
- } else {
119
- (0, _debugLog.default)(`Error: ${err}`);
120
- }
121
- }
122
-
123
- return fep;
124
- } // loosely based on:
125
- // https://github.com/serverless/serverless/blob/v1.59.2/lib/plugins/aws/package/compile/events/apiGateway/lib/validate.js#L380
126
-
127
-
128
- _getIntegration(http) {
129
- const {
130
- integration,
131
- async: isAsync
132
- } = http;
133
-
134
- if (integration) {
135
- const normalizedIntegration = integration.toUpperCase().replace('-', '_');
136
-
137
- if (normalizedIntegration === 'LAMBDA') {
138
- return 'AWS';
139
- }
140
-
141
- if (normalizedIntegration === 'LAMBDA_PROXY') {
142
- return 'AWS_PROXY';
143
- }
144
-
145
- return normalizedIntegration;
146
- }
147
-
148
- if (isAsync) {
149
- return 'AWS';
150
- }
151
-
152
- return 'AWS_PROXY';
153
- } // return fully generated Endpoint
154
-
155
-
156
- _generate() {
157
- const offlineEndpoint = new _OfflineEndpoint.default();
158
- const fullEndpoint = { ...offlineEndpoint,
159
- ..._classPrivateFieldLooseBase(this, _http)[_http]
160
- };
161
- fullEndpoint.integration = this._getIntegration(_classPrivateFieldLooseBase(this, _http)[_http]);
162
-
163
- if (fullEndpoint.integration === 'AWS') {
164
- // determine request and response templates or use defaults
165
- return this._setVmTemplates(fullEndpoint);
166
- }
167
-
168
- return fullEndpoint;
169
- }
170
-
171
- }
172
-
173
- exports.default = Endpoint;
@@ -1,77 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.default = void 0;
7
-
8
- var _HttpEventDefinition = _interopRequireDefault(require("./HttpEventDefinition.js"));
9
-
10
- var _HttpServer = _interopRequireDefault(require("./HttpServer.js"));
11
-
12
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
13
-
14
- function _classPrivateFieldLooseBase(receiver, privateKey) { if (!Object.prototype.hasOwnProperty.call(receiver, privateKey)) { throw new TypeError("attempted to use private field on non-instance"); } return receiver; }
15
-
16
- var id = 0;
17
-
18
- function _classPrivateFieldLooseKey(name) { return "__private_" + id++ + "_" + name; }
19
-
20
- var _httpServer = /*#__PURE__*/_classPrivateFieldLooseKey("httpServer");
21
-
22
- class Http {
23
- constructor(serverless, options, lambda, v3Utils) {
24
- Object.defineProperty(this, _httpServer, {
25
- writable: true,
26
- value: null
27
- });
28
- _classPrivateFieldLooseBase(this, _httpServer)[_httpServer] = new _HttpServer.default(serverless, options, lambda, v3Utils);
29
- }
30
-
31
- start() {
32
- return _classPrivateFieldLooseBase(this, _httpServer)[_httpServer].start();
33
- } // stops the server
34
-
35
-
36
- stop(timeout) {
37
- return _classPrivateFieldLooseBase(this, _httpServer)[_httpServer].stop(timeout);
38
- }
39
-
40
- _create(functionKey, rawHttpEventDefinition, handler) {
41
- const httpEvent = new _HttpEventDefinition.default(rawHttpEventDefinition);
42
-
43
- _classPrivateFieldLooseBase(this, _httpServer)[_httpServer].createRoutes(functionKey, httpEvent, handler);
44
- }
45
-
46
- create(events) {
47
- events.forEach(({
48
- functionKey,
49
- handler,
50
- http
51
- }) => {
52
- this._create(functionKey, http, handler);
53
- });
54
-
55
- _classPrivateFieldLooseBase(this, _httpServer)[_httpServer].writeRoutesTerminal();
56
- }
57
-
58
- createResourceRoutes() {
59
- _classPrivateFieldLooseBase(this, _httpServer)[_httpServer].createResourceRoutes();
60
- }
61
-
62
- create404Route() {
63
- _classPrivateFieldLooseBase(this, _httpServer)[_httpServer].create404Route();
64
- }
65
-
66
- registerPlugins() {
67
- return _classPrivateFieldLooseBase(this, _httpServer)[_httpServer].registerPlugins();
68
- } // TEMP FIXME quick fix to expose gateway server for testing, look for better solution
69
-
70
-
71
- getServer() {
72
- return _classPrivateFieldLooseBase(this, _httpServer)[_httpServer].getServer();
73
- }
74
-
75
- }
76
-
77
- exports.default = Http;
@@ -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 HttpEventDefinition {
12
- constructor(rawHttpEventDefinition) {
13
- let method;
14
- let path;
15
- let rest;
16
-
17
- if (typeof rawHttpEventDefinition === 'string') {
18
- ;
19
- [method, path] = rawHttpEventDefinition.split(' ');
20
- } else {
21
- ;
22
- ({
23
- method,
24
- path,
25
- ...rest
26
- } = rawHttpEventDefinition);
27
- }
28
-
29
- this.method = method;
30
- this.path = path;
31
- assign(this, rest);
32
- }
33
-
34
- }
35
-
36
- exports.default = HttpEventDefinition;