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,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 }; }