@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
@@ -1,65 +1,46 @@
1
- import { type ClientOptions, type RequestOptions } from './core/http.js';
2
- import { AccountResource, AuthResource, type SignInResult } from './resources/account.js';
1
+ import { type ClientOptions } from './core/http.js';
2
+ import { AccountResource } from './resources/account.js';
3
3
  import { AddressesResource } from './resources/addresses.js';
4
4
  import { AssetsResource, NetworksResource } from './resources/catalog.js';
5
- import { ClientsResource } from './resources/clients.js';
6
5
  import { DeliveriesResource } from './resources/deliveries.js';
7
6
  import { TransactionsResource } from './resources/transactions.js';
7
+ import { WebhooksResource } from './resources/webhooks.js';
8
8
  /**
9
- * Клиент API мониторинга адресов V3 Finance: адреса и подписки, история вебхуков, транзакции, ваш клиент и ключи.
10
- * Только для сервера: ключ в браузере увидит любой.
9
+ * Client for the V3 Finance Monitoring API.
11
10
  *
12
- * @example С ключом клиента — для бэкенда
11
+ * Use it on the server only: an API key in a browser is visible to anyone.
12
+ *
13
+ * @example
13
14
  * ```ts
14
15
  * import { MonitoringClient } from '@v3finance/monitoring-sdk'
15
16
  *
16
- * const monitoring = new MonitoringClient({ apiKey: process.env.MONITORING_API_KEY })
17
- * await monitoring.addresses.add(clientId, [{ network: 'tron', address: 'T…' }], { assets: ['USDT'], direction: 'in' })
18
- * ```
17
+ * const monitoring = new MonitoringClient({ apiKey: process.env.MONITORING_API_KEY! })
19
18
  *
20
- * @example По паролю — для скриптов, которым нужны права пользователя
21
- * ```ts
22
- * const { client } = await MonitoringClient.signIn({ email, password })
23
- * const { key } = await client.account.keys.create({ name: 'ci' })
19
+ * await monitoring.addresses.add([{ network: 'tron', address: 'TA8Hg…' }], { assets: ['USDT'], direction: 'in' })
24
20
  * ```
25
21
  */
26
22
  export declare class MonitoringClient {
27
23
  #private;
28
- /** Кто вы и ваши личные ключи */
24
+ /** Your client: the account your API key belongs to. */
29
25
  readonly account: AccountResource;
30
- /** Выход и смена пароля (для клиента, вошедшего по паролю) */
31
- readonly auth: AuthResource;
32
- /** Сети */
33
- readonly networks: NetworksResource;
34
- /** Нативные монеты и токены */
35
- readonly assets: AssetsResource;
36
- /** Ваш клиент: URL вебхука, секрет, ключи, участники, тестовый вебхук */
37
- readonly clients: ClientsResource;
38
- /** Адреса на мониторинге и подписка */
26
+ /** Addresses you monitor and their subscriptions. */
39
27
  readonly addresses: AddressesResource;
40
- /** История вебхуков */
28
+ /** Test your webhook endpoint. */
29
+ readonly webhooks: WebhooksResource;
30
+ /** History of webhooks sent to you. */
41
31
  readonly deliveries: DeliveriesResource;
42
- /** Транзакция по хешу: статус, подтверждения, финальность */
32
+ /** Any transaction by hash, with confirmations and finality. */
43
33
  readonly transactions: TransactionsResource;
34
+ /** Supported networks. */
35
+ readonly networks: NetworksResource;
36
+ /** Supported native coins and tokens. */
37
+ readonly assets: AssetsResource;
44
38
  /**
45
- * @param options - ключ (`apiKey`) или токен сессии (`sessionToken`), адрес API, таймаут, повторы
46
- * @throws {@link MonitoringError} переданы и ключ, и токен; нет `fetch`
39
+ * @param options - API key and optional settings.
40
+ * @throws {@link MonitoringError} when `apiKey` is missing or `fetch` is not available.
47
41
  */
48
- constructor(options?: ClientOptions);
49
- /** Адрес API, с которым работает клиент */
42
+ constructor(options: ClientOptions);
43
+ /** API base URL this client sends requests to. */
50
44
  get baseUrl(): string;
51
- /**
52
- * Вход по email и паролю: возвращает клиента с токеном сессии. Регистрации нет — пользователей заводит
53
- * администратор сервиса. Не больше 3 попыток за 10 секунд с одного IP.
54
- *
55
- * @param options - настройки клиента, кроме учётных данных
56
- * @throws {@link MonitoringApiError} 401 — неверный email или пароль
57
- */
58
- static signIn(credentials: {
59
- email: string;
60
- password: string;
61
- }, options?: Omit<ClientOptions, 'apiKey' | 'sessionToken'>, requestOptions?: RequestOptions): Promise<SignInResult & {
62
- client: MonitoringClient;
63
- }>;
64
45
  }
