3.5.0 • Published 8 months ago

@okkema/worker v3.5.0

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

8 months ago

3.5.0

8 months ago

3.3.9

9 months ago

3.3.8

9 months ago

3.3.7

9 months ago

3.3.6

9 months ago

3.4.0

9 months ago

3.3.10

9 months ago

3.3.5

9 months ago

3.3.1

10 months ago

3.3.0

10 months ago

3.3.4

10 months ago

3.3.3

10 months ago

3.3.2

10 months ago

3.2.2

10 months ago

3.2.1

10 months ago

3.2.0

10 months ago

3.0.3

10 months ago

3.1.0

10 months ago

2.1.2

10 months ago

2.1.1

10 months ago

2.1.0

10 months ago

3.0.2

10 months ago

3.0.1

10 months ago

3.0.0

10 months ago

2.0.1

10 months ago

2.0.0

1 year ago

1.9.0

1 year 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

3 years ago

0.0.11

3 years ago

0.0.12

3 years ago

0.0.13

3 years ago

0.0.14

3 years ago

0.0.9

3 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