@enkaku/client 0.12.2 → 0.12.3
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/lib/client.d.ts +7 -2
- package/lib/client.d.ts.map +1 -1
- package/lib/client.js +112 -27
- package/lib/error.d.ts +2 -0
- package/lib/error.d.ts.map +1 -1
- package/lib/error.js +10 -0
- package/package.json +5 -5
package/lib/client.d.ts
CHANGED
|
@@ -1,17 +1,22 @@
|
|
|
1
1
|
import { Disposer } from '@enkaku/async';
|
|
2
2
|
import { type Logger } from '@enkaku/log';
|
|
3
|
-
import type { AnyProcedureDefinition, AnyRequestProcedureDefinition, ChannelProcedureDefinition, ClientTransportOf, DataOf, EventProcedureDefinition, ProtocolDefinition, RequestProcedureDefinition, ReturnOf, StreamProcedureDefinition } from '@enkaku/protocol';
|
|
3
|
+
import type { AnyProcedureDefinition, AnyRequestProcedureDefinition, ChannelProcedureDefinition, ClientTransportOf, DataOf, EventProcedureDefinition, ProtocolDefinition, RequestProcedureDefinition, RequestType, ReturnOf, StreamProcedureDefinition } from '@enkaku/protocol';
|
|
4
4
|
import { type TokenSigner } from '@enkaku/token';
|
|
5
5
|
type FilterNever<T> = {
|
|
6
6
|
[K in keyof T as T[K] extends never ? never : K]: T[K];
|
|
7
7
|
};
|
|
8
|
-
export type
|
|
8
|
+
export type RequestMeta = {
|
|
9
|
+
type: RequestType;
|
|
10
|
+
procedure: string;
|
|
11
|
+
};
|
|
12
|
+
export type RequestCall<Result> = Promise<Result> & RequestMeta & {
|
|
9
13
|
id: string;
|
|
10
14
|
abort: (reason?: string) => void;
|
|
11
15
|
signal: AbortSignal;
|
|
12
16
|
};
|
|
13
17
|
export type StreamCall<Receive, Result> = RequestCall<Result> & {
|
|
14
18
|
close: () => void;
|
|
19
|
+
procedure: string;
|
|
15
20
|
readable: ReadableStream<Receive>;
|
|
16
21
|
};
|
|
17
22
|
export type ChannelCall<Receive, Send, Result> = StreamCall<Receive, Result> & {
|
package/lib/client.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAS,MAAM,eAAe,CAAA;AAC/C,OAAO,EAAmB,KAAK,MAAM,EAAE,MAAM,aAAa,CAAA;AAC1D,OAAO,KAAK,EAGV,sBAAsB,EACtB,6BAA6B,EAE7B,0BAA0B,EAC1B,iBAAiB,EACjB,MAAM,EACN,wBAAwB,EACxB,kBAAkB,EAClB,0BAA0B,EAC1B,QAAQ,EACR,yBAAyB,EAC1B,MAAM,kBAAkB,CAAA;AAEzB,OAAO,EAAuB,KAAK,WAAW,EAAE,MAAM,eAAe,CAAA;AAIrE,KAAK,WAAW,CAAC,CAAC,IAAI;KAAG,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,KAAK,GAAG,KAAK,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;CAAE,CAAA;AAEhF,MAAM,MAAM,WAAW,CAAC,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC,GAAG;
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
|
package/lib/client.js
CHANGED
|
@@ -3,9 +3,9 @@ import { getEnkakuLogger } from '@enkaku/log';
|
|
|
3
3
|
import { createPipe, writeTo } from '@enkaku/stream';
|
|
4
4
|
import { createUnsignedToken } from '@enkaku/token';
|
|
5
5
|
import { RequestError } from './error.js';
|
|
6
|
-
function createController(onDone) {
|
|
6
|
+
function createController(meta, onDone) {
|
|
7
7
|
const deferred = defer();
|
|
8
|
-
return Object.assign(new AbortController(), {
|
|
8
|
+
return Object.assign(new AbortController(), meta, {
|
|
9
9
|
result: deferred.promise,
|
|
10
10
|
ok: (value)=>{
|
|
11
11
|
deferred.resolve(value);
|
|
@@ -21,20 +21,20 @@ function createController(onDone) {
|
|
|
21
21
|
}
|
|
22
22
|
});
|
|
23
23
|
}
|
|
24
|
-
function createRequest(
|
|
24
|
+
function createRequest({ controller, sent, ...call }) {
|
|
25
25
|
const abort = (reason)=>{
|
|
26
26
|
void sent.then(()=>{
|
|
27
27
|
controller.abort(reason);
|
|
28
28
|
});
|
|
29
29
|
};
|
|
30
|
-
return Object.assign(sent.then(()=>controller.result), {
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
30
|
+
return Object.assign(sent.then(()=>controller.result), call, {
|
|
31
|
+
type: controller.type,
|
|
32
|
+
procedure: controller.procedure,
|
|
33
|
+
abort
|
|
34
34
|
});
|
|
35
35
|
}
|
|
36
|
-
function createStream(
|
|
37
|
-
const request = createRequest(
|
|
36
|
+
function createStream({ readable, ...requestParams }) {
|
|
37
|
+
const request = createRequest(requestParams);
|
|
38
38
|
return Object.assign(request, {
|
|
39
39
|
close: ()=>request.abort('Close'),
|
|
40
40
|
readable
|
|
@@ -71,6 +71,7 @@ export class Client extends Disposer {
|
|
|
71
71
|
dispose: async (reason)=>{
|
|
72
72
|
this.#abortControllers(reason);
|
|
73
73
|
await this.#transport.dispose(reason);
|
|
74
|
+
this.#logger.debug('disposed');
|
|
74
75
|
}
|
|
75
76
|
});
|
|
76
77
|
this.#createMessage = getCreateMessage(params.signer, params.serverID);
|
|
@@ -99,9 +100,11 @@ export class Client extends Disposer {
|
|
|
99
100
|
}
|
|
100
101
|
const newTransport = this.#handleTransportDisposed?.(this.#transport.signal);
|
|
101
102
|
if (newTransport == null) {
|
|
103
|
+
this.#logger.debug('transport disposed');
|
|
102
104
|
// Abort client if no new transport is provided
|
|
103
105
|
this.abort('TransportDisposed');
|
|
104
106
|
} else {
|
|
107
|
+
this.#logger.debug('using new transport provided by transport disposed handler');
|
|
105
108
|
// Abort running procedures and start using new transport
|
|
106
109
|
this.#abortControllers('TransportDisposed');
|
|
107
110
|
this.#transport = newTransport;
|
|
@@ -123,14 +126,19 @@ export class Client extends Disposer {
|
|
|
123
126
|
if (this.signal.aborted) {
|
|
124
127
|
return;
|
|
125
128
|
}
|
|
129
|
+
this.#logger.debug('failed to read from transport', {
|
|
130
|
+
cause
|
|
131
|
+
});
|
|
126
132
|
const error = new Error('Transport read failed', {
|
|
127
133
|
cause
|
|
128
134
|
});
|
|
129
135
|
const newTransport = this.#handleTransportError?.(error);
|
|
130
136
|
if (newTransport == null) {
|
|
137
|
+
this.#logger.warn('aborting following unhanded transport error');
|
|
131
138
|
// Abort client if no new transport is provided
|
|
132
139
|
this.abort(error);
|
|
133
140
|
} else {
|
|
141
|
+
this.#logger.debug('using new transport provided by transport error handler');
|
|
134
142
|
// Abort running procedures and start using new transport
|
|
135
143
|
this.#abortControllers(error);
|
|
136
144
|
this.#transport = newTransport;
|
|
@@ -147,15 +155,34 @@ export class Client extends Disposer {
|
|
|
147
155
|
}
|
|
148
156
|
switch(msg.payload.typ){
|
|
149
157
|
case 'error':
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
158
|
+
{
|
|
159
|
+
const error = RequestError.fromPayload(msg.payload);
|
|
160
|
+
this.#logger.debug('error reply for {type} {procedure} with ID {rid}', {
|
|
161
|
+
type: controller.type,
|
|
162
|
+
procedure: controller.procedure,
|
|
163
|
+
rid: msg.payload.rid,
|
|
164
|
+
error
|
|
165
|
+
});
|
|
166
|
+
controller.error(error);
|
|
167
|
+
delete this.#controllers[msg.payload.rid];
|
|
168
|
+
break;
|
|
169
|
+
}
|
|
154
170
|
case 'receive':
|
|
171
|
+
this.#logger.trace('receive reply for {type} {procedure} with ID {rid}', {
|
|
172
|
+
type: controller.type,
|
|
173
|
+
procedure: controller.procedure,
|
|
174
|
+
rid: msg.payload.rid,
|
|
175
|
+
receive: msg.payload.val
|
|
176
|
+
});
|
|
155
177
|
void controller.receive?.write(msg.payload.val);
|
|
156
178
|
break;
|
|
157
179
|
case 'result':
|
|
158
|
-
this.#logger.trace('
|
|
180
|
+
this.#logger.trace('result reply for {type} {procedure} with ID {rid}', {
|
|
181
|
+
type: controller.type,
|
|
182
|
+
procedure: controller.procedure,
|
|
183
|
+
rid: msg.payload.rid,
|
|
184
|
+
result: msg.payload.val
|
|
185
|
+
});
|
|
159
186
|
controller.ok(msg.payload.val);
|
|
160
187
|
delete this.#controllers[msg.payload.rid];
|
|
161
188
|
break;
|
|
@@ -178,6 +205,12 @@ export class Client extends Disposer {
|
|
|
178
205
|
]) : controller.signal;
|
|
179
206
|
signal.addEventListener('abort', ()=>{
|
|
180
207
|
const reason = signal.reason.name ?? signal.reason;
|
|
208
|
+
this.#logger.trace('abort {type} {procedure} with ID {rid}', {
|
|
209
|
+
type: controller.type,
|
|
210
|
+
procedure: controller.procedure,
|
|
211
|
+
rid,
|
|
212
|
+
reason
|
|
213
|
+
});
|
|
181
214
|
void this.#write({
|
|
182
215
|
typ: 'abort',
|
|
183
216
|
rid,
|
|
@@ -202,13 +235,17 @@ export class Client extends Disposer {
|
|
|
202
235
|
prc: procedure
|
|
203
236
|
};
|
|
204
237
|
this.#logger.trace('send event {procedure}', {
|
|
205
|
-
procedure
|
|
238
|
+
procedure,
|
|
239
|
+
data: args[0]
|
|
206
240
|
});
|
|
207
241
|
await this.#write(payload);
|
|
208
242
|
}
|
|
209
243
|
request(procedure, ...args) {
|
|
210
244
|
const config = args[0] ?? {};
|
|
211
|
-
const controller = createController(
|
|
245
|
+
const controller = createController({
|
|
246
|
+
type: 'request',
|
|
247
|
+
procedure
|
|
248
|
+
});
|
|
212
249
|
const rid = config.id ?? this.#getRandomID();
|
|
213
250
|
const providedSignal = config?.signal;
|
|
214
251
|
if (providedSignal?.aborted) {
|
|
@@ -216,7 +253,12 @@ export class Client extends Disposer {
|
|
|
216
253
|
procedure,
|
|
217
254
|
rid
|
|
218
255
|
});
|
|
219
|
-
return createRequest(
|
|
256
|
+
return createRequest({
|
|
257
|
+
id: rid,
|
|
258
|
+
controller,
|
|
259
|
+
signal: providedSignal,
|
|
260
|
+
sent: Promise.reject(providedSignal)
|
|
261
|
+
});
|
|
220
262
|
}
|
|
221
263
|
this.#controllers[rid] = controller;
|
|
222
264
|
const prm = config.param;
|
|
@@ -232,17 +274,26 @@ export class Client extends Disposer {
|
|
|
232
274
|
};
|
|
233
275
|
this.#logger.trace('send request {procedure} with ID {rid}', {
|
|
234
276
|
procedure,
|
|
235
|
-
rid
|
|
277
|
+
rid,
|
|
278
|
+
param: prm
|
|
236
279
|
});
|
|
237
280
|
const sent = this.#write(payload);
|
|
238
281
|
const signal = this.#handleSignal(rid, controller, providedSignal);
|
|
239
|
-
return createRequest(
|
|
282
|
+
return createRequest({
|
|
283
|
+
id: rid,
|
|
284
|
+
controller,
|
|
285
|
+
signal,
|
|
286
|
+
sent
|
|
287
|
+
});
|
|
240
288
|
}
|
|
241
289
|
createStream(procedure, ...args) {
|
|
242
290
|
const config = args[0] ?? {};
|
|
243
291
|
const receive = createPipe();
|
|
244
292
|
const writer = receive.writable.getWriter();
|
|
245
|
-
const controller = Object.assign(createController(
|
|
293
|
+
const controller = Object.assign(createController({
|
|
294
|
+
type: 'stream',
|
|
295
|
+
procedure
|
|
296
|
+
}, ()=>writer.close()), {
|
|
246
297
|
receive: writer
|
|
247
298
|
});
|
|
248
299
|
const rid = config.id ?? this.#getRandomID();
|
|
@@ -252,7 +303,13 @@ export class Client extends Disposer {
|
|
|
252
303
|
procedure,
|
|
253
304
|
rid
|
|
254
305
|
});
|
|
255
|
-
return createStream(
|
|
306
|
+
return createStream({
|
|
307
|
+
id: rid,
|
|
308
|
+
controller,
|
|
309
|
+
signal: providedSignal,
|
|
310
|
+
sent: Promise.reject(providedSignal),
|
|
311
|
+
readable: receive.readable
|
|
312
|
+
});
|
|
256
313
|
}
|
|
257
314
|
this.#controllers[rid] = controller;
|
|
258
315
|
const prm = config?.param;
|
|
@@ -268,17 +325,27 @@ export class Client extends Disposer {
|
|
|
268
325
|
};
|
|
269
326
|
this.#logger.trace('create stream {procedure} with ID {rid}', {
|
|
270
327
|
procedure,
|
|
271
|
-
rid
|
|
328
|
+
rid,
|
|
329
|
+
param: prm
|
|
272
330
|
});
|
|
273
331
|
const sent = this.#write(payload);
|
|
274
332
|
const signal = this.#handleSignal(rid, controller, providedSignal);
|
|
275
|
-
return createStream(
|
|
333
|
+
return createStream({
|
|
334
|
+
id: rid,
|
|
335
|
+
controller,
|
|
336
|
+
signal,
|
|
337
|
+
sent,
|
|
338
|
+
readable: receive.readable
|
|
339
|
+
});
|
|
276
340
|
}
|
|
277
341
|
createChannel(procedure, ...args) {
|
|
278
342
|
const config = args[0] ?? {};
|
|
279
343
|
const receive = createPipe();
|
|
280
344
|
const writer = receive.writable.getWriter();
|
|
281
|
-
const controller = Object.assign(createController(
|
|
345
|
+
const controller = Object.assign(createController({
|
|
346
|
+
type: 'channel',
|
|
347
|
+
procedure
|
|
348
|
+
}, ()=>writer.close()), {
|
|
282
349
|
receive: writer
|
|
283
350
|
});
|
|
284
351
|
const rid = config.id ?? this.#getRandomID();
|
|
@@ -290,7 +357,13 @@ export class Client extends Disposer {
|
|
|
290
357
|
});
|
|
291
358
|
// no-op
|
|
292
359
|
const send = async (_val)=>{};
|
|
293
|
-
return Object.assign(createStream(
|
|
360
|
+
return Object.assign(createStream({
|
|
361
|
+
id: rid,
|
|
362
|
+
controller,
|
|
363
|
+
signal: providedSignal,
|
|
364
|
+
sent: Promise.reject(providedSignal),
|
|
365
|
+
readable: receive.readable
|
|
366
|
+
}), {
|
|
294
367
|
send,
|
|
295
368
|
writable: writeTo(send)
|
|
296
369
|
});
|
|
@@ -309,18 +382,30 @@ export class Client extends Disposer {
|
|
|
309
382
|
};
|
|
310
383
|
this.#logger.trace('create channel {procedure} with ID {rid}', {
|
|
311
384
|
procedure,
|
|
312
|
-
rid
|
|
385
|
+
rid,
|
|
386
|
+
param: prm
|
|
313
387
|
});
|
|
314
388
|
const sent = this.#write(payload);
|
|
315
389
|
const signal = this.#handleSignal(rid, controller, providedSignal);
|
|
316
390
|
const send = async (val)=>{
|
|
391
|
+
this.#logger.trace('send value to channel {procedure} with ID {rid}', {
|
|
392
|
+
procedure,
|
|
393
|
+
rid,
|
|
394
|
+
value: val
|
|
395
|
+
});
|
|
317
396
|
await this.#write({
|
|
318
397
|
typ: 'send',
|
|
319
398
|
rid,
|
|
320
399
|
val
|
|
321
400
|
});
|
|
322
401
|
};
|
|
323
|
-
return Object.assign(createStream(
|
|
402
|
+
return Object.assign(createStream({
|
|
403
|
+
id: rid,
|
|
404
|
+
controller,
|
|
405
|
+
signal,
|
|
406
|
+
sent,
|
|
407
|
+
readable: receive.readable
|
|
408
|
+
}), {
|
|
324
409
|
send,
|
|
325
410
|
writable: writeTo(send)
|
|
326
411
|
});
|
package/lib/error.d.ts
CHANGED
|
@@ -11,5 +11,7 @@ export declare class RequestError<Code extends string = string, Data extends Rec
|
|
|
11
11
|
constructor(params: RequestErrorParams<Code, Data>);
|
|
12
12
|
get code(): Code;
|
|
13
13
|
get data(): Data;
|
|
14
|
+
toString(): string;
|
|
15
|
+
toJSON(): ErrorObjectType<Code, Data>;
|
|
14
16
|
}
|
|
15
17
|
//# sourceMappingURL=error.d.ts.map
|
package/lib/error.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"error.d.ts","sourceRoot":"","sources":["../src/error.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAA;AAEzD,MAAM,MAAM,eAAe,CACzB,IAAI,SAAS,MAAM,GAAG,MAAM,EAC5B,IAAI,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,IAC5D;IACF,IAAI,EAAE,IAAI,CAAA;IACV,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,CAAC,EAAE,IAAI,CAAA;CACZ,CAAA;AAED,MAAM,MAAM,kBAAkB,CAC5B,IAAI,SAAS,MAAM,GAAG,MAAM,EAC5B,IAAI,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,IAC5D,YAAY,GAAG,eAAe,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;AAE9C,qBAAa,YAAY,CACrB,IAAI,SAAS,MAAM,GAAG,MAAM,EAC5B,IAAI,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAEhE,SAAQ,KACR,YAAW,eAAe,CAAC,IAAI,EAAE,IAAI,CAAC;;IAEtC,MAAM,CAAC,WAAW,CAChB,IAAI,SAAS,MAAM,GAAG,MAAM,EAC5B,IAAI,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC9D,OAAO,EAAE,iBAAiB,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,YAAY,CAAC,IAAI,EAAE,IAAI,CAAC;gBAWvD,MAAM,EAAE,kBAAkB,CAAC,IAAI,EAAE,IAAI,CAAC;IAOlD,IAAI,IAAI,IAAI,IAAI,CAEf;IAED,IAAI,IAAI,IAAI,IAAI,CAEf;
|
|
1
|
+
{"version":3,"file":"error.d.ts","sourceRoot":"","sources":["../src/error.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAA;AAEzD,MAAM,MAAM,eAAe,CACzB,IAAI,SAAS,MAAM,GAAG,MAAM,EAC5B,IAAI,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,IAC5D;IACF,IAAI,EAAE,IAAI,CAAA;IACV,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,CAAC,EAAE,IAAI,CAAA;CACZ,CAAA;AAED,MAAM,MAAM,kBAAkB,CAC5B,IAAI,SAAS,MAAM,GAAG,MAAM,EAC5B,IAAI,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,IAC5D,YAAY,GAAG,eAAe,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;AAE9C,qBAAa,YAAY,CACrB,IAAI,SAAS,MAAM,GAAG,MAAM,EAC5B,IAAI,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAEhE,SAAQ,KACR,YAAW,eAAe,CAAC,IAAI,EAAE,IAAI,CAAC;;IAEtC,MAAM,CAAC,WAAW,CAChB,IAAI,SAAS,MAAM,GAAG,MAAM,EAC5B,IAAI,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC9D,OAAO,EAAE,iBAAiB,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,YAAY,CAAC,IAAI,EAAE,IAAI,CAAC;gBAWvD,MAAM,EAAE,kBAAkB,CAAC,IAAI,EAAE,IAAI,CAAC;IAOlD,IAAI,IAAI,IAAI,IAAI,CAEf;IAED,IAAI,IAAI,IAAI,IAAI,CAEf;IAED,QAAQ;IAIR,MAAM,IAAI,eAAe,CAAC,IAAI,EAAE,IAAI,CAAC;CAGtC"}
|
package/lib/error.js
CHANGED
|
@@ -20,4 +20,14 @@ export class RequestError extends Error {
|
|
|
20
20
|
get data() {
|
|
21
21
|
return this.#data;
|
|
22
22
|
}
|
|
23
|
+
toString() {
|
|
24
|
+
return `[RequestError] code ${this.#code}: ${this.message}`;
|
|
25
|
+
}
|
|
26
|
+
toJSON() {
|
|
27
|
+
return {
|
|
28
|
+
code: this.#code,
|
|
29
|
+
data: this.#data,
|
|
30
|
+
message: this.message
|
|
31
|
+
};
|
|
32
|
+
}
|
|
23
33
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@enkaku/client",
|
|
3
|
-
"version": "0.12.
|
|
3
|
+
"version": "0.12.3",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"homepage": "https://enkaku.dev",
|
|
6
6
|
"description": "Enkaku RPC client",
|
|
@@ -26,11 +26,11 @@
|
|
|
26
26
|
],
|
|
27
27
|
"sideEffects": false,
|
|
28
28
|
"dependencies": {
|
|
29
|
-
"@enkaku/async": "^0.12.2",
|
|
30
29
|
"@enkaku/execution": "^0.12.3",
|
|
31
|
-
"@enkaku/
|
|
32
|
-
"@enkaku/
|
|
33
|
-
"@enkaku/
|
|
30
|
+
"@enkaku/async": "^0.12.2",
|
|
31
|
+
"@enkaku/stream": "^0.12.4",
|
|
32
|
+
"@enkaku/log": "^0.12.1",
|
|
33
|
+
"@enkaku/token": "^0.12.3"
|
|
34
34
|
},
|
|
35
35
|
"devDependencies": {
|
|
36
36
|
"@enkaku/protocol": "^0.12.1",
|