@octokit/auth-oauth-device
Advanced tools
Comparing version 2.0.0 to 3.0.0
@@ -9,4 +9,88 @@ 'use strict'; | ||
function _defineProperty(obj, key, value) { | ||
if (key in obj) { | ||
Object.defineProperty(obj, key, { | ||
value: value, | ||
enumerable: true, | ||
configurable: true, | ||
writable: true | ||
}); | ||
} else { | ||
obj[key] = value; | ||
} | ||
return obj; | ||
} | ||
function ownKeys(object, enumerableOnly) { | ||
var keys = Object.keys(object); | ||
if (Object.getOwnPropertySymbols) { | ||
var symbols = Object.getOwnPropertySymbols(object); | ||
if (enumerableOnly) symbols = symbols.filter(function (sym) { | ||
return Object.getOwnPropertyDescriptor(object, sym).enumerable; | ||
}); | ||
keys.push.apply(keys, symbols); | ||
} | ||
return keys; | ||
} | ||
function _objectSpread2(target) { | ||
for (var i = 1; i < arguments.length; i++) { | ||
var source = arguments[i] != null ? arguments[i] : {}; | ||
if (i % 2) { | ||
ownKeys(Object(source), true).forEach(function (key) { | ||
_defineProperty(target, key, source[key]); | ||
}); | ||
} else if (Object.getOwnPropertyDescriptors) { | ||
Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); | ||
} else { | ||
ownKeys(Object(source)).forEach(function (key) { | ||
Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); | ||
}); | ||
} | ||
} | ||
return target; | ||
} | ||
function _objectWithoutPropertiesLoose(source, excluded) { | ||
if (source == null) return {}; | ||
var target = {}; | ||
var sourceKeys = Object.keys(source); | ||
var key, i; | ||
for (i = 0; i < sourceKeys.length; i++) { | ||
key = sourceKeys[i]; | ||
if (excluded.indexOf(key) >= 0) continue; | ||
target[key] = source[key]; | ||
} | ||
return target; | ||
} | ||
function _objectWithoutProperties(source, excluded) { | ||
if (source == null) return {}; | ||
var target = _objectWithoutPropertiesLoose(source, excluded); | ||
var key, i; | ||
if (Object.getOwnPropertySymbols) { | ||
var sourceSymbolKeys = Object.getOwnPropertySymbols(source); | ||
for (i = 0; i < sourceSymbolKeys.length; i++) { | ||
key = sourceSymbolKeys[i]; | ||
if (excluded.indexOf(key) >= 0) continue; | ||
if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; | ||
target[key] = source[key]; | ||
} | ||
} | ||
return target; | ||
} | ||
async function getOAuthAccessToken(state, options) { | ||
const scope = (options.auth.scopes || state.scopes).join(" "); | ||
const cachedAuthentication = getCachedAuthentication(state, options.auth); | ||
@@ -20,3 +104,7 @@ if (cachedAuthentication) return cachedAuthentication; // The "/login/device/code" is not part of the REST API hosted on api.github.com, | ||
const parameters = { | ||
const scope = "scopes" in state ? { | ||
scope: (options.auth.scopes || state.scopes).join(" ") | ||
} : {}; | ||
const parameters = _objectSpread2({ | ||
baseUrl, | ||
@@ -28,5 +116,5 @@ method: "POST", | ||
}, | ||
client_id: state.clientId, | ||
scope | ||
}; | ||
client_id: state.clientId | ||
}, scope); | ||
const requestCodesResponse = await request(parameters); | ||
@@ -47,3 +135,3 @@ | ||
const authentication = await waitForAccessToken(request, baseUrl, state.clientId, verification); | ||
const authentication = await waitForAccessToken(request, baseUrl, state.clientId, state.clientType, verification); | ||
state.authentication = authentication; | ||
@@ -57,12 +145,10 @@ return authentication; | ||
if (!("scopes" in state.authentication)) { | ||
if (state.clientType === "github-app") { | ||
return state.authentication; | ||
} | ||
const authentication = state.authentication; | ||
const newScope = (auth.scopes || state.scopes).join(" "); | ||
const currentScope = state.authentication.scopes.join(" "); | ||
if (newScope === currentScope) { | ||
return state.authentication; | ||
} | ||
const currentScope = authentication.scopes.join(" "); | ||
return newScope === currentScope ? authentication : false; | ||
} | ||
@@ -74,3 +160,3 @@ | ||
async function waitForAccessToken(request, baseUrl, clientId, verification) { | ||
async function waitForAccessToken(request, baseUrl, clientId, clientType, verification) { | ||
const requestOptions = { | ||
@@ -93,6 +179,2 @@ baseUrl, | ||
if ("access_token" in data) { | ||
// Only Client IDs belonging to GitHub Apps have a "lv1." prefix | ||
// To be more future proof, we only check for the existense of the "." | ||
const clientType = /\./.test(clientId) ? "github-app" : "oauth-app"; | ||
if (clientType === "oauth-app") { | ||
@@ -134,3 +216,3 @@ return { | ||
await wait(verification.interval); | ||
return waitForAccessToken(request, baseUrl, clientId, verification); | ||
return waitForAccessToken(request, baseUrl, clientId, clientType, verification); | ||
} | ||
@@ -140,3 +222,3 @@ | ||
await wait(verification.interval + 5); | ||
return waitForAccessToken(request, baseUrl, clientId, verification); | ||
return waitForAccessToken(request, baseUrl, clientId, clientType, verification); | ||
} | ||
@@ -179,14 +261,27 @@ | ||
const VERSION = "2.0.0"; | ||
const VERSION = "3.0.0"; | ||
function createOAuthDeviceAuth(options) { | ||
const state = Object.assign({ | ||
request: request.request.defaults({ | ||
headers: { | ||
"user-agent": `octokit-auth-oauth-device.js/${VERSION} ${universalUserAgent.getUserAgent()}` | ||
} | ||
}), | ||
scopes: [] | ||
}, options); | ||
const requestWithDefaults = options.request || request.request.defaults({ | ||
headers: { | ||
"user-agent": `octokit-auth-oauth-device.js/${VERSION} ${universalUserAgent.getUserAgent()}` | ||
} | ||
}); | ||
const { | ||
request: request$1 = requestWithDefaults, | ||
clientType = "oauth-app", | ||
scopes = [] | ||
} = options, | ||
otherOptions = _objectWithoutProperties(options, ["request", "clientType", "scopes"]); | ||
const state = clientType === "github-app" ? _objectSpread2({ | ||
clientType, | ||
request: request$1 | ||
}, otherOptions) : _objectSpread2({ | ||
clientType, | ||
request: request$1, | ||
scopes | ||
}, otherOptions); | ||
if (!options.clientId) { | ||
@@ -200,4 +295,4 @@ throw new Error('[@octokit/auth-oauth-device] "clientId" option must be set (https://github.com/octokit/auth-oauth-device.js#usage)'); | ||
return Object.assign(auth.bind(null, state), { | ||
hook: hook.bind(null, state) | ||
return Object.assign(options => auth(state, options), { | ||
hook: (request, route, parameters) => hook(state, request, route, parameters) | ||
}); | ||
@@ -204,0 +299,0 @@ } |
import { RequestError } from "@octokit/request-error"; | ||
export async function getOAuthAccessToken(state, options) { | ||
const scope = (options.auth.scopes || state.scopes).join(" "); | ||
const cachedAuthentication = getCachedAuthentication(state, options.auth); | ||
@@ -15,2 +14,5 @@ if (cachedAuthentication) | ||
// https://docs.github.com/en/developers/apps/authorizing-oauth-apps#step-1-app-requests-the-device-and-user-verification-codes-from-github | ||
const scope = "scopes" in state | ||
? { scope: (options.auth.scopes || state.scopes).join(" ") } | ||
: {}; | ||
const parameters = { | ||
@@ -24,3 +26,3 @@ baseUrl, | ||
client_id: state.clientId, | ||
scope, | ||
...scope, | ||
}; | ||
@@ -40,3 +42,3 @@ const requestCodesResponse = await request(parameters); | ||
// See https://docs.github.com/en/developers/apps/authorizing-oauth-apps#step-3-app-polls-github-to-check-if-the-user-authorized-the-device | ||
const authentication = await waitForAccessToken(request, baseUrl, state.clientId, verification); | ||
const authentication = await waitForAccessToken(request, baseUrl, state.clientId, state.clientType, verification); | ||
state.authentication = authentication; | ||
@@ -50,10 +52,11 @@ return authentication; | ||
return false; | ||
if (!("scopes" in state.authentication)) { | ||
if (state.clientType === "github-app") { | ||
return state.authentication; | ||
} | ||
const authentication = state.authentication; | ||
const newScope = (auth.scopes || state.scopes).join(" "); | ||
const currentScope = state.authentication.scopes.join(" "); | ||
if (newScope === currentScope) { | ||
return state.authentication; | ||
} | ||
const currentScope = authentication.scopes.join(" "); | ||
return newScope === currentScope | ||
? authentication | ||
: false; | ||
} | ||
@@ -63,3 +66,3 @@ async function wait(seconds) { | ||
} | ||
async function waitForAccessToken(request, baseUrl, clientId, verification) { | ||
async function waitForAccessToken(request, baseUrl, clientId, clientType, verification) { | ||
const requestOptions = { | ||
@@ -78,5 +81,2 @@ baseUrl, | ||
if ("access_token" in data) { | ||
// Only Client IDs belonging to GitHub Apps have a "lv1." prefix | ||
// To be more future proof, we only check for the existense of the "." | ||
const clientType = /\./.test(clientId) ? "github-app" : "oauth-app"; | ||
if (clientType === "oauth-app") { | ||
@@ -115,7 +115,7 @@ return { | ||
await wait(verification.interval); | ||
return waitForAccessToken(request, baseUrl, clientId, verification); | ||
return waitForAccessToken(request, baseUrl, clientId, clientType, verification); | ||
} | ||
if (data.error === "slow_down") { | ||
await wait(verification.interval + 5); | ||
return waitForAccessToken(request, baseUrl, clientId, verification); | ||
return waitForAccessToken(request, baseUrl, clientId, clientType, verification); | ||
} | ||
@@ -122,0 +122,0 @@ throw new RequestError(`${data.error_description} (${data.error}, ${data.error_url})`, 400, { |
import { getUserAgent } from "universal-user-agent"; | ||
import { request } from "@octokit/request"; | ||
import { request as octokitRequest } from "@octokit/request"; | ||
import { auth } from "./auth"; | ||
@@ -7,10 +7,21 @@ import { hook } from "./hook"; | ||
export function createOAuthDeviceAuth(options) { | ||
const state = Object.assign({ | ||
request: request.defaults({ | ||
const requestWithDefaults = options.request || | ||
octokitRequest.defaults({ | ||
headers: { | ||
"user-agent": `octokit-auth-oauth-device.js/${VERSION} ${getUserAgent()}`, | ||
}, | ||
}), | ||
scopes: [], | ||
}, options); | ||
}); | ||
const { request = requestWithDefaults, clientType = "oauth-app", scopes = [], ...otherOptions } = options; | ||
const state = clientType === "github-app" | ||
? { | ||
clientType, | ||
request, | ||
...otherOptions, | ||
} | ||
: { | ||
clientType, | ||
request, | ||
scopes, | ||
...otherOptions, | ||
}; | ||
if (!options.clientId) { | ||
@@ -22,5 +33,5 @@ throw new Error('[@octokit/auth-oauth-device] "clientId" option must be set (https://github.com/octokit/auth-oauth-device.js#usage)'); | ||
} | ||
return Object.assign(auth.bind(null, state), { | ||
hook: hook.bind(null, state), | ||
return Object.assign((options) => auth(state, options), { | ||
hook: (request, route, parameters) => hook(state, request, route, parameters), | ||
}); | ||
} |
@@ -1,1 +0,1 @@ | ||
export const VERSION = "2.0.0"; | ||
export const VERSION = "3.0.0"; |
@@ -1,2 +0,2 @@ | ||
import { State, AuthOptions, Authentication } from "./types"; | ||
export declare function auth(state: State, authOptions: AuthOptions): Promise<Authentication>; | ||
import { State, AuthOptions, Authentication, ClientType } from "./types"; | ||
export declare function auth<TClientType extends ClientType>(state: State, authOptions: AuthOptions): Promise<Authentication<TClientType>>; |
import { RequestInterface } from "@octokit/types"; | ||
import { AuthOptions, State, Authentication } from "./types"; | ||
export declare function getOAuthAccessToken(state: State, options: { | ||
import { AuthOptions, ClientType, State, Authentication } from "./types"; | ||
export declare function getOAuthAccessToken<TClientType extends ClientType>(state: State, options: { | ||
request?: RequestInterface; | ||
auth: AuthOptions; | ||
}): Promise<Authentication>; | ||
}): Promise<Authentication<TClientType>>; |
import { RequestInterface, OctokitResponse, EndpointOptions, RequestParameters, Route } from "@octokit/types"; | ||
import { State } from "./types"; | ||
export declare function hook(state: State, request: RequestInterface, route: Route | EndpointOptions, parameters?: RequestParameters): Promise<OctokitResponse<any>>; | ||
import { ClientType, State } from "./types"; | ||
export declare function hook<TClientType extends ClientType>(state: State, request: RequestInterface, route: Route | EndpointOptions, parameters?: RequestParameters): Promise<OctokitResponse<any>>; |
import * as Types from "./types"; | ||
export declare type StrategyOptions = Types.StrategyOptions; | ||
export declare type AuthOptions = Types.AuthOptions; | ||
export declare type Authentication = Types.Authentication; | ||
export declare type OAuthAppAuthentication = Types.OAuthAppAuthentication; | ||
export declare type GitHubAppAuthentication = Types.GitHubAppAuthentication; | ||
export declare type GitHubAppAuthenticationWithExpiration = Types.GitHubAppAuthenticationWithExpiration; | ||
export declare function createOAuthDeviceAuth(options: Types.StrategyOptions): Types.AuthInterface; | ||
export { StrategyOptions, AuthOptions, Authentication, OAuthAppAuthentication, GitHubAppAuthentication, GitHubAppAuthenticationWithExpiration, } from "./types"; | ||
export declare function createOAuthDeviceAuth<TClientType extends Types.ClientType = "oauth-app">(options: Types.StrategyOptions<TClientType>): Types.AuthInterface<TClientType>; |
import { RequestInterface, Route, EndpointOptions, RequestParameters, OctokitResponse } from "@octokit/types"; | ||
export declare type StrategyOptions = { | ||
export declare type ClientType = "oauth-app" | "github-app"; | ||
export declare type OAuthAppStrategyOptions<TClientType extends ClientType> = { | ||
clientId: string; | ||
clientType?: TClientType; | ||
onVerification: OnVerificationCallback; | ||
@@ -8,4 +10,13 @@ scopes?: string[]; | ||
}; | ||
export interface AuthInterface { | ||
(options: AuthOptions): Promise<Authentication>; | ||
export declare type GitHubAppStrategyOptions<TClientType extends ClientType> = { | ||
clientId: string; | ||
clientType: TClientType; | ||
onVerification: OnVerificationCallback; | ||
/** `scopes` are not permitted for GitHub Apps */ | ||
scopes?: never; | ||
request?: RequestInterface; | ||
}; | ||
export declare type StrategyOptions<TClientType extends ClientType = "oauth-app"> = TClientType extends "oauth-app" ? OAuthAppStrategyOptions<TClientType> : TClientType extends "github-app" ? GitHubAppStrategyOptions<TClientType> : never; | ||
export interface AuthInterface<TClientType extends ClientType> { | ||
(options: AuthOptions): Promise<Authentication<TClientType>>; | ||
hook(request: RequestInterface, route: Route | EndpointOptions, parameters?: RequestParameters): Promise<OctokitResponse<any>>; | ||
@@ -43,3 +54,3 @@ } | ||
}; | ||
export declare type Authentication = OAuthAppAuthentication | GitHubAppAuthentication | GitHubAppAuthenticationWithExpiration; | ||
export declare type Authentication<TClientType extends ClientType = "oauth-app"> = TClientType extends "oauth-app" ? OAuthAppAuthentication : TClientType extends "github-app" ? GitHubAppAuthentication | GitHubAppAuthenticationWithExpiration : never; | ||
export declare type Verification = { | ||
@@ -53,9 +64,18 @@ device_code: string; | ||
export declare type OnVerificationCallback = (verification: Verification) => any | Promise<any>; | ||
export declare type State = { | ||
export declare type OAuthAppState = { | ||
clientId: string; | ||
clientType: "oauth-app"; | ||
onVerification: OnVerificationCallback; | ||
scopes: string[]; | ||
request: RequestInterface; | ||
authentication?: Authentication; | ||
authentication?: Authentication<"oauth-app">; | ||
}; | ||
export declare type GitHubAppState = { | ||
clientId: string; | ||
clientType: "github-app"; | ||
onVerification: OnVerificationCallback; | ||
request: RequestInterface; | ||
authentication?: Authentication<"github-app">; | ||
}; | ||
export declare type State = OAuthAppState | GitHubAppState; | ||
export declare type CodeExchangeResponseError = "authorization_pending" | "slow_down" | "expired_token" | "unsupported_grant_type" | "incorrect_client_credentials" | "incorrect_device_code" | "access_denied"; |
@@ -1,1 +0,1 @@ | ||
export declare const VERSION = "2.0.0"; | ||
export declare const VERSION = "3.0.0"; |
@@ -6,3 +6,2 @@ import { getUserAgent } from 'universal-user-agent'; | ||
async function getOAuthAccessToken(state, options) { | ||
const scope = (options.auth.scopes || state.scopes).join(" "); | ||
const cachedAuthentication = getCachedAuthentication(state, options.auth); | ||
@@ -19,2 +18,5 @@ if (cachedAuthentication) | ||
// https://docs.github.com/en/developers/apps/authorizing-oauth-apps#step-1-app-requests-the-device-and-user-verification-codes-from-github | ||
const scope = "scopes" in state | ||
? { scope: (options.auth.scopes || state.scopes).join(" ") } | ||
: {}; | ||
const parameters = { | ||
@@ -28,3 +30,3 @@ baseUrl, | ||
client_id: state.clientId, | ||
scope, | ||
...scope, | ||
}; | ||
@@ -44,3 +46,3 @@ const requestCodesResponse = await request(parameters); | ||
// See https://docs.github.com/en/developers/apps/authorizing-oauth-apps#step-3-app-polls-github-to-check-if-the-user-authorized-the-device | ||
const authentication = await waitForAccessToken(request, baseUrl, state.clientId, verification); | ||
const authentication = await waitForAccessToken(request, baseUrl, state.clientId, state.clientType, verification); | ||
state.authentication = authentication; | ||
@@ -54,10 +56,11 @@ return authentication; | ||
return false; | ||
if (!("scopes" in state.authentication)) { | ||
if (state.clientType === "github-app") { | ||
return state.authentication; | ||
} | ||
const authentication = state.authentication; | ||
const newScope = (auth.scopes || state.scopes).join(" "); | ||
const currentScope = state.authentication.scopes.join(" "); | ||
if (newScope === currentScope) { | ||
return state.authentication; | ||
} | ||
const currentScope = authentication.scopes.join(" "); | ||
return newScope === currentScope | ||
? authentication | ||
: false; | ||
} | ||
@@ -67,3 +70,3 @@ async function wait(seconds) { | ||
} | ||
async function waitForAccessToken(request, baseUrl, clientId, verification) { | ||
async function waitForAccessToken(request, baseUrl, clientId, clientType, verification) { | ||
const requestOptions = { | ||
@@ -82,5 +85,2 @@ baseUrl, | ||
if ("access_token" in data) { | ||
// Only Client IDs belonging to GitHub Apps have a "lv1." prefix | ||
// To be more future proof, we only check for the existense of the "." | ||
const clientType = /\./.test(clientId) ? "github-app" : "oauth-app"; | ||
if (clientType === "oauth-app") { | ||
@@ -119,7 +119,7 @@ return { | ||
await wait(verification.interval); | ||
return waitForAccessToken(request, baseUrl, clientId, verification); | ||
return waitForAccessToken(request, baseUrl, clientId, clientType, verification); | ||
} | ||
if (data.error === "slow_down") { | ||
await wait(verification.interval + 5); | ||
return waitForAccessToken(request, baseUrl, clientId, verification); | ||
return waitForAccessToken(request, baseUrl, clientId, clientType, verification); | ||
} | ||
@@ -155,13 +155,24 @@ throw new RequestError(`${data.error_description} (${data.error}, ${data.error_url})`, 400, { | ||
const VERSION = "2.0.0"; | ||
const VERSION = "3.0.0"; | ||
function createOAuthDeviceAuth(options) { | ||
const state = Object.assign({ | ||
request: request.defaults({ | ||
const requestWithDefaults = options.request || | ||
request.defaults({ | ||
headers: { | ||
"user-agent": `octokit-auth-oauth-device.js/${VERSION} ${getUserAgent()}`, | ||
}, | ||
}), | ||
scopes: [], | ||
}, options); | ||
}); | ||
const { request: request$1 = requestWithDefaults, clientType = "oauth-app", scopes = [], ...otherOptions } = options; | ||
const state = clientType === "github-app" | ||
? { | ||
clientType, | ||
request: request$1, | ||
...otherOptions, | ||
} | ||
: { | ||
clientType, | ||
request: request$1, | ||
scopes, | ||
...otherOptions, | ||
}; | ||
if (!options.clientId) { | ||
@@ -173,4 +184,4 @@ throw new Error('[@octokit/auth-oauth-device] "clientId" option must be set (https://github.com/octokit/auth-oauth-device.js#usage)'); | ||
} | ||
return Object.assign(auth.bind(null, state), { | ||
hook: hook.bind(null, state), | ||
return Object.assign((options) => auth(state, options), { | ||
hook: (request, route, parameters) => hook(state, request, route, parameters), | ||
}); | ||
@@ -177,0 +188,0 @@ } |
{ | ||
"name": "@octokit/auth-oauth-device", | ||
"description": "GitHub OAuth Device authentication strategy for JavaScript", | ||
"version": "2.0.0", | ||
"version": "3.0.0", | ||
"license": "MIT", | ||
@@ -6,0 +6,0 @@ "files": [ |
@@ -7,3 +7,2 @@ # auth-oauth-device.js | ||
[![Build Status](https://github.com/octokit/auth-oauth-device.js/workflows/Test/badge.svg)](https://github.com/octokit/auth-oauth-device.js/actions?query=workflow%3ATest+branch%3Amain) | ||
[![Dependabot Status](https://api.dependabot.com/badges/status?host=github&repo=octokit/auth-oauth-device.js)](https://dependabot.com/) | ||
@@ -15,2 +14,4 @@ `@octokit/auth-oauth-device` is implementing one of [GitHub’s OAuth Device Flow](https://docs.github.com/en/developers/apps/authorizing-oauth-apps#device-flow). | ||
- [Usage](#usage) | ||
- [For OAuth Apps](#for-oauth-apps) | ||
- [For GitHub Apps](#for-github-apps) | ||
- [`createOAuthDeviceAuth(options)`](#createoauthdeviceauthoptions) | ||
@@ -65,5 +66,8 @@ - [`auth(options)`](#authoptions) | ||
### For OAuth Apps | ||
```js | ||
const auth = createOAuthDeviceAuth({ | ||
clientId: "123", | ||
clientType: "oauth-app", | ||
clientId: "1234567890abcdef1234", | ||
onVerification(verification) { | ||
@@ -91,2 +95,4 @@ // verification example | ||
// tokenType: 'oauth', | ||
// clientType: 'oauth-app', | ||
// clientId: '1234567890abcdef1234', | ||
// token: '...', /* the created oauth token */ | ||
@@ -97,2 +103,49 @@ // scopes: [] /* depend on request scopes by OAuth app */ | ||
### For GitHub Apps | ||
GitHub Apps do not support `scopes`. Client IDs of GitHub Apps have a `lv1.` prefix. If the GitHub App has expiring user tokens enabled, the resulting `authentication` object has extra properties related to expiration and refreshing the token. | ||
```js | ||
const auth = createOAuthDeviceAuth({ | ||
clientType: "github-app", | ||
clientId: "lv1.1234567890abcdef", | ||
onVerification(verification) { | ||
// verification example | ||
// { | ||
// device_code: "3584d83530557fdd1f46af8289938c8ef79f9dc5", | ||
// user_code: "WDJB-MJHT", | ||
// verification_uri: "https://github.com/login/device", | ||
// expires_in: 900, | ||
// interval: 5, | ||
// }; | ||
console.log("Open %s", verification.verification_uri); | ||
console.log("Enter code: %s", verification.user_code); | ||
}, | ||
}); | ||
const tokenAuthentication = await auth({ | ||
type: "oauth", | ||
}); | ||
// resolves with | ||
// { | ||
// type: 'token', | ||
// tokenType: 'oauth', | ||
// clientType: 'github-app', | ||
// clientId: 'lv1.1234567890abcdef', | ||
// token: '...', /* the created oauth token */ | ||
// } | ||
// or if expiring user tokens are enabled | ||
// { | ||
// type: 'token', | ||
// tokenType: 'oauth', | ||
// clientType: 'github-app', | ||
// clientId: 'lv1.1234567890abcdef', | ||
// token: '...', /* the created oauth token */ | ||
// refreshToken: "r1.c1b4a2e77838347a7e420ce178f2e7c6912e169246c34e1ccbf66c46812d16d5b1a9dc86a149873c", | ||
// expiresAt: "2022-01-01T08:00:0.000Z", | ||
// refreshTokenExpiresAt: "2021-07-01T00:00:0.000Z", | ||
// } | ||
``` | ||
## `createOAuthDeviceAuth(options)` | ||
@@ -119,3 +172,3 @@ | ||
<th> | ||
<code>options.clientId</code> | ||
<code>clientId</code> | ||
</th> | ||
@@ -131,3 +184,3 @@ <th> | ||
<th> | ||
<code>options.onVerification</code> | ||
<code>onVerification</code> | ||
</th> | ||
@@ -144,3 +197,3 @@ <th> | ||
const auth = createOAuthDeviceAuth({ | ||
clientId: "123", | ||
clientId: "1234567890abcdef1234", | ||
onVerification(verification) { | ||
@@ -159,5 +212,18 @@ console.log("Open %s", verification.verification_uri); | ||
<th> | ||
<code>options.request</code> | ||
<code>clientType</code> | ||
</th> | ||
<th> | ||
<code>string</code> | ||
</th> | ||
<td> | ||
Must be either `oauth-app` or `github-app`. Defaults to `oauth-app`. | ||
</td> | ||
</tr> | ||
<tr> | ||
<th> | ||
<code>request</code> | ||
</th> | ||
<th> | ||
<code>function</code> | ||
@@ -171,3 +237,3 @@ </th> | ||
createOAuthDeviceAuth({ | ||
clientId: 123, | ||
clientId: "1234567890abcdef1234", | ||
clientSecret: "secret", | ||
@@ -189,4 +255,8 @@ request: request.defaults({ | ||
<td> | ||
Array of scope names enabled for the token. Defaults to <code>[]</code>. See <a href="https://docs.github.com/en/developers/apps/scopes-for-oauth-apps#available-scopes">available scopes</a> | ||
</td> | ||
Only relavant if `clientType` is set to `"oauth-app"`. | ||
Array of scope names enabled for the token. Defaults to `[]`. See [available scopes](https://docs.github.com/en/developers/apps/scopes-for-oauth-apps#available-scopes). | ||
</td> | ||
</tr> | ||
@@ -217,3 +287,3 @@ </tbody> | ||
<th> | ||
<code>options.type</code> | ||
<code>type</code> | ||
</th> | ||
@@ -220,0 +290,0 @@ <th> |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
74378
686
653