@milaboratories/pl-client 2.16.12 → 2.16.13
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/core/driver.cjs +1 -1
- package/dist/core/driver.cjs.map +1 -1
- package/dist/core/driver.js +1 -1
- package/dist/core/driver.js.map +1 -1
- package/dist/core/ll_client.cjs +17 -7
- package/dist/core/ll_client.cjs.map +1 -1
- package/dist/core/ll_client.d.ts.map +1 -1
- package/dist/core/ll_client.js +17 -7
- package/dist/core/ll_client.js.map +1 -1
- package/dist/core/websocket_stream.cjs +126 -129
- package/dist/core/websocket_stream.cjs.map +1 -1
- package/dist/core/websocket_stream.d.ts +29 -22
- package/dist/core/websocket_stream.d.ts.map +1 -1
- package/dist/core/websocket_stream.js +127 -130
- package/dist/core/websocket_stream.js.map +1 -1
- package/dist/proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/api.cjs +136 -0
- package/dist/proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/api.cjs.map +1 -1
- package/dist/proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/api.d.ts +75 -1
- package/dist/proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/api.d.ts.map +1 -1
- package/dist/proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/api.js +135 -1
- package/dist/proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/api.js.map +1 -1
- package/dist/proto-rest/index.cjs +16 -2
- package/dist/proto-rest/index.cjs.map +1 -1
- package/dist/proto-rest/index.d.ts.map +1 -1
- package/dist/proto-rest/index.js +16 -2
- package/dist/proto-rest/index.js.map +1 -1
- package/package.json +6 -6
- package/src/core/driver.ts +1 -1
- package/src/core/ll_client.ts +25 -8
- package/src/core/websocket_stream.test.ts +19 -8
- package/src/core/websocket_stream.ts +154 -166
- package/src/proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/api.ts +179 -1
- package/src/proto-rest/index.ts +17 -2
|
@@ -39,8 +39,11 @@ import { Status } from "../../../../googleapis/googleapis/google/rpc/status";
|
|
|
39
39
|
* - client reads server responses for each messages sent. Client can batch
|
|
40
40
|
* writes and reads: e.g. send 3 messages, read 2 responses, send one
|
|
41
41
|
* more, read 2;
|
|
42
|
-
* - to finish communication client sends 'commit' message and reads last
|
|
42
|
+
* - to finish communication client sends 'commit' or 'discard' message and reads last
|
|
43
43
|
* response;
|
|
44
|
+
* - to make server interrupt communication, client sends 'stream_close' message and reads to the last
|
|
45
|
+
* server response. This allows graceful stream close, waiting for all queued server responses
|
|
46
|
+
* to be sent before closing the stream.
|
|
44
47
|
*
|
|
45
48
|
* Detailed description of the process.
|
|
46
49
|
*
|
|
@@ -117,6 +120,10 @@ import { Status } from "../../../../googleapis/googleapis/google/rpc/status";
|
|
|
117
120
|
* - server stops reading client stream and does the commit/discard action.
|
|
118
121
|
* - once transaction is closed, server sends the result to client and
|
|
119
122
|
* closes server stream.
|
|
123
|
+
* - client stream reading may be interrupted by special 'stream_close' message, which
|
|
124
|
+
* causes transaction automatic discard and does not produce additional reply message.
|
|
125
|
+
* This 'stream_close' message also does not require any 'request_id' value and does not
|
|
126
|
+
* produce any response from server side.
|
|
120
127
|
*
|
|
121
128
|
* At this point the transaction over gRPC is considered as finalized, all
|
|
122
129
|
* local IDs generated within the transaction are no longer valid.
|
|
@@ -171,6 +178,22 @@ export interface TxAPI_ClientMessage {
|
|
|
171
178
|
* @generated from protobuf field: MiLaboratories.PL.API.TxAPI.Discard.Request tx_discard = 13
|
|
172
179
|
*/
|
|
173
180
|
txDiscard: TxAPI_Discard_Request; // discard the transaction and close the stream
|
|
181
|
+
} | {
|
|
182
|
+
oneofKind: "streamClose";
|
|
183
|
+
/**
|
|
184
|
+
* Interrupt the transaction network stream on server side.
|
|
185
|
+
*
|
|
186
|
+
* This allows to gracefully close network connection and discard the associated transaction,
|
|
187
|
+
* ensuring all pending server responses are sent to the client before closing.
|
|
188
|
+
* We use this in RO transactions to imitate the feature of 'half-open' connection
|
|
189
|
+
* available in pure gRPC, when we work with WebSockets.
|
|
190
|
+
* Pure gRPC uses 'end of client messages stream' as a criteria for graceful discard.
|
|
191
|
+
* Pure WebSocket does not allow this, breaking entire connection at once. stream_close helps to get
|
|
192
|
+
* behaviour as we have for gRPC.
|
|
193
|
+
*
|
|
194
|
+
* @generated from protobuf field: MiLaboratories.PL.API.TxAPI.CloseStream.Request stream_close = 14
|
|
195
|
+
*/
|
|
196
|
+
streamClose: TxAPI_CloseStream_Request; // ask server to send all pending messages and close the stream
|
|
174
197
|
} | {
|
|
175
198
|
oneofKind: "resourceCreateRoot";
|
|
176
199
|
/**
|
|
@@ -535,6 +558,12 @@ export interface TxAPI_ServerMessage {
|
|
|
535
558
|
* @generated from protobuf field: MiLaboratories.PL.API.TxAPI.Discard.Response tx_discard = 13
|
|
536
559
|
*/
|
|
537
560
|
txDiscard: TxAPI_Discard_Response;
|
|
561
|
+
} | {
|
|
562
|
+
oneofKind: "streamClose";
|
|
563
|
+
/**
|
|
564
|
+
* @generated from protobuf field: MiLaboratories.PL.API.TxAPI.CloseStream.Response stream_close = 14
|
|
565
|
+
*/
|
|
566
|
+
streamClose: TxAPI_CloseStream_Response;
|
|
538
567
|
} | {
|
|
539
568
|
oneofKind: "resourceCreateRoot";
|
|
540
569
|
/**
|
|
@@ -979,6 +1008,21 @@ export interface TxAPI_Discard_Request {
|
|
|
979
1008
|
*/
|
|
980
1009
|
export interface TxAPI_Discard_Response {
|
|
981
1010
|
}
|
|
1011
|
+
/**
|
|
1012
|
+
* @generated from protobuf message MiLaboratories.PL.API.TxAPI.CloseStream
|
|
1013
|
+
*/
|
|
1014
|
+
export interface TxAPI_CloseStream {
|
|
1015
|
+
}
|
|
1016
|
+
/**
|
|
1017
|
+
* @generated from protobuf message MiLaboratories.PL.API.TxAPI.CloseStream.Request
|
|
1018
|
+
*/
|
|
1019
|
+
export interface TxAPI_CloseStream_Request {
|
|
1020
|
+
}
|
|
1021
|
+
/**
|
|
1022
|
+
* @generated from protobuf message MiLaboratories.PL.API.TxAPI.CloseStream.Response
|
|
1023
|
+
*/
|
|
1024
|
+
export interface TxAPI_CloseStream_Response {
|
|
1025
|
+
}
|
|
982
1026
|
/**
|
|
983
1027
|
* @generated from protobuf message MiLaboratories.PL.API.TxAPI.Sync
|
|
984
1028
|
*/
|
|
@@ -3152,6 +3196,7 @@ class TxAPI_ClientMessage$Type extends MessageType<TxAPI_ClientMessage> {
|
|
|
3152
3196
|
{ no: 11, name: "tx_open", kind: "message", oneof: "request", T: () => TxAPI_Open_Request },
|
|
3153
3197
|
{ no: 12, name: "tx_commit", kind: "message", oneof: "request", T: () => TxAPI_Commit_Request },
|
|
3154
3198
|
{ no: 13, name: "tx_discard", kind: "message", oneof: "request", T: () => TxAPI_Discard_Request },
|
|
3199
|
+
{ no: 14, name: "stream_close", kind: "message", oneof: "request", T: () => TxAPI_CloseStream_Request },
|
|
3155
3200
|
{ no: 58, name: "resource_create_root", kind: "message", oneof: "request", T: () => ResourceAPI_CreateRoot_Request },
|
|
3156
3201
|
{ no: 57, name: "resource_remove", kind: "message", oneof: "request", T: () => ResourceAPI_Remove_Request },
|
|
3157
3202
|
{ no: 51, name: "resource_create_struct", kind: "message", oneof: "request", T: () => ResourceAPI_CreateStruct_Request },
|
|
@@ -3242,6 +3287,12 @@ class TxAPI_ClientMessage$Type extends MessageType<TxAPI_ClientMessage> {
|
|
|
3242
3287
|
txDiscard: TxAPI_Discard_Request.internalBinaryRead(reader, reader.uint32(), options, (message.request as any).txDiscard)
|
|
3243
3288
|
};
|
|
3244
3289
|
break;
|
|
3290
|
+
case /* MiLaboratories.PL.API.TxAPI.CloseStream.Request stream_close */ 14:
|
|
3291
|
+
message.request = {
|
|
3292
|
+
oneofKind: "streamClose",
|
|
3293
|
+
streamClose: TxAPI_CloseStream_Request.internalBinaryRead(reader, reader.uint32(), options, (message.request as any).streamClose)
|
|
3294
|
+
};
|
|
3295
|
+
break;
|
|
3245
3296
|
case /* MiLaboratories.PL.API.ResourceAPI.CreateRoot.Request resource_create_root */ 58:
|
|
3246
3297
|
message.request = {
|
|
3247
3298
|
oneofKind: "resourceCreateRoot",
|
|
@@ -3590,6 +3641,9 @@ class TxAPI_ClientMessage$Type extends MessageType<TxAPI_ClientMessage> {
|
|
|
3590
3641
|
/* MiLaboratories.PL.API.TxAPI.Discard.Request tx_discard = 13; */
|
|
3591
3642
|
if (message.request.oneofKind === "txDiscard")
|
|
3592
3643
|
TxAPI_Discard_Request.internalBinaryWrite(message.request.txDiscard, writer.tag(13, WireType.LengthDelimited).fork(), options).join();
|
|
3644
|
+
/* MiLaboratories.PL.API.TxAPI.CloseStream.Request stream_close = 14; */
|
|
3645
|
+
if (message.request.oneofKind === "streamClose")
|
|
3646
|
+
TxAPI_CloseStream_Request.internalBinaryWrite(message.request.streamClose, writer.tag(14, WireType.LengthDelimited).fork(), options).join();
|
|
3593
3647
|
/* MiLaboratories.PL.API.ResourceAPI.CreateStruct.Request resource_create_struct = 51; */
|
|
3594
3648
|
if (message.request.oneofKind === "resourceCreateStruct")
|
|
3595
3649
|
ResourceAPI_CreateStruct_Request.internalBinaryWrite(message.request.resourceCreateStruct, writer.tag(51, WireType.LengthDelimited).fork(), options).join();
|
|
@@ -3771,6 +3825,7 @@ class TxAPI_ServerMessage$Type extends MessageType<TxAPI_ServerMessage> {
|
|
|
3771
3825
|
{ no: 11, name: "tx_open", kind: "message", oneof: "response", T: () => TxAPI_Open_Response },
|
|
3772
3826
|
{ no: 12, name: "tx_commit", kind: "message", oneof: "response", T: () => TxAPI_Commit_Response },
|
|
3773
3827
|
{ no: 13, name: "tx_discard", kind: "message", oneof: "response", T: () => TxAPI_Discard_Response },
|
|
3828
|
+
{ no: 14, name: "stream_close", kind: "message", oneof: "response", T: () => TxAPI_CloseStream_Response },
|
|
3774
3829
|
{ no: 58, name: "resource_create_root", kind: "message", oneof: "response", T: () => ResourceAPI_CreateRoot_Response },
|
|
3775
3830
|
{ no: 57, name: "resource_remove", kind: "message", oneof: "response", T: () => ResourceAPI_Remove_Response },
|
|
3776
3831
|
{ no: 51, name: "resource_create_struct", kind: "message", oneof: "response", T: () => ResourceAPI_CreateStruct_Response },
|
|
@@ -3865,6 +3920,12 @@ class TxAPI_ServerMessage$Type extends MessageType<TxAPI_ServerMessage> {
|
|
|
3865
3920
|
txDiscard: TxAPI_Discard_Response.internalBinaryRead(reader, reader.uint32(), options, (message.response as any).txDiscard)
|
|
3866
3921
|
};
|
|
3867
3922
|
break;
|
|
3923
|
+
case /* MiLaboratories.PL.API.TxAPI.CloseStream.Response stream_close */ 14:
|
|
3924
|
+
message.response = {
|
|
3925
|
+
oneofKind: "streamClose",
|
|
3926
|
+
streamClose: TxAPI_CloseStream_Response.internalBinaryRead(reader, reader.uint32(), options, (message.response as any).streamClose)
|
|
3927
|
+
};
|
|
3928
|
+
break;
|
|
3868
3929
|
case /* MiLaboratories.PL.API.ResourceAPI.CreateRoot.Response resource_create_root */ 58:
|
|
3869
3930
|
message.response = {
|
|
3870
3931
|
oneofKind: "resourceCreateRoot",
|
|
@@ -4222,6 +4283,9 @@ class TxAPI_ServerMessage$Type extends MessageType<TxAPI_ServerMessage> {
|
|
|
4222
4283
|
/* MiLaboratories.PL.API.TxAPI.Discard.Response tx_discard = 13; */
|
|
4223
4284
|
if (message.response.oneofKind === "txDiscard")
|
|
4224
4285
|
TxAPI_Discard_Response.internalBinaryWrite(message.response.txDiscard, writer.tag(13, WireType.LengthDelimited).fork(), options).join();
|
|
4286
|
+
/* MiLaboratories.PL.API.TxAPI.CloseStream.Response stream_close = 14; */
|
|
4287
|
+
if (message.response.oneofKind === "streamClose")
|
|
4288
|
+
TxAPI_CloseStream_Response.internalBinaryWrite(message.response.streamClose, writer.tag(14, WireType.LengthDelimited).fork(), options).join();
|
|
4225
4289
|
/* MiLaboratories.PL.API.ResourceAPI.CreateStruct.Response resource_create_struct = 51; */
|
|
4226
4290
|
if (message.response.oneofKind === "resourceCreateStruct")
|
|
4227
4291
|
ResourceAPI_CreateStruct_Response.internalBinaryWrite(message.response.resourceCreateStruct, writer.tag(51, WireType.LengthDelimited).fork(), options).join();
|
|
@@ -4842,6 +4906,120 @@ class TxAPI_Discard_Response$Type extends MessageType<TxAPI_Discard_Response> {
|
|
|
4842
4906
|
*/
|
|
4843
4907
|
export const TxAPI_Discard_Response = new TxAPI_Discard_Response$Type();
|
|
4844
4908
|
// @generated message type with reflection information, may provide speed optimized methods
|
|
4909
|
+
class TxAPI_CloseStream$Type extends MessageType<TxAPI_CloseStream> {
|
|
4910
|
+
constructor() {
|
|
4911
|
+
super("MiLaboratories.PL.API.TxAPI.CloseStream", []);
|
|
4912
|
+
}
|
|
4913
|
+
create(value?: PartialMessage<TxAPI_CloseStream>): TxAPI_CloseStream {
|
|
4914
|
+
const message = globalThis.Object.create((this.messagePrototype!));
|
|
4915
|
+
if (value !== undefined)
|
|
4916
|
+
reflectionMergePartial<TxAPI_CloseStream>(this, message, value);
|
|
4917
|
+
return message;
|
|
4918
|
+
}
|
|
4919
|
+
internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: TxAPI_CloseStream): TxAPI_CloseStream {
|
|
4920
|
+
let message = target ?? this.create(), end = reader.pos + length;
|
|
4921
|
+
while (reader.pos < end) {
|
|
4922
|
+
let [fieldNo, wireType] = reader.tag();
|
|
4923
|
+
switch (fieldNo) {
|
|
4924
|
+
default:
|
|
4925
|
+
let u = options.readUnknownField;
|
|
4926
|
+
if (u === "throw")
|
|
4927
|
+
throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);
|
|
4928
|
+
let d = reader.skip(wireType);
|
|
4929
|
+
if (u !== false)
|
|
4930
|
+
(u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);
|
|
4931
|
+
}
|
|
4932
|
+
}
|
|
4933
|
+
return message;
|
|
4934
|
+
}
|
|
4935
|
+
internalBinaryWrite(message: TxAPI_CloseStream, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter {
|
|
4936
|
+
let u = options.writeUnknownFields;
|
|
4937
|
+
if (u !== false)
|
|
4938
|
+
(u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);
|
|
4939
|
+
return writer;
|
|
4940
|
+
}
|
|
4941
|
+
}
|
|
4942
|
+
/**
|
|
4943
|
+
* @generated MessageType for protobuf message MiLaboratories.PL.API.TxAPI.CloseStream
|
|
4944
|
+
*/
|
|
4945
|
+
export const TxAPI_CloseStream = new TxAPI_CloseStream$Type();
|
|
4946
|
+
// @generated message type with reflection information, may provide speed optimized methods
|
|
4947
|
+
class TxAPI_CloseStream_Request$Type extends MessageType<TxAPI_CloseStream_Request> {
|
|
4948
|
+
constructor() {
|
|
4949
|
+
super("MiLaboratories.PL.API.TxAPI.CloseStream.Request", []);
|
|
4950
|
+
}
|
|
4951
|
+
create(value?: PartialMessage<TxAPI_CloseStream_Request>): TxAPI_CloseStream_Request {
|
|
4952
|
+
const message = globalThis.Object.create((this.messagePrototype!));
|
|
4953
|
+
if (value !== undefined)
|
|
4954
|
+
reflectionMergePartial<TxAPI_CloseStream_Request>(this, message, value);
|
|
4955
|
+
return message;
|
|
4956
|
+
}
|
|
4957
|
+
internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: TxAPI_CloseStream_Request): TxAPI_CloseStream_Request {
|
|
4958
|
+
let message = target ?? this.create(), end = reader.pos + length;
|
|
4959
|
+
while (reader.pos < end) {
|
|
4960
|
+
let [fieldNo, wireType] = reader.tag();
|
|
4961
|
+
switch (fieldNo) {
|
|
4962
|
+
default:
|
|
4963
|
+
let u = options.readUnknownField;
|
|
4964
|
+
if (u === "throw")
|
|
4965
|
+
throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);
|
|
4966
|
+
let d = reader.skip(wireType);
|
|
4967
|
+
if (u !== false)
|
|
4968
|
+
(u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);
|
|
4969
|
+
}
|
|
4970
|
+
}
|
|
4971
|
+
return message;
|
|
4972
|
+
}
|
|
4973
|
+
internalBinaryWrite(message: TxAPI_CloseStream_Request, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter {
|
|
4974
|
+
let u = options.writeUnknownFields;
|
|
4975
|
+
if (u !== false)
|
|
4976
|
+
(u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);
|
|
4977
|
+
return writer;
|
|
4978
|
+
}
|
|
4979
|
+
}
|
|
4980
|
+
/**
|
|
4981
|
+
* @generated MessageType for protobuf message MiLaboratories.PL.API.TxAPI.CloseStream.Request
|
|
4982
|
+
*/
|
|
4983
|
+
export const TxAPI_CloseStream_Request = new TxAPI_CloseStream_Request$Type();
|
|
4984
|
+
// @generated message type with reflection information, may provide speed optimized methods
|
|
4985
|
+
class TxAPI_CloseStream_Response$Type extends MessageType<TxAPI_CloseStream_Response> {
|
|
4986
|
+
constructor() {
|
|
4987
|
+
super("MiLaboratories.PL.API.TxAPI.CloseStream.Response", []);
|
|
4988
|
+
}
|
|
4989
|
+
create(value?: PartialMessage<TxAPI_CloseStream_Response>): TxAPI_CloseStream_Response {
|
|
4990
|
+
const message = globalThis.Object.create((this.messagePrototype!));
|
|
4991
|
+
if (value !== undefined)
|
|
4992
|
+
reflectionMergePartial<TxAPI_CloseStream_Response>(this, message, value);
|
|
4993
|
+
return message;
|
|
4994
|
+
}
|
|
4995
|
+
internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: TxAPI_CloseStream_Response): TxAPI_CloseStream_Response {
|
|
4996
|
+
let message = target ?? this.create(), end = reader.pos + length;
|
|
4997
|
+
while (reader.pos < end) {
|
|
4998
|
+
let [fieldNo, wireType] = reader.tag();
|
|
4999
|
+
switch (fieldNo) {
|
|
5000
|
+
default:
|
|
5001
|
+
let u = options.readUnknownField;
|
|
5002
|
+
if (u === "throw")
|
|
5003
|
+
throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);
|
|
5004
|
+
let d = reader.skip(wireType);
|
|
5005
|
+
if (u !== false)
|
|
5006
|
+
(u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);
|
|
5007
|
+
}
|
|
5008
|
+
}
|
|
5009
|
+
return message;
|
|
5010
|
+
}
|
|
5011
|
+
internalBinaryWrite(message: TxAPI_CloseStream_Response, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter {
|
|
5012
|
+
let u = options.writeUnknownFields;
|
|
5013
|
+
if (u !== false)
|
|
5014
|
+
(u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);
|
|
5015
|
+
return writer;
|
|
5016
|
+
}
|
|
5017
|
+
}
|
|
5018
|
+
/**
|
|
5019
|
+
* @generated MessageType for protobuf message MiLaboratories.PL.API.TxAPI.CloseStream.Response
|
|
5020
|
+
*/
|
|
5021
|
+
export const TxAPI_CloseStream_Response = new TxAPI_CloseStream_Response$Type();
|
|
5022
|
+
// @generated message type with reflection information, may provide speed optimized methods
|
|
4845
5023
|
class TxAPI_Sync$Type extends MessageType<TxAPI_Sync> {
|
|
4846
5024
|
constructor() {
|
|
4847
5025
|
super("MiLaboratories.PL.API.TxAPI.Sync", []);
|
package/src/proto-rest/index.ts
CHANGED
|
@@ -25,9 +25,24 @@ export function createClient<Paths extends {}>(opts: RestClientConfig): Client<P
|
|
|
25
25
|
const client = createOpenApiClient<Paths>({
|
|
26
26
|
baseUrl: `${scheme}${opts.hostAndPort}`,
|
|
27
27
|
fetch: (input: Request): Promise<Response> => {
|
|
28
|
-
|
|
29
|
-
|
|
28
|
+
// If body has already been consumed, clone the request
|
|
29
|
+
const request = input.bodyUsed ? input.clone() : input;
|
|
30
|
+
|
|
31
|
+
return undiciFetch(request.url, {
|
|
32
|
+
body: request.body,
|
|
33
|
+
cache: request.cache,
|
|
34
|
+
credentials: request.credentials,
|
|
30
35
|
dispatcher: opts.dispatcher,
|
|
36
|
+
duplex: request.duplex,
|
|
37
|
+
headers: request.headers,
|
|
38
|
+
integrity: request.integrity,
|
|
39
|
+
keepalive: request.keepalive,
|
|
40
|
+
method: request.method,
|
|
41
|
+
mode: request.mode,
|
|
42
|
+
redirect: request.redirect,
|
|
43
|
+
referrer: request.referrer,
|
|
44
|
+
referrerPolicy: request.referrerPolicy,
|
|
45
|
+
signal: request.signal,
|
|
31
46
|
});
|
|
32
47
|
},
|
|
33
48
|
});
|