serverless-offline 8.8.0 → 9.1.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 (233) hide show
  1. package/README.md +12 -11
  2. package/package.json +33 -58
  3. package/src/ServerlessOffline.js +409 -0
  4. package/src/config/commandOptions.js +159 -0
  5. package/src/config/constants.js +22 -0
  6. package/{dist → src}/config/defaultOptions.js +9 -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 +1242 -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 +309 -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 +167 -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/splitHandlerPathAndName.js +31 -0
  128. package/src/utils/unflatten.js +11 -0
  129. package/dist/ServerlessOffline.js +0 -514
  130. package/dist/config/commandOptions.js +0 -149
  131. package/dist/config/constants.js +0 -30
  132. package/dist/config/index.js +0 -55
  133. package/dist/config/supportedRuntimes.js +0 -40
  134. package/dist/debugLog.js +0 -12
  135. package/dist/events/authCanExecuteResource.js +0 -35
  136. package/dist/events/authFunctionNameExtractor.js +0 -87
  137. package/dist/events/authMatchPolicyResource.js +0 -62
  138. package/dist/events/authValidateContext.js +0 -53
  139. package/dist/events/http/Endpoint.js +0 -173
  140. package/dist/events/http/Http.js +0 -77
  141. package/dist/events/http/HttpEventDefinition.js +0 -36
  142. package/dist/events/http/HttpServer.js +0 -1370
  143. package/dist/events/http/OfflineEndpoint.js +0 -38
  144. package/dist/events/http/authJWTSettingsExtractor.js +0 -76
  145. package/dist/events/http/createAuthScheme.js +0 -184
  146. package/dist/events/http/createJWTAuthScheme.js +0 -159
  147. package/dist/events/http/index.js +0 -15
  148. package/dist/events/http/javaHelpers.js +0 -99
  149. package/dist/events/http/lambda-events/LambdaIntegrationEvent.js +0 -87
  150. package/dist/events/http/lambda-events/LambdaProxyIntegrationEvent.js +0 -246
  151. package/dist/events/http/lambda-events/LambdaProxyIntegrationEventV2.js +0 -225
  152. package/dist/events/http/lambda-events/VelocityContext.js +0 -170
  153. package/dist/events/http/lambda-events/index.js +0 -39
  154. package/dist/events/http/lambda-events/renderVelocityTemplateObject.js +0 -111
  155. package/dist/events/http/payloadSchemaValidator.js +0 -13
  156. package/dist/events/schedule/Schedule.js +0 -183
  157. package/dist/events/schedule/ScheduleEvent.js +0 -27
  158. package/dist/events/schedule/ScheduleEventDefinition.js +0 -36
  159. package/dist/events/schedule/index.js +0 -15
  160. package/dist/events/websocket/HttpServer.js +0 -114
  161. package/dist/events/websocket/WebSocket.js +0 -78
  162. package/dist/events/websocket/WebSocketClients.js +0 -577
  163. package/dist/events/websocket/WebSocketEventDefinition.js +0 -32
  164. package/dist/events/websocket/WebSocketServer.js +0 -139
  165. package/dist/events/websocket/http-routes/_catchAll/catchAllRoute.js +0 -33
  166. package/dist/events/websocket/http-routes/_catchAll/index.js +0 -15
  167. package/dist/events/websocket/http-routes/connections/ConnectionsController.js +0 -45
  168. package/dist/events/websocket/http-routes/connections/connectionsRoutes.js +0 -95
  169. package/dist/events/websocket/http-routes/connections/index.js +0 -15
  170. package/dist/events/websocket/http-routes/index.js +0 -23
  171. package/dist/events/websocket/index.js +0 -15
  172. package/dist/events/websocket/lambda-events/WebSocketAuthorizerEvent.js +0 -99
  173. package/dist/events/websocket/lambda-events/WebSocketConnectEvent.js +0 -101
  174. package/dist/events/websocket/lambda-events/WebSocketDisconnectEvent.js +0 -47
  175. package/dist/events/websocket/lambda-events/WebSocketEvent.js +0 -54
  176. package/dist/events/websocket/lambda-events/WebSocketRequestContext.js +0 -98
  177. package/dist/events/websocket/lambda-events/index.js +0 -39
  178. package/dist/index.js +0 -15
  179. package/dist/lambda/HttpServer.js +0 -124
  180. package/dist/lambda/Lambda.js +0 -117
  181. package/dist/lambda/LambdaContext.js +0 -53
  182. package/dist/lambda/LambdaFunction.js +0 -390
  183. package/dist/lambda/LambdaFunctionPool.js +0 -127
  184. package/dist/lambda/handler-runner/HandlerRunner.js +0 -195
  185. package/dist/lambda/handler-runner/child-process-runner/ChildProcessRunner.js +0 -124
  186. package/dist/lambda/handler-runner/child-process-runner/childProcessHelper.js +0 -49
  187. package/dist/lambda/handler-runner/child-process-runner/index.js +0 -15
  188. package/dist/lambda/handler-runner/docker-runner/DockerContainer.js +0 -515
  189. package/dist/lambda/handler-runner/docker-runner/DockerImage.js +0 -67
  190. package/dist/lambda/handler-runner/docker-runner/DockerRunner.js +0 -74
  191. package/dist/lambda/handler-runner/docker-runner/index.js +0 -15
  192. package/dist/lambda/handler-runner/go-runner/GoRunner.js +0 -230
  193. package/dist/lambda/handler-runner/go-runner/index.js +0 -15
  194. package/dist/lambda/handler-runner/in-process-runner/InProcessRunner.js +0 -228
  195. package/dist/lambda/handler-runner/in-process-runner/index.js +0 -15
  196. package/dist/lambda/handler-runner/index.js +0 -15
  197. package/dist/lambda/handler-runner/java-runner/JavaRunner.js +0 -153
  198. package/dist/lambda/handler-runner/java-runner/index.js +0 -15
  199. package/dist/lambda/handler-runner/python-runner/PythonRunner.js +0 -185
  200. package/dist/lambda/handler-runner/python-runner/index.js +0 -15
  201. package/dist/lambda/handler-runner/ruby-runner/RubyRunner.js +0 -147
  202. package/dist/lambda/handler-runner/ruby-runner/index.js +0 -15
  203. package/dist/lambda/handler-runner/worker-thread-runner/WorkerThreadRunner.js +0 -92
  204. package/dist/lambda/handler-runner/worker-thread-runner/index.js +0 -15
  205. package/dist/lambda/handler-runner/worker-thread-runner/workerThreadHelper.js +0 -31
  206. package/dist/lambda/index.js +0 -15
  207. package/dist/lambda/routes/index.js +0 -23
  208. package/dist/lambda/routes/invocations/InvocationsController.js +0 -142
  209. package/dist/lambda/routes/invocations/index.js +0 -15
  210. package/dist/lambda/routes/invocations/invocationsRoute.js +0 -90
  211. package/dist/lambda/routes/invoke-async/InvokeAsyncController.js +0 -38
  212. package/dist/lambda/routes/invoke-async/index.js +0 -15
  213. package/dist/lambda/routes/invoke-async/invokeAsyncRoute.js +0 -43
  214. package/dist/main.js +0 -11
  215. package/dist/serverlessLog.js +0 -91
  216. package/dist/utils/checkDockerDaemon.js +0 -27
  217. package/dist/utils/checkGoVersion.js +0 -27
  218. package/dist/utils/createApiKey.js +0 -12
  219. package/dist/utils/createUniqueId.js +0 -14
  220. package/dist/utils/detectExecutable.js +0 -21
  221. package/dist/utils/generateHapiPath.js +0 -28
  222. package/dist/utils/getHttpApiCorsConfig.js +0 -40
  223. package/dist/utils/index.js +0 -165
  224. package/dist/utils/jsonPath.js +0 -21
  225. package/dist/utils/lowerCaseKeys.js +0 -14
  226. package/dist/utils/parseHeaders.js +0 -23
  227. package/dist/utils/parseMultiValueHeaders.js +0 -36
  228. package/dist/utils/parseMultiValueQueryStringParameters.js +0 -40
  229. package/dist/utils/parseQueryStringParameters.js +0 -26
  230. package/dist/utils/resolveJoins.js +0 -36
  231. package/dist/utils/satisfiesVersionRange.js +0 -20
  232. package/dist/utils/splitHandlerPathAndName.js +0 -37
  233. package/dist/utils/unflatten.js +0 -18
