@aws-sdk/middleware-sdk-transcribe-streaming
Advanced tools
Comparing version 3.258.0 to 3.266.0
@@ -12,13 +12,28 @@ "use strict"; | ||
}; | ||
this.sockets = {}; | ||
this.connectionTimeout = connectionTimeout || 2000; | ||
} | ||
destroy() { } | ||
destroy() { | ||
for (const [key, sockets] of Object.entries(this.sockets)) { | ||
for (const socket of sockets) { | ||
socket.close(1000, `Socket closed through destroy() call`); | ||
} | ||
delete this.sockets[key]; | ||
} | ||
} | ||
removeNotUsableSockets(url) { | ||
this.sockets[url] = this.sockets[url].filter((socket) => ![WebSocket.CLOSING, WebSocket.CLOSED].includes(socket.readyState)); | ||
} | ||
async handle(request) { | ||
const url = (0, util_format_url_1.formatUrl)(request); | ||
const socket = new WebSocket(url); | ||
if (!this.sockets[url]) { | ||
this.sockets[url] = []; | ||
} | ||
this.sockets[url].push(socket); | ||
socket.binaryType = "arraybuffer"; | ||
await waitForReady(socket, this.connectionTimeout); | ||
await this.waitForReady(socket, this.connectionTimeout); | ||
const { body } = request; | ||
const bodyStream = getIterator(body); | ||
const asyncIterable = connect(socket, bodyStream); | ||
const asyncIterable = this.connect(socket, bodyStream); | ||
const outputPayload = toReadableStream(asyncIterable); | ||
@@ -32,80 +47,86 @@ return { | ||
} | ||
} | ||
exports.WebSocketHandler = WebSocketHandler; | ||
const waitForReady = (socket, connectionTimeout) => new Promise((resolve, reject) => { | ||
const timeout = setTimeout(() => { | ||
reject({ | ||
$metadata: { | ||
httpStatusCode: 500, | ||
}, | ||
waitForReady(socket, connectionTimeout) { | ||
return new Promise((resolve, reject) => { | ||
const timeout = setTimeout(() => { | ||
this.removeNotUsableSockets(socket.url); | ||
reject({ | ||
$metadata: { | ||
httpStatusCode: 500, | ||
}, | ||
}); | ||
}, connectionTimeout); | ||
socket.onopen = () => { | ||
clearTimeout(timeout); | ||
resolve(); | ||
}; | ||
}); | ||
}, connectionTimeout); | ||
socket.onopen = () => { | ||
clearTimeout(timeout); | ||
resolve(); | ||
}; | ||
}); | ||
const connect = (socket, data) => { | ||
let streamError = undefined; | ||
const outputStream = { | ||
[Symbol.asyncIterator]: () => ({ | ||
next: () => { | ||
return new Promise((resolve, reject) => { | ||
socket.onerror = (error) => { | ||
socket.onclose = null; | ||
socket.close(); | ||
reject(error); | ||
}; | ||
socket.onclose = () => { | ||
if (streamError) { | ||
reject(streamError); | ||
} | ||
else { | ||
} | ||
connect(socket, data) { | ||
let streamError = undefined; | ||
const outputStream = { | ||
[Symbol.asyncIterator]: () => ({ | ||
next: () => { | ||
return new Promise((resolve, reject) => { | ||
let socketErrorOccurred = false; | ||
socket.onerror = (error) => { | ||
socketErrorOccurred = true; | ||
socket.close(); | ||
reject(error); | ||
}; | ||
socket.onclose = () => { | ||
this.removeNotUsableSockets(socket.url); | ||
if (socketErrorOccurred) | ||
return; | ||
if (streamError) { | ||
reject(streamError); | ||
} | ||
else { | ||
resolve({ | ||
done: true, | ||
value: undefined, | ||
}); | ||
} | ||
}; | ||
socket.onmessage = (event) => { | ||
resolve({ | ||
done: true, | ||
value: undefined, | ||
done: false, | ||
value: new Uint8Array(event.data), | ||
}); | ||
} | ||
}; | ||
socket.onmessage = (event) => { | ||
resolve({ | ||
done: false, | ||
value: new Uint8Array(event.data), | ||
}); | ||
}; | ||
}); | ||
}, | ||
}), | ||
}; | ||
const send = async () => { | ||
try { | ||
for await (const inputChunk of data) { | ||
socket.send(inputChunk); | ||
}; | ||
}); | ||
}, | ||
}), | ||
}; | ||
const send = async () => { | ||
try { | ||
for await (const inputChunk of data) { | ||
socket.send(inputChunk); | ||
} | ||
} | ||
} | ||
catch (err) { | ||
streamError = err; | ||
} | ||
finally { | ||
socket.close(1000); | ||
} | ||
}; | ||
send(); | ||
return outputStream; | ||
}; | ||
catch (err) { | ||
streamError = err; | ||
} | ||
finally { | ||
socket.close(1000); | ||
} | ||
}; | ||
send(); | ||
return outputStream; | ||
} | ||
} | ||
exports.WebSocketHandler = WebSocketHandler; | ||
const getIterator = (stream) => { | ||
if (stream[Symbol.asyncIterator]) | ||
if (stream[Symbol.asyncIterator]) { | ||
return stream; | ||
else if (isReadableStream(stream)) { | ||
} | ||
if (isReadableStream(stream)) { | ||
return (0, eventstream_serde_browser_1.readableStreamtoIterable)(stream); | ||
} | ||
else { | ||
return { | ||
[Symbol.asyncIterator]: async function* () { | ||
yield stream; | ||
}, | ||
}; | ||
} | ||
return { | ||
[Symbol.asyncIterator]: async function* () { | ||
yield stream; | ||
}, | ||
}; | ||
}; | ||
const toReadableStream = (asyncIterable) => typeof ReadableStream === "function" ? (0, eventstream_serde_browser_1.iterableToReadableStream)(asyncIterable) : asyncIterable; | ||
const isReadableStream = (payload) => typeof ReadableStream === "function" && payload instanceof ReadableStream; |
@@ -9,13 +9,28 @@ import { iterableToReadableStream, readableStreamtoIterable } from "@aws-sdk/eventstream-serde-browser"; | ||
}; | ||
this.sockets = {}; | ||
this.connectionTimeout = connectionTimeout || 2000; | ||
} | ||
destroy() { } | ||
destroy() { | ||
for (const [key, sockets] of Object.entries(this.sockets)) { | ||
for (const socket of sockets) { | ||
socket.close(1000, `Socket closed through destroy() call`); | ||
} | ||
delete this.sockets[key]; | ||
} | ||
} | ||
removeNotUsableSockets(url) { | ||
this.sockets[url] = this.sockets[url].filter((socket) => ![WebSocket.CLOSING, WebSocket.CLOSED].includes(socket.readyState)); | ||
} | ||
async handle(request) { | ||
const url = formatUrl(request); | ||
const socket = new WebSocket(url); | ||
if (!this.sockets[url]) { | ||
this.sockets[url] = []; | ||
} | ||
this.sockets[url].push(socket); | ||
socket.binaryType = "arraybuffer"; | ||
await waitForReady(socket, this.connectionTimeout); | ||
await this.waitForReady(socket, this.connectionTimeout); | ||
const { body } = request; | ||
const bodyStream = getIterator(body); | ||
const asyncIterable = connect(socket, bodyStream); | ||
const asyncIterable = this.connect(socket, bodyStream); | ||
const outputPayload = toReadableStream(asyncIterable); | ||
@@ -29,79 +44,85 @@ return { | ||
} | ||
} | ||
const waitForReady = (socket, connectionTimeout) => new Promise((resolve, reject) => { | ||
const timeout = setTimeout(() => { | ||
reject({ | ||
$metadata: { | ||
httpStatusCode: 500, | ||
}, | ||
waitForReady(socket, connectionTimeout) { | ||
return new Promise((resolve, reject) => { | ||
const timeout = setTimeout(() => { | ||
this.removeNotUsableSockets(socket.url); | ||
reject({ | ||
$metadata: { | ||
httpStatusCode: 500, | ||
}, | ||
}); | ||
}, connectionTimeout); | ||
socket.onopen = () => { | ||
clearTimeout(timeout); | ||
resolve(); | ||
}; | ||
}); | ||
}, connectionTimeout); | ||
socket.onopen = () => { | ||
clearTimeout(timeout); | ||
resolve(); | ||
}; | ||
}); | ||
const connect = (socket, data) => { | ||
let streamError = undefined; | ||
const outputStream = { | ||
[Symbol.asyncIterator]: () => ({ | ||
next: () => { | ||
return new Promise((resolve, reject) => { | ||
socket.onerror = (error) => { | ||
socket.onclose = null; | ||
socket.close(); | ||
reject(error); | ||
}; | ||
socket.onclose = () => { | ||
if (streamError) { | ||
reject(streamError); | ||
} | ||
else { | ||
} | ||
connect(socket, data) { | ||
let streamError = undefined; | ||
const outputStream = { | ||
[Symbol.asyncIterator]: () => ({ | ||
next: () => { | ||
return new Promise((resolve, reject) => { | ||
let socketErrorOccurred = false; | ||
socket.onerror = (error) => { | ||
socketErrorOccurred = true; | ||
socket.close(); | ||
reject(error); | ||
}; | ||
socket.onclose = () => { | ||
this.removeNotUsableSockets(socket.url); | ||
if (socketErrorOccurred) | ||
return; | ||
if (streamError) { | ||
reject(streamError); | ||
} | ||
else { | ||
resolve({ | ||
done: true, | ||
value: undefined, | ||
}); | ||
} | ||
}; | ||
socket.onmessage = (event) => { | ||
resolve({ | ||
done: true, | ||
value: undefined, | ||
done: false, | ||
value: new Uint8Array(event.data), | ||
}); | ||
} | ||
}; | ||
socket.onmessage = (event) => { | ||
resolve({ | ||
done: false, | ||
value: new Uint8Array(event.data), | ||
}); | ||
}; | ||
}); | ||
}, | ||
}), | ||
}; | ||
const send = async () => { | ||
try { | ||
for await (const inputChunk of data) { | ||
socket.send(inputChunk); | ||
}; | ||
}); | ||
}, | ||
}), | ||
}; | ||
const send = async () => { | ||
try { | ||
for await (const inputChunk of data) { | ||
socket.send(inputChunk); | ||
} | ||
} | ||
} | ||
catch (err) { | ||
streamError = err; | ||
} | ||
finally { | ||
socket.close(1000); | ||
} | ||
}; | ||
send(); | ||
return outputStream; | ||
}; | ||
catch (err) { | ||
streamError = err; | ||
} | ||
finally { | ||
socket.close(1000); | ||
} | ||
}; | ||
send(); | ||
return outputStream; | ||
} | ||
} | ||
const getIterator = (stream) => { | ||
if (stream[Symbol.asyncIterator]) | ||
if (stream[Symbol.asyncIterator]) { | ||
return stream; | ||
else if (isReadableStream(stream)) { | ||
} | ||
if (isReadableStream(stream)) { | ||
return readableStreamtoIterable(stream); | ||
} | ||
else { | ||
return { | ||
[Symbol.asyncIterator]: async function* () { | ||
yield stream; | ||
}, | ||
}; | ||
} | ||
return { | ||
[Symbol.asyncIterator]: async function* () { | ||
yield stream; | ||
}, | ||
}; | ||
}; | ||
const toReadableStream = (asyncIterable) => typeof ReadableStream === "function" ? iterableToReadableStream(asyncIterable) : asyncIterable; | ||
const isReadableStream = (payload) => typeof ReadableStream === "function" && payload instanceof ReadableStream; |
@@ -9,7 +9,11 @@ import { HttpHandler, HttpRequest, HttpResponse } from "@aws-sdk/protocol-http"; | ||
private readonly connectionTimeout; | ||
private readonly sockets; | ||
constructor({ connectionTimeout }?: WebSocketHandlerOptions); | ||
destroy(): void; | ||
private removeNotUsableSockets; | ||
handle(request: HttpRequest): Promise<{ | ||
response: HttpResponse; | ||
}>; | ||
private waitForReady; | ||
private connect; | ||
} |
@@ -19,7 +19,18 @@ import { HttpHandler, HttpRequest, HttpResponse } from "@aws-sdk/protocol-http"; | ||
private readonly connectionTimeout; | ||
private readonly sockets; | ||
constructor({ connectionTimeout }?: WebSocketHandlerOptions); | ||
/** | ||
* Destroys the WebSocketHandler. | ||
* Closes all sockets from the socket pool. | ||
*/ | ||
destroy(): void; | ||
/** | ||
* Removes all closing/closed sockets from the socket pool for URL. | ||
*/ | ||
private removeNotUsableSockets; | ||
handle(request: HttpRequest): Promise<{ | ||
response: HttpResponse; | ||
}>; | ||
private waitForReady; | ||
private connect; | ||
} |
{ | ||
"name": "@aws-sdk/middleware-sdk-transcribe-streaming", | ||
"version": "3.258.0", | ||
"version": "3.266.0", | ||
"main": "./dist-cjs/index.js", | ||
@@ -23,8 +23,8 @@ "module": "./dist-es/index.js", | ||
"dependencies": { | ||
"@aws-sdk/eventstream-serde-browser": "3.258.0", | ||
"@aws-sdk/middleware-signing": "3.257.0", | ||
"@aws-sdk/protocol-http": "3.257.0", | ||
"@aws-sdk/signature-v4": "3.257.0", | ||
"@aws-sdk/types": "3.257.0", | ||
"@aws-sdk/util-format-url": "3.257.0", | ||
"@aws-sdk/eventstream-serde-browser": "3.266.0", | ||
"@aws-sdk/middleware-signing": "3.266.0", | ||
"@aws-sdk/protocol-http": "3.266.0", | ||
"@aws-sdk/signature-v4": "3.266.0", | ||
"@aws-sdk/types": "3.266.0", | ||
"@aws-sdk/util-format-url": "3.266.0", | ||
"tslib": "^2.3.1", | ||
@@ -31,0 +31,0 @@ "uuid": "^8.3.2" |
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
40579
689
+ Added@aws-sdk/eventstream-codec@3.266.0(transitive)
+ Added@aws-sdk/eventstream-serde-browser@3.266.0(transitive)
+ Added@aws-sdk/eventstream-serde-universal@3.266.0(transitive)
+ Added@aws-sdk/middleware-signing@3.266.0(transitive)
+ Added@aws-sdk/property-provider@3.266.0(transitive)
+ Added@aws-sdk/protocol-http@3.266.0(transitive)
+ Added@aws-sdk/querystring-builder@3.266.0(transitive)
+ Added@aws-sdk/signature-v4@3.266.0(transitive)
+ Added@aws-sdk/types@3.266.0(transitive)
+ Added@aws-sdk/util-format-url@3.266.0(transitive)
+ Added@aws-sdk/util-middleware@3.266.0(transitive)
- Removed@aws-sdk/eventstream-codec@3.258.0(transitive)
- Removed@aws-sdk/eventstream-serde-browser@3.258.0(transitive)
- Removed@aws-sdk/eventstream-serde-universal@3.258.0(transitive)
- Removed@aws-sdk/middleware-signing@3.257.0(transitive)
- Removed@aws-sdk/property-provider@3.257.0(transitive)
- Removed@aws-sdk/protocol-http@3.257.0(transitive)
- Removed@aws-sdk/querystring-builder@3.257.0(transitive)
- Removed@aws-sdk/signature-v4@3.257.0(transitive)
- Removed@aws-sdk/types@3.257.0(transitive)
- Removed@aws-sdk/util-format-url@3.257.0(transitive)
- Removed@aws-sdk/util-middleware@3.257.0(transitive)
Updated@aws-sdk/types@3.266.0