@atcute/xrpc-server 0.1.2 → 0.1.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/dist/auth/jwt.d.ts +10 -15
- package/dist/auth/jwt.d.ts.map +1 -1
- package/dist/auth/jwt.js.map +1 -1
- package/dist/main/index.d.ts +1 -0
- package/dist/main/index.d.ts.map +1 -1
- package/dist/main/index.js +1 -0
- package/dist/main/index.js.map +1 -1
- package/dist/main/router.d.ts +12 -3
- package/dist/main/router.d.ts.map +1 -1
- package/dist/main/router.js +87 -7
- package/dist/main/router.js.map +1 -1
- package/dist/main/types/operation.d.ts +16 -1
- package/dist/main/types/operation.d.ts.map +1 -1
- package/dist/main/types/websocket.d.ts +10 -0
- package/dist/main/types/websocket.d.ts.map +1 -0
- package/dist/main/types/websocket.js +2 -0
- package/dist/main/types/websocket.js.map +1 -0
- package/dist/main/utils/event-emitter.d.ts +37 -0
- package/dist/main/utils/event-emitter.d.ts.map +1 -0
- package/dist/main/utils/event-emitter.js +96 -0
- package/dist/main/utils/event-emitter.js.map +1 -0
- package/dist/main/utils/frames.d.ts +5 -0
- package/dist/main/utils/frames.d.ts.map +1 -0
- package/dist/main/utils/frames.js +45 -0
- package/dist/main/utils/frames.js.map +1 -0
- package/dist/main/utils/websocket-mock.d.ts +24 -0
- package/dist/main/utils/websocket-mock.d.ts.map +1 -0
- package/dist/main/utils/websocket-mock.js +71 -0
- package/dist/main/utils/websocket-mock.js.map +1 -0
- package/dist/main/xrpc-error.d.ts +11 -0
- package/dist/main/xrpc-error.d.ts.map +1 -1
- package/dist/main/xrpc-error.js +11 -0
- package/dist/main/xrpc-error.js.map +1 -1
- package/lib/auth/jwt.ts +16 -5
- package/lib/main/index.ts +2 -0
- package/lib/main/router.ts +131 -10
- package/lib/main/types/operation.ts +33 -0
- package/lib/main/types/websocket.ts +14 -0
- package/lib/main/utils/event-emitter.ts +116 -0
- package/lib/main/utils/frames.ts +71 -0
- package/lib/main/utils/websocket-mock.ts +111 -0
- package/lib/main/xrpc-error.ts +20 -0
- package/package.json +6 -4
package/dist/auth/jwt.d.ts
CHANGED
|
@@ -1,21 +1,17 @@
|
|
|
1
|
-
import
|
|
1
|
+
import type { Did, Nsid } from '@atcute/lexicons';
|
|
2
2
|
import type { Result } from '../types/misc.js';
|
|
3
3
|
import type { AuthError } from './types.js';
|
|
4
|
-
|
|
5
|
-
typ
|
|
6
|
-
alg:
|
|
7
|
-
}, undefined>;
|
|
8
|
-
export interface JwtHeader extends v.Infer<typeof jwtHeader> {
|
|
4
|
+
export interface JwtHeader {
|
|
5
|
+
typ?: string;
|
|
6
|
+
alg: string;
|
|
9
7
|
}
|
|
10
|
-
|
|
11
|
-
iss:
|
|
12
|
-
aud:
|
|
8
|
+
export interface JwtPayload {
|
|
9
|
+
iss: Did;
|
|
10
|
+
aud: Did;
|
|
13
11
|
exp: number;
|
|
14
|
-
iat?: number
|
|
15
|
-
lxm?:
|
|
16
|
-
jti?: string
|
|
17
|
-
}>;
|
|
18
|
-
export interface JwtPayload extends v.Infer<typeof jwtPayload> {
|
|
12
|
+
iat?: number;
|
|
13
|
+
lxm?: Nsid;
|
|
14
|
+
jti?: string;
|
|
19
15
|
}
|
|
20
16
|
export interface ParsedJwt {
|
|
21
17
|
header: JwtHeader;
|
|
@@ -24,5 +20,4 @@ export interface ParsedJwt {
|
|
|
24
20
|
signature: Uint8Array<ArrayBuffer>;
|
|
25
21
|
}
|
|
26
22
|
export declare const parseJwt: (jwtString: string) => Result<ParsedJwt, AuthError>;
|
|
27
|
-
export {};
|
|
28
23
|
//# sourceMappingURL=jwt.d.ts.map
|
package/dist/auth/jwt.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"jwt.d.ts","sourceRoot":"","sources":["../../lib/auth/jwt.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"jwt.d.ts","sourceRoot":"","sources":["../../lib/auth/jwt.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAKlD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAE/C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAO5C,MAAM,WAAW,SAAS;IACzB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;CACZ;AAOD,MAAM,WAAW,UAAU;IAC1B,GAAG,EAAE,GAAG,CAAC;IACT,GAAG,EAAE,GAAG,CAAC;IACT,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,IAAI,CAAC;IACX,GAAG,CAAC,EAAE,MAAM,CAAC;CACb;AAsBD,MAAM,WAAW,SAAS;IACzB,MAAM,EAAE,SAAS,CAAC;IAClB,OAAO,EAAE,UAAU,CAAC;IACpB,OAAO,EAAE,UAAU,CAAC,WAAW,CAAC,CAAC;IACjC,SAAS,EAAE,UAAU,CAAC,WAAW,CAAC,CAAC;CACnC;AAoCD,eAAO,MAAM,QAAQ,GAAI,WAAW,MAAM,KAAG,MAAM,CAAC,SAAS,EAAE,SAAS,CAsCvE,CAAC"}
|
package/dist/auth/jwt.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"jwt.js","sourceRoot":"","sources":["../../lib/auth/jwt.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"jwt.js","sourceRoot":"","sources":["../../lib/auth/jwt.ts"],"names":[],"mappings":"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"}
|
package/dist/main/index.d.ts
CHANGED
package/dist/main/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../lib/main/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../lib/main/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC;AAEhC,cAAc,sBAAsB,CAAC"}
|
package/dist/main/index.js
CHANGED
package/dist/main/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../lib/main/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../lib/main/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC;AAEhC,cAAc,sBAAsB,CAAC"}
|
package/dist/main/router.d.ts
CHANGED
|
@@ -1,22 +1,31 @@
|
|
|
1
|
-
import { type XRPCProcedureMetadata, type XRPCQueryMetadata } from '@atcute/lexicons/validations';
|
|
1
|
+
import { type XRPCProcedureMetadata, type XRPCQueryMetadata, type XRPCSubscriptionMetadata } from '@atcute/lexicons/validations';
|
|
2
2
|
import type { Promisable } from '../types/misc.js';
|
|
3
|
-
import type { ProcedureConfig, QueryConfig } from './types/operation.js';
|
|
3
|
+
import type { ProcedureConfig, QueryConfig, SubscriptionConfig } from './types/operation.js';
|
|
4
|
+
import type { WebSocketAdapter } from './types/websocket.js';
|
|
4
5
|
import { type Middleware } from './utils/middlewares.js';
|
|
5
6
|
export type FetchMiddleware = Middleware<[request: Request], Promise<Response>>;
|
|
6
7
|
export type NotFoundHandler = (request: Request) => Promisable<Response>;
|
|
7
8
|
export type ExceptionHandler = (error: unknown, request: Request) => Promisable<Response>;
|
|
9
|
+
export type SubscriptionExceptionHandler = (error: unknown, request: Request) => void;
|
|
8
10
|
export declare const defaultExceptionHandler: ExceptionHandler;
|
|
9
11
|
export declare const defaultNotFoundHandler: NotFoundHandler;
|
|
12
|
+
export declare const defaultSubscriptionExceptionHandler: SubscriptionExceptionHandler;
|
|
10
13
|
export interface XRPCRouterOptions {
|
|
11
14
|
middlewares?: FetchMiddleware[];
|
|
12
15
|
handleNotFound?: NotFoundHandler;
|
|
13
16
|
handleException?: ExceptionHandler;
|
|
17
|
+
handleSubscriptionException?: SubscriptionExceptionHandler;
|
|
18
|
+
websocket?: WebSocketAdapter;
|
|
14
19
|
}
|
|
15
20
|
export declare class XRPCRouter {
|
|
16
21
|
#private;
|
|
17
22
|
fetch: (request: Request) => Promise<Response>;
|
|
18
|
-
constructor({ middlewares, handleException, handleNotFound, }?: XRPCRouterOptions);
|
|
23
|
+
constructor({ middlewares, handleException, handleNotFound, handleSubscriptionException, websocket, }?: XRPCRouterOptions);
|
|
24
|
+
/** @deprecated use `addQuery` and `addProcedure` instead */
|
|
19
25
|
add<TQuery extends XRPCQueryMetadata>(query: TQuery, config: QueryConfig<TQuery>): void;
|
|
20
26
|
add<TProcedure extends XRPCProcedureMetadata>(procedure: TProcedure, config: ProcedureConfig<TProcedure>): void;
|
|
27
|
+
addQuery<TQuery extends XRPCQueryMetadata, TConfig extends QueryConfig<TQuery>>(query: TQuery, config: TConfig): void;
|
|
28
|
+
addProcedure<TProcedure extends XRPCProcedureMetadata, TConfig extends ProcedureConfig<TProcedure>>(procedure: TProcedure, config: TConfig): void;
|
|
29
|
+
addSubscription<TSubscription extends XRPCSubscriptionMetadata, TConfig extends SubscriptionConfig<TSubscription>>(subscription: TSubscription, config: TConfig): void;
|
|
21
30
|
}
|
|
22
31
|
//# sourceMappingURL=router.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"router.d.ts","sourceRoot":"","sources":["../../lib/main/router.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"router.d.ts","sourceRoot":"","sources":["../../lib/main/router.ts"],"names":[],"mappings":"AAAA,OAAO,EAEN,KAAK,qBAAqB,EAC1B,KAAK,iBAAiB,EACtB,KAAK,wBAAwB,EAC7B,MAAM,8BAA8B,CAAC;AAEtC,OAAO,KAAK,EAAW,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE5D,OAAO,KAAK,EACX,eAAe,EACf,WAAW,EACX,kBAAkB,EAGlB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAE7D,OAAO,EAA+B,KAAK,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAkBtF,MAAM,MAAM,eAAe,GAAG,UAAU,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;AAEhF,MAAM,MAAM,eAAe,GAAG,CAAC,OAAO,EAAE,OAAO,KAAK,UAAU,CAAC,QAAQ,CAAC,CAAC;AACzE,MAAM,MAAM,gBAAgB,GAAG,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,KAAK,UAAU,CAAC,QAAQ,CAAC,CAAC;AAC1F,MAAM,MAAM,4BAA4B,GAAG,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;AAEtF,eAAO,MAAM,uBAAuB,EAAE,gBAarC,CAAC;AAEF,eAAO,MAAM,sBAAsB,EAAE,eAEpC,CAAC;AAEF,eAAO,MAAM,mCAAmC,EAAE,4BAEjD,CAAC;AAEF,MAAM,WAAW,iBAAiB;IACjC,WAAW,CAAC,EAAE,eAAe,EAAE,CAAC;IAChC,cAAc,CAAC,EAAE,eAAe,CAAC;IACjC,eAAe,CAAC,EAAE,gBAAgB,CAAC;IACnC,2BAA2B,CAAC,EAAE,4BAA4B,CAAC;IAC3D,SAAS,CAAC,EAAE,gBAAgB,CAAC;CAC7B;AAED,qBAAa,UAAU;;IAOtB,KAAK,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAC;gBAEnC,EACX,WAAgB,EAChB,eAAyC,EACzC,cAAuC,EACvC,2BAAiE,EACjE,SAAS,GACT,GAAE,iBAAsB;IA4CzB,4DAA4D;IAC5D,GAAG,CAAC,MAAM,SAAS,iBAAiB,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,CAAC,MAAM,CAAC,GAAG,IAAI;IACvF,GAAG,CAAC,UAAU,SAAS,qBAAqB,EAC3C,SAAS,EAAE,UAAU,EACrB,MAAM,EAAE,eAAe,CAAC,UAAU,CAAC,GACjC,IAAI;IAYP,QAAQ,CAAC,MAAM,SAAS,iBAAiB,EAAE,OAAO,SAAS,WAAW,CAAC,MAAM,CAAC,EAC7E,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,OAAO,GACb,IAAI;IAqCP,YAAY,CAAC,UAAU,SAAS,qBAAqB,EAAE,OAAO,SAAS,eAAe,CAAC,UAAU,CAAC,EACjG,SAAS,EAAE,UAAU,EACrB,MAAM,EAAE,OAAO,GACb,IAAI;IA4EP,eAAe,CACd,aAAa,SAAS,wBAAwB,EAC9C,OAAO,SAAS,kBAAkB,CAAC,aAAa,CAAC,EAChD,YAAY,EAAE,aAAa,EAAE,MAAM,EAAE,OAAO,GAAG,IAAI;CAwFrD"}
|
package/dist/main/router.js
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
|
-
import { safeParse } from '@atcute/lexicons/validations';
|
|
1
|
+
import { safeParse, } from '@atcute/lexicons/validations';
|
|
2
|
+
import { encodeErrorFrame, encodeMessageFrame, extractMessageType, omitMessageType } from './utils/frames.js';
|
|
2
3
|
import { createAsyncMiddlewareRunner } from './utils/middlewares.js';
|
|
3
4
|
import { constructMimeValidator } from './utils/request-input.js';
|
|
4
5
|
import { constructParamsHandler } from './utils/request-params.js';
|
|
5
6
|
import { invalidRequest, validationError } from './utils/response.js';
|
|
6
|
-
import { XRPCError } from './xrpc-error.js';
|
|
7
|
+
import { XRPCError, XRPCSubscriptionError } from './xrpc-error.js';
|
|
7
8
|
export const defaultExceptionHandler = (error) => {
|
|
8
9
|
if (error instanceof XRPCError) {
|
|
9
10
|
return error.toResponse();
|
|
@@ -16,16 +17,23 @@ export const defaultExceptionHandler = (error) => {
|
|
|
16
17
|
export const defaultNotFoundHandler = () => {
|
|
17
18
|
return new Response('Not Found', { status: 404 });
|
|
18
19
|
};
|
|
20
|
+
export const defaultSubscriptionExceptionHandler = (error) => {
|
|
21
|
+
throw error;
|
|
22
|
+
};
|
|
19
23
|
export class XRPCRouter {
|
|
20
24
|
#handlers = {};
|
|
21
25
|
#handleNotFound;
|
|
22
26
|
#handleException;
|
|
27
|
+
#handleSubscriptionException;
|
|
28
|
+
#websocket;
|
|
23
29
|
fetch;
|
|
24
|
-
constructor({ middlewares = [], handleException = defaultExceptionHandler, handleNotFound = defaultNotFoundHandler, } = {}) {
|
|
30
|
+
constructor({ middlewares = [], handleException = defaultExceptionHandler, handleNotFound = defaultNotFoundHandler, handleSubscriptionException = defaultSubscriptionExceptionHandler, websocket, } = {}) {
|
|
25
31
|
const runner = createAsyncMiddlewareRunner([...middlewares, (request) => this.#dispatch(request)]);
|
|
26
32
|
this.fetch = (request) => runner(request);
|
|
27
33
|
this.#handleException = handleException;
|
|
28
34
|
this.#handleNotFound = handleNotFound;
|
|
35
|
+
this.#handleSubscriptionException = handleSubscriptionException;
|
|
36
|
+
this.#websocket = websocket;
|
|
29
37
|
}
|
|
30
38
|
async #dispatch(request) {
|
|
31
39
|
const url = new URL(request.url);
|
|
@@ -55,14 +63,14 @@ export class XRPCRouter {
|
|
|
55
63
|
add(operation, config) {
|
|
56
64
|
switch (operation.type) {
|
|
57
65
|
case 'xrpc_query': {
|
|
58
|
-
return this
|
|
66
|
+
return this.addQuery(operation, config);
|
|
59
67
|
}
|
|
60
68
|
case 'xrpc_procedure': {
|
|
61
|
-
return this
|
|
69
|
+
return this.addProcedure(operation, config);
|
|
62
70
|
}
|
|
63
71
|
}
|
|
64
72
|
}
|
|
65
|
-
|
|
73
|
+
addQuery(query, config) {
|
|
66
74
|
const handleParams = query.params ? constructParamsHandler(query.params) : null;
|
|
67
75
|
const handler = config.handler;
|
|
68
76
|
this.#handlers[query.nsid] = {
|
|
@@ -91,7 +99,7 @@ export class XRPCRouter {
|
|
|
91
99
|
},
|
|
92
100
|
};
|
|
93
101
|
}
|
|
94
|
-
|
|
102
|
+
addProcedure(procedure, config) {
|
|
95
103
|
const handleParams = procedure.params ? constructParamsHandler(procedure.params) : null;
|
|
96
104
|
const validateInputType = procedure.input ? constructMimeValidator(procedure.input) : null;
|
|
97
105
|
const requiresInput = procedure.input !== null;
|
|
@@ -155,5 +163,77 @@ export class XRPCRouter {
|
|
|
155
163
|
},
|
|
156
164
|
};
|
|
157
165
|
}
|
|
166
|
+
addSubscription(subscription, config) {
|
|
167
|
+
const websocket = this.#websocket;
|
|
168
|
+
if (websocket === undefined) {
|
|
169
|
+
throw new Error(`WebSocket adapter not configured`);
|
|
170
|
+
}
|
|
171
|
+
const nsid = subscription.nsid;
|
|
172
|
+
const handleParams = subscription.params ? constructParamsHandler(subscription.params) : null;
|
|
173
|
+
const handler = config.handler;
|
|
174
|
+
this.#handlers[nsid] = {
|
|
175
|
+
method: 'GET',
|
|
176
|
+
handler: async ({ request, url }) => {
|
|
177
|
+
{
|
|
178
|
+
const con = request.headers.get('connection');
|
|
179
|
+
const req = request.headers.get('upgrade');
|
|
180
|
+
if (con === null ||
|
|
181
|
+
req === null ||
|
|
182
|
+
con.toLowerCase() !== 'upgrade' ||
|
|
183
|
+
req.toLowerCase() !== 'websocket') {
|
|
184
|
+
return invalidRequest(`invalid WebSocket upgrade`);
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
let params;
|
|
188
|
+
if (handleParams !== null) {
|
|
189
|
+
const result = handleParams(url.searchParams);
|
|
190
|
+
if (!result.ok) {
|
|
191
|
+
return validationError('params', result);
|
|
192
|
+
}
|
|
193
|
+
params = result.value;
|
|
194
|
+
}
|
|
195
|
+
else {
|
|
196
|
+
params = {};
|
|
197
|
+
}
|
|
198
|
+
const upgrade = await websocket.upgrade(request, async (ws) => {
|
|
199
|
+
const signal = ws.signal;
|
|
200
|
+
const context = {
|
|
201
|
+
request: request,
|
|
202
|
+
params: params,
|
|
203
|
+
signal: signal,
|
|
204
|
+
};
|
|
205
|
+
try {
|
|
206
|
+
for await (const message of handler(context)) {
|
|
207
|
+
if (signal.aborted) {
|
|
208
|
+
break;
|
|
209
|
+
}
|
|
210
|
+
const type = extractMessageType(message, nsid);
|
|
211
|
+
const body = omitMessageType(message);
|
|
212
|
+
const frame = encodeMessageFrame(body, type);
|
|
213
|
+
await ws.send(frame);
|
|
214
|
+
}
|
|
215
|
+
ws.close(1000);
|
|
216
|
+
}
|
|
217
|
+
catch (err) {
|
|
218
|
+
if (err instanceof XRPCSubscriptionError) {
|
|
219
|
+
const frame = encodeErrorFrame(err.error, err.description);
|
|
220
|
+
try {
|
|
221
|
+
await ws.send(frame);
|
|
222
|
+
}
|
|
223
|
+
catch { }
|
|
224
|
+
ws.close(err.closeCode, err.error);
|
|
225
|
+
return;
|
|
226
|
+
}
|
|
227
|
+
ws.close(1011, `internal server error`);
|
|
228
|
+
this.#handleSubscriptionException(err, request);
|
|
229
|
+
}
|
|
230
|
+
});
|
|
231
|
+
if (upgrade !== undefined) {
|
|
232
|
+
return upgrade;
|
|
233
|
+
}
|
|
234
|
+
return invalidRequest(`WebSocket upgrade failed`);
|
|
235
|
+
},
|
|
236
|
+
};
|
|
237
|
+
}
|
|
158
238
|
}
|
|
159
239
|
//# sourceMappingURL=router.js.map
|
package/dist/main/router.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"router.js","sourceRoot":"","sources":["../../lib/main/router.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"router.js","sourceRoot":"","sources":["../../lib/main/router.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { InferOutput, ObjectSchema, XRPCBlobBodyParam, XRPCLexBodyParam, XRPCProcedureMetadata, XRPCQueryMetadata } from '@atcute/lexicons/validations';
|
|
1
|
+
import type { InferOutput, ObjectSchema, VariantSchema, XRPCBlobBodyParam, XRPCLexBodyParam, XRPCProcedureMetadata, XRPCQueryMetadata, XRPCSubscriptionMetadata } from '@atcute/lexicons/validations';
|
|
2
2
|
import type { Literal, Promisable } from '../../types/misc.js';
|
|
3
3
|
import type { JSONResponse } from '../response.js';
|
|
4
4
|
export type UnknownOperationContext = {
|
|
@@ -34,4 +34,19 @@ export type ProcedureHandler<TProcedure extends XRPCProcedureMetadata> = (contex
|
|
|
34
34
|
export type ProcedureConfig<TProcedure extends XRPCProcedureMetadata = XRPCProcedureMetadata> = {
|
|
35
35
|
handler: ProcedureHandler<TProcedure>;
|
|
36
36
|
};
|
|
37
|
+
export interface UnknownSubscriptionContext {
|
|
38
|
+
request: Request;
|
|
39
|
+
signal: AbortSignal;
|
|
40
|
+
params: Record<string, Literal | Literal[]>;
|
|
41
|
+
}
|
|
42
|
+
export type SubscriptionContext<TSubscription extends XRPCSubscriptionMetadata> = {
|
|
43
|
+
request: Request;
|
|
44
|
+
signal: AbortSignal;
|
|
45
|
+
} & (TSubscription['params'] extends ObjectSchema ? {
|
|
46
|
+
params: InferOutput<TSubscription['params']>;
|
|
47
|
+
} : {});
|
|
48
|
+
export type SubscriptionHandler<TSubscription extends XRPCSubscriptionMetadata> = (context: SubscriptionContext<TSubscription>) => AsyncIterable<TSubscription['message'] extends ObjectSchema | VariantSchema<any> ? InferOutput<TSubscription['message']> : never>;
|
|
49
|
+
export type SubscriptionConfig<TSubscription extends XRPCSubscriptionMetadata = XRPCSubscriptionMetadata> = {
|
|
50
|
+
handler: SubscriptionHandler<TSubscription>;
|
|
51
|
+
};
|
|
37
52
|
//# sourceMappingURL=operation.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"operation.d.ts","sourceRoot":"","sources":["../../../lib/main/types/operation.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"operation.d.ts","sourceRoot":"","sources":["../../../lib/main/types/operation.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { Promisable } from '../../types/misc.js';
|
|
2
|
+
export interface WebSocketConnection {
|
|
3
|
+
signal: AbortSignal;
|
|
4
|
+
send(data: Uint8Array): void | Promise<void>;
|
|
5
|
+
close(code?: number, reason?: string): void;
|
|
6
|
+
}
|
|
7
|
+
export interface WebSocketAdapter {
|
|
8
|
+
upgrade(request: Request, handler: (ws: WebSocketConnection) => Promisable<void>): Promisable<Response | undefined>;
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=websocket.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"websocket.d.ts","sourceRoot":"","sources":["../../../lib/main/types/websocket.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAEtD,MAAM,WAAW,mBAAmB;IACnC,MAAM,EAAE,WAAW,CAAC;IACpB,IAAI,CAAC,IAAI,EAAE,UAAU,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7C,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5C;AAED,MAAM,WAAW,gBAAgB;IAChC,OAAO,CACN,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,CAAC,EAAE,EAAE,mBAAmB,KAAK,UAAU,CAAC,IAAI,CAAC,GACpD,UAAU,CAAC,QAAQ,GAAG,SAAS,CAAC,CAAC;CACpC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"websocket.js","sourceRoot":"","sources":["../../../lib/main/types/websocket.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/** Converts a tuple into a listener function */
|
|
2
|
+
export type ListenerFor<T extends any[]> = (...args: T) => void;
|
|
3
|
+
/** Generic record of the event name and its argument tuple */
|
|
4
|
+
export type EventMap = {
|
|
5
|
+
[key: string | symbol]: any[];
|
|
6
|
+
};
|
|
7
|
+
/** Event emitter */
|
|
8
|
+
export declare class EventEmitter<Events extends EventMap> {
|
|
9
|
+
#private;
|
|
10
|
+
/**
|
|
11
|
+
* Appends a listener for the specified event name
|
|
12
|
+
* @param name Name of the event
|
|
13
|
+
* @param listener Callback that should be invoked when an event is dispatched
|
|
14
|
+
* @returns Cleanup function that can be called to remove it
|
|
15
|
+
*/
|
|
16
|
+
on<E extends keyof Events>(name: E, listener: ListenerFor<Events[E]>): () => void;
|
|
17
|
+
/**
|
|
18
|
+
* Remove listener from the specified event name
|
|
19
|
+
* @param name Name of the event
|
|
20
|
+
* @param listener Callback to remove
|
|
21
|
+
*/
|
|
22
|
+
off<E extends keyof Events>(name: E, listener: ListenerFor<Events[E]>): void;
|
|
23
|
+
/**
|
|
24
|
+
* Emit an event with the specified name and its payload
|
|
25
|
+
* @param name Name of the event
|
|
26
|
+
* @param args Payload for the event
|
|
27
|
+
* @returns Whether a listener has been called
|
|
28
|
+
*/
|
|
29
|
+
emit<E extends keyof Events>(name: E, ...args: Events[E]): boolean;
|
|
30
|
+
/**
|
|
31
|
+
* Determines if there is a listener on a specified event name
|
|
32
|
+
* @param name Name of the event
|
|
33
|
+
* @returns Whether there is a listener registered
|
|
34
|
+
*/
|
|
35
|
+
has(name: keyof Events): boolean;
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=event-emitter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"event-emitter.d.ts","sourceRoot":"","sources":["../../../lib/main/utils/event-emitter.ts"],"names":[],"mappings":"AAAA,gDAAgD;AAChD,MAAM,MAAM,WAAW,CAAC,CAAC,SAAS,GAAG,EAAE,IAAI,CAAC,GAAG,IAAI,EAAE,CAAC,KAAK,IAAI,CAAC;AAEhE,8DAA8D;AAC9D,MAAM,MAAM,QAAQ,GAAG;IACtB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,GAAG,EAAE,CAAC;CAC9B,CAAC;AAIF,oBAAoB;AACpB,qBAAa,YAAY,CAAC,MAAM,SAAS,QAAQ;;IAGhD;;;;;OAKG;IACH,EAAE,CAAC,CAAC,SAAS,MAAM,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,QAAQ,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,IAAI;IAsBjF;;;;OAIG;IACH,GAAG,CAAC,CAAC,SAAS,MAAM,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,QAAQ,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI;IA6B5E;;;;;OAKG;IACH,IAAI,CAAC,CAAC,SAAS,MAAM,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,OAAO;IAwBlE;;;;OAIG;IACH,GAAG,CAAC,IAAI,EAAE,MAAM,MAAM,GAAG,OAAO;CAIhC"}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
/** Event emitter */
|
|
2
|
+
export class EventEmitter {
|
|
3
|
+
#events;
|
|
4
|
+
/**
|
|
5
|
+
* Appends a listener for the specified event name
|
|
6
|
+
* @param name Name of the event
|
|
7
|
+
* @param listener Callback that should be invoked when an event is dispatched
|
|
8
|
+
* @returns Cleanup function that can be called to remove it
|
|
9
|
+
*/
|
|
10
|
+
on(name, listener) {
|
|
11
|
+
let events = this.#events;
|
|
12
|
+
let existing;
|
|
13
|
+
if (events === undefined) {
|
|
14
|
+
events = this.#events = Object.create(null);
|
|
15
|
+
}
|
|
16
|
+
else {
|
|
17
|
+
existing = events[name];
|
|
18
|
+
}
|
|
19
|
+
if (existing === undefined) {
|
|
20
|
+
events[name] = listener;
|
|
21
|
+
}
|
|
22
|
+
else if (typeof existing === 'function') {
|
|
23
|
+
events[name] = [existing, listener];
|
|
24
|
+
}
|
|
25
|
+
else {
|
|
26
|
+
events[name] = existing.concat(listener);
|
|
27
|
+
}
|
|
28
|
+
// @ts-expect-error: complains about `listener`
|
|
29
|
+
return this.off.bind(this, name, listener);
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Remove listener from the specified event name
|
|
33
|
+
* @param name Name of the event
|
|
34
|
+
* @param listener Callback to remove
|
|
35
|
+
*/
|
|
36
|
+
off(name, listener) {
|
|
37
|
+
const events = this.#events;
|
|
38
|
+
if (events === undefined) {
|
|
39
|
+
return;
|
|
40
|
+
}
|
|
41
|
+
const list = events[name];
|
|
42
|
+
if (list == undefined) {
|
|
43
|
+
return;
|
|
44
|
+
}
|
|
45
|
+
if (list === listener) {
|
|
46
|
+
delete events[name];
|
|
47
|
+
}
|
|
48
|
+
else if (typeof list !== 'function') {
|
|
49
|
+
const index = list.indexOf(listener);
|
|
50
|
+
if (index !== -1) {
|
|
51
|
+
if (list.length === 2) {
|
|
52
|
+
// ^ flips the bit, it's either 0 or 1 here.
|
|
53
|
+
events[name] = list[index ^ 1];
|
|
54
|
+
}
|
|
55
|
+
else {
|
|
56
|
+
events[name] = list.toSpliced(index, 1);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Emit an event with the specified name and its payload
|
|
63
|
+
* @param name Name of the event
|
|
64
|
+
* @param args Payload for the event
|
|
65
|
+
* @returns Whether a listener has been called
|
|
66
|
+
*/
|
|
67
|
+
emit(name, ...args) {
|
|
68
|
+
const events = this.#events;
|
|
69
|
+
if (events === undefined) {
|
|
70
|
+
return false;
|
|
71
|
+
}
|
|
72
|
+
const handler = events[name];
|
|
73
|
+
if (handler === undefined) {
|
|
74
|
+
return false;
|
|
75
|
+
}
|
|
76
|
+
if (typeof handler === 'function') {
|
|
77
|
+
handler.apply(this, args);
|
|
78
|
+
}
|
|
79
|
+
else {
|
|
80
|
+
for (let idx = 0, len = handler.length; idx < len; idx++) {
|
|
81
|
+
handler[idx].apply(this, args);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
return true;
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Determines if there is a listener on a specified event name
|
|
88
|
+
* @param name Name of the event
|
|
89
|
+
* @returns Whether there is a listener registered
|
|
90
|
+
*/
|
|
91
|
+
has(name) {
|
|
92
|
+
const events = this.#events;
|
|
93
|
+
return events !== undefined && name in events;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
//# sourceMappingURL=event-emitter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"event-emitter.js","sourceRoot":"","sources":["../../../lib/main/utils/event-emitter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export declare const encodeMessageFrame: (body: unknown, type?: string) => Uint8Array;
|
|
2
|
+
export declare const encodeErrorFrame: (error: string, message?: string) => Uint8Array;
|
|
3
|
+
export declare const extractMessageType: (message: unknown, nsid: string) => string | undefined;
|
|
4
|
+
export declare const omitMessageType: (message: unknown) => unknown;
|
|
5
|
+
//# sourceMappingURL=frames.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"frames.d.ts","sourceRoot":"","sources":["../../../lib/main/utils/frames.ts"],"names":[],"mappings":"AAiBA,eAAO,MAAM,kBAAkB,GAAI,MAAM,OAAO,EAAE,OAAO,MAAM,KAAG,UAOjE,CAAC;AAEF,eAAO,MAAM,gBAAgB,GAAI,OAAO,MAAM,EAAE,UAAU,MAAM,KAAG,UAWlE,CAAC;AAEF,eAAO,MAAM,kBAAkB,GAAI,SAAS,OAAO,EAAE,MAAM,MAAM,KAAG,MAAM,GAAG,SAoB5E,CAAC;AAEF,eAAO,MAAM,eAAe,GAAI,SAAS,OAAO,KAAG,OASlD,CAAC"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { encode } from '@atcute/cbor';
|
|
2
|
+
import { concat } from '@atcute/uint8array';
|
|
3
|
+
export const encodeMessageFrame = (body, type) => {
|
|
4
|
+
const header = {
|
|
5
|
+
op: 1,
|
|
6
|
+
t: type,
|
|
7
|
+
};
|
|
8
|
+
return concat([encode(header), encode(body)]);
|
|
9
|
+
};
|
|
10
|
+
export const encodeErrorFrame = (error, message) => {
|
|
11
|
+
const header = {
|
|
12
|
+
op: -1,
|
|
13
|
+
};
|
|
14
|
+
const body = {
|
|
15
|
+
error: error,
|
|
16
|
+
message: message,
|
|
17
|
+
};
|
|
18
|
+
return concat([encode(header), encode(body)]);
|
|
19
|
+
};
|
|
20
|
+
export const extractMessageType = (message, nsid) => {
|
|
21
|
+
if (typeof message !== 'object' || message === null) {
|
|
22
|
+
return undefined;
|
|
23
|
+
}
|
|
24
|
+
const obj = message;
|
|
25
|
+
const type = obj.$type;
|
|
26
|
+
if (typeof type !== 'string') {
|
|
27
|
+
return undefined;
|
|
28
|
+
}
|
|
29
|
+
// If type starts with the subscription NSID, make it relative
|
|
30
|
+
// e.g., "com.atproto.sync.subscribeRepos#commit" → "#commit"
|
|
31
|
+
if (type.startsWith(nsid + '#')) {
|
|
32
|
+
return type.slice(nsid.length);
|
|
33
|
+
}
|
|
34
|
+
// Otherwise return the full type
|
|
35
|
+
return type;
|
|
36
|
+
};
|
|
37
|
+
export const omitMessageType = (message) => {
|
|
38
|
+
if (typeof message !== 'object' || message === null) {
|
|
39
|
+
return message;
|
|
40
|
+
}
|
|
41
|
+
const obj = message;
|
|
42
|
+
const { $type, ...rest } = obj;
|
|
43
|
+
return rest;
|
|
44
|
+
};
|
|
45
|
+
//# sourceMappingURL=frames.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"frames.js","sourceRoot":"","sources":["../../../lib/main/utils/frames.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACtC,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAgB5C,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,IAAa,EAAE,IAAa,EAAc,EAAE;IAC9E,MAAM,MAAM,GAAuB;QAClC,EAAE,EAAE,CAAC;QACL,CAAC,EAAE,IAAI;KACP,CAAC;IAEF,OAAO,MAAM,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAC/C,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,KAAa,EAAE,OAAgB,EAAc,EAAE;IAC/E,MAAM,MAAM,GAAqB;QAChC,EAAE,EAAE,CAAC,CAAC;KACN,CAAC;IAEF,MAAM,IAAI,GAAmB;QAC5B,KAAK,EAAE,KAAK;QACZ,OAAO,EAAE,OAAO;KAChB,CAAC;IAEF,OAAO,MAAM,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAC/C,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,OAAgB,EAAE,IAAY,EAAsB,EAAE;IACxF,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;QACrD,OAAO,SAAS,CAAC;IAClB,CAAC;IAED,MAAM,GAAG,GAAG,OAAkC,CAAC;IAC/C,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC;IAEvB,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO,SAAS,CAAC;IAClB,CAAC;IAED,8DAA8D;IAC9D,6DAA6D;IAC7D,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,GAAG,GAAG,CAAC,EAAE,CAAC;QACjC,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAChC,CAAC;IAED,iCAAiC;IACjC,OAAO,IAAI,CAAC;AACb,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,OAAgB,EAAW,EAAE;IAC5D,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;QACrD,OAAO,OAAO,CAAC;IAChB,CAAC;IAED,MAAM,GAAG,GAAG,OAAkC,CAAC;IAC/C,MAAM,EAAE,KAAK,EAAE,GAAG,IAAI,EAAE,GAAG,GAAG,CAAC;IAE/B,OAAO,IAAI,CAAC;AACb,CAAC,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { Promisable } from '../../types/misc.js';
|
|
2
|
+
import type { XRPCRouter } from '../router.js';
|
|
3
|
+
import type { WebSocketAdapter, WebSocketConnection } from '../types/websocket.js';
|
|
4
|
+
import { EventEmitter } from './event-emitter.js';
|
|
5
|
+
export interface SubscriptionClient extends Disposable {
|
|
6
|
+
events: EventEmitter<{
|
|
7
|
+
message: [data: Uint8Array];
|
|
8
|
+
close: [event: {
|
|
9
|
+
code: number;
|
|
10
|
+
reason: string;
|
|
11
|
+
wasClean: boolean;
|
|
12
|
+
}];
|
|
13
|
+
}>;
|
|
14
|
+
dispose(): void;
|
|
15
|
+
}
|
|
16
|
+
export interface SubscriptionMock {
|
|
17
|
+
subscribe(url: string): Promise<SubscriptionClient>;
|
|
18
|
+
}
|
|
19
|
+
export declare class MockWebSocketAdapter implements WebSocketAdapter {
|
|
20
|
+
#private;
|
|
21
|
+
upgrade(_request: Request, handler: (ws: WebSocketConnection) => Promisable<void>): Promisable<Response | undefined>;
|
|
22
|
+
attach(router: XRPCRouter): SubscriptionMock;
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=websocket-mock.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"websocket-mock.d.ts","sourceRoot":"","sources":["../../../lib/main/utils/websocket-mock.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,KAAK,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AACnF,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAMlD,MAAM,WAAW,kBAAmB,SAAQ,UAAU;IACrD,MAAM,EAAE,YAAY,CAAC;QACpB,OAAO,EAAE,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;QAC5B,KAAK,EAAE,CAAC,KAAK,EAAE;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,MAAM,EAAE,MAAM,CAAC;YAAC,QAAQ,EAAE,OAAO,CAAA;SAAE,CAAC,CAAC;KACpE,CAAC,CAAC;IACH,OAAO,IAAI,IAAI,CAAC;CAChB;AAED,MAAM,WAAW,gBAAgB;IAChC,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAAC;CACpD;AAED,qBAAa,oBAAqB,YAAW,gBAAgB;;IAG5D,OAAO,CACN,QAAQ,EAAE,OAAO,EACjB,OAAO,EAAE,CAAC,EAAE,EAAE,mBAAmB,KAAK,UAAU,CAAC,IAAI,CAAC,GACpD,UAAU,CAAC,QAAQ,GAAG,SAAS,CAAC;IAWnC,MAAM,CAAC,MAAM,EAAE,UAAU,GAAG,gBAAgB;CAsE5C"}
|