@wrcb/cb-common 1.0.882 → 1.0.884

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.
@@ -79,5 +79,8 @@ export declare enum Subjects {
79
79
  ThoOrderPaid = "tho:order:paid",
80
80
  ThoOrderStatusUpdated = "tho:order:status-updated",
81
81
  ThoOrderWalletChargeRequested = "tho:order:wallet-charge-requested",
82
- ThoOrderSettled = "tho:order:settled"
82
+ ThoOrderSettled = "tho:order:settled",
83
+ TrdSessionHalted = "trd:session:halted",
84
+ TrdCollectorStalled = "trd:collector:stalled",
85
+ TrdAutopilotActed = "trd:autopilot:acted"
83
86
  }
@@ -95,4 +95,8 @@ var Subjects;
95
95
  Subjects["ThoOrderStatusUpdated"] = "tho:order:status-updated";
96
96
  Subjects["ThoOrderWalletChargeRequested"] = "tho:order:wallet-charge-requested";
97
97
  Subjects["ThoOrderSettled"] = "tho:order:settled";
98
+ // bot-trader (simulação de estratégias na MEXC spot)
99
+ Subjects["TrdSessionHalted"] = "trd:session:halted";
100
+ Subjects["TrdCollectorStalled"] = "trd:collector:stalled";
101
+ Subjects["TrdAutopilotActed"] = "trd:autopilot:acted";
98
102
  })(Subjects || (exports.Subjects = Subjects = {}));
