@r2wa-org/eden 0.0.52 → 0.0.54

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.
Files changed (54) hide show
  1. package/dist/src/admin/index.d.ts +1234 -307
  2. package/dist/src/auth/better-auth.d.ts +43 -1
  3. package/dist/src/auth/permissions.d.ts +31 -1
  4. package/dist/src/auth/roles.d.ts +90 -0
  5. package/dist/src/cron/index.d.ts +1 -1
  6. package/dist/src/db/schemas.d.ts +3 -0
  7. package/dist/src/index.d.ts +1884 -526
  8. package/dist/src/ledger/admin/dto.schemas.d.ts +8 -8
  9. package/dist/src/ledger/admin/router.d.ts +2 -2
  10. package/dist/src/ledger/admin/service.d.ts +2 -2
  11. package/dist/src/ledger/db.schemas.d.ts +8 -8
  12. package/dist/src/ledger/internal/service.d.ts +2 -2
  13. package/dist/src/ledger/schema.d.ts +6 -6
  14. package/dist/src/ledger/user/dto.schemas.d.ts +8 -8
  15. package/dist/src/ledger/user/router.d.ts +2 -2
  16. package/dist/src/ledger/user/service.d.ts +2 -2
  17. package/dist/src/market-data/admin/dto.schemas.d.ts +291 -0
  18. package/dist/src/market-data/admin/router.d.ts +609 -0
  19. package/dist/src/market-data/admin/service.d.ts +52 -0
  20. package/dist/src/market-data/cron.d.ts +57 -0
  21. package/dist/src/market-data/db.schemas.d.ts +516 -0
  22. package/dist/src/market-data/errors/index.d.ts +12 -0
  23. package/dist/src/market-data/errors/locales/zh.d.ts +11 -0
  24. package/dist/src/market-data/index.d.ts +8 -0
  25. package/dist/src/market-data/internal/service.d.ts +77 -0
  26. package/dist/src/market-data/permissions.d.ts +6 -0
  27. package/dist/src/market-data/schema.d.ts +270 -0
  28. package/dist/src/market-data/user/dto.schemas.d.ts +289 -0
  29. package/dist/src/market-data/user/router.d.ts +521 -0
  30. package/dist/src/market-data/user/service.d.ts +30 -0
  31. package/dist/src/market-pricing/admin/dto.schemas.d.ts +322 -0
  32. package/dist/src/market-pricing/admin/router.d.ts +835 -0
  33. package/dist/src/market-pricing/admin/service.d.ts +129 -0
  34. package/dist/src/market-pricing/cron.d.ts +57 -0
  35. package/dist/src/market-pricing/db.schemas.d.ts +828 -0
  36. package/dist/src/market-pricing/errors/index.d.ts +14 -0
  37. package/dist/src/market-pricing/errors/locales/zh.d.ts +13 -0
  38. package/dist/src/market-pricing/internal/service.d.ts +35 -0
  39. package/dist/src/market-pricing/permissions.d.ts +4 -0
  40. package/dist/src/market-pricing/schema.d.ts +434 -0
  41. package/dist/src/trade-market/admin/dto.schemas.d.ts +762 -0
  42. package/dist/src/trade-market/admin/router.d.ts +851 -0
  43. package/dist/src/trade-market/admin/service.d.ts +158 -0
  44. package/dist/src/trade-market/db.schemas.d.ts +1338 -0
  45. package/dist/src/trade-market/errors/index.d.ts +22 -0
  46. package/dist/src/trade-market/errors/locales/zh.d.ts +21 -0
  47. package/dist/src/trade-market/index.d.ts +8 -0
  48. package/dist/src/trade-market/internal/service.d.ts +239 -0
  49. package/dist/src/trade-market/permissions.d.ts +5 -0
  50. package/dist/src/trade-market/schema.d.ts +708 -0
  51. package/dist/src/trade-market/user/dto.schemas.d.ts +1394 -0
  52. package/dist/src/trade-market/user/router.d.ts +754 -0
  53. package/dist/src/trade-market/user/service.d.ts +147 -0
  54. package/package.json +1 -1
