@wrcb/cb-common 1.0.908 → 1.0.910

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.
@@ -0,0 +1,2 @@
1
+ export * from './mediaJobCompletedEvent';
2
+ export * from './mediaJobCompletedPublisher';
@@ -0,0 +1,18 @@
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("./mediaJobCompletedEvent"), exports);
18
+ __exportStar(require("./mediaJobCompletedPublisher"), exports);
@@ -0,0 +1,6 @@
1
+ import { MediaJobCompletedData } from '../../types/mediaGen';
2
+ import { Subjects } from '../subjects';
3
+ export interface MediaJobCompletedEvent {
4
+ subject: Subjects.MediaJobCompleted;
5
+ data: MediaJobCompletedData;
6
+ }
@@ -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 { MediaJobCompletedEvent } from './mediaJobCompletedEvent';
3
+ import { Subjects } from '../subjects';
4
+ export declare class MediaJobCompletedPublisher extends Publisher<MediaJobCompletedEvent> {
5
+ subject: Subjects.MediaJobCompleted;
6
+ }
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MediaJobCompletedPublisher = void 0;
4
+ const basePublisher_1 = require("../basePublisher");
5
+ const subjects_1 = require("../subjects");
6
+ class MediaJobCompletedPublisher extends basePublisher_1.Publisher {
7
+ constructor() {
8
+ super(...arguments);
9
+ this.subject = subjects_1.Subjects.MediaJobCompleted;
10
+ }
11
+ }
12
+ exports.MediaJobCompletedPublisher = MediaJobCompletedPublisher;
@@ -79,5 +79,6 @@ 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
+ MediaJobCompleted = "media-gen:job:completed"
83
84
  }
@@ -95,4 +95,6 @@ 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
+ // media-gen
99
+ Subjects["MediaJobCompleted"] = "media-gen:job:completed";
98
100
  })(Subjects || (exports.Subjects = Subjects = {}));
package/build/index.d.ts CHANGED
@@ -62,12 +62,15 @@ export * from './types/clinica';
62
62
  export * from './types/companion';
63
63
  export * from './types/telegram';
64
64
  export * from './types/pixReceipt';
65
+ export * from './types/mediaGen';
66
+ export * from './types/influencerBook';
65
67
  export * from './events/subjects';
66
68
  export * from './events/baseListener';
67
69
  export * from './events/basePublisher';
68
70
  export * from './events/youtube-dark';
69
71
  export * from './events/social-media-automator';
70
72
  export * from './events/ai';
73
+ export * from './events/media-gen';
71
74
  export * from './events/notas-br';
72
75
  export * from './events/trabalho-home-office';
73
76
  export * from './services/TenantDataService';
package/build/index.js CHANGED
@@ -90,12 +90,15 @@ __exportStar(require("./types/clinica"), exports);
90
90
  __exportStar(require("./types/companion"), exports);
91
91
  __exportStar(require("./types/telegram"), exports);
92
92
  __exportStar(require("./types/pixReceipt"), exports);
93
+ __exportStar(require("./types/mediaGen"), exports);
94
+ __exportStar(require("./types/influencerBook"), exports);
93
95
  __exportStar(require("./events/subjects"), exports);
94
96
  __exportStar(require("./events/baseListener"), exports);
95
97
  __exportStar(require("./events/basePublisher"), exports);
96
98
  __exportStar(require("./events/youtube-dark"), exports);
97
99
  __exportStar(require("./events/social-media-automator"), exports);
98
100
  __exportStar(require("./events/ai"), exports);
101
+ __exportStar(require("./events/media-gen"), exports);
99
102
  __exportStar(require("./events/notas-br"), exports);
100
103
  __exportStar(require("./events/trabalho-home-office"), exports);
101
104
  __exportStar(require("./services/TenantDataService"), exports);
