Skip to content

Commit

Permalink
feat: add Cloudflare Workers module and hono adapters (#360)
Browse files Browse the repository at this point in the history
  • Loading branch information
KnorpelSenf authored Feb 3, 2023
1 parent ae14017 commit 01adad1
Show file tree
Hide file tree
Showing 2 changed files with 64 additions and 2 deletions.
2 changes: 2 additions & 0 deletions src/convenience/frameworks.shared.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
// deno-lint-ignore-file no-explicit-any
import { adapters as webAdapters } from "./frameworks.web.ts";

export const SECRET_HEADER = "X-Telegram-Bot-Api-Secret-Token";

Expand Down Expand Up @@ -96,4 +97,5 @@ export const adapters = {
fastify,
"std/http": stdHttp,
oak,
hono: webAdapters.hono,
};
64 changes: 62 additions & 2 deletions src/convenience/frameworks.web.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
// deno-lint-ignore-file no-explicit-any
import { SECRET_HEADER } from "./frameworks.shared.ts";

/** Native CloudFlare workers */
/** Native CloudFlare workers (service worker) */
const cloudflare = (
event: { request: Request; respondWith: (res: Promise<Response>) => void },
) => {
Expand Down Expand Up @@ -34,6 +34,61 @@ const cloudflare = (
};
};

/** Native CloudFlare workers (module worker) */
const cloudflareModule = (
request: Request,
) => {
let resolveResponse: (res: Response) => void;
return {
update: request.json(),
header: request.headers.get(SECRET_HEADER) || undefined,
end: () => {
resolveResponse(new Response(null, { status: 200 }));
},
respond: (json: string) => {
const res = new Response(json, {
status: 200,
headers: { "Content-Type": "application/json" },
});
resolveResponse(res);
},
unauthorized: () => {
const res = new Response('"unauthorized"', {
status: 401,
statusText: "secret token is wrong",
});
resolveResponse(res);
},
handlerReturn: new Promise<Response>((resolve) => {
resolveResponse = resolve;
}),
};
};

/** hono web framework */
const hono = (ctx: any) => {
let resolveResponse: (res: Response) => void;
return {
update: ctx.req.json(),
header: ctx.req.headers.get(SECRET_HEADER) || undefined,
end: () => {
resolveResponse(ctx.body());
},
respond: (json: string) => {
ctx.header('Content-Type", "application/json');
resolveResponse(ctx.body(json));
},
unauthorized: () => {
ctx.status(401);
ctx.statusText("secret token is wrong");
resolveResponse(ctx.body());
},
handlerReturn: new Promise<Response>((resolve) => {
resolveResponse = resolve;
}),
};
};

/** worktop CloudFlare workers framework */
const worktop = (req: any, res: any) => ({
update: Promise.resolve(req.body.json()),
Expand All @@ -43,4 +98,9 @@ const worktop = (req: any, res: any) => ({
unauthorized: () => res.send(401, "secret token is wrong"),
});

export const adapters = { cloudflare, worktop };
export const adapters = {
cloudflare,
"cloudflare-mod": cloudflareModule,
hono,
worktop,
};

0 comments on commit 01adad1

Please sign in to comment.