@enkaku/client 0.2.2 → 0.3.1
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 +31 -7
- package/lib/client.d.ts.map +1 -1
- package/lib/client.js +90 -48
- package/package.json +7 -6
package/lib/client.d.ts
CHANGED
|
@@ -1,16 +1,26 @@
|
|
|
1
|
+
import { type Signer } from '@enkaku/jwt';
|
|
1
2
|
import type { AnyDefinitions, ChannelDefinition, ClientTransportOf, EventDefinition, RequestDefinition, StreamDefinition } from '@enkaku/protocol';
|
|
2
|
-
import {
|
|
3
|
-
|
|
3
|
+
import type { Disposer } from '@enkaku/util';
|
|
4
|
+
import { Result } from 'typescript-result';
|
|
5
|
+
import { ABORTED } from './constants.js';
|
|
6
|
+
import { RequestError } from './error.js';
|
|
7
|
+
export type InvokeError = typeof ABORTED | RequestError;
|
|
8
|
+
export type InvokeResult<T> = Result<T, InvokeError>;
|
|
9
|
+
export type InvokeReturn<ResultValue> = {
|
|
4
10
|
abort: (reason?: any) => void;
|
|
5
11
|
id: string;
|
|
6
|
-
result: Promise<Result
|
|
12
|
+
result: Promise<Result<ResultValue, InvokeError>>;
|
|
7
13
|
};
|
|
8
14
|
export type InvokeStreamReturn<Receive, Result> = InvokeReturn<Result> & {
|
|
9
|
-
receive:
|
|
15
|
+
receive: ReadableStream<Receive>;
|
|
10
16
|
};
|
|
11
17
|
export type InvokeChannelReturn<Send, Receive, Result> = InvokeStreamReturn<Receive, Result> & {
|
|
12
18
|
send: (value: Send) => Promise<void>;
|
|
13
19
|
};
|
|
20
|
+
export type Invocation<ResultValue, Return> = Promise<Return> & {
|
|
21
|
+
result: Promise<InvokeResult<ResultValue>>;
|
|
22
|
+
toValue(): Promise<ResultValue>;
|
|
23
|
+
};
|
|
14
24
|
export type EventDefinitionsType<Definitions extends AnyDefinitions, Commands extends keyof Definitions & string = keyof Definitions & string> = {
|
|
15
25
|
[Command in Commands]: Definitions[Command] extends EventDefinition<infer Data> ? {
|
|
16
26
|
Argument: Data extends undefined ? never : Data;
|
|
@@ -20,6 +30,7 @@ export type EventDefinitionsType<Definitions extends AnyDefinitions, Commands ex
|
|
|
20
30
|
export type RequestDefinitionsType<Definitions extends AnyDefinitions, Commands extends keyof Definitions & string = keyof Definitions & string> = {
|
|
21
31
|
[Command in Commands]: Definitions[Command] extends RequestDefinition<infer Params, infer Result> ? {
|
|
22
32
|
Argument: Params extends undefined ? never : Params;
|
|
33
|
+
Result: Result;
|
|
23
34
|
Return: InvokeReturn<Result>;
|
|
24
35
|
} : never;
|
|
25
36
|
};
|
|
@@ -27,6 +38,7 @@ export type StreamDefinitionsType<Definitions extends AnyDefinitions, Commands e
|
|
|
27
38
|
[Command in Commands]: Definitions[Command] extends StreamDefinition<infer Params, infer Receive, infer Result> ? {
|
|
28
39
|
Argument: Params extends undefined ? never : Params;
|
|
29
40
|
Receive: Receive;
|
|
41
|
+
Result: Result;
|
|
30
42
|
Return: InvokeStreamReturn<Receive, Result>;
|
|
31
43
|
} : never;
|
|
32
44
|
};
|
|
@@ -34,6 +46,7 @@ export type ChannelDefinitionsType<Definitions extends AnyDefinitions, Commands
|
|
|
34
46
|
[Command in Commands]: Definitions[Command] extends ChannelDefinition<infer Params, infer Send, infer Receive, infer Result> ? {
|
|
35
47
|
Argument: Params extends undefined ? never : Params;
|
|
36
48
|
Receive: Receive;
|
|
49
|
+
Result: Result;
|
|
37
50
|
Return: InvokeChannelReturn<Send, Receive, Result>;
|
|
38
51
|
Send: Send;
|
|
39
52
|
} : never;
|
|
@@ -46,8 +59,18 @@ export type ClientDefinitionsType<Definitions extends AnyDefinitions> = {
|
|
|
46
59
|
};
|
|
47
60
|
export type InvokeArgumentType<Definitions extends AnyDefinitions, Name extends keyof Definitions & string = keyof Definitions & string> = Definitions[Name] extends EventDefinition<infer Data> ? Data : Definitions[Name] extends RequestDefinition<infer Params> ? Params : Definitions[Name] extends StreamDefinition<infer Params> ? Params : Definitions[Name] extends ChannelDefinition<infer Params> ? Params : never;
|
|
48
61
|
export type InvokeReturnType<Definitions extends AnyDefinitions, Name extends keyof Definitions & string> = Definitions[Name] extends EventDefinition<infer Data> ? undefined : Definitions[Name] extends RequestDefinition<infer Params, infer Result> ? InvokeReturn<Result> : Definitions[Name] extends StreamDefinition<infer Params, infer Receive, infer Result> ? InvokeStreamReturn<Receive, Result> : Definitions[Name] extends ChannelDefinition<infer Params, infer Send, infer Receive, infer Result> ? InvokeChannelReturn<Send, Receive, Result> : never;
|
|
62
|
+
type RequestController<ResultValue> = AbortController & {
|
|
63
|
+
result: Promise<InvokeResult<ResultValue>>;
|
|
64
|
+
ok: (value: ResultValue) => void;
|
|
65
|
+
error: (error: RequestError) => void;
|
|
66
|
+
aborted: () => void;
|
|
67
|
+
};
|
|
68
|
+
export declare function createController<T>(): RequestController<T>;
|
|
69
|
+
export declare function createInvovation<ResultValue, Return>(controller: RequestController<ResultValue>, promise: Promise<Return>): Invocation<ResultValue, Return>;
|
|
49
70
|
export type ClientParams<Definitions extends AnyDefinitions> = {
|
|
50
71
|
transport: ClientTransportOf<Definitions>;
|
|
72
|
+
serverID?: string;
|
|
73
|
+
signer?: Signer;
|
|
51
74
|
};
|
|
52
75
|
export declare class Client<Definitions extends AnyDefinitions, ClientDefinitions extends ClientDefinitionsType<Definitions> = ClientDefinitionsType<Definitions>> implements Disposer {
|
|
53
76
|
#private;
|
|
@@ -55,8 +78,9 @@ export declare class Client<Definitions extends AnyDefinitions, ClientDefinition
|
|
|
55
78
|
get disposed(): Promise<void>;
|
|
56
79
|
dispose(): Promise<void>;
|
|
57
80
|
sendEvent<Command extends keyof ClientDefinitions['Events'] & string, T extends ClientDefinitions['Events'][Command] = ClientDefinitions['Events'][Command]>(command: Command, ...args: T['Argument'] extends never ? [] : [T['Argument']]): Promise<void>;
|
|
58
|
-
request<Command extends keyof ClientDefinitions['Requests'] & string, T extends ClientDefinitions['Requests'][Command] = ClientDefinitions['Requests'][Command]>(command: Command, ...args: T['Argument'] extends never ? [] : [T['Argument']]):
|
|
59
|
-
createStream<Command extends keyof ClientDefinitions['Streams'] & string, T extends ClientDefinitions['Streams'][Command] = ClientDefinitions['Streams'][Command]>(command: Command, ...args: T['Argument'] extends never ? [] : [T['Argument']]):
|
|
60
|
-
createChannel<Command extends keyof ClientDefinitions['Channels'] & string, T extends ClientDefinitions['Channels'][Command] = ClientDefinitions['Channels'][Command]>(command: Command, ...args: T['Argument'] extends never ? [] : [T['Argument']]):
|
|
81
|
+
request<Command extends keyof ClientDefinitions['Requests'] & string, T extends ClientDefinitions['Requests'][Command] = ClientDefinitions['Requests'][Command]>(command: Command, ...args: T['Argument'] extends never ? [] : [T['Argument']]): Invocation<T['Result'], T['Return']>;
|
|
82
|
+
createStream<Command extends keyof ClientDefinitions['Streams'] & string, T extends ClientDefinitions['Streams'][Command] = ClientDefinitions['Streams'][Command]>(command: Command, ...args: T['Argument'] extends never ? [] : [T['Argument']]): Invocation<T['Result'], T['Return']>;
|
|
83
|
+
createChannel<Command extends keyof ClientDefinitions['Channels'] & string, T extends ClientDefinitions['Channels'][Command] = ClientDefinitions['Channels'][Command]>(command: Command, ...args: T['Argument'] extends never ? [] : [T['Argument']]): Invocation<T['Result'], T['Return']>;
|
|
61
84
|
}
|
|
85
|
+
export {};
|
|
62
86
|
//# sourceMappingURL=client.d.ts.map
|
package/lib/client.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
|
package/lib/client.js
CHANGED
|
@@ -1,12 +1,48 @@
|
|
|
1
|
-
import { createUnsignedToken } from '@enkaku/jwt';
|
|
1
|
+
import { createSignedToken, createUnsignedToken } from '@enkaku/jwt';
|
|
2
2
|
import { createPipe } from '@enkaku/stream';
|
|
3
|
-
import {
|
|
3
|
+
import { Result } from 'typescript-result';
|
|
4
4
|
import { ABORTED } from './constants.js';
|
|
5
5
|
import { RequestError } from './error.js';
|
|
6
|
+
export function createController() {
|
|
7
|
+
let resolve = ()=>{};
|
|
8
|
+
const result = new Promise((res)=>{
|
|
9
|
+
resolve = res;
|
|
10
|
+
});
|
|
11
|
+
return Object.assign(new AbortController(), {
|
|
12
|
+
result,
|
|
13
|
+
ok: (value)=>resolve(Result.ok(value)),
|
|
14
|
+
error: (error)=>resolve(Result.error(error)),
|
|
15
|
+
aborted: ()=>resolve(Result.error(ABORTED))
|
|
16
|
+
});
|
|
17
|
+
}
|
|
18
|
+
export function createInvovation(controller, promise) {
|
|
19
|
+
return Object.assign(promise, {
|
|
20
|
+
result: controller.result,
|
|
21
|
+
toValue: ()=>{
|
|
22
|
+
return controller.result.then((result)=>{
|
|
23
|
+
if (result.isOk()) {
|
|
24
|
+
return result.value;
|
|
25
|
+
}
|
|
26
|
+
throw result.error;
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
function getCreateMessage(signer, aud) {
|
|
32
|
+
if (signer == null) {
|
|
33
|
+
return createUnsignedToken;
|
|
34
|
+
}
|
|
35
|
+
return aud ? (payload)=>createSignedToken(signer, {
|
|
36
|
+
aud,
|
|
37
|
+
...payload
|
|
38
|
+
}) : (payload)=>createSignedToken(signer, payload);
|
|
39
|
+
}
|
|
6
40
|
export class Client {
|
|
7
|
-
#transport;
|
|
8
41
|
#controllers = {};
|
|
42
|
+
#createMessage;
|
|
43
|
+
#transport;
|
|
9
44
|
constructor(params){
|
|
45
|
+
this.#createMessage = getCreateMessage(params.signer, params.serverID);
|
|
10
46
|
this.#transport = params.transport;
|
|
11
47
|
// Abort all controllers on disconnect
|
|
12
48
|
this.#transport.disposed.then(()=>{
|
|
@@ -32,7 +68,7 @@ export class Client {
|
|
|
32
68
|
switch(msg.payload.typ){
|
|
33
69
|
case 'error':
|
|
34
70
|
void controller.receive?.close();
|
|
35
|
-
controller.
|
|
71
|
+
controller.error(RequestError.fromPayload(msg.payload));
|
|
36
72
|
delete this.#controllers[msg.payload.rid];
|
|
37
73
|
break;
|
|
38
74
|
case 'receive':
|
|
@@ -40,14 +76,15 @@ export class Client {
|
|
|
40
76
|
break;
|
|
41
77
|
case 'result':
|
|
42
78
|
void controller.receive?.close();
|
|
43
|
-
controller.
|
|
79
|
+
controller.ok(msg.payload.val);
|
|
44
80
|
delete this.#controllers[msg.payload.rid];
|
|
45
81
|
break;
|
|
46
82
|
}
|
|
47
83
|
}
|
|
48
84
|
}
|
|
49
85
|
async #write(payload) {
|
|
50
|
-
await this.#
|
|
86
|
+
const message = await this.#createMessage(payload);
|
|
87
|
+
await this.#transport.write(message);
|
|
51
88
|
}
|
|
52
89
|
get disposed() {
|
|
53
90
|
return this.#transport.disposed;
|
|
@@ -66,18 +103,17 @@ export class Client {
|
|
|
66
103
|
};
|
|
67
104
|
await this.#write(payload);
|
|
68
105
|
}
|
|
69
|
-
|
|
106
|
+
request(command, ...args) {
|
|
70
107
|
const rid = globalThis.crypto.randomUUID();
|
|
71
|
-
const controller =
|
|
72
|
-
result: defer()
|
|
73
|
-
});
|
|
108
|
+
const controller = createController();
|
|
74
109
|
this.#controllers[rid] = controller;
|
|
75
110
|
controller.signal.addEventListener('abort', ()=>{
|
|
76
111
|
void this.#write({
|
|
77
112
|
typ: 'abort',
|
|
78
113
|
rid
|
|
79
114
|
});
|
|
80
|
-
controller.
|
|
115
|
+
controller.aborted();
|
|
116
|
+
delete this.#controllers[rid];
|
|
81
117
|
});
|
|
82
118
|
const payload = args.length ? {
|
|
83
119
|
typ: 'request',
|
|
@@ -89,19 +125,20 @@ export class Client {
|
|
|
89
125
|
rid,
|
|
90
126
|
cmd: command
|
|
91
127
|
};
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
128
|
+
const promise = this.#write(payload).then(()=>{
|
|
129
|
+
return {
|
|
130
|
+
abort: ()=>controller.abort(),
|
|
131
|
+
id: rid,
|
|
132
|
+
result: controller.result
|
|
133
|
+
};
|
|
134
|
+
});
|
|
135
|
+
return createInvovation(controller, promise);
|
|
98
136
|
}
|
|
99
|
-
|
|
137
|
+
createStream(command, ...args) {
|
|
100
138
|
const rid = globalThis.crypto.randomUUID();
|
|
101
139
|
const receive = createPipe();
|
|
102
|
-
const controller = Object.assign(
|
|
103
|
-
receive: receive.writable.getWriter()
|
|
104
|
-
result: defer()
|
|
140
|
+
const controller = Object.assign(createController(), {
|
|
141
|
+
receive: receive.writable.getWriter()
|
|
105
142
|
});
|
|
106
143
|
this.#controllers[rid] = controller;
|
|
107
144
|
controller.signal.addEventListener('abort', ()=>{
|
|
@@ -109,7 +146,8 @@ export class Client {
|
|
|
109
146
|
typ: 'abort',
|
|
110
147
|
rid
|
|
111
148
|
});
|
|
112
|
-
controller.
|
|
149
|
+
controller.aborted();
|
|
150
|
+
delete this.#controllers[rid];
|
|
113
151
|
});
|
|
114
152
|
const action = args.length ? {
|
|
115
153
|
typ: 'stream',
|
|
@@ -121,22 +159,23 @@ export class Client {
|
|
|
121
159
|
rid,
|
|
122
160
|
cmd: command
|
|
123
161
|
};
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
162
|
+
const promise = this.#write(action).then(()=>{
|
|
163
|
+
return {
|
|
164
|
+
abort: ()=>controller.abort(),
|
|
165
|
+
id: rid,
|
|
166
|
+
receive: receive.readable,
|
|
167
|
+
result: controller.result
|
|
168
|
+
};
|
|
169
|
+
});
|
|
170
|
+
return createInvovation(controller, promise);
|
|
131
171
|
}
|
|
132
|
-
|
|
172
|
+
createChannel(command, ...args) {
|
|
133
173
|
const rid = globalThis.crypto.randomUUID();
|
|
134
174
|
const receive = createPipe();
|
|
135
175
|
const send = createPipe();
|
|
136
|
-
const controller = Object.assign(
|
|
176
|
+
const controller = Object.assign(createController(), {
|
|
137
177
|
receive: receive.writable.getWriter(),
|
|
138
|
-
|
|
139
|
-
send: send.writable.getWriter()
|
|
178
|
+
send: send.writable
|
|
140
179
|
});
|
|
141
180
|
this.#controllers[rid] = controller;
|
|
142
181
|
controller.signal.addEventListener('abort', ()=>{
|
|
@@ -144,7 +183,8 @@ export class Client {
|
|
|
144
183
|
typ: 'abort',
|
|
145
184
|
rid
|
|
146
185
|
});
|
|
147
|
-
controller.
|
|
186
|
+
controller.aborted();
|
|
187
|
+
delete this.#controllers[rid];
|
|
148
188
|
});
|
|
149
189
|
const payload = args.length ? {
|
|
150
190
|
typ: 'channel',
|
|
@@ -156,19 +196,21 @@ export class Client {
|
|
|
156
196
|
rid,
|
|
157
197
|
cmd: command
|
|
158
198
|
};
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
199
|
+
const promise = this.#write(payload).then(()=>{
|
|
200
|
+
return {
|
|
201
|
+
abort: ()=>controller.abort(),
|
|
202
|
+
id: rid,
|
|
203
|
+
receive: receive.readable,
|
|
204
|
+
result: controller.result,
|
|
205
|
+
send: async (val)=>{
|
|
206
|
+
await this.#write({
|
|
207
|
+
typ: 'send',
|
|
208
|
+
rid,
|
|
209
|
+
val
|
|
210
|
+
});
|
|
211
|
+
}
|
|
212
|
+
};
|
|
213
|
+
});
|
|
214
|
+
return createInvovation(controller, promise);
|
|
173
215
|
}
|
|
174
216
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@enkaku/client",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.1",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"keywords": [],
|
|
6
6
|
"type": "module",
|
|
@@ -14,13 +14,14 @@
|
|
|
14
14
|
],
|
|
15
15
|
"sideEffects": false,
|
|
16
16
|
"dependencies": {
|
|
17
|
-
"
|
|
18
|
-
"@enkaku/
|
|
19
|
-
"@enkaku/stream": "^0.
|
|
17
|
+
"typescript-result": "^3.0.0",
|
|
18
|
+
"@enkaku/jwt": "^0.3.0",
|
|
19
|
+
"@enkaku/stream": "^0.3.0"
|
|
20
20
|
},
|
|
21
21
|
"devDependencies": {
|
|
22
|
-
"@enkaku/transport": "^0.
|
|
23
|
-
"@enkaku/protocol": "^0.
|
|
22
|
+
"@enkaku/transport": "^0.3.0",
|
|
23
|
+
"@enkaku/protocol": "^0.3.0",
|
|
24
|
+
"@enkaku/util": "^0.3.0"
|
|
24
25
|
},
|
|
25
26
|
"scripts": {
|
|
26
27
|
"build:clean": "del lib",
|