@openaisdk/billing-sdk 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.env.example +8 -0
- package/README.md +117 -0
- package/dist/config.d.ts +42 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +81 -0
- package/dist/config.js.map +1 -0
- package/dist/generated/api.d.ts +3248 -0
- package/dist/generated/api.d.ts.map +1 -0
- package/dist/generated/api.js +4988 -0
- package/dist/generated/api.js.map +1 -0
- package/dist/generated/base.d.ts +43 -0
- package/dist/generated/base.d.ts.map +1 -0
- package/dist/generated/base.js +53 -0
- package/dist/generated/base.js.map +1 -0
- package/dist/generated/common.d.ts +35 -0
- package/dist/generated/common.d.ts.map +1 -0
- package/dist/generated/common.js +124 -0
- package/dist/generated/common.js.map +1 -0
- package/dist/generated/configuration.d.ts +99 -0
- package/dist/generated/configuration.d.ts.map +1 -0
- package/dist/generated/configuration.js +99 -0
- package/dist/generated/configuration.js.map +1 -0
- package/dist/generated/index.d.ts +14 -0
- package/dist/generated/index.d.ts.map +1 -0
- package/dist/generated/index.js +32 -0
- package/dist/generated/index.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +20 -0
- package/dist/index.js.map +1 -0
- package/package.json +65 -0
package/.env.example
ADDED
package/README.md
ADDED
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
# @openaisdk/billing-sdk
|
|
2
|
+
|
|
3
|
+
TypeScript-клиент для **Billing API**: подписки, checkout, customer accounts, каталог, webhooks и админские операции. Сгенерирован из OpenAPI (**axios**).
|
|
4
|
+
|
|
5
|
+
**Аудитория:** backend вашего SaaS (Node.js), который вызывает Billing Platform по сети.
|
|
6
|
+
|
|
7
|
+
Исходники и issues: монорепозиторий [MegaRetroHQ/saas-billing](https://github.com/MegaRetroHQ/saas-billing) (каталог `packages/billing-sdk`).
|
|
8
|
+
|
|
9
|
+
## Установка
|
|
10
|
+
|
|
11
|
+
```bash
|
|
12
|
+
npm install @openaisdk/billing-sdk
|
|
13
|
+
# или
|
|
14
|
+
pnpm add @openaisdk/billing-sdk
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
Пакет тянет **`axios`** как зависимость; отдельно ставить его не обязательно.
|
|
18
|
+
|
|
19
|
+
## Требования
|
|
20
|
+
|
|
21
|
+
- **Node.js** ≥ 20 (как у платформы; для других LTS обычно тоже ок).
|
|
22
|
+
- **TypeScript** рекомендуется: в комплекте типы (`dist/*.d.ts`).
|
|
23
|
+
|
|
24
|
+
## Аутентификация (M2M)
|
|
25
|
+
|
|
26
|
+
Используйте **project-scoped integration key**, выданный в Admin UI платформы (раздел «Интеграция»). Передавайте ключ как **`Authorization: Bearer <ключ>`**.
|
|
27
|
+
|
|
28
|
+
Tenant и project для ключа определяются **на стороне API**. Часть сгенерированных методов всё равно принимает **`xTenantId`** в сигнатуре (как в OpenAPI) — передавайте UUID tenant из настроек проекта / сниппета интеграции, даже при Bearer-ключе.
|
|
29
|
+
|
|
30
|
+
**Не коммитьте** ключи и не вшивайте их в клиентский фронтенд — только сервер consumer-приложения.
|
|
31
|
+
|
|
32
|
+
## Быстрый старт
|
|
33
|
+
|
|
34
|
+
```typescript
|
|
35
|
+
import {
|
|
36
|
+
Configuration,
|
|
37
|
+
CustomerAccountsApi,
|
|
38
|
+
AccessApi,
|
|
39
|
+
} from '@openaisdk/billing-sdk';
|
|
40
|
+
|
|
41
|
+
const billing = new Configuration({
|
|
42
|
+
basePath: process.env.BILLING_API_URL, // без завершающего /
|
|
43
|
+
baseOptions: {
|
|
44
|
+
headers: {
|
|
45
|
+
Authorization: `Bearer ${process.env.BILLING_API_KEY}`,
|
|
46
|
+
},
|
|
47
|
+
},
|
|
48
|
+
});
|
|
49
|
+
|
|
50
|
+
const customers = new CustomerAccountsApi(billing);
|
|
51
|
+
const access = new AccessApi(billing);
|
|
52
|
+
|
|
53
|
+
// Пример: список customer accounts (сигнатуры сгенерированы из OpenAPI — часто первым идёт x-tenant-id)
|
|
54
|
+
const tenantId = process.env.BILLING_HTTP_X_TENANT_ID; // UUID tenant
|
|
55
|
+
const projectId = process.env.BILLING_PROJECT_ID;
|
|
56
|
+
if (!tenantId || !projectId) throw new Error('Задайте BILLING_HTTP_X_TENANT_ID и BILLING_PROJECT_ID');
|
|
57
|
+
const list = await customers.customerAccountsControllerList(tenantId, projectId);
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
Точные аргументы методов смотрите в **типах** пакета: генератор отражает пути и заголовки спецификации.
|
|
61
|
+
|
|
62
|
+
## Переменные окружения (типичный backend)
|
|
63
|
+
|
|
64
|
+
Имена ниже — распространённый договор; точный `.env`-сниппет часто копируют из Admin UI после создания ключа.
|
|
65
|
+
|
|
66
|
+
| Переменная | Назначение |
|
|
67
|
+
|------------|------------|
|
|
68
|
+
| `BILLING_API_URL` | Base URL Billing API **без** завершающего `/` |
|
|
69
|
+
| `BILLING_API_KEY` | Сырой integration key (Bearer) |
|
|
70
|
+
| `BILLING_PROJECT_ID` | UUID проекта — для параметров `projectId` |
|
|
71
|
+
| `BILLING_HTTP_X_TENANT_ID` | UUID tenant — для параметров `xTenantId` в сгенерированных методах (имя из OpenAPI) |
|
|
72
|
+
|
|
73
|
+
Те же четыре имени использует MCP **`@openaisdk/billing-mcp`** (`packages/billing-catalog-mcp`): см. README пакета. Для глобального конфига SDK: `applyBillingSdkEnv()`, `getOptionalProjectIdFromEnv()`, `getOptionalTenantIdFromEnv()` в `config.ts`.
|
|
74
|
+
|
|
75
|
+
Дополнительные переменные и сценарии (включая feature-flag интеграции у consumer) — в гайде интеграции у поставщика платформы.
|
|
76
|
+
|
|
77
|
+
## Основные классы API
|
|
78
|
+
|
|
79
|
+
Клиент разбит на группы методов (OpenAPI tags):
|
|
80
|
+
|
|
81
|
+
| Класс | Назначение (кратко) |
|
|
82
|
+
|-------|---------------------|
|
|
83
|
+
| `AccessApi` | Состояние доступа (entitlements) для customer account |
|
|
84
|
+
| `CheckoutApi` | Checkout-сессии |
|
|
85
|
+
| `CustomerAccountsApi` | Учётные записи плательщиков в проекте |
|
|
86
|
+
| `SubscriptionsApi` | Подписки |
|
|
87
|
+
| `CatalogApi` | Планы и цены (каталог) |
|
|
88
|
+
| `WebhooksApi` | Webhook-подписки consumer |
|
|
89
|
+
| `IntegrationKeysApi` | Ключи интеграции (часто только из доверенного admin-кода) |
|
|
90
|
+
| `PlatformApi` | Платформенные/tenant-операции (по правам) |
|
|
91
|
+
| `AdminApi` | Админские операции |
|
|
92
|
+
| `ProviderAccountsApi` | Платёжные провайдеры |
|
|
93
|
+
| `AuthApi` | Auth (human flow; для M2M обычно не нужен) |
|
|
94
|
+
| `HealthApi` | Health / readiness |
|
|
95
|
+
| `MetricsApi` | Метрики |
|
|
96
|
+
| `DevProductionApi` | Dev-only эндпоинты (если включены на стенде) |
|
|
97
|
+
|
|
98
|
+
Полный список методов и DTO — в типах пакета и в OpenAPI-спецификации вашего стенда (`GET /api-json`).
|
|
99
|
+
|
|
100
|
+
## Idempotency
|
|
101
|
+
|
|
102
|
+
Для **POST**-операций создания (customer account, checkout и т.д.) рекомендуется передавать заголовок **`Idempotency-Key`** (уникальный ключ на логическую операцию), чтобы повторы запроса не создавали дубликаты.
|
|
103
|
+
|
|
104
|
+
Через axios это делается через `baseOptions`, опции конкретного вызова или перехватчик — в зависимости от того, как вы оборачиваете клиент.
|
|
105
|
+
|
|
106
|
+
## Дополнительно: `setSdkConfig` / `getApiHeaders`
|
|
107
|
+
|
|
108
|
+
В пакете есть вспомогательный модуль **`config.ts`**: `setSdkConfig`, `getSdkConfig`, `getApiHeaders` — для простой глобальной базы URL и ключа. Сгенерированные `*Api` по умолчанию используют **`Configuration`**, переданный в конструктор; глобальный конфиг нужен только если вы сами строите запросы поверх `getApiHeaders()`.
|
|
109
|
+
|
|
110
|
+
## Документация и контракт
|
|
111
|
+
|
|
112
|
+
- Контракт API и описание сценариев — у **поставщика Billing Platform** (часто документ **Consumer Integration Guide** и OpenAPI).
|
|
113
|
+
- Версия npm-пакета следует за релизами SDK; при breaking changes в API растёт мажорная версия SDK.
|
|
114
|
+
|
|
115
|
+
## Лицензия
|
|
116
|
+
|
|
117
|
+
**MIT** — см. поле `license` в `package.json` пакета.
|
package/dist/config.d.ts
ADDED
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Конфигурация SDK для Billing API.
|
|
3
|
+
*
|
|
4
|
+
* Auth model (ADR-010): project-scoped integration keys.
|
|
5
|
+
* Tenant и project резолвятся из API key автоматически на стороне API.
|
|
6
|
+
* Часть методов OpenAPI всё равно принимает `xTenantId` в сигнатуре — используйте
|
|
7
|
+
* `BILLING_HTTP_X_TENANT_ID` (или `getOptionalTenantIdFromEnv()` + `getApiHeaders()`).
|
|
8
|
+
*
|
|
9
|
+
* **Переменные окружения** (договор с `packages/billing-catalog-mcp`):
|
|
10
|
+
* `BILLING_API_URL`, `BILLING_API_KEY`, `BILLING_PROJECT_ID`, `BILLING_HTTP_X_TENANT_ID`.
|
|
11
|
+
*
|
|
12
|
+
* Предпочтительный способ аутентификации: Authorization: Bearer <key>.
|
|
13
|
+
*/
|
|
14
|
+
export interface SdkConfig {
|
|
15
|
+
baseURL: string;
|
|
16
|
+
/** Project-scoped integration key (bsk_live_... / bsk_test_...). */
|
|
17
|
+
apiKey?: string;
|
|
18
|
+
timeout?: number;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Устанавливает глобальную конфигурацию SDK
|
|
22
|
+
*/
|
|
23
|
+
export declare function setSdkConfig(config: Partial<SdkConfig>): void;
|
|
24
|
+
/**
|
|
25
|
+
* Получает текущую конфигурацию SDK
|
|
26
|
+
*/
|
|
27
|
+
export declare function getSdkConfig(): SdkConfig;
|
|
28
|
+
/**
|
|
29
|
+
* Создаёт headers для Billing API.
|
|
30
|
+
* Использует Authorization: Bearer как предпочтительный метод (ADR-010).
|
|
31
|
+
*/
|
|
32
|
+
export declare function getApiHeaders(): Record<string, string>;
|
|
33
|
+
/** UUID tenant из env (для аргументов сгенерированных методов). */
|
|
34
|
+
export declare function getOptionalTenantIdFromEnv(): string | undefined;
|
|
35
|
+
/** UUID project из env (если прокидываете projectId из конфига). */
|
|
36
|
+
export declare function getOptionalProjectIdFromEnv(): string | undefined;
|
|
37
|
+
/**
|
|
38
|
+
* Подставляет в глобальный конфиг `baseURL` и `apiKey` из process.env
|
|
39
|
+
* (`BILLING_API_URL`, `BILLING_API_KEY`). Без побочных эффектов для остальных полей.
|
|
40
|
+
*/
|
|
41
|
+
export declare function applyBillingSdkEnv(): void;
|
|
42
|
+
//# sourceMappingURL=config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,oEAAoE;IACpE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAOD;;GAEG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,OAAO,CAAC,SAAS,CAAC,GAAG,IAAI,CAE7D;AAED;;GAEG;AACH,wBAAgB,YAAY,IAAI,SAAS,CAExC;AAED;;;GAGG;AACH,wBAAgB,aAAa,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAUtD;AAED,mEAAmE;AACnE,wBAAgB,0BAA0B,IAAI,MAAM,GAAG,SAAS,CAG/D;AAED,oEAAoE;AACpE,wBAAgB,2BAA2B,IAAI,MAAM,GAAG,SAAS,CAGhE;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,IAAI,IAAI,CAazC"}
|
package/dist/config.js
ADDED
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Конфигурация SDK для Billing API.
|
|
4
|
+
*
|
|
5
|
+
* Auth model (ADR-010): project-scoped integration keys.
|
|
6
|
+
* Tenant и project резолвятся из API key автоматически на стороне API.
|
|
7
|
+
* Часть методов OpenAPI всё равно принимает `xTenantId` в сигнатуре — используйте
|
|
8
|
+
* `BILLING_HTTP_X_TENANT_ID` (или `getOptionalTenantIdFromEnv()` + `getApiHeaders()`).
|
|
9
|
+
*
|
|
10
|
+
* **Переменные окружения** (договор с `packages/billing-catalog-mcp`):
|
|
11
|
+
* `BILLING_API_URL`, `BILLING_API_KEY`, `BILLING_PROJECT_ID`, `BILLING_HTTP_X_TENANT_ID`.
|
|
12
|
+
*
|
|
13
|
+
* Предпочтительный способ аутентификации: Authorization: Bearer <key>.
|
|
14
|
+
*/
|
|
15
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
16
|
+
exports.setSdkConfig = setSdkConfig;
|
|
17
|
+
exports.getSdkConfig = getSdkConfig;
|
|
18
|
+
exports.getApiHeaders = getApiHeaders;
|
|
19
|
+
exports.getOptionalTenantIdFromEnv = getOptionalTenantIdFromEnv;
|
|
20
|
+
exports.getOptionalProjectIdFromEnv = getOptionalProjectIdFromEnv;
|
|
21
|
+
exports.applyBillingSdkEnv = applyBillingSdkEnv;
|
|
22
|
+
let globalConfig = {
|
|
23
|
+
baseURL: 'http://localhost:4001',
|
|
24
|
+
timeout: 10000,
|
|
25
|
+
};
|
|
26
|
+
/**
|
|
27
|
+
* Устанавливает глобальную конфигурацию SDK
|
|
28
|
+
*/
|
|
29
|
+
function setSdkConfig(config) {
|
|
30
|
+
globalConfig = { ...globalConfig, ...config };
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Получает текущую конфигурацию SDK
|
|
34
|
+
*/
|
|
35
|
+
function getSdkConfig() {
|
|
36
|
+
return { ...globalConfig };
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Создаёт headers для Billing API.
|
|
40
|
+
* Использует Authorization: Bearer как предпочтительный метод (ADR-010).
|
|
41
|
+
*/
|
|
42
|
+
function getApiHeaders() {
|
|
43
|
+
const headers = {};
|
|
44
|
+
if (globalConfig.apiKey) {
|
|
45
|
+
headers['Authorization'] = `Bearer ${globalConfig.apiKey}`;
|
|
46
|
+
}
|
|
47
|
+
const tenantFromEnv = process.env.BILLING_HTTP_X_TENANT_ID?.trim();
|
|
48
|
+
if (tenantFromEnv) {
|
|
49
|
+
headers['x-tenant-id'] = tenantFromEnv;
|
|
50
|
+
}
|
|
51
|
+
return headers;
|
|
52
|
+
}
|
|
53
|
+
/** UUID tenant из env (для аргументов сгенерированных методов). */
|
|
54
|
+
function getOptionalTenantIdFromEnv() {
|
|
55
|
+
const v = process.env.BILLING_HTTP_X_TENANT_ID?.trim();
|
|
56
|
+
return v || undefined;
|
|
57
|
+
}
|
|
58
|
+
/** UUID project из env (если прокидываете projectId из конфига). */
|
|
59
|
+
function getOptionalProjectIdFromEnv() {
|
|
60
|
+
const v = process.env.BILLING_PROJECT_ID?.trim();
|
|
61
|
+
return v || undefined;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Подставляет в глобальный конфиг `baseURL` и `apiKey` из process.env
|
|
65
|
+
* (`BILLING_API_URL`, `BILLING_API_KEY`). Без побочных эффектов для остальных полей.
|
|
66
|
+
*/
|
|
67
|
+
function applyBillingSdkEnv() {
|
|
68
|
+
const base = process.env.BILLING_API_URL?.trim() || process.env.BILLING_API_BASE_URL?.trim();
|
|
69
|
+
const key = process.env.BILLING_API_KEY?.trim();
|
|
70
|
+
const patch = {};
|
|
71
|
+
if (base) {
|
|
72
|
+
patch.baseURL = base.replace(/\/$/, '');
|
|
73
|
+
}
|
|
74
|
+
if (key) {
|
|
75
|
+
patch.apiKey = key;
|
|
76
|
+
}
|
|
77
|
+
if (Object.keys(patch).length > 0) {
|
|
78
|
+
setSdkConfig(patch);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;GAYG;;AAiBH,oCAEC;AAKD,oCAEC;AAMD,sCAUC;AAGD,gEAGC;AAGD,kEAGC;AAMD,gDAaC;AAhED,IAAI,YAAY,GAAc;IAC5B,OAAO,EAAE,uBAAuB;IAChC,OAAO,EAAE,KAAK;CACf,CAAC;AAEF;;GAEG;AACH,SAAgB,YAAY,CAAC,MAA0B;IACrD,YAAY,GAAG,EAAE,GAAG,YAAY,EAAE,GAAG,MAAM,EAAE,CAAC;AAChD,CAAC;AAED;;GAEG;AACH,SAAgB,YAAY;IAC1B,OAAO,EAAE,GAAG,YAAY,EAAE,CAAC;AAC7B,CAAC;AAED;;;GAGG;AACH,SAAgB,aAAa;IAC3B,MAAM,OAAO,GAA2B,EAAE,CAAC;IAC3C,IAAI,YAAY,CAAC,MAAM,EAAE,CAAC;QACxB,OAAO,CAAC,eAAe,CAAC,GAAG,UAAU,YAAY,CAAC,MAAM,EAAE,CAAC;IAC7D,CAAC;IACD,MAAM,aAAa,GAAG,OAAO,CAAC,GAAG,CAAC,wBAAwB,EAAE,IAAI,EAAE,CAAC;IACnE,IAAI,aAAa,EAAE,CAAC;QAClB,OAAO,CAAC,aAAa,CAAC,GAAG,aAAa,CAAC;IACzC,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,mEAAmE;AACnE,SAAgB,0BAA0B;IACxC,MAAM,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,wBAAwB,EAAE,IAAI,EAAE,CAAC;IACvD,OAAO,CAAC,IAAI,SAAS,CAAC;AACxB,CAAC;AAED,oEAAoE;AACpE,SAAgB,2BAA2B;IACzC,MAAM,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,kBAAkB,EAAE,IAAI,EAAE,CAAC;IACjD,OAAO,CAAC,IAAI,SAAS,CAAC;AACxB,CAAC;AAED;;;GAGG;AACH,SAAgB,kBAAkB;IAChC,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE,IAAI,EAAE,IAAI,OAAO,CAAC,GAAG,CAAC,oBAAoB,EAAE,IAAI,EAAE,CAAC;IAC7F,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE,IAAI,EAAE,CAAC;IAChD,MAAM,KAAK,GAAuB,EAAE,CAAC;IACrC,IAAI,IAAI,EAAE,CAAC;QACT,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IAC1C,CAAC;IACD,IAAI,GAAG,EAAE,CAAC;QACR,KAAK,CAAC,MAAM,GAAG,GAAG,CAAC;IACrB,CAAC;IACD,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAClC,YAAY,CAAC,KAAK,CAAC,CAAC;IACtB,CAAC;AACH,CAAC"}
|