@v3finance/monitoring-sdk 0.1.0 → 0.2.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.
Files changed (154) hide show
  1. package/CHANGELOG.md +21 -11
  2. package/README.md +223 -148
  3. package/dist/cjs/client.d.ts +23 -42
  4. package/dist/cjs/client.d.ts.map +1 -1
  5. package/dist/cjs/client.js +44 -53
  6. package/dist/cjs/client.js.map +1 -1
  7. package/dist/cjs/core/errors.d.ts +18 -18
  8. package/dist/cjs/core/errors.d.ts.map +1 -1
  9. package/dist/cjs/core/errors.js +17 -17
  10. package/dist/cjs/core/errors.js.map +1 -1
  11. package/dist/cjs/core/http.d.ts +22 -26
  12. package/dist/cjs/core/http.d.ts.map +1 -1
  13. package/dist/cjs/core/http.js +28 -36
  14. package/dist/cjs/core/http.js.map +1 -1
  15. package/dist/cjs/core/pagination.d.ts +6 -7
  16. package/dist/cjs/core/pagination.d.ts.map +1 -1
  17. package/dist/cjs/core/pagination.js +1 -1
  18. package/dist/cjs/core/pagination.js.map +1 -1
  19. package/dist/cjs/core/scope.d.ts +8 -0
  20. package/dist/cjs/core/scope.d.ts.map +1 -0
  21. package/dist/cjs/core/scope.js +3 -0
  22. package/dist/cjs/core/scope.js.map +1 -0
  23. package/dist/cjs/generated/types.d.ts +129 -117
  24. package/dist/cjs/generated/types.d.ts.map +1 -1
  25. package/dist/cjs/generated/types.js +1 -1
  26. package/dist/cjs/generated/types.js.map +1 -1
  27. package/dist/cjs/index.d.ts +6 -6
  28. package/dist/cjs/index.d.ts.map +1 -1
  29. package/dist/cjs/index.js +13 -16
  30. package/dist/cjs/index.js.map +1 -1
  31. package/dist/cjs/resources/account.d.ts +12 -51
  32. package/dist/cjs/resources/account.d.ts.map +1 -1
  33. package/dist/cjs/resources/account.js +17 -61
  34. package/dist/cjs/resources/account.js.map +1 -1
  35. package/dist/cjs/resources/addresses.d.ts +49 -65
  36. package/dist/cjs/resources/addresses.d.ts.map +1 -1
  37. package/dist/cjs/resources/addresses.js +60 -69
  38. package/dist/cjs/resources/addresses.js.map +1 -1
  39. package/dist/cjs/resources/catalog.d.ts +17 -10
  40. package/dist/cjs/resources/catalog.d.ts.map +1 -1
  41. package/dist/cjs/resources/catalog.js +23 -17
  42. package/dist/cjs/resources/catalog.js.map +1 -1
  43. package/dist/cjs/resources/deliveries.d.ts +34 -23
  44. package/dist/cjs/resources/deliveries.d.ts.map +1 -1
  45. package/dist/cjs/resources/deliveries.js +27 -17
  46. package/dist/cjs/resources/deliveries.js.map +1 -1
  47. package/dist/cjs/resources/transactions.d.ts +14 -14
  48. package/dist/cjs/resources/transactions.d.ts.map +1 -1
  49. package/dist/cjs/resources/transactions.js +15 -16
  50. package/dist/cjs/resources/transactions.js.map +1 -1
  51. package/dist/cjs/resources/webhooks.d.ts +22 -0
  52. package/dist/cjs/resources/webhooks.d.ts.map +1 -0
  53. package/dist/cjs/resources/webhooks.js +35 -0
  54. package/dist/cjs/resources/webhooks.js.map +1 -0
  55. package/dist/cjs/units.d.ts +11 -11
  56. package/dist/cjs/units.js +14 -14
  57. package/dist/cjs/units.js.map +1 -1
  58. package/dist/cjs/version.d.ts +3 -3
  59. package/dist/cjs/version.d.ts.map +1 -1
  60. package/dist/cjs/version.js +3 -3
  61. package/dist/cjs/version.js.map +1 -1
  62. package/dist/cjs/webhooks.d.ts +33 -28
  63. package/dist/cjs/webhooks.d.ts.map +1 -1
  64. package/dist/cjs/webhooks.js +33 -28
  65. package/dist/cjs/webhooks.js.map +1 -1
  66. package/dist/esm/client.d.ts +23 -42
  67. package/dist/esm/client.d.ts.map +1 -1
  68. package/dist/esm/client.js +46 -55
  69. package/dist/esm/client.js.map +1 -1
  70. package/dist/esm/core/errors.d.ts +18 -18
  71. package/dist/esm/core/errors.d.ts.map +1 -1
  72. package/dist/esm/core/errors.js +17 -17
  73. package/dist/esm/core/errors.js.map +1 -1
  74. package/dist/esm/core/http.d.ts +22 -26
  75. package/dist/esm/core/http.d.ts.map +1 -1
  76. package/dist/esm/core/http.js +28 -36
  77. package/dist/esm/core/http.js.map +1 -1
  78. package/dist/esm/core/pagination.d.ts +6 -7
  79. package/dist/esm/core/pagination.d.ts.map +1 -1
  80. package/dist/esm/core/pagination.js +1 -1
  81. package/dist/esm/core/pagination.js.map +1 -1
  82. package/dist/esm/core/scope.d.ts +8 -0
  83. package/dist/esm/core/scope.d.ts.map +1 -0
  84. package/dist/esm/core/scope.js +2 -0
  85. package/dist/esm/core/scope.js.map +1 -0
  86. package/dist/esm/generated/types.d.ts +129 -117
  87. package/dist/esm/generated/types.d.ts.map +1 -1
  88. package/dist/esm/generated/types.js +1 -1
  89. package/dist/esm/generated/types.js.map +1 -1
  90. package/dist/esm/index.d.ts +6 -6
  91. package/dist/esm/index.d.ts.map +1 -1
  92. package/dist/esm/index.js +6 -6
  93. package/dist/esm/index.js.map +1 -1
  94. package/dist/esm/resources/account.d.ts +12 -51
  95. package/dist/esm/resources/account.d.ts.map +1 -1
  96. package/dist/esm/resources/account.js +15 -57
  97. package/dist/esm/resources/account.js.map +1 -1
  98. package/dist/esm/resources/addresses.d.ts +49 -65
  99. package/dist/esm/resources/addresses.d.ts.map +1 -1
  100. package/dist/esm/resources/addresses.js +60 -69
  101. package/dist/esm/resources/addresses.js.map +1 -1
  102. package/dist/esm/resources/catalog.d.ts +17 -10
  103. package/dist/esm/resources/catalog.d.ts.map +1 -1
  104. package/dist/esm/resources/catalog.js +23 -17
  105. package/dist/esm/resources/catalog.js.map +1 -1
  106. package/dist/esm/resources/deliveries.d.ts +34 -23
  107. package/dist/esm/resources/deliveries.d.ts.map +1 -1
  108. package/dist/esm/resources/deliveries.js +27 -17
  109. package/dist/esm/resources/deliveries.js.map +1 -1
  110. package/dist/esm/resources/transactions.d.ts +14 -14
  111. package/dist/esm/resources/transactions.d.ts.map +1 -1
  112. package/dist/esm/resources/transactions.js +15 -16
  113. package/dist/esm/resources/transactions.js.map +1 -1
  114. package/dist/esm/resources/webhooks.d.ts +22 -0
  115. package/dist/esm/resources/webhooks.d.ts.map +1 -0
  116. package/dist/esm/resources/webhooks.js +31 -0
  117. package/dist/esm/resources/webhooks.js.map +1 -0
  118. package/dist/esm/units.d.ts +11 -11
  119. package/dist/esm/units.js +14 -14
  120. package/dist/esm/units.js.map +1 -1
  121. package/dist/esm/version.d.ts +3 -3
  122. package/dist/esm/version.d.ts.map +1 -1
  123. package/dist/esm/version.js +3 -3
  124. package/dist/esm/version.js.map +1 -1
  125. package/dist/esm/webhooks.d.ts +33 -28
  126. package/dist/esm/webhooks.d.ts.map +1 -1
  127. package/dist/esm/webhooks.js +33 -28
  128. package/dist/esm/webhooks.js.map +1 -1
  129. package/package.json +8 -5
  130. package/src/client.ts +50 -61
  131. package/src/core/errors.ts +18 -18
  132. package/src/core/http.ts +45 -55
  133. package/src/core/pagination.ts +7 -8
  134. package/src/core/scope.ts +8 -0
  135. package/src/generated/types.ts +139 -125
  136. package/src/index.ts +7 -24
  137. package/src/resources/account.ts +18 -72
  138. package/src/resources/addresses.ts +84 -109
  139. package/src/resources/catalog.ts +28 -19
  140. package/src/resources/deliveries.ts +43 -30
  141. package/src/resources/transactions.ts +18 -17
  142. package/src/resources/webhooks.ts +36 -0
  143. package/src/units.ts +14 -14
  144. package/src/version.ts +3 -3
  145. package/src/webhooks.ts +37 -32
  146. package/dist/cjs/resources/clients.d.ts +0 -84
  147. package/dist/cjs/resources/clients.d.ts.map +0 -1
  148. package/dist/cjs/resources/clients.js +0 -102
  149. package/dist/cjs/resources/clients.js.map +0 -1
  150. package/dist/esm/resources/clients.d.ts +0 -84
  151. package/dist/esm/resources/clients.d.ts.map +0 -1
  152. package/dist/esm/resources/clients.js +0 -97
  153. package/dist/esm/resources/clients.js.map +0 -1
  154. package/src/resources/clients.ts +0 -135
