@enkaku/server 0.2.0 → 0.3.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.
@@ -0,0 +1,13 @@
1
+ import type { SignedToken } from '@enkaku/jwt';
2
+ import type { AnyClientPayloadOf, AnyDefinitions } from '@enkaku/protocol';
3
+ export type CommandAccessRecord = Record<string, boolean | Array<string>>;
4
+ export type CommandAccessPayload = {
5
+ iss?: string;
6
+ sub?: string;
7
+ aud?: string;
8
+ cmd?: string;
9
+ exp?: number;
10
+ };
11
+ export declare function checkCommandAccess(record: CommandAccessRecord, token: SignedToken<CommandAccessPayload>, atTime?: number): Promise<void>;
12
+ export declare function checkClientToken<Definition extends AnyDefinitions>(serverID: string, record: CommandAccessRecord, token: SignedToken<AnyClientPayloadOf<Definition>>, atTime?: number): Promise<void>;
13
+ //# sourceMappingURL=access-control.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"access-control.d.ts","sourceRoot":"","sources":["../src/access-control.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAC9C,OAAO,KAAK,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AAE1E,MAAM,MAAM,mBAAmB,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAA;AAEzE,MAAM,MAAM,oBAAoB,GAAG;IACjC,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,GAAG,CAAC,EAAE,MAAM,CAAA;CACb,CAAA;AAED,wBAAsB,kBAAkB,CACtC,MAAM,EAAE,mBAAmB,EAC3B,KAAK,EAAE,WAAW,CAAC,oBAAoB,CAAC,EACxC,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC,IAAI,CAAC,CA6Bf;AAED,wBAAsB,gBAAgB,CAAC,UAAU,SAAS,cAAc,EACtE,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,mBAAmB,EAC3B,KAAK,EAAE,WAAW,CAAC,kBAAkB,CAAC,UAAU,CAAC,CAAC,EAClD,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC,IAAI,CAAC,CAgBf"}
@@ -0,0 +1,47 @@
1
+ import { assertNonExpired, checkCapability, hasPartsMatch } from '@enkaku/capability';
2
+ export async function checkCommandAccess(record, token, atTime) {
3
+ const payload = token.payload;
4
+ if (payload.cmd == null) {
5
+ throw new Error('No command to check');
6
+ }
7
+ const subject = payload.sub ?? payload.iss;
8
+ for (const [command, access] of Object.entries(record)){
9
+ if (hasPartsMatch(payload.cmd, command)) {
10
+ if (access === true) {
11
+ // Command can be publicly accessed
12
+ return;
13
+ }
14
+ if (access === false) {
15
+ continue;
16
+ }
17
+ if (!access.includes(subject)) {
18
+ continue;
19
+ }
20
+ try {
21
+ await checkCapability({
22
+ act: payload.cmd,
23
+ res: subject
24
+ }, payload, atTime);
25
+ return;
26
+ } catch {}
27
+ }
28
+ }
29
+ throw new Error('Access denied');
30
+ }
31
+ export async function checkClientToken(serverID, record, token, atTime) {
32
+ const payload = token.payload;
33
+ if (payload.iss === serverID) {
34
+ // If issuer uses the server's signer, only check audience and expiration if provided
35
+ if (payload.aud != null && payload.aud !== serverID) {
36
+ throw new Error('Invalid audience');
37
+ }
38
+ if (payload.exp != null) {
39
+ assertNonExpired(payload, atTime);
40
+ }
41
+ return;
42
+ }
43
+ if (payload.aud !== serverID) {
44
+ throw new Error('Invalid audience');
45
+ }
46
+ await checkCommandAccess(record, token, atTime);
47
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"channel.d.ts","sourceRoot":"","sources":["../../src/handlers/channel.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,cAAc,EAEd,gBAAgB,EAChB,aAAa,EACd,MAAM,kBAAkB,CAAA;AAGzB,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AACjD,OAAO,KAAK,EAGV,cAAc,EAKf,MAAM,aAAa,CAAA;AAGpB,MAAM,MAAM,gBAAgB,CAC1B,WAAW,SAAS,cAAc,EAClC,OAAO,SAAS,MAAM,WAAW,GAAG,MAAM,GAAG,MAAM,WAAW,GAAG,MAAM,IACrE,aAAa,CAAC,gBAAgB,CAAC,OAAO,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;AAElE,wBAAgB,aAAa,CAC3B,WAAW,SAAS,cAAc,EAClC,OAAO,SAAS,MAAM,WAAW,GAAG,MAAM,EAE1C,GAAG,EAAE,cAAc,CAAC,WAAW,CAAC,EAChC,GAAG,EAAE,gBAAgB,CAAC,WAAW,EAAE,OAAO,CAAC,GAC1C,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAyChC"}
1
+ {"version":3,"file":"channel.d.ts","sourceRoot":"","sources":["../../src/handlers/channel.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,cAAc,EAEd,gBAAgB,EAChB,aAAa,EACd,MAAM,kBAAkB,CAAA;AAGzB,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AACjD,OAAO,KAAK,EAGV,cAAc,EAKf,MAAM,aAAa,CAAA;AAGpB,MAAM,MAAM,gBAAgB,CAC1B,WAAW,SAAS,cAAc,EAClC,OAAO,SAAS,MAAM,WAAW,GAAG,MAAM,GAAG,MAAM,WAAW,GAAG,MAAM,IACrE,aAAa,CAAC,gBAAgB,CAAC,OAAO,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;AAElE,wBAAgB,aAAa,CAC3B,WAAW,SAAS,cAAc,EAClC,OAAO,SAAS,MAAM,WAAW,GAAG,MAAM,EAE1C,GAAG,EAAE,cAAc,CAAC,WAAW,CAAC,EAChC,GAAG,EAAE,gBAAgB,CAAC,WAAW,EAAE,OAAO,CAAC,GAC1C,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CA2ChC"}
@@ -29,6 +29,7 @@ export function handleChannel(ctx, msg) {
29
29
  signal: controller.signal
30
30
  });
31
31
  const handlerContext = {
32
+ message: msg,
32
33
  params: msg.payload.prm,
33
34
  readable: sendStream.readable,
34
35
  signal: controller.signal,
@@ -1 +1 @@
1
- {"version":3,"file":"event.d.ts","sourceRoot":"","sources":["../../src/handlers/event.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AAErF,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AACjD,OAAO,KAAK,EAA+B,cAAc,EAAE,MAAM,aAAa,CAAA;AAG9E,MAAM,MAAM,cAAc,CACxB,WAAW,SAAS,cAAc,EAClC,OAAO,SAAS,MAAM,WAAW,GAAG,MAAM,GAAG,MAAM,WAAW,GAAG,MAAM,IACrE,aAAa,CAAC,cAAc,CAAC,OAAO,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;AAEhE,wBAAgB,WAAW,CACzB,WAAW,SAAS,cAAc,EAClC,OAAO,SAAS,MAAM,WAAW,GAAG,MAAM,EAE1C,GAAG,EAAE,cAAc,CAAC,WAAW,CAAC,EAChC,GAAG,EAAE,cAAc,CAAC,WAAW,EAAE,OAAO,CAAC,GACxC,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAchC"}
1
+ {"version":3,"file":"event.d.ts","sourceRoot":"","sources":["../../src/handlers/event.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AAGrF,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AACjD,OAAO,KAAK,EAAoD,cAAc,EAAE,MAAM,aAAa,CAAA;AAEnG,MAAM,MAAM,cAAc,CACxB,WAAW,SAAS,cAAc,EAClC,OAAO,SAAS,MAAM,WAAW,GAAG,MAAM,GAAG,MAAM,WAAW,GAAG,MAAM,IACrE,aAAa,CAAC,cAAc,CAAC,OAAO,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;AAEhE,wBAAgB,WAAW,CACzB,WAAW,SAAS,cAAc,EAClC,OAAO,SAAS,MAAM,WAAW,GAAG,MAAM,EAE1C,GAAG,EAAE,cAAc,CAAC,WAAW,CAAC,EAChC,GAAG,EAAE,cAAc,CAAC,WAAW,EAAE,OAAO,CAAC,GACxC,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAoBhC"}
@@ -1,5 +1,5 @@
1
+ import { toPromise } from '@enkaku/util';
1
2
  import { ErrorRejection } from '../rejections.js';
2
- import { toPromise } from '../utils.js';
3
3
  export function handleEvent(ctx, msg) {
4
4
  const handler = ctx.handlers[msg.payload.cmd];
5
5
  if (handler == null) {
@@ -7,10 +7,11 @@ export function handleEvent(ctx, msg) {
7
7
  info: msg.payload
8
8
  });
9
9
  }
10
- const data = msg.payload.data;
11
- return toPromise(()=>handler({
12
- data
13
- })).catch((cause)=>{
10
+ const handlerContext = {
11
+ message: msg,
12
+ data: msg.payload.data
13
+ };
14
+ return toPromise(()=>handler(handlerContext)).catch((cause)=>{
14
15
  const err = new ErrorRejection(`Error handling command: ${msg.payload.cmd}`, {
15
16
  info: msg.payload,
16
17
  cause
@@ -1 +1 @@
1
- {"version":3,"file":"request.d.ts","sourceRoot":"","sources":["../../src/handlers/request.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAA;AAEvF,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AACjD,OAAO,KAAK,EAAE,cAAc,EAA0C,MAAM,aAAa,CAAA;AAGzF,MAAM,MAAM,gBAAgB,CAC1B,WAAW,SAAS,cAAc,EAClC,OAAO,SAAS,MAAM,WAAW,GAAG,MAAM,GAAG,MAAM,WAAW,GAAG,MAAM,IACrE,aAAa,CAAC,gBAAgB,CAAC,OAAO,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;AAElE,wBAAgB,aAAa,CAC3B,WAAW,SAAS,cAAc,EAClC,OAAO,SAAS,MAAM,WAAW,GAAG,MAAM,EAE1C,GAAG,EAAE,cAAc,CAAC,WAAW,CAAC,EAChC,GAAG,EAAE,gBAAgB,CAAC,WAAW,EAAE,OAAO,CAAC,GAC1C,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAchC"}
1
+ {"version":3,"file":"request.d.ts","sourceRoot":"","sources":["../../src/handlers/request.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAA;AAEvF,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AACjD,OAAO,KAAK,EACV,cAAc,EAKf,MAAM,aAAa,CAAA;AAGpB,MAAM,MAAM,gBAAgB,CAC1B,WAAW,SAAS,cAAc,EAClC,OAAO,SAAS,MAAM,WAAW,GAAG,MAAM,GAAG,MAAM,WAAW,GAAG,MAAM,IACrE,aAAa,CAAC,gBAAgB,CAAC,OAAO,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;AAElE,wBAAgB,aAAa,CAC3B,WAAW,SAAS,cAAc,EAClC,OAAO,SAAS,MAAM,WAAW,GAAG,MAAM,EAE1C,GAAG,EAAE,cAAc,CAAC,WAAW,CAAC,EAChC,GAAG,EAAE,gBAAgB,CAAC,WAAW,EAAE,OAAO,CAAC,GAC1C,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAkBhC"}
@@ -9,9 +9,9 @@ export function handleRequest(ctx, msg) {
9
9
  }
10
10
  const controller = new AbortController();
11
11
  ctx.controllers[msg.payload.rid] = controller;
12
- const params = msg.payload.prm;
13
- return executeHandler(ctx, msg.payload, ()=>handler({
14
- params,
15
- signal: controller.signal
16
- }));
12
+ const handlerContext = {
13
+ params: msg.payload.prm,
14
+ signal: controller.signal
15
+ };
16
+ return executeHandler(ctx, msg.payload, ()=>handler(handlerContext));
17
17
  }
@@ -1 +1 @@
1
- {"version":3,"file":"stream.d.ts","sourceRoot":"","sources":["../../src/handlers/stream.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,cAAc,EAEd,aAAa,EACb,eAAe,EAChB,MAAM,kBAAkB,CAAA;AAGzB,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AACjD,OAAO,KAAK,EACV,cAAc,EAMf,MAAM,aAAa,CAAA;AAGpB,MAAM,MAAM,eAAe,CACzB,WAAW,SAAS,cAAc,EAClC,OAAO,SAAS,MAAM,WAAW,GAAG,MAAM,GAAG,MAAM,WAAW,GAAG,MAAM,IACrE,aAAa,CAAC,eAAe,CAAC,OAAO,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;AAEjE,wBAAgB,YAAY,CAC1B,WAAW,SAAS,cAAc,EAClC,OAAO,SAAS,MAAM,WAAW,GAAG,MAAM,EAE1C,GAAG,EAAE,cAAc,CAAC,WAAW,CAAC,EAChC,GAAG,EAAE,eAAe,CAAC,WAAW,EAAE,OAAO,CAAC,GACzC,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAgChC"}
1
+ {"version":3,"file":"stream.d.ts","sourceRoot":"","sources":["../../src/handlers/stream.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,cAAc,EAEd,aAAa,EACb,eAAe,EAChB,MAAM,kBAAkB,CAAA;AAGzB,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AACjD,OAAO,KAAK,EACV,cAAc,EAMf,MAAM,aAAa,CAAA;AAGpB,MAAM,MAAM,eAAe,CACzB,WAAW,SAAS,cAAc,EAClC,OAAO,SAAS,MAAM,WAAW,GAAG,MAAM,GAAG,MAAM,WAAW,GAAG,MAAM,IACrE,aAAa,CAAC,eAAe,CAAC,OAAO,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;AAEjE,wBAAgB,YAAY,CAC1B,WAAW,SAAS,cAAc,EAClC,OAAO,SAAS,MAAM,WAAW,GAAG,MAAM,EAE1C,GAAG,EAAE,cAAc,CAAC,WAAW,CAAC,EAChC,GAAG,EAAE,eAAe,CAAC,WAAW,EAAE,OAAO,CAAC,GACzC,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAsChC"}
package/lib/rejections.js CHANGED
@@ -1,9 +1,9 @@
1
- export var RejectionReason;
2
- (function(RejectionReason) {
1
+ export var RejectionReason = /*#__PURE__*/ function(RejectionReason) {
3
2
  RejectionReason[RejectionReason["ABORT"] = 1] = "ABORT";
4
3
  RejectionReason[RejectionReason["ERROR"] = 2] = "ERROR";
5
4
  RejectionReason[RejectionReason["TIMEOUT"] = 3] = "TIMEOUT";
6
- })(RejectionReason || (RejectionReason = {}));
5
+ return RejectionReason;
6
+ }({});
7
7
  export class Rejection {
8
8
  #reason;
9
9
  #info;
package/lib/server.d.ts CHANGED
@@ -1,5 +1,6 @@
1
1
  import type { AnyDefinitions, ServerTransportOf } from '@enkaku/protocol';
2
2
  import { type Disposer } from '@enkaku/util';
3
+ import { type CommandAccessRecord } from './access-control.js';
3
4
  import { type RejectionType } from './rejections.js';
4
5
  import type { CommandHandlers, HandlerController } from './types.js';
5
6
  export type HandleMessagesParams<Definitions extends AnyDefinitions> = {
@@ -8,12 +9,24 @@ export type HandleMessagesParams<Definitions extends AnyDefinitions> = {
8
9
  reject: (rejection: RejectionType) => void;
9
10
  signal: AbortSignal;
10
11
  transport: ServerTransportOf<Definitions>;
11
- };
12
+ } & ({
13
+ insecure: true;
14
+ } | {
15
+ insecure: false;
16
+ serverID: string;
17
+ access: CommandAccessRecord;
18
+ });
12
19
  export type ServeParams<Definitions extends AnyDefinitions> = {
13
20
  handlers: CommandHandlers<Definitions>;
14
21
  signal?: AbortSignal;
15
22
  transport: ServerTransportOf<Definitions>;
16
- };
23
+ } & ({
24
+ insecure: true;
25
+ } | {
26
+ insecure?: false;
27
+ id: string;
28
+ access?: CommandAccessRecord;
29
+ });
17
30
  export type Server = Disposer & {
18
31
  rejections: ReadableStream<RejectionType>;
19
32
  };
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAsB,cAAc,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAA;AAE7F,OAAO,EAAE,KAAK,QAAQ,EAAkB,MAAM,cAAc,CAAA;AAM5D,OAAO,EAAkB,KAAK,aAAa,EAAE,MAAM,iBAAiB,CAAA;AACpE,OAAO,KAAK,EAEV,eAAe,EAEf,iBAAiB,EAClB,MAAM,YAAY,CAAA;AAEnB,MAAM,MAAM,oBAAoB,CAAC,WAAW,SAAS,cAAc,IAAI;IACrE,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAA;IAC9C,QAAQ,EAAE,eAAe,CAAC,WAAW,CAAC,CAAA;IACtC,MAAM,EAAE,CAAC,SAAS,EAAE,aAAa,KAAK,IAAI,CAAA;IAC1C,MAAM,EAAE,WAAW,CAAA;IACnB,SAAS,EAAE,iBAAiB,CAAC,WAAW,CAAC,CAAA;CAC1C,CAAA;AAkFD,MAAM,MAAM,WAAW,CAAC,WAAW,SAAS,cAAc,IAAI;IAC5D,QAAQ,EAAE,eAAe,CAAC,WAAW,CAAC,CAAA;IACtC,MAAM,CAAC,EAAE,WAAW,CAAA;IACpB,SAAS,EAAE,iBAAiB,CAAC,WAAW,CAAC,CAAA;CAC1C,CAAA;AAED,MAAM,MAAM,MAAM,GAAG,QAAQ,GAAG;IAC9B,UAAU,EAAE,cAAc,CAAC,aAAa,CAAC,CAAA;CAC1C,CAAA;AAED,wBAAgB,KAAK,CAAC,WAAW,SAAS,cAAc,EACtD,MAAM,EAAE,WAAW,CAAC,WAAW,CAAC,GAC/B,MAAM,CA8BR"}
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAEV,cAAc,EAEd,iBAAiB,EAClB,MAAM,kBAAkB,CAAA;AAEzB,OAAO,EAAE,KAAK,QAAQ,EAAkB,MAAM,cAAc,CAAA;AAE5D,OAAO,EAAE,KAAK,mBAAmB,EAAoB,MAAM,qBAAqB,CAAA;AAKhF,OAAO,EAAkB,KAAK,aAAa,EAAE,MAAM,iBAAiB,CAAA;AACpE,OAAO,KAAK,EAEV,eAAe,EAEf,iBAAiB,EAClB,MAAM,YAAY,CAAA;AAQnB,MAAM,MAAM,oBAAoB,CAAC,WAAW,SAAS,cAAc,IAAI;IACrE,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAA;IAC9C,QAAQ,EAAE,eAAe,CAAC,WAAW,CAAC,CAAA;IACtC,MAAM,EAAE,CAAC,SAAS,EAAE,aAAa,KAAK,IAAI,CAAA;IAC1C,MAAM,EAAE,WAAW,CAAA;IACnB,SAAS,EAAE,iBAAiB,CAAC,WAAW,CAAC,CAAA;CAC1C,GAAG,CAAC;IAAE,QAAQ,EAAE,IAAI,CAAA;CAAE,GAAG;IAAE,QAAQ,EAAE,KAAK,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,mBAAmB,CAAA;CAAE,CAAC,CAAA;AAwH7F,MAAM,MAAM,WAAW,CAAC,WAAW,SAAS,cAAc,IAAI;IAC5D,QAAQ,EAAE,eAAe,CAAC,WAAW,CAAC,CAAA;IACtC,MAAM,CAAC,EAAE,WAAW,CAAA;IACpB,SAAS,EAAE,iBAAiB,CAAC,WAAW,CAAC,CAAA;CAC1C,GAAG,CAAC;IAAE,QAAQ,EAAE,IAAI,CAAA;CAAE,GAAG;IAAE,QAAQ,CAAC,EAAE,KAAK,CAAC;IAAC,EAAE,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,mBAAmB,CAAA;CAAE,CAAC,CAAA;AAEzF,MAAM,MAAM,MAAM,GAAG,QAAQ,GAAG;IAC9B,UAAU,EAAE,cAAc,CAAC,aAAa,CAAC,CAAA;CAC1C,CAAA;AAED,wBAAgB,KAAK,CAAC,WAAW,SAAS,cAAc,EACtD,MAAM,EAAE,WAAW,CAAC,WAAW,CAAC,GAC/B,MAAM,CAiCR"}
package/lib/server.js CHANGED
@@ -1,6 +1,7 @@
1
- import { unsignedToken } from '@enkaku/jwt';
1
+ import { createUnsignedToken, isSignedToken } from '@enkaku/jwt';
2
2
  import { createPipe } from '@enkaku/stream';
3
3
  import { createDisposer } from '@enkaku/util';
4
+ import { checkClientToken } from './access-control.js';
4
5
  import { handleChannel } from './handlers/channel.js';
5
6
  import { handleEvent } from './handlers/event.js';
6
7
  import { handleRequest } from './handlers/request.js';
@@ -12,7 +13,7 @@ async function handleMessages(params) {
12
13
  controllers,
13
14
  handlers,
14
15
  reject,
15
- send: (payload)=>transport.write(unsignedToken(payload))
16
+ send: (payload)=>transport.write(createUnsignedToken(payload))
16
17
  };
17
18
  const running = Object.create(null);
18
19
  const disposer = createDisposer(async ()=>{
@@ -23,17 +24,45 @@ async function handleMessages(params) {
23
24
  // Wait until all running handlers are done
24
25
  await Promise.all(Object.values(running));
25
26
  }, signal);
26
- function process(payload, returned) {
27
+ function processHandler(message, handle) {
28
+ const returned = handle();
27
29
  if (returned instanceof ErrorRejection) {
28
30
  reject(returned);
29
31
  } else {
30
- const id = payload.typ === 'event' ? Math.random().toString(36).slice(2) : payload.rid;
32
+ const id = message.payload.typ === 'event' ? Math.random().toString(36).slice(2) : message.payload.rid;
31
33
  running[id] = returned;
32
34
  returned.then(()=>{
33
35
  delete running[id];
34
36
  });
35
37
  }
36
38
  }
39
+ const process = params.insecure ? processHandler : async (message, handle)=>{
40
+ try {
41
+ if (!params.insecure) {
42
+ if (!isSignedToken(message)) {
43
+ throw new Error('Message is not signed');
44
+ }
45
+ await checkClientToken(params.serverID, params.access, message);
46
+ }
47
+ } catch (err) {
48
+ const errorMessage = err.message ?? 'Access denied';
49
+ if (message.payload.typ === 'event') {
50
+ reject(new ErrorRejection(errorMessage, {
51
+ cause: err,
52
+ info: message
53
+ }));
54
+ } else {
55
+ context.send({
56
+ typ: 'error',
57
+ rid: message.payload.rid,
58
+ code: 'EKK1000',
59
+ msg: errorMessage
60
+ });
61
+ }
62
+ return;
63
+ }
64
+ processHandler(message, handle);
65
+ };
37
66
  async function handleNext() {
38
67
  const next = await transport.read();
39
68
  if (next.done) {
@@ -46,14 +75,23 @@ async function handleMessages(params) {
46
75
  controllers[msg.payload.rid]?.abort();
47
76
  break;
48
77
  case 'channel':
49
- process(msg.payload, handleChannel(context, msg));
50
- break;
78
+ {
79
+ const message = msg;
80
+ process(message, ()=>handleChannel(context, message));
81
+ break;
82
+ }
51
83
  case 'event':
52
- process(msg.payload, handleEvent(context, msg));
53
- break;
84
+ {
85
+ const message = msg;
86
+ process(message, ()=>handleEvent(context, message));
87
+ break;
88
+ }
54
89
  case 'request':
55
- process(msg.payload, handleRequest(context, msg));
56
- break;
90
+ {
91
+ const message = msg;
92
+ process(message, ()=>handleRequest(context, message));
93
+ break;
94
+ }
57
95
  case 'send':
58
96
  {
59
97
  const controller = controllers[msg.payload.rid];
@@ -61,8 +99,11 @@ async function handleMessages(params) {
61
99
  break;
62
100
  }
63
101
  case 'stream':
64
- process(msg.payload, handleStream(context, msg));
65
- break;
102
+ {
103
+ const message = msg;
104
+ process(message, ()=>handleStream(context, message));
105
+ break;
106
+ }
66
107
  }
67
108
  handleNext();
68
109
  }
@@ -81,8 +122,15 @@ export function serve(params) {
81
122
  controllers,
82
123
  handlers: params.handlers,
83
124
  reject,
125
+ signal: abortController.signal,
84
126
  transport: params.transport,
85
- signal: abortController.signal
127
+ ...params.insecure ? {
128
+ insecure: true
129
+ } : {
130
+ insecure: false,
131
+ serverID: params.id,
132
+ access: params.access ?? {}
133
+ }
86
134
  });
87
135
  const disposer = createDisposer(async ()=>{
88
136
  // Signal messages handler to stop execution and run cleanup logic
package/lib/types.d.ts CHANGED
@@ -1,30 +1,33 @@
1
- import type { AnyDefinition, AnyDefinitions, AnyServerPayloadOf, ChannelDefinition, EventDefinition, RequestDefinition, StreamDefinition } from '@enkaku/protocol';
1
+ import type { Token } from '@enkaku/jwt';
2
+ import type { AnyDefinition, AnyDefinitions, AnyServerPayloadOf, ChannelDefinition, EventCallPayload, EventDefinition, RequestCallPayload, RequestDefinition, RequestType, StreamDefinition } from '@enkaku/protocol';
2
3
  import type { RejectionType } from './rejections.js';
3
4
  export type RequestController = AbortController;
4
5
  export type ChannelController<Send = unknown> = AbortController & {
5
6
  writer: WritableStreamDefaultWriter<Send>;
6
7
  };
7
8
  export type HandlerController<Send = unknown> = RequestController | ChannelController<Send>;
8
- export type EventHandlerContext<Data> = {
9
+ export type EventHandlerContext<Command extends string, Data extends Record<string, unknown> | undefined> = {
10
+ message: Token<EventCallPayload<Command, Data>>;
9
11
  data: Data;
10
12
  };
11
- export type EventHandler<Data> = (context: EventHandlerContext<Data>) => void | Promise<void>;
12
- export type RequestHandlerContext<Params> = {
13
+ export type EventHandler<Command extends string, Data extends Record<string, unknown> | undefined> = (context: EventHandlerContext<Command, Data>) => void | Promise<void>;
14
+ export type RequestHandlerContext<Type extends RequestType, Command extends string, Params> = {
15
+ message: Token<RequestCallPayload<Type, Command, Params>>;
13
16
  params: Params;
14
17
  signal: AbortSignal;
15
18
  };
16
19
  export type HandlerReturn<Result> = Result | Promise<Result>;
17
- export type RequestHandler<Params, Result> = (context: RequestHandlerContext<Params>) => HandlerReturn<Result>;
18
- export type StreamHandlerContext<Params, Receive> = RequestHandlerContext<Params> & {
20
+ export type RequestHandler<Command extends string, Params, Result> = (context: RequestHandlerContext<'request', Command, Params>) => HandlerReturn<Result>;
21
+ export type StreamHandlerContext<Type extends Exclude<RequestType, 'request'>, Command extends string, Params, Receive> = RequestHandlerContext<Type, Command, Params> & {
19
22
  writable: WritableStream<Receive>;
20
23
  };
21
- export type StreamHandler<Params, Receive, Result> = (context: StreamHandlerContext<Params, Receive>) => HandlerReturn<Result>;
22
- export type ChannelHandlerContext<Params, Sent, Receive> = StreamHandlerContext<Params, Receive> & {
24
+ export type StreamHandler<Command extends string, Params, Receive, Result> = (context: StreamHandlerContext<'stream', Command, Params, Receive>) => HandlerReturn<Result>;
25
+ export type ChannelHandlerContext<Command extends string, Params, Sent, Receive> = StreamHandlerContext<'channel', Command, Params, Receive> & {
23
26
  readable: ReadableStream<Sent>;
24
27
  };
25
- export type ChannelHandler<Params, Sent, Receive, Result> = (context: ChannelHandlerContext<Params, Sent, Receive>) => HandlerReturn<Result>;
28
+ export type ChannelHandler<Command extends string, Params, Sent, Receive, Result> = (context: ChannelHandlerContext<Command, Params, Sent, Receive>) => HandlerReturn<Result>;
26
29
  export type CommandHandlers<Definitions> = Definitions extends Record<infer Commands extends string, AnyDefinition> ? {
27
- [Command in Commands & string]: Definitions[Command] extends EventDefinition<infer Data> ? (context: EventHandlerContext<Data>) => void : Definitions[Command] extends RequestDefinition<infer Params, infer Result> ? (context: RequestHandlerContext<Params>) => HandlerReturn<Result> : Definitions[Command] extends StreamDefinition<infer Params, infer Receive, infer Result> ? (context: StreamHandlerContext<Params, Receive>) => HandlerReturn<Result> : Definitions[Command] extends ChannelDefinition<infer Params, infer Send, infer Receive, infer Result> ? (context: ChannelHandlerContext<Params, Send, Receive>) => HandlerReturn<Result> : never;
30
+ [Command in Commands & string]: Definitions[Command] extends EventDefinition<infer Data> ? (context: EventHandlerContext<Command, Data>) => void : Definitions[Command] extends RequestDefinition<infer Params, infer Result> ? (context: RequestHandlerContext<'request', Command, Params>) => HandlerReturn<Result> : Definitions[Command] extends StreamDefinition<infer Params, infer Receive, infer Result> ? (context: StreamHandlerContext<'stream', Command, Params, Receive>) => HandlerReturn<Result> : Definitions[Command] extends ChannelDefinition<infer Params, infer Send, infer Receive, infer Result> ? (context: ChannelHandlerContext<Command, Params, Send, Receive>) => HandlerReturn<Result> : never;
28
31
  } : Record<string, never>;
29
32
  export type EventDataType<Definitions extends AnyDefinitions, Command extends keyof Definitions & string> = Definitions[Command] extends EventDefinition<infer Data> ? Data : never;
30
33
  export type ParamsType<Definitions extends AnyDefinitions, Command extends keyof Definitions & string> = Definitions[Command] extends RequestDefinition<infer Params> ? Params : Definitions[Command] extends StreamDefinition<infer Params> ? Params : Definitions[Command] extends ChannelDefinition<infer Params> ? Params : never;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,aAAa,EACb,cAAc,EACd,kBAAkB,EAClB,iBAAiB,EACjB,eAAe,EACf,iBAAiB,EACjB,gBAAgB,EACjB,MAAM,kBAAkB,CAAA;AAEzB,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAEpD,MAAM,MAAM,iBAAiB,GAAG,eAAe,CAAA;AAE/C,MAAM,MAAM,iBAAiB,CAAC,IAAI,GAAG,OAAO,IAAI,eAAe,GAAG;IAChE,MAAM,EAAE,2BAA2B,CAAC,IAAI,CAAC,CAAA;CAC1C,CAAA;AAED,MAAM,MAAM,iBAAiB,CAAC,IAAI,GAAG,OAAO,IAAI,iBAAiB,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAA;AAE3F,MAAM,MAAM,mBAAmB,CAAC,IAAI,IAAI;IACtC,IAAI,EAAE,IAAI,CAAA;CACX,CAAA;AAED,MAAM,MAAM,YAAY,CAAC,IAAI,IAAI,CAAC,OAAO,EAAE,mBAAmB,CAAC,IAAI,CAAC,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;AAE7F,MAAM,MAAM,qBAAqB,CAAC,MAAM,IAAI;IAC1C,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,WAAW,CAAA;CACpB,CAAA;AAED,MAAM,MAAM,aAAa,CAAC,MAAM,IAAI,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;AAE5D,MAAM,MAAM,cAAc,CAAC,MAAM,EAAE,MAAM,IAAI,CAC3C,OAAO,EAAE,qBAAqB,CAAC,MAAM,CAAC,KACnC,aAAa,CAAC,MAAM,CAAC,CAAA;AAE1B,MAAM,MAAM,oBAAoB,CAAC,MAAM,EAAE,OAAO,IAAI,qBAAqB,CAAC,MAAM,CAAC,GAAG;IAClF,QAAQ,EAAE,cAAc,CAAC,OAAO,CAAC,CAAA;CAClC,CAAA;AAED,MAAM,MAAM,aAAa,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,IAAI,CACnD,OAAO,EAAE,oBAAoB,CAAC,MAAM,EAAE,OAAO,CAAC,KAC3C,aAAa,CAAC,MAAM,CAAC,CAAA;AAE1B,MAAM,MAAM,qBAAqB,CAAC,MAAM,EAAE,IAAI,EAAE,OAAO,IAAI,oBAAoB,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG;IACjG,QAAQ,EAAE,cAAc,CAAC,IAAI,CAAC,CAAA;CAC/B,CAAA;AAED,MAAM,MAAM,cAAc,CAAC,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,IAAI,CAC1D,OAAO,EAAE,qBAAqB,CAAC,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC,KAClD,aAAa,CAAC,MAAM,CAAC,CAAA;AAE1B,MAAM,MAAM,eAAe,CAAC,WAAW,IAAI,WAAW,SAAS,MAAM,CACnE,MAAM,QAAQ,SAAS,MAAM,EAC7B,aAAa,CACd,GACG;KACG,OAAO,IAAI,QAAQ,GAAG,MAAM,GAAG,WAAW,CAAC,OAAO,CAAC,SAAS,eAAe,CAAC,MAAM,IAAI,CAAC,GACpF,CAAC,OAAO,EAAE,mBAAmB,CAAC,IAAI,CAAC,KAAK,IAAI,GAC5C,WAAW,CAAC,OAAO,CAAC,SAAS,iBAAiB,CAAC,MAAM,MAAM,EAAE,MAAM,MAAM,CAAC,GACxE,CAAC,OAAO,EAAE,qBAAqB,CAAC,MAAM,CAAC,KAAK,aAAa,CAAC,MAAM,CAAC,GACjE,WAAW,CAAC,OAAO,CAAC,SAAS,gBAAgB,CAAC,MAAM,MAAM,EAAE,MAAM,OAAO,EAAE,MAAM,MAAM,CAAC,GACtF,CAAC,OAAO,EAAE,oBAAoB,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,aAAa,CAAC,MAAM,CAAC,GACzE,WAAW,CAAC,OAAO,CAAC,SAAS,iBAAiB,CAC1C,MAAM,MAAM,EACZ,MAAM,IAAI,EACV,MAAM,OAAO,EACb,MAAM,MAAM,CACb,GACD,CAAC,OAAO,EAAE,qBAAqB,CAAC,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC,KAAK,aAAa,CAAC,MAAM,CAAC,GAChF,KAAK;CAChB,GACD,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAA;AAEzB,MAAM,MAAM,aAAa,CACvB,WAAW,SAAS,cAAc,EAClC,OAAO,SAAS,MAAM,WAAW,GAAG,MAAM,IACxC,WAAW,CAAC,OAAO,CAAC,SAAS,eAAe,CAAC,MAAM,IAAI,CAAC,GAAG,IAAI,GAAG,KAAK,CAAA;AAE3E,MAAM,MAAM,UAAU,CACpB,WAAW,SAAS,cAAc,EAClC,OAAO,SAAS,MAAM,WAAW,GAAG,MAAM,IACxC,WAAW,CAAC,OAAO,CAAC,SAAS,iBAAiB,CAAC,MAAM,MAAM,CAAC,GAC5D,MAAM,GACN,WAAW,CAAC,OAAO,CAAC,SAAS,gBAAgB,CAAC,MAAM,MAAM,CAAC,GACzD,MAAM,GACN,WAAW,CAAC,OAAO,CAAC,SAAS,iBAAiB,CAAC,MAAM,MAAM,CAAC,GAC1D,MAAM,GACN,KAAK,CAAA;AAEb,MAAM,MAAM,WAAW,CACrB,WAAW,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC3C,OAAO,SAAS,MAAM,WAAW,GAAG,MAAM,IACxC,WAAW,CAAC,OAAO,CAAC,SAAS,gBAAgB,CAAC,MAAM,MAAM,EAAE,MAAM,OAAO,CAAC,GAC1E,OAAO,GACP,WAAW,CAAC,OAAO,CAAC,SAAS,iBAAiB,CAAC,MAAM,MAAM,EAAE,MAAM,IAAI,EAAE,MAAM,OAAO,CAAC,GACrF,OAAO,GACP,KAAK,CAAA;AAEX,MAAM,MAAM,UAAU,CACpB,WAAW,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC3C,OAAO,SAAS,MAAM,WAAW,GAAG,MAAM,IACxC,WAAW,CAAC,OAAO,CAAC,SAAS,iBAAiB,CAAC,MAAM,MAAM,EAAE,MAAM,MAAM,CAAC,GAC1E,MAAM,GACN,WAAW,CAAC,OAAO,CAAC,SAAS,gBAAgB,CAAC,MAAM,MAAM,EAAE,MAAM,OAAO,EAAE,MAAM,MAAM,CAAC,GACtF,MAAM,GACN,WAAW,CAAC,OAAO,CAAC,SAAS,iBAAiB,CAC1C,MAAM,MAAM,EACZ,MAAM,IAAI,EACV,MAAM,OAAO,EACb,MAAM,MAAM,CACb,GACD,MAAM,GACN,KAAK,CAAA;AAEb,MAAM,MAAM,QAAQ,CAClB,WAAW,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC3C,OAAO,SAAS,MAAM,WAAW,GAAG,MAAM,IACxC,WAAW,CAAC,OAAO,CAAC,SAAS,iBAAiB,CAAC,MAAM,MAAM,EAAE,MAAM,IAAI,CAAC,GAAG,IAAI,GAAG,KAAK,CAAA;AAE3F,MAAM,MAAM,cAAc,CAAC,WAAW,SAAS,cAAc,IAAI;IAC/D,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAA;IAC9C,QAAQ,EAAE,eAAe,CAAC,WAAW,CAAC,CAAA;IACtC,MAAM,EAAE,CAAC,SAAS,EAAE,aAAa,KAAK,IAAI,CAAA;IAC1C,IAAI,EAAE,CAAC,OAAO,EAAE,kBAAkB,CAAC,WAAW,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;CAClE,CAAA"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/lib/utils.d.ts CHANGED
@@ -7,6 +7,5 @@ export type ConsumeReaderParams<T> = {
7
7
  signal: AbortSignal;
8
8
  };
9
9
  export declare function consumeReader<T>(params: ConsumeReaderParams<T>): Promise<void>;
10
- export declare function toPromise<T = unknown>(execute: () => T | Promise<T>): Promise<T>;
11
10
  export declare function executeHandler<Definitions extends AnyDefinitions, Command extends keyof Definitions & string, Result extends ResultType<Definitions, Command> = ResultType<Definitions, Command>>(context: HandlerContext<Definitions>, payload: RequestCallPayload<RequestType, Command, ParamsType<Definitions, Command>>, execute: () => Result | Promise<Result>): Promise<void>;
12
11
  //# sourceMappingURL=utils.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,cAAc,EAEd,kBAAkB,EAClB,WAAW,EACZ,MAAM,kBAAkB,CAAA;AAIzB,OAAO,KAAK,EAAE,cAAc,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AAExE,MAAM,MAAM,mBAAmB,CAAC,CAAC,IAAI;IACnC,MAAM,CAAC,EAAE,MAAM,IAAI,CAAA;IACnB,OAAO,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IACpC,MAAM,EAAE,2BAA2B,CAAC,CAAC,CAAC,CAAA;IACtC,MAAM,EAAE,WAAW,CAAA;CACpB,CAAA;AAED,wBAAsB,aAAa,CAAC,CAAC,EAAE,MAAM,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAoBpF;AAGD,wBAAgB,SAAS,CAAC,CAAC,GAAG,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAMhF;AAED,wBAAsB,cAAc,CAClC,WAAW,SAAS,cAAc,EAClC,OAAO,SAAS,MAAM,WAAW,GAAG,MAAM,EAC1C,MAAM,SAAS,UAAU,CAAC,WAAW,EAAE,OAAO,CAAC,GAAG,UAAU,CAAC,WAAW,EAAE,OAAO,CAAC,EAElF,OAAO,EAAE,cAAc,CAAC,WAAW,CAAC,EACpC,OAAO,EAAE,kBAAkB,CAAC,WAAW,EAAE,OAAO,EAAE,UAAU,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC,EACnF,OAAO,EAAE,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,GACtC,OAAO,CAAC,IAAI,CAAC,CA2Bf"}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,cAAc,EAEd,kBAAkB,EAClB,WAAW,EACZ,MAAM,kBAAkB,CAAA;AAKzB,OAAO,KAAK,EAAE,cAAc,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AAExE,MAAM,MAAM,mBAAmB,CAAC,CAAC,IAAI;IACnC,MAAM,CAAC,EAAE,MAAM,IAAI,CAAA;IACnB,OAAO,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IACpC,MAAM,EAAE,2BAA2B,CAAC,CAAC,CAAC,CAAA;IACtC,MAAM,EAAE,WAAW,CAAA;CACpB,CAAA;AAED,wBAAsB,aAAa,CAAC,CAAC,EAAE,MAAM,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAoBpF;AAED,wBAAsB,cAAc,CAClC,WAAW,SAAS,cAAc,EAClC,OAAO,SAAS,MAAM,WAAW,GAAG,MAAM,EAC1C,MAAM,SAAS,UAAU,CAAC,WAAW,EAAE,OAAO,CAAC,GAAG,UAAU,CAAC,WAAW,EAAE,OAAO,CAAC,EAElF,OAAO,EAAE,cAAc,CAAC,WAAW,CAAC,EACpC,OAAO,EAAE,kBAAkB,CAAC,WAAW,EAAE,OAAO,EAAE,UAAU,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC,EACnF,OAAO,EAAE,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,GACtC,OAAO,CAAC,IAAI,CAAC,CA2Bf"}
package/lib/utils.js CHANGED
@@ -1,3 +1,4 @@
1
+ import { toPromise } from '@enkaku/util';
1
2
  import { HandlerError } from './error.js';
2
3
  import { ErrorRejection } from './rejections.js';
3
4
  export async function consumeReader(params) {
@@ -18,14 +19,6 @@ export async function consumeReader(params) {
18
19
  }
19
20
  handle();
20
21
  }
21
- // Replace by Promise.try() when widely available
22
- export function toPromise(execute) {
23
- try {
24
- return Promise.resolve(execute());
25
- } catch (err) {
26
- return Promise.reject(err);
27
- }
28
- }
29
22
  export async function executeHandler(context, payload, execute) {
30
23
  const controller = context.controllers[payload.rid];
31
24
  try {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@enkaku/server",
3
- "version": "0.2.0",
3
+ "version": "0.3.0",
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.0",
18
- "@enkaku/util": "^0.1.0",
19
- "@enkaku/stream": "^0.1.0"
17
+ "@enkaku/capability": "^0.3.0",
18
+ "@enkaku/util": "^0.3.0",
19
+ "@enkaku/stream": "^0.3.0",
20
+ "@enkaku/jwt": "^0.3.0"
20
21
  },
21
22
  "devDependencies": {
22
- "@enkaku/protocol": "^0.2.0",
23
- "@enkaku/transport": "^0.1.0"
23
+ "@enkaku/protocol": "^0.3.0",
24
+ "@enkaku/transport": "^0.3.0"
24
25
  },
25
26
  "scripts": {
26
27
  "build:clean": "del lib",