UNPKG

@trustless-work/escrow

Version:

<p align="center"> <img src="https://github.com/user-attachments/assets/5b182044-dceb-41f5-acf0-da22dea7c98a" alt="CLR-S (2)"> </p>

492 lines (487 loc) 12.3 kB
/** * Milestone */ type BaseMilestone = { /** * Text describing the function of the milestone. */ description: string; /** * Milestone status. Ex: Approved, In dispute, etc... */ status?: string; /** * Evidence of work performed by the service provider. */ evidence?: string; }; /** * Single Release Milestone */ type SingleReleaseMilestone = BaseMilestone & { /** * Approved flag, only if the escrow is single-release */ approved?: boolean; }; /** * Multi Release Milestone */ type MultiReleaseMilestone = BaseMilestone & { /** * Amount to be transferred upon completion of this milestone */ amount: number; /** * Flags validating certain milestone life states, only if the escrow is multi-release */ flags?: Flags; }; /** * Single Release Escrow */ type SingleReleaseEscrow = { /** * Address of the user signing the contract transaction */ signer: string; /** * ID (address) that identifies the escrow contract */ contractId: string; /** * Unique identifier for the escrow */ engagementId: string; /** * Name of the escrow */ title: string; /** * Roles that make up the escrow structure */ roles: Roles; /** * Text describing the function of the escrow */ description: string; /** * Amount to be transferred upon completion of escrow milestones */ amount: number; /** * Commission that the platform will receive when the escrow is completed */ platformFee: number; /** * Amount of the token (XLM, USDC, EURC, etc) in the smart contract. */ balance: number; /** * Objectives to be completed to define the escrow as completed */ milestones: SingleReleaseMilestone[]; /** * Flags validating certain escrow life states */ flags?: Flags; /** * Information on the trustline that will manage the movement of funds in escrow */ trustline: Trustline; /** * Field used to identify the recipient's address in transactions through an intermediary account. This value is included as a memo in the transaction and allows the funds to be correctly routed to the wallet of the specified recipient */ receiverMemo?: number; }; /** * Multi Release Escrow */ type MultiReleaseEscrow = Omit<SingleReleaseEscrow, "milestones" | "flags" | "amount"> & { milestones: MultiReleaseMilestone[]; }; /** * Trustline */ type Trustline = { /** * Public address establishing permission to accept and use a specific token. */ address: string; /** * Number of decimals into which the token is divided. */ decimals: number; }; /** * Roles */ type Roles = { /** * Address of the entity requiring the service. */ approver: string; /** * Address of the entity providing the service. */ serviceProvider: string; /** * Address of the entity that owns the escrow */ platformAddress: string; /** * Address of the user in charge of releasing the escrow funds to the service provider. */ releaseSigner: string; /** * Address in charge of resolving disputes within the escrow. */ disputeResolver: string; /** * Address where escrow proceeds will be sent to */ receiver: string; }; /** * Flags */ type Flags = { /** * Flag indicating that an escrow is in dispute. */ disputed?: boolean; /** * Flag indicating that escrow funds have already been released. */ released?: boolean; /** * Flag indicating that a disputed escrow has already been resolved. */ resolved?: boolean; /** * Flag indicating whether a milestone has been approved by the approver. */ approved?: boolean; }; /** * The base URL for the Trustless Work API */ type baseURL = "https://api.trustlesswork.com" | "https://dev.api.trustlesswork.com"; /** * Escrow Type */ type EscrowType = "single-release" | "multi-release"; /** * Unique possible statuses for a Trustless Work request */ type Status = "SUCCESS" | "FAILED"; /** * Escrow's Response like fund, release, change, etc ... */ type EscrowRequestResponse = { /** * Status of the request */ status: Status; /** * Unsigned transaction */ unsignedTransaction?: string; }; /** * Send Transaction Response */ type SendTransactionResponse = { /** * Status of the request */ status: Status; /** * Message of the request */ message: string; }; /** * Initialize Escrow Response */ type InitializeSingleReleaseEscrowResponse = EscrowRequestResponse & { /** * ID (address) that identifies the escrow contract */ contractId: string; /** * Escrow data */ escrow: SingleReleaseEscrow; /** * Message of the request */ message: string; }; /** * Initialize Multi Release Escrow Response */ type InitializeMultiReleaseEscrowResponse = InitializeSingleReleaseEscrowResponse & { /** * Escrow data */ escrow: MultiReleaseEscrow; }; /** * Update Escrow Response */ type UpdateSingleReleaseEscrowResponse = InitializeSingleReleaseEscrowResponse; /** * Update Multi Release Escrow Response */ type UpdateMultiReleaseEscrowResponse = InitializeMultiReleaseEscrowResponse; /** * Get Balances Response */ type GetEscrowBalancesResponse = { /** * Address of the escrow */ address: string; /** * Balance of the escrow */ balance: number; }; /** * Documentation: https://docs.trustlesswork.com/trustless-work/developer-resources/quickstart/integration-demo-project/entities */ /** * Single Release Milestone Payload */ type SingleReleaseMilestonePayload = { /** * Text describing the function of the milestone */ description: string; }; /** * Multi Release Milestone Payload */ type MultiReleaseMilestonePayload = { /** * Text describing the function of the milestone */ description: string; /** * Amount to be transferred upon completion of this milestone */ amount: number; }; /** * Single Release Initialize Escrow Payload */ type InitializeSingleReleaseEscrowPayload = Omit<SingleReleaseEscrow, "contractId" | "balance" | "milestones"> & { /** * Objectives to be completed to define the escrow as completed */ milestones: SingleReleaseMilestonePayload[]; }; /** * Multi Release Initialize Escrow Payload */ type InitializeMultiReleaseEscrowPayload = Omit<MultiReleaseEscrow, "contractId" | "balance" | "milestones"> & { /** * Objectives to be completed to define the escrow as completed */ milestones: MultiReleaseMilestonePayload[]; }; /** * Single Release Update Escrow Payload */ type UpdateSingleReleaseEscrowPayload = { /** * ID (address) that identifies the escrow contract */ contractId: string; /** * Escrow data */ escrow: Omit<SingleReleaseEscrow, "contractId" | "signer" | "balance">; /** * Address of the user signing the contract transaction */ signer: string; }; /** * Multi Release Update Escrow Payload */ type UpdateMultiReleaseEscrowPayload = { /** * ID (address) that identifies the escrow contract */ contractId: string; /** * Escrow data */ escrow: Omit<MultiReleaseEscrow, "contractId" | "signer" | "balance">; /** * Address of the user signing the contract transaction */ signer: string; }; /** * Change Milestone Status Payload, this can be a single-release or multi-release */ type ChangeMilestoneStatusPayload = { /** * ID (address) that identifies the escrow contract */ contractId: string; /** * Index of the milestone to be updated */ milestoneIndex: string; /** * New status of the milestone */ newStatus: string; /** * New evidence of work performed by the service provider. */ newEvidence?: string; /** * Address of the entity providing the service. */ serviceProvider: string; }; /** * Approve Milestone Payload, this can be a single-release or multi-release */ type ApproveMilestonePayload = Omit<ChangeMilestoneStatusPayload, "serviceProvider" | "newStatus"> & { /** * Address of the entity requiring the service. */ approver: string; /** * New flag value of the milestone */ newFlag: boolean; }; /** * Single Release Start Dispute Payload. This starts a dispute for the entire escrow. */ type SingleReleaseStartDisputePayload = { /** * ID (address) that identifies the escrow contract */ contractId: string; /** * Address of the user signing the contract transaction */ signer: string; }; /** * Multi Release Start Dispute Payload. This starts a dispute for a specific milestone. */ type MultiReleaseStartDisputePayload = SingleReleaseStartDisputePayload & { /** * Index of the milestone to be disputed */ milestoneIndex: string; }; /** * Resolve Dispute Payload */ type SingleReleaseResolveDisputePayload = { /** * ID (address) that identifies the escrow contract */ contractId: string; /** * Address in charge of resolving disputes within the escrow. */ disputeResolver: string; /** * Amount of funds to be returned to the approver based on the global amount. */ approverFunds: string; /** * Amount of funds to be returned to the receiver based on the global amount. */ receiverFunds: string; }; /** * Multi Release Resolve Dispute Payload */ type MultiReleaseResolveDisputePayload = SingleReleaseResolveDisputePayload & { /** * Index of the milestone to be resolved */ milestoneIndex: string; }; /** * Fund Escrow Payload, this can be a single-release or multi-release */ type FundEscrowPayload = { /** * Amount to be transferred upon completion of escrow milestones */ amount: number; /** * ID (address) that identifies the escrow contract */ contractId: string; /** * Address of the user signing the contract transaction */ signer: string; }; /** * Get Escrow Params */ type GetEscrowParams = { /** * ID (address) that identifies the escrow contract */ contractId: string; /** * Address of the user signing the contract transaction */ signer: string; }; /** * Single Release Release Funds Payload */ type SingleReleaseReleaseFundsPayload = { /** * ID (address) that identifies the escrow contract */ contractId: string; /** * Address of the user in charge of releasing the escrow funds to the service provider. */ releaseSigner: string; /** * Address of the user signing the contract transaction */ signer: string; }; /** * Multi Release Release Funds Payload */ type MultiReleaseReleaseFundsPayload = SingleReleaseReleaseFundsPayload & { /** * Index of the milestone to be released */ milestoneIndex: string; }; /** * Get Balance Params */ type GetBalanceParams = { /** * Address of the user signing the contract transaction */ signer: string; /** * Addresses of the escrows to get the balance */ addresses: string[]; }; export type { ApproveMilestonePayload, ChangeMilestoneStatusPayload, EscrowRequestResponse, EscrowType, Flags, FundEscrowPayload, GetBalanceParams, GetEscrowBalancesResponse, GetEscrowParams, InitializeMultiReleaseEscrowPayload, InitializeMultiReleaseEscrowResponse, InitializeSingleReleaseEscrowPayload, InitializeSingleReleaseEscrowResponse, MultiReleaseEscrow, MultiReleaseMilestone, MultiReleaseReleaseFundsPayload, MultiReleaseResolveDisputePayload, MultiReleaseStartDisputePayload, Roles, SendTransactionResponse, SingleReleaseEscrow, SingleReleaseMilestone, SingleReleaseReleaseFundsPayload, SingleReleaseResolveDisputePayload, SingleReleaseStartDisputePayload, Status, Trustline, UpdateMultiReleaseEscrowPayload, UpdateMultiReleaseEscrowResponse, UpdateSingleReleaseEscrowPayload, UpdateSingleReleaseEscrowResponse, baseURL };