@@ -1,246 +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 _process = require("process");
11
-
12
- var _jsonwebtoken = require("jsonwebtoken");
13
-
14
- var _index = require("../../../utils/index.js");
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 {
23
- byteLength
24
- } = _buffer.Buffer;
25
- const {
26
- parse
27
- } = JSON;
28
- const {
29
- assign
30
- } = Object; // https://serverless.com/framework/docs/providers/aws/events/apigateway/
31
- // https://docs.aws.amazon.com/apigateway/latest/developerguide/set-up-lambda-proxy-integrations.html
32
- // http://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-create-api-as-simple-proxy-for-lambda.html
33
-
34
- var _path = /*#__PURE__*/_classPrivateFieldLooseKey("path");
35
-
36
- var _routeKey = /*#__PURE__*/_classPrivateFieldLooseKey("routeKey");
37
-
38
- var _request = /*#__PURE__*/_classPrivateFieldLooseKey("request");
39
-
40
- var _stage = /*#__PURE__*/_classPrivateFieldLooseKey("stage");
41
-
42
- var _stageVariables = /*#__PURE__*/_classPrivateFieldLooseKey("stageVariables");
43
-
44
- var _additionalRequestContext = /*#__PURE__*/_classPrivateFieldLooseKey("additionalRequestContext");
45
-
46
- class LambdaProxyIntegrationEvent {
47
- constructor(request, stage, path, stageVariables, routeKey, additionalRequestContext, v3Utils) {
48
- Object.defineProperty(this, _path, {
49
- writable: true,
50
- value: null
51
- });
52
- Object.defineProperty(this, _routeKey, {
53
- writable: true,
54
- value: null
55
- });
56
- Object.defineProperty(this, _request, {
57
- writable: true,
58
- value: null
59
- });
60
- Object.defineProperty(this, _stage, {
61
- writable: true,
62
- value: null
63
- });
64
- Object.defineProperty(this, _stageVariables, {
65
- writable: true,
66
- value: null
67
- });
68
- Object.defineProperty(this, _additionalRequestContext, {
69
- writable: true,
70
- value: null
71
- });
72
- _classPrivateFieldLooseBase(this, _path)[_path] = path;
73
- _classPrivateFieldLooseBase(this, _routeKey)[_routeKey] = routeKey;
74
- _classPrivateFieldLooseBase(this, _request)[_request] = request;
75
- _classPrivateFieldLooseBase(this, _stage)[_stage] = stage;
76
- _classPrivateFieldLooseBase(this, _stageVariables)[_stageVariables] = stageVariables;
77
- _classPrivateFieldLooseBase(this, _additionalRequestContext)[_additionalRequestContext] = additionalRequestContext || {};
78
-
79
- if (v3Utils) {
80
- this.log = v3Utils.log;
81
- this.progress = v3Utils.progress;
82
- this.writeText = v3Utils.writeText;
83
- this.v3Utils = v3Utils;
84
- }
85
- }
86
-
87
- create() {
88
- const authPrincipalId = _classPrivateFieldLooseBase(this, _request)[_request].auth && _classPrivateFieldLooseBase(this, _request)[_request].auth.credentials && _classPrivateFieldLooseBase(this, _request)[_request].auth.credentials.principalId;
89
-
90
- const authContext = _classPrivateFieldLooseBase(this, _request)[_request].auth && _classPrivateFieldLooseBase(this, _request)[_request].auth.credentials && _classPrivateFieldLooseBase(this, _request)[_request].auth.credentials.context || {};
91
- let authAuthorizer;
92
-
93
- if (_process.env.AUTHORIZER) {
94
- try {
95
- authAuthorizer = parse(_process.env.AUTHORIZER);
96
- } catch (error) {
97
- if (this.log) {
98
- this.log.error('Could not parse env.AUTHORIZER, make sure it is correct JSON');
99
- } else {
100
- console.error('Serverless-offline: Could not parse env.AUTHORIZER, make sure it is correct JSON.');
101
- }
102
- }
103
- }
104
-
105
- let body = _classPrivateFieldLooseBase(this, _request)[_request].payload;
106
-
107
- const {
108
- rawHeaders,
109
- url
110
- } = _classPrivateFieldLooseBase(this, _request)[_request].raw.req; // NOTE FIXME request.raw.req.rawHeaders can only be null for testing (hapi shot inject())
111
-
112
-
113
- const headers = (0, _index.parseHeaders)(rawHeaders || []) || {};
114
-
115
- if (headers['sls-offline-authorizer-override']) {
116
- try {
117
- authAuthorizer = parse(headers['sls-offline-authorizer-override']);
118
- } catch (error) {
119
- if (this.log) {
120
- this.log.error('Could not parse header sls-offline-authorizer-override, make sure it is correct JSON');
121
- } else {
122
- console.error('Serverless-offline: Could not parse header sls-offline-authorizer-override make sure it is correct JSON.');
123
- }
124
- }
125
- }
126
-
127
- if (body) {
128
- if (typeof body !== 'string') {
129
- // this.#request.payload is NOT the same as the rawPayload
130
- body = _classPrivateFieldLooseBase(this, _request)[_request].rawPayload;
131
- }
132
-
133
- if (!headers['Content-Length'] && !headers['content-length'] && !headers['Content-length'] && (typeof body === 'string' || body instanceof _buffer.Buffer || body instanceof ArrayBuffer)) {
134
- headers['Content-Length'] = String(byteLength(body));
135
- } // Set a default Content-Type if not provided.
136
-
137
-
138
- if (!headers['Content-Type'] && !headers['content-type'] && !headers['Content-type']) {
139
- headers['Content-Type'] = 'application/json';
140
- }
141
- } else if (typeof body === 'undefined' || body === '') {
142
- body = null;
143
- } // clone own props
144
-
145
-
146
- const pathParams = { ..._classPrivateFieldLooseBase(this, _request)[_request].params
147
- };
148
- let token = headers.Authorization || headers.authorization;
149
-
150
- if (token && token.split(' ')[0] === 'Bearer') {
151
- ;
152
- [, token] = token.split(' ');
153
- }
154
-
155
- let claims;
156
- let scopes;
157
-
158
- if (token) {
159
- try {
160
- claims = (0, _jsonwebtoken.decode)(token) || undefined;
161
-
162
- if (claims && claims.scope) {
163
- scopes = claims.scope.split(' '); // In AWS HTTP Api the scope property is removed from the decoded JWT
164
- // I'm leaving this property because I'm not sure how all of the authorizers
165
- // for AWS REST Api handle JWT.
166
- // claims = { ...claims }
167
- // delete claims.scope
168
- }
169
- } catch (err) {// Do nothing
170
- }
171
- }
172
-
173
- const {
174
- headers: _headers,
175
- info: {
176
- received,
177
- remoteAddress
178
- },
179
- method,
180
- route
181
- } = _classPrivateFieldLooseBase(this, _request)[_request];
182
-
183
- const httpMethod = method.toUpperCase();
184
- const requestTime = (0, _index.formatToClfTime)(received);
185
- const requestTimeEpoch = received;
186
- const resource = _classPrivateFieldLooseBase(this, _routeKey)[_routeKey] || route.path.replace(`/${_classPrivateFieldLooseBase(this, _stage)[_stage]}`, '');
187
- return {
188
- body,
189
- headers,
190
- httpMethod,
191
- isBase64Encoded: false,
192
- // TODO hook up
193
- multiValueHeaders: (0, _index.parseMultiValueHeaders)( // NOTE FIXME request.raw.req.rawHeaders can only be null for testing (hapi shot inject())
194
- rawHeaders || []),
195
- multiValueQueryStringParameters: (0, _index.parseMultiValueQueryStringParameters)(url),
196
- path: _classPrivateFieldLooseBase(this, _path)[_path],
197
- pathParameters: (0, _index.nullIfEmpty)(pathParams),
198
- queryStringParameters: (0, _index.parseQueryStringParameters)(url),
199
- requestContext: {
200
- accountId: 'offlineContext_accountId',
201
- apiId: 'offlineContext_apiId',
202
- authorizer: authAuthorizer || assign(authContext, {
203
- claims,
204
- scopes,
205
- // 'principalId' should have higher priority
206
- principalId: authPrincipalId || _process.env.PRINCIPAL_ID || 'offlineContext_authorizer_principalId' // See #24
207
-
208
- }),
209
- domainName: 'offlineContext_domainName',
210
- domainPrefix: 'offlineContext_domainPrefix',
211
- extendedRequestId: (0, _index.createUniqueId)(),
212
- httpMethod,
213
- identity: {
214
- accessKey: null,
215
- accountId: _process.env.SLS_ACCOUNT_ID || 'offlineContext_accountId',
216
- apiKey: _process.env.SLS_API_KEY || 'offlineContext_apiKey',
217
- apiKeyId: _process.env.SLS_API_KEY_ID || 'offlineContext_apiKeyId',
218
- caller: _process.env.SLS_CALLER || 'offlineContext_caller',
219
- cognitoAuthenticationProvider: _headers['cognito-authentication-provider'] || _process.env.SLS_COGNITO_AUTHENTICATION_PROVIDER || 'offlineContext_cognitoAuthenticationProvider',
220
- cognitoAuthenticationType: _process.env.SLS_COGNITO_AUTHENTICATION_TYPE || 'offlineContext_cognitoAuthenticationType',
221
- cognitoIdentityId: _headers['cognito-identity-id'] || _process.env.SLS_COGNITO_IDENTITY_ID || 'offlineContext_cognitoIdentityId',
222
- cognitoIdentityPoolId: _process.env.SLS_COGNITO_IDENTITY_POOL_ID || 'offlineContext_cognitoIdentityPoolId',
223
- principalOrgId: null,
224
- sourceIp: remoteAddress,
225
- user: 'offlineContext_user',
226
- userAgent: _headers['user-agent'] || '',
227
- userArn: 'offlineContext_userArn'
228
- },
229
- operationName: _classPrivateFieldLooseBase(this, _additionalRequestContext)[_additionalRequestContext].operationName,
230
- path: _classPrivateFieldLooseBase(this, _path)[_path],
231
- protocol: 'HTTP/1.1',
232
- requestId: (0, _index.createUniqueId)(),
233
- requestTime,
234
- requestTimeEpoch,
235
- resourceId: 'offlineContext_resourceId',
236
- resourcePath: route.path,
237
- stage: _classPrivateFieldLooseBase(this, _stage)[_stage]
238
- },
239
- resource,
240
- stageVariables: _classPrivateFieldLooseBase(this, _stageVariables)[_stageVariables]
241
- };
242
- }
243
-
244
- }
245
-
246
- exports.default = LambdaProxyIntegrationEvent;
@@ -1,225 +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 _process = require("process");
11
-
12
- var _jsonwebtoken = require("jsonwebtoken");
13
-
14
- var _index = require("../../../utils/index.js");
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 {
23
- isArray
24
- } = Array;
25
- const {
26
- parse
27
- } = JSON;
28
- const {
29
- assign,
30
- entries,
31
- fromEntries
32
- } = Object; // https://www.serverless.com/framework/docs/providers/aws/events/http-api/
33
- // https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-develop-integrations-lambda.html
34
-
35
- var _routeKey = /*#__PURE__*/_classPrivateFieldLooseKey("routeKey");
36
-
37
- var _request = /*#__PURE__*/_classPrivateFieldLooseKey("request");
38
-
39
- var _stage = /*#__PURE__*/_classPrivateFieldLooseKey("stage");
40
-
41
- var _stageVariables = /*#__PURE__*/_classPrivateFieldLooseKey("stageVariables");
42
-
43
- var _additionalRequestContext = /*#__PURE__*/_classPrivateFieldLooseKey("additionalRequestContext");
44
-
45
- class LambdaProxyIntegrationEventV2 {
46
- constructor(request, stage, routeKey, stageVariables, additionalRequestContext, v3Utils) {
47
- Object.defineProperty(this, _routeKey, {
48
- writable: true,
49
- value: null
50
- });
51
- Object.defineProperty(this, _request, {
52
- writable: true,
53
- value: null
54
- });
55
- Object.defineProperty(this, _stage, {
56
- writable: true,
57
- value: null
58
- });
59
- Object.defineProperty(this, _stageVariables, {
60
- writable: true,
61
- value: null
62
- });
63
- Object.defineProperty(this, _additionalRequestContext, {
64
- writable: true,
65
- value: null
66
- });
67
- _classPrivateFieldLooseBase(this, _routeKey)[_routeKey] = routeKey;
68
- _classPrivateFieldLooseBase(this, _request)[_request] = request;
69
- _classPrivateFieldLooseBase(this, _stage)[_stage] = stage;
70
- _classPrivateFieldLooseBase(this, _stageVariables)[_stageVariables] = stageVariables;
71
- _classPrivateFieldLooseBase(this, _additionalRequestContext)[_additionalRequestContext] = additionalRequestContext || {};
72
-
73
- if (v3Utils) {
74
- this.log = v3Utils.log;
75
- this.progress = v3Utils.progress;
76
- this.writeText = v3Utils.writeText;
77
- this.v3Utils = v3Utils;
78
- }
79
- }
80
-
81
- create() {
82
- const authContext = _classPrivateFieldLooseBase(this, _request)[_request].auth && _classPrivateFieldLooseBase(this, _request)[_request].auth.credentials && _classPrivateFieldLooseBase(this, _request)[_request].auth.credentials.context || {};
83
- let authAuthorizer;
84
-
85
- if (_process.env.AUTHORIZER) {
86
- try {
87
- authAuthorizer = parse(_process.env.AUTHORIZER);
88
- } catch (error) {
89
- if (this.log) {
90
- this.log.error('Could not parse process.env.AUTHORIZER, make sure it is correct JSON');
91
- } else {
92
- console.error('Serverless-offline: Could not parse process.env.AUTHORIZER, make sure it is correct JSON.');
93
- }
94
- }
95
- }
96
-
97
- let body = _classPrivateFieldLooseBase(this, _request)[_request].payload;
98
-
99
- const {
100
- rawHeaders
101
- } = _classPrivateFieldLooseBase(this, _request)[_request].raw.req; // NOTE FIXME request.raw.req.rawHeaders can only be null for testing (hapi shot inject())
102
-
103
-
104
- const headers = (0, _index.lowerCaseKeys)((0, _index.parseHeaders)(rawHeaders || [])) || {};
105
-
106
- if (headers['sls-offline-authorizer-override']) {
107
- try {
108
- authAuthorizer = parse(headers['sls-offline-authorizer-override']);
109
- } catch (error) {
110
- if (this.log) {
111
- this.log.error('Could not parse header sls-offline-authorizer-override, make sure it is correct JSON');
112
- } else {
113
- console.error('Serverless-offline: Could not parse header sls-offline-authorizer-override make sure it is correct JSON.');
114
- }
115
- }
116
- }
117
-
118
- if (body) {
119
- if (typeof body !== 'string') {
120
- // this.#request.payload is NOT the same as the rawPayload
121
- body = _classPrivateFieldLooseBase(this, _request)[_request].rawPayload;
122
- }
123
-
124
- if (!headers['content-length'] && (typeof body === 'string' || body instanceof _buffer.Buffer || body instanceof ArrayBuffer)) {
125
- headers['content-length'] = String(_buffer.Buffer.byteLength(body));
126
- } // Set a default Content-Type if not provided.
127
-
128
-
129
- if (!headers['content-type']) {
130
- headers['content-type'] = 'application/json';
131
- }
132
- } else if (typeof body === 'undefined' || body === '') {
133
- body = null;
134
- } // clone own props
135
-
136
-
137
- const pathParams = { ..._classPrivateFieldLooseBase(this, _request)[_request].params
138
- };
139
- let token = headers.Authorization || headers.authorization;
140
-
141
- if (token && token.split(' ')[0] === 'Bearer') {
142
- ;
143
- [, token] = token.split(' ');
144
- }
145
-
146
- let claims;
147
- let scopes;
148
-
149
- if (token) {
150
- try {
151
- claims = (0, _jsonwebtoken.decode)(token) || undefined;
152
-
153
- if (claims && claims.scope) {
154
- scopes = claims.scope.split(' '); // In AWS HTTP Api the scope property is removed from the decoded JWT
155
- // I'm leaving this property because I'm not sure how all of the authorizers
156
- // for AWS REST Api handle JWT.
157
- // claims = { ...claims }
158
- // delete claims.scope
159
- }
160
- } catch (err) {// Do nothing
161
- }
162
- }
163
-
164
- const {
165
- headers: _headers,
166
- info: {
167
- received,
168
- remoteAddress
169
- },
170
- method
171
- } = _classPrivateFieldLooseBase(this, _request)[_request];
172
-
173
- const httpMethod = method.toUpperCase();
174
- const requestTime = (0, _index.formatToClfTime)(received);
175
- const requestTimeEpoch = received;
176
- const cookies = entries(_classPrivateFieldLooseBase(this, _request)[_request].state).flatMap(([key, value]) => {
177
- if (isArray(value)) {
178
- return value.map(v => `${key}=${v}`);
179
- }
180
-
181
- return `${key}=${value}`;
182
- });
183
- return {
184
- version: '2.0',
185
- routeKey: _classPrivateFieldLooseBase(this, _routeKey)[_routeKey],
186
- rawPath: _classPrivateFieldLooseBase(this, _request)[_request].url.pathname,
187
- rawQueryString: _classPrivateFieldLooseBase(this, _request)[_request].url.searchParams.toString(),
188
- cookies,
189
- headers,
190
- queryStringParameters: _classPrivateFieldLooseBase(this, _request)[_request].url.search ? fromEntries(Array.from(_classPrivateFieldLooseBase(this, _request)[_request].url.searchParams)) : null,
191
- requestContext: {
192
- accountId: 'offlineContext_accountId',
193
- apiId: 'offlineContext_apiId',
194
- authorizer: authAuthorizer || assign(authContext, {
195
- jwt: {
196
- claims,
197
- scopes
198
- }
199
- }),
200
- domainName: 'offlineContext_domainName',
201
- domainPrefix: 'offlineContext_domainPrefix',
202
- http: {
203
- method: httpMethod,
204
- path: _classPrivateFieldLooseBase(this, _request)[_request].url.pathname,
205
- protocol: 'HTTP/1.1',
206
- sourceIp: remoteAddress,
207
- userAgent: _headers['user-agent'] || ''
208
- },
209
- operationName: _classPrivateFieldLooseBase(this, _additionalRequestContext)[_additionalRequestContext].operationName,
210
- requestId: 'offlineContext_resourceId',
211
- routeKey: _classPrivateFieldLooseBase(this, _routeKey)[_routeKey],
212
- stage: _classPrivateFieldLooseBase(this, _stage)[_stage],
213
- time: requestTime,
214
- timeEpoch: requestTimeEpoch
215
- },
216
- body,
217
- pathParameters: (0, _index.nullIfEmpty)(pathParams),
218
- isBase64Encoded: false,
219
- stageVariables: _classPrivateFieldLooseBase(this, _stageVariables)[_stageVariables]
220
- };
221
- }
222
-
223
- }
224
-
225
- exports.default = LambdaProxyIntegrationEventV2;
@@ -1,170 +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 _process = require("process");
11
-
12
- var _jsStringEscape = _interopRequireDefault(require("js-string-escape"));
13
-
14
- var _jsonwebtoken = require("jsonwebtoken");
15
-
16
- var _index = require("../../../utils/index.js");
17
-
18
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
19
-
20
- function _classPrivateFieldLooseBase(receiver, privateKey) { if (!Object.prototype.hasOwnProperty.call(receiver, privateKey)) { throw new TypeError("attempted to use private field on non-instance"); } return receiver; }
21
-
22
- var id = 0;
23
-
24
- function _classPrivateFieldLooseKey(name) { return "__private_" + id++ + "_" + name; }
25
-
26
- const {
27
- parse,
28
- stringify
29
- } = JSON;
30
- const {
31
- assign,
32
- entries,
33
- fromEntries
34
- } = Object;
35
-
36
- function escapeJavaScript(x) {
37
- if (typeof x === 'string') {
38
- return (0, _jsStringEscape.default)(x).replace(/\\n/g, '\n'); // See #26,
39
- }
40
-
41
- if ((0, _index.isPlainObject)(x)) {
42
- const result = fromEntries(entries(x).map(([key, value]) => [key, (0, _jsStringEscape.default)(value)]));
43
- return stringify(result); // Is this really how APIG does it?
44
- }
45
-
46
- if (typeof x.toString === 'function') {
47
- return escapeJavaScript(x.toString());
48
- }
49
-
50
- return x;
51
- }
52
- /*
53
- Returns a context object that mocks APIG mapping template reference
54
- http://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-mapping-template-reference.html
55
- */
56
-
57
-
58
- var _path = /*#__PURE__*/_classPrivateFieldLooseKey("path");
59
-
60
- var _payload = /*#__PURE__*/_classPrivateFieldLooseKey("payload");
61
-
62
- var _request = /*#__PURE__*/_classPrivateFieldLooseKey("request");
63
-
64
- var _stage = /*#__PURE__*/_classPrivateFieldLooseKey("stage");
65
-
66
- class VelocityContext {
67
- constructor(request, stage, payload, path) {
68
- Object.defineProperty(this, _path, {
69
- writable: true,
70
- value: null
71
- });
72
- Object.defineProperty(this, _payload, {
73
- writable: true,
74
- value: null
75
- });
76
- Object.defineProperty(this, _request, {
77
- writable: true,
78
- value: null
79
- });
80
- Object.defineProperty(this, _stage, {
81
- writable: true,
82
- value: null
83
- });
84
- _classPrivateFieldLooseBase(this, _path)[_path] = path;
85
- _classPrivateFieldLooseBase(this, _payload)[_payload] = payload;
86
- _classPrivateFieldLooseBase(this, _request)[_request] = request;
87
- _classPrivateFieldLooseBase(this, _stage)[_stage] = stage;
88
- }
89
-
90
- getContext() {
91
- const path = x => (0, _index.jsonPath)(_classPrivateFieldLooseBase(this, _payload)[_payload], x);
92
-
93
- const authPrincipalId = _classPrivateFieldLooseBase(this, _request)[_request].auth && _classPrivateFieldLooseBase(this, _request)[_request].auth.credentials && _classPrivateFieldLooseBase(this, _request)[_request].auth.credentials.principalId;
94
-
95
- 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())
96
-
97
-
98
- const headers = (0, _index.parseHeaders)(_classPrivateFieldLooseBase(this, _request)[_request].raw.req.rawHeaders || []);
99
- let token = headers && (headers.Authorization || headers.authorization);
100
-
101
- if (token && token.split(' ')[0] === 'Bearer') {
102
- ;
103
- [, token] = token.split(' ');
104
- }
105
-
106
- if (!authorizer) authorizer = {};
107
- authorizer.principalId = authPrincipalId || _process.env.PRINCIPAL_ID || 'offlineContext_authorizer_principalId'; // See #24
108
-
109
- if (token) {
110
- try {
111
- const claims = (0, _jsonwebtoken.decode)(token) || undefined;
112
-
113
- if (claims) {
114
- assign(authorizer, {
115
- claims
116
- });
117
- }
118
- } catch (err) {// Nothing
119
- }
120
- }
121
-
122
- return {
123
- context: {
124
- apiId: 'offlineContext_apiId',
125
- authorizer,
126
- httpMethod: _classPrivateFieldLooseBase(this, _request)[_request].method.toUpperCase(),
127
- identity: {
128
- accountId: 'offlineContext_accountId',
129
- apiKey: 'offlineContext_apiKey',
130
- apiKeyId: 'offlineContext_apiKeyId',
131
- caller: 'offlineContext_caller',
132
- cognitoAuthenticationProvider: 'offlineContext_cognitoAuthenticationProvider',
133
- cognitoAuthenticationType: 'offlineContext_cognitoAuthenticationType',
134
- sourceIp: _classPrivateFieldLooseBase(this, _request)[_request].info.remoteAddress,
135
- user: 'offlineContext_user',
136
- userAgent: _classPrivateFieldLooseBase(this, _request)[_request].headers['user-agent'] || '',
137
- userArn: 'offlineContext_userArn'
138
- },
139
- requestId: (0, _index.createUniqueId)(),
140
- resourceId: 'offlineContext_resourceId',
141
- resourcePath: _classPrivateFieldLooseBase(this, _path)[_path],
142
- stage: _classPrivateFieldLooseBase(this, _stage)[_stage]
143
- },
144
- input: {
145
- body: _classPrivateFieldLooseBase(this, _payload)[_payload],
146
- // Not a string yet, todo
147
- json: x => stringify(path(x)),
148
- params: x => typeof x === 'string' ? _classPrivateFieldLooseBase(this, _request)[_request].params[x] || _classPrivateFieldLooseBase(this, _request)[_request].query[x] || headers[x] : {
149
- header: headers,
150
- path: { ..._classPrivateFieldLooseBase(this, _request)[_request].params
151
- },
152
- querystring: { ..._classPrivateFieldLooseBase(this, _request)[_request].query
153
- }
154
- },
155
- path
156
- },
157
- util: {
158
- base64Decode: x => _buffer.Buffer.from(x.toString(), 'base64').toString('binary'),
159
- base64Encode: x => _buffer.Buffer.from(x.toString(), 'binary').toString('base64'),
160
- escapeJavaScript,
161
- parseJson: parse,
162
- urlDecode: x => decodeURIComponent(x.replace(/\+/g, ' ')),
163
- urlEncode: encodeURI
164
- }
165
- };
166
- }
167
-
168
- }
169
-
170
- 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 }; }