TypeScript LEAP API client generated from the LEAP OpenAPI (Swagger 2.0) definition using Hey API.
This package generates a single combined client at src/client/ and re-exports it from src/index.ts.
npm install @forsyteco/leap-client-typescriptimport {
createRequestScopedClient,
exchangeAuthorizationCode,
getApiV3Matters,
requestWithResponse,
refreshToken,
} from "@forsyteco/leap-client-typescript";
const exchanged = await exchangeAuthorizationCode({
tokenUrl: process.env.LEAP_TOKEN_URL!,
clientId: process.env.LEAP_CLIENT_ID!,
clientSecret: process.env.LEAP_CLIENT_SECRET!,
code: authCodeFromCallback,
redirectUri: process.env.LEAP_REDIRECT_URI!,
});
const refreshed = await refreshToken({
tokenUrl: process.env.LEAP_TOKEN_URL!,
clientId: process.env.LEAP_CLIENT_ID!,
clientSecret: process.env.LEAP_CLIENT_SECRET!,
refreshToken: exchanged.refresh_token!,
});
const scoped = createRequestScopedClient({
baseUrl: process.env.LEAP_BASE_URL!,
auth: refreshed.access_token!,
apiKey: process.env.LEAP_PUBLIC_API_KEY!,
});
const response = await getApiV3Matters({
client: scoped.client,
headers: scoped.headers,
query: { maxItems: "20", isCurrent: "true" },
throwOnError: true,
});
const uploadResponse = await requestWithResponse(scoped, {
method: "POST",
url: "/api/v1/documents",
body: { matterId: "matter-1", docName: "example.pdf" },
});
console.log(uploadResponse.status, uploadResponse.data);Use createRequestScopedClient() per request to avoid request-path reliance on shared mutable singleton auth/baseUrl configuration.
npm install
npm run generate
npm run lint
npm run buildnpm run generateThe generation flow:
- Downloads and validates the UK LEAP Swagger 2.0 spec from
LEAP_SPEC_URL(openapi/manifest.ts) intoopenapi/openapi.json. - Runs Hey API once to produce the combined client at
src/client/.
Generated clients are treated as build artifacts. Re-run generation whenever LEAP updates the published Swagger definition.
npm run generate
npm run pack:check
npm run publish:publicprepack runs automatically during pack/publish, so lint/build happen before publishing without committing dist.
# choose one semantic version bump
npm run release:patch
npm run release:minor
npm run release:majorSet NPM_TOKEN in your CI secret store, then run:
npm ci
npm run generate
npm run lint
npm run build
npm run pack:check
npm run publish:public