@@ -0,0 +1,13 @@
1
+ import { Subjects } from '../subjects';
2
+ import { TraderAutopilotAction, TraderStrategy } from '../../types/trader';
3
+ export interface TrdAutopilotActedEvent {
4
+ subject: Subjects.TrdAutopilotActed;
5
+ data: {
6
+ action: TraderAutopilotAction;
7
+ symbol: string;
8
+ strategy: TraderStrategy | null;
9
+ sessionId: string | null;
10
+ reason: string;
11
+ at: string;
12
+ };
13
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,6 @@
1
+ import { Publisher } from '../basePublisher';
2
+ import { TrdAutopilotActedEvent } from './autopilotActedEvent';
3
+ import { Subjects } from '../subjects';
4
+ export declare class TrdAutopilotActedPublisher extends Publisher<TrdAutopilotActedEvent> {
5
+ subject: Subjects.TrdAutopilotActed;
6
+ }
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TrdAutopilotActedPublisher = void 0;
4
+ const basePublisher_1 = require("../basePublisher");
5
+ const subjects_1 = require("../subjects");
6
+ class TrdAutopilotActedPublisher extends basePublisher_1.Publisher {
7
+ constructor() {
8
+ super(...arguments);
9
+ this.subject = subjects_1.Subjects.TrdAutopilotActed;
10
+ }
11
+ }
12
+ exports.TrdAutopilotActedPublisher = TrdAutopilotActedPublisher;
@@ -0,0 +1,10 @@
1
+ import { Subjects } from '../subjects';
2
+ export interface TrdCollectorStalledEvent {
3
+ subject: Subjects.TrdCollectorStalled;
4
+ data: {
5
+ symbol: string;
6
+ lastTickAt: string | null;
7
+ secondsSinceLastTick: number;
8
+ detectedAt: string;
9
+ };
10
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,6 @@
1
+ import { Publisher } from '../basePublisher';
2
+ import { TrdCollectorStalledEvent } from './collectorStalledEvent';
3
+ import { Subjects } from '../subjects';
4
+ export declare class TrdCollectorStalledPublisher extends Publisher<TrdCollectorStalledEvent> {
5
+ subject: Subjects.TrdCollectorStalled;
6
+ }
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TrdCollectorStalledPublisher = void 0;
4
+ const basePublisher_1 = require("../basePublisher");
5
+ const subjects_1 = require("../subjects");
6
+ class TrdCollectorStalledPublisher extends basePublisher_1.Publisher {
7
+ constructor() {
8
+ super(...arguments);
9
+ this.subject = subjects_1.Subjects.TrdCollectorStalled;
10
+ }
11
+ }
12
+ exports.TrdCollectorStalledPublisher = TrdCollectorStalledPublisher;
@@ -0,0 +1,6 @@
1
+ export * from './sessionHaltedEvent';
2
+ export * from './sessionHaltedPublisher';
3
+ export * from './collectorStalledEvent';
4
+ export * from './collectorStalledPublisher';
5
+ export * from './autopilotActedEvent';
6
+ export * from './autopilotActedPublisher';
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./sessionHaltedEvent"), exports);
18
+ __exportStar(require("./sessionHaltedPublisher"), exports);
19
+ __exportStar(require("./collectorStalledEvent"), exports);
20
+ __exportStar(require("./collectorStalledPublisher"), exports);
21
+ __exportStar(require("./autopilotActedEvent"), exports);
22
+ __exportStar(require("./autopilotActedPublisher"), exports);
@@ -0,0 +1,15 @@
1
+ import { Subjects } from '../subjects';
2
+ import { TraderHaltReason, TraderStrategy } from '../../types/trader';
3
+ export interface TrdSessionHaltedEvent {
4
+ subject: Subjects.TrdSessionHalted;
5
+ data: {
6
+ sessionId: string;
7
+ label: string;
8
+ symbol: string;
9
+ strategy: TraderStrategy;
10
+ reason: TraderHaltReason;
11
+ totalPnlQuote: number;
12
+ inventoryBase: number;
13
+ haltedAt: string;
14
+ };
15
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,6 @@
1
+ import { Publisher } from '../basePublisher';
2
+ import { TrdSessionHaltedEvent } from './sessionHaltedEvent';
3
+ import { Subjects } from '../subjects';
4
+ export declare class TrdSessionHaltedPublisher extends Publisher<TrdSessionHaltedEvent> {
5
+ subject: Subjects.TrdSessionHalted;
6
+ }
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TrdSessionHaltedPublisher = void 0;
4
+ const basePublisher_1 = require("../basePublisher");
5
+ const subjects_1 = require("../subjects");
6
+ class TrdSessionHaltedPublisher extends basePublisher_1.Publisher {
7
+ constructor() {
8
+ super(...arguments);
9
+ this.subject = subjects_1.Subjects.TrdSessionHalted;
10
+ }
11
+ }
12
+ exports.TrdSessionHaltedPublisher = TrdSessionHaltedPublisher;
package/build/index.d.ts CHANGED
@@ -57,6 +57,7 @@ export * from './types/betStatus';
57
57
  export * from './types/predictionType';
58
58
  export * from './types/trabalhoHomeOffice';
59
59
  export * from './types/crm';
60
+ export * from './types/trader';
60
61
  export * from './events/subjects';
61
62
  export * from './events/baseListener';
62
63
  export * from './events/basePublisher';
@@ -65,6 +66,7 @@ export * from './events/social-media-automator';
65
66
  export * from './events/ai';
66
67
  export * from './events/notas-br';
67
68
  export * from './events/trabalho-home-office';
69
+ export * from './events/trader';
68
70
  export * from './services/TenantDataService';
69
71
  export * from './services/CurrencyService';
70
72
  export * from './config/notasBrBilling';
package/build/index.js CHANGED
@@ -85,6 +85,8 @@ __exportStar(require("./types/predictionType"), exports);
85
85
  __exportStar(require("./types/trabalhoHomeOffice"), exports);
86
86
  // crm — núcleo multi-tenant (pipeline configurável + agente de IA)
87
87
  __exportStar(require("./types/crm"), exports);
88
+ // bot-trader — simulação de estratégias na MEXC spot
89
+ __exportStar(require("./types/trader"), exports);
88
90
  __exportStar(require("./events/subjects"), exports);
89
91
  __exportStar(require("./events/baseListener"), exports);
90
92
  __exportStar(require("./events/basePublisher"), exports);
@@ -93,6 +95,7 @@ __exportStar(require("./events/social-media-automator"), exports);
93
95
  __exportStar(require("./events/ai"), exports);
94
96
  __exportStar(require("./events/notas-br"), exports);
95
97
  __exportStar(require("./events/trabalho-home-office"), exports);
98
+ __exportStar(require("./events/trader"), exports);
96
99
  __exportStar(require("./services/TenantDataService"), exports);
97
100
  __exportStar(require("./services/CurrencyService"), exports);
98
101
  // notas-br — tabela de billing compartilhada entre gn-business e cb-payments
package/build/server.d.ts CHANGED
@@ -90,6 +90,7 @@ export * from './events/apps/creativeVideoReadyEvent';
90
90
  export * from './events/realstate/realStateVideoCreatedEvent';
91
91
  export * from './events/notas-br';
92
92
  export * from './events/trabalho-home-office';
93
+ export * from './events/trader';
93
94
  export * from './events/linkedin-automator/linkedinPostGeneratedEvent';
94
95
  export * from './events/linkedin-automator/linkedinPostGeneratedPublisher';
95
96
  export * from './events/linkedin-automator/linkedinPostPublishedEvent';
package/build/server.js CHANGED
@@ -108,6 +108,8 @@ __exportStar(require("./events/realstate/realStateVideoCreatedEvent"), exports);
108
108
  __exportStar(require("./events/notas-br"), exports);
109
109
  // trabalho-home-office
110
110
  __exportStar(require("./events/trabalho-home-office"), exports);
111
+ // bot-trader
112
+ __exportStar(require("./events/trader"), exports);
111
113
  // linkedin-automator
112
114
  __exportStar(require("./events/linkedin-automator/linkedinPostGeneratedEvent"), exports);
113
115
  __exportStar(require("./events/linkedin-automator/linkedinPostGeneratedPublisher"), exports);
@@ -1186,5 +1186,102 @@ TenantDataService.tenantDataMap = {
1186
1186
  }
1187
1187
  },
1188
1188
  RATING_CRITERIA: undefined
1189
+ },
1190
+ [tenant_1.Tenant.MercadoProfissional]: {
1191
+ TENANT: tenant_1.Tenant.MercadoProfissional,
1192
+ BACKEND_API_VERSION: '1',
1193
+ SITE_NAME: 'Mercado Profissional',
1194
+ // TODO: domínio ainda não definido. Enquanto estiver com este valor,
1195
+ // o canonical e os links de e-mail apontam para um endereço que não
1196
+ // existe — trocar antes de qualquer página ir ao ar.
1197
+ SITE_URL: 'https://www.mercadoprofissional.com.br',
1198
+ SITE_WHATSAPP_SUPPORT: '',
1199
+ SITE_WHATSAPP_BOT: '',
1200
+ WHATSAPP_BOT_NUMBER_ID: '',
1201
+ WHATSAPP_TOKEN: '',
1202
+ WHATSAPP_API_URL: '',
1203
+ WHATSAPP_API_VERSION: '',
1204
+ IOS_APP_DOWNLOAD_LINK: '',
1205
+ ANDROID_APP_DOWNLOAD_LINK: '',
1206
+ SITE_DESCRIPTION: 'Encontre pedreiro, eletricista, jardineiro e outros profissionais na sua cidade, e fale direto com eles.',
1207
+ KEYWORDS: ['profissionais', 'servicos', 'orcamento'],
1208
+ SOCIAL_X: '',
1209
+ SOCIAL_YOUTUBE: '',
1210
+ SOCIAL_INSTAGRAM: '',
1211
+ SOCIAL_FACEBOOK: '',
1212
+ USER_CATEGORIES_CONFIG: {},
1213
+ COUPONS_TYPE_ALLOWED_TO_BE_CREATED_BY_SELLER: [],
1214
+ COUPONS_TYPE_ALLOWED_TO_BE_CREATED_BY_ADMIN: [],
1215
+ EMAIL_HOST: 'smtp.gmail.com',
1216
+ EMAIL_PORT: '587',
1217
+ EMAIL_USER: 'wrsolucoesdig@gmail.com',
1218
+ EMAIL_PASS: 'lwegguaqrzauawsg',
1219
+ AUTH_FACEBOOK_APP_ID: '',
1220
+ AUTH_GOOGLE_ID: '',
1221
+ AUTH_GOOGLE_SECRET: '',
1222
+ GOOGLE_ANALYTICS_MEASUREMENT_ID: '',
1223
+ GOOGLE_VERIFICATION: '',
1224
+ MEDIA_CONFIG: {
1225
+ maxPhotoSizeMB: 5,
1226
+ maxVideoSizeMB: 20,
1227
+ allowedImageFormats: ['jpg', 'jpeg', 'png', 'webp'],
1228
+ allowedVideoFormats: ['mp4', 'webm'],
1229
+ imageQualities: {
1230
+ thumbnail: { width: 150, height: 150, quality: 80 },
1231
+ medium: { width: 800, height: 800, quality: 85 },
1232
+ large: { width: 1200, height: 1200, quality: 90 }
1233
+ }
1234
+ },
1235
+ RATING_CRITERIA: undefined
1236
+ },
1237
+ // Ferramenta interna, não produto: não há site público, cadastro de
1238
+ // usuário, e-mail transacional nem mídia enviada por ninguém. Os campos
1239
+ // ficam vazios de propósito — preenchê-los com valor de fachada faria o
1240
+ // TenantDataService devolver dado que parece configuração e não é.
1241
+ // O que este tenant realmente identifica é a origem dos dados em
1242
+ // trd_* e o login do painel no cb-auth.
1243
+ [tenant_1.Tenant.BotTrader]: {
1244
+ TENANT: tenant_1.Tenant.BotTrader,
1245
+ BACKEND_API_VERSION: '1',
1246
+ SITE_NAME: 'BotTrader',
1247
+ SITE_URL: 'https://trader.wrsolucoesdigitais.com.br',
1248
+ SITE_WHATSAPP_SUPPORT: '',
1249
+ SITE_WHATSAPP_BOT: '',
1250
+ WHATSAPP_BOT_NUMBER_ID: '',
1251
+ WHATSAPP_TOKEN: '',
1252
+ WHATSAPP_API_URL: '',
1253
+ WHATSAPP_API_VERSION: '',
1254
+ IOS_APP_DOWNLOAD_LINK: '',
1255
+ ANDROID_APP_DOWNLOAD_LINK: '',
1256
+ SITE_DESCRIPTION: 'Simulação de estratégias de market making e grade na MEXC spot.',
1257
+ KEYWORDS: [],
1258
+ SOCIAL_X: '',
1259
+ SOCIAL_YOUTUBE: '',
1260
+ SOCIAL_INSTAGRAM: '',
1261
+ SOCIAL_FACEBOOK: '',
1262
+ USER_CATEGORIES_CONFIG: {},
1263
+ COUPONS_TYPE_ALLOWED_TO_BE_CREATED_BY_SELLER: [],
1264
+ COUPONS_TYPE_ALLOWED_TO_BE_CREATED_BY_ADMIN: [],
1265
+ EMAIL_HOST: 'smtp.gmail.com',
1266
+ EMAIL_PORT: '587',
1267
+ EMAIL_USER: 'wrsolucoesdig@gmail.com',
1268
+ EMAIL_PASS: 'lwegguaqrzauawsg',
1269
+ AUTH_FACEBOOK_APP_ID: '',
1270
+ AUTH_GOOGLE_ID: '',
1271
+ AUTH_GOOGLE_SECRET: '',
1272
+ GOOGLE_ANALYTICS_MEASUREMENT_ID: '',
1273
+ GOOGLE_VERIFICATION: '',
1274
+ MEDIA_CONFIG: {
1275
+ maxPhotoSizeMB: 5,
1276
+ maxVideoSizeMB: 20,
1277
+ allowedImageFormats: ['jpg', 'jpeg', 'png', 'webp'],
1278
+ allowedVideoFormats: ['mp4', 'webm'],
1279
+ imageQualities: {
1280
+ thumbnail: { width: 150, height: 150, quality: 80 },
1281
+ medium: { width: 800, height: 800, quality: 85 },
1282
+ large: { width: 1200, height: 1200, quality: 90 }
1283
+ }
1284
+ },
1285
+ RATING_CRITERIA: undefined
1189
1286
  }
1190
1287
  };
