@atcute/xrpc-server 0.1.1 → 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.
Files changed (67) hide show
  1. package/LICENSE +12 -15
  2. package/README.md +13 -75
  3. package/dist/auth/index.d.ts +1 -0
  4. package/dist/auth/index.d.ts.map +1 -0
  5. package/dist/auth/jwt-creator.d.ts +1 -0
  6. package/dist/auth/jwt-creator.d.ts.map +1 -0
  7. package/dist/auth/jwt-verifier.d.ts +1 -0
  8. package/dist/auth/jwt-verifier.d.ts.map +1 -0
  9. package/dist/auth/jwt.d.ts +13 -17
  10. package/dist/auth/jwt.d.ts.map +1 -0
  11. package/dist/auth/jwt.js.map +1 -1
  12. package/dist/auth/types.d.ts +1 -0
  13. package/dist/auth/types.d.ts.map +1 -0
  14. package/dist/main/index.d.ts +2 -0
  15. package/dist/main/index.d.ts.map +1 -0
  16. package/dist/main/index.js +1 -0
  17. package/dist/main/index.js.map +1 -1
  18. package/dist/main/response.d.ts +1 -0
  19. package/dist/main/response.d.ts.map +1 -0
  20. package/dist/main/router.d.ts +13 -3
  21. package/dist/main/router.d.ts.map +1 -0
  22. package/dist/main/router.js +87 -7
  23. package/dist/main/router.js.map +1 -1
  24. package/dist/main/types/operation.d.ts +17 -1
  25. package/dist/main/types/operation.d.ts.map +1 -0
  26. package/dist/main/types/websocket.d.ts +10 -0
  27. package/dist/main/types/websocket.d.ts.map +1 -0
  28. package/dist/main/types/websocket.js +2 -0
  29. package/dist/main/types/websocket.js.map +1 -0
  30. package/dist/main/utils/event-emitter.d.ts +37 -0
  31. package/dist/main/utils/event-emitter.d.ts.map +1 -0
  32. package/dist/main/utils/event-emitter.js +96 -0
  33. package/dist/main/utils/event-emitter.js.map +1 -0
  34. package/dist/main/utils/frames.d.ts +5 -0
  35. package/dist/main/utils/frames.d.ts.map +1 -0
  36. package/dist/main/utils/frames.js +45 -0
  37. package/dist/main/utils/frames.js.map +1 -0
  38. package/dist/main/utils/middlewares.d.ts +1 -0
  39. package/dist/main/utils/middlewares.d.ts.map +1 -0
  40. package/dist/main/utils/request-input.d.ts +1 -0
  41. package/dist/main/utils/request-input.d.ts.map +1 -0
  42. package/dist/main/utils/request-params.d.ts +1 -0
  43. package/dist/main/utils/request-params.d.ts.map +1 -0
  44. package/dist/main/utils/response.d.ts +1 -0
  45. package/dist/main/utils/response.d.ts.map +1 -0
  46. package/dist/main/utils/websocket-mock.d.ts +24 -0
  47. package/dist/main/utils/websocket-mock.d.ts.map +1 -0
  48. package/dist/main/utils/websocket-mock.js +71 -0
  49. package/dist/main/utils/websocket-mock.js.map +1 -0
  50. package/dist/main/xrpc-error.d.ts +12 -0
  51. package/dist/main/xrpc-error.d.ts.map +1 -0
  52. package/dist/main/xrpc-error.js +11 -0
  53. package/dist/main/xrpc-error.js.map +1 -1
  54. package/dist/middlewares/cors.d.ts +1 -0
  55. package/dist/middlewares/cors.d.ts.map +1 -0
  56. package/dist/types/misc.d.ts +1 -0
  57. package/dist/types/misc.d.ts.map +1 -0
  58. package/lib/auth/jwt.ts +19 -8
  59. package/lib/main/index.ts +2 -0
  60. package/lib/main/router.ts +131 -10
  61. package/lib/main/types/operation.ts +33 -0
  62. package/lib/main/types/websocket.ts +14 -0
  63. package/lib/main/utils/event-emitter.ts +116 -0
  64. package/lib/main/utils/frames.ts +71 -0
  65. package/lib/main/utils/websocket-mock.ts +111 -0
  66. package/lib/main/xrpc-error.ts +20 -0
  67. package/package.json +16 -14