package/src/version.ts CHANGED
@@ -1,5 +1,5 @@
1
- /** Версия SDK: уходит в заголовке `user-agent`. Тест сверяет её с package.json */
2
- export const SDK_VERSION = '0.1.0'
1
+ /** SDK version, sent in the `user-agent` header. */
2
+ export const SDK_VERSION = '0.2.0'
3
3
 
4
- /** Адрес API по умолчанию */
4
+ /** Default API base URL. */
5
5
  export const DEFAULT_BASE_URL = 'https://monitoring.v3.finance'
package/src/webhooks.ts CHANGED
@@ -1,30 +1,30 @@
1
1
  /**
2
- * Приём вебхуков: проверка подписи и разбор тела. Работает без клиента API и без сети — нужен только секрет
3
- * подписи клиента. Использует WebCrypto: Node.js 20+, Bun, Deno, Cloudflare Workers.
2
+ * Receiving webhooks: signature verification and parsing. No API key or network access is needed — only your
3
+ * webhook secret. Uses Web Crypto, so it runs on Node.js 20+, Bun, Deno and Cloudflare Workers.
4
4
  */
5
5
 
6
6
  import { MonitoringError, WebhookSignatureError } from './core/errors.js'
7
7
  import type { WebhookPayload } from './generated/types.js'
