0.2.1 • Published 1 year ago

@machikado-network/kuiper v0.2.1

Weekly downloads
-
License
MIT
Repository
github
Last release
1 year ago

kuiper

GitHub npm npm type definitions

Kuiper is a HTTP Client that is Cloudflare Workers fetch function's wrapper.

import kuiper from "@machikado-network/kuiper";

export default {
    async fetch(request: Request) {
        const response = await kuiper.post("https://httpbin.org/post", {key: "value"})
        return new Response(response.body, response)
    }
}

Installing

$ npm install @machikado-network/kuiper

Features

  • JSON Wrapper - automatic JSON transforms
  • Fetcher support - Service Bindings support

ToDo

  • Request Builder
  • Cache Control
  • Full Method Support

Example

import kuiper from "@machikado-network/kuiper";

export default {
    async fetch(request: Request) {
        const response = await kuiper.post("https://httpbin.org/post", {key: "value"})
        return new Response(response.body, response)
    }
}

You can use Fetcher from Service Bindings:

import kuiper from "@machikado-network/kuiper";

interface Env {
    api: Fetcher
}

export default {
    async fetch(request: Request, env: Env) {
        const response = await kuiper(env.api).post("https://httpbin.org/post", {key: "value"})
        return new Response(response.body, response)
    }
}

Provider

Kuiper Provider is a type-based API wrapper for Cloudflare Workers.

Its feature is:

  • Compile-time checking for endpoints type definitions.
  • Supports Service Bindings.

First, define API routes and argument types:

enum ApiRoutes {
    testGet = "/get",
    testPost = "/post",
}

type ApiTasks =
    Task<ApiRoutes.testGet, null> |
    Task<ApiRoutes.testPost, {key: string}>

Second, improve service class.

class ApiService extends Service<ApiRoutes, ApiTasks> {
    baseUrl = "https://httpbin.org"

    constructor(fetcher?: Fetcher) {
        // You can set Service Bindings fetcher in constructor
        super(fetcher)
    }

    headers(_route: ApiRoutes): [string, string][] {
        return [["Content-Type", "application/json"]]
    }

    methods(route: ApiRoutes): Method {
        switch (route) {
            case ApiRoutes.testGet:
                return "GET"
            case ApiRoutes.testPost:
                return "POST"
        }
    }

    tasks([route, data]: ApiTasks): Parameters {
        switch (route) {
            case ApiRoutes.testGet:
                return {}
            case ApiRoutes.testPost:
                return {body: data}
        }
    }
}

You can use async function if you want in headers, methods, tasks.

Third, create Provider instance and request with route and task:

const provider = new Provider<ApiRoutes, ApiTasks>(new ApiService())
const response = await provider.request([ApiRoutes.testGet, null])
0.2.1

1 year ago

0.2.0

1 year ago

0.1.9

1 year ago

0.1.8

1 year ago

0.1.7

1 year ago

0.1.6

1 year ago

0.1.5

1 year ago

0.1.4

1 year ago

0.1.3

1 year ago

0.1.2

1 year ago

0.1.1

1 year ago