@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 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 { type Disposer } from '@enkaku/util';
3
- export type InvokeReturn<Result> = {
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: ReadableStreamDefaultReader<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']]): Promise<T['Return']>;
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']]): Promise<T['Return']>;
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']]): Promise<T['Return']>;
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
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
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 { defer } from '@enkaku/util';
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.result.reject(RequestError.fromPayload(msg.payload));
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.result.resolve(msg.payload.val);
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.#transport.write(createUnsignedToken(payload));
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
- async request(command, ...args) {
106
+ request(command, ...args) {
70
107
  const rid = globalThis.crypto.randomUUID();
71
- const controller = Object.assign(new AbortController(), {
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.result.reject(ABORTED);
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
- await this.#write(payload);
93
- return {
94
- abort: ()=>controller.abort(),
95
- id: rid,
96
- result: controller.result.promise
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
- async createStream(command, ...args) {
137
+ createStream(command, ...args) {
100
138
  const rid = globalThis.crypto.randomUUID();
101
139
  const receive = createPipe();
102
- const controller = Object.assign(new AbortController(), {
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.result.reject(ABORTED);
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
- await this.#write(action);
125
- return {
126
- abort: ()=>controller.abort(),
127
- id: rid,
128
- receive: receive.readable.getReader(),
129
- result: controller.result.promise
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
- async createChannel(command, ...args) {
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(new AbortController(), {
176
+ const controller = Object.assign(createController(), {
137
177
  receive: receive.writable.getWriter(),
138
- result: defer(),
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.result.reject(ABORTED);
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
- await this.#write(payload);
160
- return {
161
- abort: ()=>controller.abort(),
162
- id: rid,
163
- receive: receive.readable.getReader(),
164
- result: controller.result.promise,
165
- send: async (val)=>{
166
- await this.#write({
167
- typ: 'send',
168
- rid,
169
- val
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.2.2",
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
- "@enkaku/jwt": "^0.2.3",
18
- "@enkaku/util": "^0.2.0",
19
- "@enkaku/stream": "^0.2.1"
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.2.0",
23
- "@enkaku/protocol": "^0.2.1"
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",