Skip to main content
Glama
oauth.mocks.ts4.36 kB
import { faker } from "@faker-js/faker"; import type { OAuthTokenResponse, OAuthErrorResponse, AccountListResponse, BusinessMembership, } from "../../../src/types/freshbooks"; /** * Create a mock OAuth token response */ export function mockTokenResponse(overrides: Partial<OAuthTokenResponse> = {}): OAuthTokenResponse { const now = Math.floor(Date.now() / 1000); return { access_token: overrides.access_token ?? "mock_access_token_" + faker.string.alphanumeric(32), refresh_token: overrides.refresh_token ?? "mock_refresh_token_" + faker.string.alphanumeric(32), token_type: overrides.token_type ?? "Bearer", expires_in: overrides.expires_in ?? 43200, // 12 hours created_at: overrides.created_at ?? now, }; } /** * Create a mock expired token response */ export function mockExpiredTokenResponse(): OAuthTokenResponse { const createdAt = Math.floor(Date.now() / 1000) - 50000; // Created ~14 hours ago return mockTokenResponse({ created_at: createdAt, expires_in: 43200, // 12 hours - so it's expired }); } /** * Create a mock token refresh response (new tokens) */ export function mockTokenRefreshResponse(): OAuthTokenResponse { return mockTokenResponse({ // Fresh tokens with current timestamp }); } /** * Create a mock invalid grant error (invalid auth code or refresh token) */ export function mockInvalidGrantError(): OAuthErrorResponse { return { error: "invalid_grant", error_description: "The authorization code has expired or is invalid", }; } /** * Create a mock invalid client error */ export function mockInvalidClientError(): OAuthErrorResponse { return { error: "invalid_client", error_description: "Client authentication failed", }; } /** * Create a mock invalid request error */ export function mockInvalidRequestError(description: string = "Invalid request parameters"): OAuthErrorResponse { return { error: "invalid_request", error_description: description, }; } /** * Create a mock unauthorized client error */ export function mockUnauthorizedClientError(): OAuthErrorResponse { return { error: "unauthorized_client", error_description: "The client is not authorized to request a token using this method", }; } /** * Create a mock unsupported grant type error */ export function mockUnsupportedGrantTypeError(): OAuthErrorResponse { return { error: "unsupported_grant_type", error_description: "The authorization grant type is not supported", }; } /** * Create a mock business membership */ export function createBusinessMembership(overrides: Partial<BusinessMembership> = {}): BusinessMembership { return { id: overrides.id ?? faker.number.int({ min: 1, max: 9999 }), role: overrides.role ?? "owner", business: overrides.business ?? { id: faker.number.int({ min: 1, max: 9999 }), name: faker.company.name(), account_id: faker.string.alphanumeric(6).toUpperCase(), }, }; } /** * Create a mock account list response */ export function mockAccountListResponse( businessCount: number = 1 ): AccountListResponse { const memberships: BusinessMembership[] = Array.from( { length: businessCount }, () => createBusinessMembership() ); return { response: { result: { business_memberships: memberships, }, }, }; } /** * Create a mock account list response with specific account */ export function mockAccountListResponseWithAccount( accountId: string, businessName?: string ): AccountListResponse { return { response: { result: { business_memberships: [ { id: faker.number.int({ min: 1, max: 9999 }), role: "owner", business: { id: faker.number.int({ min: 1, max: 9999 }), name: businessName ?? faker.company.name(), account_id: accountId, }, }, ], }, }, }; } /** * Create a mock empty account list (no businesses) */ export function mockEmptyAccountListResponse(): AccountListResponse { return { response: { result: { business_memberships: [], }, }, }; } /** * Create a mock account list with multiple businesses */ export function mockMultipleAccountsResponse(): AccountListResponse { return mockAccountListResponse(3); }

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/Good-Samaritan-Software-LLC/freshbooks-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server