@aws-sdk/middleware-websocket 3.347.0 → 3.351.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-cjs/EventStreamPayloadHandler.js +2 -2
- package/dist-cjs/get-event-signing-stream.js +9 -7
- package/dist-cjs/websocket-fetch-handler.js +33 -28
- package/dist-es/EventStreamPayloadHandler.js +2 -2
- package/dist-es/get-event-signing-stream.js +9 -7
- package/dist-es/websocket-fetch-handler.js +32 -28
- package/dist-types/EventStreamPayloadHandler.d.ts +3 -3
- package/dist-types/get-event-signing-stream.d.ts +2 -2
- package/dist-types/ts3.4/EventStreamPayloadHandler.d.ts +3 -3
- package/dist-types/ts3.4/get-event-signing-stream.d.ts +2 -2
- package/package.json +1 -1
|
@@ -5,7 +5,7 @@ const eventstream_codec_1 = require("@aws-sdk/eventstream-codec");
|
|
|
5
5
|
const get_event_signing_stream_1 = require("./get-event-signing-stream");
|
|
6
6
|
class EventStreamPayloadHandler {
|
|
7
7
|
constructor(options) {
|
|
8
|
-
this.
|
|
8
|
+
this.messageSigner = options.messageSigner;
|
|
9
9
|
this.eventStreamCodec = new eventstream_codec_1.EventStreamCodec(options.utf8Encoder, options.utf8Decoder);
|
|
10
10
|
}
|
|
11
11
|
async handle(next, args, context = {}) {
|
|
@@ -26,7 +26,7 @@ class EventStreamPayloadHandler {
|
|
|
26
26
|
}
|
|
27
27
|
const match = (headers["authorization"] || "").match(/Signature=([\w]+)$/);
|
|
28
28
|
const priorSignature = (match || [])[1] || (query && query["X-Amz-Signature"]) || "";
|
|
29
|
-
const signingStream = (0, get_event_signing_stream_1.getEventSigningTransformStream)(priorSignature, await this.
|
|
29
|
+
const signingStream = (0, get_event_signing_stream_1.getEventSigningTransformStream)(priorSignature, await this.messageSigner(), this.eventStreamCodec);
|
|
30
30
|
const signedPayload = payload.pipeThrough(signingStream);
|
|
31
31
|
signedPayload.pipeThrough(placeHolderStream);
|
|
32
32
|
return result;
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.getEventSigningTransformStream = void 0;
|
|
4
4
|
const util_hex_encoding_1 = require("@aws-sdk/util-hex-encoding");
|
|
5
|
-
const getEventSigningTransformStream = (initialSignature,
|
|
5
|
+
const getEventSigningTransformStream = (initialSignature, messageSigner, eventStreamCodec) => {
|
|
6
6
|
let priorSignature = initialSignature;
|
|
7
7
|
const transformer = {
|
|
8
8
|
start() { },
|
|
@@ -12,20 +12,22 @@ const getEventSigningTransformStream = (initialSignature, eventSigner, eventStre
|
|
|
12
12
|
const dateHeader = {
|
|
13
13
|
":date": { type: "timestamp", value: now },
|
|
14
14
|
};
|
|
15
|
-
const
|
|
16
|
-
|
|
17
|
-
|
|
15
|
+
const signedMessage = await messageSigner.sign({
|
|
16
|
+
message: {
|
|
17
|
+
body: chunk,
|
|
18
|
+
headers: dateHeader,
|
|
19
|
+
},
|
|
20
|
+
priorSignature: priorSignature,
|
|
18
21
|
}, {
|
|
19
|
-
priorSignature,
|
|
20
22
|
signingDate: now,
|
|
21
23
|
});
|
|
22
|
-
priorSignature = signature;
|
|
24
|
+
priorSignature = signedMessage.signature;
|
|
23
25
|
const serializedSigned = eventStreamCodec.encode({
|
|
24
26
|
headers: {
|
|
25
27
|
...dateHeader,
|
|
26
28
|
":chunk-signature": {
|
|
27
29
|
type: "binary",
|
|
28
|
-
value: (0, util_hex_encoding_1.fromHex)(signature),
|
|
30
|
+
value: (0, util_hex_encoding_1.fromHex)(signedMessage.signature),
|
|
29
31
|
},
|
|
30
32
|
},
|
|
31
33
|
body: chunk,
|
|
@@ -54,7 +54,8 @@ class WebSocketFetchHandler {
|
|
|
54
54
|
};
|
|
55
55
|
}
|
|
56
56
|
removeNotUsableSockets(url) {
|
|
57
|
-
|
|
57
|
+
var _a;
|
|
58
|
+
this.sockets[url] = ((_a = this.sockets[url]) !== null && _a !== void 0 ? _a : []).filter((socket) => ![WebSocket.CLOSING, WebSocket.CLOSED].includes(socket.readyState));
|
|
58
59
|
}
|
|
59
60
|
waitForReady(socket, connectionTimeout) {
|
|
60
61
|
return new Promise((resolve, reject) => {
|
|
@@ -74,36 +75,40 @@ class WebSocketFetchHandler {
|
|
|
74
75
|
}
|
|
75
76
|
connect(socket, data) {
|
|
76
77
|
let streamError = undefined;
|
|
78
|
+
let socketErrorOccurred = false;
|
|
79
|
+
let reject = () => { };
|
|
80
|
+
let resolve = () => { };
|
|
81
|
+
socket.onmessage = (event) => {
|
|
82
|
+
resolve({
|
|
83
|
+
done: false,
|
|
84
|
+
value: new Uint8Array(event.data),
|
|
85
|
+
});
|
|
86
|
+
};
|
|
87
|
+
socket.onerror = (error) => {
|
|
88
|
+
socketErrorOccurred = true;
|
|
89
|
+
socket.close();
|
|
90
|
+
reject(error);
|
|
91
|
+
};
|
|
92
|
+
socket.onclose = () => {
|
|
93
|
+
this.removeNotUsableSockets(socket.url);
|
|
94
|
+
if (socketErrorOccurred)
|
|
95
|
+
return;
|
|
96
|
+
if (streamError) {
|
|
97
|
+
reject(streamError);
|
|
98
|
+
}
|
|
99
|
+
else {
|
|
100
|
+
resolve({
|
|
101
|
+
done: true,
|
|
102
|
+
value: undefined,
|
|
103
|
+
});
|
|
104
|
+
}
|
|
105
|
+
};
|
|
77
106
|
const outputStream = {
|
|
78
107
|
[Symbol.asyncIterator]: () => ({
|
|
79
108
|
next: () => {
|
|
80
|
-
return new Promise((
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
socketErrorOccurred = true;
|
|
84
|
-
socket.close();
|
|
85
|
-
reject(error);
|
|
86
|
-
};
|
|
87
|
-
socket.onclose = () => {
|
|
88
|
-
this.removeNotUsableSockets(socket.url);
|
|
89
|
-
if (socketErrorOccurred)
|
|
90
|
-
return;
|
|
91
|
-
if (streamError) {
|
|
92
|
-
reject(streamError);
|
|
93
|
-
}
|
|
94
|
-
else {
|
|
95
|
-
resolve({
|
|
96
|
-
done: true,
|
|
97
|
-
value: undefined,
|
|
98
|
-
});
|
|
99
|
-
}
|
|
100
|
-
};
|
|
101
|
-
socket.onmessage = (event) => {
|
|
102
|
-
resolve({
|
|
103
|
-
done: false,
|
|
104
|
-
value: new Uint8Array(event.data),
|
|
105
|
-
});
|
|
106
|
-
};
|
|
109
|
+
return new Promise((_resolve, _reject) => {
|
|
110
|
+
resolve = _resolve;
|
|
111
|
+
reject = _reject;
|
|
107
112
|
});
|
|
108
113
|
},
|
|
109
114
|
}),
|
|
@@ -2,7 +2,7 @@ import { EventStreamCodec } from "@aws-sdk/eventstream-codec";
|
|
|
2
2
|
import { getEventSigningTransformStream } from "./get-event-signing-stream";
|
|
3
3
|
export class EventStreamPayloadHandler {
|
|
4
4
|
constructor(options) {
|
|
5
|
-
this.
|
|
5
|
+
this.messageSigner = options.messageSigner;
|
|
6
6
|
this.eventStreamCodec = new EventStreamCodec(options.utf8Encoder, options.utf8Decoder);
|
|
7
7
|
}
|
|
8
8
|
async handle(next, args, context = {}) {
|
|
@@ -23,7 +23,7 @@ export class EventStreamPayloadHandler {
|
|
|
23
23
|
}
|
|
24
24
|
const match = (headers["authorization"] || "").match(/Signature=([\w]+)$/);
|
|
25
25
|
const priorSignature = (match || [])[1] || (query && query["X-Amz-Signature"]) || "";
|
|
26
|
-
const signingStream = getEventSigningTransformStream(priorSignature, await this.
|
|
26
|
+
const signingStream = getEventSigningTransformStream(priorSignature, await this.messageSigner(), this.eventStreamCodec);
|
|
27
27
|
const signedPayload = payload.pipeThrough(signingStream);
|
|
28
28
|
signedPayload.pipeThrough(placeHolderStream);
|
|
29
29
|
return result;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { fromHex } from "@aws-sdk/util-hex-encoding";
|
|
2
|
-
export const getEventSigningTransformStream = (initialSignature,
|
|
2
|
+
export const getEventSigningTransformStream = (initialSignature, messageSigner, eventStreamCodec) => {
|
|
3
3
|
let priorSignature = initialSignature;
|
|
4
4
|
const transformer = {
|
|
5
5
|
start() { },
|
|
@@ -9,20 +9,22 @@ export const getEventSigningTransformStream = (initialSignature, eventSigner, ev
|
|
|
9
9
|
const dateHeader = {
|
|
10
10
|
":date": { type: "timestamp", value: now },
|
|
11
11
|
};
|
|
12
|
-
const
|
|
13
|
-
|
|
14
|
-
|
|
12
|
+
const signedMessage = await messageSigner.sign({
|
|
13
|
+
message: {
|
|
14
|
+
body: chunk,
|
|
15
|
+
headers: dateHeader,
|
|
16
|
+
},
|
|
17
|
+
priorSignature: priorSignature,
|
|
15
18
|
}, {
|
|
16
|
-
priorSignature,
|
|
17
19
|
signingDate: now,
|
|
18
20
|
});
|
|
19
|
-
priorSignature = signature;
|
|
21
|
+
priorSignature = signedMessage.signature;
|
|
20
22
|
const serializedSigned = eventStreamCodec.encode({
|
|
21
23
|
headers: {
|
|
22
24
|
...dateHeader,
|
|
23
25
|
":chunk-signature": {
|
|
24
26
|
type: "binary",
|
|
25
|
-
value: fromHex(signature),
|
|
27
|
+
value: fromHex(signedMessage.signature),
|
|
26
28
|
},
|
|
27
29
|
},
|
|
28
30
|
body: chunk,
|
|
@@ -51,7 +51,7 @@ export class WebSocketFetchHandler {
|
|
|
51
51
|
};
|
|
52
52
|
}
|
|
53
53
|
removeNotUsableSockets(url) {
|
|
54
|
-
this.sockets[url] = this.sockets[url].filter((socket) => ![WebSocket.CLOSING, WebSocket.CLOSED].includes(socket.readyState));
|
|
54
|
+
this.sockets[url] = (this.sockets[url] ?? []).filter((socket) => ![WebSocket.CLOSING, WebSocket.CLOSED].includes(socket.readyState));
|
|
55
55
|
}
|
|
56
56
|
waitForReady(socket, connectionTimeout) {
|
|
57
57
|
return new Promise((resolve, reject) => {
|
|
@@ -71,36 +71,40 @@ export class WebSocketFetchHandler {
|
|
|
71
71
|
}
|
|
72
72
|
connect(socket, data) {
|
|
73
73
|
let streamError = undefined;
|
|
74
|
+
let socketErrorOccurred = false;
|
|
75
|
+
let reject = () => { };
|
|
76
|
+
let resolve = () => { };
|
|
77
|
+
socket.onmessage = (event) => {
|
|
78
|
+
resolve({
|
|
79
|
+
done: false,
|
|
80
|
+
value: new Uint8Array(event.data),
|
|
81
|
+
});
|
|
82
|
+
};
|
|
83
|
+
socket.onerror = (error) => {
|
|
84
|
+
socketErrorOccurred = true;
|
|
85
|
+
socket.close();
|
|
86
|
+
reject(error);
|
|
87
|
+
};
|
|
88
|
+
socket.onclose = () => {
|
|
89
|
+
this.removeNotUsableSockets(socket.url);
|
|
90
|
+
if (socketErrorOccurred)
|
|
91
|
+
return;
|
|
92
|
+
if (streamError) {
|
|
93
|
+
reject(streamError);
|
|
94
|
+
}
|
|
95
|
+
else {
|
|
96
|
+
resolve({
|
|
97
|
+
done: true,
|
|
98
|
+
value: undefined,
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
};
|
|
74
102
|
const outputStream = {
|
|
75
103
|
[Symbol.asyncIterator]: () => ({
|
|
76
104
|
next: () => {
|
|
77
|
-
return new Promise((
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
socketErrorOccurred = true;
|
|
81
|
-
socket.close();
|
|
82
|
-
reject(error);
|
|
83
|
-
};
|
|
84
|
-
socket.onclose = () => {
|
|
85
|
-
this.removeNotUsableSockets(socket.url);
|
|
86
|
-
if (socketErrorOccurred)
|
|
87
|
-
return;
|
|
88
|
-
if (streamError) {
|
|
89
|
-
reject(streamError);
|
|
90
|
-
}
|
|
91
|
-
else {
|
|
92
|
-
resolve({
|
|
93
|
-
done: true,
|
|
94
|
-
value: undefined,
|
|
95
|
-
});
|
|
96
|
-
}
|
|
97
|
-
};
|
|
98
|
-
socket.onmessage = (event) => {
|
|
99
|
-
resolve({
|
|
100
|
-
done: false,
|
|
101
|
-
value: new Uint8Array(event.data),
|
|
102
|
-
});
|
|
103
|
-
};
|
|
105
|
+
return new Promise((_resolve, _reject) => {
|
|
106
|
+
resolve = _resolve;
|
|
107
|
+
reject = _reject;
|
|
104
108
|
});
|
|
105
109
|
},
|
|
106
110
|
}),
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { Decoder, Encoder,
|
|
1
|
+
import { Decoder, Encoder, EventStreamPayloadHandler as IEventStreamPayloadHandler, FinalizeHandler, FinalizeHandlerArguments, FinalizeHandlerOutput, HandlerExecutionContext, MessageSigner, MetadataBearer, Provider } from "@aws-sdk/types";
|
|
2
2
|
export interface EventStreamPayloadHandlerOptions {
|
|
3
|
-
|
|
3
|
+
messageSigner: Provider<MessageSigner>;
|
|
4
4
|
utf8Encoder: Encoder;
|
|
5
5
|
utf8Decoder: Decoder;
|
|
6
6
|
}
|
|
@@ -12,7 +12,7 @@ export interface EventStreamPayloadHandlerOptions {
|
|
|
12
12
|
* 4. Sign the payload after payload stream starting to flow.
|
|
13
13
|
*/
|
|
14
14
|
export declare class EventStreamPayloadHandler implements IEventStreamPayloadHandler {
|
|
15
|
-
private readonly
|
|
15
|
+
private readonly messageSigner;
|
|
16
16
|
private readonly eventStreamCodec;
|
|
17
17
|
constructor(options: EventStreamPayloadHandlerOptions);
|
|
18
18
|
handle<T extends MetadataBearer>(next: FinalizeHandler<any, T>, args: FinalizeHandlerArguments<any>, context?: HandlerExecutionContext): Promise<FinalizeHandlerOutput<T>>;
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { EventStreamCodec } from "@aws-sdk/eventstream-codec";
|
|
2
|
-
import {
|
|
2
|
+
import { MessageSigner } from "@aws-sdk/types";
|
|
3
3
|
/**
|
|
4
4
|
* Get a transform stream that signs the eventstream
|
|
5
5
|
* Implementation replicated from @aws-sdk/eventstream-handler-node::EventSigningStream
|
|
6
6
|
* but modified to be compatible with WHATWG stream interface
|
|
7
7
|
*/
|
|
8
|
-
export declare const getEventSigningTransformStream: (initialSignature: string,
|
|
8
|
+
export declare const getEventSigningTransformStream: (initialSignature: string, messageSigner: MessageSigner, eventStreamCodec: EventStreamCodec) => TransformStream<Uint8Array, Uint8Array>;
|
|
@@ -1,24 +1,24 @@
|
|
|
1
1
|
import {
|
|
2
2
|
Decoder,
|
|
3
3
|
Encoder,
|
|
4
|
-
EventSigner,
|
|
5
4
|
EventStreamPayloadHandler as IEventStreamPayloadHandler,
|
|
6
5
|
FinalizeHandler,
|
|
7
6
|
FinalizeHandlerArguments,
|
|
8
7
|
FinalizeHandlerOutput,
|
|
9
8
|
HandlerExecutionContext,
|
|
9
|
+
MessageSigner,
|
|
10
10
|
MetadataBearer,
|
|
11
11
|
Provider,
|
|
12
12
|
} from "@aws-sdk/types";
|
|
13
13
|
export interface EventStreamPayloadHandlerOptions {
|
|
14
|
-
|
|
14
|
+
messageSigner: Provider<MessageSigner>;
|
|
15
15
|
utf8Encoder: Encoder;
|
|
16
16
|
utf8Decoder: Decoder;
|
|
17
17
|
}
|
|
18
18
|
export declare class EventStreamPayloadHandler
|
|
19
19
|
implements IEventStreamPayloadHandler
|
|
20
20
|
{
|
|
21
|
-
private readonly
|
|
21
|
+
private readonly messageSigner;
|
|
22
22
|
private readonly eventStreamCodec;
|
|
23
23
|
constructor(options: EventStreamPayloadHandlerOptions);
|
|
24
24
|
handle<T extends MetadataBearer>(
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { EventStreamCodec } from "@aws-sdk/eventstream-codec";
|
|
2
|
-
import {
|
|
2
|
+
import { MessageSigner } from "@aws-sdk/types";
|
|
3
3
|
export declare const getEventSigningTransformStream: (
|
|
4
4
|
initialSignature: string,
|
|
5
|
-
|
|
5
|
+
messageSigner: MessageSigner,
|
|
6
6
|
eventStreamCodec: EventStreamCodec
|
|
7
7
|
) => TransformStream<Uint8Array, Uint8Array>;
|