@trayio/cdk-runtime 2.16.0 → 2.18.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/connector/operation/HttpOperationExecution.d.ts +1 -0
- package/dist/connector/operation/HttpOperationExecution.d.ts.map +1 -1
- package/dist/connector/operation/HttpOperationExecution.js +7 -0
- package/dist/connector/operation/OperationExecutionGateway.unit.test.d.ts.map +1 -1
- package/dist/connector/operation/OperationExecutionGateway.unit.test.js +37 -0
- package/package.json +5 -5
|
@@ -12,6 +12,7 @@ export declare class HttpOperationExecution<AUTH extends OperationHandlerAuth<un
|
|
|
12
12
|
execute(ctx: OperationHandlerContext<AUTH>, input: IN): Promise<OperationHandlerResult<OUT>>;
|
|
13
13
|
private operationRequestToHttpRequest;
|
|
14
14
|
private serializeAsJson;
|
|
15
|
+
private serializeAsFormUrlEncoded;
|
|
15
16
|
private serializeAsText;
|
|
16
17
|
private serializeAsMultipart;
|
|
17
18
|
private serializeAsFile;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HttpOperationExecution.d.ts","sourceRoot":"","sources":["../../../src/connector/operation/HttpOperationExecution.ts"],"names":[],"mappings":"AASA,OAAO,EACN,oBAAoB,EACpB,uBAAuB,EACvB,sBAAsB,EAGtB,MAAM,sDAAsD,CAAC;AAC9D,OAAO,EAGN,oBAAoB,EAKpB,MAAM,0DAA0D,CAAC;AAClE,OAAO,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAW7D,OAAO,EAAQ,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAE9D,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAO1D,qBAAa,sBAAsB,CAClC,IAAI,SAAS,oBAAoB,CAAC,OAAO,EAAE,OAAO,CAAC,EACnD,EAAE,EACF,GAAG,CACF,YAAW,kBAAkB,CAAC,IAAI,EAAE,EAAE,EAAE,GAAG,CAAC;IAE7C,OAAO,CAAC,iBAAiB,CAAoB;IAC7C,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,OAAO,CAAsC;IACrD,OAAO,CAAC,WAAW,CAAc;gBAGhC,UAAU,EAAE,UAAU,EACtB,WAAW,EAAE,WAAW,EACxB,OAAO,EAAE,oBAAoB,CAAC,IAAI,EAAE,EAAE,EAAE,GAAG,CAAC;IAQvC,OAAO,CACZ,GAAG,EAAE,uBAAuB,CAAC,IAAI,CAAC,EAClC,KAAK,EAAE,EAAE,GACP,OAAO,CAAC,sBAAsB,CAAC,GAAG,CAAC,CAAC;IAiDvC,OAAO,CAAC,6BAA6B;
|
|
1
|
+
{"version":3,"file":"HttpOperationExecution.d.ts","sourceRoot":"","sources":["../../../src/connector/operation/HttpOperationExecution.ts"],"names":[],"mappings":"AASA,OAAO,EACN,oBAAoB,EACpB,uBAAuB,EACvB,sBAAsB,EAGtB,MAAM,sDAAsD,CAAC;AAC9D,OAAO,EAGN,oBAAoB,EAKpB,MAAM,0DAA0D,CAAC;AAClE,OAAO,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAW7D,OAAO,EAAQ,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAE9D,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAO1D,qBAAa,sBAAsB,CAClC,IAAI,SAAS,oBAAoB,CAAC,OAAO,EAAE,OAAO,CAAC,EACnD,EAAE,EACF,GAAG,CACF,YAAW,kBAAkB,CAAC,IAAI,EAAE,EAAE,EAAE,GAAG,CAAC;IAE7C,OAAO,CAAC,iBAAiB,CAAoB;IAC7C,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,OAAO,CAAsC;IACrD,OAAO,CAAC,WAAW,CAAc;gBAGhC,UAAU,EAAE,UAAU,EACtB,WAAW,EAAE,WAAW,EACxB,OAAO,EAAE,oBAAoB,CAAC,IAAI,EAAE,EAAE,EAAE,GAAG,CAAC;IAQvC,OAAO,CACZ,GAAG,EAAE,uBAAuB,CAAC,IAAI,CAAC,EAClC,KAAK,EAAE,EAAE,GACP,OAAO,CAAC,sBAAsB,CAAC,GAAG,CAAC,CAAC;IAiDvC,OAAO,CAAC,6BAA6B;IAiCrC,OAAO,CAAC,eAAe;IAOvB,OAAO,CAAC,yBAAyB;IAajC,OAAO,CAAC,eAAe;IAOvB,OAAO,CAAC,oBAAoB;IAyD5B,OAAO,CAAC,eAAe;IA0BvB,OAAO,CAAC,kBAAkB;IAI1B,OAAO,CAAC,oBAAoB;IAc5B,OAAO,CAAC,aAAa;IAiCrB,OAAO,CAAC,eAAe;IAmBvB,OAAO,CAAC,cAAc;IAMtB,OAAO,CAAC,eAAe;IA2CvB,OAAO,CAAC,eAAe;IAiBvB,OAAO,CAAC,qBAAqB;CAwC7B"}
|
|
@@ -39,6 +39,7 @@ const O = __importStar(require("fp-ts/Option"));
|
|
|
39
39
|
const function_1 = require("fp-ts/function");
|
|
40
40
|
const Array_1 = require("fp-ts/Array");
|
|
41
41
|
const uuid_1 = require("uuid");
|
|
42
|
+
const querystring = __importStar(require("querystring"));
|
|
42
43
|
const OperationHandler_1 = require("@trayio/cdk-dsl/connector/operation/OperationHandler");
|
|
43
44
|
const HttpOperationHandler_1 = require("@trayio/cdk-dsl/connector/operation/HttpOperationHandler");
|
|
44
45
|
const Http_1 = require("@trayio/commons/http/Http");
|
|
@@ -76,6 +77,8 @@ class HttpOperationExecution {
|
|
|
76
77
|
switch (contentType) {
|
|
77
78
|
case Http_1.HttpContentType.Json:
|
|
78
79
|
return this.serializeAsJson(operationRequest.body);
|
|
80
|
+
case Http_1.HttpContentType.FormUrlEncoded:
|
|
81
|
+
return this.serializeAsFormUrlEncoded(operationRequest.body);
|
|
79
82
|
case Http_1.HttpContentType.OctetStream:
|
|
80
83
|
return this.serializeAsFile(operationRequest);
|
|
81
84
|
case Http_1.HttpContentType.MultipartRequestBody:
|
|
@@ -91,6 +94,10 @@ class HttpOperationExecution {
|
|
|
91
94
|
const serializedBody = this.jsonSerialization.serialize(body);
|
|
92
95
|
return TE.right(BufferExtensions_1.BufferExtensions.arrayBufferToReadable(serializedBody));
|
|
93
96
|
}
|
|
97
|
+
serializeAsFormUrlEncoded(body) {
|
|
98
|
+
const serializedBody = querystring.stringify(body);
|
|
99
|
+
return TE.right(BufferExtensions_1.BufferExtensions.arrayBufferToReadable(new TextEncoder().encode(serializedBody)));
|
|
100
|
+
}
|
|
94
101
|
serializeAsText(body) {
|
|
95
102
|
const serializedBody = new TextEncoder().encode(body);
|
|
96
103
|
return TE.right(BufferExtensions_1.BufferExtensions.arrayBufferToReadable(serializedBody));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OperationExecutionGateway.unit.test.d.ts","sourceRoot":"","sources":["../../../src/connector/operation/OperationExecutionGateway.unit.test.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"OperationExecutionGateway.unit.test.d.ts","sourceRoot":"","sources":["../../../src/connector/operation/OperationExecutionGateway.unit.test.ts"],"names":[],"mappings":"AAwBA,OAAO,8BAA8B,CAAC"}
|
|
@@ -26,6 +26,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
26
26
|
const stream_1 = require("stream");
|
|
27
27
|
const T = __importStar(require("fp-ts/Task"));
|
|
28
28
|
const TE = __importStar(require("fp-ts/TaskEither"));
|
|
29
|
+
const querystring = __importStar(require("querystring"));
|
|
29
30
|
const function_1 = require("fp-ts/function");
|
|
30
31
|
const OperationHandlerSetup_1 = require("@trayio/cdk-dsl/connector/operation/OperationHandlerSetup");
|
|
31
32
|
const OperationHandlerTest_1 = require("@trayio/cdk-dsl/connector/operation/OperationHandlerTest");
|
|
@@ -54,6 +55,18 @@ class TestControllerHttp {
|
|
|
54
55
|
});
|
|
55
56
|
},
|
|
56
57
|
},
|
|
58
|
+
{
|
|
59
|
+
path: `/posts/create`,
|
|
60
|
+
method: Http_1.HttpMethod.Post,
|
|
61
|
+
execute: (request) => {
|
|
62
|
+
const { body } = request;
|
|
63
|
+
return T.of({
|
|
64
|
+
body: body,
|
|
65
|
+
headers: {},
|
|
66
|
+
statusCode: 200,
|
|
67
|
+
});
|
|
68
|
+
},
|
|
69
|
+
},
|
|
57
70
|
{
|
|
58
71
|
path: `/image-upload`,
|
|
59
72
|
method: Http_1.HttpMethod.Post,
|
|
@@ -172,6 +185,30 @@ describe('OperationExecutionGateway', () => {
|
|
|
172
185
|
.finallyDoNothing())
|
|
173
186
|
.nothingAfterAll());
|
|
174
187
|
});
|
|
188
|
+
describe('post a product as form url encoded', () => {
|
|
189
|
+
const postProductOperation = OperationHandlerSetup_1.OperationHandlerSetup.configureHandler((handler) => handler.usingHttp((http) => http
|
|
190
|
+
.post('http://localhost:3000/posts/create')
|
|
191
|
+
.handleRequest((ctx, input, request) => request.withBodyAsFormUrlEncoded({
|
|
192
|
+
id: input.id,
|
|
193
|
+
title: input.title,
|
|
194
|
+
}))
|
|
195
|
+
.handleResponse((ctx, input, response) => response.parseWithBodyAsText((text) => OperationHandler_1.OperationHandlerResult.success(text)))));
|
|
196
|
+
OperationHandlerTest_1.OperationHandlerTestSetup.configureHandlerTest(postProductOperation, (handlerTest) => handlerTest
|
|
197
|
+
.usingHandlerContext('test')
|
|
198
|
+
.nothingBeforeAll()
|
|
199
|
+
.testCase('should post a product', (testCase) => testCase
|
|
200
|
+
.usingHandlerContext('test')
|
|
201
|
+
.givenNothing()
|
|
202
|
+
.when(() => ({ id: 2, title: 'test' }))
|
|
203
|
+
.then(({ output }) => {
|
|
204
|
+
const outputValue = OperationHandler_1.OperationHandlerResult.getSuccessfulValueOrFail(output);
|
|
205
|
+
const parsedOutput = querystring.parse(outputValue);
|
|
206
|
+
expect(parsedOutput.id).toEqual('2');
|
|
207
|
+
expect(parsedOutput.title).toEqual('test');
|
|
208
|
+
})
|
|
209
|
+
.finallyDoNothing())
|
|
210
|
+
.nothingAfterAll());
|
|
211
|
+
});
|
|
175
212
|
describe('post multipart (with file)', () => {
|
|
176
213
|
const multipartOperation = OperationHandlerSetup_1.OperationHandlerSetup.configureHandler((handler) => handler.usingHttp((http) => http
|
|
177
214
|
.post('http://localhost:3000/multipart-upload')
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@trayio/cdk-runtime",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.18.0",
|
|
4
4
|
"description": "A Runtime that executes connector operations defined using the CDK DSL",
|
|
5
5
|
"exports": {
|
|
6
6
|
"./*": "./dist/*.js"
|
|
@@ -14,10 +14,10 @@
|
|
|
14
14
|
"node": ">=18.x"
|
|
15
15
|
},
|
|
16
16
|
"dependencies": {
|
|
17
|
-
"@trayio/axios": "2.
|
|
18
|
-
"@trayio/cdk-dsl": "2.
|
|
19
|
-
"@trayio/express": "2.
|
|
20
|
-
"@trayio/winston": "2.
|
|
17
|
+
"@trayio/axios": "2.18.0",
|
|
18
|
+
"@trayio/cdk-dsl": "2.18.0",
|
|
19
|
+
"@trayio/express": "2.18.0",
|
|
20
|
+
"@trayio/winston": "2.18.0",
|
|
21
21
|
"mime": "3.0.0",
|
|
22
22
|
"uuid": "9.0.0"
|
|
23
23
|
},
|