@atcute/xrpc-server 0.1.9 → 0.1.11
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/README.md +9 -6
- package/dist/auth/index.d.ts +2 -2
- package/dist/auth/jwt-verifier.d.ts +2 -2
- package/dist/auth/jwt.d.ts +2 -2
- package/dist/auth/jwt.js +1 -1
- package/dist/auth/jwt.js.map +1 -1
- package/dist/main/index.d.ts +6 -6
- package/dist/main/router.d.ts +5 -5
- package/dist/main/router.js +3 -3
- package/dist/main/router.js.map +1 -1
- package/dist/main/types/operation.d.ts +2 -2
- package/dist/main/types/websocket.d.ts +1 -1
- package/dist/main/utils/request-input.d.ts +13 -1
- package/dist/main/utils/request-input.d.ts.map +1 -1
- package/dist/main/utils/request-input.js +22 -0
- package/dist/main/utils/request-input.js.map +1 -1
- package/dist/main/utils/request-params.d.ts +1 -1
- package/dist/main/utils/websocket-mock.d.ts +4 -4
- package/dist/main/xrpc-handler.d.ts +3 -3
- package/dist/middlewares/cors.d.ts +1 -1
- package/dist/middlewares/cors.d.ts.map +1 -1
- package/dist/middlewares/cors.js +4 -1
- package/dist/middlewares/cors.js.map +1 -1
- package/lib/auth/index.ts +2 -2
- package/lib/auth/jwt-creator.ts +1 -1
- package/lib/auth/jwt-verifier.ts +3 -3
- package/lib/auth/jwt.ts +3 -3
- package/lib/main/index.ts +6 -6
- package/lib/main/router.ts +12 -12
- package/lib/main/types/operation.ts +2 -2
- package/lib/main/types/websocket.ts +1 -1
- package/lib/main/utils/request-input.ts +26 -1
- package/lib/main/utils/request-params.ts +1 -1
- package/lib/main/utils/websocket-mock.ts +4 -4
- package/lib/main/xrpc-handler.ts +3 -3
- package/lib/middlewares/cors.ts +5 -2
- package/package.json +9 -9
package/README.md
CHANGED
|
@@ -79,21 +79,24 @@ export default router;
|
|
|
79
79
|
on Deno, Bun or Cloudflare Workers, you can export the router directly and expect it to work out of
|
|
80
80
|
the box.
|
|
81
81
|
|
|
82
|
-
for Node.js, you'll need
|
|
83
|
-
with standard Web
|
|
82
|
+
for Node.js, you'll need a fetch-to-Node adapter like
|
|
83
|
+
[`@remix-run/node-fetch-server`][node-fetch-server] since the router works with standard Web
|
|
84
|
+
Request/Response:
|
|
84
85
|
|
|
85
|
-
[
|
|
86
|
+
[node-fetch-server]: https://github.com/remix-run/remix/tree/main/packages/node-fetch-server
|
|
86
87
|
|
|
87
88
|
```ts
|
|
89
|
+
import * as http from 'node:http';
|
|
90
|
+
import { createRequestListener } from '@remix-run/node-fetch-server';
|
|
88
91
|
import { XRPCRouter } from '@atcute/xrpc-server';
|
|
89
|
-
import { serve } from '@hono/node-server';
|
|
90
92
|
|
|
91
93
|
const router = new XRPCRouter();
|
|
92
94
|
|
|
93
95
|
// ... add handlers ...
|
|
94
96
|
|
|
95
|
-
|
|
96
|
-
|
|
97
|
+
const server = http.createServer(createRequestListener(router.fetch));
|
|
98
|
+
server.listen(3000, () => {
|
|
99
|
+
console.log('listening on port 3000');
|
|
97
100
|
});
|
|
98
101
|
```
|
|
99
102
|
|
package/dist/auth/index.d.ts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
export * from './jwt-creator.
|
|
2
|
-
export * from './jwt-verifier.
|
|
1
|
+
export * from './jwt-creator.ts';
|
|
2
|
+
export * from './jwt-verifier.ts';
|
|
3
3
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { type DidDocumentResolver } from '@atcute/identity-resolver';
|
|
2
2
|
import type { Did, Nsid } from '@atcute/lexicons';
|
|
3
|
-
import type { Result } from '../types/misc.
|
|
4
|
-
import type { AuthError } from './types.
|
|
3
|
+
import type { Result } from '../types/misc.ts';
|
|
4
|
+
import type { AuthError } from './types.ts';
|
|
5
5
|
export interface ServiceJwtVerifierOptions {
|
|
6
6
|
serviceDid: Did | null;
|
|
7
7
|
resolver: DidDocumentResolver;
|
package/dist/auth/jwt.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { Did, Nsid } from '@atcute/lexicons';
|
|
2
|
-
import type { Result } from '../types/misc.
|
|
3
|
-
import type { AuthError } from './types.
|
|
2
|
+
import type { Result } from '../types/misc.ts';
|
|
3
|
+
import type { AuthError } from './types.ts';
|
|
4
4
|
export interface JwtHeader {
|
|
5
5
|
typ?: string;
|
|
6
6
|
alg: string;
|
package/dist/auth/jwt.js
CHANGED
|
@@ -32,7 +32,7 @@ const readJwtPortion = (schema, input) => {
|
|
|
32
32
|
try {
|
|
33
33
|
const raw = decodeUtf8From(fromBase64Url(input));
|
|
34
34
|
const json = JSON.parse(raw);
|
|
35
|
-
const result = schema.try(json);
|
|
35
|
+
const result = schema.try(json, { mode: 'passthrough' });
|
|
36
36
|
if (result.ok) {
|
|
37
37
|
return result;
|
|
38
38
|
}
|
package/dist/auth/jwt.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"jwt.js","sourceRoot":"","sources":["../../lib/auth/jwt.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAEhE,OAAO,KAAK,CAAC,MAAM,gBAAgB,CAAC;AAMpC,MAAM,SAAS,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,MAAM,CAAC,KAAK,EAAE,eAAe,CAAC,CAAC;AAC5D,MAAM,UAAU,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;AAEhE,MAAM,OAAO,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,IAAI,CAAC,IAAI,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE,oBAAoB,CAAC,CAAC;AAO9G,MAAM,SAAS,GAAsB,CAAC,CAAC,MAAM,CAAC;IAC7C,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC1B,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE;CACf,CAAC,CAAC;AAWH,MAAM,UAAU,GAAuB,CAAC;KACtC,MAAM,CAAC;IACP,aAAa;IACb,GAAG,EAAE,SAAS;IACd,sBAAsB;IACtB,GAAG,EAAE,SAAS;IACd,sBAAsB;IACtB,GAAG,EAAE,OAAO;IACZ,oBAAoB;IACpB,GAAG,EAAE,OAAO,CAAC,QAAQ,EAAE;IACvB,mCAAmC;IACnC,GAAG,EAAE,UAAU,CAAC,QAAQ,EAAE;IAC1B,wBAAwB;IACxB,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CAC1B,CAAC;KACD,MAAM,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,GAAG,KAAK,SAAS,IAAI,GAAG,GAAG,GAAG,EAAE;IACzD,OAAO,EAAE,8CAA8C;IACvD,IAAI,EAAE,CAAC,KAAK,CAAC;CACb,CAAC,CAAC;AASJ,MAAM,cAAc,GAAG,CAAI,MAAiB,EAAE,KAAa,EAAwB,EAAE,CAAC;IACrF,IAAI,CAAC;QACJ,MAAM,GAAG,GAAG,cAAc,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC;QACjD,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAE7B,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,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
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
export * from './response.
|
|
2
|
-
export * from './router.
|
|
3
|
-
export * from './xrpc-error.
|
|
4
|
-
export * from './xrpc-handler.
|
|
5
|
-
export type { ProcedureConfig, ProcedureContext, ProcedureHandler, QueryConfig, QueryContext, QueryHandler, SubscriptionConfig, SubscriptionContext, SubscriptionHandler, } from './types/operation.
|
|
6
|
-
export * from './types/websocket.
|
|
1
|
+
export * from './response.ts';
|
|
2
|
+
export * from './router.ts';
|
|
3
|
+
export * from './xrpc-error.ts';
|
|
4
|
+
export * from './xrpc-handler.ts';
|
|
5
|
+
export type { ProcedureConfig, ProcedureContext, ProcedureHandler, QueryConfig, QueryContext, QueryHandler, SubscriptionConfig, SubscriptionContext, SubscriptionHandler, } from './types/operation.ts';
|
|
6
|
+
export * from './types/websocket.ts';
|
|
7
7
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/main/router.d.ts
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { type XRPCProcedureMetadata, type XRPCQueryMetadata, type XRPCSubscriptionMetadata } from '@atcute/lexicons/validations';
|
|
2
|
-
import type { Promisable } from '../types/misc.
|
|
3
|
-
import type { ProcedureConfig, QueryConfig, SubscriptionConfig } from './types/operation.
|
|
4
|
-
import type { WebSocketAdapter } from './types/websocket.
|
|
5
|
-
import { type Middleware } from './utils/middlewares.
|
|
6
|
-
import { type Namespaced } from './utils/namespaced.
|
|
2
|
+
import type { Promisable } from '../types/misc.ts';
|
|
3
|
+
import type { ProcedureConfig, QueryConfig, SubscriptionConfig } from './types/operation.ts';
|
|
4
|
+
import type { WebSocketAdapter } from './types/websocket.ts';
|
|
5
|
+
import { type Middleware } from './utils/middlewares.ts';
|
|
6
|
+
import { type Namespaced } from './utils/namespaced.ts';
|
|
7
7
|
export type FetchMiddleware = Middleware<[request: Request], Promise<Response>>;
|
|
8
8
|
export type NotFoundHandler = (request: Request) => Promisable<Response>;
|
|
9
9
|
export type ExceptionHandler = (error: unknown, request: Request) => Promisable<Response>;
|
package/dist/main/router.js
CHANGED
|
@@ -2,7 +2,7 @@ import { safeParse, } from '@atcute/lexicons/validations';
|
|
|
2
2
|
import { encodeErrorFrame, encodeMessageFrame, extractMessageType, omitMessageType } from './utils/frames.js';
|
|
3
3
|
import { createAsyncMiddlewareRunner } from './utils/middlewares.js';
|
|
4
4
|
import { unwrapLxm } from './utils/namespaced.js';
|
|
5
|
-
import { constructMimeValidator } from './utils/request-input.js';
|
|
5
|
+
import { constructMimeValidator, hasRequestBody } from './utils/request-input.js';
|
|
6
6
|
import { constructParamsHandler } from './utils/request-params.js';
|
|
7
7
|
import { invalidRequest, validationError } from './utils/response.js';
|
|
8
8
|
import { XRPCError, XRPCSubscriptionError } from './xrpc-error.js';
|
|
@@ -129,7 +129,7 @@ export class XRPCRouter {
|
|
|
129
129
|
params = {};
|
|
130
130
|
}
|
|
131
131
|
if (requiresInput) {
|
|
132
|
-
if (request
|
|
132
|
+
if (!hasRequestBody(request)) {
|
|
133
133
|
return invalidRequest(`request body is expected but none was provided`);
|
|
134
134
|
}
|
|
135
135
|
if (validateInputType !== null) {
|
|
@@ -154,7 +154,7 @@ export class XRPCRouter {
|
|
|
154
154
|
}
|
|
155
155
|
}
|
|
156
156
|
else {
|
|
157
|
-
if (request
|
|
157
|
+
if (hasRequestBody(request)) {
|
|
158
158
|
return invalidRequest(`request body is provided when none was expected`);
|
|
159
159
|
}
|
|
160
160
|
}
|
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,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,SAAS,EAAmB,MAAM,uBAAuB,CAAC;AACnE,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"router.js","sourceRoot":"","sources":["../../lib/main/router.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { InferOutput, ObjectSchema, VariantSchema, XRPCBlobBodyParam, XRPCLexBodyParam, XRPCProcedureMetadata, XRPCQueryMetadata, XRPCSubscriptionMetadata } from '@atcute/lexicons/validations';
|
|
2
|
-
import type { Literal, Promisable } from '../../types/misc.
|
|
3
|
-
import type { JSONResponse } from '../response.
|
|
2
|
+
import type { Literal, Promisable } from '../../types/misc.ts';
|
|
3
|
+
import type { JSONResponse } from '../response.ts';
|
|
4
4
|
export type UnknownOperationContext = {
|
|
5
5
|
request: Request;
|
|
6
6
|
signal: AbortSignal;
|
|
@@ -1,4 +1,16 @@
|
|
|
1
1
|
import type { XRPCBlobBodyParam, XRPCLexBodyParam } from '@atcute/lexicons/validations';
|
|
2
|
-
import type { Result } from '../../types/misc.
|
|
2
|
+
import type { Result } from '../../types/misc.ts';
|
|
3
|
+
/**
|
|
4
|
+
* checks whether a request has a meaningful body.
|
|
5
|
+
*
|
|
6
|
+
* Node.js HTTP-to-fetch adapters always provide a `ReadableStream` for
|
|
7
|
+
* `request.body`, even when no body content was sent. this function
|
|
8
|
+
* uses `content-length` to handle that case while still respecting the
|
|
9
|
+
* web `Request` API where `body === null` signals no body.
|
|
10
|
+
*
|
|
11
|
+
* @param request incoming request to check
|
|
12
|
+
* @returns whether the request has body content
|
|
13
|
+
*/
|
|
14
|
+
export declare const hasRequestBody: (request: Request) => boolean;
|
|
3
15
|
export declare const constructMimeValidator: (param: XRPCBlobBodyParam | XRPCLexBodyParam<import("@atcute/lexicons/validations").ObjectSchema<import("@atcute/lexicons/validations").LooseObjectShape> | import("@atcute/lexicons/validations").VariantSchema<readonly import("@atcute/lexicons/validations").ObjectSchema<any>[], boolean>>) => ((request: Request) => Result<void, string>) | null;
|
|
4
16
|
//# sourceMappingURL=request-input.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"request-input.d.ts","sourceRoot":"","sources":["../../../lib/main/utils/request-input.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAExF,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"request-input.d.ts","sourceRoot":"","sources":["../../../lib/main/utils/request-input.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAExF,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAElD;;;;;;;;;;GAUG;AACH,eAAO,MAAM,cAAc,+BAY1B,CAAC;AAmBF,eAAO,MAAM,sBAAsB,yVAwBlC,CAAC"}
|
|
@@ -1,3 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* checks whether a request has a meaningful body.
|
|
3
|
+
*
|
|
4
|
+
* Node.js HTTP-to-fetch adapters always provide a `ReadableStream` for
|
|
5
|
+
* `request.body`, even when no body content was sent. this function
|
|
6
|
+
* uses `content-length` to handle that case while still respecting the
|
|
7
|
+
* web `Request` API where `body === null` signals no body.
|
|
8
|
+
*
|
|
9
|
+
* @param request incoming request to check
|
|
10
|
+
* @returns whether the request has body content
|
|
11
|
+
*/
|
|
12
|
+
export const hasRequestBody = (request) => {
|
|
13
|
+
if (request.body === null) {
|
|
14
|
+
return false;
|
|
15
|
+
}
|
|
16
|
+
// Node.js adapters set content-length: 0 for bodiless requests while
|
|
17
|
+
// still providing a ReadableStream body; treat this as no body.
|
|
18
|
+
if (request.headers.get('content-length') === '0') {
|
|
19
|
+
return false;
|
|
20
|
+
}
|
|
21
|
+
return true;
|
|
22
|
+
};
|
|
1
23
|
const jsonMimeValidator = (() => {
|
|
2
24
|
const JSON_RE = /^\s*application\/json\s*(?:$|;)/;
|
|
3
25
|
return (request) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"request-input.js","sourceRoot":"","sources":["../../../lib/main/utils/request-input.ts"],"names":[],"mappings":"AAIA,MAAM,iBAAiB,GAAG,CAAC,GAAG,EAAE,CAAC;IAChC,MAAM,OAAO,GAAG,iCAAiC,CAAC;IAElD,OAAO,CAAC,OAAgB,EAAwB,EAAE,CAAC;QAClD,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;QACjD,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;YACnB,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,wDAAwD,EAAE,CAAC;QACvF,CAAC;QAED,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YACzB,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,wDAAwD,EAAE,CAAC;QACvF,CAAC;QAED,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;IAAA,CACtC,CAAC;AAAA,CACF,CAAC,EAAE,CAAC;AAEL,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,KAA2C,EAAE,EAAE,CAAC;IACtF,IAAI,KAAK,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;QAC1B,OAAO,iBAAiB,CAAC;IAC1B,CAAC;IAED,MAAM,KAAK,GAAG,KAAK,CAAC,QAAQ,CAAC;IAC7B,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC/C,OAAO,IAAI,CAAC;IACb,CAAC;IAED,MAAM,OAAO,GAAG,IAAI,MAAM,CAAC,WAAW,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IAEvF,OAAO,CAAC,OAAgB,EAAwB,EAAE,CAAC;QAClD,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;QACjD,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;YACnB,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,wCAAwC,aAAa,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC;QACpG,CAAC;QAED,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YACzB,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,wCAAwC,aAAa,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC;QACpG,CAAC;QAED,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;IAAA,CACtC,CAAC;AAAA,CACF,CAAC;AAEF,MAAM,aAAa,GAAG,CAAC,IAAc,EAAE,GAAiB,EAAU,EAAE,CAAC;IACpE,QAAQ,IAAI,CAAC,MAAM,EAAE,CAAC;QACrB,KAAK,CAAC,EAAE,CAAC;YACR,OAAO,SAAS,CAAC;QAClB,CAAC;QACD,KAAK,CAAC,EAAE,CAAC;YACR,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC;QAChB,CAAC;QACD,SAAS,CAAC;YACT,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,CAAC;QAC1E,CAAC;IACF,CAAC;AAAA,CACD,CAAC;AAEF,MAAM,YAAY,GAAG,CAAC,KAAa,EAAU,EAAE,CAAC;IAC/C,OAAO,KAAK,CAAC,OAAO,CAAC,0BAA0B,EAAE,MAAM,CAAC,CAAC;AAAA,CACzD,CAAC"}
|
|
1
|
+
{"version":3,"file":"request-input.js","sourceRoot":"","sources":["../../../lib/main/utils/request-input.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { type ObjectSchema, type ValidationResult } from '@atcute/lexicons/validations';
|
|
2
|
-
import type { Literal } from '../../types/misc.
|
|
2
|
+
import type { Literal } from '../../types/misc.ts';
|
|
3
3
|
type MaybeArray<T> = T | T[];
|
|
4
4
|
export declare const constructParamsHandler: <TSchema extends ObjectSchema<import("@atcute/lexicons/validations").LooseObjectShape>>(schema: TSchema) => (searchParams: URLSearchParams) => ValidationResult<Record<string, MaybeArray<Literal>>>;
|
|
5
5
|
export {};
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import type { Promisable } from '../../types/misc.
|
|
2
|
-
import type { XRPCRouter } from '../router.
|
|
3
|
-
import type { WebSocketAdapter, WebSocketConnection } from '../types/websocket.
|
|
4
|
-
import { EventEmitter } from './event-emitter.
|
|
1
|
+
import type { Promisable } from '../../types/misc.ts';
|
|
2
|
+
import type { XRPCRouter } from '../router.ts';
|
|
3
|
+
import type { WebSocketAdapter, WebSocketConnection } from '../types/websocket.ts';
|
|
4
|
+
import { EventEmitter } from './event-emitter.ts';
|
|
5
5
|
export interface SubscriptionClient extends Disposable {
|
|
6
6
|
events: EventEmitter<{
|
|
7
7
|
message: [data: Uint8Array];
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { XRPCProcedureMetadata, XRPCQueryMetadata } from '@atcute/lexicons/validations';
|
|
2
|
-
import { type XRPCRouterOptions } from './router.
|
|
3
|
-
import type { ProcedureConfig, QueryConfig } from './types/operation.
|
|
4
|
-
import { type Namespaced } from './utils/namespaced.
|
|
2
|
+
import { type XRPCRouterOptions } from './router.ts';
|
|
3
|
+
import type { ProcedureConfig, QueryConfig } from './types/operation.ts';
|
|
4
|
+
import { type Namespaced } from './utils/namespaced.ts';
|
|
5
5
|
type XrpcHandlerRouterOptions = Pick<XRPCRouterOptions, 'middlewares' | 'handleNotFound' | 'handleException'>;
|
|
6
6
|
export type XrpcQueryHandlerOptions<TQuery extends XRPCQueryMetadata> = {
|
|
7
7
|
lxm: TQuery | Namespaced<TQuery>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cors.d.ts","sourceRoot":"","sources":["../../lib/middlewares/cors.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEzD,MAAM,WAAW,WAAW;IAC3B,iDAAiD;IACjD,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,kCAAkC;IAClC,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,kDAAkD;IAClD,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,+EAA+E;IAC/E,mBAAmB,CAAC,EAAE,OAAO,CAAC;CAC9B;AAwBD,eAAO,MAAM,IAAI,
|
|
1
|
+
{"version":3,"file":"cors.d.ts","sourceRoot":"","sources":["../../lib/middlewares/cors.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEzD,MAAM,WAAW,WAAW;IAC3B,iDAAiD;IACjD,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,kCAAkC;IAClC,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,kDAAkD;IAClD,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,+EAA+E;IAC/E,mBAAmB,CAAC,EAAE,OAAO,CAAC;CAC9B;AAwBD,eAAO,MAAM,IAAI,4CAoEhB,CAAC"}
|
package/dist/middlewares/cors.js
CHANGED
|
@@ -15,8 +15,11 @@ const DEFAULT_ALLOWED_HEADERS = [
|
|
|
15
15
|
];
|
|
16
16
|
const RE_XRPC_NSID = /^\/xrpc\/([^?]*)/;
|
|
17
17
|
export const cors = (options = {}) => {
|
|
18
|
-
const exposedHeaders = Array.from(new Set([...DEFAULT_EXPOSED_HEADERS, ...(options.exposedHeaders?.map((h) => h.toLowerCase()) || [])]))
|
|
18
|
+
const exposedHeaders = Array.from(new Set([...DEFAULT_EXPOSED_HEADERS, ...(options.exposedHeaders?.map((h) => h.toLowerCase()) || [])]))
|
|
19
|
+
// oxlint-disable-next-line unicorn/no-array-sort -- Array.from already clones
|
|
20
|
+
.sort();
|
|
19
21
|
const allowedHeaders = Array.from(new Set([...DEFAULT_ALLOWED_HEADERS, ...(options.allowedHeaders?.map((h) => h.toLowerCase()) || [])]))
|
|
22
|
+
// oxlint-disable-next-line unicorn/no-array-sort -- Array.from already clones
|
|
20
23
|
.sort()
|
|
21
24
|
.join(',');
|
|
22
25
|
const exclude = options.exclude;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cors.js","sourceRoot":"","sources":["../../lib/middlewares/cors.ts"],"names":[],"mappings":"AAaA,MAAM,uBAAuB,GAAG;IAC/B,YAAY;IACZ,kBAAkB;IAElB,iBAAiB;IACjB,kBAAkB;IAClB,qBAAqB;IACrB,iBAAiB;CACjB,CAAC;AAEF,MAAM,uBAAuB,GAAG;IAC/B,cAAc;IAEd,eAAe;IACf,MAAM;IAEN,yBAAyB;IACzB,eAAe;CACf,CAAC;AAEF,MAAM,YAAY,GAAG,kBAAkB,CAAC;AAExC,MAAM,CAAC,MAAM,IAAI,GAAG,CAAC,OAAO,GAAgB,EAAE,EAAmB,EAAE,CAAC;IACnE,MAAM,cAAc,GAAG,KAAK,CAAC,IAAI,CAChC,IAAI,GAAG,CAAC,CAAC,GAAG,uBAAuB,EAAE,GAAG,CAAC,OAAO,CAAC,cAAc,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CACrG,
|
|
1
|
+
{"version":3,"file":"cors.js","sourceRoot":"","sources":["../../lib/middlewares/cors.ts"],"names":[],"mappings":"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"}
|
package/lib/auth/index.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export * from './jwt-creator.
|
|
2
|
-
export * from './jwt-verifier.
|
|
1
|
+
export * from './jwt-creator.ts';
|
|
2
|
+
export * from './jwt-verifier.ts';
|
package/lib/auth/jwt-creator.ts
CHANGED
|
@@ -5,7 +5,7 @@ import { encodeUtf8 } from '@atcute/uint8array';
|
|
|
5
5
|
|
|
6
6
|
import { nanoid } from 'nanoid';
|
|
7
7
|
|
|
8
|
-
import type { JwtHeader, JwtPayload } from './jwt.
|
|
8
|
+
import type { JwtHeader, JwtPayload } from './jwt.ts';
|
|
9
9
|
|
|
10
10
|
export interface CreateServiceJwtOptions {
|
|
11
11
|
keypair: PrivateKey;
|
package/lib/auth/jwt-verifier.ts
CHANGED
|
@@ -4,10 +4,10 @@ import { type DidDocumentResolver } from '@atcute/identity-resolver';
|
|
|
4
4
|
import type { Did, Nsid } from '@atcute/lexicons';
|
|
5
5
|
import * as uint8arrays from '@atcute/uint8array';
|
|
6
6
|
|
|
7
|
-
import type { Result } from '../types/misc.
|
|
7
|
+
import type { Result } from '../types/misc.ts';
|
|
8
8
|
|
|
9
|
-
import { parseJwt, type ParsedJwt } from './jwt.
|
|
10
|
-
import type { AuthError } from './types.
|
|
9
|
+
import { parseJwt, type ParsedJwt } from './jwt.ts';
|
|
10
|
+
import type { AuthError } from './types.ts';
|
|
11
11
|
|
|
12
12
|
export interface ServiceJwtVerifierOptions {
|
|
13
13
|
serviceDid: Did | null;
|
package/lib/auth/jwt.ts
CHANGED
|
@@ -5,9 +5,9 @@ import { decodeUtf8From, encodeUtf8 } from '@atcute/uint8array';
|
|
|
5
5
|
|
|
6
6
|
import * as v from '@badrap/valita';
|
|
7
7
|
|
|
8
|
-
import type { Result } from '../types/misc.
|
|
8
|
+
import type { Result } from '../types/misc.ts';
|
|
9
9
|
|
|
10
|
-
import type { AuthError } from './types.
|
|
10
|
+
import type { AuthError } from './types.ts';
|
|
11
11
|
|
|
12
12
|
const didString = v.string().assert(isDid, `must be a did`);
|
|
13
13
|
const nsidString = v.string().assert(isNsid, `must be an nsid`);
|
|
@@ -65,7 +65,7 @@ const readJwtPortion = <T>(schema: v.Type<T>, input: string): Result<T, AuthErro
|
|
|
65
65
|
const raw = decodeUtf8From(fromBase64Url(input));
|
|
66
66
|
const json = JSON.parse(raw);
|
|
67
67
|
|
|
68
|
-
const result = schema.try(json);
|
|
68
|
+
const result = schema.try(json, { mode: 'passthrough' });
|
|
69
69
|
if (result.ok) {
|
|
70
70
|
return result;
|
|
71
71
|
}
|
package/lib/main/index.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
export * from './response.
|
|
2
|
-
export * from './router.
|
|
3
|
-
export * from './xrpc-error.
|
|
4
|
-
export * from './xrpc-handler.
|
|
1
|
+
export * from './response.ts';
|
|
2
|
+
export * from './router.ts';
|
|
3
|
+
export * from './xrpc-error.ts';
|
|
4
|
+
export * from './xrpc-handler.ts';
|
|
5
5
|
|
|
6
6
|
export type {
|
|
7
7
|
ProcedureConfig,
|
|
@@ -13,5 +13,5 @@ export type {
|
|
|
13
13
|
SubscriptionConfig,
|
|
14
14
|
SubscriptionContext,
|
|
15
15
|
SubscriptionHandler,
|
|
16
|
-
} from './types/operation.
|
|
17
|
-
export * from './types/websocket.
|
|
16
|
+
} from './types/operation.ts';
|
|
17
|
+
export * from './types/websocket.ts';
|
package/lib/main/router.ts
CHANGED
|
@@ -5,7 +5,7 @@ import {
|
|
|
5
5
|
type XRPCSubscriptionMetadata,
|
|
6
6
|
} from '@atcute/lexicons/validations';
|
|
7
7
|
|
|
8
|
-
import type { Literal, Promisable } from '../types/misc.
|
|
8
|
+
import type { Literal, Promisable } from '../types/misc.ts';
|
|
9
9
|
|
|
10
10
|
import type {
|
|
11
11
|
ProcedureConfig,
|
|
@@ -13,15 +13,15 @@ import type {
|
|
|
13
13
|
SubscriptionConfig,
|
|
14
14
|
UnknownOperationContext,
|
|
15
15
|
UnknownSubscriptionContext,
|
|
16
|
-
} from './types/operation.
|
|
17
|
-
import type { WebSocketAdapter } from './types/websocket.
|
|
18
|
-
import { encodeErrorFrame, encodeMessageFrame, extractMessageType, omitMessageType } from './utils/frames.
|
|
19
|
-
import { createAsyncMiddlewareRunner, type Middleware } from './utils/middlewares.
|
|
20
|
-
import { unwrapLxm, type Namespaced } from './utils/namespaced.
|
|
21
|
-
import { constructMimeValidator } from './utils/request-input.
|
|
22
|
-
import { constructParamsHandler } from './utils/request-params.
|
|
23
|
-
import { invalidRequest, validationError } from './utils/response.
|
|
24
|
-
import { XRPCError, XRPCSubscriptionError } from './xrpc-error.
|
|
16
|
+
} from './types/operation.ts';
|
|
17
|
+
import type { WebSocketAdapter } from './types/websocket.ts';
|
|
18
|
+
import { encodeErrorFrame, encodeMessageFrame, extractMessageType, omitMessageType } from './utils/frames.ts';
|
|
19
|
+
import { createAsyncMiddlewareRunner, type Middleware } from './utils/middlewares.ts';
|
|
20
|
+
import { unwrapLxm, type Namespaced } from './utils/namespaced.ts';
|
|
21
|
+
import { constructMimeValidator, hasRequestBody } from './utils/request-input.ts';
|
|
22
|
+
import { constructParamsHandler } from './utils/request-params.ts';
|
|
23
|
+
import { invalidRequest, validationError } from './utils/response.ts';
|
|
24
|
+
import { XRPCError, XRPCSubscriptionError } from './xrpc-error.ts';
|
|
25
25
|
|
|
26
26
|
type InternalRequestContext = {
|
|
27
27
|
url: URL;
|
|
@@ -236,7 +236,7 @@ export class XRPCRouter {
|
|
|
236
236
|
}
|
|
237
237
|
|
|
238
238
|
if (requiresInput) {
|
|
239
|
-
if (request
|
|
239
|
+
if (!hasRequestBody(request)) {
|
|
240
240
|
return invalidRequest(`request body is expected but none was provided`);
|
|
241
241
|
}
|
|
242
242
|
|
|
@@ -263,7 +263,7 @@ export class XRPCRouter {
|
|
|
263
263
|
input = result.value;
|
|
264
264
|
}
|
|
265
265
|
} else {
|
|
266
|
-
if (request
|
|
266
|
+
if (hasRequestBody(request)) {
|
|
267
267
|
return invalidRequest(`request body is provided when none was expected`);
|
|
268
268
|
}
|
|
269
269
|
}
|
|
@@ -9,8 +9,8 @@ import type {
|
|
|
9
9
|
XRPCSubscriptionMetadata,
|
|
10
10
|
} from '@atcute/lexicons/validations';
|
|
11
11
|
|
|
12
|
-
import type { Literal, Promisable } from '../../types/misc.
|
|
13
|
-
import type { JSONResponse } from '../response.
|
|
12
|
+
import type { Literal, Promisable } from '../../types/misc.ts';
|
|
13
|
+
import type { JSONResponse } from '../response.ts';
|
|
14
14
|
|
|
15
15
|
export type UnknownOperationContext = {
|
|
16
16
|
request: Request;
|
|
@@ -1,6 +1,31 @@
|
|
|
1
1
|
import type { XRPCBlobBodyParam, XRPCLexBodyParam } from '@atcute/lexicons/validations';
|
|
2
2
|
|
|
3
|
-
import type { Result } from '../../types/misc.
|
|
3
|
+
import type { Result } from '../../types/misc.ts';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* checks whether a request has a meaningful body.
|
|
7
|
+
*
|
|
8
|
+
* Node.js HTTP-to-fetch adapters always provide a `ReadableStream` for
|
|
9
|
+
* `request.body`, even when no body content was sent. this function
|
|
10
|
+
* uses `content-length` to handle that case while still respecting the
|
|
11
|
+
* web `Request` API where `body === null` signals no body.
|
|
12
|
+
*
|
|
13
|
+
* @param request incoming request to check
|
|
14
|
+
* @returns whether the request has body content
|
|
15
|
+
*/
|
|
16
|
+
export const hasRequestBody = (request: Request): boolean => {
|
|
17
|
+
if (request.body === null) {
|
|
18
|
+
return false;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
// Node.js adapters set content-length: 0 for bodiless requests while
|
|
22
|
+
// still providing a ReadableStream body; treat this as no body.
|
|
23
|
+
if (request.headers.get('content-length') === '0') {
|
|
24
|
+
return false;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
return true;
|
|
28
|
+
};
|
|
4
29
|
|
|
5
30
|
const jsonMimeValidator = (() => {
|
|
6
31
|
const JSON_RE = /^\s*application\/json\s*(?:$|;)/;
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { AsyncLocalStorage } from 'node:async_hooks';
|
|
2
2
|
|
|
3
|
-
import type { Promisable } from '../../types/misc.
|
|
4
|
-
import type { XRPCRouter } from '../router.
|
|
5
|
-
import type { WebSocketAdapter, WebSocketConnection } from '../types/websocket.
|
|
3
|
+
import type { Promisable } from '../../types/misc.ts';
|
|
4
|
+
import type { XRPCRouter } from '../router.ts';
|
|
5
|
+
import type { WebSocketAdapter, WebSocketConnection } from '../types/websocket.ts';
|
|
6
6
|
|
|
7
|
-
import { EventEmitter } from './event-emitter.
|
|
7
|
+
import { EventEmitter } from './event-emitter.ts';
|
|
8
8
|
|
|
9
9
|
interface WebSocketHandlerContext {
|
|
10
10
|
handler: ((ws: WebSocketConnection) => Promisable<void>) | null;
|
package/lib/main/xrpc-handler.ts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import type { XRPCProcedureMetadata, XRPCQueryMetadata } from '@atcute/lexicons/validations';
|
|
2
2
|
|
|
3
|
-
import { XRPCRouter, type XRPCRouterOptions } from './router.
|
|
4
|
-
import type { ProcedureConfig, QueryConfig } from './types/operation.
|
|
5
|
-
import { unwrapLxm, type Namespaced } from './utils/namespaced.
|
|
3
|
+
import { XRPCRouter, type XRPCRouterOptions } from './router.ts';
|
|
4
|
+
import type { ProcedureConfig, QueryConfig } from './types/operation.ts';
|
|
5
|
+
import { unwrapLxm, type Namespaced } from './utils/namespaced.ts';
|
|
6
6
|
|
|
7
7
|
type XrpcHandlerRouterOptions = Pick<XRPCRouterOptions, 'middlewares' | 'handleNotFound' | 'handleException'>;
|
|
8
8
|
|
package/lib/middlewares/cors.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { FetchMiddleware } from '../main/router.
|
|
1
|
+
import type { FetchMiddleware } from '../main/router.ts';
|
|
2
2
|
|
|
3
3
|
export interface CORSOptions {
|
|
4
4
|
/** Additional headers to expose to the client */
|
|
@@ -36,11 +36,14 @@ const RE_XRPC_NSID = /^\/xrpc\/([^?]*)/;
|
|
|
36
36
|
export const cors = (options: CORSOptions = {}): FetchMiddleware => {
|
|
37
37
|
const exposedHeaders = Array.from(
|
|
38
38
|
new Set([...DEFAULT_EXPOSED_HEADERS, ...(options.exposedHeaders?.map((h) => h.toLowerCase()) || [])]),
|
|
39
|
-
)
|
|
39
|
+
)
|
|
40
|
+
// oxlint-disable-next-line unicorn/no-array-sort -- Array.from already clones
|
|
41
|
+
.sort();
|
|
40
42
|
|
|
41
43
|
const allowedHeaders = Array.from(
|
|
42
44
|
new Set([...DEFAULT_ALLOWED_HEADERS, ...(options.allowedHeaders?.map((h) => h.toLowerCase()) || [])]),
|
|
43
45
|
)
|
|
46
|
+
// oxlint-disable-next-line unicorn/no-array-sort -- Array.from already clones
|
|
44
47
|
.sort()
|
|
45
48
|
.join(',');
|
|
46
49
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@atcute/xrpc-server",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.11",
|
|
4
4
|
"description": "a small web framework for handling XRPC operations",
|
|
5
5
|
"license": "0BSD",
|
|
6
6
|
"repository": {
|
|
@@ -25,21 +25,21 @@
|
|
|
25
25
|
"dependencies": {
|
|
26
26
|
"@badrap/valita": "^0.4.6",
|
|
27
27
|
"nanoid": "^5.1.6",
|
|
28
|
-
"@atcute/cbor": "^2.3.
|
|
28
|
+
"@atcute/cbor": "^2.3.2",
|
|
29
29
|
"@atcute/crypto": "^2.3.0",
|
|
30
30
|
"@atcute/identity-resolver": "^1.2.2",
|
|
31
|
+
"@atcute/lexicons": "^1.2.9",
|
|
31
32
|
"@atcute/identity": "^1.1.3",
|
|
32
|
-
"@atcute/multibase": "^1.1.
|
|
33
|
-
"@atcute/
|
|
34
|
-
"@atcute/uint8array": "^1.1.0"
|
|
33
|
+
"@atcute/multibase": "^1.1.8",
|
|
34
|
+
"@atcute/uint8array": "^1.1.1"
|
|
35
35
|
},
|
|
36
36
|
"devDependencies": {
|
|
37
37
|
"@atcute/xrpc-server": "file:",
|
|
38
|
-
"@types/node": "^
|
|
39
|
-
"@vitest/coverage-v8": "^4.0.
|
|
40
|
-
"vitest": "^4.0.
|
|
38
|
+
"@types/node": "^25.3.0",
|
|
39
|
+
"@vitest/coverage-v8": "^4.0.18",
|
|
40
|
+
"vitest": "^4.0.18",
|
|
41
41
|
"@atcute/atproto": "^3.1.10",
|
|
42
|
-
"@atcute/bluesky": "^3.2.
|
|
42
|
+
"@atcute/bluesky": "^3.2.19"
|
|
43
43
|
},
|
|
44
44
|
"scripts": {
|
|
45
45
|
"build": "tsgo --project tsconfig.build.json",
|