package/LICENSE CHANGED
@@ -1,17 +1,14 @@
1
- Permission is hereby granted, free of charge, to any person obtaining a copy
2
- of this software and associated documentation files (the "Software"), to deal
3
- in the Software without restriction, including without limitation the rights
4
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
5
- copies of the Software, and to permit persons to whom the Software is
6
- furnished to do so, subject to the following conditions:
1
+ BSD Zero Clause License
7
2
 
8
- The above copyright notice and this permission notice shall be included in all
9
- copies or substantial portions of the Software.
3
+ Copyright (c) 2025 Mary
10
4
 
11
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
12
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
13
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
14
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
15
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
16
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
17
- SOFTWARE.
5
+ Permission to use, copy, modify, and/or distribute this software for any
6
+ purpose with or without fee is hereby granted.
7
+
8
+ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
9
+ REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
10
+ AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
11
+ INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
12
+ LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
13
+ OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
14
+ PERFORMANCE OF THIS SOFTWARE.
package/README.md CHANGED
@@ -5,7 +5,7 @@ a small web framework for handling XRPC operations.
5
5
  ## quick start
6
6
 
7
7
  this framework relies on schemas generated by `@atcute/lex-cli`, you'd need to follow its
8
- [quick start guide](../../lexicons/lex-cli/README.md#quick-start) on how to set it up.
8
+ [quick start guide](../../lexicons/lex-cli) on how to set it up.
9
9
 
10
10
  for this example, we'll define a very simple query operation, one that returns a message greeting
11
11
  the name that's provided to it:
@@ -92,86 +92,24 @@ serve(
92
92
  );
93
93
  ```
94
94
 
95
- ## kitchen sink
95
+ ## internal calls
96
96
 
97
- ### Bluesky feed generator example
97
+ you can make typed calls to your own endpoints using `@atcute/client`:
98
98
 
99
99
  ```ts
100
- import { parseCanonicalResourceUri, type Nsid } from '@atcute/lexicons';
100
+ import { Client, ok } from '@atcute/client';
101
101
 
102
- import { AuthRequiredError, InvalidRequestError, XRPCRouter, json } from '@atcute/xrpc-server';
103
- import { ServiceJwtVerifier, type VerifiedJwt } from '@atcute/xrpc-server/auth';
104
- import { cors } from '@atucte/xrpc-server/middlewares/cors';
105
-
106
- import {
107
- CompositeDidDocumentResolver,
108
- PlcDidDocumentResolver,
109
- WebDidDocumentResolver,
110
- } from '@atcute/identity-resolver';
111
-
112
- import { AppBskyFeedGetFeedSkeleton } from '@atcute/bluesky';
113
-
114
- const SERVICE_DID = 'did:web:feedgen.example.com';
115
-
116
- const router = new XRPCRouter({
117
- middlewares: [cors()],
102
+ const client = new Client({
103
+ handler(pathname, init) {
104
+ return router.fetch(new Request(new URL(pathname, 'http://localhost'), init));
105
+ },
118
106
  });
119
107
 
120
- const jwtVerifier = new ServiceJwtVerifier({
121
- serviceDid: SERVICE_DID,
122
- resolver: new CompositeDidDocumentResolver({
123
- methods: {
124
- plc: new PlcDidDocumentResolver(),
125
- web: new WebDidDocumentResolver(),
126
- },
108
+ const data = await ok(
109
+ client.get('com.example.greet', {
110
+ params: { name: 'world' },
127
111
  }),
128
- });
129
-
130
- const requireAuth = async (request: Request, lxm: Nsid): Promise<VerifiedJwt> => {
131
- const auth = request.headers.get('authorization');
132
- if (auth === null) {
133
- throw new AuthRequiredError({ description: `missing authorization header` });
134
- }
135
- if (!auth.startsWith('Bearer ')) {
136
- throw new AuthRequiredError({ description: `invalid authorization scheme` });
137
- }
138
-
139
- const jwtString = auth.slice('Bearer '.length).trim();
140
-
141
- const result = await jwtVerifier.verify(jwtString, { lxm });
142
- if (!result.ok) {
143
- throw new AuthRequiredError(result.error);
144
- }
145
-
146
- return result.value;
147
- };
148
-
149
- router.add(AppBskyFeedGetFeedSkeleton.mainSchema, {
150
- async handler({ params: { feed }, request }) {
151
- await requireAuth(request, 'app.bsky.feed.getFeedSkeleton');
152
-
153
- const feedUri = parseCanonicalResourceUri(feed);
154
-
155
- if (
156
- !feedUri.ok ||
157
- feedUri.value.collection !== 'app.bsky.feed.generator' ||
158
- feedUri.value.repo !== SERVICE_DID ||
159
- feedUri.value.rkey !== 'feed'
160
- ) {
161
- throw new InvalidRequestError({
162
- error: 'InvalidFeed',
163
- description: `invalid feed`,
164
- });
165
- }
166
-
167
- return json({
168
- feed: [
169
- { post: 'at://did:plc:z72i7hdynmk6r22z27h6tvur/app.bsky.feed.post/3l6oveex3ii2l' },
170
- { post: 'at://did:plc:z72i7hdynmk6r22z27h6tvur/app.bsky.feed.post/3lpk2lf7k6k2t' },
171
- ],
172
- });
173
- },
174
- });
112
+ );
175
113
 
176
- export default router;
114
+ console.log(data.message); // fully typed!
177
115
  ```
@@ -1,2 +1,3 @@
1
1
  export * from './jwt-creator.js';
2
2
  export * from './jwt-verifier.js';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../lib/auth/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC"}
@@ -9,3 +9,4 @@ export interface CreateServiceJwtOptions {
9
9
  expiresIn?: number;
10
10
  }
11
11
  export declare const createServiceJwt: (options: CreateServiceJwtOptions) => Promise<string>;
12
+ //# sourceMappingURL=jwt-creator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jwt-creator.d.ts","sourceRoot":"","sources":["../../lib/auth/jwt-creator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAQlD,MAAM,WAAW,uBAAuB;IACvC,OAAO,EAAE,UAAU,CAAC;IACpB,MAAM,EAAE,GAAG,CAAC;IACZ,QAAQ,EAAE,GAAG,CAAC;IACd,GAAG,EAAE,IAAI,GAAG,IAAI,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,eAAO,MAAM,gBAAgB,GAAU,SAAS,uBAAuB,KAAG,OAAO,CAAC,MAAM,CA4BvF,CAAC"}
@@ -21,3 +21,4 @@ export declare class ServiceJwtVerifier {
21
21
  constructor(options: ServiceJwtVerifierOptions);
22
22
  verify(jwtString: string, options?: VerifyJwtOptions): Promise<Result<VerifiedJwt, AuthError>>;
23
23
  }
24
+ //# sourceMappingURL=jwt-verifier.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jwt-verifier.d.ts","sourceRoot":"","sources":["../../lib/auth/jwt-verifier.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AACrE,OAAO,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAGlD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAG/C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAE5C,MAAM,WAAW,yBAAyB;IACzC,UAAU,EAAE,GAAG,GAAG,IAAI,CAAC;IACvB,QAAQ,EAAE,mBAAmB,CAAC;CAC9B;AAED,MAAM,WAAW,gBAAgB;IAChC,GAAG,EAAE,IAAI,GAAG,IAAI,EAAE,GAAG,IAAI,CAAC;CAC1B;AAED,MAAM,WAAW,WAAW;IAC3B,MAAM,EAAE,GAAG,CAAC;IACZ,QAAQ,EAAE,GAAG,CAAC;IACd,GAAG,EAAE,MAAM,GAAG,SAAS,CAAC;CACxB;AAED,qBAAa,kBAAkB;;IAC9B,cAAc,EAAE,mBAAmB,CAAC;IACpC,UAAU,EAAE,GAAG,GAAG,IAAI,CAAC;gBAEX,OAAO,EAAE,yBAAyB;IAgExC,MAAM,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC,MAAM,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;CAwHpG"}
@@ -1,27 +1,23 @@
1
- import * as v from '@badrap/valita';
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
- declare const jwtHeader: v.ObjectType<{
5
- typ: v.Optional<string>;
6
- alg: v.Type<string>;
7
- }, undefined>;
8
- export interface JwtHeader extends v.Infer<typeof jwtHeader> {
4
+ export interface JwtHeader {
5
+ typ?: string;
6
+ alg: string;
9
7
  }
10
- declare const jwtPayload: v.Type<{
11
- iat?: number | undefined;
12
- lxm?: `${string}.${string}.${string}` | undefined;
13
- jti?: string | undefined;
14
- iss: `did:${string}:${string}`;
15
- aud: `did:${string}:${string}`;
8
+ export interface JwtPayload {
9
+ iss: Did;
10
+ aud: Did;
16
11
  exp: number;
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;
22
18
  payload: JwtPayload;
23
- message: Uint8Array;
24
- signature: Uint8Array;
19
+ message: Uint8Array<ArrayBuffer>;
20
+ signature: Uint8Array<ArrayBuffer>;
25
21
  }
26
22
  export declare const parseJwt: (jwtString: string) => Result<ParsedJwt, AuthError>;
27
- export {};
23
+ //# sourceMappingURL=jwt.d.ts.map
@@ -0,0 +1 @@
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"}
@@ -1 +1 @@
1
- {"version":3,"file":"jwt.js","sourceRoot":"","sources":["../../lib/auth/jwt.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"jwt.js","sourceRoot":"","sources":["../../lib/auth/jwt.ts"],"names":[],"mappings":"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"}
@@ -2,3 +2,4 @@ export type AuthError = {
2
2
  error: string;
3
3
  description: string;
4
4
  };
5
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../lib/auth/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,SAAS,GAAG;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;CACpB,CAAC"}
@@ -1,3 +1,5 @@
1
1
  export * from './response.js';
2
2
  export * from './router.js';
3
3
  export * from './xrpc-error.js';
4
+ export * from './types/websocket.js';
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +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;AAEhC,cAAc,sBAAsB,CAAC"}
@@ -1,4 +1,5 @@
1
1
  export * from './response.js';
2
2
  export * from './router.js';
3
3
  export * from './xrpc-error.js';
4
+ export * from './types/websocket.js';
4
5
  //# sourceMappingURL=index.js.map
@@ -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"}
@@ -6,3 +6,4 @@ export declare const json: {
6
6
  <TData>(data: NoInfer<TData>, init?: ResponseInit): JSONResponse<TData>;
7
7
  };
8
8
  export {};
9
+ //# sourceMappingURL=response.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"response.d.ts","sourceRoot":"","sources":["../../lib/main/response.ts"],"names":[],"mappings":"AAAA,OAAO,CAAC,MAAM,KAAK,EAAE,OAAO,MAAM,CAAC;AAEnC,MAAM,MAAM,YAAY,CAAC,KAAK,IAAI,QAAQ,GAAG;IAAE,CAAC,KAAK,CAAC,EAAE,KAAK,CAAA;CAAE,CAAC;AAEhE,eAAO,MAAM,IAAI,EAAE;IAClB,CAAC,KAAK,EAAE,IAAI,EAAE,OAAO,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,EAAE,YAAY,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;CAGxE,CAAC"}
@@ -1,21 +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
  }
31
+ //# sourceMappingURL=router.d.ts.map
@@ -0,0 +1 @@
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"}
@@ -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.#addQuery(operation, config);
66
+ return this.addQuery(operation, config);
59
67
  }
60
68
  case 'xrpc_procedure': {
61
- return this.#addProcedure(operation, config);
69
+ return this.addProcedure(operation, config);
62
70
  }
63
71
  }
64
72
  }
65
- #addQuery(query, config) {
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
- #addProcedure(procedure, config) {
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
@@ -1 +1 @@
1
- {"version":3,"file":"router.js","sourceRoot":"","sources":["../../lib/main/router.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"router.js","sourceRoot":"","sources":["../../lib/main/router.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,SAAS,GAIT,MAAM,8BAA8B,CAAC;AAYtC,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAC9G,OAAO,EAAE,2BAA2B,EAAmB,MAAM,wBAAwB,CAAC;AACtF,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AACnE,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtE,OAAO,EAAE,SAAS,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AAoBnE,MAAM,CAAC,MAAM,uBAAuB,GAAqB,CAAC,KAAc,EAAE,EAAE;IAC3E,IAAI,KAAK,YAAY,SAAS,EAAE,CAAC;QAChC,OAAO,KAAK,CAAC,UAAU,EAAE,CAAC;IAC3B,CAAC;IAED,IAAI,KAAK,YAAY,QAAQ,EAAE,CAAC;QAC/B,OAAO,KAAK,CAAC;IACd,CAAC;IAED,OAAO,QAAQ,CAAC,IAAI,CACnB,EAAE,KAAK,EAAE,qBAAqB,EAAE,OAAO,EAAE,sDAAsD,EAAE,EACjG,EAAE,MAAM,EAAE,GAAG,EAAE,CACf,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,sBAAsB,GAAoB,GAAG,EAAE;IAC3D,OAAO,IAAI,QAAQ,CAAC,WAAW,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;AACnD,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,mCAAmC,GAAiC,CAAC,KAAc,EAAE,EAAE;IACnG,MAAM,KAAK,CAAC;AACb,CAAC,CAAC;AAUF,MAAM,OAAO,UAAU;IACtB,SAAS,GAAsC,EAAE,CAAC;IAClD,eAAe,CAAkB;IACjC,gBAAgB,CAAmB;IACnC,4BAA4B,CAA+B;IAC3D,UAAU,CAAoB;IAE9B,KAAK,CAA0C;IAE/C,YAAY,EACX,WAAW,GAAG,EAAE,EAChB,eAAe,GAAG,uBAAuB,EACzC,cAAc,GAAG,sBAAsB,EACvC,2BAA2B,GAAG,mCAAmC,EACjE,SAAS,MACa,EAAE;QACxB,MAAM,MAAM,GAAG,2BAA2B,CAAC,CAAC,GAAG,WAAW,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAEnG,IAAI,CAAC,KAAK,GAAG,CAAC,OAAO,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAC1C,IAAI,CAAC,gBAAgB,GAAG,eAAe,CAAC;QACxC,IAAI,CAAC,eAAe,GAAG,cAAc,CAAC;QACtC,IAAI,CAAC,4BAA4B,GAAG,2BAA2B,CAAC;QAChE,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;IAC7B,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,OAAgB;QAC/B,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACjC,MAAM,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAC;QAE9B,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YACpC,OAAO,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;QACtC,CAAC;QAED,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QAE7C,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QACnC,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACzB,OAAO,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;QACtC,CAAC;QAED,IAAI,OAAO,CAAC,MAAM,KAAK,KAAK,CAAC,MAAM,EAAE,CAAC;YACrC,OAAO,QAAQ,CAAC,IAAI,CACnB,EAAE,KAAK,EAAE,mBAAmB,EAAE,OAAO,EAAE,iCAAiC,KAAK,CAAC,MAAM,GAAG,EAAE,EACzF,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,EAAE,KAAK,EAAE,GAAG,KAAK,CAAC,MAAM,EAAE,EAAE,EAAE,CACtD,CAAC;QACH,CAAC;QAED,IAAI,CAAC;YACJ,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,OAAO,CAAC;gBACpC,OAAO,EAAE,OAAO;gBAChB,GAAG,EAAE,GAAG;aACR,CAAC,CAAC;YAEH,OAAO,QAAQ,CAAC;QACjB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACd,OAAO,IAAI,CAAC,gBAAgB,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;QAC5C,CAAC;IACF,CAAC;IAQD,GAAG,CAAC,SAAoD,EAAE,MAAW;QACpE,QAAQ,SAAS,CAAC,IAAI,EAAE,CAAC;YACxB,KAAK,YAAY,CAAC,CAAC,CAAC;gBACnB,OAAO,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;YACzC,CAAC;YACD,KAAK,gBAAgB,CAAC,CAAC,CAAC;gBACvB,OAAO,IAAI,CAAC,YAAY,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;YAC7C,CAAC;QACF,CAAC;IACF,CAAC;IAED,QAAQ,CACP,KAAa,EACb,MAAe;QAEf,MAAM,YAAY,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,sBAAsB,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAEhF,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;QAE/B,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG;YAC5B,MAAM,EAAE,KAAK;YACb,OAAO,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,EAAE,EAAE;gBACnC,IAAI,MAA2C,CAAC;gBAEhD,IAAI,YAAY,KAAK,IAAI,EAAE,CAAC;oBAC3B,MAAM,MAAM,GAAG,YAAY,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;oBAC9C,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;wBAChB,OAAO,eAAe,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;oBAC1C,CAAC;oBAED,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC;gBACvB,CAAC;qBAAM,CAAC;oBACP,MAAM,GAAG,EAAE,CAAC;gBACb,CAAC;gBAED,MAAM,OAAO,GAA4B;oBACxC,OAAO,EAAE,OAAO;oBAChB,MAAM,EAAE,MAAM;iBACd,CAAC;gBAEF,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,OAAc,CAAC,CAAC;gBAE7C,IAAI,MAAM,YAAY,QAAQ,EAAE,CAAC;oBAChC,OAAO,MAAM,CAAC;gBACf,CAAC;gBAED,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC;YAC3B,CAAC;SACD,CAAC;IACH,CAAC;IAED,YAAY,CACX,SAAqB,EACrB,MAAe;QAEf,MAAM,YAAY,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,sBAAsB,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QACxF,MAAM,iBAAiB,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,sBAAsB,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAE3F,MAAM,aAAa,GAAG,SAAS,CAAC,KAAK,KAAK,IAAI,CAAC;QAC/C,MAAM,WAAW,GAAG,SAAS,CAAC,KAAK,EAAE,IAAI,KAAK,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;QAEpF,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;QAE/B,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG;YAChC,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,EAAE,EAAE;gBACnC,IAAI,MAA2C,CAAC;gBAChD,IAAI,KAA0C,CAAC;gBAE/C,IAAI,YAAY,KAAK,IAAI,EAAE,CAAC;oBAC3B,MAAM,MAAM,GAAG,YAAY,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;oBAC9C,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;wBAChB,OAAO,eAAe,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;oBAC1C,CAAC;oBAED,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC;gBACvB,CAAC;qBAAM,CAAC;oBACP,MAAM,GAAG,EAAE,CAAC;gBACb,CAAC;gBAED,IAAI,aAAa,EAAE,CAAC;oBACnB,IAAI,OAAO,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC;wBAC3B,OAAO,cAAc,CAAC,gDAAgD,CAAC,CAAC;oBACzE,CAAC;oBAED,IAAI,iBAAiB,KAAK,IAAI,EAAE,CAAC;wBAChC,MAAM,MAAM,GAAG,iBAAiB,CAAC,OAAO,CAAC,CAAC;wBAC1C,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;4BAChB,OAAO,cAAc,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;wBACrC,CAAC;oBACF,CAAC;oBAED,IAAI,WAAW,KAAK,IAAI,EAAE,CAAC;wBAC1B,IAAI,GAAQ,CAAC;wBACb,IAAI,CAAC;4BACJ,GAAG,GAAG,MAAM,OAAO,CAAC,IAAI,EAAE,CAAC;wBAC5B,CAAC;wBAAC,OAAO,GAAG,EAAE,CAAC;4BACd,OAAO,cAAc,CAAC,6CAA6C,CAAC,CAAC;wBACtE,CAAC;wBAED,MAAM,MAAM,GAAG,SAAS,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;wBAC3C,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;4BAChB,OAAO,eAAe,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;wBACzC,CAAC;wBAED,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;oBACtB,CAAC;gBACF,CAAC;qBAAM,CAAC;oBACP,IAAI,OAAO,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC;wBAC3B,OAAO,cAAc,CAAC,iDAAiD,CAAC,CAAC;oBAC1E,CAAC;gBACF,CAAC;gBAED,MAAM,OAAO,GAA4B;oBACxC,OAAO,EAAE,OAAO;oBAChB,MAAM,EAAE,MAAM;oBACd,KAAK,EAAE,KAAK;iBACZ,CAAC;gBAEF,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,OAAc,CAAC,CAAC;gBAE7C,IAAI,MAAM,YAAY,QAAQ,EAAE,CAAC;oBAChC,OAAO,MAAM,CAAC;gBACf,CAAC;gBAED,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC;YAC3B,CAAC;SACD,CAAC;IACH,CAAC;IAED,eAAe,CAGb,YAA2B,EAAE,MAAe;QAC7C,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC;QAClC,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;YAC7B,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;QACrD,CAAC;QAED,MAAM,IAAI,GAAG,YAAY,CAAC,IAAI,CAAC;QAE/B,MAAM,YAAY,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,sBAAsB,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAC9F,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;QAE/B,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG;YACtB,MAAM,EAAE,KAAK;YACb,OAAO,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,EAAE,EAAE;gBACnC,CAAC;oBACA,MAAM,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;oBAC9C,MAAM,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;oBAC3C,IACC,GAAG,KAAK,IAAI;wBACZ,GAAG,KAAK,IAAI;wBACZ,GAAG,CAAC,WAAW,EAAE,KAAK,SAAS;wBAC/B,GAAG,CAAC,WAAW,EAAE,KAAK,WAAW,EAChC,CAAC;wBACF,OAAO,cAAc,CAAC,2BAA2B,CAAC,CAAC;oBACpD,CAAC;gBACF,CAAC;gBAED,IAAI,MAA2C,CAAC;gBAEhD,IAAI,YAAY,KAAK,IAAI,EAAE,CAAC;oBAC3B,MAAM,MAAM,GAAG,YAAY,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;oBAC9C,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;wBAChB,OAAO,eAAe,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;oBAC1C,CAAC;oBAED,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC;gBACvB,CAAC;qBAAM,CAAC;oBACP,MAAM,GAAG,EAAE,CAAC;gBACb,CAAC;gBAED,MAAM,OAAO,GAAG,MAAM,SAAS,CAAC,OAAO,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE;oBAC7D,MAAM,MAAM,GAAG,EAAE,CAAC,MAAM,CAAC;oBAEzB,MAAM,OAAO,GAA+B;wBAC3C,OAAO,EAAE,OAAO;wBAChB,MAAM,EAAE,MAAM;wBACd,MAAM,EAAE,MAAM;qBACd,CAAC;oBAEF,IAAI,CAAC;wBACJ,IAAI,KAAK,EAAE,MAAM,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;4BAC9C,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;gCACpB,MAAM;4BACP,CAAC;4BAED,MAAM,IAAI,GAAG,kBAAkB,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;4BAC/C,MAAM,IAAI,GAAG,eAAe,CAAC,OAAO,CAAC,CAAC;4BAEtC,MAAM,KAAK,GAAG,kBAAkB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;4BAC7C,MAAM,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;wBACtB,CAAC;wBAED,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;oBAChB,CAAC;oBAAC,OAAO,GAAG,EAAE,CAAC;wBACd,IAAI,GAAG,YAAY,qBAAqB,EAAE,CAAC;4BAC1C,MAAM,KAAK,GAAG,gBAAgB,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,WAAW,CAAC,CAAC;4BAE3D,IAAI,CAAC;gCACJ,MAAM,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;4BACtB,CAAC;4BAAC,MAAM,CAAC,CAAA,CAAC;4BAEV,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC;4BACnC,OAAO;wBACR,CAAC;wBAED,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,uBAAuB,CAAC,CAAC;wBACxC,IAAI,CAAC,4BAA4B,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;oBACjD,CAAC;gBACF,CAAC,CAAC,CAAC;gBAEH,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;oBAC3B,OAAO,OAAO,CAAC;gBAChB,CAAC;gBAED,OAAO,cAAc,CAAC,0BAA0B,CAAC,CAAC;YACnD,CAAC;SACD,CAAC;IACH,CAAC;CACD"}
@@ -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,3 +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
+ };
52
+ //# sourceMappingURL=operation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"operation.d.ts","sourceRoot":"","sources":["../../../lib/main/types/operation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACX,WAAW,EACX,YAAY,EACZ,aAAa,EACb,iBAAiB,EACjB,gBAAgB,EAChB,qBAAqB,EACrB,iBAAiB,EACjB,wBAAwB,EACxB,MAAM,8BAA8B,CAAC;AAEtC,OAAO,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAE/D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAEnD,MAAM,MAAM,uBAAuB,GAAG;IACrC,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,EAAE,CAAC,CAAC;IAC5C,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAChC,CAAC;AAIF,MAAM,MAAM,YAAY,CAAC,MAAM,SAAS,iBAAiB,IAAI;IAC5D,OAAO,EAAE,OAAO,CAAC;CACjB,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,YAAY,GACvC;IACA,MAAM,EAAE,WAAW,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;CACtC,GACA,EAEA,CAAC,CAAC;AAEL,MAAM,MAAM,YAAY,CAAC,MAAM,SAAS,iBAAiB,IAAI,CAC5D,OAAO,EAAE,YAAY,CAAC,MAAM,CAAC,KACzB,UAAU,CACd,MAAM,CAAC,QAAQ,CAAC,SAAS,IAAI,GAC1B,QAAQ,GAAG,IAAI,GACf,MAAM,CAAC,QAAQ,CAAC,SAAS,gBAAgB,GACxC,QAAQ,GAAG,YAAY,CAAC,WAAW,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,GAChE,QAAQ,CACZ,CAAC;AAEF,MAAM,MAAM,WAAW,CAAC,MAAM,SAAS,iBAAiB,GAAG,iBAAiB,IAAI;IAC/E,OAAO,EAAE,YAAY,CAAC,MAAM,CAAC,CAAC;CAC9B,CAAC;AAIF,MAAM,MAAM,gBAAgB,CAAC,UAAU,SAAS,qBAAqB,IACpE,CAAC,UAAU,CAAC,OAAO,CAAC,SAAS,iBAAiB,GAC3C;IACA,OAAO,EAAE,OAAO,GAAG;QAAE,QAAQ,CAAC,IAAI,EAAE,cAAc,CAAC,UAAU,CAAC,CAAA;KAAE,CAAC;CACjE,GACA,UAAU,CAAC,OAAO,CAAC,SAAS,gBAAgB,GAC3C;IACA,OAAO,EAAE,OAAO,GAAG;QAAE,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAA;KAAE,CAAC;CAC3C,GACA;IACA,OAAO,EAAE,OAAO,CAAC;CACjB,CAAC,GACJ,CAAC,UAAU,CAAC,QAAQ,CAAC,SAAS,YAAY,GACvC;IACA,MAAM,EAAE,WAAW,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC;CAC1C,GACA,EAEA,CAAC,GACJ,CAAC,UAAU,CAAC,OAAO,CAAC,SAAS,gBAAgB,GAC1C;IACA,KAAK,EAAE,WAAW,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;CAClD,GACA,EAEA,CAAC,CAAC;AAEP,MAAM,MAAM,gBAAgB,CAAC,UAAU,SAAS,qBAAqB,IAAI,CACxE,OAAO,EAAE,gBAAgB,CAAC,UAAU,CAAC,KACjC,UAAU,CACd,UAAU,CAAC,QAAQ,CAAC,SAAS,IAAI,GAC9B,QAAQ,GAAG,IAAI,GACf,UAAU,CAAC,QAAQ,CAAC,SAAS,gBAAgB,GAC5C,QAAQ,GAAG,YAAY,CAAC,WAAW,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,GACpE,QAAQ,CACZ,CAAC;AAEF,MAAM,MAAM,eAAe,CAAC,UAAU,SAAS,qBAAqB,GAAG,qBAAqB,IAAI;IAC/F,OAAO,EAAE,gBAAgB,CAAC,UAAU,CAAC,CAAC;CACtC,CAAC;AAIF,MAAM,WAAW,0BAA0B;IAC1C,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,WAAW,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,EAAE,CAAC,CAAC;CAC5C;AAED,MAAM,MAAM,mBAAmB,CAAC,aAAa,SAAS,wBAAwB,IAAI;IACjF,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,WAAW,CAAC;CACpB,GAAG,CAAC,aAAa,CAAC,QAAQ,CAAC,SAAS,YAAY,GAC9C;IACA,MAAM,EAAE,WAAW,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC;CAC7C,GACA,EAEA,CAAC,CAAC;AAEL,MAAM,MAAM,mBAAmB,CAAC,aAAa,SAAS,wBAAwB,IAAI,CACjF,OAAO,EAAE,mBAAmB,CAAC,aAAa,CAAC,KACvC,aAAa,CACjB,aAAa,CAAC,SAAS,CAAC,SAAS,YAAY,GAAG,aAAa,CAAC,GAAG,CAAC,GAC/D,WAAW,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,GACrC,KAAK,CACR,CAAC;AAEF,MAAM,MAAM,kBAAkB,CAAC,aAAa,SAAS,wBAAwB,GAAG,wBAAwB,IAAI;IAC3G,OAAO,EAAE,mBAAmB,CAAC,aAAa,CAAC,CAAC;CAC5C,CAAC"}
@@ -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,2 @@
1
+ export {};
2
+ //# sourceMappingURL=websocket.js.map
@@ -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"}