8
8
 
9
- /** Заголовки вебхука */
9
+ /** Headers sent with every webhook. */
10
10
  export const WEBHOOK_HEADERS = {
11
- /** HMAC-SHA256 сырого тела секретом клиента, hex в нижнем регистре */
11
+ /** HMAC-SHA256 of the raw body keyed with your webhook secret, hex-encoded. */
12
12
  signature: 'x-signature',
13
- /** id клиента */
13
+ /** Your client ID. */
14
14
  clientId: 'x-client-id',
15
- /** `1` у тестового вебхука — такой не зачислять */
15
+ /** `1` for test webhooks. */
16
16
  test: 'x-webhook-test',
17
17
  } as const
18
18
 
19
19
  /**
20
- * Тело вебхука ровно как пришло — сырые байты или строка. Не `JSON.parse` + `JSON.stringify`: подпись считается
21
- * по исходным байтам, и любое переформатирование её ломает.
20
+ * The raw request body, exactly as received. Do not parse and re-serialize the JSON: the signature is computed over
21
+ * the original bytes.
22
22
  */
23
23
  export type WebhookBody = string | Uint8Array | ArrayBuffer
24
24
 
25
25
  /**
26
- * Откуда взять подпись: значение заголовка `x-signature` или все заголовки запроса — Fetch `Headers`
27
- * (Hono, Next.js, Workers) или объект Node.js (`req.headers` в Express, Fastify).
26
+ * Where to read the signature from: the value of the `x-signature` header, or all request headers — a Fetch
27
+ * `Headers` object (Next.js, Hono, Cloudflare Workers) or a Node.js headers object (`req.headers` in Express, Fastify).
28
28
  */
