@dxos/websocket-rpc 0.8.4-main.9be5663bfe → 0.8.4-main.abd8ff62ef

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.
@@ -16,12 +16,7 @@ var authenticateRequestWithTokenAuth = (request, socket, upgradeHead, token, cb)
16
16
  if (!protocolHeader) {
17
17
  log("upgrade unauthorized, header missing", {
18
18
  header: request.headers["sec-websocket-protocol"]
19
- }, {
20
- F: __dxlog_file,
21
- L: 28,
22
- S: void 0,
23
- C: (f, a) => f(...a)
24
- });
19
+ }, { "~LogMeta": "~LogMeta", F: __dxlog_file, L: 13, S: void 0 });
25
20
  socket.write("HTTP/1.1 401 Unauthorized\r\n\r\n");
26
21
  socket.destroy();
27
22
  return;
@@ -32,12 +27,7 @@ var authenticateRequestWithTokenAuth = (request, socket, upgradeHead, token, cb)
32
27
  log("upgrade unauthorized", {
33
28
  token,
34
29
  foo: encodedToken
35
- }, {
36
- F: __dxlog_file,
37
- L: 40,
38
- S: void 0,
39
- C: (f, a) => f(...a)
40
- });
30
+ }, { "~LogMeta": "~LogMeta", F: __dxlog_file, L: 24, S: void 0 });
41
31
  socket.write("HTTP/1.1 401 Unauthorized\r\n\r\n");
42
32
  socket.destroy();
43
33
  return;
@@ -53,23 +43,18 @@ var WebSocketWithTokenAuth = class extends WebSocket {
53
43
  super(url, wsProtocols);
54
44
  log("encodedToken", {
55
45
  encodedToken
56
- }, {
57
- F: __dxlog_file,
58
- L: 55,
59
- S: this,
60
- C: (f, a) => f(...a)
61
- });
46
+ }, { "~LogMeta": "~LogMeta", F: __dxlog_file, L: 41, S: this });
62
47
  }
63
48
  };
64
49
 
65
50
  // src/client.ts
51
+ var __dxlog_file2 = "/__w/dxos/dxos/packages/core/mesh/websocket-rpc/src/client.ts";
66
52
  function _ts_decorate(decorators, target, key, desc) {
67
53
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
68
54
  if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
69
55
  else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
70
56
  return c > 3 && r && Object.defineProperty(target, key, r), r;
71
57
  }
72
- var __dxlog_file2 = "/__w/dxos/dxos/packages/core/mesh/websocket-rpc/src/client.ts";
73
58
  var WebsocketRpcClient = class {
74
59
  _params;
75
60
  _socket;
@@ -111,20 +96,10 @@ var WebsocketRpcClient = class {
111
96
  this._socket = new WebSocket2(this._params.url);
112
97
  }
113
98
  this._socket.onopen = async () => {
114
- log2("Socket open", void 0, {
115
- F: __dxlog_file2,
116
- L: 62,
117
- S: this,
118
- C: (f, a) => f(...a)
119
- });
99
+ log2("Socket open", void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file2, L: 56, S: this });
120
100
  try {
121
101
  await this._rpc.open();
122
- log2(`RPC open ${this._params.url}`, void 0, {
123
- F: __dxlog_file2,
124
- L: 65,
125
- S: this,
126
- C: (f, a) => f(...a)
127
- });
102
+ log2(`RPC open ${this._params.url}`, void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file2, L: 59, S: this });
128
103
  this.connected.emit();
129
104
  this._connectTrigger.wake();
130
105
  } catch (err) {
@@ -132,24 +107,14 @@ var WebsocketRpcClient = class {
132
107
  }
133
108
  };
134
109
  this._socket.onclose = async () => {
135
- log2(`Disconnected ${this._params.url}`, void 0, {
136
- F: __dxlog_file2,
137
- L: 74,
138
- S: this,
139
- C: (f, a) => f(...a)
140
- });
110
+ log2(`Disconnected ${this._params.url}`, void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file2, L: 67, S: this });
141
111
  this.disconnected.emit();
