@krislintigo-zenmoney/zenmoney-client
v1.2.2
Published
Modern TypeScript client for the ZenMoney API
Maintainers
Readme
zenmoney-client
test: 42.0
Modern TypeScript/Node.js SDK for ZenMoney API.
В библиотеке уже подготовлены:
- отдельный
ZenMoneyAuthClientдля OAuth2 flow - отдельный
ZenMoneyApiClientдляdiffиsuggest - совместимый фасад
ZenMoneyClient, объединяющий оба клиента - сборка в ESM и CommonJS
- готовые типы для публикации в npm
pnpm-скрипты для сборки, тестов и проверки пакета перед публикацией
Требования
- Node.js 20+
- pnpm 10+
Установка
pnpm installБыстрый старт
import { ZenMoneyApiClient, ZenMoneyAuthClient } from '@krislintigo-zenmoney/zenmoney-client';
const authClient = new ZenMoneyAuthClient({
clientId: process.env.ZM_CLIENT_ID,
clientSecret: process.env.ZM_CLIENT_SECRET,
redirectUri: 'https://example.com/oauth/callback',
});
const tokenSet = await authClient.refreshAccessToken({
refreshToken: process.env.ZM_REFRESH_TOKEN,
});
const apiClient = new ZenMoneyApiClient({
accessToken: tokenSet.accessToken,
});
const diff = await apiClient.diff({ serverTimestamp: 0 });
console.dir(diff, { depth: null });Использование с уже готовым токеном
import { ZenMoneyClient } from '@krislintigo-zenmoney/zenmoney-client';
const client = new ZenMoneyApiClient({
accessToken: process.env.ZM_ACCESS_TOKEN,
});
const suggestion = await client.suggest({
payee: 'McDonalds',
});
console.dir(suggestion, { depth: null });Обновление access token
const client = new ZenMoneyClient({
clientId: process.env.ZM_CLIENT_ID,
clientSecret: process.env.ZM_CLIENT_SECRET,
refreshToken: process.env.ZM_REFRESH_TOKEN,
});
const tokenSet = await client.refreshAccessToken();
console.log(tokenSet.accessToken);API
new ZenMoneyAuthClient(options)
Отвечает за OAuth2-операции и хранение refreshToken.
new ZenMoneyApiClient(options)
Отвечает за diff/suggest и хранение accessToken.
Параметры:
clientId,clientSecret,redirectUriдля OAuth2accessToken,refreshTokenдля повторного использования сессииapiBaseUrl,authBaseUrlдля тестирования или проксирования APIuserAgentдля кастомного заголовка
Основные методы
createAuthorizationUrl(params)authorizeWithCode(params)refreshAccessToken(params)diff(payload)suggest(payload)setAccessToken(token)setRefreshToken(token)setTokens(tokenSet)clearTokens()getAccessToken()getRefreshToken()
diff(payload) принимает forceFetch как массив строк, например ['transaction', 'merchant'] as const. Сущности, перечисленные в forceFetch, в типе ответа становятся обязательными и возвращаются без undefined.
Скрипты
pnpm build
pnpm lint
pnpm release:dry-run
pnpm test
pnpm typecheck
pnpm pack:checkПубликация в npm
- При необходимости поменяйте
nameвpackage.jsonна свободное имя пакета. - Настройте секрет
NPM_TOKENв GitHub Actions. - Используйте Conventional Commits, например
feat: add suggest helperилиfix: normalize oauth token parsing. - Для локальной проверки релиза выполните:
pnpm release:dry-run- После пуша в
mainилиmasterworkflowReleaseсам:
- определит semver bump по коммитам
- обновит
CHANGELOG.md - создаст git tag и GitHub release
- опубликует пакет в npm
Semantic Changelog
В проект добавлен semantic-release с автоматической генерацией CHANGELOG.md.
feat:даётminorfix:даётpatchfeat!:илиBREAKING CHANGE:даётmajor
Конфигурация лежит в .releaserc.json, а автоматический релиз запускается через .github/workflows/release.yml.
Соответствие спецификации
SDK опирается на описание ZenMoney API из официальной wiki:
- OAuth2 authorize:
https://api.zenmoney.ru/oauth2/authorize/ - OAuth2 token:
https://api.zenmoney.ru/oauth2/token/ - Diff:
https://api.zenmoney.ru/v8/diff/ - Suggest:
https://api.zenmoney.ru/v8/suggest/
