UNPKG

aws-delivlib

Version:

A fabulous library for defining continuous pipelines for building, testing and releasing code libraries.

104 lines (103 loc) 3.13 kB
import { get, set } from "./cache"; import { getAppAuthentication } from "./get-app-authentication"; import { toTokenAuthentication } from "./to-token-authentication"; async function getInstallationAuthentication(state, options, customRequest) { const installationId = Number(options.installationId || state.installationId); if (!installationId) { throw new Error( "[@octokit/auth-app] installationId option is required for installation authentication." ); } if (options.factory) { const { type, factory, oauthApp, ...factoryAuthOptions } = { ...state, ...options }; return factory(factoryAuthOptions); } const optionsWithInstallationTokenFromState = Object.assign( { installationId }, options ); if (!options.refresh) { const result = await get( state.cache, optionsWithInstallationTokenFromState ); if (result) { const { token: token2, createdAt: createdAt2, expiresAt: expiresAt2, permissions: permissions2, repositoryIds: repositoryIds2, repositoryNames: repositoryNames2, singleFileName: singleFileName2, repositorySelection: repositorySelection2 } = result; return toTokenAuthentication({ installationId, token: token2, createdAt: createdAt2, expiresAt: expiresAt2, permissions: permissions2, repositorySelection: repositorySelection2, repositoryIds: repositoryIds2, repositoryNames: repositoryNames2, singleFileName: singleFileName2 }); } } const appAuthentication = await getAppAuthentication(state); const request = customRequest || state.request; const { data: { token, expires_at: expiresAt, repositories, permissions: permissionsOptional, repository_selection: repositorySelectionOptional, single_file: singleFileName } } = await request("POST /app/installations/{installation_id}/access_tokens", { installation_id: installationId, repository_ids: options.repositoryIds, repositories: options.repositoryNames, permissions: options.permissions, mediaType: { previews: ["machine-man"] }, headers: { authorization: `bearer ${appAuthentication.token}` } }); const permissions = permissionsOptional || {}; const repositorySelection = repositorySelectionOptional || "all"; const repositoryIds = repositories ? repositories.map((r) => r.id) : void 0; const repositoryNames = repositories ? repositories.map((repo) => repo.name) : void 0; const createdAt = (/* @__PURE__ */ new Date()).toISOString(); await set(state.cache, optionsWithInstallationTokenFromState, { token, createdAt, expiresAt, repositorySelection, permissions, repositoryIds, repositoryNames, singleFileName }); return toTokenAuthentication({ installationId, token, createdAt, expiresAt, repositorySelection, permissions, repositoryIds, repositoryNames, singleFileName }); } export { getInstallationAuthentication };