@wrcb/cb-common 1.0.895 → 1.0.897

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,8 +79,5 @@ 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",
83
- TrdSessionHalted = "trd:session:halted",
84
- TrdCollectorStalled = "trd:collector:stalled",
85
- TrdAutopilotActed = "trd:autopilot:acted"
82
+ ThoOrderSettled = "tho:order:settled"
86
83
  }
@@ -95,8 +95,4 @@ 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";
102
98
  })(Subjects || (exports.Subjects = Subjects = {}));
package/build/index.d.ts CHANGED
@@ -58,7 +58,7 @@ export * from './types/predictionType';
58
58
  export * from './types/mercadoProfissional';
59
59
  export * from './types/trabalhoHomeOffice';
60
60
  export * from './types/crm';
61
- export * from './types/trader';
61
+ export * from './types/companion';
62
62
  export * from './events/subjects';
63
63
  export * from './events/baseListener';
64
64
  export * from './events/basePublisher';
@@ -67,7 +67,6 @@ export * from './events/social-media-automator';
67
67
  export * from './events/ai';
68
68
  export * from './events/notas-br';
69
69
  export * from './events/trabalho-home-office';
70
- export * from './events/trader';
71
70
  export * from './services/TenantDataService';
72
71
  export * from './services/CurrencyService';
73
72
  export * from './config/notasBrBilling';
package/build/index.js CHANGED
@@ -86,8 +86,7 @@ __exportStar(require("./types/mercadoProfissional"), exports);
86
86
  __exportStar(require("./types/trabalhoHomeOffice"), exports);
87
87
  // crm — núcleo multi-tenant (pipeline configurável + agente de IA)
88
88
  __exportStar(require("./types/crm"), exports);
89
- // bot-trader — simulação de estratégias na MEXC spot
90
- __exportStar(require("./types/trader"), exports);
89
+ __exportStar(require("./types/companion"), exports);
91
90
  __exportStar(require("./events/subjects"), exports);
92
91
  __exportStar(require("./events/baseListener"), exports);
93
92
  __exportStar(require("./events/basePublisher"), exports);
@@ -96,7 +95,6 @@ __exportStar(require("./events/social-media-automator"), exports);
96
95
  __exportStar(require("./events/ai"), exports);
97
96
  __exportStar(require("./events/notas-br"), exports);
98
97
  __exportStar(require("./events/trabalho-home-office"), exports);
99
- __exportStar(require("./events/trader"), exports);
100
98
  __exportStar(require("./services/TenantDataService"), exports);
101
99
  __exportStar(require("./services/CurrencyService"), exports);
102
100
  // notas-br — tabela de billing compartilhada entre gn-business e cb-payments
package/build/server.d.ts CHANGED
@@ -91,7 +91,6 @@ export * from './events/apps/creativeVideoReadyEvent';
91
91
  export * from './events/realstate/realStateVideoCreatedEvent';
92
92
  export * from './events/notas-br';
93
93
  export * from './events/trabalho-home-office';
94
- export * from './events/trader';
95
94
  export * from './events/linkedin-automator/linkedinPostGeneratedEvent';
96
95
  export * from './events/linkedin-automator/linkedinPostGeneratedPublisher';
97
96
  export * from './events/linkedin-automator/linkedinPostPublishedEvent';
package/build/server.js CHANGED
@@ -109,8 +109,6 @@ __exportStar(require("./events/realstate/realStateVideoCreatedEvent"), exports);
109
109
  __exportStar(require("./events/notas-br"), exports);
110
110
  // trabalho-home-office
111
111
  __exportStar(require("./events/trabalho-home-office"), exports);
112
- // bot-trader
113
- __exportStar(require("./events/trader"), exports);
114
112
  // linkedin-automator
115
113
  __exportStar(require("./events/linkedin-automator/linkedinPostGeneratedEvent"), exports);
116
114
  __exportStar(require("./events/linkedin-automator/linkedinPostGeneratedPublisher"), exports);
@@ -1255,56 +1255,5 @@ TenantDataService.tenantDataMap = {
1255
1255
  }
1256
1256
  },
1257
1257
  RATING_CRITERIA: undefined
