diff --git a/packages/core/src/auth/api-token.ts b/packages/core/src/auth/api-token.ts new file mode 100644 index 0000000..32cabd1 --- /dev/null +++ b/packages/core/src/auth/api-token.ts @@ -0,0 +1,7 @@ +import type { AuthProvider } from './types'; + +export const createApiTokenAuthProvider = (username: string, token: string): AuthProvider => ({ + getAuthHeader: async () => ({ + Authorization: `Basic ${Buffer.from(`${username}:${token}`).toString('base64')}`, + }), +}); diff --git a/packages/core/src/auth/bearer-token.ts b/packages/core/src/auth/bearer-token.ts deleted file mode 100644 index fa5ff29..0000000 --- a/packages/core/src/auth/bearer-token.ts +++ /dev/null @@ -1,5 +0,0 @@ -import type { AuthProvider } from './types'; - -export const createBearerAuthProvider = (token: string): AuthProvider => ({ - getAuthHeader: async () => ({ Authorization: `Bearer ${token}` }), -}); diff --git a/packages/core/src/auth/index.ts b/packages/core/src/auth/index.ts index e654436..cc0eace 100644 --- a/packages/core/src/auth/index.ts +++ b/packages/core/src/auth/index.ts @@ -1,15 +1,18 @@ -import { createBearerAuthProvider } from './bearer-token'; +import { createApiTokenAuthProvider } from './api-token'; import { createOAuthProvider } from './oauth'; -import { loadStoredTokens } from './token-store'; import type { AuthConfig, AuthProvider } from './types'; -export { createBearerAuthProvider } from './bearer-token'; +export { createApiTokenAuthProvider } from './api-token'; export { createOAuthProvider } from './oauth'; export type { AuthConfig, AuthHeader, AuthProvider, StoredTokens } from './types'; export const resolveAuthConfig = (): AuthConfig => { - if (process.env.BITBUCKET_TOKEN) { - return { type: 'bearer', token: process.env.BITBUCKET_TOKEN }; + if (process.env.BITBUCKET_USERNAME && process.env.BITBUCKET_TOKEN) { + return { + type: 'api-token', + username: process.env.BITBUCKET_USERNAME, + token: process.env.BITBUCKET_TOKEN, + }; } if (process.env.BITBUCKET_OAUTH_CLIENT_ID && process.env.BITBUCKET_OAUTH_CLIENT_SECRET) { @@ -20,20 +23,15 @@ export const resolveAuthConfig = (): AuthConfig => { }; } - const stored = loadStoredTokens(); - if (stored && stored.expires_at > Date.now()) { - return { type: 'bearer', token: stored.access_token }; - } - throw new Error( - 'No Bitbucket auth configured. Set BITBUCKET_TOKEN or BITBUCKET_OAUTH_CLIENT_ID + BITBUCKET_OAUTH_CLIENT_SECRET.' + 'No Bitbucket auth configured. Set BITBUCKET_USERNAME + BITBUCKET_TOKEN, or BITBUCKET_OAUTH_CLIENT_ID + BITBUCKET_OAUTH_CLIENT_SECRET.' ); }; export const resolveAuth = (config?: AuthConfig): AuthProvider => { const resolved = config ?? resolveAuthConfig(); - return resolved.type === 'bearer' - ? createBearerAuthProvider(resolved.token) + return resolved.type === 'api-token' + ? createApiTokenAuthProvider(resolved.username, resolved.token) : createOAuthProvider(resolved.clientId, resolved.clientSecret); }; diff --git a/packages/core/src/auth/types.ts b/packages/core/src/auth/types.ts index db0a025..9eed5bd 100644 --- a/packages/core/src/auth/types.ts +++ b/packages/core/src/auth/types.ts @@ -4,9 +4,9 @@ export type AuthProvider = { getAuthHeader: () => Promise; }; -export type BearerAuthConfig = { type: 'bearer'; token: string }; +export type ApiTokenConfig = { type: 'api-token'; username: string; token: string }; export type OAuthConfig = { type: 'oauth'; clientId: string; clientSecret: string }; -export type AuthConfig = BearerAuthConfig | OAuthConfig; +export type AuthConfig = ApiTokenConfig | OAuthConfig; export type StoredTokens = { access_token: string; diff --git a/packages/core/src/index.ts b/packages/core/src/index.ts index 82cadd2..273f758 100644 --- a/packages/core/src/index.ts +++ b/packages/core/src/index.ts @@ -1,7 +1,7 @@ // Auth export type { AuthConfig, AuthHeader, AuthProvider, StoredTokens } from './auth'; export { - createBearerAuthProvider, + createApiTokenAuthProvider, createOAuthProvider, resolveAuth, resolveAuthConfig,