@aws-sdk/middleware-sdk-transcribe-streaming 3.33.0 → 3.37.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/CHANGELOG.md +38 -0
- package/dist-cjs/configuration.js +21 -0
- package/dist-cjs/eventstream-handler.js +6 -0
- package/dist-cjs/index.js +10 -0
- package/dist-cjs/middleware-endpoint.js +36 -0
- package/dist-cjs/middleware-session-id.js +28 -0
- package/dist-cjs/plugin.js +12 -0
- package/dist-cjs/signer.js +28 -0
- package/dist-cjs/websocket-handler.js +109 -0
- package/dist-es/configuration.js +22 -0
- package/dist-es/eventstream-handler.js +3 -0
- package/{dist/types/index.d.ts → dist-es/index.js} +0 -0
- package/dist-es/middleware-endpoint.js +48 -0
- package/dist-es/middleware-session-id.js +46 -0
- package/dist-es/plugin.js +8 -0
- package/dist-es/signer.js +32 -0
- package/dist-es/websocket-handler.js +172 -0
- package/{dist/types → dist-types}/configuration.d.ts +0 -0
- package/{dist/types → dist-types}/eventstream-handler.d.ts +0 -0
- package/{src/index.ts → dist-types/index.d.ts} +0 -0
- package/{dist/types → dist-types}/middleware-endpoint.d.ts +0 -0
- package/{dist/types → dist-types}/middleware-session-id.d.ts +0 -0
- package/{dist/types → dist-types}/plugin.d.ts +0 -0
- package/{dist/types → dist-types}/signer.d.ts +0 -0
- package/{dist/types → dist-types}/ts3.4/configuration.d.ts +2 -6
- package/{dist/types → dist-types}/ts3.4/eventstream-handler.d.ts +0 -0
- package/{dist/types → dist-types}/ts3.4/index.d.ts +0 -0
- package/{dist/types → dist-types}/ts3.4/middleware-endpoint.d.ts +1 -4
- package/dist-types/ts3.4/middleware-session-id.d.ts +6 -0
- package/{dist/types → dist-types}/ts3.4/plugin.d.ts +0 -0
- package/{dist/types → dist-types}/ts3.4/signer.d.ts +0 -0
- package/{dist/types → dist-types}/ts3.4/websocket-handler.d.ts +2 -10
- package/{dist/types → dist-types}/websocket-handler.d.ts +0 -0
- package/package.json +18 -14
- package/dist/cjs/configuration.js +0 -22
- package/dist/cjs/eventstream-handler.js +0 -7
- package/dist/cjs/index.js +0 -11
- package/dist/cjs/middleware-endpoint.js +0 -53
- package/dist/cjs/middleware-session-id.js +0 -36
- package/dist/cjs/plugin.js +0 -13
- package/dist/cjs/signer.js +0 -35
- package/dist/cjs/websocket-handler.js +0 -136
- package/dist/es/configuration.js +0 -16
- package/dist/es/eventstream-handler.js +0 -4
- package/dist/es/index.js +0 -8
- package/dist/es/middleware-endpoint.js +0 -49
- package/dist/es/middleware-session-id.js +0 -31
- package/dist/es/plugin.js +0 -9
- package/dist/es/signer.js +0 -31
- package/dist/es/websocket-handler.js +0 -148
- package/dist/types/ts3.4/middleware-session-id.d.ts +0 -12
- package/src/configuration.ts +0 -40
- package/src/eventstream-handler.ts +0 -9
- package/src/middleware-endpoint.ts +0 -63
- package/src/middleware-session-id.ts +0 -50
- package/src/plugin.ts +0 -12
- package/src/signer.ts +0 -44
- package/src/websocket-handler.ts +0 -148
- package/tsconfig.cjs.json +0 -11
- package/tsconfig.es.json +0 -16
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,44 @@
|
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
|
4
4
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
|
5
5
|
|
|
6
|
+
# [3.37.0](https://github.com/aws/aws-sdk-js-v3/compare/v3.36.1...v3.37.0) (2021-10-15)
|
|
7
|
+
|
|
8
|
+
**Note:** Version bump only for package @aws-sdk/middleware-sdk-transcribe-streaming
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
# [3.36.0](https://github.com/aws/aws-sdk-js-v3/compare/v3.35.0...v3.36.0) (2021-10-08)
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
### Features
|
|
18
|
+
|
|
19
|
+
* publish files in dist-* only ([#2873](https://github.com/aws/aws-sdk-js-v3/issues/2873)) ([53b4243](https://github.com/aws/aws-sdk-js-v3/commit/53b4243b066f25ff2412d5f0dea1036054b2df32))
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
# [3.35.0](https://github.com/aws/aws-sdk-js-v3/compare/v3.34.0...v3.35.0) (2021-10-04)
|
|
26
|
+
|
|
27
|
+
**Note:** Version bump only for package @aws-sdk/middleware-sdk-transcribe-streaming
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
# [3.34.0](https://github.com/aws/aws-sdk-js-v3/compare/v3.33.0...v3.34.0) (2021-09-24)
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
### Features
|
|
37
|
+
|
|
38
|
+
* **non-clients:** remove comments from transpiled JS files ([#2813](https://github.com/aws/aws-sdk-js-v3/issues/2813)) ([e6fc7f3](https://github.com/aws/aws-sdk-js-v3/commit/e6fc7f3e0fa74785590ac19e7ed143c916bb9b6e))
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
|
|
6
44
|
# [3.33.0](https://github.com/aws/aws-sdk-js-v3/compare/v3.32.0...v3.33.0) (2021-09-21)
|
|
7
45
|
|
|
8
46
|
**Note:** Version bump only for package @aws-sdk/middleware-sdk-transcribe-streaming
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.resolveWebSocketConfig = void 0;
|
|
4
|
+
const signer_1 = require("./signer");
|
|
5
|
+
const resolveWebSocketConfig = (input) => {
|
|
6
|
+
var _a;
|
|
7
|
+
return ((_a = input.requestHandler.metadata) === null || _a === void 0 ? void 0 : _a.handlerProtocol) !== "websocket"
|
|
8
|
+
? input
|
|
9
|
+
: {
|
|
10
|
+
...input,
|
|
11
|
+
signer: async () => {
|
|
12
|
+
const signerObj = await input.signer();
|
|
13
|
+
if (validateSigner(signerObj)) {
|
|
14
|
+
return new signer_1.SignatureV4({ signer: signerObj });
|
|
15
|
+
}
|
|
16
|
+
throw new Error("Expected SignatureV4 signer, please check the client constructor.");
|
|
17
|
+
},
|
|
18
|
+
};
|
|
19
|
+
};
|
|
20
|
+
exports.resolveWebSocketConfig = resolveWebSocketConfig;
|
|
21
|
+
const validateSigner = (signer) => !!signer;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const tslib_1 = require("tslib");
|
|
4
|
+
tslib_1.__exportStar(require("./websocket-handler"), exports);
|
|
5
|
+
tslib_1.__exportStar(require("./eventstream-handler"), exports);
|
|
6
|
+
tslib_1.__exportStar(require("./signer"), exports);
|
|
7
|
+
tslib_1.__exportStar(require("./configuration"), exports);
|
|
8
|
+
tslib_1.__exportStar(require("./middleware-endpoint"), exports);
|
|
9
|
+
tslib_1.__exportStar(require("./middleware-session-id"), exports);
|
|
10
|
+
tslib_1.__exportStar(require("./plugin"), exports);
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.websocketURLMiddlewareOptions = exports.websocketURLMiddleware = void 0;
|
|
4
|
+
const protocol_http_1 = require("@aws-sdk/protocol-http");
|
|
5
|
+
const websocketURLMiddleware = (options) => (next) => (args) => {
|
|
6
|
+
var _a;
|
|
7
|
+
const { request } = args;
|
|
8
|
+
if (protocol_http_1.HttpRequest.isInstance(request) && ((_a = options.requestHandler.metadata) === null || _a === void 0 ? void 0 : _a.handlerProtocol) === "websocket") {
|
|
9
|
+
request.protocol = "wss:";
|
|
10
|
+
request.hostname = `${request.hostname}:8443`;
|
|
11
|
+
request.path = `${request.path}-websocket`;
|
|
12
|
+
request.method = "GET";
|
|
13
|
+
const { headers } = request;
|
|
14
|
+
delete headers["Content-Type"];
|
|
15
|
+
delete headers["x-amz-content-sha256"];
|
|
16
|
+
for (const name of Object.keys(headers)) {
|
|
17
|
+
if (name.indexOf("x-amzn-transcribe-") === 0) {
|
|
18
|
+
const chunkedName = name.replace("x-amzn-transcribe-", "");
|
|
19
|
+
request.query[chunkedName] = headers[name];
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
if (headers["x-amz-user-agent"]) {
|
|
23
|
+
request.query["user-agent"] = headers["x-amz-user-agent"];
|
|
24
|
+
}
|
|
25
|
+
request.headers = { host: request.hostname };
|
|
26
|
+
}
|
|
27
|
+
return next(args);
|
|
28
|
+
};
|
|
29
|
+
exports.websocketURLMiddleware = websocketURLMiddleware;
|
|
30
|
+
exports.websocketURLMiddlewareOptions = {
|
|
31
|
+
name: "websocketURLMiddleware",
|
|
32
|
+
tags: ["WEBSOCKET", "EVENT_STREAM"],
|
|
33
|
+
relation: "after",
|
|
34
|
+
toMiddleware: "eventStreamHeaderMiddleware",
|
|
35
|
+
override: true,
|
|
36
|
+
};
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.injectSessionIdMiddlewareOptions = exports.injectSessionIdMiddleware = void 0;
|
|
4
|
+
const uuid_1 = require("uuid");
|
|
5
|
+
const injectSessionIdMiddleware = (config) => (next) => async (args) => {
|
|
6
|
+
if (args.input.SessionId === undefined && isWebSocket(config)) {
|
|
7
|
+
args.input.SessionId = uuid_1.v4();
|
|
8
|
+
}
|
|
9
|
+
const requestParams = {
|
|
10
|
+
...args.input,
|
|
11
|
+
};
|
|
12
|
+
const response = await next(args);
|
|
13
|
+
const output = response.output;
|
|
14
|
+
for (const key of Object.keys(output)) {
|
|
15
|
+
if (output[key] === undefined && requestParams[key]) {
|
|
16
|
+
output[key] = requestParams[key];
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
return response;
|
|
20
|
+
};
|
|
21
|
+
exports.injectSessionIdMiddleware = injectSessionIdMiddleware;
|
|
22
|
+
const isWebSocket = (config) => { var _a; return ((_a = config.requestHandler.metadata) === null || _a === void 0 ? void 0 : _a.handlerProtocol) === "websocket"; };
|
|
23
|
+
exports.injectSessionIdMiddlewareOptions = {
|
|
24
|
+
step: "initialize",
|
|
25
|
+
name: "injectSessionIdMiddleware",
|
|
26
|
+
tags: ["WEBSOCKET", "EVENT_STREAM"],
|
|
27
|
+
override: true,
|
|
28
|
+
};
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getWebSocketPlugin = void 0;
|
|
4
|
+
const middleware_endpoint_1 = require("./middleware-endpoint");
|
|
5
|
+
const middleware_session_id_1 = require("./middleware-session-id");
|
|
6
|
+
const getWebSocketPlugin = (config) => ({
|
|
7
|
+
applyToStack: (clientStack) => {
|
|
8
|
+
clientStack.addRelativeTo(middleware_endpoint_1.websocketURLMiddleware(config), middleware_endpoint_1.websocketURLMiddlewareOptions);
|
|
9
|
+
clientStack.add(middleware_session_id_1.injectSessionIdMiddleware(config), middleware_session_id_1.injectSessionIdMiddlewareOptions);
|
|
10
|
+
},
|
|
11
|
+
});
|
|
12
|
+
exports.getWebSocketPlugin = getWebSocketPlugin;
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SignatureV4 = void 0;
|
|
4
|
+
const protocol_http_1 = require("@aws-sdk/protocol-http");
|
|
5
|
+
class SignatureV4 {
|
|
6
|
+
constructor(options) {
|
|
7
|
+
this.signer = options.signer;
|
|
8
|
+
}
|
|
9
|
+
presign(originalRequest, options = {}) {
|
|
10
|
+
return this.signer.presign(originalRequest, options);
|
|
11
|
+
}
|
|
12
|
+
async sign(toSign, options) {
|
|
13
|
+
if (protocol_http_1.HttpRequest.isInstance(toSign)) {
|
|
14
|
+
const signedRequest = await this.signer.presign({ ...toSign, body: "" }, {
|
|
15
|
+
expiresIn: 5 * 60,
|
|
16
|
+
unsignableHeaders: new Set(Object.keys(toSign.headers).filter((header) => header !== "host")),
|
|
17
|
+
});
|
|
18
|
+
return {
|
|
19
|
+
...signedRequest,
|
|
20
|
+
body: toSign.body,
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
else {
|
|
24
|
+
return this.signer.sign(toSign, options);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
exports.SignatureV4 = SignatureV4;
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.WebSocketHandler = void 0;
|
|
4
|
+
const eventstream_serde_browser_1 = require("@aws-sdk/eventstream-serde-browser");
|
|
5
|
+
const protocol_http_1 = require("@aws-sdk/protocol-http");
|
|
6
|
+
const util_format_url_1 = require("@aws-sdk/util-format-url");
|
|
7
|
+
class WebSocketHandler {
|
|
8
|
+
constructor({ connectionTimeout } = {}) {
|
|
9
|
+
this.metadata = {
|
|
10
|
+
handlerProtocol: "websocket",
|
|
11
|
+
};
|
|
12
|
+
this.connectionTimeout = connectionTimeout || 2000;
|
|
13
|
+
}
|
|
14
|
+
destroy() { }
|
|
15
|
+
async handle(request) {
|
|
16
|
+
const url = util_format_url_1.formatUrl(request);
|
|
17
|
+
const socket = new WebSocket(url);
|
|
18
|
+
socket.binaryType = "arraybuffer";
|
|
19
|
+
await waitForReady(socket, this.connectionTimeout);
|
|
20
|
+
const { body } = request;
|
|
21
|
+
const bodyStream = getIterator(body);
|
|
22
|
+
const asyncIterable = connect(socket, bodyStream);
|
|
23
|
+
const outputPayload = toReadableStream(asyncIterable);
|
|
24
|
+
return {
|
|
25
|
+
response: new protocol_http_1.HttpResponse({
|
|
26
|
+
statusCode: 200,
|
|
27
|
+
body: outputPayload,
|
|
28
|
+
}),
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
exports.WebSocketHandler = WebSocketHandler;
|
|
33
|
+
const waitForReady = (socket, connectionTimeout) => new Promise((resolve, reject) => {
|
|
34
|
+
const timeout = setTimeout(() => {
|
|
35
|
+
reject({
|
|
36
|
+
$metadata: {
|
|
37
|
+
httpStatusCode: 500,
|
|
38
|
+
},
|
|
39
|
+
});
|
|
40
|
+
}, connectionTimeout);
|
|
41
|
+
socket.onopen = () => {
|
|
42
|
+
clearTimeout(timeout);
|
|
43
|
+
resolve();
|
|
44
|
+
};
|
|
45
|
+
});
|
|
46
|
+
const connect = (socket, data) => {
|
|
47
|
+
let streamError = undefined;
|
|
48
|
+
const outputStream = {
|
|
49
|
+
[Symbol.asyncIterator]: () => ({
|
|
50
|
+
next: () => {
|
|
51
|
+
return new Promise((resolve, reject) => {
|
|
52
|
+
socket.onerror = (error) => {
|
|
53
|
+
socket.onclose = null;
|
|
54
|
+
socket.close();
|
|
55
|
+
reject(error);
|
|
56
|
+
};
|
|
57
|
+
socket.onclose = () => {
|
|
58
|
+
if (streamError) {
|
|
59
|
+
reject(streamError);
|
|
60
|
+
}
|
|
61
|
+
else {
|
|
62
|
+
resolve({
|
|
63
|
+
done: true,
|
|
64
|
+
value: undefined,
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
};
|
|
68
|
+
socket.onmessage = (event) => {
|
|
69
|
+
resolve({
|
|
70
|
+
done: false,
|
|
71
|
+
value: new Uint8Array(event.data),
|
|
72
|
+
});
|
|
73
|
+
};
|
|
74
|
+
});
|
|
75
|
+
},
|
|
76
|
+
}),
|
|
77
|
+
};
|
|
78
|
+
const send = async () => {
|
|
79
|
+
try {
|
|
80
|
+
for await (const inputChunk of data) {
|
|
81
|
+
socket.send(inputChunk);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
catch (err) {
|
|
85
|
+
streamError = err;
|
|
86
|
+
}
|
|
87
|
+
finally {
|
|
88
|
+
socket.close(1000);
|
|
89
|
+
}
|
|
90
|
+
};
|
|
91
|
+
send();
|
|
92
|
+
return outputStream;
|
|
93
|
+
};
|
|
94
|
+
const getIterator = (stream) => {
|
|
95
|
+
if (stream[Symbol.asyncIterator])
|
|
96
|
+
return stream;
|
|
97
|
+
else if (isReadableStream(stream)) {
|
|
98
|
+
return eventstream_serde_browser_1.readableStreamtoIterable(stream);
|
|
99
|
+
}
|
|
100
|
+
else {
|
|
101
|
+
return {
|
|
102
|
+
[Symbol.asyncIterator]: async function* () {
|
|
103
|
+
yield stream;
|
|
104
|
+
},
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
};
|
|
108
|
+
const toReadableStream = (asyncIterable) => typeof ReadableStream === "function" ? eventstream_serde_browser_1.iterableToReadableStream(asyncIterable) : asyncIterable;
|
|
109
|
+
const isReadableStream = (payload) => typeof ReadableStream === "function" && payload instanceof ReadableStream;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { __assign, __awaiter, __generator } from "tslib";
|
|
2
|
+
import { SignatureV4 } from "./signer";
|
|
3
|
+
export var resolveWebSocketConfig = function (input) {
|
|
4
|
+
var _a;
|
|
5
|
+
return ((_a = input.requestHandler.metadata) === null || _a === void 0 ? void 0 : _a.handlerProtocol) !== "websocket"
|
|
6
|
+
? input
|
|
7
|
+
: __assign(__assign({}, input), { signer: function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
8
|
+
var signerObj;
|
|
9
|
+
return __generator(this, function (_a) {
|
|
10
|
+
switch (_a.label) {
|
|
11
|
+
case 0: return [4, input.signer()];
|
|
12
|
+
case 1:
|
|
13
|
+
signerObj = _a.sent();
|
|
14
|
+
if (validateSigner(signerObj)) {
|
|
15
|
+
return [2, new SignatureV4({ signer: signerObj })];
|
|
16
|
+
}
|
|
17
|
+
throw new Error("Expected SignatureV4 signer, please check the client constructor.");
|
|
18
|
+
}
|
|
19
|
+
});
|
|
20
|
+
}); } });
|
|
21
|
+
};
|
|
22
|
+
var validateSigner = function (signer) { return !!signer; };
|
|
File without changes
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { __values } from "tslib";
|
|
2
|
+
import { HttpRequest } from "@aws-sdk/protocol-http";
|
|
3
|
+
export var websocketURLMiddleware = function (options) {
|
|
4
|
+
return function (next) {
|
|
5
|
+
return function (args) {
|
|
6
|
+
var e_1, _a;
|
|
7
|
+
var _b;
|
|
8
|
+
var request = args.request;
|
|
9
|
+
if (HttpRequest.isInstance(request) && ((_b = options.requestHandler.metadata) === null || _b === void 0 ? void 0 : _b.handlerProtocol) === "websocket") {
|
|
10
|
+
request.protocol = "wss:";
|
|
11
|
+
request.hostname = request.hostname + ":8443";
|
|
12
|
+
request.path = request.path + "-websocket";
|
|
13
|
+
request.method = "GET";
|
|
14
|
+
var headers = request.headers;
|
|
15
|
+
delete headers["Content-Type"];
|
|
16
|
+
delete headers["x-amz-content-sha256"];
|
|
17
|
+
try {
|
|
18
|
+
for (var _c = __values(Object.keys(headers)), _d = _c.next(); !_d.done; _d = _c.next()) {
|
|
19
|
+
var name_1 = _d.value;
|
|
20
|
+
if (name_1.indexOf("x-amzn-transcribe-") === 0) {
|
|
21
|
+
var chunkedName = name_1.replace("x-amzn-transcribe-", "");
|
|
22
|
+
request.query[chunkedName] = headers[name_1];
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
catch (e_1_1) { e_1 = { error: e_1_1 }; }
|
|
27
|
+
finally {
|
|
28
|
+
try {
|
|
29
|
+
if (_d && !_d.done && (_a = _c.return)) _a.call(_c);
|
|
30
|
+
}
|
|
31
|
+
finally { if (e_1) throw e_1.error; }
|
|
32
|
+
}
|
|
33
|
+
if (headers["x-amz-user-agent"]) {
|
|
34
|
+
request.query["user-agent"] = headers["x-amz-user-agent"];
|
|
35
|
+
}
|
|
36
|
+
request.headers = { host: request.hostname };
|
|
37
|
+
}
|
|
38
|
+
return next(args);
|
|
39
|
+
};
|
|
40
|
+
};
|
|
41
|
+
};
|
|
42
|
+
export var websocketURLMiddlewareOptions = {
|
|
43
|
+
name: "websocketURLMiddleware",
|
|
44
|
+
tags: ["WEBSOCKET", "EVENT_STREAM"],
|
|
45
|
+
relation: "after",
|
|
46
|
+
toMiddleware: "eventStreamHeaderMiddleware",
|
|
47
|
+
override: true,
|
|
48
|
+
};
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { __assign, __awaiter, __generator, __values } from "tslib";
|
|
2
|
+
import { v4 } from "uuid";
|
|
3
|
+
export var injectSessionIdMiddleware = function (config) {
|
|
4
|
+
return function (next) {
|
|
5
|
+
return function (args) { return __awaiter(void 0, void 0, void 0, function () {
|
|
6
|
+
var requestParams, response, output, _a, _b, key;
|
|
7
|
+
var e_1, _c;
|
|
8
|
+
return __generator(this, function (_d) {
|
|
9
|
+
switch (_d.label) {
|
|
10
|
+
case 0:
|
|
11
|
+
if (args.input.SessionId === undefined && isWebSocket(config)) {
|
|
12
|
+
args.input.SessionId = v4();
|
|
13
|
+
}
|
|
14
|
+
requestParams = __assign({}, args.input);
|
|
15
|
+
return [4, next(args)];
|
|
16
|
+
case 1:
|
|
17
|
+
response = _d.sent();
|
|
18
|
+
output = response.output;
|
|
19
|
+
try {
|
|
20
|
+
for (_a = __values(Object.keys(output)), _b = _a.next(); !_b.done; _b = _a.next()) {
|
|
21
|
+
key = _b.value;
|
|
22
|
+
if (output[key] === undefined && requestParams[key]) {
|
|
23
|
+
output[key] = requestParams[key];
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
catch (e_1_1) { e_1 = { error: e_1_1 }; }
|
|
28
|
+
finally {
|
|
29
|
+
try {
|
|
30
|
+
if (_b && !_b.done && (_c = _a.return)) _c.call(_a);
|
|
31
|
+
}
|
|
32
|
+
finally { if (e_1) throw e_1.error; }
|
|
33
|
+
}
|
|
34
|
+
return [2, response];
|
|
35
|
+
}
|
|
36
|
+
});
|
|
37
|
+
}); };
|
|
38
|
+
};
|
|
39
|
+
};
|
|
40
|
+
var isWebSocket = function (config) { var _a; return ((_a = config.requestHandler.metadata) === null || _a === void 0 ? void 0 : _a.handlerProtocol) === "websocket"; };
|
|
41
|
+
export var injectSessionIdMiddlewareOptions = {
|
|
42
|
+
step: "initialize",
|
|
43
|
+
name: "injectSessionIdMiddleware",
|
|
44
|
+
tags: ["WEBSOCKET", "EVENT_STREAM"],
|
|
45
|
+
override: true,
|
|
46
|
+
};
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { websocketURLMiddleware, websocketURLMiddlewareOptions } from "./middleware-endpoint";
|
|
2
|
+
import { injectSessionIdMiddleware, injectSessionIdMiddlewareOptions } from "./middleware-session-id";
|
|
3
|
+
export var getWebSocketPlugin = function (config) { return ({
|
|
4
|
+
applyToStack: function (clientStack) {
|
|
5
|
+
clientStack.addRelativeTo(websocketURLMiddleware(config), websocketURLMiddlewareOptions);
|
|
6
|
+
clientStack.add(injectSessionIdMiddleware(config), injectSessionIdMiddlewareOptions);
|
|
7
|
+
},
|
|
8
|
+
}); };
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { __assign, __awaiter, __generator } from "tslib";
|
|
2
|
+
import { HttpRequest } from "@aws-sdk/protocol-http";
|
|
3
|
+
var SignatureV4 = (function () {
|
|
4
|
+
function SignatureV4(options) {
|
|
5
|
+
this.signer = options.signer;
|
|
6
|
+
}
|
|
7
|
+
SignatureV4.prototype.presign = function (originalRequest, options) {
|
|
8
|
+
if (options === void 0) { options = {}; }
|
|
9
|
+
return this.signer.presign(originalRequest, options);
|
|
10
|
+
};
|
|
11
|
+
SignatureV4.prototype.sign = function (toSign, options) {
|
|
12
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
13
|
+
var signedRequest;
|
|
14
|
+
return __generator(this, function (_a) {
|
|
15
|
+
switch (_a.label) {
|
|
16
|
+
case 0:
|
|
17
|
+
if (!HttpRequest.isInstance(toSign)) return [3, 2];
|
|
18
|
+
return [4, this.signer.presign(__assign(__assign({}, toSign), { body: "" }), {
|
|
19
|
+
expiresIn: 5 * 60,
|
|
20
|
+
unsignableHeaders: new Set(Object.keys(toSign.headers).filter(function (header) { return header !== "host"; })),
|
|
21
|
+
})];
|
|
22
|
+
case 1:
|
|
23
|
+
signedRequest = _a.sent();
|
|
24
|
+
return [2, __assign(__assign({}, signedRequest), { body: toSign.body })];
|
|
25
|
+
case 2: return [2, this.signer.sign(toSign, options)];
|
|
26
|
+
}
|
|
27
|
+
});
|
|
28
|
+
});
|
|
29
|
+
};
|
|
30
|
+
return SignatureV4;
|
|
31
|
+
}());
|
|
32
|
+
export { SignatureV4 };
|
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
import { __asyncGenerator, __asyncValues, __await, __awaiter, __generator } from "tslib";
|
|
2
|
+
import { iterableToReadableStream, readableStreamtoIterable } from "@aws-sdk/eventstream-serde-browser";
|
|
3
|
+
import { HttpResponse } from "@aws-sdk/protocol-http";
|
|
4
|
+
import { formatUrl } from "@aws-sdk/util-format-url";
|
|
5
|
+
var WebSocketHandler = (function () {
|
|
6
|
+
function WebSocketHandler(_a) {
|
|
7
|
+
var _b = _a === void 0 ? {} : _a, connectionTimeout = _b.connectionTimeout;
|
|
8
|
+
this.metadata = {
|
|
9
|
+
handlerProtocol: "websocket",
|
|
10
|
+
};
|
|
11
|
+
this.connectionTimeout = connectionTimeout || 2000;
|
|
12
|
+
}
|
|
13
|
+
WebSocketHandler.prototype.destroy = function () { };
|
|
14
|
+
WebSocketHandler.prototype.handle = function (request) {
|
|
15
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
16
|
+
var url, socket, body, bodyStream, asyncIterable, outputPayload;
|
|
17
|
+
return __generator(this, function (_a) {
|
|
18
|
+
switch (_a.label) {
|
|
19
|
+
case 0:
|
|
20
|
+
url = formatUrl(request);
|
|
21
|
+
socket = new WebSocket(url);
|
|
22
|
+
socket.binaryType = "arraybuffer";
|
|
23
|
+
return [4, waitForReady(socket, this.connectionTimeout)];
|
|
24
|
+
case 1:
|
|
25
|
+
_a.sent();
|
|
26
|
+
body = request.body;
|
|
27
|
+
bodyStream = getIterator(body);
|
|
28
|
+
asyncIterable = connect(socket, bodyStream);
|
|
29
|
+
outputPayload = toReadableStream(asyncIterable);
|
|
30
|
+
return [2, {
|
|
31
|
+
response: new HttpResponse({
|
|
32
|
+
statusCode: 200,
|
|
33
|
+
body: outputPayload,
|
|
34
|
+
}),
|
|
35
|
+
}];
|
|
36
|
+
}
|
|
37
|
+
});
|
|
38
|
+
});
|
|
39
|
+
};
|
|
40
|
+
return WebSocketHandler;
|
|
41
|
+
}());
|
|
42
|
+
export { WebSocketHandler };
|
|
43
|
+
var waitForReady = function (socket, connectionTimeout) {
|
|
44
|
+
return new Promise(function (resolve, reject) {
|
|
45
|
+
var timeout = setTimeout(function () {
|
|
46
|
+
reject({
|
|
47
|
+
$metadata: {
|
|
48
|
+
httpStatusCode: 500,
|
|
49
|
+
},
|
|
50
|
+
});
|
|
51
|
+
}, connectionTimeout);
|
|
52
|
+
socket.onopen = function () {
|
|
53
|
+
clearTimeout(timeout);
|
|
54
|
+
resolve();
|
|
55
|
+
};
|
|
56
|
+
});
|
|
57
|
+
};
|
|
58
|
+
var connect = function (socket, data) {
|
|
59
|
+
var _a;
|
|
60
|
+
var streamError = undefined;
|
|
61
|
+
var outputStream = (_a = {},
|
|
62
|
+
_a[Symbol.asyncIterator] = function () { return ({
|
|
63
|
+
next: function () {
|
|
64
|
+
return new Promise(function (resolve, reject) {
|
|
65
|
+
socket.onerror = function (error) {
|
|
66
|
+
socket.onclose = null;
|
|
67
|
+
socket.close();
|
|
68
|
+
reject(error);
|
|
69
|
+
};
|
|
70
|
+
socket.onclose = function () {
|
|
71
|
+
if (streamError) {
|
|
72
|
+
reject(streamError);
|
|
73
|
+
}
|
|
74
|
+
else {
|
|
75
|
+
resolve({
|
|
76
|
+
done: true,
|
|
77
|
+
value: undefined,
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
};
|
|
81
|
+
socket.onmessage = function (event) {
|
|
82
|
+
resolve({
|
|
83
|
+
done: false,
|
|
84
|
+
value: new Uint8Array(event.data),
|
|
85
|
+
});
|
|
86
|
+
};
|
|
87
|
+
});
|
|
88
|
+
},
|
|
89
|
+
}); },
|
|
90
|
+
_a);
|
|
91
|
+
var send = function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
92
|
+
var data_1, data_1_1, inputChunk, e_1_1, err_1;
|
|
93
|
+
var e_1, _a;
|
|
94
|
+
return __generator(this, function (_b) {
|
|
95
|
+
switch (_b.label) {
|
|
96
|
+
case 0:
|
|
97
|
+
_b.trys.push([0, 13, 14, 15]);
|
|
98
|
+
_b.label = 1;
|
|
99
|
+
case 1:
|
|
100
|
+
_b.trys.push([1, 6, 7, 12]);
|
|
101
|
+
data_1 = __asyncValues(data);
|
|
102
|
+
_b.label = 2;
|
|
103
|
+
case 2: return [4, data_1.next()];
|
|
104
|
+
case 3:
|
|
105
|
+
if (!(data_1_1 = _b.sent(), !data_1_1.done)) return [3, 5];
|
|
106
|
+
inputChunk = data_1_1.value;
|
|
107
|
+
socket.send(inputChunk);
|
|
108
|
+
_b.label = 4;
|
|
109
|
+
case 4: return [3, 2];
|
|
110
|
+
case 5: return [3, 12];
|
|
111
|
+
case 6:
|
|
112
|
+
e_1_1 = _b.sent();
|
|
113
|
+
e_1 = { error: e_1_1 };
|
|
114
|
+
return [3, 12];
|
|
115
|
+
case 7:
|
|
116
|
+
_b.trys.push([7, , 10, 11]);
|
|
117
|
+
if (!(data_1_1 && !data_1_1.done && (_a = data_1.return))) return [3, 9];
|
|
118
|
+
return [4, _a.call(data_1)];
|
|
119
|
+
case 8:
|
|
120
|
+
_b.sent();
|
|
121
|
+
_b.label = 9;
|
|
122
|
+
case 9: return [3, 11];
|
|
123
|
+
case 10:
|
|
124
|
+
if (e_1) throw e_1.error;
|
|
125
|
+
return [7];
|
|
126
|
+
case 11: return [7];
|
|
127
|
+
case 12: return [3, 15];
|
|
128
|
+
case 13:
|
|
129
|
+
err_1 = _b.sent();
|
|
130
|
+
streamError = err_1;
|
|
131
|
+
return [3, 15];
|
|
132
|
+
case 14:
|
|
133
|
+
socket.close(1000);
|
|
134
|
+
return [7];
|
|
135
|
+
case 15: return [2];
|
|
136
|
+
}
|
|
137
|
+
});
|
|
138
|
+
}); };
|
|
139
|
+
send();
|
|
140
|
+
return outputStream;
|
|
141
|
+
};
|
|
142
|
+
var getIterator = function (stream) {
|
|
143
|
+
var _a;
|
|
144
|
+
if (stream[Symbol.asyncIterator])
|
|
145
|
+
return stream;
|
|
146
|
+
else if (isReadableStream(stream)) {
|
|
147
|
+
return readableStreamtoIterable(stream);
|
|
148
|
+
}
|
|
149
|
+
else {
|
|
150
|
+
return _a = {},
|
|
151
|
+
_a[Symbol.asyncIterator] = function () {
|
|
152
|
+
return __asyncGenerator(this, arguments, function () {
|
|
153
|
+
return __generator(this, function (_a) {
|
|
154
|
+
switch (_a.label) {
|
|
155
|
+
case 0: return [4, __await(stream)];
|
|
156
|
+
case 1: return [4, _a.sent()];
|
|
157
|
+
case 2:
|
|
158
|
+
_a.sent();
|
|
159
|
+
return [2];
|
|
160
|
+
}
|
|
161
|
+
});
|
|
162
|
+
});
|
|
163
|
+
},
|
|
164
|
+
_a;
|
|
165
|
+
}
|
|
166
|
+
};
|
|
167
|
+
var toReadableStream = function (asyncIterable) {
|
|
168
|
+
return typeof ReadableStream === "function" ? iterableToReadableStream(asyncIterable) : asyncIterable;
|
|
169
|
+
};
|
|
170
|
+
var isReadableStream = function (payload) {
|
|
171
|
+
return typeof ReadableStream === "function" && payload instanceof ReadableStream;
|
|
172
|
+
};
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|