@v3finance/core-sdk 0.2.0 → 0.2.2
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 +74 -0
- package/README.md +6 -2
- package/dist/cjs/core/gated.d.ts +9 -3
- package/dist/cjs/core/gated.d.ts.map +1 -1
- package/dist/cjs/core/gated.js +9 -3
- package/dist/cjs/core/gated.js.map +1 -1
- package/dist/cjs/core/http.d.ts.map +1 -1
- package/dist/cjs/core/http.js +17 -3
- package/dist/cjs/core/http.js.map +1 -1
- package/dist/cjs/generated/operations.js +1 -1
- package/dist/cjs/generated/types.d.ts +30 -14
- package/dist/cjs/generated/types.d.ts.map +1 -1
- package/dist/cjs/resources/addresses.d.ts +4 -3
- package/dist/cjs/resources/addresses.d.ts.map +1 -1
- package/dist/cjs/resources/addresses.js +4 -3
- package/dist/cjs/resources/addresses.js.map +1 -1
- package/dist/cjs/resources/approvals.d.ts +22 -0
- package/dist/cjs/resources/approvals.d.ts.map +1 -1
- package/dist/cjs/resources/approvals.js +22 -0
- package/dist/cjs/resources/approvals.js.map +1 -1
- package/dist/cjs/resources/transfers.d.ts +81 -17
- package/dist/cjs/resources/transfers.d.ts.map +1 -1
- package/dist/cjs/resources/transfers.js +81 -17
- package/dist/cjs/resources/transfers.js.map +1 -1
- package/dist/cjs/resources/types.d.ts +0 -4
- package/dist/cjs/resources/types.d.ts.map +1 -1
- package/dist/cjs/version.d.ts +1 -1
- package/dist/cjs/version.js +1 -1
- package/dist/esm/core/gated.d.ts +9 -3
- package/dist/esm/core/gated.d.ts.map +1 -1
- package/dist/esm/core/gated.js +9 -3
- package/dist/esm/core/gated.js.map +1 -1
- package/dist/esm/core/http.d.ts.map +1 -1
- package/dist/esm/core/http.js +17 -3
- package/dist/esm/core/http.js.map +1 -1
- package/dist/esm/generated/operations.js +1 -1
- package/dist/esm/generated/types.d.ts +30 -14
- package/dist/esm/generated/types.d.ts.map +1 -1
- package/dist/esm/resources/addresses.d.ts +4 -3
- package/dist/esm/resources/addresses.d.ts.map +1 -1
- package/dist/esm/resources/addresses.js +4 -3
- package/dist/esm/resources/addresses.js.map +1 -1
- package/dist/esm/resources/approvals.d.ts +22 -0
- package/dist/esm/resources/approvals.d.ts.map +1 -1
- package/dist/esm/resources/approvals.js +22 -0
- package/dist/esm/resources/approvals.js.map +1 -1
- package/dist/esm/resources/transfers.d.ts +81 -17
- package/dist/esm/resources/transfers.d.ts.map +1 -1
- package/dist/esm/resources/transfers.js +81 -17
- package/dist/esm/resources/transfers.js.map +1 -1
- package/dist/esm/resources/types.d.ts +0 -4
- package/dist/esm/resources/types.d.ts.map +1 -1
- package/dist/esm/version.d.ts +1 -1
- package/dist/esm/version.js +1 -1
- package/docs/concepts.md +7 -4
- package/docs/errors.md +54 -16
- package/package.json +1 -1
- package/src/core/gated.ts +9 -3
- package/src/core/http.ts +17 -3
- package/src/generated/operations.ts +1 -1
- package/src/generated/types.ts +31 -14
- package/src/resources/addresses.ts +4 -3
- package/src/resources/approvals.ts +22 -0
- package/src/resources/transfers.ts +81 -17
- package/src/resources/types.ts +0 -4
- package/src/version.ts +1 -1
|
@@ -229,8 +229,8 @@ export interface AddressDetail {
|
|
|
229
229
|
tokenId: string | null;
|
|
230
230
|
/** format: date-time */
|
|
231
231
|
createdAt: string;
|
|
232
|
-
/** Сводка совместного доступа. Приходит в
|
|
233
|
-
sharing
|
|
232
|
+
/** Сводка совместного доступа. Приходит всегда: в списке, ответе PATCH и детали адреса */
|
|
233
|
+
sharing: SharingSummary;
|
|
234
234
|
/** Код токена адреса (из segmentsJson + asset route) */
|
|
235
235
|
asset: string | null;
|
|
236
236
|
assetName: string | null;
|
|
@@ -297,6 +297,7 @@ export interface OutgoingTxSummary {
|
|
|
297
297
|
status: string;
|
|
298
298
|
txHash: string | null;
|
|
299
299
|
fee: string | null;
|
|
300
|
+
/** Причина закрытия — только у failed/rejected/cancelled. У остальных статусов (awaiting_approval, pending, submitted, confirmed) — ВСЕГДА null: у незакрытого перевода причины отказа нет. Неясный исход исполнения (pending, транзакция могла уйти в сеть) здесь не показывается — его признак pending дольше 10 минут по updatedAt («ждёт сверки администратором») */
|
|
300
301
|
failureReason: string | null;
|
|
301
302
|
/** format: date-time */
|
|
302
303
|
createdAt: string;
|
|
@@ -461,8 +462,8 @@ export interface AddressListItem {
|
|
|
461
462
|
assetSymbol: string | null;
|
|
462
463
|
/** Баланс в decimal (по token.decimals). NULL — ledger-счёта ещё нет */
|
|
463
464
|
balanceDecimal: string | null;
|
|
464
|
-
/** Сводка совместного доступа. Приходит в
|
|
465
|
-
sharing
|
|
465
|
+
/** Сводка совместного доступа. Приходит всегда: в списке, ответе PATCH и детали адреса */
|
|
466
|
+
sharing: SharingSummary;
|
|
466
467
|
/** Владелец адреса (создатель) с UI-метаданными */
|
|
467
468
|
owner: MemberCard | null;
|
|
468
469
|
access: AddressAccess;
|
|
@@ -745,11 +746,11 @@ export interface ApprovalRequestDetail {
|
|
|
745
746
|
}
|
|
746
747
|
export interface ApprovalRequestEvent {
|
|
747
748
|
id: string;
|
|
748
|
-
/** created|voted|approved|rejected|cancelled|applied|apply_failed|stale */
|
|
749
|
+
/** created|voted|approved|rejected|cancelled|applied|apply_failed|stale|folder_skipped. folder_skipped идёт ПОСЛЕ applied: адрес по заявке create_address создан, но в папку, выбранную при подаче, не положен (папку удалили или у инициатора отозвали право) — причина в comment */
|
|
749
750
|
type: string;
|
|
750
751
|
actorId: string | null;
|
|
751
752
|
decision: string | null;
|
|
752
|
-
/**
|
|
753
|
+
/** У voted — пояснение ПОДПИСАНТА; у stale, apply_failed и folder_skipped — системное пояснение для человека. У события applied всегда null — id созданного объекта лежит в resultId, чтобы клиент не напечатал его как комментарий */
|
|
753
754
|
comment: string | null;
|
|
754
755
|
/** Только у applied: id созданного/изменённого объекта */
|
|
755
756
|
resultId: string | null;
|
|
@@ -1250,7 +1251,7 @@ export interface CreateAddressBody {
|
|
|
1250
1251
|
* length: 1..16
|
|
1251
1252
|
*/
|
|
1252
1253
|
emoji?: string;
|
|
1253
|
-
/** Создать адрес В группу адресов (нужно право create_address на группе). Новый адрес — member группы, доступен её
|
|
1254
|
+
/** Создать адрес В группу адресов (нужно право create_address на группе). Новый адрес — member группы, доступен её участникам. Если создание ушло на подпись (202), папка сохраняется в заявке, а право на неё перепроверяется при применении: отозвали — адрес создаётся без папки, с оговоркой applyWarnings в ответе голосования. При прямом создании (201) то же — оговорка `warnings` в теле ответа */
|
|
1254
1255
|
groupId?: string;
|
|
1255
1256
|
}
|
|
1256
1257
|
export interface CreateAddressGroupBody {
|
|
@@ -1274,6 +1275,14 @@ export interface CreateAddressResult {
|
|
|
1274
1275
|
label: string | null;
|
|
1275
1276
|
description: string | null;
|
|
1276
1277
|
};
|
|
1278
|
+
/** Создано, но не всё: адрес есть, а в папку из `groupId` не положен. Право на папку роут проверяет до создания (иначе 403), а запись членства — уже после Wallet Service и мониторинга; право могли отозвать в этом окне или запись могла не пройти. Есть только когда непусто; не показывать адрес в папке, если оговорка пришла */
|
|
1279
|
+
warnings?: FolderSkipWarning[];
|
|
1280
|
+
}
|
|
1281
|
+
export interface FolderSkipWarning {
|
|
1282
|
+
/** FOLDER_NOT_FOUND — папку удалили; FOLDER_FORBIDDEN — у создателя адреса больше нет права заводить в неё адреса; FOLDER_WRITE_FAILED — сбой записи */
|
|
1283
|
+
code: "FOLDER_NOT_FOUND" | "FOLDER_FORBIDDEN" | "FOLDER_WRITE_FAILED";
|
|
1284
|
+
/** Готовая фраза для человека */
|
|
1285
|
+
message: string;
|
|
1277
1286
|
}
|
|
1278
1287
|
export interface CreateCompositeBody {
|
|
1279
1288
|
/**
|
|
@@ -1617,7 +1626,7 @@ export interface CreateTransactionResult {
|
|
|
1617
1626
|
amountDecimal: string;
|
|
1618
1627
|
asset: string;
|
|
1619
1628
|
network: string;
|
|
1620
|
-
/**
|
|
1629
|
+
/** 201 — confirmed (исполнен сейчас); редко pending с заполненным txHash (транзакция ушла в сеть, а учёт не записался — доводит сверка, повторять перевод нельзя); 202 — awaiting_approval; 200 (replay по idempotencyKey) — ТЕКУЩИЙ статус перевода, любой: pending (первый запрос ещё исполняется — или его исход неизвестен: первый ответ был 502 TRANSFER_OUTCOME_UNKNOWN; повтор НЕ исполняет перевод заново, исход устанавливает сверка), awaiting_approval, confirmed, failed, rejected, cancelled */
|
|
1621
1630
|
status: string;
|
|
1622
1631
|
txHash: string | null;
|
|
1623
1632
|
fee: string | null;
|
|
@@ -1631,12 +1640,13 @@ export interface CreateTransactionResult {
|
|
|
1631
1640
|
}
|
|
1632
1641
|
export interface CreateTransferBody {
|
|
1633
1642
|
fromAddressId: string;
|
|
1643
|
+
/** Адрес получателя. Формат проверяется по типу сети адреса-отправителя ДО резерва средств: TRON — base58check (34 символа, «T…», контрольная сумма), EVM — 0x + 40 hex (смешанный регистр — контрольная сумма EIP-55). Не подошёл — 400 INVALID_DESTINATION_ADDRESS. Строка проверяется как есть, пробелы по краям — ошибка формата */
|
|
1634
1644
|
toAddress: string;
|
|
1635
1645
|
/** DECIMAL строка — конвертируется по token.decimals */
|
|
1636
1646
|
amount: string;
|
|
1637
1647
|
asset: string;
|
|
1638
1648
|
/**
|
|
1639
|
-
* Уникальный ключ попытки перевода (рекомендуется: uuid). Повторный запрос с тем же ключом вернёт
|
|
1649
|
+
* Уникальный ключ попытки перевода (рекомендуется: uuid). Повторный запрос с тем же ключом и теми же параметрами вернёт 200 с существующим переводом — без второго broadcast, без повторной оценки политик. Тот же ключ с другими параметрами — 409 IDEMPOTENCY_KEY_REUSED. Для новой попытки после failed — новый ключ.
|
|
1640
1650
|
*
|
|
1641
1651
|
* length: 8..128
|
|
1642
1652
|
*/
|
|
@@ -1907,6 +1917,7 @@ export interface HistoryOutItem {
|
|
|
1907
1917
|
asset: string;
|
|
1908
1918
|
assetSymbol: string;
|
|
1909
1919
|
fee: string | null;
|
|
1920
|
+
/** Причина закрытия — только у failed/rejected/cancelled. У остальных статусов (awaiting_approval, pending, submitted, confirmed) — ВСЕГДА null: у незакрытого перевода причины отказа нет. Неясный исход исполнения (pending, транзакция могла уйти в сеть) здесь не показывается — его признак pending дольше 10 минут по updatedAt («ждёт сверки администратором») */
|
|
1910
1921
|
failureReason: string | null;
|
|
1911
1922
|
fromAddress: {
|
|
1912
1923
|
id: string;
|
|
@@ -2983,7 +2994,7 @@ export interface RatesResponse {
|
|
|
2983
2994
|
}>;
|
|
2984
2995
|
}
|
|
2985
2996
|
export interface ReconcileTransferBody {
|
|
2986
|
-
/** Хеш от подписывающего сервиса. ЕСТЬ — транзакция ушла в сеть, перевод доводится до confirmed. НЕТ (или null) —
|
|
2997
|
+
/** Хеш от подписывающего сервиса. ЕСТЬ — транзакция ушла в сеть, перевод доводится до confirmed. НЕТ (или null) — сверяющий утверждает, что broadcast'а не было, и резерв возвращается (failed). Для pending с неясным исходом (у pending без txHash его не отличить по ответам API — failureReason у незакрытого перевода null) это утверждение нужно ПРОВЕРИТЬ по сети: возврат за ушедшую транзакцию печатает деньги. Если у pending-перевода хеш уже сохранён (broadcast прошёл), он обязателен: без него — 409 TRANSFER_BROADCAST, с другим — 409 TXHASH_MISMATCH (сохранённый — в error.details.txHash) */
|
|
2987
2998
|
txHash?: string | null;
|
|
2988
2999
|
/** Комиссия, если известна */
|
|
2989
3000
|
fee?: string | null;
|
|
@@ -2991,7 +3002,8 @@ export interface ReconcileTransferBody {
|
|
|
2991
3002
|
reason?: string | null;
|
|
2992
3003
|
}
|
|
2993
3004
|
export interface ReconcileTransferResult {
|
|
2994
|
-
|
|
3005
|
+
/** Статус перевода после сверки: confirmed (по хешу) | failed (резерв возвращён). rejected/cancelled — у закрытого перевода с невозвращённым резервом: резерв возвращён, статус прежний */
|
|
3006
|
+
status: "confirmed" | "failed" | "rejected" | "cancelled";
|
|
2995
3007
|
txHash: string | null;
|
|
2996
3008
|
}
|
|
2997
3009
|
export interface RegisterPushTokenBody {
|
|
@@ -3010,8 +3022,9 @@ export interface RequestVoteResult {
|
|
|
3010
3022
|
approvals: number;
|
|
3011
3023
|
/** range: -9007199254740991..9007199254740991 */
|
|
3012
3024
|
threshold: number;
|
|
3013
|
-
/** true — этот голос финализировал заявку (применена/отклонена) */
|
|
3025
|
+
/** true — этот голос финализировал заявку (применена/отклонена). У заявки на перевод status=APPROVED при finalized=false значит, что исход рассчитал НЕ этот вызов: applyError пуст — перевод исполняет (исполнил) параллельный запрос ЛИБО исполнение, начатое другим вызовом, оборвалось (сам перевод тогда не закроется); исход — только по GET /transfers/{id}: confirmed/failed, а pending дольше 10 минут по updatedAt — ждёт сверки (admin). applyError TRANSFER_EXECUTION_FAILED — к моменту одобрения перевод уже не ждал подписей. finalized=false с пустым applyError приходит и тогда, когда одобрил ЭТОТ голос, но исход перевода им не установлен (перевод pending: подписывающий сервис не дал определённого ответа, транзакция могла уйти в сеть, а могла и нет): показывайте «голос учтён», не «применено». finalized=true с пустым applyError у перевода — исполнен этим вызовом (confirmed) */
|
|
3014
3026
|
finalized: boolean;
|
|
3027
|
+
/** Голос финализировал заявку, а применение не дало результата; status при этом итоговый. Коды: STALE — цель изменилась (status=REJECTED); APPLY_FAILED / APPLY_FAILED_ROLLED_BACK / APPLY_FAILED_PARTIAL — мутация не применена (целиком / цепочка откатана / частично). У action=transfer финальный approve ИСПОЛНЯЕТ перевод, status=APPROVED: TRANSFER_EXECUTION_FAILED — перевод не исполнен (обычно failed, резерв возвращён; точный статус — GET /transfers/{id}; при finalized=false — перевод уже не ждал подписей, одобрение его не исполняло). Неясный исход перевода (подписывающий сервис не дал определённого ответа, перевод pending, средства зарезервированы, транзакция могла уйти в сеть, исход установит сверка, admin) ошибкой НЕ отдаётся: applyError null, status APPROVED, finalized=false. Кода TRANSFER_OUTCOME_UNKNOWN здесь нет — он только у POST /transfers */
|
|
3015
3028
|
applyError: {
|
|
3016
3029
|
code: string;
|
|
3017
3030
|
message: string;
|
|
@@ -3019,6 +3032,8 @@ export interface RequestVoteResult {
|
|
|
3019
3032
|
resolvedResultId: string | null;
|
|
3020
3033
|
/** Только для композитных заявок: прогресс по шагам */
|
|
3021
3034
|
stepsProgress?: StepProgress[];
|
|
3035
|
+
/** Применено, но не всё: адрес по заявке create_address создан (resolvedResultId), а в папку, выбранную при подаче, не положен. Право на папку проверяется при ПРИМЕНЕНИИ, а не при подаче. Есть только когда непусто; в истории заявки — событие folder_skipped */
|
|
3036
|
+
applyWarnings?: FolderSkipWarning[];
|
|
3022
3037
|
}
|
|
3023
3038
|
export interface StepProgress {
|
|
3024
3039
|
/** range: -9007199254740991..9007199254740991 */
|
|
@@ -3169,6 +3184,7 @@ export interface TransactionDetail {
|
|
|
3169
3184
|
decisionPolicyCode: string | null;
|
|
3170
3185
|
/** Человеческое название решающей политики (для UI вместо кода) */
|
|
3171
3186
|
decisionPolicyName: string | null;
|
|
3187
|
+
/** Причина закрытия — только у failed/rejected/cancelled. У остальных статусов (awaiting_approval, pending, submitted, confirmed) — ВСЕГДА null: у незакрытого перевода причины отказа нет. Неясный исход исполнения (pending, транзакция могла уйти в сеть) здесь не показывается — его признак pending дольше 10 минут по updatedAt («ждёт сверки администратором») */
|
|
3172
3188
|
failureReason: string | null;
|
|
3173
3189
|
/** format: date-time */
|
|
3174
3190
|
createdAt: string;
|
|
@@ -3486,7 +3502,7 @@ export interface VoteRequestBody {
|
|
|
3486
3502
|
comment?: string;
|
|
3487
3503
|
}
|
|
3488
3504
|
export interface VoteResult {
|
|
3489
|
-
/** Статус перевода ПОСЛЕ голоса: awaiting_approval (голосов мало) | rejected | confirmed/failed (финальный approve исполняет сразу) */
|
|
3505
|
+
/** Статус перевода ПОСЛЕ голоса: awaiting_approval (голосов мало) | rejected | confirmed/failed (финальный approve исполняет сразу). pending — исполнение не закончено, повторять перевод нельзя; executionError у pending всегда null, исход этим ответом НЕ установлен, ждать его «через секунды» нельзя. Так отдаётся и неясный исход (подписывающий сервис не дал определённого ответа, транзакция могла уйти в сеть, резерв стоит — доводит сверка, admin), и: txHash в GET /transfers/{id} есть — транзакция ушла в сеть, а учёт не записался, доводит сверка (admin) по этому хешу; перевод исполняет параллельный запрос (одновременный голос другого подписанта или исходный вызов при повторе голоса) ЛИБО исполнение оборвалось (клиент, который его начал, отключился — сам перевод тогда не закроется). Различает только время: перечитывайте GET; confirmed/failed — исход; pending дольше 10 минут по updatedAt — «ждёт сверки администратором» */
|
|
3490
3506
|
status: string;
|
|
3491
3507
|
/**
|
|
3492
3508
|
* Собрано approve-голосов
|
|
@@ -3496,7 +3512,7 @@ export interface VoteResult {
|
|
|
3496
3512
|
approvals: number;
|
|
3497
3513
|
/** range: -9007199254740991..9007199254740991 */
|
|
3498
3514
|
threshold: number;
|
|
3499
|
-
/**
|
|
3515
|
+
/** Финальный approve запустил исполнение, и оно перевод НЕ исполнило. code: TRANSFER_EXECUTION_FAILED — не исполнен (status=failed, средства возвращены; исключения: failed с txHash у перевода, см. описание ручки, и status=pending, если сам возврат резерва не записался — тогда перевод доводит сверка). Тот же код — если к моменту одобрения перевод уже не ждал подписей (status — его фактический: failed/rejected/cancelled): одобрение его не исполнило. Неясный исход (подписывающий сервис не дал определённого ответа, транзакция могла уйти в сеть) ошибкой НЕ отдаётся: status=pending, executionError=null — показывайте «исполняется, исход уточняется». Кода TRANSFER_OUTCOME_UNKNOWN в голосе нет, он только у POST /transfers */
|
|
3500
3516
|
executionError: {
|
|
3501
3517
|
code: string;
|
|
3502
3518
|
message: string;
|