142
112
  await this.close();
143
113
  };
144
114
  this._socket.onerror = (event) => {
145
115
  log2.error(event.message ?? "Socket error", {
146
116
  url: this._params.url
147
- }, {
148
- F: __dxlog_file2,
149
- L: 81,
150
- S: this,
151
- C: (f, a) => f(...a)
152
- });
117
+ }, { "~LogMeta": "~LogMeta", F: __dxlog_file2, L: 73, S: this });
153
118
  const error = event.error ?? new Error(event.message);
154
119
  this.error.emit(error);
155
120
  this._connectTrigger.throw(error);
@@ -160,12 +125,7 @@ var WebsocketRpcClient = class {
160
125
  try {
161
126
  await this._rpc?.close();
162
127
  } catch (err) {
163
- log2.catch(err, void 0, {
164
- F: __dxlog_file2,
165
- L: 94,
166
- S: this,
167
- C: (f, a) => f(...a)
168
- });
128
+ log2.catch(err, void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file2, L: 86, S: this });
169
129
  }
170
130
  this._socket?.close();
171
131
  }
@@ -201,12 +161,7 @@ var WebsocketRpcServer = class {
201
161
  log3("connection", {
202
162
  url: request.url,
203
163
  headers: request.headers
204
- }, {
205
- F: __dxlog_file3,
206
- L: 40,
207
- S: this,
208
- C: (f, a) => f(...a)
209
- });
164
+ }, { "~LogMeta": "~LogMeta", F: __dxlog_file3, L: 23, S: this });
210
165
  const info = {
211
166
  request
212
167
  };
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../../../src/client.ts", "../../../src/token-auth.ts", "../../../src/server.ts"],
4
4
  "sourcesContent": ["//\n// Copyright 2022 DXOS.org\n//\n\nimport WebSocket from 'isomorphic-ws';\n\nimport { Event, Trigger } from '@dxos/async';\nimport { log, logInfo } from '@dxos/log';\nimport { type ProtoRpcPeer, type ProtoRpcPeerOptions, createProtoRpcPeer } from '@dxos/rpc';\n\nimport { WebSocketWithTokenAuth } from './token-auth';\n\nexport type WebsocketRpcClientProps<C, S> = {\n url: string;\n authenticationToken?: string;\n} & Pick<ProtoRpcPeerOptions<C, S>, 'requested' | 'exposed' | 'handlers' | 'noHandshake'>;\n\nexport class WebsocketRpcClient<C, S> {\n private _socket?: WebSocket;\n private _rpc?: ProtoRpcPeer<C>;\n private readonly _connectTrigger = new Trigger();\n\n readonly connected = new Event();\n readonly disconnected = new Event();\n readonly error = new Event<Error>();\n\n constructor(private readonly _params: WebsocketRpcClientProps<C, S>) {\n this._rpc = createProtoRpcPeer({\n requested: this._params.requested,\n exposed: this._params.exposed,\n handlers: this._params.handlers,\n noHandshake: this._params.noHandshake,\n port: {\n send: (msg) => {\n this._socket!.send(msg);\n },\n subscribe: (cb) => {\n this._socket!.onmessage = async (msg: WebSocket.MessageEvent) => {\n if (typeof Blob !== 'undefined' && msg.data instanceof Blob) {\n cb(Buffer.from(await msg.data.arrayBuffer()));\n } else {\n cb(msg.data as any);\n }\n };\n },\n },\n });\n }\n\n @logInfo\n get url() {\n return this._params.url;\n }\n\n async open(): Promise<void> {\n if (this._params.authenticationToken) {\n this._socket = new WebSocketWithTokenAuth(this._params.url, this._params.authenticationToken);\n } else {\n this._socket = new WebSocket(this._params.url);\n }\n this._socket.onopen = async () => {\n log('Socket open');\n try {\n await this._rpc!.open();\n log(`RPC open ${this._params.url}`);\n this.connected.emit();\n this._connectTrigger.wake();\n } catch (err: any) {\n this.error.emit(err);\n }\n };\n\n this._socket.onclose = async () => {\n log(`Disconnected ${this._params.url}`);\n this.disconnected.emit();\n await this.close();\n };\n\n this._socket.onerror = (event: WebSocket.ErrorEvent) => {\n // Browsers do not include the error message in the event object, so we cannot discern 401 errors from other errors.\n log.error(event.message ?? 'Socket error', { url: this._params.url });\n const error = event.error ?? new Error(event.message);\n this.error.emit(error);\n this._connectTrigger.throw(error);\n };\n\n await this._connectTrigger.wait();\n }\n\n async close(): Promise<void> {\n try {\n await this._rpc?.close();\n } catch (err) {\n log.catch(err);\n }\n this._socket?.close();\n }\n\n get rpc() {\n return this._rpc!.rpc;\n }\n}\n", "//\n// Copyright 2024 DXOS.org\n//\n\n// Implement WS header-based auth similar to https://github.com/kubernetes/kubernetes/commit/714f97d7baf4975ad3aa47735a868a81a984d1f0\n// https://stackoverflow.com/questions/4361173/http-headers-in-websockets-client-api/77060459#77060459\n\nimport { type IncomingMessage } from 'http';\nimport WebSocket from 'isomorphic-ws';\nimport { type Socket } from 'node:net';\n\nimport { log } from '@dxos/log';\n\nconst PROTOCOL_TOKEN_PREFIX = 'base64url.bearer.authorization.dxos.org';\n\n// TODO: implement middleware which removes the token from the request\n\nexport const authenticateRequestWithTokenAuth = (\n request: IncomingMessage,\n socket: Socket,\n upgradeHead: Buffer,\n token: string,\n cb: (request: IncomingMessage, socket: Socket, upgradeHead: Buffer) => void,\n) => {\n const protocolHeader = request.headers['sec-websocket-protocol'];\n\n if (!protocolHeader) {\n log('upgrade unauthorized, header missing', { header: request.headers['sec-websocket-protocol'] });\n socket.write('HTTP/1.1 401 Unauthorized\\r\\n\\r\\n');\n socket.destroy();\n return;\n }\n\n const tokenHeader = protocolHeader.replace(new RegExp(`^${PROTOCOL_TOKEN_PREFIX}.`), '');\n\n // padding characters are not allowed as a websocket protocol.\n const encodedToken = Buffer.from(token).toString('base64').replace(/=*$/, '');\n\n if (tokenHeader !== encodedToken) {\n log('upgrade unauthorized', { token, foo: encodedToken });\n socket.write('HTTP/1.1 401 Unauthorized\\r\\n\\r\\n');\n socket.destroy();\n return;\n }\n\n cb(request, socket, upgradeHead);\n};\n\nexport class WebSocketWithTokenAuth extends WebSocket {\n constructor(url: string, token: string) {\n const encodedToken = Buffer.from(token).toString('base64').replace(/=*$/, '');\n\n const wsProtocols = [`base64url.bearer.authorization.dxos.org.${encodedToken}`];\n super(url, wsProtocols);\n log('encodedToken', {\n encodedToken,\n });\n }\n}\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { type IncomingMessage } from 'http';\nimport WebSocket from 'isomorphic-ws';\nimport { type Socket } from 'node:net';\n\nimport { log } from '@dxos/log';\nimport { type ProtoRpcPeer, type ProtoRpcPeerOptions, createProtoRpcPeer } from '@dxos/rpc';\n\nexport type ConnectionInfo = {\n request: IncomingMessage;\n};\n\nexport type ConnectionHandler<C, S> = {\n onOpen?: (rpc: ProtoRpcPeer<C>) => Promise<void>;\n onClose?: (rpc: ProtoRpcPeer<C>) => Promise<void>;\n} & Pick<ProtoRpcPeerOptions<C, S>, 'requested' | 'exposed' | 'handlers'>;\n\nexport type WebsocketRpcServerProps<C, S> = {\n onConnection: (info: ConnectionInfo) => Promise<ConnectionHandler<C, S>>;\n} & WebSocket.ServerOptions;\n\nexport class WebsocketRpcServer<C, S> {\n private _server?: WebSocket.Server;\n\n constructor(private readonly _params: WebsocketRpcServerProps<C, S>) {}\n handleUpgrade(request: IncomingMessage, socket: Socket, head: Buffer): void {\n this._server?.handleUpgrade(request, socket, head, (ws: WebSocket) => {\n this._server?.emit('connection', ws, request);\n });\n }\n\n async open(): Promise<void> {\n this._server = new WebSocket.Server({\n ...this._params,\n });\n this._server.on('connection', async (socket: WebSocket, request: IncomingMessage) => {\n log('connection', { url: request.url, headers: request.headers });\n const info: ConnectionInfo = {\n request,\n };\n const { onOpen, onClose, ...options } = await this._params.onConnection(info);\n const rpc = createProtoRpcPeer<C, S>({\n ...options,\n port: {\n send: (msg) => {\n socket.send(msg);\n },\n subscribe: (cb) => {\n socket.onmessage = async (msg: WebSocket.MessageEvent) => {\n if (typeof Blob !== 'undefined' && msg.data instanceof Blob) {\n cb(Buffer.from(await msg.data.arrayBuffer()));\n } else {\n cb(msg.data as any);\n }\n };\n },\n },\n });\n\n await rpc.open();\n await onOpen?.(rpc);\n socket.onclose = async () => {\n await onClose?.(rpc);\n await rpc.close();\n };\n });\n }\n\n async close(): Promise<void> {\n this._server?.close();\n }\n}\n"],