1258
- },
1259
- // Ferramenta interna, não produto: não há site público, cadastro de
1260
- // usuário, e-mail transacional nem mídia enviada por ninguém. Os campos
1261
- // ficam vazios de propósito — preenchê-los com valor de fachada faria o
1262
- // TenantDataService devolver dado que parece configuração e não é.
1263
- // O que este tenant realmente identifica é a origem dos dados em
1264
- // trd_* e o login do painel no cb-auth.
1265
- [tenant_1.Tenant.BotTrader]: {
1266
- TENANT: tenant_1.Tenant.BotTrader,
1267
- BACKEND_API_VERSION: '1',
1268
- SITE_NAME: 'BotTrader',
1269
- SITE_URL: 'https://trader.wrsolucoesdigitais.com.br',
1270
- FROM_EMAIL: 'app@wrsolucoesdigitais.com.br',
1271
- SITE_WHATSAPP_SUPPORT: '',
1272
- SITE_WHATSAPP_BOT: '',
1273
- WHATSAPP_BOT_NUMBER_ID: '',
1274
- WHATSAPP_TOKEN: '',
1275
- WHATSAPP_API_URL: '',
1276
- WHATSAPP_API_VERSION: '',
1277
- IOS_APP_DOWNLOAD_LINK: '',
1278
- ANDROID_APP_DOWNLOAD_LINK: '',
1279
- SITE_DESCRIPTION: 'Simulação de estratégias de market making e grade na MEXC spot.',
1280
- KEYWORDS: [],
1281
- SOCIAL_X: '',
1282
- SOCIAL_YOUTUBE: '',
1283
- SOCIAL_INSTAGRAM: '',
1284
- SOCIAL_FACEBOOK: '',
1285
- USER_CATEGORIES_CONFIG: {},
1286
- COUPONS_TYPE_ALLOWED_TO_BE_CREATED_BY_SELLER: [],
1287
- COUPONS_TYPE_ALLOWED_TO_BE_CREATED_BY_ADMIN: [],
1288
- EMAIL_HOST: 'smtp.gmail.com',
1289
- EMAIL_PORT: '587',
1290
- EMAIL_USER: 'wrsolucoesdig@gmail.com',
1291
- EMAIL_PASS: 'lwegguaqrzauawsg',
1292
- AUTH_FACEBOOK_APP_ID: '',
1293
- AUTH_GOOGLE_ID: '',
1294
- AUTH_GOOGLE_SECRET: '',
1295
- GOOGLE_ANALYTICS_MEASUREMENT_ID: '',
1296
- GOOGLE_VERIFICATION: '',
1297
- MEDIA_CONFIG: {
1298
- maxPhotoSizeMB: 5,
1299
- maxVideoSizeMB: 20,
1300
- allowedImageFormats: ['jpg', 'jpeg', 'png', 'webp'],
1301
- allowedVideoFormats: ['mp4', 'webm'],
1302
- imageQualities: {
1303
- thumbnail: { width: 150, height: 150, quality: 80 },
1304
- medium: { width: 800, height: 800, quality: 85 },
1305
- large: { width: 1200, height: 1200, quality: 90 }
1306
- }
1307
- },
1308
- RATING_CRITERIA: undefined
1309
1258
  }
1310
1259
  };