@@ -1,4 +1,4 @@
1
- import type { CrmCadenceStep, CrmStageMessage } from './crm';
1
+ import type { CrmActor, CrmCadenceStep, CrmStageMessage } from './crm';
2
2
  export declare enum ClinicaAppointmentStatus {
3
3
  AwaitingDeposit = "AwaitingDeposit",
4
4
  Confirmed = "Confirmed",
@@ -441,6 +441,65 @@ export interface ClinicaScheduledInfo {
441
441
  items: ClinicaScheduledMessage[];
442
442
  followUpPaused: ClinicaFollowUpPause | null;
443
443
  }
444
+ /** Uma mudança de coluna do contato no funil. */
445
+ export interface ClinicaStageMove {
446
+ id: string;
447
+ at: string;
448
+ from: string | null;
449
+ to: string | null;
450
+ actor: CrmActor;
451
+ userName: string | null;
452
+ }
453
+ /** Uma página do histórico, da mudança mais recente para a mais antiga. */
454
+ export interface ClinicaStageHistory {
455
+ items: ClinicaStageMove[];
456
+ hasMore: boolean;
457
+ }
458
+ /** Um grupo de leads do relatório (um anúncio, uma campanha ou uma etiqueta). */
459
+ export interface ClinicaReportGroup {
460
+ key: string;
461
+ label: string;
462
+ detail: string | null;
463
+ leads: number;
464
+ scheduled: number;
465
+ won: number;
466
+ lost: number;
467
+ }
468
+ export interface ClinicaReportDay {
469
+ date: string;
470
+ leads: number;
471
+ }
472
+ /** Quanto o lead esperou pela resposta, para quem escreveu estando numa etapa. */
473
+ export interface ClinicaReportStageWait {
474
+ stageKey: string;
475
+ label: string;
476
+ order: number;
477
+ replies: number;
478
+ byAi: number;
479
+ byTeam: number;
480
+ averageSeconds: number | null;
481
+ medianSeconds: number | null;
482
+ waiting: number;
483
+ }
484
+ export interface ClinicaReportTotals {
485
+ leads: number;
486
+ fromAds: number;
487
+ organic: number;
488
+ scheduled: number;
489
+ won: number;
490
+ lost: number;
491
+ }
492
+ export interface ClinicaReport {
493
+ from: string;
494
+ to: string;
495
+ timezone: string;
496
+ totals: ClinicaReportTotals;
497
+ byDay: ClinicaReportDay[];
498
+ byAd: ClinicaReportGroup[];
499
+ byCampaign: ClinicaReportGroup[];
500
+ byTag: ClinicaReportGroup[];
501
+ responseByStage: ClinicaReportStageWait[];
502
+ }
444
503
  export interface ClinicaCreateScheduledMessageInput {
445
504
  content: string;
446
505
  at: string;
@@ -39,6 +39,11 @@ export interface CompanionProfile {
39
39
  sheetUrl: string | null;
40
40
  /** O usuário vendedor que publica os posts dela na vitrine. */
41
41
  sellerId: string | null;
42
+ /**
43
+ * Quando alguém editou a ficha pelo painel. Com isto preenchido, o script de
44
+ * seed deixa a ficha e o prompt como estão (o painel passa a ser a fonte).
45
+ */
46
+ editedAt?: string | null;
42
47
  }
43
48
  /** O card público. Nunca leva o `systemPrompt` nem o `turnOns`. */
44
49
  export interface CompanionCard {
@@ -0,0 +1,142 @@
1
+ import { MediaJobStatus, MediaProviderName } from './mediaGen';
2
+ /** Idade mínima aceita para qualquer personagem. */
3
+ export declare const INFLUENCER_MIN_AGE = 25;
4
+ export declare enum InfluencerMediaKind {
5
+ Photo = "photo",
6
+ Video = "video"
7
+ }
8
+ export declare enum InfluencerMediaStatus {
9
+ /** Gerada, esperando o admin decidir se fica. */
10
+ Pending = "pending",
11
+ /** Aprovada: entra no book e pode ser enviada pelo bot. */
12
+ Approved = "approved"
13
+ }
14
+ export declare enum InfluencerLoraStatus {
15
+ None = "none",
16
+ Training = "training",
17
+ Ready = "ready",
18
+ Failed = "failed"
19
+ }
20
+ export interface InfluencerReferenceSheetDTO {
21
+ key: string;
22
+ url: string;
23
+ /** Vista pedida (frente, costas, rosto...). */
24
+ label: string;
25
+ approved: boolean;
26
+ }
27
+ export interface InfluencerProfileDTO {
28
+ userId: string;
29
+ /** Descrição física que vale para TODAS as imagens dela. */
30
+ visualPrompt: string;
31
+ age: number;
32
+ referencePrompt: string;
33
+ references: InfluencerReferenceSheetDTO[];
34
+ loraStatus: InfluencerLoraStatus;
35
+ }
36
+ export interface UpsertInfluencerProfileBody {
37
+ visualPrompt: string;
38
+ age: number;
39
+ }
40
+ export interface GenerateInfluencerReferenceBody {
41
+ /** Se vier, substitui o prompt de referência guardado. */
42
+ prompt?: string;
43
+ provider?: MediaProviderName;
44
+ }
45
+ export interface GenerateInfluencerBookBody {
46
+ /** Ex.: "no estacionamento usando saia estampada e blusinha preta". */
47
+ situation: string;
48
+ count: number;
49
+ provider?: MediaProviderName;
50
+ }
51
+ export interface ReviewInfluencerReferenceBody {
52
+ approveKeys: string[];
53
+ deleteKeys: string[];
54
+ }
55
+ export interface ReviewInfluencerMediaBody {
56
+ approveIds: string[];
57
+ deleteIds: string[];
58
+ }
59
+ export interface InfluencerMediaDTO {
60
+ id: string;
61
+ userId: string;
62
+ kind: InfluencerMediaKind;
63
+ status: InfluencerMediaStatus;
64
+ url: string;
65
+ situation: string;
66
+ caption: string;
67
+ tags: string[];
68
+ createdAt: string;
69
+ }
70
+ export interface InfluencerJobDTO {
71
+ id: string;
72
+ status: MediaJobStatus;
73
+ total: number;
74
+ done: number;
75
+ failed: number;
76
+ costUsd: number;
77
+ error: string | null;
78
+ }
79
+ /** Resposta de busca do book para o bot. */
80
+ export interface InfluencerBookHitDTO {
81
+ id: string;
82
+ kind: InfluencerMediaKind;
83
+ caption: string;
84
+ situation: string;
85
+ tags: string[];
86
+ /** URL assinada de vida curta, pronta para o canal baixar/enviar. */
87
+ url: string;
88
+ }
89
+ /**
90
+ * O que vai no `label` de cada prompt enviado ao cb-media-gen para o book: volta
91
+ * no evento de conclusão e vira legenda, situação e tags da foto.
92
+ */
93
+ export interface InfluencerBookLabel {
94
+ situation: string;
95
+ caption: string;
96
+ tags: string[];
97
+ }
98
+ /** Pedido de foto/vídeo do book que o bot extrai da resposta da personagem. */
99
+ export interface InfluencerBookRequest {
100
+ kind: InfluencerMediaKind;
101
+ query: string;
102
+ }
103
+ /**
104
+ * A personagem como o admin a vê: personalidade (vai para o prompt do bot) e a
105
+ * parte visual (vai para as imagens). Mora no cb-crm, junto do agente.
106
+ */
107
+ export interface InfluencerCharacterDTO {
108
+ userId: string;
109
+ agentId: string;
110
+ isCouple: boolean;
111
+ name: string;
112
+ gender: string;
113
+ /** Corpo, rosto e estilo, em português: como ela mesma diria. */
114
+ physical: string;
115
+ age: number;
116
+ /** A mesma descrição, em inglês e em termos visuais, para os modelos de imagem. */
117
+ visualPrompt: string;
118
+ city: string;
119
+ state: string;
120
+ occupation: string;
121
+ personality: string;
122
+ hobbies: string[];
123
+ speakingStyle: string;
124
+ turnOns: string;
125
+ headline: string;
126
+ bio: string;
127
+ }
128
+ /** Idade e descrição visual não entram: têm dono único, a aba Referência (gn-business). */
129
+ export type UpdateInfluencerCharacterBody = Omit<InfluencerCharacterDTO, 'userId' | 'agentId' | 'isCouple' | 'age' | 'visualPrompt'>;
130
+ /** gn-business → cb-crm: o que a aba Referência salvou e o bot também precisa saber. */
131
+ export interface SyncInfluencerVisualBody {
132
+ age: number;
133
+ visualPrompt: string;
134
+ }
135
+ /** Uma linha do arquivo que leva idade e descrição visual do cb-crm ao gn-business. */
136
+ export interface CompanionVisualExport {
137
+ sellerId: string;
138
+ slug: string;
139
+ name: string;
140
+ age: number;
141
+ visualPrompt: string;
142
+ }
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.InfluencerLoraStatus = exports.InfluencerMediaStatus = exports.InfluencerMediaKind = exports.INFLUENCER_MIN_AGE = void 0;
4
+ // Perfil visual e "book" (álbum de fotos e vídeos) de cada influencer do
5
+ // PrivateShow. Vive no gn-business; o cb-crm consulta o book para o bot enviar a
6
+ // foto certa na conversa (site, Telegram ou qualquer canal futuro).
7
+ /** Idade mínima aceita para qualquer personagem. */
8
+ exports.INFLUENCER_MIN_AGE = 25;
9
+ var InfluencerMediaKind;
10
+ (function (InfluencerMediaKind) {
11
+ InfluencerMediaKind["Photo"] = "photo";
12
+ InfluencerMediaKind["Video"] = "video";
13
+ })(InfluencerMediaKind || (exports.InfluencerMediaKind = InfluencerMediaKind = {}));
14
+ var InfluencerMediaStatus;
15
+ (function (InfluencerMediaStatus) {
16
+ /** Gerada, esperando o admin decidir se fica. */
17
+ InfluencerMediaStatus["Pending"] = "pending";
18
+ /** Aprovada: entra no book e pode ser enviada pelo bot. */
19
+ InfluencerMediaStatus["Approved"] = "approved";
20
+ })(InfluencerMediaStatus || (exports.InfluencerMediaStatus = InfluencerMediaStatus = {}));
21
+ var InfluencerLoraStatus;
22
+ (function (InfluencerLoraStatus) {
23
+ InfluencerLoraStatus["None"] = "none";
24
+ InfluencerLoraStatus["Training"] = "training";
25
+ InfluencerLoraStatus["Ready"] = "ready";
26
+ InfluencerLoraStatus["Failed"] = "failed";
27
+ })(InfluencerLoraStatus || (exports.InfluencerLoraStatus = InfluencerLoraStatus = {}));
@@ -0,0 +1,100 @@
1
+ export declare enum MediaProviderName {
2
+ /** GPU alugada sob demanda no Vast.ai. */
3
+ VastAi = "vastai",
4
+ /** API paga por imagem da Runware. */
5
+ Runware = "runware"
6
+ }
7
+ export declare enum MediaJobKind {
8
+ Image = "image",
9
+ Video = "video",
10
+ LoraTraining = "lora_training"
11
+ }
12
+ export declare enum MediaJobStatus {
13
+ Queued = "queued",
14
+ Running = "running",
15
+ /** Todos os itens saíram. */
16
+ Completed = "completed",
17
+ /** Alguns itens saíram e outros falharam (ou foram recusados). */
18
+ PartiallyCompleted = "partially_completed",
19
+ Failed = "failed",
20
+ Cancelled = "cancelled"
21
+ }
22
+ export interface MediaLora {
23
+ /** URL (ou id do provedor) do arquivo de LoRA. */
24
+ ref: string;
25
+ /** Peso de 0 a 2; 1 é o padrão. */
26
+ weight: number;
27
+ }
28
+ export interface MediaPrompt {
29
+ prompt: string;
30
+ negativePrompt?: string;
31
+ seed?: number;
32
+ width?: number;
33
+ height?: number;
34
+ /** Texto livre do chamador, devolvido junto do arquivo (ex.: legenda). */
35
+ label?: string;
36
+ }
37
+ export interface MediaJobAsset {
38
+ /** Posição do prompt de origem em `prompts`. */
39
+ index: number;
40
+ key: string;
41
+ url: string;
42
+ contentType: string;
43
+ bytes: number;
44
+ prompt: string;
45
+ label?: string;
46
+ seed?: number;
47
+ }
48
+ export interface MediaJobFailure {
49
+ index: number;
50
+ reason: string;
51
+ }
52
+ export interface CreateMediaJobBody {
53
+ provider: MediaProviderName;
54
+ kind: MediaJobKind;
55
+ /** Serviço que pediu, para rastrear (ex.: "gn-business"). */
56
+ callerService: string;
57
+ /** Referência livre do chamador, devolvida no evento (ex.: "profile:123"). */
58
+ callerRef: string;
59
+ prompts: MediaPrompt[];
60
+ /** Imagens de referência do rosto/estilo (URLs). */
61
+ referenceImageUrls?: string[];
62
+ loras?: MediaLora[];
63
+ /** Pasta no bucket, sem barra inicial. */
64
+ folder: string;
65
+ /** Pasta com prefixo tmp- para o que pode ser apagado a qualquer momento. */
66
+ temporary?: boolean;
67
+ /** Só para treino de LoRA: imagens do dataset. */
68
+ trainingImageUrls?: string[];
69
+ /** Teto de gasto do job em dólares. */
70
+ maxCostUsd?: number;
71
+ }
72
+ export interface MediaJobDTO {
73
+ id: string;
74
+ provider: MediaProviderName;
75
+ kind: MediaJobKind;
76
+ status: MediaJobStatus;
77
+ callerService: string;
78
+ callerRef: string;
79
+ total: number;
80
+ done: number;
81
+ assets: MediaJobAsset[];
82
+ failures: MediaJobFailure[];
83
+ costUsd: number;
84
+ error: string | null;
85
+ /** Para treino de LoRA: chave do arquivo treinado, quando pronto. */
86
+ loraKey: string | null;
87
+ createdAt: string;
88
+ updatedAt: string;
89
+ }
90
+ export interface MediaJobCompletedData {
91
+ jobId: string;
92
+ callerService: string;
93
+ callerRef: string;
94
+ kind: MediaJobKind;
95
+ status: MediaJobStatus;
96
+ assets: MediaJobAsset[];
97
+ failures: MediaJobFailure[];
98
+ /** Para treino de LoRA: onde ficou o arquivo treinado. */
99
+ loraUrl?: string;
100
+ }
@@ -0,0 +1,30 @@
1
+ "use strict";
2
+ // Tipos do cb-media-gen: geração de imagem/vídeo e treino de LoRA, reutilizável
3
+ // por qualquer projeto. O serviço não conhece personagens: quem chama diz o que
4
+ // gerar e recebe os arquivos prontos.
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.MediaJobStatus = exports.MediaJobKind = exports.MediaProviderName = void 0;
7
+ var MediaProviderName;
8
+ (function (MediaProviderName) {
9
+ /** GPU alugada sob demanda no Vast.ai. */
10
+ MediaProviderName["VastAi"] = "vastai";
11
+ /** API paga por imagem da Runware. */
12
+ MediaProviderName["Runware"] = "runware";
13
+ })(MediaProviderName || (exports.MediaProviderName = MediaProviderName = {}));
14
+ var MediaJobKind;
15
+ (function (MediaJobKind) {
16
+ MediaJobKind["Image"] = "image";
17
+ MediaJobKind["Video"] = "video";
18
+ MediaJobKind["LoraTraining"] = "lora_training";
19
+ })(MediaJobKind || (exports.MediaJobKind = MediaJobKind = {}));
20
+ var MediaJobStatus;
21
+ (function (MediaJobStatus) {
22
+ MediaJobStatus["Queued"] = "queued";
23
+ MediaJobStatus["Running"] = "running";
24
+ /** Todos os itens saíram. */
25
+ MediaJobStatus["Completed"] = "completed";
26
+ /** Alguns itens saíram e outros falharam (ou foram recusados). */
27
+ MediaJobStatus["PartiallyCompleted"] = "partially_completed";
28
+ MediaJobStatus["Failed"] = "failed";
29
+ MediaJobStatus["Cancelled"] = "cancelled";
30
+ })(MediaJobStatus || (exports.MediaJobStatus = MediaJobStatus = {}));
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@wrcb/cb-common",
3
- "version": "1.0.908",
3
+ "version": "1.0.910",
4
4
  "description": "Common resources between services",
5
5
  "main": "./build/index.js",
6
6
  "types": "./build/index.d.ts",