2.0.0 • Published 2 months ago

@okkema/worker v2.0.0

Weekly downloads
-
License
MIT
Repository
github
Last release
2 months ago

worker

Cloudflare Worker Web Framework

Version Status Issues License Size

Intro

A simple web framework for Cloudflare Workers.

This package is organized into sub modules:

  • core - core functionality exported at root
  • sentry - logger for Sentry
  • sendgrid - emailer for SendGrid
  • stripe - webhook for Stripe and limited API client (WIP)

Heavily ripped from inspired by: ^1

^1: MIT FTW

Usage

Check out the example for more details.

Worker

import Worker from "@okkema/worker"     // import like this
import { Worker } from "@okkema/worker" // or like this

const fetch = async (event: FetchEvent) => {
  const { request } = event

  // handle the request or event....

  return new Response("handled!")
}

Worker({ fetch })

Router

import { Router, Worker } from "@okkema/worker"

const router = Router({
  base: "/api", // this is optional
})

// add routes like this
router.use({
  method: "GET",
  path: "/cats",
  handler: [async (request: Request) => new Response("cats!")],
})

// or use a shortcut
router.get("/dogs", async (request) => new Response("dogs!"))

Worker({
  fetch: (event) => router.handle(event.request),
})

Problem Details

import { Problem, Worker } from "@okkema/worker"

Worker({
  fetch: (event) => {
    // returns a Problem Details response
    throw new Problem({
      title: "Check out the RFC for more details",
      detail: "https://datatracker.ietf.org/doc/html/rfc7807",
      status: 500,
    })
  }
})

CORS

import { Worker } from "@okkema/worker"
import type { CORS } from "@okkema/worker"

const cors: CORS = {
  origin: "https://domain.tld", // Access-Control-Allow-Origin
  methods: ["GET", "POST"],     // Access-Control-Allow-Methods
  headers: ["X-Custom-Header"], // Access-Control-Allow-Headers
}

Worker({
  fetch: (event) => new Response("CORS configured response!"),
  cors,
})

Sentry Logger

import { Worker } from "@okkema/worker"
import { Logger } from "@okkema/worker/sentry"

const DSN = "YOUR_SENTRY_DSN" // https://docs.sentry.io/product/sentry-basics/dsn-explainer/

const logger = Logger({ DSN })

// automatically logs any errors
Worker({
  fetch: (event) => { throw new Error("Whoops...") },
  logger,
})

You can also implement your own loggers!

import type { Logger } from "@okkema/worker" // import the type for code completion

const mySuperLogger: Logger = {
  log: async (event: FetchEvent, error: Error) => {
    
    // log your error wherever...
    
    // return a boolean indicating success
    return true
  }
}

Worker({
  fetch: (event) => { throw new Error("Not again...") },
  logger: mySuperLogger,
})

Contributing

PRs are welcome. Issues are also welcome, just don't be a dick.

WIP

2.0.0

2 months ago

1.9.0

2 months ago

1.8.0

7 months ago

1.7.0

9 months ago

1.6.1

9 months ago

1.2.4

9 months ago

1.5.0

9 months ago

1.4.1-0

9 months ago

0.0.15-0

9 months ago

0.0.15-1

9 months ago

0.0.10

2 years ago

0.0.11

2 years ago

0.0.12

2 years ago

0.0.13

2 years ago

0.0.14

2 years ago

0.0.9

2 years ago

0.0.8

2 years ago

0.0.7

2 years ago

0.0.3

2 years ago

0.0.2

2 years ago

0.0.5

2 years ago

0.0.4

2 years ago

0.0.6

2 years ago

1.2.0

3 years ago

1.4.0

3 years ago

1.1.1

3 years ago

1.1.9

3 years ago

1.1.8

3 years ago

1.1.7

3 years ago

1.1.6

3 years ago

1.1.5

3 years ago

1.1.4

3 years ago

1.1.3

3 years ago

1.3.0

3 years ago

1.1.2

3 years ago

1.1.12

3 years ago

1.1.11

3 years ago

1.1.10

3 years ago

1.1.16

3 years ago

1.1.15

3 years ago

1.1.14

3 years ago

1.1.13

3 years ago

1.1.19

3 years ago

1.1.18

3 years ago

1.1.17

3 years ago

1.1.22

3 years ago

1.1.21

3 years ago

1.1.20

3 years ago

1.0.19

3 years ago

1.1.0

3 years ago

1.0.18

3 years ago

1.0.17

3 years ago

1.0.16

3 years ago

1.0.22

3 years ago

1.0.21

3 years ago

1.0.20

3 years ago

1.0.9

3 years ago

1.0.8

3 years ago

1.0.11

3 years ago

1.0.10

3 years ago

1.0.15

3 years ago

1.0.14

3 years ago

1.0.13

3 years ago

1.0.12

3 years ago

1.0.7

3 years ago

1.0.6

3 years ago

1.0.5

3 years ago

1.0.4

3 years ago

1.0.3

3 years ago

1.0.2

3 years ago

1.0.1

9 months ago

1.0.0

9 months ago