@@ -14,5 +14,7 @@ export declare enum Tenant {
14
14
  BreadOfLife = "BreadOfLife",
15
15
  LinkedinAutomator = "LinkedinAutomator",
16
16
  NotasBr = "NotasBr",
17
- TrabalhoHomeOffice = "TrabalhoHomeOffice"
17
+ TrabalhoHomeOffice = "TrabalhoHomeOffice",
18
+ MercadoProfissional = "MercadoProfissional",
19
+ BotTrader = "BotTrader"
18
20
  }
@@ -19,4 +19,6 @@ var Tenant;
19
19
  Tenant["LinkedinAutomator"] = "LinkedinAutomator";
20
20
  Tenant["NotasBr"] = "NotasBr";
21
21
  Tenant["TrabalhoHomeOffice"] = "TrabalhoHomeOffice";
22
+ Tenant["MercadoProfissional"] = "MercadoProfissional";
23
+ Tenant["BotTrader"] = "BotTrader";
22
24
  })(Tenant || (exports.Tenant = Tenant = {}));
@@ -0,0 +1,187 @@
1
+ export declare enum TraderStrategy {
2
+ MarketMaking = "MarketMaking",
3
+ Grid = "Grid"
4
+ }
5
+ export declare enum TraderExecutionMode {
6
+ Paper = "Paper",
7
+ Live = "Live"
8
+ }
9
+ export declare enum TraderSessionStatus {
10
+ Running = "Running",
11
+ Stopped = "Stopped",
12
+ Halted = "Halted"
13
+ }
14
+ export declare enum TraderSide {
15
+ Buy = "Buy",
16
+ Sell = "Sell"
17
+ }
18
+ export declare enum TraderOrderStatus {
19
+ Open = "Open",
20
+ Filled = "Filled",
21
+ Cancelled = "Cancelled"
22
+ }
23
+ export declare enum TraderHaltReason {
24
+ DailyLossLimit = "DailyLossLimit",
25
+ InventoryLimit = "InventoryLimit",
26
+ MaxDrawdown = "MaxDrawdown",
27
+ FeedStale = "FeedStale",
28
+ Manual = "Manual"
29
+ }
30
+ export declare enum TraderPairStatus {
31
+ Collecting = "Collecting",
32
+ Paused = "Paused"
33
+ }
34
+ export declare enum TraderMarketRegime {
35
+ Ranging = "Ranging",
36
+ Trending = "Trending",
37
+ Volatile = "Volatile"
38
+ }
39
+ export interface TraderMarketMakingParams {
40
+ baseSpreadBps: number;
41
+ volatilityMultiplier: number;
42
+ inventorySkewBps: number;
43
+ orderSizeQuote: number;
44
+ requoteToleranceBps: number;
45
+ pauseOutsideRanging: boolean;
46
+ }
47
+ export interface TraderGridParams {
48
+ gridLevels: number;
49
+ gridStepBps: number;
50
+ orderSizeQuote: number;
51
+ recenterThresholdBps: number;
52
+ }
53
+ export interface TraderSessionParams {
54
+ marketMaking?: TraderMarketMakingParams;
55
+ grid?: TraderGridParams;
56
+ }
57
+ export interface TraderRiskLimits {
58
+ maxInventoryQuote: number;
59
+ dailyLossLimitQuote: number;
60
+ maxDrawdownPercent: number;
61
+ feedStaleSeconds: number;
62
+ }
63
+ export interface TraderFeeConfig {
64
+ makerFeeBps: number;
65
+ takerFeeBps: number;
66
+ }
67
+ export interface TraderPnlBreakdown {
68
+ spreadPnlQuote: number;
69
+ inventoryPnlQuote: number;
70
+ feesQuote: number;
71
+ totalPnlQuote: number;
72
+ }
73
+ export interface TraderSessionMetrics extends TraderPnlBreakdown {
74
+ placedOrders: number;
75
+ filledOrders: number;
76
+ cancelledOrders: number;
77
+ fillRate: number;
78
+ roundTrips: number;
79
+ inventoryBase: number;
80
+ inventoryValueQuote: number;
81
+ peakInventoryQuote: number;
82
+ maxDrawdownPercent: number;
83
+ capturedSpreadBps: number;
84
+ }
85
+ export interface TraderPairDTO {
86
+ id: string;
87
+ symbol: string;
88
+ baseAsset: string;
89
+ quoteAsset: string;
90
+ status: TraderPairStatus;
91
+ tickSize: number;
92
+ stepSize: number;
93
+ minNotional: number;
94
+ lastTickAt: string | null;
95
+ bookSnapshots: number;
96
+ tradesCollected: number;
97
+ createdAt: string;
98
+ }
99
+ export interface TraderSessionDTO {
100
+ id: string;
101
+ label: string;
102
+ symbol: string;
103
+ strategy: TraderStrategy;
104
+ mode: TraderExecutionMode;
105
+ status: TraderSessionStatus;
106
+ haltReason: TraderHaltReason | null;
107
+ params: TraderSessionParams;
108
+ risk: TraderRiskLimits;
109
+ fees: TraderFeeConfig;
110
+ startingCapitalQuote: number;
111
+ metrics: TraderSessionMetrics;
112
+ startedAt: string;
113
+ stoppedAt: string | null;
114
+ }
115
+ export interface TraderFillDTO {
116
+ id: string;
117
+ sessionId: string;
118
+ symbol: string;
119
+ side: TraderSide;
120
+ price: number;
121
+ quantity: number;
122
+ notionalQuote: number;
123
+ feeQuote: number;
124
+ inventoryBaseAfter: number;
125
+ realizedPnlQuote: number | null;
126
+ filledAt: string;
127
+ }
128
+ export interface TraderSessionSnapshotDTO {
129
+ sessionId: string;
130
+ at: string;
131
+ midPrice: number;
132
+ metrics: TraderSessionMetrics;
133
+ regime: TraderMarketRegime;
134
+ }
135
+ export interface TraderComparisonRowDTO {
136
+ sessionId: string;
137
+ label: string;
138
+ symbol: string;
139
+ strategy: TraderStrategy;
140
+ status: TraderSessionStatus;
141
+ metrics: TraderSessionMetrics;
142
+ hoursRunning: number;
143
+ }
144
+ export declare enum TraderRiskProfile {
145
+ Conservative = "Conservative",
146
+ Moderate = "Moderate",
147
+ Aggressive = "Aggressive"
148
+ }
149
+ export declare enum TraderAutopilotAction {
150
+ SessionOpened = "SessionOpened",
151
+ SessionClosed = "SessionClosed",
152
+ Skipped = "Skipped"
153
+ }
154
+ export interface TraderAutopilotConfig {
155
+ enabled: boolean;
156
+ riskProfile: TraderRiskProfile;
157
+ capitalQuote: number;
158
+ maxPairs: number;
159
+ evaluationHours: number;
160
+ lastRunAt: string | null;
161
+ nextRunAt: string | null;
162
+ }
163
+ export interface TraderAutopilotDecisionDTO {
164
+ id: string;
165
+ at: string;
166
+ action: TraderAutopilotAction;
167
+ symbol: string;
168
+ strategy: TraderStrategy | null;
169
+ sessionId: string | null;
170
+ reason: string;
171
+ metrics: {
172
+ medianSpreadBps?: number;
173
+ tradesPerHour?: number;
174
+ score?: number;
175
+ spreadPnlQuote?: number;
176
+ feesQuote?: number;
177
+ hoursRunning?: number;
178
+ };
179
+ }
180
+ export interface TraderCandidateDTO {
181
+ symbol: string;
182
+ medianSpreadBps: number;
183
+ tradesPerHour: number;
184
+ score: number;
185
+ eligible: boolean;
186
+ rejection: string | null;
187
+ }
@@ -0,0 +1,78 @@
1
+ "use strict";
2
+ // bot-trader — simulação de estratégias de market making e grid na MEXC spot.
3
+ //
4
+ // Todo dinheiro aqui é em "quote" (o lado USDT do par) e toda distância de
5
+ // preço é em basis points (1 bps = 0,01%), nunca em percentual solto — é o
6
+ // que evita confundir "0,5" de 0,5% com 0,5 bps na hora de calibrar.
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ exports.TraderAutopilotAction = exports.TraderRiskProfile = exports.TraderMarketRegime = exports.TraderPairStatus = exports.TraderHaltReason = exports.TraderOrderStatus = exports.TraderSide = exports.TraderSessionStatus = exports.TraderExecutionMode = exports.TraderStrategy = void 0;
9
+ var TraderStrategy;
10
+ (function (TraderStrategy) {
11
+ TraderStrategy["MarketMaking"] = "MarketMaking";
12
+ TraderStrategy["Grid"] = "Grid";
13
+ })(TraderStrategy || (exports.TraderStrategy = TraderStrategy = {}));
14
+ // Só Paper existe de fato hoje. Live está declarado porque as rotas precisam
15
+ // recusá-lo explicitamente enquanto não houver decisão de por capital real —
16
+ // um enum sem o valor deixaria a recusa implícita e fácil de esquecer.
17
+ var TraderExecutionMode;
18
+ (function (TraderExecutionMode) {
19
+ TraderExecutionMode["Paper"] = "Paper";
20
+ TraderExecutionMode["Live"] = "Live";
21
+ })(TraderExecutionMode || (exports.TraderExecutionMode = TraderExecutionMode = {}));
22
+ var TraderSessionStatus;
23
+ (function (TraderSessionStatus) {
24
+ TraderSessionStatus["Running"] = "Running";
25
+ TraderSessionStatus["Stopped"] = "Stopped";
26
+ TraderSessionStatus["Halted"] = "Halted";
27
+ })(TraderSessionStatus || (exports.TraderSessionStatus = TraderSessionStatus = {}));
28
+ var TraderSide;
29
+ (function (TraderSide) {
30
+ TraderSide["Buy"] = "Buy";
31
+ TraderSide["Sell"] = "Sell";
32
+ })(TraderSide || (exports.TraderSide = TraderSide = {}));
33
+ var TraderOrderStatus;
34
+ (function (TraderOrderStatus) {
35
+ TraderOrderStatus["Open"] = "Open";
36
+ TraderOrderStatus["Filled"] = "Filled";
37
+ TraderOrderStatus["Cancelled"] = "Cancelled";
38
+ })(TraderOrderStatus || (exports.TraderOrderStatus = TraderOrderStatus = {}));
39
+ // Por que a sessão parou sozinha. Manual é o botão do painel.
40
+ var TraderHaltReason;
41
+ (function (TraderHaltReason) {
42
+ TraderHaltReason["DailyLossLimit"] = "DailyLossLimit";
43
+ TraderHaltReason["InventoryLimit"] = "InventoryLimit";
44
+ TraderHaltReason["MaxDrawdown"] = "MaxDrawdown";
45
+ TraderHaltReason["FeedStale"] = "FeedStale";
46
+ TraderHaltReason["Manual"] = "Manual";
47
+ })(TraderHaltReason || (exports.TraderHaltReason = TraderHaltReason = {}));
48
+ var TraderPairStatus;
49
+ (function (TraderPairStatus) {
50
+ TraderPairStatus["Collecting"] = "Collecting";
51
+ TraderPairStatus["Paused"] = "Paused";
52
+ })(TraderPairStatus || (exports.TraderPairStatus = TraderPairStatus = {}));
53
+ // Regime detectado na janela recente. O market making desliga em Trending —
54
+ // é exatamente o cenário em que ele acumula inventário do lado errado.
55
+ var TraderMarketRegime;
56
+ (function (TraderMarketRegime) {
57
+ TraderMarketRegime["Ranging"] = "Ranging";
58
+ TraderMarketRegime["Trending"] = "Trending";
59
+ TraderMarketRegime["Volatile"] = "Volatile";
60
+ })(TraderMarketRegime || (exports.TraderMarketRegime = TraderMarketRegime = {}));
61
+ // ---------------------------------------------------------------- piloto
62
+ //
63
+ // O piloto automático existe porque preencher spread, skew e teto de
64
+ // inventário à mão exige já saber a resposta. Ele traduz uma escolha de
65
+ // apetite a risco nos números, escolhe os pares com o dado que o coletor
66
+ // gravou e mata o que não está capturando spread.
67
+ var TraderRiskProfile;
68
+ (function (TraderRiskProfile) {
69
+ TraderRiskProfile["Conservative"] = "Conservative";
70
+ TraderRiskProfile["Moderate"] = "Moderate";
71
+ TraderRiskProfile["Aggressive"] = "Aggressive";
72
+ })(TraderRiskProfile || (exports.TraderRiskProfile = TraderRiskProfile = {}));
73
+ var TraderAutopilotAction;
74
+ (function (TraderAutopilotAction) {
75
+ TraderAutopilotAction["SessionOpened"] = "SessionOpened";
76
+ TraderAutopilotAction["SessionClosed"] = "SessionClosed";
77
+ TraderAutopilotAction["Skipped"] = "Skipped";
78
+ })(TraderAutopilotAction || (exports.TraderAutopilotAction = TraderAutopilotAction = {}));
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@wrcb/cb-common",
3
- "version": "1.0.882",
3
+ "version": "1.0.884",
4
4
  "description": "Common resources between services",
5
5
  "main": "./build/index.js",
6
6
  "types": "./build/index.d.ts",