@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.
- package/CHANGELOG.md +21 -11
- package/README.md +223 -148
- package/dist/cjs/client.d.ts +23 -42
- package/dist/cjs/client.d.ts.map +1 -1
- package/dist/cjs/client.js +44 -53
- package/dist/cjs/client.js.map +1 -1
- package/dist/cjs/core/errors.d.ts +18 -18
- package/dist/cjs/core/errors.d.ts.map +1 -1
- package/dist/cjs/core/errors.js +17 -17
- package/dist/cjs/core/errors.js.map +1 -1
- package/dist/cjs/core/http.d.ts +22 -26
- package/dist/cjs/core/http.d.ts.map +1 -1
- package/dist/cjs/core/http.js +28 -36
- package/dist/cjs/core/http.js.map +1 -1
- package/dist/cjs/core/pagination.d.ts +6 -7
- package/dist/cjs/core/pagination.d.ts.map +1 -1
- package/dist/cjs/core/pagination.js +1 -1
- package/dist/cjs/core/pagination.js.map +1 -1
- package/dist/cjs/core/scope.d.ts +8 -0
- package/dist/cjs/core/scope.d.ts.map +1 -0
- package/dist/cjs/core/scope.js +3 -0
- package/dist/cjs/core/scope.js.map +1 -0
- package/dist/cjs/generated/types.d.ts +129 -117
- package/dist/cjs/generated/types.d.ts.map +1 -1
- package/dist/cjs/generated/types.js +1 -1
- package/dist/cjs/generated/types.js.map +1 -1
- package/dist/cjs/index.d.ts +6 -6
- package/dist/cjs/index.d.ts.map +1 -1
- package/dist/cjs/index.js +13 -16
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/resources/account.d.ts +12 -51
- package/dist/cjs/resources/account.d.ts.map +1 -1
- package/dist/cjs/resources/account.js +17 -61
- package/dist/cjs/resources/account.js.map +1 -1
- package/dist/cjs/resources/addresses.d.ts +49 -65
- package/dist/cjs/resources/addresses.d.ts.map +1 -1
- package/dist/cjs/resources/addresses.js +60 -69
- package/dist/cjs/resources/addresses.js.map +1 -1
- package/dist/cjs/resources/catalog.d.ts +17 -10
- package/dist/cjs/resources/catalog.d.ts.map +1 -1
- package/dist/cjs/resources/catalog.js +23 -17
- package/dist/cjs/resources/catalog.js.map +1 -1
- package/dist/cjs/resources/deliveries.d.ts +34 -23
- package/dist/cjs/resources/deliveries.d.ts.map +1 -1
- package/dist/cjs/resources/deliveries.js +27 -17
- package/dist/cjs/resources/deliveries.js.map +1 -1
- package/dist/cjs/resources/transactions.d.ts +14 -14
- package/dist/cjs/resources/transactions.d.ts.map +1 -1
- package/dist/cjs/resources/transactions.js +15 -16
- package/dist/cjs/resources/transactions.js.map +1 -1
- package/dist/cjs/resources/webhooks.d.ts +22 -0
- package/dist/cjs/resources/webhooks.d.ts.map +1 -0
- package/dist/cjs/resources/webhooks.js +35 -0
- package/dist/cjs/resources/webhooks.js.map +1 -0
- package/dist/cjs/units.d.ts +11 -11
- package/dist/cjs/units.js +14 -14
- package/dist/cjs/units.js.map +1 -1
- package/dist/cjs/version.d.ts +3 -3
- package/dist/cjs/version.d.ts.map +1 -1
- package/dist/cjs/version.js +3 -3
- package/dist/cjs/version.js.map +1 -1
- package/dist/cjs/webhooks.d.ts +33 -28
- package/dist/cjs/webhooks.d.ts.map +1 -1
- package/dist/cjs/webhooks.js +33 -28
- package/dist/cjs/webhooks.js.map +1 -1
- package/dist/esm/client.d.ts +23 -42
- package/dist/esm/client.d.ts.map +1 -1
- package/dist/esm/client.js +46 -55
- package/dist/esm/client.js.map +1 -1
- package/dist/esm/core/errors.d.ts +18 -18
- package/dist/esm/core/errors.d.ts.map +1 -1
- package/dist/esm/core/errors.js +17 -17
- package/dist/esm/core/errors.js.map +1 -1
- package/dist/esm/core/http.d.ts +22 -26
- package/dist/esm/core/http.d.ts.map +1 -1
- package/dist/esm/core/http.js +28 -36
- package/dist/esm/core/http.js.map +1 -1
- package/dist/esm/core/pagination.d.ts +6 -7
- package/dist/esm/core/pagination.d.ts.map +1 -1
- package/dist/esm/core/pagination.js +1 -1
- package/dist/esm/core/pagination.js.map +1 -1
- package/dist/esm/core/scope.d.ts +8 -0
- package/dist/esm/core/scope.d.ts.map +1 -0
- package/dist/esm/core/scope.js +2 -0
- package/dist/esm/core/scope.js.map +1 -0
- package/dist/esm/generated/types.d.ts +129 -117
- package/dist/esm/generated/types.d.ts.map +1 -1
- package/dist/esm/generated/types.js +1 -1
- package/dist/esm/generated/types.js.map +1 -1
- package/dist/esm/index.d.ts +6 -6
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +6 -6
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/resources/account.d.ts +12 -51
- package/dist/esm/resources/account.d.ts.map +1 -1
- package/dist/esm/resources/account.js +15 -57
- package/dist/esm/resources/account.js.map +1 -1
- package/dist/esm/resources/addresses.d.ts +49 -65
- package/dist/esm/resources/addresses.d.ts.map +1 -1
- package/dist/esm/resources/addresses.js +60 -69
- package/dist/esm/resources/addresses.js.map +1 -1
- package/dist/esm/resources/catalog.d.ts +17 -10
- package/dist/esm/resources/catalog.d.ts.map +1 -1
- package/dist/esm/resources/catalog.js +23 -17
- package/dist/esm/resources/catalog.js.map +1 -1
- package/dist/esm/resources/deliveries.d.ts +34 -23
- package/dist/esm/resources/deliveries.d.ts.map +1 -1
- package/dist/esm/resources/deliveries.js +27 -17
- package/dist/esm/resources/deliveries.js.map +1 -1
- package/dist/esm/resources/transactions.d.ts +14 -14
- package/dist/esm/resources/transactions.d.ts.map +1 -1
- package/dist/esm/resources/transactions.js +15 -16
- package/dist/esm/resources/transactions.js.map +1 -1
- package/dist/esm/resources/webhooks.d.ts +22 -0
- package/dist/esm/resources/webhooks.d.ts.map +1 -0
- package/dist/esm/resources/webhooks.js +31 -0
- package/dist/esm/resources/webhooks.js.map +1 -0
- package/dist/esm/units.d.ts +11 -11
- package/dist/esm/units.js +14 -14
- package/dist/esm/units.js.map +1 -1
- package/dist/esm/version.d.ts +3 -3
- package/dist/esm/version.d.ts.map +1 -1
- package/dist/esm/version.js +3 -3
- package/dist/esm/version.js.map +1 -1
- package/dist/esm/webhooks.d.ts +33 -28
- package/dist/esm/webhooks.d.ts.map +1 -1
- package/dist/esm/webhooks.js +33 -28
- package/dist/esm/webhooks.js.map +1 -1
- package/package.json +8 -5
- package/src/client.ts +50 -61
- package/src/core/errors.ts +18 -18
- package/src/core/http.ts +45 -55
- package/src/core/pagination.ts +7 -8
- package/src/core/scope.ts +8 -0
- package/src/generated/types.ts +139 -125
- package/src/index.ts +7 -24
- package/src/resources/account.ts +18 -72
- package/src/resources/addresses.ts +84 -109
- package/src/resources/catalog.ts +28 -19
- package/src/resources/deliveries.ts +43 -30
- package/src/resources/transactions.ts +18 -17
- package/src/resources/webhooks.ts +36 -0
- package/src/units.ts +14 -14
- package/src/version.ts +3 -3
- package/src/webhooks.ts +37 -32
- package/dist/cjs/resources/clients.d.ts +0 -84
- package/dist/cjs/resources/clients.d.ts.map +0 -1
- package/dist/cjs/resources/clients.js +0 -102
- package/dist/cjs/resources/clients.js.map +0 -1
- package/dist/esm/resources/clients.d.ts +0 -84
- package/dist/esm/resources/clients.d.ts.map +0 -1
- package/dist/esm/resources/clients.js +0 -97
- package/dist/esm/resources/clients.js.map +0 -1
- package/src/resources/clients.ts +0 -135
package/src/version.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
/**
|
|
2
|
-
export const SDK_VERSION = '0.
|
|
1
|
+
/** SDK version, sent in the `user-agent` header. */
|
|
2
|
+
export const SDK_VERSION = '0.2.0'
|
|
3
3
|
|
|
4
|
-
/**
|
|
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
|
-
*
|
|
3
|
-
*
|
|
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
|
|
11
|
+
/** HMAC-SHA256 of the raw body keyed with your webhook secret, hex-encoded. */
|
|
12
12
|
signature: 'x-signature',
|
|
13
|
-
/**
|
|
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
|
-
*
|
|
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
|
-
*
|
|
27
|
-
* (
|
|
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
|
-
//
|
|
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: {
|
|
61
|
-
* await fetch('http://localhost:3000/webhooks', {
|
|
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
|
-
*
|
|
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 -
|
|
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
|
-
*
|
|
87
|
-
*
|
|
88
|
-
*
|
|
89
|
-
*
|
|
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}
|
|
95
|
+
* @throws {@link WebhookSignatureError} when the signature does not match. Respond with `401` and do not process it.
|
|
92
96
|
*
|
|
93
|
-
* @example Express
|
|
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
|
|
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 (
|
|
113
|
-
throw new MonitoringError('webhook body is not valid JSON', { cause:
|
|
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
|
-
/**
|
|
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
|
-
*
|
|
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":";;;AAAA,6CAA2E;AAC3E,yDAA2D;AA4B3D,4GAA4G;AAC5G;IACW,KAAK,CAAY;IAC1B,YAAY,IAAgB;QAC1B,IAAI,CAAC,KAAK,GAAG,IAAI,CAAA;IACnB,CAAC;IAED,uDAAuD;IACvD,KAAK,CAAC,IAAI,CAAC,QAAgB,EAAE,OAAwB;QACnD,MAAM,CAAC,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,CAAsB,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,eAAe,IAAA,aAAG,EAAC,QAAQ,CAAC,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAA;QAChJ,OAAO,CAAC,CAAC,KAAK,CAAA;IAChB,CAAC;IAED;;;;;;;OAOG;IACH,MAAM,CAAC,QAAgB,EAAE,MAAM,GAAoB,EAAE,EAAE,OAAwB;QAC7E,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,eAAe,IAAA,aAAG,EAAC,QAAQ,CAAC,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAA;IACpI,CAAC;IAED,kDAAkD;IAClD,KAAK,CAAC,MAAM,CAAC,QAAgB,EAAE,KAAa,EAAE,OAAwB;QACpE,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,eAAe,IAAA,aAAG,EAAC,QAAQ,CAAC,SAAS,IAAA,aAAG,EAAC,KAAK,CAAC,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAA;IACpI,CAAC;CACF;;AAED;;;;GAIG;AACH;IACW,KAAK,CAAY;IAC1B,oBAAoB;IACX,IAAI,CAAoB;IAEjC,YAAY,IAAgB;QAC1B,IAAI,CAAC,KAAK,GAAG,IAAI,CAAA;QACjB,IAAI,CAAC,IAAI,GAAG,IAAI,kBAAkB,CAAC,IAAI,CAAC,CAAA;IAC1C,CAAC;IAED,2EAA2E;IAC3E,IAAI,CAAC,MAAM,GAAsB,EAAE,EAAE,OAAwB;QAC3D,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,EAAE,GAAG,MAAM,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAA;IACpH,CAAC;IAED,+CAA+C;IAC/C,OAAO,CAAC,MAAM,GAAqC,EAAE,EAAE,OAAwB;QAC7E,OAAO,IAAA,wBAAQ,EAAiB,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,MAAM,EAAE,KAAK,EAAE,EAAE,OAAO,CAAC,CAAC,CAAA;IACtF,CAAC;IAED,GAAG,CAAC,QAAgB,EAAE,OAAwB;QAC5C,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,eAAe,IAAA,aAAG,EAAC,QAAQ,CAAC,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAA;IAC/G,CAAC;IAED;;;;;;;OAOG;IACH,MAAM,CAAC,QAAgB,EAAE,MAA0B,EAAE,OAAwB;QAC3E,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,eAAe,IAAA,aAAG,EAAC,QAAQ,CAAC,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAA;IAC/H,CAAC;IAED,oHAAoH;IACpH,YAAY,CAAC,QAAgB,EAAE,MAAM,GAAuB,EAAE,EAAE,OAAwB;QACtF,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,eAAe,IAAA,aAAG,EAAC,QAAQ,CAAC,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAA;IACtI,CAAC;IAED;;;;;;;;;;OAUG;IACH,eAAe,CAAC,QAAgB,EAAE,MAAM,GAAuB,EAAE,EAAE,OAAwB;QACzF,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC;YACxB,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,eAAe,IAAA,aAAG,EAAC,QAAQ,CAAC,gBAAgB;YAClD,IAAI,EAAE,MAAM;YACZ,UAAU,EAAE,KAAK;YACjB,oEAAoE;YACpE,cAAc,EAAE,CAAC,GAAG,CAAC;YACrB,OAAO;SACR,CAAC,CAAA;IACJ,CAAC;IAED,kCAAkC;IAClC,KAAK,CAAC,OAAO,CAAC,QAAgB,EAAE,OAAwB;QACtD,MAAM,CAAC,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,CAAsB,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,eAAe,IAAA,aAAG,EAAC,QAAQ,CAAC,UAAU,EAAE,UAAU,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAA;QACnJ,OAAO,CAAC,CAAC,KAAK,CAAA;IAChB,CAAC;CACF"}
|
|
@@ -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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"}
|