Skip to content

Commit

Permalink
feat: add some types for clients (admin, disputes, messages, orders)
Browse files Browse the repository at this point in the history
  • Loading branch information
AndreaDiazCorreia committed Nov 7, 2024
1 parent 1caec57 commit 6df544c
Show file tree
Hide file tree
Showing 9 changed files with 140 additions and 27 deletions.
2 changes: 0 additions & 2 deletions src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,5 +9,3 @@ export function wait(timeout?: number) {
}

export const dirname = __dirname

export * from '@/util'
9 changes: 9 additions & 0 deletions src/types/client/admin.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
import type { Dispute } from '../core'

export interface AdminFunctions {
admcancel: (orderId: string) => Promise<void>
admsettle: (orderId: string) => Promise<void>
admlistdisputes: () => Promise<Dispute[]>
admaddsolver: (pubkey: string) => Promise<void>
admtakedispute: (disputeId: string) => Promise<void>
}
4 changes: 4 additions & 0 deletions src/types/client/disputes.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
export interface DisputeFunctions {
dispute: (orderId: string) => Promise<void>
rate: (orderId: string, rating: number) => Promise<void>
}
11 changes: 11 additions & 0 deletions src/types/client/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
export interface ClientConfig {
mostroPubKey: string
relays: string[]
privateKey?: string
debug?: boolean
}

export * from './admin'
export * from './disputes'
export * from './messages'
export * from './orders'
8 changes: 8 additions & 0 deletions src/types/client/messages.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
import type { MessageKind } from '../core/message'

export interface MessageFunctions {
getdm: (pubkey: string) => Promise<MessageKind[]>
fiatsent: (orderId: string) => Promise<void>
addinvoice: (orderId: string, invoice: string) => Promise<void>
release: (orderId: string) => Promise<void>
}
9 changes: 9 additions & 0 deletions src/types/client/orders.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
import type { Order } from '../core'

export interface OrderFunctions {
listorders: () => Promise<Order[]>
neworder: (order: Partial<Order>) => Promise<Order>
takesell: (orderId: string, amount?: number) => Promise<Order>
takebuy: (orderId: string, amount?: number) => Promise<Order>
cancel: (orderId: string) => Promise<void>
}
61 changes: 49 additions & 12 deletions src/types/core/message.ts
Original file line number Diff line number Diff line change
@@ -1,39 +1,69 @@
// src/types/core/message.ts
import type { Order } from './order'

export interface Peer {
pubkey: string
}

export enum Action {
// Order actions
NewOrder = 'new-order',
TakeSell = 'take-sell',
TakeBuy = 'take-buy',
PayInvoice = 'pay-invoice',
AddInvoice = 'add-invoice',
FiatSent = 'fiat-sent',
FiatSentOk = 'fiat-sent-ok',
Release = 'release',
Released = 'released',
Cancel = 'cancel',
Canceled = 'canceled',

// Status related
WaitingBuyerInvoice = 'waiting-buyer-invoice',
WaitingSellerToPay = 'waiting-seller-to-pay',
BuyerTookOrder = 'buyer-took-order',
HoldInvoicePaymentAccepted = 'hold-invoice-payment-accepted',
HoldInvoicePaymentSettled = 'hold-invoice-payment-settled',
HoldInvoicePaymentCanceled = 'hold-invoice-payment-canceled',

// Cooperative cancellation
CooperativeCancelInitiatedByYou = 'cooperative-cancel-initiated-by-you',
CooperativeCancelInitiatedByPeer = 'cooperative-cancel-initiated-by-peer',
CooperativeCancelAccepted = 'cooperative-cancel-accepted',

// Rating
Rate = 'rate',
RateUser = 'rate-user',
RateReceived = 'rate-received',

// Dispute
Dispute = 'dispute',
HoldInvoicePaymentAccepted = 'hold-invoice-payment-accepted',
HoldInvoicePaymentSettled = 'hold-invoice-payment-settled',
WaitingBuyerInvoice = 'waiting-buyer-invoice',
WaitingSellerToPay = 'waiting-seller-to-pay',
AddInvoice = 'add-invoice',
BuyerTookOrder = 'buyer-took-order',
DisputeInitiatedByYou = 'dispute-initiated-by-you',
DisputeInitiatedByPeer = 'dispute-initiated-by-peer',

// Error states
CantDo = 'cant-do',
OutOfRangeFiatAmount = 'out-of-range-fiat-amount',
IsNotYourDispute = 'is-not-your-dispute',
NotFound = 'not-found',
IncorrectInvoiceAmount = 'incorrect-invoice-amount',
InvalidSatsAmount = 'invalid-sats-amount',
OutOfRangeSatsAmount = 'out-of-range-sats-amount',
PaymentFailed = 'payment-failed',
InvoiceUpdated = 'invoice-updated',
}

