Socket
Socket
Sign inDemoInstall

universal-github-app-jwt

Package Overview
Dependencies
15
Maintainers
1
Versions
17
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
905K
increased by13.16%
Maintainers
1
Install size
318 kB
Created
Weekly downloads
 

Package description

What is universal-github-app-jwt?

The universal-github-app-jwt npm package is designed to help developers generate JSON Web Tokens (JWT) for GitHub Apps. This is particularly useful for authenticating GitHub Apps and making API requests on behalf of the app.

What are universal-github-app-jwt's main functionalities?

Generate JWT

This feature allows you to generate a JWT for your GitHub App using the app's ID, private key, and installation ID. The generated token can then be used to authenticate API requests.

const { createAppAuth } = require('universal-github-app-jwt');

const auth = createAppAuth({
  appId: process.env.GITHUB_APP_ID,
  privateKey: process.env.GITHUB_PRIVATE_KEY,
  installationId: process.env.GITHUB_INSTALLATION_ID
});

async function getToken() {
  const { token } = await auth({ type: 'app' });
  console.log(token);
}

getToken();

Other packages similar to universal-github-app-jwt

Readme

Source

universal-github-app-jwt

Calculate GitHub App bearer tokens for Node & modern browsers

@latest Build Status

⚠ The private keys provide by GitHub are in PKCS#1 format, but the WebCrypto API only supports PKCS#8. And neither Node nor the WEbCrypto API supports private keys in the OpenSSH format. You can see the difference in the first line, PKCS#1 format starts with -----BEGIN RSA PRIVATE KEY----- while PKCS#8 starts with -----BEGIN PRIVATE KEY-----, and OpenSSH starts with -----BEGIN OPENSSH PRIVATE KEY-----.

You can convert PKCS#1 to PKCS#8 using oppenssl:

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

You can convert OpenSSH to PKCS#8 using ssh-keygen:

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

It's also possible to convert the formats with JavaScript, e.g. using node-rsa, but it turns a 4kb to a 200kb+ built. I'm looking for help to create a minimal PKCS#1 to PKCS#8 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. The same to convert OpenSSH to PKCS#8.

You can convert PKCS#1 to PKCS#8 in Node.js using the built-in crypto module:

const crypto = require("crypto");
const PRIVATE_KEY = `-----BEGIN RSA PRIVATE KEY-----
...
-----END RSA PRIVATE KEY-----`;

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

When using a node, a conversion is not necessary, the implementation is agnostic to either PKCS format.

However, if you got the error Private Key is in PKCS#1 format, but only PKCS#8 is supported. inside Node.js, it is possible that your bundler or your app framework incorrectly bundled the web version instead of the node version (example).

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).

License

MIT

Keywords

FAQs

Last updated on 08 Jul 2023

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

Packages

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc