JSPM

  • ESM via JSPM
  • ES Module Entrypoint
  • Export Map
  • Keywords
  • License
  • Repository URL
  • TypeScript Types
  • README
  • Created
  • Published
  • Downloads 1650
  • Score
    100M100P100Q126940F
  • License MIT

Enables easier interfacing with GCS OAuth API for use in Cloudflare Workers

Package Exports

  • cloudflare-workers-and-google-oauth
  • cloudflare-workers-and-google-oauth/dist/index.js

This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (cloudflare-workers-and-google-oauth) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.

Readme

Google OAuth & Cloudflare Workers

Background

This is a simple JS module used to facilitate OAuth2 flow from within a Cloudflare Worker. This module isn't specific to Cloudflare, but it is compatible within isolates and doesn't rely on NodeJS.

Usage

Installation: npm i cloudflare-workers-and-google-oauth

This is a fully working code snippet showing how to access Google Cloud Storage (GCS) and returning an image to the browser.

This gist was my inspiration for this implementation.

import GoogleAuth, { GoogleKey } from 'cloudflare-workers-and-google-oauth'

// Add secret using Wranlger or the Cloudflare dash
export interface Env {
    GCP_SERVICE_ACCOUNT: string;
}

export default {
    async fetch(
        request: Request,
        env: Env,
        ctx: ExecutionContext
    ): Promise<Response> {
        // https://developers.google.com/identity/protocols/oauth2/scopes
        const scopes: string[] = ['https://www.googleapis.com/auth/devstorage.full_control']
        const googleAuth: GoogleKey = JSON.parse(env.GCP_SERVICE_ACCOUNT)

        // Initialize the service
        const oauth = new GoogleAuth(googleAuth, scopes)
        const token = await oauth.getGoogleAuthToken()

        // Example with Google Cloud Storage
        const res = await fetch('https://storage.googleapis.com/storage/v1/b/MY_BUCKET/o/MY_OBJECT.png?alt=media', {
            method: 'GET',
            headers: {
                'Authorization': `Bearer ${token}`,
                'Content-Type': 'image/png',
                'Accept': 'image/png',
            },
        })

        return new Response(res.body, { headers: { 'Content-Type': 'image/png' } });
    },
};