@@ -0,0 +1,22 @@
1
+ export * from "./locales/zh";
2
+ export declare const TradeMarketErrorCodes: {
3
+ readonly TRADE_MARKET_NOT_FOUND: "TRADE_MARKET_NOT_FOUND";
4
+ readonly TRADE_MARKET_NOT_ACTIVE: "TRADE_MARKET_NOT_ACTIVE";
5
+ readonly TRADE_MARKET_BUY_DISABLED: "TRADE_MARKET_BUY_DISABLED";
6
+ readonly TRADE_MARKET_SELL_DISABLED: "TRADE_MARKET_SELL_DISABLED";
7
+ readonly TRADE_MARKET_ORDER_NOT_FOUND: "TRADE_MARKET_ORDER_NOT_FOUND";
8
+ readonly TRADE_MARKET_IDEMPOTENCY_CONFLICT: "TRADE_MARKET_IDEMPOTENCY_CONFLICT";
9
+ readonly TRADE_MARKET_INVALID_BASE_AMOUNT: "TRADE_MARKET_INVALID_BASE_AMOUNT";
10
+ readonly TRADE_MARKET_BASE_AMOUNT_OUT_OF_RANGE: "TRADE_MARKET_BASE_AMOUNT_OUT_OF_RANGE";
11
+ readonly TRADE_MARKET_PRICE_NOT_FOUND: "TRADE_MARKET_PRICE_NOT_FOUND";
12
+ readonly TRADE_MARKET_ACCOUNT_NOT_FOUND: "TRADE_MARKET_ACCOUNT_NOT_FOUND";
13
+ readonly TRADE_MARKET_ACCOUNT_NOT_MATCH: "TRADE_MARKET_ACCOUNT_NOT_MATCH";
14
+ readonly TRADE_MARKET_ORDER_CREATE_FAILED: "TRADE_MARKET_ORDER_CREATE_FAILED";
15
+ readonly TRADE_MARKET_DAILY_LIMIT_EXCEEDED: "TRADE_MARKET_DAILY_LIMIT_EXCEEDED";
16
+ };
17
+ type TradeMarketErrorCodesType = typeof TradeMarketErrorCodes;
18
+ export type TradeMarketErrorCode = keyof TradeMarketErrorCodesType;
19
+ declare module "../../error/errorcode" {
20
+ interface ErrorCodeRegistry extends TradeMarketErrorCodesType {
21
+ }
22
+ }
@@ -0,0 +1,21 @@
1
+ export declare const zh: {
2
+ TRADE_MARKET_NOT_FOUND: string;
3
+ TRADE_MARKET_NOT_ACTIVE: string;
4
+ TRADE_MARKET_BUY_DISABLED: string;
5
+ TRADE_MARKET_SELL_DISABLED: string;
6
+ TRADE_MARKET_ORDER_NOT_FOUND: string;
7
+ TRADE_MARKET_IDEMPOTENCY_CONFLICT: string;
8
+ TRADE_MARKET_INVALID_BASE_AMOUNT: string;
9
+ TRADE_MARKET_BASE_AMOUNT_OUT_OF_RANGE: string;
10
+ TRADE_MARKET_PRICE_NOT_FOUND: string;
11
+ TRADE_MARKET_ACCOUNT_NOT_FOUND: string;
12
+ TRADE_MARKET_ACCOUNT_NOT_MATCH: string;
13
+ TRADE_MARKET_ORDER_CREATE_FAILED: string;
14
+ TRADE_MARKET_DAILY_LIMIT_EXCEEDED: string;
15
+ };
16
+ type ZHType = typeof zh;
17
+ declare module "../../../error/messages" {
18
+ interface ErrorMessageRegistry extends ZHType {
19
+ }
20
+ }
21
+ export {};
@@ -0,0 +1,8 @@
1
+ export * from "./admin/service";
2
+ export * from "./db.schemas";
3
+ export * from "./errors";
4
+ export * from "./internal/service";
5
+ export * from "./permissions";
6
+ export * from "./schema";
7
+ export { tradeMarketRouter } from "./user/router";
8
+ export * from "./user/service";
@@ -0,0 +1,239 @@
1
+ import Decimal from "decimal.js";
2
+ import { assetPrice } from "../../asset-price/schema";
3
+ import type { TransactionTx } from "../../db/transaction";
4
+ import { ledgerAccount } from "../../ledger-account/schema";
5
+ import { tradeMarket, tradeMarketOrder } from "../schema";
6
+ interface ExecuteMarketOrderInput {
7
+ marketId: string;
8
+ side: "buy" | "sell";
9
+ baseAmount: string;
10
+ userBaseAccountId: string;
11
+ userQuoteAccountId: string;
12
+ idempotencyKey: string;
13
+ }
14
+ export declare abstract class BaseTradeMarketService {
15
+ protected static validateUserId(userId: string): void;
16
+ protected static validateBaseAmount(baseAmount: string): Decimal;
17
+ protected static getMarketById(marketId: string, tx?: TransactionTx): Promise<{
18
+ id: string;
19
+ name: string;
20
+ createdAt: Date;
21
+ updatedAt: Date;
22
+ status: "active" | "draft" | "paused" | "ended";
23
+ baseAssetId: string;
24
+ quoteAssetId: string;
25
+ pricingSource: string;
26
+ systemBaseAccountId: string;
27
+ systemQuoteAccountId: string;
28
+ isBuyEnabled: boolean;
29
+ isSellEnabled: boolean;
30
+ minBaseAmount: string;
31
+ maxBaseAmount: string | null;
32
+ dailyUserBuyBaseLimit: string | null;
33
+ dailyUserSellBaseLimit: string | null;
34
+ maxSlippageBps: string;
35
+ }>;
36
+ protected static assertMarketAvailable(market: typeof tradeMarket.$inferSelect, side: "buy" | "sell"): void;
37
+ protected static assertBaseAmountRange(baseAmount: Decimal, market: typeof tradeMarket.$inferSelect): void;
38
+ protected static getLatestEffectivePrice(tx: TransactionTx, market: typeof tradeMarket.$inferSelect): Promise<typeof assetPrice.$inferSelect>;
39
+ protected static getUserAccounts(tx: TransactionTx, userId: string, userBaseAccountId: string, userQuoteAccountId: string): Promise<{
40
+ userBaseAccount: {
41
+ id: string;
42
+ createdAt: Date;
43
+ updatedAt: Date;
44
+ userId: string;
45
+ status: "active" | "frozen" | "disabled";
46
+ assetId: string;
47
+ ledgerAccountTypeId: string;
48
+ available: string;
49
+ locked: string;
50
+ version: number;
51
+ };
52
+ userQuoteAccount: {
53
+ id: string;
54
+ createdAt: Date;
55
+ updatedAt: Date;
56
+ userId: string;
57
+ status: "active" | "frozen" | "disabled";
58
+ assetId: string;
59
+ ledgerAccountTypeId: string;
60
+ available: string;
61
+ locked: string;
62
+ version: number;
63
+ };
64
+ }>;
65
+ protected static getSystemAccounts(tx: TransactionTx, market: typeof tradeMarket.$inferSelect): Promise<{
66
+ systemBaseAccount: {
67
+ id: string;
68
+ createdAt: Date;
69
+ updatedAt: Date;
70
+ userId: string;
71
+ status: "active" | "frozen" | "disabled";
72
+ assetId: string;
73
+ ledgerAccountTypeId: string;
74
+ available: string;
75
+ locked: string;
76
+ version: number;
77
+ };
78
+ systemQuoteAccount: {
79
+ id: string;
80
+ createdAt: Date;
81
+ updatedAt: Date;
82
+ userId: string;
83
+ status: "active" | "frozen" | "disabled";
84
+ assetId: string;
85
+ ledgerAccountTypeId: string;
86
+ available: string;
87
+ locked: string;
88
+ version: number;
89
+ };
90
+ }>;
91
+ protected static assertAccountAssetMatch(params: {
92
+ market: typeof tradeMarket.$inferSelect;
93
+ userBaseAccount: typeof ledgerAccount.$inferSelect;
94
+ userQuoteAccount: typeof ledgerAccount.$inferSelect;
95
+ systemBaseAccount: typeof ledgerAccount.$inferSelect;
96
+ systemQuoteAccount: typeof ledgerAccount.$inferSelect;
97
+ }): void;
98
+ protected static getDayRangeUtc(date: Date): {
99
+ dayStart: Date;
100
+ dayEnd: Date;
101
+ };
102
+ protected static assertDailyLimit(tx: TransactionTx, params: {
103
+ userId: string;
104
+ market: typeof tradeMarket.$inferSelect;
105
+ side: "buy" | "sell";
106
+ baseAmount: Decimal;
107
+ now: Date;
108
+ }): Promise<void>;
109
+ protected static assertIdempotentPayload(existing: typeof tradeMarketOrder.$inferSelect, input: ExecuteMarketOrderInput): void;
110
+ }
111
+ export declare abstract class InternalTradeMarketService extends BaseTradeMarketService {
112
+ static listMarkets(query?: {
113
+ status?: "draft" | "active" | "paused" | "ended";
114
+ limit?: number;
115
+ offset?: number;
116
+ }): Promise<{
117
+ items: {
118
+ id: string;
119
+ name: string;
120
+ createdAt: Date;
121
+ updatedAt: Date;
122
+ status: "active" | "draft" | "paused" | "ended";
123
+ baseAssetId: string;
124
+ quoteAssetId: string;
125
+ pricingSource: string;
126
+ systemBaseAccountId: string;
127
+ systemQuoteAccountId: string;
128
+ isBuyEnabled: boolean;
129
+ isSellEnabled: boolean;
130
+ minBaseAmount: string;
131
+ maxBaseAmount: string | null;
132
+ dailyUserBuyBaseLimit: string | null;
133
+ dailyUserSellBaseLimit: string | null;
134
+ maxSlippageBps: string;
135
+ }[];
136
+ total: number;
137
+ }>;
138
+ static getMarket(marketId: string): Promise<{
139
+ id: string;
140
+ name: string;
141
+ createdAt: Date;
142
+ updatedAt: Date;
143
+ status: "active" | "draft" | "paused" | "ended";
144
+ baseAssetId: string;
145
+ quoteAssetId: string;
146
+ pricingSource: string;
147
+ systemBaseAccountId: string;
148
+ systemQuoteAccountId: string;
149
+ isBuyEnabled: boolean;
150
+ isSellEnabled: boolean;
151
+ minBaseAmount: string;
152
+ maxBaseAmount: string | null;
153
+ dailyUserBuyBaseLimit: string | null;
154
+ dailyUserSellBaseLimit: string | null;
155
+ maxSlippageBps: string;
156
+ }>;
157
+ static getOrderByIdForUser(userId: string, orderId: string): Promise<{
158
+ id: string;
159
+ createdAt: Date;
160
+ updatedAt: Date;
161
+ userId: string;
162
+ status: "created" | "completed" | "failed";
163
+ idempotencyKey: string;
164
+ orderNo: string;
165
+ priceSnapshot: string;
166
+ priceEffectiveAtSnapshot: Date;
167
+ failureCode: string | null;
168
+ failureReason: string | null;
169
+ marketId: string;
170
+ side: "buy" | "sell";
171
+ baseAmount: string;
172
+ quoteAmount: string;
173
+ pricingSourceSnapshot: string;
174
+ userBaseAccountId: string;
175
+ userQuoteAccountId: string;
176
+ systemBaseAccountIdSnapshot: string;
177
+ systemQuoteAccountIdSnapshot: string;
178
+ userDebitLedgerEntryId: string | null;
179
+ userCreditLedgerEntryId: string | null;
180
+ }>;
181
+ static listOrdersForUser(userId: string, query?: {
182
+ status?: "created" | "completed" | "failed";
183
+ side?: "buy" | "sell";
184
+ marketId?: string;
185
+ limit?: number;
186
+ offset?: number;
187
+ }): Promise<{
188
+ items: {
189
+ id: string;
190
+ createdAt: Date;
191
+ updatedAt: Date;
192
+ userId: string;
193
+ status: "created" | "completed" | "failed";
194
+ idempotencyKey: string;
195
+ orderNo: string;
196
+ priceSnapshot: string;
197
+ priceEffectiveAtSnapshot: Date;
198
+ failureCode: string | null;
199
+ failureReason: string | null;
200
+ marketId: string;
201
+ side: "buy" | "sell";
202
+ baseAmount: string;
203
+ quoteAmount: string;
204
+ pricingSourceSnapshot: string;
205
+ userBaseAccountId: string;
206
+ userQuoteAccountId: string;
207
+ systemBaseAccountIdSnapshot: string;
208
+ systemQuoteAccountIdSnapshot: string;
209
+ userDebitLedgerEntryId: string | null;
210
+ userCreditLedgerEntryId: string | null;
211
+ }[];
212
+ total: number;
213
+ }>;
214
+ static executeMarketOrder(userId: string, input: ExecuteMarketOrderInput): Promise<{
215
+ id: string;
216
+ createdAt: Date;
217
+ updatedAt: Date;
218
+ userId: string;
219
+ status: "created" | "completed" | "failed";
220
+ idempotencyKey: string;
221
+ orderNo: string;
222
+ priceSnapshot: string;
223
+ priceEffectiveAtSnapshot: Date;
224
+ failureCode: string | null;
225
+ failureReason: string | null;
226
+ marketId: string;
227
+ side: "buy" | "sell";
228
+ baseAmount: string;
229
+ quoteAmount: string;
230
+ pricingSourceSnapshot: string;
231
+ userBaseAccountId: string;
232
+ userQuoteAccountId: string;
233
+ systemBaseAccountIdSnapshot: string;
234
+ systemQuoteAccountIdSnapshot: string;
235
+ userDebitLedgerEntryId: string | null;
236
+ userCreditLedgerEntryId: string | null;
237
+ }>;
238
+ }
239
+ export {};
@@ -0,0 +1,5 @@
1
+ export declare const tradeMarketPermissions: {
2
+ readonly "trade_market:market": readonly ["create", "read", "update", "delete", "list"];
3
+ readonly "trade_market:order": readonly ["create", "read", "list"];
4
+ };
5
+ export type TradeMarketPermission = keyof typeof tradeMarketPermissions;