@ledgerhq/coin-canton
Version:
306 lines • 10.5 kB
TypeScript
/**
* Types for the Canton Gateway HTTP API (OpenAPI 3.1).
*
* (published Redoc: https://canton-gateway.api.live.ledger.com/docs/openapi/redoc/gateway.yaml).
*
* Path templates use `{node_preset_id}` and `{party_id}` as in OpenAPI; clients substitute
* the configured node id and party id respectively.
*/
/** Nested in {@link OnboardingPrepareResponse}; mirrors topology transaction fields from onboarding prepare. */
export type TopologyTransactionData = {
serialized: string;
hash: string;
transaction: unknown;
};
/** `OnboardingPrepareResponse.transactions` (`TopologyTransactions` in OpenAPI). */
export type TopologyTransactions = {
namespace_transaction: TopologyTransactionData;
party_to_key_transaction: TopologyTransactionData;
party_to_participant_transaction: TopologyTransactionData;
combined_hash: string;
};
/** `POST /v1/node/{node_preset_id}/onboarding/prepare` — response 200 (`OnboardingPrepareResponse`). */
export type OnboardingPrepareResponse = {
party_id: string;
party_name: string;
public_key_fingerprint: string;
transactions: TopologyTransactions;
challenge_nonce: string;
challenge_deadline: number;
};
/** `POST /v1/node/{node_preset_id}/onboarding/prepare` — request body (`OnboardingPrepareRequest`). */
export type OnboardingPrepareRequest = {
public_key: string;
public_key_type: "ed25519";
};
/**
* `GET /v1/node/{node_preset_id}/party/{identifier}?by=...` — response 200 (`Party`).
* Slightly relaxed vs OpenAPI: `threshold` is optional because some responses omit it.
*/
export type Party = {
party_id: string;
public_key: string;
participants?: string[];
threshold?: number;
};
/** `POST /v1/node/{node_preset_id}/onboarding/submit` — request body (`OnboardingSubmitRequest`). */
export type OnboardingSubmitRequest = {
prepare_request: OnboardingPrepareRequest;
prepare_response: OnboardingPrepareResponse;
signature: string;
application_signature?: string;
};
/** `POST /v1/node/{node_preset_id}/onboarding/submit` — response 201 (`OnboardingSubmitResponse`). */
export type OnboardingSubmitResponse = {
party: Party;
};
/** Client-side convenience shape for party-already-exists style conflicts during onboarding (not a named OpenAPI schema). */
export type OnboardingSubmitError409 = {
partyId: string;
status: 409;
type: "PARTY_ALREADY_EXISTS";
message: string;
};
/** Element of `GetBalanceResponse.balances`; maps to OpenAPI `Balance`. */
export type InstrumentBalance = {
admin_id: string;
instrument_id: string;
amount: string;
locked: boolean;
utxo_count: number;
};
/** `GET /v1/node/{node_preset_id}/party/{party_id}/balance` — response 200 (`GetBalanceResponse`). */
export type GetBalanceResponse = {
at_round: number;
balances?: InstrumentBalance[];
} | InstrumentBalance[];
/** `OperationView.status` — OpenAPI `OperationView`. */
export type OperationStatusView = "Failed" | "Success";
/** `OperationView.type` (high-level operation category). */
export type OperationTypeView = "Initialize" | "Interaction" | "Receive" | "Send" | "Staking" | "Unknown";
/** `OperationView.details.operationType` (Canton-specific subtype). */
export type OperationType = "pre-approval" | "tap" | "transfer" | "transfer-proposal" | "transfer-rejected" | "transfer-withdrawn";
/** `OperationView.block`. */
export type BlockView = {
height: number;
time: string;
hash?: string;
};
/** `OperationView.asset` / `FeesView.asset`. */
export type AssetView = {
type: "native";
instrumentAdmin: string;
instrumentId: string;
issuer?: string;
} | {
type: "template";
packageId: string;
moduleName: string;
entityName: string;
issuer?: string;
} | {
type: "token";
instrumentAdmin: string;
instrumentId: string;
issuer?: string;
};
/** `OperationView.fee`. */
export type FeesView = {
value: string;
asset: AssetView;
details: unknown;
};
/** `OperationView.transfers` item. */
export type TransferView = {
address: string;
type: OperationTypeView;
value: string;
details: unknown;
asset: string;
};
/** `GET /v1/node/{node_preset_id}/party/{party_id}/operations` — each element of `GetOperationsResponse.operations`. */
export type OperationView = {
uid: string;
transaction_hash: string;
transaction_timestamp: string;
status: OperationStatusView;
type: OperationTypeView;
senders?: string[];
recipients?: string[];
transfers?: TransferView[];
block: BlockView;
fee: FeesView;
asset?: AssetView;
details: {
operationType?: OperationType;
metadata?: {
reason?: string;
};
};
};
/** `GET /v1/node/{node_preset_id}/party/{party_id}/transfer-proposals` — array item (`TransferProposal`). */
export type TransferProposal = {
contract_id: string;
sender: string;
receiver: string;
amount: string;
instrument_admin: string;
instrument_id: string;
memo?: string;
expires_at_micros: number;
update_id: string;
};
/** `GET /v1/node/{node_preset_id}/party/{party_id}/transfer-preapproval` — response 200 (`GetTransferPreapprovalResponse` in OpenAPI). */
export type GetTransferPreApprovalResponse = {
contract_id: string;
receiver: string;
provider: string;
valid_from: string;
last_renewed_at: string;
expires_at: string;
};
/** `TokenTransferRequest.picking_strategy` on `POST .../transaction/prepare`. */
export type SendPickingStrategy = "biggest-first" | "biggest-first-minimal" | "smallest-first" | "smallest-first-minimal";
/** `PrepareTransactionResponse.step`. */
export type TransferStep = {
type: "multi-step";
} | {
type: "single-step";
} | {
type: "not-applicable";
};
/** `POST /v1/node/{node_preset_id}/party/{party_id}/transaction/prepare` — response 200 (`PrepareTransactionResponse`). */
export type PrepareTransferResponse = {
serialized: string;
json: any;
hash: string;
step: TransferStep;
};
/**
* `POST /v1/node/{node_preset_id}/party/{party_id}/transaction/prepare` — request body variant
* `TokenTransferRequest` (`type: "token-transfer-request"`).
*/
export type PrepareTransferRequest = {
type: "token-transfer-request";
recipient: string;
amount: string;
instrument_id: string;
execute_before_secs: number;
instrument_admin?: string;
reason?: string;
picking_strategy?: SendPickingStrategy;
};
/**
* `POST /v1/node/{node_preset_id}/party/{party_id}/transaction/prepare` — request body variants
* `AcceptTransferInstruction` | `RejectTransferInstruction` | `WithdrawTransferInstruction`.
*/
export type PrepareTransferInstructionRequest = {
type: "accept-transfer-instruction";
contract_id: string;
reason?: string;
} | {
type: "reject-transfer-instruction";
contract_id: string;
reason?: string;
} | {
type: "withdraw-transfer-instruction";
contract_id: string;
reason?: string;
};
/** `POST /v1/node/{node_preset_id}/party/{party_id}/transaction/submit` — request body (`SubmitTransactionRequest`). */
export type SubmitTransactionRequest = {
serialized: string;
signature: string;
};
/** `POST /v1/node/{node_preset_id}/party/{party_id}/transaction/submit` — response 200 (`SubmitTransactionResponse`). */
export type SubmitTransactionResponse = {
submission_id: string;
update_id: string;
};
/** App-layer input for building a tap prepare call; combined with {@link TransactionType.TAP_REQUEST} in the prepare body. */
export type TapRequest = {
partyId: string;
amount?: string;
};
/** Same schema as {@link PrepareTransferResponse} when prepare body uses `TapRequest` (`tap-request`). */
export type PrepareTapResponse = {
serialized: string;
json: any;
hash: string;
step: TransferStep;
};
/** Same path as {@link SubmitTransactionRequest}; `partyId` is used only for URL construction on the client. */
export type SubmitTapRequestRequest = {
partyId: string;
serialized: string;
signature: string;
};
/** Same as {@link SubmitTransactionResponse}. */
export type SubmitTapRequestResponse = {
submission_id: string;
update_id: string;
};
/** Discriminator `type` values for `PrepareTransactionRequest` on `POST .../transaction/prepare`. */
export declare enum TransactionType {
TAP_REQUEST = "tap-request",
TRANSFER_PRE_APPROVAL_PROPOSAL = "transfer-pre-approval-proposal"
}
/** OpenAPI `CantonTimestamp`. */
export type CantonTimestamp = {
seconds: number;
nanos: number;
};
/** OpenAPI `CantonIdentifier` (e.g. on created/exercised contract events). */
export type CantonIdentifier = {
package_id: string;
module_name: string;
entity_name: string;
};
/** Simplified event shape; not the same as OpenAPI `Event` (LAMA normalized). Prefer {@link CantonEvent} for ledger payloads. */
export type BaseEvent = {
type: string;
contract_id: string;
details: string;
};
/** OpenAPI `CantonEvent` variant `created` (`Created`). */
export type CreatedEvent = {
type: "created";
contract_id: string;
template_id?: CantonIdentifier;
signatories?: string[];
observers?: string[];
details: unknown;
};
/** OpenAPI `CantonEvent` variant `exercised` (`Exercised`). */
export type ExercisedEvent = {
type: "exercised";
contract_id: string;
template_id?: CantonIdentifier;
choice: string;
consuming: boolean;
acting_parties?: string[];
details: unknown;
};
/** OpenAPI `CantonEvent` variant `archived` (`Archived`). */
export type ArchivedEvent = {
type: "archived";
contract_id: string;
details: unknown;
};
/** OpenAPI `CantonEvent` (discriminated union of archived | created | exercised). */
export type CantonEvent = ArchivedEvent | CreatedEvent | ExercisedEvent;
/** Local union; OpenAPI defines `CantonEvent` and a separate LAMA `Event` model on normalized views. */
export type Event = BaseEvent | CreatedEvent | ExercisedEvent;
/** OpenAPI `CantonTransaction`; appears as `PageView_T.items[]` on transaction history endpoints. */
export type CantonTransaction = {
update_id: string;
command_id?: string;
workflow_id?: string;
effective_at?: CantonTimestamp;
offset: number;
synchronizer_id: string;
record_time?: CantonTimestamp;
events?: CantonEvent[];
trace_context?: unknown;
};
//# sourceMappingURL=gateway.d.ts.map