3.5.0 • Published 11 months ago

@okkema/worker v3.5.0

Weekly downloads
-
License
MIT
Repository
github
Last release
11 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

3.4.1

11 months ago

3.5.0

11 months ago

3.3.9

1 year ago

3.3.8

1 year ago

3.3.7

1 year ago

3.3.6

1 year ago

3.4.0

12 months ago

3.3.10

1 year ago

3.3.5

1 year ago

3.3.1

1 year ago

3.3.0

1 year ago

3.3.4

1 year ago

3.3.3

1 year ago

3.3.2

1 year ago

3.2.2

1 year ago

3.2.1

1 year ago

3.2.0

1 year ago

3.0.3

1 year ago

3.1.0

1 year ago

2.1.2

1 year ago

2.1.1

1 year ago

2.1.0

1 year ago

3.0.2

1 year ago

3.0.1

1 year ago

3.0.0

1 year ago

2.0.1

1 year ago

2.0.0

2 years ago

1.9.0

2 years ago

1.8.0

2 years ago

1.7.0

2 years ago

1.6.1

2 years ago

1.2.4

2 years ago

1.5.0

2 years ago

1.4.1-0

2 years ago

0.0.15-0

2 years ago

0.0.15-1

2 years ago

0.0.10

4 years ago

0.0.11

4 years ago

0.0.12

4 years ago

0.0.13

4 years ago

0.0.14

4 years ago

0.0.9

4 years ago

0.0.8

4 years ago

0.0.7

4 years ago

0.0.3

4 years ago

0.0.2

4 years ago

0.0.5

4 years ago

0.0.4

4 years ago

0.0.6

4 years ago

1.2.0

4 years ago

1.4.0

4 years ago

1.1.1

4 years ago

1.1.9

4 years ago

1.1.8

4 years ago

1.1.7

4 years ago

1.1.6

4 years ago

1.1.5

4 years ago

1.1.4

4 years ago

1.1.3

4 years ago

1.3.0

4 years ago

1.1.2

4 years ago

1.1.12

4 years ago

1.1.11

4 years ago

1.1.10

4 years ago

1.1.16

4 years ago

1.1.15

4 years ago

1.1.14

4 years ago

1.1.13

4 years ago

1.1.19

4 years ago

1.1.18

4 years ago

1.1.17

4 years ago

1.1.22

4 years ago

1.1.21

4 years ago

1.1.20

4 years ago

1.0.19

4 years ago

1.1.0

4 years ago

1.0.18

4 years ago

1.0.17

4 years ago

1.0.16

4 years ago

1.0.22

4 years ago

1.0.21

4 years ago

1.0.20

4 years ago

1.0.9

4 years ago

1.0.8

4 years ago

1.0.11

4 years ago

1.0.10

4 years ago

1.0.15

4 years ago

1.0.14

4 years ago

1.0.13

4 years ago

1.0.12

4 years ago

1.0.7

4 years ago

1.0.6

4 years ago

1.0.5

4 years ago

1.0.4

4 years ago

1.0.3

4 years ago

1.0.2

4 years ago

1.0.1

2 years ago

1.0.0

2 years ago