@@ -0,0 +1,175 @@
1
+ import { UserCategory } from './userCategory';
2
+ /** Uma pessoa do perfil. Influencer solo tem uma; casal, duas. */
3
+ export interface CompanionPerson {
4
+ name: string;
5
+ age: number;
6
+ /** Como a pessoa se identifica, em português: "mulher", "mulher trans"… */
7
+ gender: string;
8
+ /** O corpo, o rosto e o estilo, em português — como ela mesma diria. */
9
+ physical: string;
10
+ /**
11
+ * A mesma descrição, em inglês e em termos visuais, para os modelos de
12
+ * imagem. Fica separada porque o que soa bem na conversa ("morena de
13
+ * sorriso fácil") não é o que fixa o rosto entre uma foto e outra.
14
+ */
15
+ visualPrompt: string;
16
+ }
17
+ export interface CompanionProfile {
18
+ /** Identificador estável: nome de arquivo das imagens e chave do cadastro. */
19
+ slug: string;
20
+ /** Female, Male, Trans ou Couple. */
21
+ category: UserCategory;
22
+ people: CompanionPerson[];
23
+ city: string;
24
+ state: string;
25
+ occupation: string;
26
+ personality: string;
27
+ hobbies: string[];
28
+ /** Como escreve: gírias, ritmo, emojis, apelidos. */
29
+ speakingStyle: string;
30
+ /** Do que gosta entre quatro paredes. Vai para o prompt, não para o card. */
31
+ turnOns: string;
32
+ /** A linha curta do card. */
33
+ headline: string;
34
+ /** Duas ou três frases, na primeira pessoa. */
35
+ bio: string;
36
+ /** Preenchidos quando as imagens são geradas. */
37
+ avatarUrl: string | null;
38
+ /** A folha de personagem (fundo verde, frente e perfis, rosto e cabelo). */
39
+ sheetUrl: string | null;
40
+ /** O usuário vendedor que publica os posts dela na vitrine. */
41
+ sellerId: string | null;
42
+ }
43
+ /** O card público. Nunca leva o `systemPrompt` nem o `turnOns`. */
44
+ export interface CompanionCard {
45
+ agentId: string;
46
+ slug: string;
47
+ /** "Lia" ou, no casal, "Lia & Duda". */
48
+ name: string;
49
+ category: UserCategory;
50
+ ages: number[];
51
+ city: string;
52
+ state: string;
53
+ occupation: string;
54
+ hobbies: string[];
55
+ headline: string;
56
+ bio: string;
57
+ avatarUrl: string | null;
58
+ sellerId: string | null;
59
+ online: boolean;
60
+ }
61
+ export declare enum CompanionChatSender {
62
+ Visitor = "Visitor",
63
+ Companion = "Companion"
64
+ }
65
+ export interface CompanionChatMessage {
66
+ id: string;
67
+ sender: CompanionChatSender;
68
+ text: string;
69
+ /** ISO 8601. */
70
+ createdAt: string;
71
+ /**
72
+ * Card de pack dentro da conversa: a oferta (fotos borradas, preço) ou, já
73
+ * comprado, as fotos liberadas. `undefined` em mensagem comum.
74
+ */
75
+ pack?: CompanionChatPack;
76
+ }
77
+ /** Um pack de fotos exclusivas, como o chat mostra. */
78
+ export interface CompanionChatPack {
79
+ packId: string;
80
+ title: string;
81
+ description: string;
82
+ /** Em centavos, cobrado do saldo de créditos de quem compra. */
83
+ priceCents: number;
84
+ imageCount: number;
85
+ /** Capa borrada: é o que aparece antes da compra. */
86
+ coverUrl: string;
87
+ /** As fotos. Só vem preenchido para quem comprou. */
88
+ imageUrls: string[] | null;
89
+ }
90
+ /** Uma linha da lista de conversas do visitante. */
91
+ export interface CompanionChatSummary {
92
+ chatId: string;
93
+ agentId: string;
94
+ name: string;
95
+ avatarUrl: string | null;
96
+ online: boolean;
97
+ lastMessage: CompanionChatMessage | null;
98
+ unread: number;
99
+ }
100
+ export interface CompanionChatThread {
101
+ /** `null` enquanto o visitante não mandou a primeira mensagem. */
102
+ chatId: string | null;
103
+ agentId: string;
104
+ messages: CompanionChatMessage[];
105
+ /** A influencer está escrevendo agora. */
106
+ typing: boolean;
107
+ /**
108
+ * Quantas mensagens o visitante sem conta ainda pode mandar antes de
109
+ * precisar se cadastrar. `null` para quem já está logado.
110
+ */
111
+ freeMessagesLeft: number | null;
112
+ }
113
+ /**
114
+ * Erros das rotas do chat. São códigos, não frases: quem traduz é o site.
115
+ * - SignupRequired: o visitante sem conta esgotou as mensagens grátis.
116
+ * - CompanionOffline: tentou abrir conversa nova com quem está offline.
117
+ * - CompanionNotFound: o agente não existe ou não é uma influencer.
118
+ * - ChatNotFound: não há conversa com esse agente para esse visitante.
119
+ * - LoginRequired: comprar pack exige conta.
120
+ * - PackNotFound: o pack não existe ou não é dessa influencer.
121
+ * - InsufficientBalance: o saldo de créditos não cobre o pack.
122
+ */
123
+ export type CompanionChatError = 'SignupRequired' | 'CompanionOffline' | 'CompanionNotFound' | 'ChatNotFound' | 'LoginRequired' | 'PackNotFound' | 'InsufficientBalance';
124
+ export interface CompanionMediaPost {
125
+ /** Legenda, na voz da influencer. */
126
+ caption: string;
127
+ /** Cena, em inglês, como foi pedida ao gerador de imagens. */
128
+ scene: string;
129
+ /** Post aberto (vitrine) ou só para assinantes. */
130
+ isFree: boolean;
131
+ /** `null` enquanto não foi gerado (ou se o gerador recusou). */
132
+ imageUrl: string | null;
133
+ /** Miniatura borrada que a vitrine mostra no lugar do post fechado. */
134
+ thumbnailUrl: string | null;
135
+ }
136
+ /** Um pack no manifesto: o ensaio exclusivo vendido no chat. */
137
+ export interface CompanionMediaPack {
138
+ /** Estável dentro da influencer ("ensaio-1"): é a chave de compra. */
139
+ packKey: string;
140
+ title: string;
141
+ description: string;
142
+ priceCents: number;
143
+ scenes: string[];
144
+ /** Uma por cena; `null` enquanto não gerada (ou recusada). */
145
+ imageUrls: (string | null)[];
146
+ coverUrl: string | null;
147
+ }
148
+ export interface CompanionMediaEntry {
149
+ slug: string;
150
+ avatarScene: string;
151
+ sheetUrl: string | null;
152
+ avatarUrl: string | null;
153
+ posts: CompanionMediaPost[];
154
+ /** Ausente nos manifestos gerados antes dos packs existirem. */
155
+ packs?: CompanionMediaPack[];
156
+ }
157
+ export type CompanionMediaManifest = Record<string, CompanionMediaEntry>;
158
+ /**
159
+ * O que o cadastro das vendedoras (cb-auth) precisa saber de cada influencer.
160
+ * Exportado pelo cb-crm, que é onde a ficha mora, para nenhum serviço
161
+ * importar o código do outro.
162
+ */
163
+ export interface CompanionDirectoryEntry {
164
+ slug: string;
165
+ name: string;
166
+ category: UserCategory;
167
+ ages: number[];
168
+ city: string;
169
+ state: string;
170
+ headline: string;
171
+ bio: string;
172
+ avatarUrl: string | null;
173
+ }
174
+ /** O que o cadastro das vendedoras devolve: slug → id do usuário vendedor. */
175
+ export type CompanionSellerMap = Record<string, string>;
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CompanionChatSender = void 0;
4
+ var CompanionChatSender;
5
+ (function (CompanionChatSender) {
6
+ CompanionChatSender["Visitor"] = "Visitor";
7
+ CompanionChatSender["Companion"] = "Companion";
8
+ })(CompanionChatSender || (exports.CompanionChatSender = CompanionChatSender = {}));
@@ -15,6 +15,5 @@ export declare enum Tenant {
15
15
  LinkedinAutomator = "LinkedinAutomator",
16
16
  NotasBr = "NotasBr",
17
17
  TrabalhoHomeOffice = "TrabalhoHomeOffice",
18
- MercadoProfissional = "MercadoProfissional",
19
- BotTrader = "BotTrader"
18
+ MercadoProfissional = "MercadoProfissional"
20
19
  }
