@v3finance/monitoring-sdk 0.0.0-stage → 0.1.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/CHANGELOG.md +16 -0
- package/LICENSE +21 -0
- package/README.md +247 -2
- package/dist/cjs/client.d.ts +65 -0
- package/dist/cjs/client.d.ts.map +1 -0
- package/dist/cjs/client.js +89 -0
- package/dist/cjs/client.js.map +1 -0
- package/dist/cjs/core/errors.d.ts +64 -0
- package/dist/cjs/core/errors.d.ts.map +1 -0
- package/dist/cjs/core/errors.js +95 -0
- package/dist/cjs/core/errors.js.map +1 -0
- package/dist/cjs/core/http.d.ts +62 -0
- package/dist/cjs/core/http.d.ts.map +1 -0
- package/dist/cjs/core/http.js +151 -0
- package/dist/cjs/core/http.js.map +1 -0
- package/dist/cjs/core/pagination.d.ts +13 -0
- package/dist/cjs/core/pagination.d.ts.map +1 -0
- package/dist/cjs/core/pagination.js +15 -0
- package/dist/cjs/core/pagination.js.map +1 -0
- package/dist/cjs/generated/types.d.ts +324 -0
- package/dist/cjs/generated/types.d.ts.map +1 -0
- package/dist/cjs/generated/types.js +5 -0
- package/dist/cjs/generated/types.js.map +1 -0
- package/dist/cjs/index.d.ts +23 -0
- package/dist/cjs/index.d.ts.map +1 -0
- package/dist/cjs/index.js +50 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/package.json +1 -0
- package/dist/cjs/resources/account.d.ts +61 -0
- package/dist/cjs/resources/account.d.ts.map +1 -0
- package/dist/cjs/resources/account.js +75 -0
- package/dist/cjs/resources/account.js.map +1 -0
- package/dist/cjs/resources/addresses.d.ts +109 -0
- package/dist/cjs/resources/addresses.d.ts.map +1 -0
- package/dist/cjs/resources/addresses.js +137 -0
- package/dist/cjs/resources/addresses.js.map +1 -0
- package/dist/cjs/resources/catalog.d.ts +30 -0
- package/dist/cjs/resources/catalog.d.ts.map +1 -0
- package/dist/cjs/resources/catalog.js +46 -0
- package/dist/cjs/resources/catalog.js.map +1 -0
- package/dist/cjs/resources/clients.d.ts +84 -0
- package/dist/cjs/resources/clients.d.ts.map +1 -0
- package/dist/cjs/resources/clients.js +102 -0
- package/dist/cjs/resources/clients.js.map +1 -0
- package/dist/cjs/resources/deliveries.d.ts +50 -0
- package/dist/cjs/resources/deliveries.d.ts.map +1 -0
- package/dist/cjs/resources/deliveries.js +43 -0
- package/dist/cjs/resources/deliveries.js.map +1 -0
- package/dist/cjs/resources/transactions.d.ts +28 -0
- package/dist/cjs/resources/transactions.d.ts.map +1 -0
- package/dist/cjs/resources/transactions.js +35 -0
- package/dist/cjs/resources/transactions.js.map +1 -0
- package/dist/cjs/units.d.ts +29 -0
- package/dist/cjs/units.d.ts.map +1 -0
- package/dist/cjs/units.js +62 -0
- package/dist/cjs/units.js.map +1 -0
- package/dist/cjs/version.d.ts +5 -0
- package/dist/cjs/version.d.ts.map +1 -0
- package/dist/cjs/version.js +8 -0
- package/dist/cjs/version.js.map +1 -0
- package/dist/cjs/webhooks.d.ts +77 -0
- package/dist/cjs/webhooks.d.ts.map +1 -0
- package/dist/cjs/webhooks.js +128 -0
- package/dist/cjs/webhooks.js.map +1 -0
- package/dist/esm/client.d.ts +65 -0
- package/dist/esm/client.d.ts.map +1 -0
- package/dist/esm/client.js +85 -0
- package/dist/esm/client.js.map +1 -0
- package/dist/esm/core/errors.d.ts +64 -0
- package/dist/esm/core/errors.d.ts.map +1 -0
- package/dist/esm/core/errors.js +86 -0
- package/dist/esm/core/errors.js.map +1 -0
- package/dist/esm/core/http.d.ts +62 -0
- package/dist/esm/core/http.d.ts.map +1 -0
- package/dist/esm/core/http.js +146 -0
- package/dist/esm/core/http.js.map +1 -0
- package/dist/esm/core/pagination.d.ts +13 -0
- package/dist/esm/core/pagination.d.ts.map +1 -0
- package/dist/esm/core/pagination.js +12 -0
- package/dist/esm/core/pagination.js.map +1 -0
- package/dist/esm/generated/types.d.ts +324 -0
- package/dist/esm/generated/types.d.ts.map +1 -0
- package/dist/esm/generated/types.js +4 -0
- package/dist/esm/generated/types.js.map +1 -0
- package/dist/esm/index.d.ts +23 -0
- package/dist/esm/index.d.ts.map +1 -0
- package/dist/esm/index.js +20 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/resources/account.d.ts +61 -0
- package/dist/esm/resources/account.d.ts.map +1 -0
- package/dist/esm/resources/account.js +69 -0
- package/dist/esm/resources/account.js.map +1 -0
- package/dist/esm/resources/addresses.d.ts +109 -0
- package/dist/esm/resources/addresses.d.ts.map +1 -0
- package/dist/esm/resources/addresses.js +133 -0
- package/dist/esm/resources/addresses.js.map +1 -0
- package/dist/esm/resources/catalog.d.ts +30 -0
- package/dist/esm/resources/catalog.d.ts.map +1 -0
- package/dist/esm/resources/catalog.js +41 -0
- package/dist/esm/resources/catalog.js.map +1 -0
- package/dist/esm/resources/clients.d.ts +84 -0
- package/dist/esm/resources/clients.d.ts.map +1 -0
- package/dist/esm/resources/clients.js +97 -0
- package/dist/esm/resources/clients.js.map +1 -0
- package/dist/esm/resources/deliveries.d.ts +50 -0
- package/dist/esm/resources/deliveries.d.ts.map +1 -0
- package/dist/esm/resources/deliveries.js +39 -0
- package/dist/esm/resources/deliveries.js.map +1 -0
- package/dist/esm/resources/transactions.d.ts +28 -0
- package/dist/esm/resources/transactions.d.ts.map +1 -0
- package/dist/esm/resources/transactions.js +31 -0
- package/dist/esm/resources/transactions.js.map +1 -0
- package/dist/esm/units.d.ts +29 -0
- package/dist/esm/units.d.ts.map +1 -0
- package/dist/esm/units.js +58 -0
- package/dist/esm/units.js.map +1 -0
- package/dist/esm/version.d.ts +5 -0
- package/dist/esm/version.d.ts.map +1 -0
- package/dist/esm/version.js +5 -0
- package/dist/esm/version.js.map +1 -0
- package/dist/esm/webhooks.d.ts +77 -0
- package/dist/esm/webhooks.d.ts.map +1 -0
- package/dist/esm/webhooks.js +120 -0
- package/dist/esm/webhooks.js.map +1 -0
- package/package.json +66 -4
- package/src/client.ts +94 -0
- package/src/core/errors.ts +99 -0
- package/src/core/http.ts +193 -0
- package/src/core/pagination.ts +21 -0
- package/src/generated/types.ts +355 -0
- package/src/index.ts +60 -0
- package/src/resources/account.ts +87 -0
- package/src/resources/addresses.ts +190 -0
- package/src/resources/catalog.ts +47 -0
- package/src/resources/clients.ts +135 -0
- package/src/resources/deliveries.ts +69 -0
- package/src/resources/transactions.ts +33 -0
- package/src/units.ts +56 -0
- package/src/version.ts +5 -0
- package/src/webhooks.ts +133 -0
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import { type HttpClient, type RequestOptions } from '../core/http.js';
|
|
2
|
+
import { type Page } from '../core/pagination.js';
|
|
3
|
+
import type { ApiKey, Client, IssueKeyRequest, IssuedKey, Member, TestWebhookRequest, TestWebhookResult } from '../generated/types.js';
|
|
4
|
+
export interface ListClientsParams {
|
|
5
|
+
/** Размер страницы, до 1000; по умолчанию 100 */
|
|
6
|
+
limit?: number;
|
|
7
|
+
/** Курсор: `next` прошлой страницы */
|
|
8
|
+
after?: string;
|
|
9
|
+
}
|
|
10
|
+
/** Что изменить у клиента; не переданное не меняется */
|
|
11
|
+
export interface UpdateClientParams {
|
|
12
|
+
/** Название; `null` — убрать */
|
|
13
|
+
name?: string | null;
|
|
14
|
+
/** URL вебхука: только https, без логина и пароля */
|
|
15
|
+
webhookUrl?: string;
|
|
16
|
+
}
|
|
17
|
+
export interface RotateSecretParams {
|
|
18
|
+
/** Свой секрет (от 16 символов); без него — сгенерируется */
|
|
19
|
+
secretKey?: string;
|
|
20
|
+
}
|
|
21
|
+
export interface RotateSecretResult {
|
|
22
|
+
/** Новый секрет подписи вебхуков — показывается один раз, сохраните его */
|
|
23
|
+
secretKey: string;
|
|
24
|
+
}
|
|
25
|
+
/** Ключи клиента: доступ к адресам, истории и транзакциям этого клиента. Управляют owner и admin клиента */
|
|
26
|
+
export declare class ClientKeysResource {
|
|
27
|
+
#private;
|
|
28
|
+
constructor(http: HttpClient);
|
|
29
|
+
/** Ключи клиента (без самих ключей — только начало) */
|
|
30
|
+
list(clientId: string, options?: RequestOptions): Promise<ApiKey[]>;
|
|
31
|
+
/**
|
|
32
|
+
* Выпускает ключ клиента. Полный ключ — в `key`, показывается один раз.
|
|
33
|
+
*
|
|
34
|
+
* @example
|
|
35
|
+
* ```ts
|
|
36
|
+
* const { key } = await monitoring.clients.keys.create(clientId, { name: 'backend', expiresInDays: 365 })
|
|
37
|
+
* ```
|
|
38
|
+
*/
|
|
39
|
+
create(clientId: string, params?: IssueKeyRequest, options?: RequestOptions): Promise<IssuedKey>;
|
|
40
|
+
/** Отзывает ключ — он перестаёт работать сразу */
|
|
41
|
+
revoke(clientId: string, keyId: string, options?: RequestOptions): Promise<void>;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Ваш клиент: URL вебхука, секрет подписи, ключи, участники, тестовый вебхук.
|
|
45
|
+
*
|
|
46
|
+
* Права: смотреть — любой участник и ключ клиента; менять — owner и admin клиента по сессии или личному ключу.
|
|
47
|
+
*/
|
|
48
|
+
export declare class ClientsResource {
|
|
49
|
+
#private;
|
|
50
|
+
/** Ключи клиента */
|
|
51
|
+
readonly keys: ClientKeysResource;
|
|
52
|
+
constructor(http: HttpClient);
|
|
53
|
+
/** Страница ваших клиентов: где вы участник; для ключа клиента — он сам */
|
|
54
|
+
list(params?: ListClientsParams, options?: RequestOptions): Promise<Page<Client, string>>;
|
|
55
|
+
/** Все ваши клиенты — страница за страницей */
|
|
56
|
+
iterate(params?: Omit<ListClientsParams, 'after'>, options?: RequestOptions): AsyncGenerator<Client, void, undefined>;
|
|
57
|
+
get(clientId: string, options?: RequestOptions): Promise<Client>;
|
|
58
|
+
/**
|
|
59
|
+
* Меняет название или URL вебхука.
|
|
60
|
+
*
|
|
61
|
+
* @example
|
|
62
|
+
* ```ts
|
|
63
|
+
* await monitoring.clients.update(clientId, { webhookUrl: 'https://example.com/webhooks/monitoring' })
|
|
64
|
+
* ```
|
|
65
|
+
*/
|
|
66
|
+
update(clientId: string, params: UpdateClientParams, options?: RequestOptions): Promise<Client>;
|
|
67
|
+
/** Новый секрет подписи вебхуков. Старый перестаёт действовать сразу — обновите его у себя до следующего вебхука */
|
|
68
|
+
rotateSecret(clientId: string, params?: RotateSecretParams, options?: RequestOptions): Promise<RotateSecretResult>;
|
|
69
|
+
/**
|
|
70
|
+
* Отправляет тестовый вебхук на URL клиента и возвращает результат: доставлен ли, ваш ответ, подпись и точное
|
|
71
|
+
* тело. Тестовый вебхук помечен `"test": true` и заголовком `x-webhook-test: 1` — не зачисляйте его.
|
|
72
|
+
* Не больше 10 в минуту.
|
|
73
|
+
*
|
|
74
|
+
* @example
|
|
75
|
+
* ```ts
|
|
76
|
+
* const r = await monitoring.clients.sendTestWebhook(clientId, { asset: 'USDT' })
|
|
77
|
+
* if (!r.delivery.ok) console.log('ваш сервер ответил', r.delivery.status ?? r.delivery.error)
|
|
78
|
+
* ```
|
|
79
|
+
*/
|
|
80
|
+
sendTestWebhook(clientId: string, params?: TestWebhookRequest, options?: RequestOptions): Promise<TestWebhookResult>;
|
|
81
|
+
/** Участники клиента и их роли */
|
|
82
|
+
members(clientId: string, options?: RequestOptions): Promise<Member[]>;
|
|
83
|
+
}
|
|
84
|
+
//# sourceMappingURL=clients.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"clients.d.ts","sourceRoot":"","sources":["../../../src/resources/clients.ts"],"names":[],"mappings":"AAAA,OAAO,EAAO,KAAK,UAAU,EAAE,KAAK,cAAc,EAAE,MAAM,iBAAiB,CAAA;AAC3E,OAAO,EAAY,KAAK,IAAI,EAAE,MAAM,uBAAuB,CAAA;AAC3D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAA;AAEtI,MAAM,WAAW,iBAAiB;IAChC,iDAAiD;IACjD,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,sCAAsC;IACtC,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAED,wDAAwD;AACxD,MAAM,WAAW,kBAAkB;IACjC,gCAAgC;IAChC,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACpB,qDAAqD;IACrD,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB;AAED,MAAM,WAAW,kBAAkB;IACjC,6DAA6D;IAC7D,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED,MAAM,WAAW,kBAAkB;IACjC,2EAA2E;IAC3E,SAAS,EAAE,MAAM,CAAA;CAClB;AAED,4GAA4G;AAC5G,qBAAa,kBAAkB;;IAE7B,YAAY,IAAI,EAAE,UAAU,EAE3B;IAED,uDAAuD;IACjD,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAGxE;IAED;;;;;;;OAOG;IACH,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,GAAE,eAAoB,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,SAAS,CAAC,CAEnG;IAED,kDAAkD;IAC5C,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAErF;CACF;AAED;;;;GAIG;AACH,qBAAa,eAAe;;IAE1B,oBAAoB;IACpB,QAAQ,CAAC,IAAI,EAAE,kBAAkB,CAAA;IAEjC,YAAY,IAAI,EAAE,UAAU,EAG3B;IAED,2EAA2E;IAC3E,IAAI,CAAC,MAAM,GAAE,iBAAsB,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAE5F;IAED,+CAA+C;IAC/C,OAAO,CAAC,MAAM,GAAE,IAAI,CAAC,iBAAiB,EAAE,OAAO,CAAM,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,cAAc,CAAC,MAAM,EAAE,IAAI,EAAE,SAAS,CAAC,CAExH;IAED,GAAG,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC,CAE/D;IAED;;;;;;;OAOG;IACH,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,kBAAkB,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC,CAE9F;IAED,oHAAoH;IACpH,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,GAAE,kBAAuB,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAErH;IAED;;;;;;;;;;OAUG;IACH,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,GAAE,kBAAuB,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAUvH;IAED,kCAAkC;IAC5B,OAAO,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAG3E;CACF"}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ClientsResource = exports.ClientKeysResource = void 0;
|
|
4
|
+
const http_js_1 = require("../core/http.js");
|
|
5
|
+
const pagination_js_1 = require("../core/pagination.js");
|
|
6
|
+
/** Ключи клиента: доступ к адресам, истории и транзакциям этого клиента. Управляют owner и admin клиента */
|
|
7
|
+
class ClientKeysResource {
|
|
8
|
+
#http;
|
|
9
|
+
constructor(http) {
|
|
10
|
+
this.#http = http;
|
|
11
|
+
}
|
|
12
|
+
/** Ключи клиента (без самих ключей — только начало) */
|
|
13
|
+
async list(clientId, options) {
|
|
14
|
+
const r = await this.#http.request({ method: 'GET', path: `/v1/clients/${(0, http_js_1.seg)(clientId)}/keys`, idempotent: true, options });
|
|
15
|
+
return r.items;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Выпускает ключ клиента. Полный ключ — в `key`, показывается один раз.
|
|
19
|
+
*
|
|
20
|
+
* @example
|
|
21
|
+
* ```ts
|
|
22
|
+
* const { key } = await monitoring.clients.keys.create(clientId, { name: 'backend', expiresInDays: 365 })
|
|
23
|
+
* ```
|
|
24
|
+
*/
|
|
25
|
+
create(clientId, params = {}, options) {
|
|
26
|
+
return this.#http.request({ method: 'POST', path: `/v1/clients/${(0, http_js_1.seg)(clientId)}/keys`, body: params, idempotent: false, options });
|
|
27
|
+
}
|
|
28
|
+
/** Отзывает ключ — он перестаёт работать сразу */
|
|
29
|
+
async revoke(clientId, keyId, options) {
|
|
30
|
+
await this.#http.request({ method: 'DELETE', path: `/v1/clients/${(0, http_js_1.seg)(clientId)}/keys/${(0, http_js_1.seg)(keyId)}`, idempotent: true, options });
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
exports.ClientKeysResource = ClientKeysResource;
|
|
34
|
+
/**
|
|
35
|
+
* Ваш клиент: URL вебхука, секрет подписи, ключи, участники, тестовый вебхук.
|
|
36
|
+
*
|
|
37
|
+
* Права: смотреть — любой участник и ключ клиента; менять — owner и admin клиента по сессии или личному ключу.
|
|
38
|
+
*/
|
|
39
|
+
class ClientsResource {
|
|
40
|
+
#http;
|
|
41
|
+
/** Ключи клиента */
|
|
42
|
+
keys;
|
|
43
|
+
constructor(http) {
|
|
44
|
+
this.#http = http;
|
|
45
|
+
this.keys = new ClientKeysResource(http);
|
|
46
|
+
}
|
|
47
|
+
/** Страница ваших клиентов: где вы участник; для ключа клиента — он сам */
|
|
48
|
+
list(params = {}, options) {
|
|
49
|
+
return this.#http.request({ method: 'GET', path: '/v1/clients', query: { ...params }, idempotent: true, options });
|
|
50
|
+
}
|
|
51
|
+
/** Все ваши клиенты — страница за страницей */
|
|
52
|
+
iterate(params = {}, options) {
|
|
53
|
+
return (0, pagination_js_1.paginate)((after) => this.list({ ...params, after }, options));
|
|
54
|
+
}
|
|
55
|
+
get(clientId, options) {
|
|
56
|
+
return this.#http.request({ method: 'GET', path: `/v1/clients/${(0, http_js_1.seg)(clientId)}`, idempotent: true, options });
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Меняет название или URL вебхука.
|
|
60
|
+
*
|
|
61
|
+
* @example
|
|
62
|
+
* ```ts
|
|
63
|
+
* await monitoring.clients.update(clientId, { webhookUrl: 'https://example.com/webhooks/monitoring' })
|
|
64
|
+
* ```
|
|
65
|
+
*/
|
|
66
|
+
update(clientId, params, options) {
|
|
67
|
+
return this.#http.request({ method: 'PATCH', path: `/v1/clients/${(0, http_js_1.seg)(clientId)}`, body: params, idempotent: true, options });
|
|
68
|
+
}
|
|
69
|
+
/** Новый секрет подписи вебхуков. Старый перестаёт действовать сразу — обновите его у себя до следующего вебхука */
|
|
70
|
+
rotateSecret(clientId, params = {}, options) {
|
|
71
|
+
return this.#http.request({ method: 'POST', path: `/v1/clients/${(0, http_js_1.seg)(clientId)}/secret`, body: params, idempotent: false, options });
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Отправляет тестовый вебхук на URL клиента и возвращает результат: доставлен ли, ваш ответ, подпись и точное
|
|
75
|
+
* тело. Тестовый вебхук помечен `"test": true` и заголовком `x-webhook-test: 1` — не зачисляйте его.
|
|
76
|
+
* Не больше 10 в минуту.
|
|
77
|
+
*
|
|
78
|
+
* @example
|
|
79
|
+
* ```ts
|
|
80
|
+
* const r = await monitoring.clients.sendTestWebhook(clientId, { asset: 'USDT' })
|
|
81
|
+
* if (!r.delivery.ok) console.log('ваш сервер ответил', r.delivery.status ?? r.delivery.error)
|
|
82
|
+
* ```
|
|
83
|
+
*/
|
|
84
|
+
sendTestWebhook(clientId, params = {}, options) {
|
|
85
|
+
return this.#http.request({
|
|
86
|
+
method: 'POST',
|
|
87
|
+
path: `/v1/clients/${(0, http_js_1.seg)(clientId)}/webhooks/test`,
|
|
88
|
+
body: params,
|
|
89
|
+
idempotent: false,
|
|
90
|
+
// 502 — «не доставлен»: это результат проверки, а не ошибка запроса
|
|
91
|
+
acceptStatuses: [502],
|
|
92
|
+
options,
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
/** Участники клиента и их роли */
|
|
96
|
+
async members(clientId, options) {
|
|
97
|
+
const r = await this.#http.request({ method: 'GET', path: `/v1/clients/${(0, http_js_1.seg)(clientId)}/members`, idempotent: true, options });
|
|
98
|
+
return r.items;
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
exports.ClientsResource = ClientsResource;
|
|
102
|
+
//# sourceMappingURL=clients.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"clients.js","sourceRoot":"","sources":["../../../src/resources/clients.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { type HttpClient, type RequestOptions } from '../core/http.js';
|
|
2
|
+
import { type Page } from '../core/pagination.js';
|
|
3
|
+
import type { Delivery, DeliveryDetail, DeliveryStatus } from '../generated/types.js';
|
|
4
|
+
/** Фильтры истории; все необязательны и сочетаются */
|
|
5
|
+
export interface DeliveryFilter {
|
|
6
|
+
/** `delivered` — вы ответили 2xx, `retrying` — будет повтор, `failed` — повторы исчерпаны */
|
|
7
|
+
status?: DeliveryStatus;
|
|
8
|
+
/** Сеть: slug или CAIP-2 */
|
|
9
|
+
network?: string;
|
|
10
|
+
/** Символ актива */
|
|
11
|
+
asset?: string;
|
|
12
|
+
/** Хеш транзакции */
|
|
13
|
+
tx?: string;
|
|
14
|
+
/** Отправитель или получатель */
|
|
15
|
+
address?: string;
|
|
16
|
+
/** Первая попытка не раньше (дата или время) */
|
|
17
|
+
since?: Date | string;
|
|
18
|
+
/** Первая попытка раньше (не включая) */
|
|
19
|
+
until?: Date | string;
|
|
20
|
+
}
|
|
21
|
+
export interface ListDeliveriesParams extends DeliveryFilter {
|
|
22
|
+
/** Размер страницы, до 500; по умолчанию 100 */
|
|
23
|
+
limit?: number;
|
|
24
|
+
/** Курсор: `next` прошлой страницы */
|
|
25
|
+
before?: number;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* История вебхуков клиента: что, когда и куда отправлено, сколько было попыток и что вы ответили.
|
|
29
|
+
* Повторы одного вебхука — одна запись. Хранится 90 дней.
|
|
30
|
+
*/
|
|
31
|
+
export declare class DeliveriesResource {
|
|
32
|
+
#private;
|
|
33
|
+
constructor(http: HttpClient);
|
|
34
|
+
/**
|
|
35
|
+
* Страница истории, новые сверху.
|
|
36
|
+
*
|
|
37
|
+
* @example
|
|
38
|
+
* ```ts
|
|
39
|
+
* const { items } = await monitoring.deliveries.list(clientId, { status: 'failed', since: new Date(Date.now() - 86_400_000) })
|
|
40
|
+
* ```
|
|
41
|
+
*/
|
|
42
|
+
list(clientId: string, params?: ListDeliveriesParams, options?: RequestOptions): Promise<Page<Delivery, number>>;
|
|
43
|
+
/** Вся история по фильтру — от новых к старым, страница за страницей */
|
|
44
|
+
iterate(clientId: string, filter?: DeliveryFilter & {
|
|
45
|
+
limit?: number;
|
|
46
|
+
}, options?: RequestOptions): AsyncGenerator<Delivery, void, undefined>;
|
|
47
|
+
/** Одна запись с URL последней попытки и точным телом запроса */
|
|
48
|
+
get(clientId: string, deliveryId: number, options?: RequestOptions): Promise<DeliveryDetail>;
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=deliveries.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deliveries.d.ts","sourceRoot":"","sources":["../../../src/resources/deliveries.ts"],"names":[],"mappings":"AAAA,OAAO,EAAO,KAAK,UAAU,EAAE,KAAK,cAAc,EAAE,MAAM,iBAAiB,CAAA;AAC3E,OAAO,EAAY,KAAK,IAAI,EAAE,MAAM,uBAAuB,CAAA;AAC3D,OAAO,KAAK,EAAE,QAAQ,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAA;AAErF,sDAAsD;AACtD,MAAM,WAAW,cAAc;IAC7B,6FAA6F;IAC7F,MAAM,CAAC,EAAE,cAAc,CAAA;IACvB,4BAA4B;IAC5B,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,oBAAoB;IACpB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,qBAAqB;IACrB,EAAE,CAAC,EAAE,MAAM,CAAA;IACX,iCAAiC;IACjC,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,gDAAgD;IAChD,KAAK,CAAC,EAAE,IAAI,GAAG,MAAM,CAAA;IACrB,yCAAyC;IACzC,KAAK,CAAC,EAAE,IAAI,GAAG,MAAM,CAAA;CACtB;AAED,MAAM,WAAW,oBAAqB,SAAQ,cAAc;IAC1D,gDAAgD;IAChD,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,sCAAsC;IACtC,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAID;;;GAGG;AACH,qBAAa,kBAAkB;;IAE7B,YAAY,IAAI,EAAE,UAAU,EAE3B;IAED;;;;;;;OAOG;IACH,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,GAAE,oBAAyB,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAQnH;IAED,wEAAwE;IACxE,OAAO,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,GAAE,cAAc,GAAG;QAAE,KAAK,CAAC,EAAE,MAAM,CAAA;KAAO,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,cAAc,CAAC,QAAQ,EAAE,IAAI,EAAE,SAAS,CAAC,CAE/I;IAED,iEAAiE;IACjE,GAAG,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,cAAc,CAAC,CAE3F;CACF"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DeliveriesResource = void 0;
|
|
4
|
+
const http_js_1 = require("../core/http.js");
|
|
5
|
+
const pagination_js_1 = require("../core/pagination.js");
|
|
6
|
+
const iso = (v) => (v instanceof Date ? v.toISOString() : v);
|
|
7
|
+
/**
|
|
8
|
+
* История вебхуков клиента: что, когда и куда отправлено, сколько было попыток и что вы ответили.
|
|
9
|
+
* Повторы одного вебхука — одна запись. Хранится 90 дней.
|
|
10
|
+
*/
|
|
11
|
+
class DeliveriesResource {
|
|
12
|
+
#http;
|
|
13
|
+
constructor(http) {
|
|
14
|
+
this.#http = http;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Страница истории, новые сверху.
|
|
18
|
+
*
|
|
19
|
+
* @example
|
|
20
|
+
* ```ts
|
|
21
|
+
* const { items } = await monitoring.deliveries.list(clientId, { status: 'failed', since: new Date(Date.now() - 86_400_000) })
|
|
22
|
+
* ```
|
|
23
|
+
*/
|
|
24
|
+
list(clientId, params = {}, options) {
|
|
25
|
+
return this.#http.request({
|
|
26
|
+
method: 'GET',
|
|
27
|
+
path: `/v1/clients/${(0, http_js_1.seg)(clientId)}/deliveries`,
|
|
28
|
+
query: { ...params, since: iso(params.since), until: iso(params.until) },
|
|
29
|
+
idempotent: true,
|
|
30
|
+
options,
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
/** Вся история по фильтру — от новых к старым, страница за страницей */
|
|
34
|
+
iterate(clientId, filter = {}, options) {
|
|
35
|
+
return (0, pagination_js_1.paginate)((before) => this.list(clientId, { ...filter, before }, options));
|
|
36
|
+
}
|
|
37
|
+
/** Одна запись с URL последней попытки и точным телом запроса */
|
|
38
|
+
get(clientId, deliveryId, options) {
|
|
39
|
+
return this.#http.request({ method: 'GET', path: `/v1/clients/${(0, http_js_1.seg)(clientId)}/deliveries/${(0, http_js_1.seg)(deliveryId)}`, idempotent: true, options });
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
exports.DeliveriesResource = DeliveriesResource;
|
|
43
|
+
//# sourceMappingURL=deliveries.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deliveries.js","sourceRoot":"","sources":["../../../src/resources/deliveries.ts"],"names":[],"mappings":";;;AAAA,6CAA2E;AAC3E,yDAA2D;AA4B3D,MAAM,GAAG,GAAG,CAAC,CAA4B,EAAE,EAAE,CAAC,CAAC,CAAC,YAAY,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;AAEvF;;;GAGG;AACH;IACW,KAAK,CAAY;IAC1B,YAAY,IAAgB;QAC1B,IAAI,CAAC,KAAK,GAAG,IAAI,CAAA;IACnB,CAAC;IAED;;;;;;;OAOG;IACH,IAAI,CAAC,QAAgB,EAAE,MAAM,GAAyB,EAAE,EAAE,OAAwB;QAChF,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC;YACxB,MAAM,EAAE,KAAK;YACb,IAAI,EAAE,eAAe,IAAA,aAAG,EAAC,QAAQ,CAAC,aAAa;YAC/C,KAAK,EAAE,EAAE,GAAG,MAAM,EAAE,KAAK,EAAE,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;YACxE,UAAU,EAAE,IAAI;YAChB,OAAO;SACR,CAAC,CAAA;IACJ,CAAC;IAED,wEAAwE;IACxE,OAAO,CAAC,QAAgB,EAAE,MAAM,GAAwC,EAAE,EAAE,OAAwB;QAClG,OAAO,IAAA,wBAAQ,EAAmB,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,GAAG,MAAM,EAAE,MAAM,EAAE,EAAE,OAAO,CAAC,CAAC,CAAA;IACpG,CAAC;IAED,iEAAiE;IACjE,GAAG,CAAC,QAAgB,EAAE,UAAkB,EAAE,OAAwB;QAChE,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,eAAe,IAAA,aAAG,EAAC,QAAQ,CAAC,eAAe,IAAA,aAAG,EAAC,UAAU,CAAC,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAA;IAC7I,CAAC;CACF"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { type HttpClient, type RequestOptions } from '../core/http.js';
|
|
2
|
+
import type { Transaction } from '../generated/types.js';
|
|
3
|
+
/** Любая транзакция сети по хешу — не только те, о которых пришёл вебхук */
|
|
4
|
+
export declare class TransactionsResource {
|
|
5
|
+
#private;
|
|
6
|
+
constructor(http: HttpClient);
|
|
7
|
+
/**
|
|
8
|
+
* Статус, блок, подтверждения, финальность, комиссия и все переводы внутри транзакции; для ваших адресов —
|
|
9
|
+
* направление и вебхуки, которые мы по ней отправили.
|
|
10
|
+
*
|
|
11
|
+
* `final: true` — транзакцию уже не отменить: в TRON блок солидифицирован (около минуты), в EVM —
|
|
12
|
+
* финализирован (Ethereum — около 13 минут). Крупные суммы зачисляйте после `final`.
|
|
13
|
+
*
|
|
14
|
+
* Не больше 60 запросов в минуту на ключ; при превышении SDK подождёт и повторит.
|
|
15
|
+
*
|
|
16
|
+
* @param network - slug (`tron`, `ethereum`) или CAIP-2
|
|
17
|
+
* @param hash - EVM — `0x` + 64 hex; TRON — 64 hex (можно с `0x`)
|
|
18
|
+
* @throws {@link MonitoringApiError} 404 — такой транзакции в сети нет
|
|
19
|
+
*
|
|
20
|
+
* @example
|
|
21
|
+
* ```ts
|
|
22
|
+
* const tx = await monitoring.transactions.get('tron', webhook.tx.id)
|
|
23
|
+
* if (tx.status === 'success' && tx.final) credit(webhook)
|
|
24
|
+
* ```
|
|
25
|
+
*/
|
|
26
|
+
get(network: string, hash: string, options?: RequestOptions): Promise<Transaction>;
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=transactions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transactions.d.ts","sourceRoot":"","sources":["../../../src/resources/transactions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAO,KAAK,UAAU,EAAE,KAAK,cAAc,EAAE,MAAM,iBAAiB,CAAA;AAC3E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAA;AAExD,4EAA4E;AAC5E,qBAAa,oBAAoB;;IAE/B,YAAY,IAAI,EAAE,UAAU,EAE3B;IAED;;;;;;;;;;;;;;;;;;OAkBG;IACH,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,WAAW,CAAC,CAEjF;CACF"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.TransactionsResource = void 0;
|
|
4
|
+
const http_js_1 = require("../core/http.js");
|
|
5
|
+
/** Любая транзакция сети по хешу — не только те, о которых пришёл вебхук */
|
|
6
|
+
class TransactionsResource {
|
|
7
|
+
#http;
|
|
8
|
+
constructor(http) {
|
|
9
|
+
this.#http = http;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Статус, блок, подтверждения, финальность, комиссия и все переводы внутри транзакции; для ваших адресов —
|
|
13
|
+
* направление и вебхуки, которые мы по ней отправили.
|
|
14
|
+
*
|
|
15
|
+
* `final: true` — транзакцию уже не отменить: в TRON блок солидифицирован (около минуты), в EVM —
|
|
16
|
+
* финализирован (Ethereum — около 13 минут). Крупные суммы зачисляйте после `final`.
|
|
17
|
+
*
|
|
18
|
+
* Не больше 60 запросов в минуту на ключ; при превышении SDK подождёт и повторит.
|
|
19
|
+
*
|
|
20
|
+
* @param network - slug (`tron`, `ethereum`) или CAIP-2
|
|
21
|
+
* @param hash - EVM — `0x` + 64 hex; TRON — 64 hex (можно с `0x`)
|
|
22
|
+
* @throws {@link MonitoringApiError} 404 — такой транзакции в сети нет
|
|
23
|
+
*
|
|
24
|
+
* @example
|
|
25
|
+
* ```ts
|
|
26
|
+
* const tx = await monitoring.transactions.get('tron', webhook.tx.id)
|
|
27
|
+
* if (tx.status === 'success' && tx.final) credit(webhook)
|
|
28
|
+
* ```
|
|
29
|
+
*/
|
|
30
|
+
get(network, hash, options) {
|
|
31
|
+
return this.#http.request({ method: 'GET', path: `/v1/networks/${(0, http_js_1.seg)(network)}/transactions/${(0, http_js_1.seg)(hash)}`, idempotent: true, options });
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
exports.TransactionsResource = TransactionsResource;
|
|
35
|
+
//# sourceMappingURL=transactions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transactions.js","sourceRoot":"","sources":["../../../src/resources/transactions.ts"],"names":[],"mappings":";;;AAAA,6CAA2E;AAG3E,4EAA4E;AAC5E;IACW,KAAK,CAAY;IAC1B,YAAY,IAAgB;QAC1B,IAAI,CAAC,KAAK,GAAG,IAAI,CAAA;IACnB,CAAC;IAED;;;;;;;;;;;;;;;;;;OAkBG;IACH,GAAG,CAAC,OAAe,EAAE,IAAY,EAAE,OAAwB;QACzD,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,gBAAgB,IAAA,aAAG,EAAC,OAAO,CAAC,iBAAiB,IAAA,aAAG,EAAC,IAAI,CAAC,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAA;IACzI,CAAC;CACF"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Суммы в API и вебхуках — строки в минимальных единицах (sun, wei; у USDT 6 знаков после запятой): uint256 не
|
|
3
|
+
* помещается в `number`. Эти функции переводят их в привычный вид и обратно без потери точности.
|
|
4
|
+
* Знаки после запятой актива — `decimals` из `monitoring.assets.list()`.
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Минимальные единицы → строка в монетах.
|
|
8
|
+
*
|
|
9
|
+
* @example
|
|
10
|
+
* ```ts
|
|
11
|
+
* formatUnits('100000000', 6) // '100' — 100 USDT
|
|
12
|
+
* formatUnits('1500000', 6) // '1.5'
|
|
13
|
+
* formatUnits('10090000000000000', 18) // '0.01009' — ETH
|
|
14
|
+
* ```
|
|
15
|
+
*/
|
|
16
|
+
export declare function formatUnits(value: string | bigint, decimals: number): string;
|
|
17
|
+
/**
|
|
18
|
+
* Строка в монетах → минимальные единицы.
|
|
19
|
+
*
|
|
20
|
+
* @throws RangeError — больше знаков после запятой, чем у актива, или не число
|
|
21
|
+
*
|
|
22
|
+
* @example
|
|
23
|
+
* ```ts
|
|
24
|
+
* parseUnits('1.5', 6) // '1500000'
|
|
25
|
+
* parseUnits('100', 6) // '100000000'
|
|
26
|
+
* ```
|
|
27
|
+
*/
|
|
28
|
+
export declare function parseUnits(amount: string, decimals: number): string;
|
|
29
|
+
//# sourceMappingURL=units.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"units.d.ts","sourceRoot":"","sources":["../../src/units.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH;;;;;;;;;GASG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAY5E;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAOnE"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Суммы в API и вебхуках — строки в минимальных единицах (sun, wei; у USDT 6 знаков после запятой): uint256 не
|
|
4
|
+
* помещается в `number`. Эти функции переводят их в привычный вид и обратно без потери точности.
|
|
5
|
+
* Знаки после запятой актива — `decimals` из `monitoring.assets.list()`.
|
|
6
|
+
*/
|
|
7
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
+
exports.formatUnits = formatUnits;
|
|
9
|
+
exports.parseUnits = parseUnits;
|
|
10
|
+
const INTEGER = /^-?\d+$/;
|
|
11
|
+
const DECIMAL = /^(\d+)(?:\.(\d+))?$/;
|
|
12
|
+
/**
|
|
13
|
+
* Минимальные единицы → строка в монетах.
|
|
14
|
+
*
|
|
15
|
+
* @example
|
|
16
|
+
* ```ts
|
|
17
|
+
* formatUnits('100000000', 6) // '100' — 100 USDT
|
|
18
|
+
* formatUnits('1500000', 6) // '1.5'
|
|
19
|
+
* formatUnits('10090000000000000', 18) // '0.01009' — ETH
|
|
20
|
+
* ```
|
|
21
|
+
*/
|
|
22
|
+
function formatUnits(value, decimals) {
|
|
23
|
+
assertDecimals(decimals);
|
|
24
|
+
const raw = typeof value === 'bigint' ? value.toString() : value.trim();
|
|
25
|
+
if (!INTEGER.test(raw))
|
|
26
|
+
throw new RangeError(`formatUnits: integer in minimal units expected, got ${JSON.stringify(value)}`);
|
|
27
|
+
const negative = raw.startsWith('-');
|
|
28
|
+
const digits = (negative ? raw.slice(1) : raw).replace(/^0+(?=\d)/, '');
|
|
29
|
+
if (decimals === 0)
|
|
30
|
+
return (negative && digits !== '0' ? '-' : '') + digits;
|
|
31
|
+
const padded = digits.padStart(decimals + 1, '0');
|
|
32
|
+
const whole = padded.slice(0, -decimals);
|
|
33
|
+
const fraction = padded.slice(-decimals).replace(/0+$/, '');
|
|
34
|
+
const sign = negative && (whole !== '0' || fraction) ? '-' : '';
|
|
35
|
+
return `${sign}${whole}${fraction ? `.${fraction}` : ''}`;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Строка в монетах → минимальные единицы.
|
|
39
|
+
*
|
|
40
|
+
* @throws RangeError — больше знаков после запятой, чем у актива, или не число
|
|
41
|
+
*
|
|
42
|
+
* @example
|
|
43
|
+
* ```ts
|
|
44
|
+
* parseUnits('1.5', 6) // '1500000'
|
|
45
|
+
* parseUnits('100', 6) // '100000000'
|
|
46
|
+
* ```
|
|
47
|
+
*/
|
|
48
|
+
function parseUnits(amount, decimals) {
|
|
49
|
+
assertDecimals(decimals);
|
|
50
|
+
const m = DECIMAL.exec(amount.trim());
|
|
51
|
+
if (!m)
|
|
52
|
+
throw new RangeError(`parseUnits: non-negative decimal expected, got ${JSON.stringify(amount)}`);
|
|
53
|
+
const fraction = m[2] ?? '';
|
|
54
|
+
if (fraction.length > decimals)
|
|
55
|
+
throw new RangeError(`parseUnits: ${amount} has more than ${decimals} decimal places`);
|
|
56
|
+
return BigInt(m[1] + fraction.padEnd(decimals, '0')).toString();
|
|
57
|
+
}
|
|
58
|
+
function assertDecimals(decimals) {
|
|
59
|
+
if (!Number.isInteger(decimals) || decimals < 0 || decimals > 255)
|
|
60
|
+
throw new RangeError(`decimals: integer 0..255 expected, got ${decimals}`);
|
|
61
|
+
}
|
|
62
|
+
//# sourceMappingURL=units.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"units.js","sourceRoot":"","sources":["../../src/units.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;;AAEH,MAAM,OAAO,GAAG,SAAS,CAAA;AACzB,MAAM,OAAO,GAAG,qBAAqB,CAAA;AAErC;;;;;;;;;GASG;AACH,qBAA4B,KAAsB,EAAE,QAAgB;IAClE,cAAc,CAAC,QAAQ,CAAC,CAAA;IACxB,MAAM,GAAG,GAAG,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,CAAA;IACvE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC;QAAE,MAAM,IAAI,UAAU,CAAC,uDAAuD,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;IAC5H,MAAM,QAAQ,GAAG,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAA;IACpC,MAAM,MAAM,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC,CAAA;IACvE,IAAI,QAAQ,KAAK,CAAC;QAAE,OAAO,CAAC,QAAQ,IAAI,MAAM,KAAK,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,MAAM,CAAA;IAC3E,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,QAAQ,GAAG,CAAC,EAAE,GAAG,CAAC,CAAA;IACjD,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAA;IACxC,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAA;IAC3D,MAAM,IAAI,GAAG,QAAQ,IAAI,CAAC,KAAK,KAAK,GAAG,IAAI,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAA;IAC/D,OAAO,GAAG,IAAI,GAAG,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAC,IAAI,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAA;AAC3D,CAAC;AAED;;;;;;;;;;GAUG;AACH,oBAA2B,MAAc,EAAE,QAAgB;IACzD,cAAc,CAAC,QAAQ,CAAC,CAAA;IACxB,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAA;IACrC,IAAI,CAAC,CAAC;QAAE,MAAM,IAAI,UAAU,CAAC,kDAAkD,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;IACxG,MAAM,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAA;IAC3B,IAAI,QAAQ,CAAC,MAAM,GAAG,QAAQ;QAAE,MAAM,IAAI,UAAU,CAAC,eAAe,MAAM,kBAAkB,QAAQ,iBAAiB,CAAC,CAAA;IACtH,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC,CAAE,GAAG,QAAQ,CAAC,MAAM,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAA;AAClE,CAAC;AAED,SAAS,cAAc,CAAC,QAAgB;IACtC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,QAAQ,GAAG,CAAC,IAAI,QAAQ,GAAG,GAAG;QAAE,MAAM,IAAI,UAAU,CAAC,0CAA0C,QAAQ,EAAE,CAAC,CAAA;AAC/I,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/** Версия SDK: уходит в заголовке `user-agent`. Тест сверяет её с package.json */
|
|
2
|
+
export declare const SDK_VERSION = "0.1.0";
|
|
3
|
+
/** Адрес API по умолчанию */
|
|
4
|
+
export declare const DEFAULT_BASE_URL = "https://monitoring.v3.finance";
|
|
5
|
+
//# sourceMappingURL=version.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../../src/version.ts"],"names":[],"mappings":"AAAA,kFAAkF;AAClF,eAAO,MAAM,WAAW,UAAU,CAAA;AAElC,6BAA6B;AAC7B,eAAO,MAAM,gBAAgB,kCAAkC,CAAA"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DEFAULT_BASE_URL = exports.SDK_VERSION = void 0;
|
|
4
|
+
/** Версия SDK: уходит в заголовке `user-agent`. Тест сверяет её с package.json */
|
|
5
|
+
exports.SDK_VERSION = '0.1.0';
|
|
6
|
+
/** Адрес API по умолчанию */
|
|
7
|
+
exports.DEFAULT_BASE_URL = 'https://monitoring.v3.finance';
|
|
8
|
+
//# sourceMappingURL=version.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"version.js","sourceRoot":"","sources":["../../src/version.ts"],"names":[],"mappings":";;;AAAA,kFAAkF;AACrE,QAAA,WAAW,GAAG,OAAO,CAAA;AAElC,6BAA6B;AAChB,QAAA,gBAAgB,GAAG,+BAA+B,CAAA"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Приём вебхуков: проверка подписи и разбор тела. Работает без клиента API и без сети — нужен только секрет
|
|
3
|
+
* подписи клиента. Использует WebCrypto: Node.js 20+, Bun, Deno, Cloudflare Workers.
|
|
4
|
+
*/
|
|
5
|
+
import type { WebhookPayload } from './generated/types.js';
|
|
6
|
+
/** Заголовки вебхука */
|
|
7
|
+
export declare const WEBHOOK_HEADERS: {
|
|
8
|
+
/** HMAC-SHA256 сырого тела секретом клиента, hex в нижнем регистре */
|
|
9
|
+
readonly signature: 'x-signature';
|
|
10
|
+
/** id клиента */
|
|
11
|
+
readonly clientId: 'x-client-id';
|
|
12
|
+
/** `1` у тестового вебхука — такой не зачислять */
|
|
13
|
+
readonly test: 'x-webhook-test';
|
|
14
|
+
};
|
|
15
|
+
/**
|
|
16
|
+
* Тело вебхука ровно как пришло — сырые байты или строка. Не `JSON.parse` + `JSON.stringify`: подпись считается
|
|
17
|
+
* по исходным байтам, и любое переформатирование её ломает.
|
|
18
|
+
*/
|
|
19
|
+
export type WebhookBody = string | Uint8Array | ArrayBuffer;
|
|
20
|
+
/**
|
|
21
|
+
* Откуда взять подпись: значение заголовка `x-signature` или все заголовки запроса — Fetch `Headers`
|
|
22
|
+
* (Hono, Next.js, Workers) или объект Node.js (`req.headers` в Express, Fastify).
|
|
23
|
+
*/
|
|
24
|
+
export type SignatureSource = string | null | undefined | Headers | Record<string, string | string[] | undefined>;
|
|
25
|
+
/**
|
|
26
|
+
* Подпись тела секретом клиента — как её считает сервис. Нужна в тестах вашего обработчика вебхуков.
|
|
27
|
+
*
|
|
28
|
+
* @example
|
|
29
|
+
* ```ts
|
|
30
|
+
* const body = JSON.stringify({ tx: { …, id: 'test' } })
|
|
31
|
+
* await fetch('http://localhost:3000/webhooks', { method: 'POST', body, headers: { 'x-signature': await signWebhookBody(body, secret) } })
|
|
32
|
+
* ```
|
|
33
|
+
*/
|
|
34
|
+
export declare function signWebhookBody(body: WebhookBody, secret: string): Promise<string>;
|
|
35
|
+
/**
|
|
36
|
+
* Проверяет подпись вебхука: `true` — тело пришло от сервиса и не изменено.
|
|
37
|
+
*
|
|
38
|
+
* @param body - сырое тело запроса
|
|
39
|
+
* @param signature - заголовок `x-signature` или все заголовки запроса
|
|
40
|
+
* @param secret - секрет подписи клиента
|
|
41
|
+
*/
|
|
42
|
+
export declare function verifyWebhookSignature(body: WebhookBody, signature: SignatureSource, secret: string): Promise<boolean>;
|
|
43
|
+
/**
|
|
44
|
+
* Проверяет подпись и возвращает разобранный вебхук.
|
|
45
|
+
*
|
|
46
|
+
* Дальше — по правилам приёма: тестовый вебхук ({@link isTestWebhook}) не зачислять; один и тот же вебхук может
|
|
47
|
+
* прийти повторно — обрабатывайте идемпотентно по {@link webhookIdempotencyKey}; ответьте 2xx в течение 15 секунд.
|
|
48
|
+
* Вебхук уходит, как только перевод попал в блок, — для крупных сумм дождитесь финальности
|
|
49
|
+
* (`monitoring.transactions.get(...).final`).
|
|
50
|
+
*
|
|
51
|
+
* @throws {@link WebhookSignatureError} подпись не совпала — ответьте 401 и ничего не зачисляйте
|
|
52
|
+
*
|
|
53
|
+
* @example Express — нужен сырой body
|
|
54
|
+
* ```ts
|
|
55
|
+
* app.post('/webhooks/monitoring', express.raw({ type: 'application/json' }), async (req, res) => {
|
|
56
|
+
* const event = await parseWebhook(req.body, req.headers, process.env.MONITORING_WEBHOOK_SECRET!)
|
|
57
|
+
* if (!isTestWebhook(event)) await creditOnce(webhookIdempotencyKey(event), event.tx)
|
|
58
|
+
* res.sendStatus(200)
|
|
59
|
+
* })
|
|
60
|
+
* ```
|
|
61
|
+
*
|
|
62
|
+
* @example Hono, Next.js route handler, Cloudflare Workers
|
|
63
|
+
* ```ts
|
|
64
|
+
* const event = await parseWebhook(await request.text(), request.headers, env.MONITORING_WEBHOOK_SECRET)
|
|
65
|
+
* ```
|
|
66
|
+
*/
|
|
67
|
+
export declare function parseWebhook(body: WebhookBody, signature: SignatureSource, secret: string): Promise<WebhookPayload>;
|
|
68
|
+
/** Тестовый вебхук (из панели или `clients.sendTestWebhook`) — такой не зачислять */
|
|
69
|
+
export declare function isTestWebhook(event: WebhookPayload): boolean;
|
|
70
|
+
/**
|
|
71
|
+
* Ключ идемпотентности вебхука: сеть, транзакция и номер лога. Один перевод — один ключ, даже если вебхук пришёл
|
|
72
|
+
* несколько раз. В одной транзакции EVM может быть несколько переводов токенов — у них разный `logIndex`.
|
|
73
|
+
*
|
|
74
|
+
* @example `"TRON:1249cb…a5fc45:"`, `"ETHEREUM:0x3fbc…1d57:7"`
|
|
75
|
+
*/
|
|
76
|
+
export declare function webhookIdempotencyKey(event: WebhookPayload): string;
|
|
77
|
+
//# sourceMappingURL=webhooks.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"webhooks.d.ts","sourceRoot":"","sources":["../../src/webhooks.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAE1D,wBAAwB;AACxB,eAAO,MAAM,eAAe;IAC1B,sEAAsE;aACtE,SAAS,EAAE,aAAa;IACxB,iBAAiB;aACjB,QAAQ,EAAE,aAAa;IACvB,mDAAmD;aACnD,IAAI,EAAE,gBAAgB;CACd,CAAA;AAEV;;;GAGG;AACH,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,UAAU,GAAG,WAAW,CAAA;AAE3D;;;GAGG;AACH,MAAM,MAAM,eAAe,GAAG,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,SAAS,CAAC,CAAA;AA0BjH;;;;;;;;GAQG;AACH,wBAAsB,eAAe,CAAC,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAIxF;AAED;;;;;;GAMG;AACH,wBAAsB,sBAAsB,CAAC,IAAI,EAAE,WAAW,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAI5H;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAsB,YAAY,CAAC,IAAI,EAAE,WAAW,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,CAWzH;AAED,qFAAqF;AACrF,wBAAgB,aAAa,CAAC,KAAK,EAAE,cAAc,GAAG,OAAO,CAE5D;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,cAAc,GAAG,MAAM,CAEnE"}
|