export interface MessageContent {
order?: Order
payment_request?: [Order | null, string, number?]
text_message?: string
peer?: Peer
rating_user?: number
peer?: { pubkey: string }
rating_user?: {
value: number
confirmed: boolean
}
dispute?: {
id: string
buyer_token?: number
seller_token?: number
}
}

export interface MessageKind {
Expand All @@ -43,3 +73,10 @@ export interface MessageKind {
action: Action
content?: MessageContent
}

export interface Message {
order?: MessageKind
dispute?: MessageKind
cant_do?: MessageKind
rate?: MessageKind
}
51 changes: 38 additions & 13 deletions src/types/core/order.ts
Original file line number Diff line number Diff line change
@@ -1,36 +1,61 @@
// src/types/core/order.ts
export enum OrderType {
BUY = 'buy',
SELL = 'sell',
}

export enum OrderStatus {
PENDING = 'pending',
ACTIVE = 'active',
CANCELED = 'canceled',
WAITING_PAYMENT = 'waiting-payment',
WAITING_BUYER_INVOICE = 'waiting-buyer-invoice',
FIAT_SENT = 'fiat-sent',
SUCCESS = 'success',
CANCELED_BY_ADMIN = 'canceled-by-admin',
SETTLED_BY_ADMIN = 'settled-by-admin',
COMPLETED_BY_ADMIN = 'completed-by-admin',
DISPUTE = 'dispute',
EXPIRED = 'expired',
FIAT_SENT = 'fiat-sent',
SETTLED_HOLD_INVOICE = 'settled-hold-invoice',
PENDING = 'pending',
SUCCESS = 'success',
WAITING_BUYER_INVOICE = 'waiting-buyer-invoice',
WAITING_PAYMENT = 'waiting-payment',
COOPERATIVELY_CANCELED = 'cooperatively-canceled',
}

export interface Order {
id: string
kind: OrderType
status: OrderStatus
event_id: string
hash: string | null
preimage: string | null
creator_pubkey: string
cancel_initiator_pubkey: string | null
buyer_pubkey: string | null
seller_pubkey: string | null
price_from_api: boolean
premium: number
payment_method: string
amount: number
fiat_code: string
min_amount: number | null
max_amount: number | null
buyer_dispute: boolean
seller_dispute: boolean
buyer_cooperativecancel: boolean
seller_cooperativecancel: boolean
fee: number
routing_fee: number
fiat_code: string
fiat_amount: number
payment_method: string
premium: number
buyer_invoice: string | null
range_parent_id: string | null
invoice_held_at: number
taken_at: number
created_at: number
buyer_pubkey?: string
seller_pubkey?: string
buyer_invoice?: string
master_seller_pubkey?: string
buyer_sent_rate: boolean
seller_sent_rate: boolean
failed_payment: boolean
payment_attempts: number
expires_at: number
master_buyer_pubkey?: string
expires_at?: number
master_seller_pubkey?: string
}
12 changes: 12 additions & 0 deletions src/types/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
export * from './client'
export * from './core'

export const NOSTR_CONSTANTS = {
REPLACEABLE_EVENT_KIND: 38383,
PROTOCOL_VERSION: 1,
TIMEOUTS: {
ORDER_EXPIRATION: 23 * 60 * 60,
INVOICE_SUBMISSION: 15 * 60,
HOLD_INVOICE_EXPIRATION: 24 * 60 * 60,
},
} as const

0 comments on commit 6df544c

Please sign in to comment.