29
29
  export type SignatureSource = string | null | undefined | Headers | Record<string, string | string[] | undefined>
30
30
 
@@ -32,7 +32,7 @@ const encoder = new TextEncoder()
32
32
 
33
33
  function bytesOf(body: WebhookBody): Uint8Array<ArrayBuffer> {
34
34
  if (typeof body === 'string') return encoder.encode(body)
35
- // копия: WebCrypto не принимает view над SharedArrayBuffer (Buffer в Node.js — тоже Uint8Array)
35
+ // copy: Web Crypto does not accept views over a SharedArrayBuffer (a Node.js Buffer is a Uint8Array too)
36
36
  return body instanceof Uint8Array ? new Uint8Array(body) : new Uint8Array(body)
37
37
  }
38
38
 
@@ -44,7 +44,7 @@ function signatureOf(source: SignatureSource): string | undefined {
44
44
  return Array.isArray(value) ? value[0] : value
45
45
  }
46
46
 
47
- /** Сравнение без утечки по времени: время не зависит от того, где строки расходятся */
47
+ /** Constant-time comparison. */
48
48
  function safeEqual(a: string, b: string): boolean {
49
49
  if (a.length !== b.length) return false
50
50
  let diff = 0
@@ -53,12 +53,16 @@ function safeEqual(a: string, b: string): boolean {
53
53
  }
54
54
 
55
55
  /**
56
- * Подпись тела секретом клиента — как её считает сервис. Нужна в тестах вашего обработчика вебхуков.
56
+ * Computes the signature of a body the way the API does. Useful for testing your webhook handler.
57
57
  *
58
58
  * @example
59
59
  * ```ts
60
- * const body = JSON.stringify({ tx: { …, id: 'test' } })
61
- * await fetch('http://localhost:3000/webhooks', { method: 'POST', body, headers: { 'x-signature': await signWebhookBody(body, secret) } })
60
+ * const body = JSON.stringify({ tx: { network: 'TRON', asset: 'USDT', … } })
61
+ * await fetch('http://localhost:3000/webhooks/monitoring', {
62
+ * method: 'POST',
63
+ * body,
64
+ * headers: { 'content-type': 'application/json', 'x-signature': await signWebhookBody(body, secret) },
65
+ * })
62
66
  * ```
63
67
  */
64
68
  export async function signWebhookBody(body: WebhookBody, secret: string): Promise<string> {
@@ -68,11 +72,11 @@ export async function signWebhookBody(body: WebhookBody, secret: string): Promis
68
72
  }
69
73
 
70
74
  /**
71
- * Проверяет подпись вебхука: `true` — тело пришло от сервиса и не изменено.
75
+ * Verifies a webhook signature. Returns `true` when the body was sent by the API and was not modified.
72
76
  *
73
- * @param body - сырое тело запроса
74
- * @param signature - заголовок `x-signature` или все заголовки запроса
75
- * @param secret - секрет подписи клиента
77
+ * @param body - Raw request body.
78
+ * @param signature - The `x-signature` header, or all request headers.
79
+ * @param secret - Your webhook secret.
76
80
  */
77
81
  export async function verifyWebhookSignature(body: WebhookBody, signature: SignatureSource, secret: string): Promise<boolean> {
78
82
  const given = signatureOf(signature)?.trim().toLowerCase()
@@ -81,16 +85,16 @@ export async function verifyWebhookSignature(body: WebhookBody, signature: Signa
81
85
  }
82
86
 
83
87
  /**
84
- * Проверяет подпись и возвращает разобранный вебхук.
88
+ * Verifies the signature and returns the parsed webhook.
85
89
  *
86
- * Дальше — по правилам приёма: тестовый вебхук ({@link isTestWebhook}) не зачислять; один и тот же вебхук может
87
- * прийти повторно — обрабатывайте идемпотентно по {@link webhookIdempotencyKey}; ответьте 2xx в течение 15 секунд.
88
- * Вебхук уходит, как только перевод попал в блок, — для крупных сумм дождитесь финальности
89
- * (`monitoring.transactions.get(...).final`).
90
+ * Respond with a 2xx status within 15 seconds. Process webhooks idempotently by {@link webhookIdempotencyKey} — the
91
+ * same webhook may arrive more than once — and do not credit test webhooks ({@link isTestWebhook}). Webhooks are sent
92
+ * as soon as a transfer is included in a block; before crediting large amounts, check that the transaction is final
93
+ * with `monitoring.transactions.get()`.
90
94
  *
91
- * @throws {@link WebhookSignatureError} подпись не совпала — ответьте 401 и ничего не зачисляйте
95
+ * @throws {@link WebhookSignatureError} when the signature does not match. Respond with `401` and do not process it.
92
96
  *
93
- * @example Express — нужен сырой body
97
+ * @example Express (use the raw body)
94
98
  * ```ts
95
99
  * app.post('/webhooks/monitoring', express.raw({ type: 'application/json' }), async (req, res) => {
96
100
  * const event = await parseWebhook(req.body, req.headers, process.env.MONITORING_WEBHOOK_SECRET!)
@@ -99,7 +103,7 @@ export async function verifyWebhookSignature(body: WebhookBody, signature: Signa
99
103
  * })
100
104
  * ```
101
105
  *
102
- * @example Hono, Next.js route handler, Cloudflare Workers
106
+ * @example Next.js route handlers, Hono, Cloudflare Workers
103
107
  * ```ts
104
108
  * const event = await parseWebhook(await request.text(), request.headers, env.MONITORING_WEBHOOK_SECRET)
105
109
  * ```
@@ -109,22 +113,23 @@ export async function parseWebhook(body: WebhookBody, signature: SignatureSource
109
113
  let payload: unknown
110
114
  try {
111
115
  payload = JSON.parse(typeof body === 'string' ? body : new TextDecoder().decode(bytesOf(body)))
112
- } catch (e) {
113
- throw new MonitoringError('webhook body is not valid JSON', { cause: e })
116
+ } catch (error) {
117
+ throw new MonitoringError('webhook body is not valid JSON', { cause: error })
114
118
  }
115
119
  const tx = (payload as { tx?: { id?: unknown } } | null)?.tx
116
120
  if (typeof tx !== 'object' || tx === null || typeof tx.id !== 'string') throw new MonitoringError('webhook body has no tx')
117
121
  return payload as WebhookPayload
118
122
  }
119
123
 
120
- /** Тестовый вебхук (из панели или `clients.sendTestWebhook`) — такой не зачислять */
124
+ /** `true` for test webhooks. Do not credit them. */
121
125
  export function isTestWebhook(event: WebhookPayload): boolean {
122
126
  return event.test === true
123
127
  }
124
128
 
125
129
  /**
126
- * Ключ идемпотентности вебхука: сеть, транзакция и номер лога. Один перевод — один ключ, даже если вебхук пришёл
127
- * несколько раз. В одной транзакции EVM может быть несколько переводов токенов — у них разный `logIndex`.
130
+ * Idempotency key of a webhook: network, transaction hash and log index. A transfer always has the same key, however
131
+ * many times its webhook is delivered. An EVM transaction can contain several token transfers; they differ by
132
+ * `logIndex`.
128
133
  *
129
134
  * @example `"TRON:1249cb…a5fc45:"`, `"ETHEREUM:0x3fbc…1d57:7"`
130
135
  */
@@ -1,84 +0,0 @@
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
@@ -1 +0,0 @@
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"}
@@ -1,102 +0,0 @@
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
@@ -1 +0,0 @@
1
- {"version":3,"file":"clients.js","sourceRoot":"","sources":["../../../src/resources/clients.ts"],"names":[],"mappings":"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"}
@@ -1,84 +0,0 @@
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
@@ -1 +0,0 @@
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"}
@@ -1,97 +0,0 @@
1
- import { seg } from '../core/http.js';
2
- import { paginate } from '../core/pagination.js';
3
- /** Ключи клиента: доступ к адресам, истории и транзакциям этого клиента. Управляют owner и admin клиента */
4
- export class ClientKeysResource {
5
- #http;
6
- constructor(http) {
7
- this.#http = http;
8
- }
9
- /** Ключи клиента (без самих ключей — только начало) */
10
- async list(clientId, options) {
11
- const r = await this.#http.request({ method: 'GET', path: `/v1/clients/${seg(clientId)}/keys`, idempotent: true, options });
12
- return r.items;
13
- }
14
- /**
15
- * Выпускает ключ клиента. Полный ключ — в `key`, показывается один раз.
16
- *
17
- * @example
18
- * ```ts
19
- * const { key } = await monitoring.clients.keys.create(clientId, { name: 'backend', expiresInDays: 365 })
20
- * ```
21
- */
22
- create(clientId, params = {}, options) {
23
- return this.#http.request({ method: 'POST', path: `/v1/clients/${seg(clientId)}/keys`, body: params, idempotent: false, options });
24
- }
25
- /** Отзывает ключ — он перестаёт работать сразу */
26
- async revoke(clientId, keyId, options) {
27
- await this.#http.request({ method: 'DELETE', path: `/v1/clients/${seg(clientId)}/keys/${seg(keyId)}`, idempotent: true, options });
28
- }
29
- }
30
- /**
31
- * Ваш клиент: URL вебхука, секрет подписи, ключи, участники, тестовый вебхук.
32
- *
33
- * Права: смотреть — любой участник и ключ клиента; менять — owner и admin клиента по сессии или личному ключу.
34
- */
35
- export class ClientsResource {
36
- #http;
37
- /** Ключи клиента */
38
- keys;
39
- constructor(http) {
40
- this.#http = http;
41
- this.keys = new ClientKeysResource(http);
42
- }
43
- /** Страница ваших клиентов: где вы участник; для ключа клиента — он сам */
44
- list(params = {}, options) {
45
- return this.#http.request({ method: 'GET', path: '/v1/clients', query: { ...params }, idempotent: true, options });
46
- }
47
- /** Все ваши клиенты — страница за страницей */
48
- iterate(params = {}, options) {
49
- return paginate((after) => this.list({ ...params, after }, options));
50
- }
51
- get(clientId, options) {
52
- return this.#http.request({ method: 'GET', path: `/v1/clients/${seg(clientId)}`, idempotent: true, options });
53
- }
54
- /**
55
- * Меняет название или URL вебхука.
56
- *
57
- * @example
58
- * ```ts
59
- * await monitoring.clients.update(clientId, { webhookUrl: 'https://example.com/webhooks/monitoring' })
60
- * ```
61
- */
62
- update(clientId, params, options) {
63
- return this.#http.request({ method: 'PATCH', path: `/v1/clients/${seg(clientId)}`, body: params, idempotent: true, options });
64
- }
65
- /** Новый секрет подписи вебхуков. Старый перестаёт действовать сразу — обновите его у себя до следующего вебхука */
66
- rotateSecret(clientId, params = {}, options) {
67
- return this.#http.request({ method: 'POST', path: `/v1/clients/${seg(clientId)}/secret`, body: params, idempotent: false, options });
68
- }
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, params = {}, options) {
81
- return this.#http.request({
82
- method: 'POST',
83
- path: `/v1/clients/${seg(clientId)}/webhooks/test`,
84
- body: params,
85
- idempotent: false,
86
- // 502 — «не доставлен»: это результат проверки, а не ошибка запроса
87
- acceptStatuses: [502],
88
- options,
89
- });
90
- }
91
- /** Участники клиента и их роли */
92
- async members(clientId, options) {
93
- const r = await this.#http.request({ method: 'GET', path: `/v1/clients/${seg(clientId)}/members`, idempotent: true, options });
94
- return r.items;
95
- }
96
- }
97
- //# sourceMappingURL=clients.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"clients.js","sourceRoot":"","sources":["../../../src/resources/clients.ts"],"names":[],"mappings":"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"}