@@ -20,5 +20,4 @@ var Tenant;
20
20
  Tenant["NotasBr"] = "NotasBr";
21
21
  Tenant["TrabalhoHomeOffice"] = "TrabalhoHomeOffice";
22
22
  Tenant["MercadoProfissional"] = "MercadoProfissional";
23
- Tenant["BotTrader"] = "BotTrader";
24
23
  })(Tenant || (exports.Tenant = Tenant = {}));
@@ -14,5 +14,7 @@ export declare enum TransactionOperation {
14
14
  PlatformFee = "PlatformFee",
15
15
  GiftReceived = "GiftReceived",
16
16
  Bet = "Bet",
17
- Gain = "Gain"
17
+ Gain = "Gain",
18
+ ContentPurchased = "ContentPurchased",
19
+ ContentSold = "ContentSold"
18
20
  }
@@ -19,4 +19,8 @@ var TransactionOperation;
19
19
  TransactionOperation["GiftReceived"] = "GiftReceived";
20
20
  TransactionOperation["Bet"] = "Bet";
21
21
  TransactionOperation["Gain"] = "Gain";
22
+ // Conteúdo avulso comprado com o saldo (pack de fotos no chat das
23
+ // influencers de IA): o débito de quem compra e o crédito de quem vende.
24
+ TransactionOperation["ContentPurchased"] = "ContentPurchased";
25
+ TransactionOperation["ContentSold"] = "ContentSold";
22
26
  })(TransactionOperation || (exports.TransactionOperation = TransactionOperation = {}));
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@wrcb/cb-common",
3
- "version": "1.0.895",
3
+ "version": "1.0.897",
4
4
  "description": "Common resources between services",
5
5
  "main": "./build/index.js",
6
6
  "types": "./build/index.d.ts",
