@atcute/xrpc-server 0.1.3 → 0.1.5
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 +206 -28
- package/dist/auth/jwt-creator.d.ts.map +1 -1
- package/dist/auth/jwt-creator.js.map +1 -1
- package/dist/auth/jwt-verifier.d.ts.map +1 -1
- package/dist/auth/jwt-verifier.js.map +1 -1
- 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/response.js.map +1 -1
- package/dist/main/router.d.ts +7 -6
- package/dist/main/router.d.ts.map +1 -1
- package/dist/main/router.js +20 -13
- package/dist/main/router.js.map +1 -1
- package/dist/main/utils/event-emitter.d.ts.map +1 -1
- package/dist/main/utils/event-emitter.js.map +1 -1
- package/dist/main/utils/frames.d.ts +2 -2
- package/dist/main/utils/frames.d.ts.map +1 -1
- package/dist/main/utils/frames.js +1 -1
- package/dist/main/utils/frames.js.map +1 -1
- package/dist/main/utils/middlewares.d.ts.map +1 -1
- package/dist/main/utils/middlewares.js.map +1 -1
- package/dist/main/utils/namespaced.d.ts +5 -0
- package/dist/main/utils/namespaced.d.ts.map +1 -0
- package/dist/main/utils/namespaced.js +4 -0
- package/dist/main/utils/namespaced.js.map +1 -0
- package/dist/main/utils/request-input.d.ts +1 -1
- package/dist/main/utils/request-input.d.ts.map +1 -1
- package/dist/main/utils/request-input.js.map +1 -1
- package/dist/main/utils/request-params.d.ts +1 -1
- package/dist/main/utils/request-params.d.ts.map +1 -1
- package/dist/main/utils/request-params.js.map +1 -1
- package/dist/main/utils/response.d.ts +1 -1
- package/dist/main/utils/response.d.ts.map +1 -1
- package/dist/main/utils/response.js.map +1 -1
- package/dist/main/utils/websocket-mock.d.ts.map +1 -1
- package/dist/main/utils/websocket-mock.js.map +1 -1
- package/dist/main/xrpc-error.d.ts +1 -1
- package/dist/main/xrpc-error.d.ts.map +1 -1
- package/dist/main/xrpc-error.js.map +1 -1
- package/dist/main/xrpc-handler.d.ts +23 -0
- package/dist/main/xrpc-handler.d.ts.map +1 -0
- package/dist/main/xrpc-handler.js +19 -0
- package/dist/main/xrpc-handler.js.map +1 -0
- package/dist/middlewares/cors.d.ts +2 -0
- package/dist/middlewares/cors.d.ts.map +1 -1
- package/dist/middlewares/cors.js +19 -0
- package/dist/middlewares/cors.js.map +1 -1
- package/lib/main/index.ts +1 -0
- package/lib/main/router.ts +33 -19
- package/lib/main/utils/frames.ts +1 -1
- package/lib/main/utils/namespaced.ts +5 -0
- package/lib/main/xrpc-handler.ts +54 -0
- package/lib/middlewares/cors.ts +26 -0
- package/package.json +18 -15
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"middlewares.js","sourceRoot":"","sources":["../../../lib/main/utils/middlewares.ts"],"names":[],"mappings":"AAIA,MAAM,CAAC,MAAM,2BAA2B,GAAG,CAC1C,WAAgG,EAC/F,EAAE;
|
|
1
|
+
{"version":3,"file":"middlewares.js","sourceRoot":"","sources":["../../../lib/main/utils/middlewares.ts"],"names":[],"mappings":"AAIA,MAAM,CAAC,MAAM,2BAA2B,GAAG,CAC1C,WAAgG,EAC/F,EAAE,CAAC;IACJ,kBAAkB;IAClB,OAAO,WAAW,CAAC,WAAW,CAC7B,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,IAAI,EAAE,IAAI,CAAC,EAC9C,GAAG,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC,CAC7D,CAAC;AAAA,CACF,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"namespaced.d.ts","sourceRoot":"","sources":["../../../lib/main/utils/namespaced.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,UAAU,CAAC,CAAC,IAAI;IAAE,UAAU,EAAE,CAAC,CAAA;CAAE,CAAC;AAE9C,eAAO,MAAM,SAAS,GAAI,CAAC,gDAE1B,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"namespaced.js","sourceRoot":"","sources":["../../../lib/main/utils/namespaced.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,SAAS,GAAG,CAAmB,MAAyB,EAAK,EAAE,CAAC;IAC5E,OAAO,YAAY,IAAI,MAAM,CAAC,CAAC,CAAE,MAAwB,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC;AAAA,CAC9E,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import type { XRPCBlobBodyParam, XRPCLexBodyParam } from '@atcute/lexicons/validations';
|
|
2
2
|
import type { Result } from '../../types/misc.js';
|
|
3
|
-
export declare const constructMimeValidator: (param: XRPCLexBodyParam |
|
|
3
|
+
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
4
|
//# 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;AAmBlD,eAAO,MAAM,sBAAsB,
|
|
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;AAmBlD,eAAO,MAAM,sBAAsB,yVAwBlC,CAAC"}
|
|
@@ -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;
|
|
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,6 +1,6 @@
|
|
|
1
1
|
import { type ObjectSchema, type ValidationResult } from '@atcute/lexicons/validations';
|
|
2
2
|
import type { Literal } from '../../types/misc.js';
|
|
3
3
|
type MaybeArray<T> = T | T[];
|
|
4
|
-
export declare const constructParamsHandler: <TSchema extends ObjectSchema
|
|
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 {};
|
|
6
6
|
//# sourceMappingURL=request-params.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"request-params.d.ts","sourceRoot":"","sources":["../../../lib/main/utils/request-params.ts"],"names":[],"mappings":"AAAA,OAAO,EAIN,KAAK,YAAY,EAEjB,KAAK,gBAAgB,EACrB,MAAM,8BAA8B,CAAC;AAEtC,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAEnD,KAAK,UAAU,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;AAiC7B,eAAO,MAAM,sBAAsB,GAAI,OAAO,
|
|
1
|
+
{"version":3,"file":"request-params.d.ts","sourceRoot":"","sources":["../../../lib/main/utils/request-params.ts"],"names":[],"mappings":"AAAA,OAAO,EAIN,KAAK,YAAY,EAEjB,KAAK,gBAAgB,EACrB,MAAM,8BAA8B,CAAC;AAEtC,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAEnD,KAAK,UAAU,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;AAiC7B,eAAO,MAAM,sBAAsB,GAAI,OAAO,4LAuD7C,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"request-params.js","sourceRoot":"","sources":["../../../lib/main/utils/request-params.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,SAAS,GAMT,MAAM,8BAA8B,CAAC;AAMtC,MAAM,aAAa,GAAG,CAAC,MAAkB,EAAyB,EAAE;
|
|
1
|
+
{"version":3,"file":"request-params.js","sourceRoot":"","sources":["../../../lib/main/utils/request-params.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import type { Err } from '@atcute/lexicons/validations';
|
|
2
2
|
export declare const invalidRequest: (message: string) => Response;
|
|
3
|
-
export declare const validationError: (kind: "
|
|
3
|
+
export declare const validationError: (kind: "input" | "params", err: Err) => Response;
|
|
4
4
|
//# sourceMappingURL=response.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"response.d.ts","sourceRoot":"","sources":["../../../lib/main/utils/response.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,8BAA8B,CAAC;AAExD,eAAO,MAAM,cAAc,
|
|
1
|
+
{"version":3,"file":"response.d.ts","sourceRoot":"","sources":["../../../lib/main/utils/response.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,8BAA8B,CAAC;AAExD,eAAO,MAAM,cAAc,+BAE1B,CAAC;AAEF,eAAO,MAAM,eAAe,kDAO3B,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"response.js","sourceRoot":"","sources":["../../../lib/main/utils/response.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,OAAe,EAAE,EAAE;
|
|
1
|
+
{"version":3,"file":"response.js","sourceRoot":"","sources":["../../../lib/main/utils/response.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,OAAe,EAAE,EAAE,CAAC;IAClD,OAAO,QAAQ,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,gBAAgB,EAAE,OAAO,EAAE,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;AAAA,CAC5E,CAAC;AAEF,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,IAAwB,EAAE,GAAQ,EAAY,EAAE,CAAC;IAChF,MAAM,OAAO,GAAG,WAAW,IAAI,KAAK,GAAG,CAAC,OAAO,EAAE,CAAC;IAElD,OAAO,QAAQ,CAAC,IAAI,CACnB,EAAE,KAAK,EAAE,gBAAgB,EAAE,OAAO,EAAE,OAAO,EAAE,2BAA2B,EAAE,GAAG,CAAC,MAAM,EAAE,EACtF,EAAE,MAAM,EAAE,GAAG,EAAE,CACf,CAAC;AAAA,CACF,CAAC"}
|
|
@@ -1 +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;
|
|
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,CASlC;IAED,MAAM,CAAC,MAAM,EAAE,UAAU,GAAG,gBAAgB,CAqE3C;CACD"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"websocket-mock.js","sourceRoot":"","sources":["../../../lib/main/utils/websocket-mock.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAKrD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAkBlD,MAAM,OAAO,oBAAoB;IAChC,QAAQ,GAAG,IAAI,iBAAiB,EAA2B,CAAC;IAE5D,OAAO,CACN,QAAiB,EACjB,OAAsD;
|
|
1
|
+
{"version":3,"file":"websocket-mock.js","sourceRoot":"","sources":["../../../lib/main/utils/websocket-mock.ts"],"names":[],"mappings":"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"}
|
|
@@ -17,7 +17,7 @@ export declare class InvalidRequestError extends XRPCError {
|
|
|
17
17
|
constructor({ status, error, description }?: Partial<XRPCErrorOptions>);
|
|
18
18
|
}
|
|
19
19
|
export declare class AuthRequiredError extends XRPCError {
|
|
20
|
-
constructor({ status, error, description
|
|
20
|
+
constructor({ status, error, description }?: Partial<XRPCErrorOptions>);
|
|
21
21
|
}
|
|
22
22
|
export declare class ForbiddenError extends XRPCError {
|
|
23
23
|
constructor({ status, error, description }?: Partial<XRPCErrorOptions>);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"xrpc-error.d.ts","sourceRoot":"","sources":["../../lib/main/xrpc-error.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,gBAAgB;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,qBAAa,SAAU,SAAQ,KAAK;IACnC,sBAAsB;IACtB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAExB,iBAAiB;IACjB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,oBAAoB;IACpB,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"xrpc-error.d.ts","sourceRoot":"","sources":["../../lib/main/xrpc-error.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,gBAAgB;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,qBAAa,SAAU,SAAQ,KAAK;IACnC,sBAAsB;IACtB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAExB,iBAAiB;IACjB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,oBAAoB;IACpB,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAE9B,YAAY,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,EAAE,gBAAgB,EAO3D;IAED,UAAU,IAAI,QAAQ,CAErB;CACD;AAED,qBAAa,mBAAoB,SAAQ,SAAS;IACjD,YAAY,EAAE,MAAY,EAAE,KAAwB,EAAE,WAAW,EAAE,GAAE,OAAO,CAAC,gBAAgB,CAAM,EAElG;CACD;AAED,qBAAa,iBAAkB,SAAQ,SAAS;IAC/C,YAAY,EACX,MAAY,EACZ,KAAgC,EAChC,WAAW,EACX,GAAE,OAAO,CAAC,gBAAgB,CAAM,EAEhC;CACD;AAED,qBAAa,cAAe,SAAQ,SAAS;IAC5C,YAAY,EAAE,MAAY,EAAE,KAAmB,EAAE,WAAW,EAAE,GAAE,OAAO,CAAC,gBAAgB,CAAM,EAE7F;CACD;AAED,qBAAa,sBAAuB,SAAQ,SAAS;IACpD,YAAY,EAAE,MAAY,EAAE,KAA2B,EAAE,WAAW,EAAE,GAAE,OAAO,CAAC,gBAAgB,CAAM,EAErG;CACD;AAED,qBAAa,mBAAoB,SAAQ,SAAS;IACjD,YAAY,EAAE,MAAY,EAAE,KAA6B,EAAE,WAAW,EAAE,GAAE,OAAO,CAAC,gBAAgB,CAAM,EAEvG;CACD;AAED,qBAAa,oBAAqB,SAAQ,SAAS;IAClD,YAAY,EAAE,MAAY,EAAE,KAAyB,EAAE,WAAW,EAAE,GAAE,OAAO,CAAC,gBAAgB,CAAM,EAEnG;CACD;AAED,qBAAa,uBAAwB,SAAQ,SAAS;IACrD,YAAY,EAAE,MAAY,EAAE,KAA4B,EAAE,WAAW,EAAE,GAAE,OAAO,CAAC,gBAAgB,CAAM,EAEtG;CACD;AAED,qBAAa,oBAAqB,SAAQ,SAAS;IAClD,YAAY,EAAE,MAAY,EAAE,KAAyB,EAAE,WAAW,EAAE,GAAE,OAAO,CAAC,gBAAgB,CAAM,EAEnG;CACD;AAED,MAAM,WAAW,4BAA4B;IAC5C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,qBAAa,qBAAsB,SAAQ,KAAK;IAC/C,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAE9B,YAAY,EAAE,SAAgB,EAAE,KAAK,EAAE,WAAW,EAAE,EAAE,4BAA4B,EAMjF;CACD"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"xrpc-error.js","sourceRoot":"","sources":["../../lib/main/xrpc-error.ts"],"names":[],"mappings":"AAMA,MAAM,OAAO,SAAU,SAAQ,KAAK;IACnC,sBAAsB;IACb,MAAM,CAAS;IAExB,iBAAiB;IACR,KAAK,CAAS;IACvB,oBAAoB;IACX,WAAW,CAAU;IAE9B,YAAY,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,EAAoB;
|
|
1
|
+
{"version":3,"file":"xrpc-error.js","sourceRoot":"","sources":["../../lib/main/xrpc-error.ts"],"names":[],"mappings":"AAMA,MAAM,OAAO,SAAU,SAAQ,KAAK;IACnC,sBAAsB;IACb,MAAM,CAAS;IAExB,iBAAiB;IACR,KAAK,CAAS;IACvB,oBAAoB;IACX,WAAW,CAAU;IAE9B,YAAY,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,EAAoB,EAAE;QAC7D,KAAK,CAAC,GAAG,KAAK,MAAM,WAAW,IAAI,2BAA2B,EAAE,CAAC,CAAC;QAElE,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QAErB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;IAAA,CAC/B;IAED,UAAU,GAAa;QACtB,OAAO,QAAQ,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC,WAAW,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;IAAA,CAChG;CACD;AAED,MAAM,OAAO,mBAAoB,SAAQ,SAAS;IACjD,YAAY,EAAE,MAAM,GAAG,GAAG,EAAE,KAAK,GAAG,gBAAgB,EAAE,WAAW,EAAE,GAA8B,EAAE,EAAE;QACpG,KAAK,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC,CAAC;IAAA,CACtC;CACD;AAED,MAAM,OAAO,iBAAkB,SAAQ,SAAS;IAC/C,YAAY,EACX,MAAM,GAAG,GAAG,EACZ,KAAK,GAAG,wBAAwB,EAChC,WAAW,GACX,GAA8B,EAAE,EAAE;QAClC,KAAK,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC,CAAC;IAAA,CACtC;CACD;AAED,MAAM,OAAO,cAAe,SAAQ,SAAS;IAC5C,YAAY,EAAE,MAAM,GAAG,GAAG,EAAE,KAAK,GAAG,WAAW,EAAE,WAAW,EAAE,GAA8B,EAAE,EAAE;QAC/F,KAAK,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC,CAAC;IAAA,CACtC;CACD;AAED,MAAM,OAAO,sBAAuB,SAAQ,SAAS;IACpD,YAAY,EAAE,MAAM,GAAG,GAAG,EAAE,KAAK,GAAG,mBAAmB,EAAE,WAAW,EAAE,GAA8B,EAAE,EAAE;QACvG,KAAK,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC,CAAC;IAAA,CACtC;CACD;AAED,MAAM,OAAO,mBAAoB,SAAQ,SAAS;IACjD,YAAY,EAAE,MAAM,GAAG,GAAG,EAAE,KAAK,GAAG,qBAAqB,EAAE,WAAW,EAAE,GAA8B,EAAE,EAAE;QACzG,KAAK,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC,CAAC;IAAA,CACtC;CACD;AAED,MAAM,OAAO,oBAAqB,SAAQ,SAAS;IAClD,YAAY,EAAE,MAAM,GAAG,GAAG,EAAE,KAAK,GAAG,iBAAiB,EAAE,WAAW,EAAE,GAA8B,EAAE,EAAE;QACrG,KAAK,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC,CAAC;IAAA,CACtC;CACD;AAED,MAAM,OAAO,uBAAwB,SAAQ,SAAS;IACrD,YAAY,EAAE,MAAM,GAAG,GAAG,EAAE,KAAK,GAAG,oBAAoB,EAAE,WAAW,EAAE,GAA8B,EAAE,EAAE;QACxG,KAAK,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC,CAAC;IAAA,CACtC;CACD;AAED,MAAM,OAAO,oBAAqB,SAAQ,SAAS;IAClD,YAAY,EAAE,MAAM,GAAG,GAAG,EAAE,KAAK,GAAG,iBAAiB,EAAE,WAAW,EAAE,GAA8B,EAAE,EAAE;QACrG,KAAK,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC,CAAC;IAAA,CACtC;CACD;AAQD,MAAM,OAAO,qBAAsB,SAAQ,KAAK;IACtC,SAAS,CAAS;IAClB,KAAK,CAAS;IACd,WAAW,CAAU;IAE9B,YAAY,EAAE,SAAS,GAAG,IAAI,EAAE,KAAK,EAAE,WAAW,EAAgC,EAAE;QACnF,KAAK,CAAC,uBAAuB,KAAK,GAAG,WAAW,CAAC,CAAC,CAAC,MAAM,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAE/E,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;IAAA,CAC/B;CACD"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { XRPCProcedureMetadata, XRPCQueryMetadata } from '@atcute/lexicons/validations';
|
|
2
|
+
import { type XRPCRouterOptions } from './router.js';
|
|
3
|
+
import type { ProcedureConfig, QueryConfig } from './types/operation.js';
|
|
4
|
+
import { type Namespaced } from './utils/namespaced.js';
|
|
5
|
+
type XrpcHandlerRouterOptions = Pick<XRPCRouterOptions, 'middlewares' | 'handleNotFound' | 'handleException'>;
|
|
6
|
+
export type XrpcQueryHandlerOptions<TQuery extends XRPCQueryMetadata> = {
|
|
7
|
+
lxm: TQuery | Namespaced<TQuery>;
|
|
8
|
+
routerOptions?: XrpcHandlerRouterOptions;
|
|
9
|
+
} & QueryConfig<TQuery>;
|
|
10
|
+
export type XrpcProcedureHandlerOptions<TProcedure extends XRPCProcedureMetadata> = {
|
|
11
|
+
lxm: TProcedure | Namespaced<TProcedure>;
|
|
12
|
+
routerOptions?: XrpcHandlerRouterOptions;
|
|
13
|
+
} & ProcedureConfig<TProcedure>;
|
|
14
|
+
export type XrpcHandlerOptions = XrpcQueryHandlerOptions<XRPCQueryMetadata> | XrpcProcedureHandlerOptions<XRPCProcedureMetadata>;
|
|
15
|
+
/**
|
|
16
|
+
* create a fetch handler for a single xrpc query or procedure.
|
|
17
|
+
* requests are expected at `/xrpc/<nsid>`.
|
|
18
|
+
* subscriptions are not supported.
|
|
19
|
+
*/
|
|
20
|
+
export declare function createXrpcHandler<TQuery extends XRPCQueryMetadata>(options: XrpcQueryHandlerOptions<TQuery>): (request: Request) => Promise<Response>;
|
|
21
|
+
export declare function createXrpcHandler<TProcedure extends XRPCProcedureMetadata>(options: XrpcProcedureHandlerOptions<TProcedure>): (request: Request) => Promise<Response>;
|
|
22
|
+
export {};
|
|
23
|
+
//# sourceMappingURL=xrpc-handler.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"xrpc-handler.d.ts","sourceRoot":"","sources":["../../lib/main/xrpc-handler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AAE7F,OAAO,EAAc,KAAK,iBAAiB,EAAE,MAAM,aAAa,CAAC;AACjE,OAAO,KAAK,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACzE,OAAO,EAAa,KAAK,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAEnE,KAAK,wBAAwB,GAAG,IAAI,CAAC,iBAAiB,EAAE,aAAa,GAAG,gBAAgB,GAAG,iBAAiB,CAAC,CAAC;AAE9G,MAAM,MAAM,uBAAuB,CAAC,MAAM,SAAS,iBAAiB,IAAI;IACvE,GAAG,EAAE,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC;IACjC,aAAa,CAAC,EAAE,wBAAwB,CAAC;CACzC,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC;AAExB,MAAM,MAAM,2BAA2B,CAAC,UAAU,SAAS,qBAAqB,IAC/E;IACC,GAAG,EAAE,UAAU,GAAG,UAAU,CAAC,UAAU,CAAC,CAAC;IACzC,aAAa,CAAC,EAAE,wBAAwB,CAAC;CACzC,GAAG,eAAe,CAAC,UAAU,CAAC,CAAC;AAEjC,MAAM,MAAM,kBAAkB,GAC3B,uBAAuB,CAAC,iBAAiB,CAAC,GAC1C,2BAA2B,CAAC,qBAAqB,CAAC,CAAC;AAEtD;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,SAAS,iBAAiB,EACjE,OAAO,EAAE,uBAAuB,CAAC,MAAM,CAAC,GACtC,CAAC,OAAO,EAAE,OAAO,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAC;AAC3C,wBAAgB,iBAAiB,CAAC,UAAU,SAAS,qBAAqB,EACzE,OAAO,EAAE,2BAA2B,CAAC,UAAU,CAAC,GAC9C,CAAC,OAAO,EAAE,OAAO,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { XRPCRouter } from './router.js';
|
|
2
|
+
import { unwrapLxm } from './utils/namespaced.js';
|
|
3
|
+
export function createXrpcHandler(options) {
|
|
4
|
+
const { lxm, handler, routerOptions } = options;
|
|
5
|
+
const router = new XRPCRouter(routerOptions);
|
|
6
|
+
const schema = unwrapLxm(lxm);
|
|
7
|
+
switch (schema.type) {
|
|
8
|
+
case 'xrpc_query': {
|
|
9
|
+
router.addQuery(schema, { handler: handler });
|
|
10
|
+
break;
|
|
11
|
+
}
|
|
12
|
+
case 'xrpc_procedure': {
|
|
13
|
+
router.addProcedure(schema, { handler: handler });
|
|
14
|
+
break;
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
return router.fetch;
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=xrpc-handler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"xrpc-handler.js","sourceRoot":"","sources":["../../lib/main/xrpc-handler.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAA0B,MAAM,aAAa,CAAC;AAEjE,OAAO,EAAE,SAAS,EAAmB,MAAM,uBAAuB,CAAC;AA8BnE,MAAM,UAAU,iBAAiB,CAAC,OAA2B,EAA2C;IACvG,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,aAAa,EAAE,GAAG,OAAO,CAAC;IAEhD,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,aAAa,CAAC,CAAC;IAE7C,MAAM,MAAM,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC;IAE9B,QAAQ,MAAM,CAAC,IAAI,EAAE,CAAC;QACrB,KAAK,YAAY,EAAE,CAAC;YACnB,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,EAAE,OAAO,EAAE,OAAoD,EAAE,CAAC,CAAC;YAC3F,MAAM;QACP,CAAC;QACD,KAAK,gBAAgB,EAAE,CAAC;YACvB,MAAM,CAAC,YAAY,CAAC,MAAM,EAAE,EAAE,OAAO,EAAE,OAA4D,EAAE,CAAC,CAAC;YACvG,MAAM;QACP,CAAC;IACF,CAAC;IAED,OAAO,MAAM,CAAC,KAAK,CAAC;AAAA,CACpB"}
|
|
@@ -4,6 +4,8 @@ export interface CORSOptions {
|
|
|
4
4
|
exposedHeaders?: string[];
|
|
5
5
|
/** Additional headers to allow */
|
|
6
6
|
allowedHeaders?: string[];
|
|
7
|
+
/** NSID prefixes to exclude from CORS handling */
|
|
8
|
+
exclude?: string[];
|
|
7
9
|
}
|
|
8
10
|
export declare const cors: (options?: CORSOptions) => FetchMiddleware;
|
|
9
11
|
//# sourceMappingURL=cors.d.ts.map
|
|
@@ -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;
|
|
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;CACnB;AAwBD,eAAO,MAAM,IAAI,4CA4DhB,CAAC"}
|
package/dist/middlewares/cors.js
CHANGED
|
@@ -13,12 +13,31 @@ const DEFAULT_ALLOWED_HEADERS = [
|
|
|
13
13
|
'atproto-accept-labelers',
|
|
14
14
|
'atproto-proxy',
|
|
15
15
|
];
|
|
16
|
+
const RE_XRPC_NSID = /^\/xrpc\/([^?]*)/;
|
|
16
17
|
export const cors = (options = {}) => {
|
|
17
18
|
const exposedHeaders = Array.from(new Set([...DEFAULT_EXPOSED_HEADERS, ...(options.exposedHeaders?.map((h) => h.toLowerCase()) || [])])).sort();
|
|
18
19
|
const allowedHeaders = Array.from(new Set([...DEFAULT_ALLOWED_HEADERS, ...(options.allowedHeaders?.map((h) => h.toLowerCase()) || [])]))
|
|
19
20
|
.sort()
|
|
20
21
|
.join(',');
|
|
22
|
+
const exclude = options.exclude;
|
|
21
23
|
return async (request, next) => {
|
|
24
|
+
// check if this NSID should be excluded from CORS handling
|
|
25
|
+
if (exclude) {
|
|
26
|
+
const url = new URL(request.url);
|
|
27
|
+
const match = RE_XRPC_NSID.exec(url.pathname);
|
|
28
|
+
if (match) {
|
|
29
|
+
const nsid = match[1];
|
|
30
|
+
const excluded = exclude.some((pattern) => {
|
|
31
|
+
if (pattern.endsWith('.*')) {
|
|
32
|
+
return nsid.startsWith(pattern.slice(0, -1));
|
|
33
|
+
}
|
|
34
|
+
return nsid === pattern;
|
|
35
|
+
});
|
|
36
|
+
if (excluded) {
|
|
37
|
+
return next(request);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
}
|
|
22
41
|
const origin = request.headers.get('origin') || '*';
|
|
23
42
|
// Handle preflight requests
|
|
24
43
|
if (request.method === 'OPTIONS') {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cors.js","sourceRoot":"","sources":["../../lib/middlewares/cors.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"cors.js","sourceRoot":"","sources":["../../lib/middlewares/cors.ts"],"names":[],"mappings":"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"}
|
package/lib/main/index.ts
CHANGED
package/lib/main/router.ts
CHANGED
|
@@ -17,6 +17,7 @@ import type {
|
|
|
17
17
|
import type { WebSocketAdapter } from './types/websocket.js';
|
|
18
18
|
import { encodeErrorFrame, encodeMessageFrame, extractMessageType, omitMessageType } from './utils/frames.js';
|
|
19
19
|
import { createAsyncMiddlewareRunner, type Middleware } from './utils/middlewares.js';
|
|
20
|
+
import { unwrapLxm, type Namespaced } from './utils/namespaced.js';
|
|
20
21
|
import { constructMimeValidator } from './utils/request-input.js';
|
|
21
22
|
import { constructParamsHandler } from './utils/request-params.js';
|
|
22
23
|
import { invalidRequest, validationError } from './utils/response.js';
|
|
@@ -131,31 +132,40 @@ export class XRPCRouter {
|
|
|
131
132
|
}
|
|
132
133
|
|
|
133
134
|
/** @deprecated use `addQuery` and `addProcedure` instead */
|
|
134
|
-
add<TQuery extends XRPCQueryMetadata>(query: TQuery
|
|
135
|
+
add<TQuery extends XRPCQueryMetadata>(query: TQuery | Namespaced<TQuery>, config: QueryConfig<TQuery>): void;
|
|
135
136
|
add<TProcedure extends XRPCProcedureMetadata>(
|
|
136
|
-
procedure: TProcedure
|
|
137
|
+
procedure: TProcedure | Namespaced<TProcedure>,
|
|
137
138
|
config: ProcedureConfig<TProcedure>,
|
|
138
139
|
): void;
|
|
139
|
-
add(
|
|
140
|
-
|
|
140
|
+
add(
|
|
141
|
+
operation:
|
|
142
|
+
| XRPCQueryMetadata
|
|
143
|
+
| XRPCProcedureMetadata
|
|
144
|
+
| Namespaced<XRPCQueryMetadata | XRPCProcedureMetadata>,
|
|
145
|
+
config: any,
|
|
146
|
+
): void {
|
|
147
|
+
const schema = unwrapLxm(operation);
|
|
148
|
+
|
|
149
|
+
switch (schema.type) {
|
|
141
150
|
case 'xrpc_query': {
|
|
142
|
-
return this.addQuery(
|
|
151
|
+
return this.addQuery(schema, config);
|
|
143
152
|
}
|
|
144
153
|
case 'xrpc_procedure': {
|
|
145
|
-
return this.addProcedure(
|
|
154
|
+
return this.addProcedure(schema, config);
|
|
146
155
|
}
|
|
147
156
|
}
|
|
148
157
|
}
|
|
149
158
|
|
|
150
159
|
addQuery<TQuery extends XRPCQueryMetadata, TConfig extends QueryConfig<TQuery>>(
|
|
151
|
-
query: TQuery
|
|
160
|
+
query: TQuery | Namespaced<TQuery>,
|
|
152
161
|
config: TConfig,
|
|
153
162
|
): void {
|
|
154
|
-
const
|
|
163
|
+
const querySchema = unwrapLxm(query);
|
|
164
|
+
const handleParams = querySchema.params ? constructParamsHandler(querySchema.params) : null;
|
|
155
165
|
|
|
156
166
|
const handler = config.handler;
|
|
157
167
|
|
|
158
|
-
this.#handlers[
|
|
168
|
+
this.#handlers[querySchema.nsid] = {
|
|
159
169
|
method: 'GET',
|
|
160
170
|
handler: async ({ request, url }) => {
|
|
161
171
|
let params: Record<string, Literal | Literal[]>;
|
|
@@ -188,18 +198,19 @@ export class XRPCRouter {
|
|
|
188
198
|
}
|
|
189
199
|
|
|
190
200
|
addProcedure<TProcedure extends XRPCProcedureMetadata, TConfig extends ProcedureConfig<TProcedure>>(
|
|
191
|
-
procedure: TProcedure
|
|
201
|
+
procedure: TProcedure | Namespaced<TProcedure>,
|
|
192
202
|
config: TConfig,
|
|
193
203
|
): void {
|
|
194
|
-
const
|
|
195
|
-
const
|
|
204
|
+
const procedureSchema = unwrapLxm(procedure);
|
|
205
|
+
const handleParams = procedureSchema.params ? constructParamsHandler(procedureSchema.params) : null;
|
|
206
|
+
const validateInputType = procedureSchema.input ? constructMimeValidator(procedureSchema.input) : null;
|
|
196
207
|
|
|
197
|
-
const requiresInput =
|
|
198
|
-
const inputSchema =
|
|
208
|
+
const requiresInput = procedureSchema.input !== null;
|
|
209
|
+
const inputSchema = procedureSchema.input?.type === 'lex' ? procedureSchema.input.schema : null;
|
|
199
210
|
|
|
200
211
|
const handler = config.handler;
|
|
201
212
|
|
|
202
|
-
this.#handlers[
|
|
213
|
+
this.#handlers[procedureSchema.nsid] = {
|
|
203
214
|
method: 'POST',
|
|
204
215
|
handler: async ({ request, url }) => {
|
|
205
216
|
let params: Record<string, Literal | Literal[]>;
|
|
@@ -232,7 +243,7 @@ export class XRPCRouter {
|
|
|
232
243
|
let raw: any;
|
|
233
244
|
try {
|
|
234
245
|
raw = await request.json();
|
|
235
|
-
} catch
|
|
246
|
+
} catch {
|
|
236
247
|
return invalidRequest(`invalid request body (failed to parse json)`);
|
|
237
248
|
}
|
|
238
249
|
|
|
@@ -269,15 +280,18 @@ export class XRPCRouter {
|
|
|
269
280
|
addSubscription<
|
|
270
281
|
TSubscription extends XRPCSubscriptionMetadata,
|
|
271
282
|
TConfig extends SubscriptionConfig<TSubscription>,
|
|
272
|
-
>(subscription: TSubscription
|
|
283
|
+
>(subscription: TSubscription | Namespaced<TSubscription>, config: TConfig): void {
|
|
273
284
|
const websocket = this.#websocket;
|
|
274
285
|
if (websocket === undefined) {
|
|
275
286
|
throw new Error(`WebSocket adapter not configured`);
|
|
276
287
|
}
|
|
277
288
|
|
|
278
|
-
const
|
|
289
|
+
const subscriptionSchema = unwrapLxm(subscription);
|
|
290
|
+
const nsid = subscriptionSchema.nsid;
|
|
279
291
|
|
|
280
|
-
const handleParams =
|
|
292
|
+
const handleParams = subscriptionSchema.params
|
|
293
|
+
? constructParamsHandler(subscriptionSchema.params)
|
|
294
|
+
: null;
|
|
281
295
|
const handler = config.handler;
|
|
282
296
|
|
|
283
297
|
this.#handlers[nsid] = {
|
package/lib/main/utils/frames.ts
CHANGED
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import type { XRPCProcedureMetadata, XRPCQueryMetadata } from '@atcute/lexicons/validations';
|
|
2
|
+
|
|
3
|
+
import { XRPCRouter, type XRPCRouterOptions } from './router.js';
|
|
4
|
+
import type { ProcedureConfig, QueryConfig } from './types/operation.js';
|
|
5
|
+
import { unwrapLxm, type Namespaced } from './utils/namespaced.js';
|
|
6
|
+
|
|
7
|
+
type XrpcHandlerRouterOptions = Pick<XRPCRouterOptions, 'middlewares' | 'handleNotFound' | 'handleException'>;
|
|
8
|
+
|
|
9
|
+
export type XrpcQueryHandlerOptions<TQuery extends XRPCQueryMetadata> = {
|
|
10
|
+
lxm: TQuery | Namespaced<TQuery>;
|
|
11
|
+
routerOptions?: XrpcHandlerRouterOptions;
|
|
12
|
+
} & QueryConfig<TQuery>;
|
|
13
|
+
|
|
14
|
+
export type XrpcProcedureHandlerOptions<TProcedure extends XRPCProcedureMetadata> =
|
|
15
|
+
{
|
|
16
|
+
lxm: TProcedure | Namespaced<TProcedure>;
|
|
17
|
+
routerOptions?: XrpcHandlerRouterOptions;
|
|
18
|
+
} & ProcedureConfig<TProcedure>;
|
|
19
|
+
|
|
20
|
+
export type XrpcHandlerOptions =
|
|
21
|
+
| XrpcQueryHandlerOptions<XRPCQueryMetadata>
|
|
22
|
+
| XrpcProcedureHandlerOptions<XRPCProcedureMetadata>;
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* create a fetch handler for a single xrpc query or procedure.
|
|
26
|
+
* requests are expected at `/xrpc/<nsid>`.
|
|
27
|
+
* subscriptions are not supported.
|
|
28
|
+
*/
|
|
29
|
+
export function createXrpcHandler<TQuery extends XRPCQueryMetadata>(
|
|
30
|
+
options: XrpcQueryHandlerOptions<TQuery>,
|
|
31
|
+
): (request: Request) => Promise<Response>;
|
|
32
|
+
export function createXrpcHandler<TProcedure extends XRPCProcedureMetadata>(
|
|
33
|
+
options: XrpcProcedureHandlerOptions<TProcedure>,
|
|
34
|
+
): (request: Request) => Promise<Response>;
|
|
35
|
+
export function createXrpcHandler(options: XrpcHandlerOptions): (request: Request) => Promise<Response> {
|
|
36
|
+
const { lxm, handler, routerOptions } = options;
|
|
37
|
+
|
|
38
|
+
const router = new XRPCRouter(routerOptions);
|
|
39
|
+
|
|
40
|
+
const schema = unwrapLxm(lxm);
|
|
41
|
+
|
|
42
|
+
switch (schema.type) {
|
|
43
|
+
case 'xrpc_query': {
|
|
44
|
+
router.addQuery(schema, { handler: handler as QueryConfig<XRPCQueryMetadata>['handler'] });
|
|
45
|
+
break;
|
|
46
|
+
}
|
|
47
|
+
case 'xrpc_procedure': {
|
|
48
|
+
router.addProcedure(schema, { handler: handler as ProcedureConfig<XRPCProcedureMetadata>['handler'] });
|
|
49
|
+
break;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
return router.fetch;
|
|
54
|
+
}
|
package/lib/middlewares/cors.ts
CHANGED
|
@@ -5,6 +5,8 @@ export interface CORSOptions {
|
|
|
5
5
|
exposedHeaders?: string[];
|
|
6
6
|
/** Additional headers to allow */
|
|
7
7
|
allowedHeaders?: string[];
|
|
8
|
+
/** NSID prefixes to exclude from CORS handling */
|
|
9
|
+
exclude?: string[];
|
|
8
10
|
}
|
|
9
11
|
|
|
10
12
|
const DEFAULT_EXPOSED_HEADERS = [
|
|
@@ -27,6 +29,8 @@ const DEFAULT_ALLOWED_HEADERS = [
|
|
|
27
29
|
'atproto-proxy',
|
|
28
30
|
];
|
|
29
31
|
|
|
32
|
+
const RE_XRPC_NSID = /^\/xrpc\/([^?]*)/;
|
|
33
|
+
|
|
30
34
|
export const cors = (options: CORSOptions = {}): FetchMiddleware => {
|
|
31
35
|
const exposedHeaders = Array.from(
|
|
32
36
|
new Set([...DEFAULT_EXPOSED_HEADERS, ...(options.exposedHeaders?.map((h) => h.toLowerCase()) || [])]),
|
|
@@ -38,7 +42,29 @@ export const cors = (options: CORSOptions = {}): FetchMiddleware => {
|
|
|
38
42
|
.sort()
|
|
39
43
|
.join(',');
|
|
40
44
|
|
|
45
|
+
const exclude = options.exclude;
|
|
46
|
+
|
|
41
47
|
return async (request, next) => {
|
|
48
|
+
// check if this NSID should be excluded from CORS handling
|
|
49
|
+
if (exclude) {
|
|
50
|
+
const url = new URL(request.url);
|
|
51
|
+
const match = RE_XRPC_NSID.exec(url.pathname);
|
|
52
|
+
|
|
53
|
+
if (match) {
|
|
54
|
+
const nsid = match[1];
|
|
55
|
+
const excluded = exclude.some((pattern) => {
|
|
56
|
+
if (pattern.endsWith('.*')) {
|
|
57
|
+
return nsid.startsWith(pattern.slice(0, -1));
|
|
58
|
+
}
|
|
59
|
+
return nsid === pattern;
|
|
60
|
+
});
|
|
61
|
+
|
|
62
|
+
if (excluded) {
|
|
63
|
+
return next(request);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
|
|
42
68
|
const origin = request.headers.get('origin') || '*';
|
|
43
69
|
|
|
44
70
|
// Handle preflight requests
|
package/package.json
CHANGED
|
@@ -1,13 +1,16 @@
|
|
|
1
1
|
{
|
|
2
2
|
"type": "module",
|
|
3
3
|
"name": "@atcute/xrpc-server",
|
|
4
|
-
"version": "0.1.
|
|
4
|
+
"version": "0.1.5",
|
|
5
5
|
"description": "a small web framework for handling XRPC operations",
|
|
6
6
|
"license": "0BSD",
|
|
7
7
|
"repository": {
|
|
8
8
|
"url": "https://github.com/mary-ext/atcute",
|
|
9
9
|
"directory": "packages/servers/xrpc-server"
|
|
10
10
|
},
|
|
11
|
+
"publishConfig": {
|
|
12
|
+
"access": "public"
|
|
13
|
+
},
|
|
11
14
|
"files": [
|
|
12
15
|
"dist/",
|
|
13
16
|
"lib/",
|
|
@@ -21,25 +24,25 @@
|
|
|
21
24
|
},
|
|
22
25
|
"dependencies": {
|
|
23
26
|
"@badrap/valita": "^0.4.6",
|
|
24
|
-
"nanoid": "^5.1.
|
|
25
|
-
"@atcute/cbor": "^2.2.
|
|
26
|
-
"@atcute/
|
|
27
|
-
"@atcute/
|
|
28
|
-
"@atcute/identity": "^1.
|
|
29
|
-
"@atcute/lexicons": "^1.2.
|
|
30
|
-
"@atcute/
|
|
31
|
-
"@atcute/
|
|
27
|
+
"nanoid": "^5.1.6",
|
|
28
|
+
"@atcute/cbor": "^2.2.8",
|
|
29
|
+
"@atcute/crypto": "^2.3.0",
|
|
30
|
+
"@atcute/identity": "^1.1.3",
|
|
31
|
+
"@atcute/identity-resolver": "^1.2.1",
|
|
32
|
+
"@atcute/lexicons": "^1.2.5",
|
|
33
|
+
"@atcute/uint8array": "^1.0.6",
|
|
34
|
+
"@atcute/multibase": "^1.1.6"
|
|
32
35
|
},
|
|
33
36
|
"devDependencies": {
|
|
34
37
|
"@atcute/xrpc-server": "file:",
|
|
35
|
-
"@types/node": "^
|
|
36
|
-
"@vitest/coverage-v8": "^
|
|
37
|
-
"vitest": "^
|
|
38
|
-
"@atcute/
|
|
39
|
-
"@atcute/
|
|
38
|
+
"@types/node": "^22.19.3",
|
|
39
|
+
"@vitest/coverage-v8": "^4.0.16",
|
|
40
|
+
"vitest": "^4.0.16",
|
|
41
|
+
"@atcute/atproto": "^3.1.9",
|
|
42
|
+
"@atcute/bluesky": "^3.2.14"
|
|
40
43
|
},
|
|
41
44
|
"scripts": {
|
|
42
|
-
"build": "
|
|
45
|
+
"build": "tsgo --project tsconfig.build.json",
|
|
43
46
|
"test": "vitest --coverage",
|
|
44
47
|
"prepublish": "rm -rf dist; pnpm run build"
|
|
45
48
|
}
|