65
46
  //# sourceMappingURL=client.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,KAAK,aAAa,EAAE,KAAK,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAEpF,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,KAAK,YAAY,EAAE,MAAM,wBAAwB,CAAA;AACzF,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAA;AAC5D,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAA;AACzE,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAA;AACxD,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAA;AAC9D,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAA;AAGlE;;;;;;;;;;;;;;;;;GAiBG;AACH,qBAAa,gBAAgB;;IAC3B,iCAAiC;IACjC,QAAQ,CAAC,OAAO,EAAE,eAAe,CAAA;IACjC,8DAA8D;IAC9D,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAA;IAC3B,WAAW;IACX,QAAQ,CAAC,QAAQ,EAAE,gBAAgB,CAAA;IACnC,+BAA+B;IAC/B,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAA;IAC/B,yEAAyE;IACzE,QAAQ,CAAC,OAAO,EAAE,eAAe,CAAA;IACjC,uCAAuC;IACvC,QAAQ,CAAC,SAAS,EAAE,iBAAiB,CAAA;IACrC,uBAAuB;IACvB,QAAQ,CAAC,UAAU,EAAE,kBAAkB,CAAA;IACvC,6DAA6D;IAC7D,QAAQ,CAAC,YAAY,EAAE,oBAAoB,CAAA;IAI3C;;;OAGG;IACH,YAAY,OAAO,GAAE,aAAkB,EAUtC;IAED,2CAA2C;IAC3C,IAAI,OAAO,IAAI,MAAM,CAEpB;IAED;;;;;;OAMG;IACH,OAAa,MAAM,CACjB,WAAW,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,EAChD,OAAO,GAAE,IAAI,CAAC,aAAa,EAAE,QAAQ,GAAG,cAAc,CAAM,EAC5D,cAAc,CAAC,EAAE,cAAc,GAC9B,OAAO,CAAC,YAAY,GAAG;QAAE,MAAM,EAAE,gBAAgB,CAAA;KAAE,CAAC,CAYtD;CACF"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/client.ts"],"names":[],"mappings":"AACA,OAAO,EAAmB,KAAK,aAAa,EAAE,MAAM,gBAAgB,CAAA;AAGpE,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAA;AACxD,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAA;AAC5D,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAA;AACzE,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAA;AAC9D,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAA;AAClE,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAA;AAG1D;;;;;;;;;;;;;GAaG;AACH,qBAAa,gBAAgB;;IAC3B,wDAAwD;IACxD,QAAQ,CAAC,OAAO,EAAE,eAAe,CAAA;IACjC,qDAAqD;IACrD,QAAQ,CAAC,SAAS,EAAE,iBAAiB,CAAA;IACrC,kCAAkC;IAClC,QAAQ,CAAC,QAAQ,EAAE,gBAAgB,CAAA;IACnC,uCAAuC;IACvC,QAAQ,CAAC,UAAU,EAAE,kBAAkB,CAAA;IACvC,gEAAgE;IAChE,QAAQ,CAAC,YAAY,EAAE,oBAAoB,CAAA;IAC3C,0BAA0B;IAC1B,QAAQ,CAAC,QAAQ,EAAE,gBAAgB,CAAA;IACnC,yCAAyC;IACzC,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAA;IAK/B;;;OAGG;IACH,YAAY,OAAO,EAAE,aAAa,EAWjC;IAED,kDAAkD;IAClD,IAAI,OAAO,IAAI,MAAM,CAEpB;CAiBF"}
@@ -1,85 +1,76 @@
1
- import { HttpClient } from './core/http.js';
2
- import { AccountResource, AuthResource } from './resources/account.js';
1
+ import { MonitoringError } from './core/errors.js';
2
+ import { HttpClient, seg } from './core/http.js';
3
+ import { AccountResource } from './resources/account.js';
3
4
  import { AddressesResource } from './resources/addresses.js';
4
5
  import { AssetsResource, NetworksResource } from './resources/catalog.js';
5
- import { ClientsResource } from './resources/clients.js';
6
6
  import { DeliveriesResource } from './resources/deliveries.js';
7
7
  import { TransactionsResource } from './resources/transactions.js';
8
+ import { WebhooksResource } from './resources/webhooks.js';
8
9
  import { DEFAULT_BASE_URL } from './version.js';
9
10
  /**
10
- * Клиент API мониторинга адресов V3 Finance: адреса и подписки, история вебхуков, транзакции, ваш клиент и ключи.
11
- * Только для сервера: ключ в браузере увидит любой.
11
+ * Client for the V3 Finance Monitoring API.
12
12
  *
13
- * @example С ключом клиента — для бэкенда
13
+ * Use it on the server only: an API key in a browser is visible to anyone.
14
+ *
15
+ * @example
14
16
  * ```ts
15
17
  * import { MonitoringClient } from '@v3finance/monitoring-sdk'
16
18
  *
17
- * const monitoring = new MonitoringClient({ apiKey: process.env.MONITORING_API_KEY })
18
- * await monitoring.addresses.add(clientId, [{ network: 'tron', address: 'T…' }], { assets: ['USDT'], direction: 'in' })
19
- * ```
19
+ * const monitoring = new MonitoringClient({ apiKey: process.env.MONITORING_API_KEY! })
20
20
  *
21
- * @example По паролю — для скриптов, которым нужны права пользователя
22
- * ```ts
23
- * const { client } = await MonitoringClient.signIn({ email, password })
24
- * const { key } = await client.account.keys.create({ name: 'ci' })
21
+ * await monitoring.addresses.add([{ network: 'tron', address: 'TA8Hg…' }], { assets: ['USDT'], direction: 'in' })
25
22
  * ```
26
23
  */