@@ -1,13 +0,0 @@
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
- }
@@ -1,2 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
@@ -1,6 +0,0 @@
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
- }
@@ -1,12 +0,0 @@
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;
@@ -1,10 +0,0 @@
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
- }
@@ -1,2 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
@@ -1,6 +0,0 @@
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
- }
@@ -1,12 +0,0 @@
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;
@@ -1,6 +0,0 @@
1
- export * from './sessionHaltedEvent';
2
- export * from './sessionHaltedPublisher';
3
- export * from './collectorStalledEvent';
4
- export * from './collectorStalledPublisher';
5
- export * from './autopilotActedEvent';
6
- export * from './autopilotActedPublisher';
@@ -1,22 +0,0 @@
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);
@@ -1,15 +0,0 @@
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
- }
@@ -1,2 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
@@ -1,6 +0,0 @@
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
- }
@@ -1,12 +0,0 @@
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;
@@ -1,188 +0,0 @@
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
- capturedEdgeQuote: number;
75
- placedOrders: number;
76
- filledOrders: number;
77
- cancelledOrders: number;
78
- fillRate: number;
79
- roundTrips: number;
80
- inventoryBase: number;
81
- inventoryValueQuote: number;
82
- peakInventoryQuote: number;
83
- maxDrawdownPercent: number;
84
- capturedSpreadBps: number;
85
- }
86
- export interface TraderPairDTO {
87
- id: string;
88
- symbol: string;
89
- baseAsset: string;
90
- quoteAsset: string;
91
- status: TraderPairStatus;
92
- tickSize: number;
93
- stepSize: number;
94
- minNotional: number;
95
- lastTickAt: string | null;
96
- bookSnapshots: number;
97
- tradesCollected: number;
98
- createdAt: string;
99
- }
100
- export interface TraderSessionDTO {
101
- id: string;
102
- label: string;
103
- symbol: string;
104
- strategy: TraderStrategy;
105
- mode: TraderExecutionMode;
106
- status: TraderSessionStatus;
107
- haltReason: TraderHaltReason | null;
108
- params: TraderSessionParams;
109
- risk: TraderRiskLimits;
110
- fees: TraderFeeConfig;
111
- startingCapitalQuote: number;
112
- metrics: TraderSessionMetrics;
113
- startedAt: string;
114
- stoppedAt: string | null;
115
- }
116
- export interface TraderFillDTO {
117
- id: string;
118
- sessionId: string;
119
- symbol: string;
120
- side: TraderSide;
121
- price: number;
122
- quantity: number;
123
- notionalQuote: number;
124
- feeQuote: number;
125
- inventoryBaseAfter: number;
126
- realizedPnlQuote: number | null;
127
- filledAt: string;
128
- }
129
- export interface TraderSessionSnapshotDTO {
130
- sessionId: string;
131
- at: string;
132
- midPrice: number;
133
- metrics: TraderSessionMetrics;
134
- regime: TraderMarketRegime;
135
- }
136
- export interface TraderComparisonRowDTO {
137
- sessionId: string;
138
- label: string;
139
- symbol: string;
140
- strategy: TraderStrategy;
141
- status: TraderSessionStatus;
142
- metrics: TraderSessionMetrics;
143
- hoursRunning: number;
144
- }
145
- export declare enum TraderRiskProfile {
146
- Conservative = "Conservative",
147
- Moderate = "Moderate",
148
- Aggressive = "Aggressive"
149
- }
150
- export declare enum TraderAutopilotAction {
151
- SessionOpened = "SessionOpened",
152
- SessionClosed = "SessionClosed",
153
- Skipped = "Skipped"
154
- }
155
- export interface TraderAutopilotConfig {
156
- enabled: boolean;
157
- riskProfile: TraderRiskProfile;
158
- capitalQuote: number;
159
- maxPairs: number;
160
- evaluationHours: number;
161
- lastRunAt: string | null;
162
- nextRunAt: string | null;
163
- }
164
- export interface TraderAutopilotDecisionDTO {
165
- id: string;
166
- at: string;
167
- action: TraderAutopilotAction;
168
- symbol: string;
169
- strategy: TraderStrategy | null;
170
- sessionId: string | null;
171
- reason: string;
172
- metrics: {
173
- medianSpreadBps?: number;
174
- tradesPerHour?: number;
175
- score?: number;
176
- spreadPnlQuote?: number;
177
- feesQuote?: number;
178
- hoursRunning?: number;
179
- };
180
- }
181
- export interface TraderCandidateDTO {
182
- symbol: string;
183
- medianSpreadBps: number;
184
- tradesPerHour: number;
185
- score: number;
186
- eligible: boolean;
187
- rejection: string | null;
188
- }
@@ -1,78 +0,0 @@
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 = {}));