Socket
Socket
Sign inDemoInstall

universal-github-app-jwt

Package Overview
Dependencies
0
Maintainers
1
Versions
14
Alerts
File Explorer

Advanced tools

Install Socket

Detect and block malicious and high-risk dependencies

Install

    universal-github-app-jwt

Calculate GitHub App bearer tokens for Node & modern browsers


Version published
Weekly downloads
885K
increased by0.59%
Maintainers
1
Install size
29.2 kB
Created
Weekly downloads
 

Readme

Source

universal-github-app-jwt

Calculate GitHub App bearer tokens for Node, Deno, and modern browsers

@latest Build Status

Usage

Browsers Load universal-github-app-jwt directly from esm.sh
<script type="module">
import githubAppJwt from "https://esm.sh/universal-github-app-jwt";
</script>
Node

Install with npm install universal-github-app-jwt

import githubAppJwt from "universal-github-app-jwt";
Deno

Load universal-github-app-jwt directly from esm.sh, including types.

import githubAppJwt from "https://esm.sh/universal-github-app-jwt";
const { token, appId, expiration } = await githubAppJwt({
  id: APP_ID,
  privateKey: PRIVATE_KEY,
});

The retrieved token can now be used in Authorization request header, e.g. with @octokit/request:

request("GET /app", {
  headers: {
    authorization: `bearer ${token}`,
  },
});

For a complete implementation of GitHub App authentication strategies, see @octokit/auth-app.js.

githubAppJwt(options)

name type description
options.id number Required. Find App ID on the app’s about page in settings.
options.privateKey string Required. Content of the *.pem file you downloaded from the app’s about page. You can generate a new private key if needed. Make sure to preserve the line breaks.
options.now number An optional override for the current time in seconds since the UNIX epoch. Defaults to Math.floor(Date.now() / 1000)). This value can be overridden to account for a time skew between the local machine and the authentication server.

githubAppJwt(options) resolves with an object with the following keys

name type description
token string The JSON Web Token (JWT) to authenticate as the app.
appId number The GitHub App database ID passed in options.id.
expiration number Timestamp as UNIX epoch, e.g. 1530922170. A Date object can be created using new Date(authentication.expiration).

About Private Key formats

When downloading a private-key.pem file from GitHub, the format is in PKCS#1 format. Unfortunately, the WebCrypto API only supports PKCS#8.

If you use 1Password to store a private key as an SSH key, it will be transformed to the OpenSSH format, which is also not supported by WebCrypto.

You can identify the format based on the the first line

First LineFormat
-----BEGIN RSA PRIVATE KEY-----PKCS#1
-----BEGIN PRIVATE KEY-----PKCS#8
-----BEGIN OPENSSH PRIVATE KEY-----OpenSSH

Converting PKCS#1 to PKCS#8

  • Using an Online Private Key Converter

Convert quickly using the Web interface at https://private-key-converter.vercel.app

  • Using Node.js

If you use Node.js, you can convert the format before passing it to universal-github-app-jwt:

import crypto from "node:crypto";
import githubAppJwt from "universal-github-app-jwt";

const privateKeyPkcs8 = crypto
  .createPrivateKey(process.env.PRIVATE_KEY)
  .export({
    type: "pkcs8",
    format: "pem",
  });

const { token, appId, expiration } = await githubAppJwt({
  id: process.env.APP_ID,
  privateKey: privateKeyPkcs8,
});
  • Using OpenSSL

Convert the format using openssl before passing it to your app.

openssl pkcs8 -topk8 -inform PEM -outform PEM -nocrypt -in private-key.pem -out private-key-pkcs8.key

Converting OpenSSH to PKCS#8

cp private-key.pem private-key-pkcs8.key && ssh-keygen -m PKCS8  -N "" -f private-key-pkcs8.key

I'm looking for help to create a minimal OpenSSH to PKCS convert library that I can recommend people to use before passing the private key to githubAppJwt. Please create an issue if you'd like to help.

License

MIT

Keywords

FAQs

Last updated on 02 Mar 2024

Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc