@better-agnostic/handler-fastify 0.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +11 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +81 -0
- package/dist/index.js.map +1 -0
- package/package.json +39 -0
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { type DispatchableEngine } from "@better-agnostic/handler";
|
|
2
|
+
import type { FastifyInstance, FastifyRequest } from "fastify";
|
|
3
|
+
export interface FastifyHandlerOptions<TEngine, TAuth = unknown> {
|
|
4
|
+
basePath?: string;
|
|
5
|
+
getAuthContext?: (req: FastifyRequest) => Promise<TAuth | null> | TAuth | null;
|
|
6
|
+
requireAuth?: boolean;
|
|
7
|
+
}
|
|
8
|
+
export declare function createFastifyHandler<TEngine extends DispatchableEngine, TAuth = unknown>(engine: TEngine, options?: FastifyHandlerOptions<TEngine, TAuth>): (fastify: FastifyInstance, opts: {
|
|
9
|
+
prefix?: string;
|
|
10
|
+
}) => Promise<void>;
|
|
11
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,kBAAkB,EAIxB,MAAM,0BAA0B,CAAC;AAClC,OAAO,KAAK,EAAE,eAAe,EAAgB,cAAc,EAAE,MAAM,SAAS,CAAC;AAE7E,MAAM,WAAW,qBAAqB,CAAC,OAAO,EAAE,KAAK,GAAG,OAAO;IAC7D,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,cAAc,CAAC,EAAE,CAAC,GAAG,EAAE,cAAc,KAAK,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC;IAC/E,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAyED,wBAAgB,oBAAoB,CAAC,OAAO,SAAS,kBAAkB,EAAE,KAAK,GAAG,OAAO,EACtF,MAAM,EAAE,OAAO,EACf,OAAO,CAAC,EAAE,qBAAqB,CAAC,OAAO,EAAE,KAAK,CAAC,IAK7C,SAAS,eAAe,EACxB,MAAM;IAAE,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,KACxB,OAAO,CAAC,IAAI,CAAC,CAuBjB"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import { dispatch, parseJsonBody, queryToRecord, } from "@better-agnostic/handler";
|
|
2
|
+
function getPath(req) {
|
|
3
|
+
const url = req.url;
|
|
4
|
+
return url.includes("?") ? url.slice(0, url.indexOf("?")) : url;
|
|
5
|
+
}
|
|
6
|
+
async function toCoreRequest(req, options) {
|
|
7
|
+
const path = getPath(req);
|
|
8
|
+
const query = queryToRecord(req.query);
|
|
9
|
+
let body = null;
|
|
10
|
+
if (req.method === "POST" || req.method === "PATCH") {
|
|
11
|
+
body =
|
|
12
|
+
typeof req.body === "object" && req.body !== null
|
|
13
|
+
? req.body
|
|
14
|
+
: parseJsonBody(req.body != null ? String(req.body) : null);
|
|
15
|
+
}
|
|
16
|
+
const coreReq = {
|
|
17
|
+
method: req.method ?? "GET",
|
|
18
|
+
path,
|
|
19
|
+
params: {},
|
|
20
|
+
query,
|
|
21
|
+
body,
|
|
22
|
+
};
|
|
23
|
+
if (options?.getAuthContext) {
|
|
24
|
+
const auth = await Promise.resolve(options.getAuthContext(req));
|
|
25
|
+
if (auth != null) {
|
|
26
|
+
coreReq.auth = auth;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
return coreReq;
|
|
30
|
+
}
|
|
31
|
+
async function sendResponse(reply, status, body, options) {
|
|
32
|
+
if (options?.stream) {
|
|
33
|
+
if (options.headers) {
|
|
34
|
+
for (const [k, v] of Object.entries(options.headers)) {
|
|
35
|
+
reply.raw.setHeader(k, v);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
reply.raw.writeHead(status);
|
|
39
|
+
const reader = options.stream.getReader();
|
|
40
|
+
const pump = () => reader.read().then(({ done, value }) => {
|
|
41
|
+
if (done) {
|
|
42
|
+
reply.raw.end();
|
|
43
|
+
return Promise.resolve();
|
|
44
|
+
}
|
|
45
|
+
reply.raw.write(Buffer.from(value));
|
|
46
|
+
return pump();
|
|
47
|
+
});
|
|
48
|
+
await pump();
|
|
49
|
+
return;
|
|
50
|
+
}
|
|
51
|
+
if (status === 204) {
|
|
52
|
+
reply.status(204).send();
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
55
|
+
reply.status(status).send(body ?? null);
|
|
56
|
+
}
|
|
57
|
+
export function createFastifyHandler(engine, options) {
|
|
58
|
+
const basePathFromOptions = options?.basePath ?? "";
|
|
59
|
+
return async function fastifyPlugin(fastify, opts) {
|
|
60
|
+
const basePath = basePathFromOptions || opts?.prefix || "";
|
|
61
|
+
const handlerOptions = options ?? {};
|
|
62
|
+
const handler = async (req, reply) => {
|
|
63
|
+
const coreReq = await toCoreRequest(req, handlerOptions);
|
|
64
|
+
if (handlerOptions.requireAuth && handlerOptions.getAuthContext && coreReq.auth == null) {
|
|
65
|
+
await reply.status(401).send();
|
|
66
|
+
return;
|
|
67
|
+
}
|
|
68
|
+
const coreRes = await dispatch(engine, coreReq, basePath);
|
|
69
|
+
await sendResponse(reply, coreRes.status, coreRes.body, {
|
|
70
|
+
stream: coreRes.stream,
|
|
71
|
+
headers: coreRes.headers,
|
|
72
|
+
});
|
|
73
|
+
};
|
|
74
|
+
fastify.route({
|
|
75
|
+
method: ["GET", "POST", "PUT", "PATCH", "DELETE", "OPTIONS", "HEAD"],
|
|
76
|
+
url: "/*",
|
|
77
|
+
handler,
|
|
78
|
+
});
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@better-agnostic/handler-fastify",
|
|
3
|
+
"version": "0.0.2",
|
|
4
|
+
"description": "Fastify handler for better-agnostic libraries",
|
|
5
|
+
"license": "MIT",
|
|
6
|
+
"repository": {
|
|
7
|
+
"type": "git",
|
|
8
|
+
"url": "https://github.com/elydelva/better-agnostic",
|
|
9
|
+
"directory": "packages/handler-fastify"
|
|
10
|
+
},
|
|
11
|
+
"keywords": ["fastify", "handler", "better-agnostic"],
|
|
12
|
+
"publishConfig": {
|
|
13
|
+
"access": "public"
|
|
14
|
+
},
|
|
15
|
+
"type": "module",
|
|
16
|
+
"main": "./dist/index.js",
|
|
17
|
+
"types": "./dist/index.d.ts",
|
|
18
|
+
"exports": {
|
|
19
|
+
".": {
|
|
20
|
+
"types": "./dist/index.d.ts",
|
|
21
|
+
"import": "./dist/index.js",
|
|
22
|
+
"default": "./dist/index.js"
|
|
23
|
+
}
|
|
24
|
+
},
|
|
25
|
+
"scripts": {
|
|
26
|
+
"build": "tsc"
|
|
27
|
+
},
|
|
28
|
+
"dependencies": {
|
|
29
|
+
"@better-agnostic/handler": "workspace:*"
|
|
30
|
+
},
|
|
31
|
+
"peerDependencies": {
|
|
32
|
+
"fastify": ">=4.0.0"
|
|
33
|
+
},
|
|
34
|
+
"devDependencies": {
|
|
35
|
+
"fastify": "^5.1.0",
|
|
36
|
+
"typescript": "^5.7.0"
|
|
37
|
+
},
|
|
38
|
+
"files": ["dist"]
|
|
39
|
+
}
|