5
- "mappings": "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",
6
- "names": ["WebSocket", "Event", "Trigger", "log", "logInfo", "createProtoRpcPeer", "WebSocket", "log", "PROTOCOL_TOKEN_PREFIX", "authenticateRequestWithTokenAuth", "request", "socket", "upgradeHead", "token", "cb", "protocolHeader", "headers", "header", "write", "destroy", "tokenHeader", "replace", "RegExp", "encodedToken", "Buffer", "from", "toString", "foo", "WebSocketWithTokenAuth", "url", "wsProtocols", "WebsocketRpcClient", "_socket", "_rpc", "_connectTrigger", "Trigger", "connected", "Event", "disconnected", "error", "_params", "createProtoRpcPeer", "requested", "exposed", "handlers", "noHandshake", "port", "send", "msg", "subscribe", "cb", "onmessage", "Blob", "data", "Buffer", "from", "arrayBuffer", "url", "open", "authenticationToken", "WebSocketWithTokenAuth", "WebSocket", "onopen", "log", "emit", "wake", "err", "onclose", "close", "onerror", "event", "message", "Error", "throw", "wait", "catch", "rpc", "WebSocket", "log", "createProtoRpcPeer", "WebsocketRpcServer", "_server", "_params", "handleUpgrade", "request", "socket", "head", "ws", "emit", "open", "Server", "on", "url", "headers", "info", "onOpen", "onClose", "options", "onConnection", "rpc", "port", "send", "msg", "subscribe", "cb", "onmessage", "Blob", "data", "Buffer", "from", "arrayBuffer", "onclose", "close"]
5
+ "mappings": "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",
6
+ "names": ["WebSocket", "Trigger", "log", "logInfo", "createProtoRpcPeer", "WebSocketWithTokenAuth", "WebSocket", "log", "PROTOCOL_TOKEN_PREFIX", "authenticateRequestWithTokenAuth", "protocolHeader", "request", "socket", "encodedToken", "token", "toString", "foo", "write", "WebSocketWithTokenAuth", "wsProtocols", "__dxlog_file", "_socket", "_rpc", "_connectTrigger", "connected", "Event", "disconnected", "error", "_params", "createProtoRpcPeer", "requested", "exposed", "handlers", "noHandshake", "port", "send", "subscribe", "onmessage", "cb", "Buffer", "arrayBuffer", "msg", "WebSocketWithTokenAuth", "WebSocket", "log", "emit", "err", "url", "event", "message", "throw", "catch", "WebSocket", "log", "createProtoRpcPeer", "__dxlog_file", "WebsocketRpcServer", "_server", "handleUpgrade", "request", "emit", "headers", "options", "port", "subscribe", "cb", "from", "msg", "data", "socket", "onclose", "onClose", "close"]
7
7
  }