27
24
  export class MonitoringClient {
28
- /** Кто вы и ваши личные ключи */
25
+ /** Your client: the account your API key belongs to. */
29
26
  account;
30
- /** Выход и смена пароля (для клиента, вошедшего по паролю) */
31
- auth;
32
- /** Сети */
33
- networks;
34
- /** Нативные монеты и токены */
35
- assets;
36
- /** Ваш клиент: URL вебхука, секрет, ключи, участники, тестовый вебхук */
37
- clients;
38
- /** Адреса на мониторинге и подписка */
27
+ /** Addresses you monitor and their subscriptions. */
39
28
  addresses;
40
- /** История вебхуков */
29
+ /** Test your webhook endpoint. */
30
+ webhooks;
31
+ /** History of webhooks sent to you. */
41
32
  deliveries;
42
- /** Транзакция по хешу: статус, подтверждения, финальность */
33
+ /** Any transaction by hash, with confirmations and finality. */
43
34
  transactions;
35
+ /** Supported networks. */
36
+ networks;
37
+ /** Supported native coins and tokens. */
38
+ assets;
44
39
  #http;
40
+ #clientId;
45
41
  /**
46
- * @param options - ключ (`apiKey`) или токен сессии (`sessionToken`), адрес API, таймаут, повторы
47
- * @throws {@link MonitoringError} переданы и ключ, и токен; нет `fetch`
42
+ * @param options - API key and optional settings.
43
+ * @throws {@link MonitoringError} when `apiKey` is missing or `fetch` is not available.
48
44
  */
49
- constructor(options = {}) {
45
+ constructor(options) {
50
46
  this.#http = new HttpClient(options, DEFAULT_BASE_URL);
51
- this.account = new AccountResource(this.#http);
52
- this.auth = new AuthResource(this.#http);
53
- this.networks = new NetworksResource(this.#http);
54
- this.assets = new AssetsResource(this.#http);
55
- this.clients = new ClientsResource(this.#http);
56
- this.addresses = new AddressesResource(this.#http);
57
- this.deliveries = new DeliveriesResource(this.#http);
58
- this.transactions = new TransactionsResource(this.#http);
47
+ if (options.clientId)
48
+ this.#clientId = Promise.resolve(options.clientId);
49
+ const scope = { http: this.#http, clientPath: async () => `/v1/clients/${seg(await this.#resolveClientId())}` };
50
+ this.account = new AccountResource(scope, () => this.#resolveClientId());
51
+ this.addresses = new AddressesResource(scope);
52
+ this.webhooks = new WebhooksResource(scope);
53
+ this.deliveries = new DeliveriesResource(scope);
54
+ this.transactions = new TransactionsResource(scope);
55
+ this.networks = new NetworksResource(scope);
56
+ this.assets = new AssetsResource(scope);
59
57
  }
60
- /** Адрес API, с которым работает клиент */
58
+ /** API base URL this client sends requests to. */
61
59
  get baseUrl() {
62
60
  return this.#http.baseUrl;
63
61
  }
64
- /**
65
- * Вход по email и паролю: возвращает клиента с токеном сессии. Регистрации нет — пользователей заводит
66
- * администратор сервиса. Не больше 3 попыток за 10 секунд с одного IP.
67
- *
68
- * @param options - настройки клиента, кроме учётных данных
69
- * @throws {@link MonitoringApiError} 401 — неверный email или пароль
70
- */
71
- static async signIn(credentials, options = {}, requestOptions) {
72
- const http = new HttpClient(options, DEFAULT_BASE_URL);
73
- const r = await http.request({
74
- method: 'POST',
75
- path: '/api/auth/sign-in/email',
76
- body: credentials,
77
- idempotent: false,
78
- auth: false,
79
- // повтор при отказе 429 только сожжёт попытки входа
80
- options: { maxRetries: 0, ...requestOptions },
62
+ /** Client ID of the API key: from the options, or resolved once from the API and cached. */
63
+ #resolveClientId() {
64
+ this.#clientId ??= this.#http.request({ method: 'GET', path: '/v1/me', idempotent: true }).then((identity) => {
65
+ if (!identity.actor.clientId)
66
+ throw new MonitoringError('this API key is not bound to a client: pass clientId in the options');
67
+ return identity.actor.clientId;
68
+ }, (error) => {
69
+ // a failed lookup is not cached: the next call tries again
70
+ this.#clientId = undefined;
71
+ throw error;
81
72
  });
82
- return { token: r.token, user: r.user, client: new MonitoringClient({ ...options, sessionToken: r.token }) };
73
+ return this.#clientId;
83
74
  }
84
75
  }
85
76
  //# sourceMappingURL=client.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAA2C,MAAM,gBAAgB,CAAA;AAEpF,OAAO,EAAE,eAAe,EAAE,YAAY,EAAqB,MAAM,wBAAwB,CAAA;AACzF,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAA;AAC5D,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAA;AACzE,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAA;AACxD,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAA;AAC9D,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAA;AAClE,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAA;AAE/C;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,OAAO,gBAAgB;IAC3B,iCAAiC;IACxB,OAAO,CAAiB;IACjC,8DAA8D;IACrD,IAAI,CAAc;IAC3B,WAAW;IACF,QAAQ,CAAkB;IACnC,+BAA+B;IACtB,MAAM,CAAgB;IAC/B,yEAAyE;IAChE,OAAO,CAAiB;IACjC,uCAAuC;IAC9B,SAAS,CAAmB;IACrC,uBAAuB;IACd,UAAU,CAAoB;IACvC,6DAA6D;IACpD,YAAY,CAAsB;IAElC,KAAK,CAAY;IAE1B;;;OAGG;IACH,YAAY,OAAO,GAAkB,EAAE;QACrC,IAAI,CAAC,KAAK,GAAG,IAAI,UAAU,CAAC,OAAO,EAAE,gBAAgB,CAAC,CAAA;QACtD,IAAI,CAAC,OAAO,GAAG,IAAI,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QAC9C,IAAI,CAAC,IAAI,GAAG,IAAI,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QACxC,IAAI,CAAC,QAAQ,GAAG,IAAI,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QAChD,IAAI,CAAC,MAAM,GAAG,IAAI,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QAC5C,IAAI,CAAC,OAAO,GAAG,IAAI,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QAC9C,IAAI,CAAC,SAAS,GAAG,IAAI,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QAClD,IAAI,CAAC,UAAU,GAAG,IAAI,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QACpD,IAAI,CAAC,YAAY,GAAG,IAAI,oBAAoB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IAC1D,CAAC;IAED,2CAA2C;IAC3C,IAAI,OAAO;QACT,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAA;IAC3B,CAAC;IAED;;;;;;OAMG;IACH,MAAM,CAAC,KAAK,CAAC,MAAM,CACjB,WAAgD,EAChD,OAAO,GAAmD,EAAE,EAC5D,cAA+B;QAE/B,MAAM,IAAI,GAAG,IAAI,UAAU,CAAC,OAAO,EAAE,gBAAgB,CAAC,CAAA;QACtD,MAAM,CAAC,GAAG,MAAM,IAAI,CAAC,OAAO,CAAgC;YAC1D,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,yBAAyB;YAC/B,IAAI,EAAE,WAAW;YACjB,UAAU,EAAE,KAAK;YACjB,IAAI,EAAE,KAAK;YACX,oDAAoD;YACpD,OAAO,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,GAAG,cAAc,EAAE;SAC9C,CAAC,CAAA;QACF,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,gBAAgB,CAAC,EAAE,GAAG,OAAO,EAAE,YAAY,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE,CAAA;IAC9G,CAAC;CACF"}
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/client.ts"],"names":[],"mappings":"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"}
@@ -1,16 +1,16 @@
1
1
  import type { ApiErrorBody } from '../generated/types.js';
2
- /** Ошибка по элементу запроса: номер элемента в переданном массиве и причина */
2
+ /** A per-item problem of a batch request: the item's index in your request and the reason. */
3
3
  export type ErrorDetail = NonNullable<ApiErrorBody['error']['details']>[number];
4
4
  /**
5
- * Базовый класс всех ошибок SDK. Ловите его, чтобы перехватить любую ошибку SDK.
5
+ * Base class of every error thrown by the SDK.
6
6
  *
7
7
  * @example
8
8
  * ```ts
9
9
  * try {
10
- * await monitoring.addresses.add(clientId, items)
11
- * } catch (e) {
12
- * if (e instanceof MonitoringApiError && e.status === 400) console.log(e.details)
13
- * else throw e
10
+ * await monitoring.addresses.add(items)
11
+ * } catch (error) {
12
+ * if (error instanceof MonitoringApiError && error.status === 400) console.log(error.details)
13
+ * else throw error
14
14
  * }
15
15
  * ```
16
16
  */
@@ -19,20 +19,20 @@ export declare class MonitoringError extends Error {
19
19
  cause?: unknown;
20
20
  });
21
21
  }
22
- /** API ответил ошибкой: HTTP 4xx или 5xx */
22
+ /** The API responded with an error status (4xx or 5xx). */
23
23
  export declare class MonitoringApiError extends MonitoringError {
24
- /** HTTP-статус ответа */
24
+ /** HTTP status code. */
25
25
  readonly status: number;
26
26
  /**
27
- * Машинный код ошибки: `invalid_request`, `unauthorized`, `forbidden`, `not_found`, `conflict`,
28
- * `rate_limited`, `upstream_error`, `upstream_rate_limited`, `unavailable`…
27
+ * Machine-readable error code, e.g. `invalid_request`, `unauthorized`, `forbidden`, `not_found`,
28
+ * `rate_limited`, `upstream_error`, `upstream_rate_limited`.
29
29
  */
30
30
  readonly code: string;
31
- /** Ошибки по элементам запроса (например, какой адрес из переданных не подошёл); пустой массив, если их нет */
31
+ /** Per-item problems of a batch request, such as invalid addresses. Empty when there are none. */
32
32
  readonly details: ErrorDetail[];
33
- /** Идентификатор запроса (`cf-ray`) — укажите его, если обращаетесь в поддержку */
33
+ /** Request ID. Include it when contacting support. */
34
34
  readonly requestId: string | undefined;
35
- /** Тело ответа как есть */
35
+ /** Raw response body. */
36
36
  readonly body: unknown;
37
37
  constructor(init: {
38
38
  status: number;
@@ -42,23 +42,23 @@ export declare class MonitoringApiError extends MonitoringError {
42
42
  requestId?: string;
43
43
  body?: unknown;
44
44
  });
45
- /** Временная ошибка — лимит частоты или недоступный провайдер: запрос можно повторить позже */
45
+ /** `true` for transient errors — rate limits and unavailable upstream providers — that can be retried later. */
46
46
  get retryable(): boolean;
47
47
  }
48
- /** Ответа нет: сбой сети или соединения */
48
+ /** The request did not get a response because of a network or connection failure. */
49
49
  export declare class MonitoringConnectionError extends MonitoringError {
50
50
  constructor(message: string, options?: {
51
51
  cause?: unknown;
52
52
  });
53
53
  }
54
- /** Запрос не уложился в таймаут (`timeoutMs`) */
54
+ /** The request did not complete within `timeoutMs`. */
55
55
  export declare class MonitoringTimeoutError extends MonitoringConnectionError {
56
56
  constructor(timeoutMs: number);
57
57
  }
58
- /** Подпись вебхука не прошла проверку: тело подделано, изменено по дороге или проверяется не тем секретом */
58
+ /** The webhook signature does not match: the body was altered or is verified with the wrong secret. */
59
59
  export declare class WebhookSignatureError extends MonitoringError {
60
60
  constructor(message?: string);
61
61
  }
62
- /** Тело ошибки в любом из форматов API: `/v1`, старые пути (`{ok: false}`), вход (`{code, message}`) */
62
+ /** Builds an error from any error body the API returns. */
63
63
  export declare function apiErrorFrom(status: number, body: unknown, requestId: string | undefined): MonitoringApiError;
64
64
  //# sourceMappingURL=errors.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../../src/core/errors.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAA;AAEzD,gFAAgF;AAChF,MAAM,MAAM,WAAW,GAAG,WAAW,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,CAAA;AAE/E;;;;;;;;;;;;GAYG;AACH,qBAAa,eAAgB,SAAQ,KAAK;IACxC,YAAY,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE,EAGzD;CACF;AAED,4CAA4C;AAC5C,qBAAa,kBAAmB,SAAQ,eAAe;IACrD,yBAAyB;IACzB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB;;;OAGG;IACH,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,+GAA+G;IAC/G,QAAQ,CAAC,OAAO,EAAE,WAAW,EAAE,CAAA;IAC/B,mFAAmF;IACnF,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,CAAA;IACtC,2BAA2B;IAC3B,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAA;IAEtB,YAAY,IAAI,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,WAAW,EAAE,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,OAAO,CAAA;KAAE,EAQ/H;IAED,+FAA+F;IAC/F,IAAI,SAAS,IAAI,OAAO,CAEvB;CACF;AAED,2CAA2C;AAC3C,qBAAa,yBAA0B,SAAQ,eAAe;IAC5D,YAAY,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE,EAGzD;CACF;AAED,iDAAiD;AACjD,qBAAa,sBAAuB,SAAQ,yBAAyB;IACnE,YAAY,SAAS,EAAE,MAAM,EAG5B;CACF;AAED,6GAA6G;AAC7G,qBAAa,qBAAsB,SAAQ,eAAe;IACxD,YAAY,OAAO,SAA+B,EAGjD;CACF;AAED,wGAAwG;AACxG,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,GAAG,SAAS,GAAG,kBAAkB,CAW7G"}
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../../src/core/errors.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAA;AAEzD,8FAA8F;AAC9F,MAAM,MAAM,WAAW,GAAG,WAAW,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,CAAA;AAE/E;;;;;;;;;;;;GAYG;AACH,qBAAa,eAAgB,SAAQ,KAAK;IACxC,YAAY,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE,EAGzD;CACF;AAED,2DAA2D;AAC3D,qBAAa,kBAAmB,SAAQ,eAAe;IACrD,wBAAwB;IACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB;;;OAGG;IACH,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,kGAAkG;IAClG,QAAQ,CAAC,OAAO,EAAE,WAAW,EAAE,CAAA;IAC/B,sDAAsD;IACtD,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,CAAA;IACtC,yBAAyB;IACzB,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAA;IAEtB,YAAY,IAAI,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,WAAW,EAAE,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,OAAO,CAAA;KAAE,EAQ/H;IAED,gHAAgH;IAChH,IAAI,SAAS,IAAI,OAAO,CAEvB;CACF;AAED,qFAAqF;AACrF,qBAAa,yBAA0B,SAAQ,eAAe;IAC5D,YAAY,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE,EAGzD;CACF;AAED,uDAAuD;AACvD,qBAAa,sBAAuB,SAAQ,yBAAyB;IACnE,YAAY,SAAS,EAAE,MAAM,EAG5B;CACF;AAED,uGAAuG;AACvG,qBAAa,qBAAsB,SAAQ,eAAe;IACxD,YAAY,OAAO,SAA+B,EAGjD;CACF;AAED,2DAA2D;AAC3D,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,GAAG,SAAS,GAAG,kBAAkB,CAW7G"}
@@ -1,13 +1,13 @@
1
1
  /**
2
- * Базовый класс всех ошибок SDK. Ловите его, чтобы перехватить любую ошибку SDK.
2
+ * Base class of every error thrown by the SDK.
3
3
  *
4
4
  * @example
5
5
  * ```ts
6
6
  * try {
7
- * await monitoring.addresses.add(clientId, items)
8
- * } catch (e) {
9
- * if (e instanceof MonitoringApiError && e.status === 400) console.log(e.details)
10
- * else throw e
7
+ * await monitoring.addresses.add(items)
8
+ * } catch (error) {
9
+ * if (error instanceof MonitoringApiError && error.status === 400) console.log(error.details)
10
+ * else throw error
11
11
  * }
12
12
  * ```
13
13
  */
@@ -17,20 +17,20 @@ export class MonitoringError extends Error {
17
17
  this.name = 'MonitoringError';
18
18
  }
19
19
  }
20
- /** API ответил ошибкой: HTTP 4xx или 5xx */
20
+ /** The API responded with an error status (4xx or 5xx). */
21
21
  export class MonitoringApiError extends MonitoringError {
22
- /** HTTP-статус ответа */
22
+ /** HTTP status code. */
23
23
  status;
24
24
  /**
25
- * Машинный код ошибки: `invalid_request`, `unauthorized`, `forbidden`, `not_found`, `conflict`,
26
- * `rate_limited`, `upstream_error`, `upstream_rate_limited`, `unavailable`…
25
+ * Machine-readable error code, e.g. `invalid_request`, `unauthorized`, `forbidden`, `not_found`,
26
+ * `rate_limited`, `upstream_error`, `upstream_rate_limited`.
27
27
  */
28
28
  code;
29
- /** Ошибки по элементам запроса (например, какой адрес из переданных не подошёл); пустой массив, если их нет */
29
+ /** Per-item problems of a batch request, such as invalid addresses. Empty when there are none. */
30
30
  details;
31
- /** Идентификатор запроса (`cf-ray`) — укажите его, если обращаетесь в поддержку */
31
+ /** Request ID. Include it when contacting support. */
32
32
  requestId;
33
- /** Тело ответа как есть */
33
+ /** Raw response body. */
34
34
  body;
35
35
  constructor(init) {
36
36
  super(`${init.message} (HTTP ${init.status}, ${init.code})`);
@@ -41,33 +41,33 @@ export class MonitoringApiError extends MonitoringError {
41
41
  this.requestId = init.requestId;
42
42
  this.body = init.body;
43
43
  }
44
- /** Временная ошибка — лимит частоты или недоступный провайдер: запрос можно повторить позже */
44
+ /** `true` for transient errors — rate limits and unavailable upstream providers — that can be retried later. */
45
45
  get retryable() {
46
46
  return this.status === 429 || this.status === 503;
47
47
  }
48
48
  }
49
- /** Ответа нет: сбой сети или соединения */
49
+ /** The request did not get a response because of a network or connection failure. */
50
50
  export class MonitoringConnectionError extends MonitoringError {
51
51
  constructor(message, options) {
52
52
  super(message, options);
53
53
  this.name = 'MonitoringConnectionError';
54
54
  }
55
55
  }
56
- /** Запрос не уложился в таймаут (`timeoutMs`) */
56
+ /** The request did not complete within `timeoutMs`. */
57
57
  export class MonitoringTimeoutError extends MonitoringConnectionError {
58
58
  constructor(timeoutMs) {
59
59
  super(`request timed out after ${timeoutMs} ms`);
60
60
  this.name = 'MonitoringTimeoutError';
61
61
  }
62
62
  }
63
- /** Подпись вебхука не прошла проверку: тело подделано, изменено по дороге или проверяется не тем секретом */
63
+ /** The webhook signature does not match: the body was altered or is verified with the wrong secret. */
64
64
  export class WebhookSignatureError extends MonitoringError {
65
65
  constructor(message = 'webhook signature mismatch') {
66
66
  super(message);
67
67
  this.name = 'WebhookSignatureError';
68
68
  }
69
69
  }
70
- /** Тело ошибки в любом из форматов API: `/v1`, старые пути (`{ok: false}`), вход (`{code, message}`) */
70
+ /** Builds an error from any error body the API returns. */
71
71
  export function apiErrorFrom(status, body, requestId) {
72
72
  const b = (body ?? {});
73
73
  const v1 = typeof b.error === 'object' && b.error !== null ? b.error : undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../../src/core/errors.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../../src/core/errors.ts"],"names":[],"mappings":"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"}
@@ -1,62 +1,58 @@
1
- /** Настройки одного запроса — последний необязательный аргумент любого метода */
1
+ /** Per-request options, accepted as the last argument of every method. */
2
2
  export interface RequestOptions {
3
- /** Отмена запроса; повторы тоже прекращаются */
3
+ /** Cancels the request, including pending retries. */
4
4
  signal?: AbortSignal;
5
- /** Таймаут этого запроса, мс — вместо {@link ClientOptions.timeoutMs} */
5
+ /** Timeout for this request in milliseconds. Overrides {@link ClientOptions.timeoutMs}. */
6
6
  timeoutMs?: number;
7
- /** Сколько раз повторить этот запрос — вместо {@link ClientOptions.maxRetries} */
7
+ /** Maximum number of retries for this request. Overrides {@link ClientOptions.maxRetries}. */
8
8
  maxRetries?: number;
9
9
  }
10
- /** Настройки клиента */
10
+ /** Options of {@link MonitoringClient}. */
11
11
  export interface ClientOptions {
12
+ /** Your API key. Sent in the `x-api-key` header. */
13
+ apiKey: string;
12
14
  /**
13
- * API-ключ: ключ клиента `ce_…` (адреса, история и транзакции своего клиента) или личный ключ `ce_user_…`
14
- * (всё, что вы можете в панели, с вашими правами). Уходит в заголовке `x-api-key`.
15
+ * Your client ID. Optional: when omitted, it is resolved from the API key on first use and cached.
15
16
  */
16
- apiKey?: string;
17
- /** Токен сессии из {@link MonitoringClient.signIn} — вместо `apiKey`. Уходит в `Authorization: Bearer` */
18
- sessionToken?: string;
19
- /** Адрес API. По умолчанию `https://monitoring.v3.finance` */
17
+ clientId?: string;
18
+ /** API base URL. Defaults to `https://monitoring.v3.finance`. */
20
19
  baseUrl?: string;
21
- /** Таймаут запроса, мс. По умолчанию 30 000 */
20
+ /** Request timeout in milliseconds. Defaults to `30000`. */
22
21
  timeoutMs?: number;
23
22
  /**
24
- * Сколько раз повторять запрос после временной ошибки. По умолчанию 2.
23
+ * Maximum number of retries for transient errors. Defaults to `2`.
25
24
  *
26
- * Повторяются ответы 429 и 503 (запрос не был выполнен), а сбои сети и таймауты — только у запросов,
27
- * которые безопасно выполнить дважды (чтение, снятие и добавление адресов, отзыв ключа). Пауза — из
28
- * `Retry-After`, иначе экспоненциальная с разбросом.
25
+ * `429` and `503` responses are retried for every request, honoring `Retry-After`. Network errors and timeouts are
26
+ * retried only for requests that are safe to repeat. Backoff is exponential with jitter.
29
27
  */
30
28
  maxRetries?: number;
31
- /** Своя реализация `fetch` — для тестов, прокси, логирования. По умолчанию глобальный `fetch` */
29
+ /** Custom `fetch` implementation, e.g. for proxies or instrumentation. Defaults to the global `fetch`. */
32
30
  fetch?: typeof fetch;
33
- /** Дополнительные заголовки каждого запроса */
31
+ /** Additional headers sent with every request. */
34
32
  headers?: Record<string, string>;
35
33
  }
36
34
  type Query = Record<string, string | number | boolean | null | undefined>;
37
- /** Описание одного запроса к API */
35
+ /** @internal A request to the API. */
38
36
  export interface Call {
39
37
  method: 'GET' | 'POST' | 'PATCH' | 'DELETE';
40
38
  path: string;
41
39
  query?: Query;
42
40
  body?: unknown;
43
- /** Можно ли повторить после сбоя сети: повтор не изменит результат */
41
+ /** The request can be repeated after a network failure without changing the outcome. */
44
42
  idempotent: boolean;
45
- /** Статусы, которые возвращаются как данные, а не ошибка (тестовый вебхук: 502 — «не доставлен») */
43
+ /** Statuses returned as data rather than thrown. */
46
44
  acceptStatuses?: number[];
47
- /** false — запрос без учётных данных (вход) */
48
- auth?: boolean;
49
45
  options?: RequestOptions | undefined;
50
46
  }
51
- /** Транспорт SDK: адрес, авторизация, таймауты, повторы, разбор ошибок. Ресурсы ходят в API только через него */
47
+ /** @internal Transport: base URL, authentication, timeouts, retries and error mapping. */
52
48
  export declare class HttpClient {
53
49
  #private;
54
50
  readonly baseUrl: string;
55
51
  constructor(options: ClientOptions, defaultBaseUrl: string);
56
- /** Выполняет запрос и возвращает разобранный JSON ответа */
52
+ /** Sends a request and returns the parsed JSON response. */
57
53
  request<T>(call: Call): Promise<T>;
58
54
  }
59
- /** Сегмент пути: id клиента, хеш и т. п. */
55
+ /** @internal Encodes a path segment. */
60
56
  export declare const seg: (value: string | number) => string;
61
57
  export {};
62
58
  //# sourceMappingURL=http.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../../../src/core/http.ts"],"names":[],"mappings":"AAGA,iFAAiF;AACjF,MAAM,WAAW,cAAc;IAC7B,gDAAgD;IAChD,MAAM,CAAC,EAAE,WAAW,CAAA;IACpB,yEAAyE;IACzE,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,kFAAkF;IAClF,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB;AAED,wBAAwB;AACxB,MAAM,WAAW,aAAa;IAC5B;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,0GAA0G;IAC1G,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,8DAA8D;IAC9D,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,+CAA+C;IAC/C,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB;;;;;;OAMG;IACH,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,iGAAiG;IACjG,KAAK,CAAC,EAAE,OAAO,KAAK,CAAA;IACpB,+CAA+C;IAC/C,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CACjC;AAED,KAAK,KAAK,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,GAAG,SAAS,CAAC,CAAA;AAEzE,oCAAoC;AACpC,MAAM,WAAW,IAAI;IACnB,MAAM,EAAE,KAAK,GAAG,MAAM,GAAG,OAAO,GAAG,QAAQ,CAAA;IAC3C,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,CAAC,EAAE,KAAK,CAAA;IACb,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,sEAAsE;IACtE,UAAU,EAAE,OAAO,CAAA;IACnB,oGAAoG;IACpG,cAAc,CAAC,EAAE,MAAM,EAAE,CAAA;IACzB,+CAA+C;IAC/C,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,OAAO,CAAC,EAAE,cAAc,GAAG,SAAS,CAAA;CACrC;AAKD,iHAAiH;AACjH,qBAAa,UAAU;;IACrB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IAQxB,YAAY,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,EAWzD;IAED,4DAA4D;IACtD,OAAO,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC,CA4BvC;CAwCF;AAuCD,4CAA4C;AAC5C,eAAO,MAAM,GAAG,UAAW,MAAM,GAAG,MAAM,WAAsC,CAAA"}
1
+ {"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../../../src/core/http.ts"],"names":[],"mappings":"AAGA,0EAA0E;AAC1E,MAAM,WAAW,cAAc;IAC7B,sDAAsD;IACtD,MAAM,CAAC,EAAE,WAAW,CAAA;IACpB,2FAA2F;IAC3F,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,8FAA8F;IAC9F,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB;AAED,2CAA2C;AAC3C,MAAM,WAAW,aAAa;IAC5B,oDAAoD;IACpD,MAAM,EAAE,MAAM,CAAA;IACd;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,iEAAiE;IACjE,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,4DAA4D;IAC5D,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB;;;;;OAKG;IACH,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,0GAA0G;IAC1G,KAAK,CAAC,EAAE,OAAO,KAAK,CAAA;IACpB,kDAAkD;IAClD,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CACjC;AAED,KAAK,KAAK,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,GAAG,SAAS,CAAC,CAAA;AAEzE,sCAAsC;AACtC,MAAM,WAAW,IAAI;IACnB,MAAM,EAAE,KAAK,GAAG,MAAM,GAAG,OAAO,GAAG,QAAQ,CAAA;IAC3C,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,CAAC,EAAE,KAAK,CAAA;IACb,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,wFAAwF;IACxF,UAAU,EAAE,OAAO,CAAA;IACnB,oDAAoD;IACpD,cAAc,CAAC,EAAE,MAAM,EAAE,CAAA;IACzB,OAAO,CAAC,EAAE,cAAc,GAAG,SAAS,CAAA;CACrC;AAKD,0FAA0F;AAC1F,qBAAa,UAAU;;IACrB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IAOxB,YAAY,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,EAUzD;IAED,4DAA4D;IACtD,OAAO,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC,CAmCvC;CA6BF;AAuCD,wCAAwC;AACxC,eAAO,MAAM,GAAG,UAAW,MAAM,GAAG,MAAM,WAAsC,CAAA"}