@@ -1 +1 @@
1
- {"inputs":{"src/token-auth.ts":{"bytes":6759,"imports":[{"path":"isomorphic-ws","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true}],"format":"esm"},"src/client.ts":{"bytes":12077,"imports":[{"path":"isomorphic-ws","kind":"import-statement","external":true},{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/rpc","kind":"import-statement","external":true},{"path":"src/token-auth.ts","kind":"import-statement","original":"./token-auth"}],"format":"esm"},"src/server.ts":{"bytes":7411,"imports":[{"path":"isomorphic-ws","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/rpc","kind":"import-statement","external":true}],"format":"esm"},"src/index.ts":{"bytes":633,"imports":[{"path":"src/client.ts","kind":"import-statement","original":"./client"},{"path":"src/server.ts","kind":"import-statement","original":"./server"},{"path":"src/token-auth.ts","kind":"import-statement","original":"./token-auth"}],"format":"esm"}},"outputs":{"dist/lib/neutral/index.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":12570},"dist/lib/neutral/index.mjs":{"imports":[{"path":"isomorphic-ws","kind":"import-statement","external":true},{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/rpc","kind":"import-statement","external":true},{"path":"isomorphic-ws","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"isomorphic-ws","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/rpc","kind":"import-statement","external":true}],"exports":["WebSocketWithTokenAuth","WebsocketRpcClient","WebsocketRpcServer","authenticateRequestWithTokenAuth"],"entryPoint":"src/index.ts","inputs":{"src/client.ts":{"bytesInOutput":3469},"src/token-auth.ts":{"bytesInOutput":1656},"src/index.ts":{"bytesInOutput":0},"src/server.ts":{"bytesInOutput":1697}},"bytes":7083}}}
1
+ {"inputs":{"src/token-auth.ts":{"bytes":6552,"imports":[{"path":"isomorphic-ws","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true}],"format":"esm"},"src/client.ts":{"bytes":11605,"imports":[{"path":"isomorphic-ws","kind":"import-statement","external":true},{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/rpc","kind":"import-statement","external":true},{"path":"src/token-auth.ts","kind":"import-statement","original":"./token-auth"}],"format":"esm"},"src/server.ts":{"bytes":7320,"imports":[{"path":"isomorphic-ws","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/rpc","kind":"import-statement","external":true}],"format":"esm"},"src/index.ts":{"bytes":546,"imports":[{"path":"src/client.ts","kind":"import-statement","original":"./client"},{"path":"src/server.ts","kind":"import-statement","original":"./server"},{"path":"src/token-auth.ts","kind":"import-statement","original":"./token-auth"}],"format":"esm"}},"outputs":{"dist/lib/neutral/index.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":12065},"dist/lib/neutral/index.mjs":{"imports":[{"path":"isomorphic-ws","kind":"import-statement","external":true},{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/rpc","kind":"import-statement","external":true},{"path":"isomorphic-ws","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"isomorphic-ws","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/rpc","kind":"import-statement","external":true}],"exports":["WebSocketWithTokenAuth","WebsocketRpcClient","WebsocketRpcServer","authenticateRequestWithTokenAuth"],"entryPoint":"src/index.ts","inputs":{"src/client.ts":{"bytesInOutput":3279},"src/token-auth.ts":{"bytesInOutput":1578},"src/index.ts":{"bytesInOutput":0},"src/server.ts":{"bytesInOutput":1661}},"bytes":6779}}}
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../src/client.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,KAAK,EAAW,MAAM,aAAa,CAAC;AAE7C,OAAO,EAAqB,KAAK,mBAAmB,EAAsB,MAAM,WAAW,CAAC;AAI5F,MAAM,MAAM,uBAAuB,CAAC,CAAC,EAAE,CAAC,IAAI;IAC1C,GAAG,EAAE,MAAM,CAAC;IACZ,mBAAmB,CAAC,EAAE,MAAM,CAAC;CAC9B,GAAG,IAAI,CAAC,mBAAmB,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,WAAW,GAAG,SAAS,GAAG,UAAU,GAAG,aAAa,CAAC,CAAC;AAE1F,qBAAa,kBAAkB,CAAC,CAAC,EAAE,CAAC;IAStB,OAAO,CAAC,QAAQ,CAAC,OAAO;IARpC,OAAO,CAAC,OAAO,CAAC,CAAY;IAC5B,OAAO,CAAC,IAAI,CAAC,CAAkB;IAC/B,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAiB;IAEjD,QAAQ,CAAC,SAAS,cAAe;IACjC,QAAQ,CAAC,YAAY,cAAe;IACpC,QAAQ,CAAC,KAAK,eAAsB;gBAEP,OAAO,EAAE,uBAAuB,CAAC,CAAC,EAAE,CAAC,CAAC;IAuBnE,IACI,GAAG,WAEN;IAEK,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAmCrB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAS5B,IAAI,GAAG,MAEN;CACF"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../src/client.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,KAAK,EAAW,MAAM,aAAa,CAAC;AAE7C,OAAO,EAAqB,KAAK,mBAAmB,EAAsB,MAAM,WAAW,CAAC;AAI5F,MAAM,MAAM,uBAAuB,CAAC,CAAC,EAAE,CAAC,IAAI;IAC1C,GAAG,EAAE,MAAM,CAAC;IACZ,mBAAmB,CAAC,EAAE,MAAM,CAAC;CAC9B,GAAG,IAAI,CAAC,mBAAmB,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,WAAW,GAAG,SAAS,GAAG,UAAU,GAAG,aAAa,CAAC,CAAC;AAE1F,qBAAa,kBAAkB,CAAC,CAAC,EAAE,CAAC;IAStB,OAAO,CAAC,QAAQ,CAAC,OAAO;IARpC,OAAO,CAAC,OAAO,CAAC,CAAY;IAC5B,OAAO,CAAC,IAAI,CAAC,CAAkB;IAC/B,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAiB;IAEjD,QAAQ,CAAC,SAAS,cAAe;IACjC,QAAQ,CAAC,YAAY,cAAe;IACpC,QAAQ,CAAC,KAAK,eAAsB;IAEpC,YAA6B,OAAO,EAAE,uBAAuB,CAAC,CAAC,EAAE,CAAC,CAAC,EAqBlE;IAED,IACI,GAAG,WAEN;IAEK,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAiC1B;IAEK,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAO3B;IAED,IAAI,GAAG,MAEN;CACF"}
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../../src/server.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,MAAM,CAAC;AAC5C,OAAO,SAAS,MAAM,eAAe,CAAC;AACtC,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,UAAU,CAAC;AAGvC,OAAO,EAAE,KAAK,YAAY,EAAE,KAAK,mBAAmB,EAAsB,MAAM,WAAW,CAAC;AAE5F,MAAM,MAAM,cAAc,GAAG;IAC3B,OAAO,EAAE,eAAe,CAAC;CAC1B,CAAC;AAEF,MAAM,MAAM,iBAAiB,CAAC,CAAC,EAAE,CAAC,IAAI;IACpC,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACjD,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACnD,GAAG,IAAI,CAAC,mBAAmB,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,WAAW,GAAG,SAAS,GAAG,UAAU,CAAC,CAAC;AAE1E,MAAM,MAAM,uBAAuB,CAAC,CAAC,EAAE,CAAC,IAAI;IAC1C,YAAY,EAAE,CAAC,IAAI,EAAE,cAAc,KAAK,OAAO,CAAC,iBAAiB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;CAC1E,GAAG,SAAS,CAAC,aAAa,CAAC;AAE5B,qBAAa,kBAAkB,CAAC,CAAC,EAAE,CAAC;IAGtB,OAAO,CAAC,QAAQ,CAAC,OAAO;IAFpC,OAAO,CAAC,OAAO,CAAC,CAAmB;gBAEN,OAAO,EAAE,uBAAuB,CAAC,CAAC,EAAE,CAAC,CAAC;IACnE,aAAa,CAAC,OAAO,EAAE,eAAe,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI;IAMrE,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAqCrB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAG7B"}
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../../src/server.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,MAAM,CAAC;AAC5C,OAAO,SAAS,MAAM,eAAe,CAAC;AACtC,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,UAAU,CAAC;AAGvC,OAAO,EAAE,KAAK,YAAY,EAAE,KAAK,mBAAmB,EAAsB,MAAM,WAAW,CAAC;AAE5F,MAAM,MAAM,cAAc,GAAG;IAC3B,OAAO,EAAE,eAAe,CAAC;CAC1B,CAAC;AAEF,MAAM,MAAM,iBAAiB,CAAC,CAAC,EAAE,CAAC,IAAI;IACpC,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACjD,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACnD,GAAG,IAAI,CAAC,mBAAmB,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,WAAW,GAAG,SAAS,GAAG,UAAU,CAAC,CAAC;AAE1E,MAAM,MAAM,uBAAuB,CAAC,CAAC,EAAE,CAAC,IAAI;IAC1C,YAAY,EAAE,CAAC,IAAI,EAAE,cAAc,KAAK,OAAO,CAAC,iBAAiB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;CAC1E,GAAG,SAAS,CAAC,aAAa,CAAC;AAE5B,qBAAa,kBAAkB,CAAC,CAAC,EAAE,CAAC;IAGtB,OAAO,CAAC,QAAQ,CAAC,OAAO;IAFpC,OAAO,CAAC,OAAO,CAAC,CAAmB;IAEnC,YAA6B,OAAO,EAAE,uBAAuB,CAAC,CAAC,EAAE,CAAC,CAAC,EAAI;IACvE,aAAa,CAAC,OAAO,EAAE,eAAe,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAI1E;IAEK,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAmC1B;IAEK,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAE3B;CACF"}
@@ -1 +1 @@
1
- {"version":3,"file":"token-auth.d.ts","sourceRoot":"","sources":["../../../src/token-auth.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,MAAM,CAAC;AAC5C,OAAO,SAAS,MAAM,eAAe,CAAC;AACtC,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,UAAU,CAAC;AAQvC,eAAO,MAAM,gCAAgC,GAC3C,SAAS,eAAe,EACxB,QAAQ,MAAM,EACd,aAAa,MAAM,EACnB,OAAO,MAAM,EACb,IAAI,CAAC,OAAO,EAAE,eAAe,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,KAAK,IAAI,SAwB5E,CAAC;AAEF,qBAAa,sBAAuB,SAAQ,SAAS;gBACvC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM;CASvC"}
1
+ {"version":3,"file":"token-auth.d.ts","sourceRoot":"","sources":["../../../src/token-auth.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,MAAM,CAAC;AAC5C,OAAO,SAAS,MAAM,eAAe,CAAC;AACtC,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,UAAU,CAAC;AAQvC,eAAO,MAAM,gCAAgC,YAClC,eAAe,UAChB,MAAM,eACD,MAAM,SACZ,MAAM,MACT,CAAC,OAAO,EAAE,eAAe,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,KAAK,IAAI,SAwB5E,CAAC;AAEF,qBAAa,sBAAuB,SAAQ,SAAS;IACnD,YAAY,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAQrC;CACF"}