@qcobro/common 1.11.3 → 1.11.4

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 (173) hide show
  1. package/dist/config.d.ts +307 -0
  2. package/dist/config.d.ts.map +1 -0
  3. package/{src/config.ts → dist/config.js} +123 -154
  4. package/dist/config.js.map +1 -0
  5. package/dist/errors/ValidationError.d.ts +27 -0
  6. package/dist/errors/ValidationError.d.ts.map +1 -0
  7. package/dist/errors/ValidationError.js +52 -0
  8. package/dist/errors/ValidationError.js.map +1 -0
  9. package/{src/errors/index.ts → dist/errors/index.d.ts} +1 -0
  10. package/dist/errors/index.d.ts.map +1 -0
  11. package/dist/errors/index.js +2 -0
  12. package/dist/errors/index.js.map +1 -0
  13. package/dist/index.d.ts +19 -0
  14. package/dist/index.d.ts.map +1 -0
  15. package/{src/index.ts → dist/index.js} +2 -5
  16. package/dist/index.js.map +1 -0
  17. package/dist/schemas/agentTemplates.d.ts +73 -0
  18. package/dist/schemas/agentTemplates.d.ts.map +1 -0
  19. package/dist/schemas/agentTemplates.js +90 -0
  20. package/dist/schemas/agentTemplates.js.map +1 -0
  21. package/dist/schemas/apiKeys.d.ts +17 -0
  22. package/dist/schemas/apiKeys.d.ts.map +1 -0
  23. package/{src/schemas/apiKeys.ts → dist/schemas/apiKeys.js} +11 -16
  24. package/dist/schemas/apiKeys.js.map +1 -0
  25. package/dist/schemas/auth.d.ts +74 -0
  26. package/dist/schemas/auth.d.ts.map +1 -0
  27. package/dist/schemas/auth.js +53 -0
  28. package/dist/schemas/auth.js.map +1 -0
  29. package/dist/schemas/campaigns.d.ts +61 -0
  30. package/dist/schemas/campaigns.d.ts.map +1 -0
  31. package/{src/schemas/campaigns.ts → dist/schemas/campaigns.js} +20 -32
  32. package/dist/schemas/campaigns.js.map +1 -0
  33. package/dist/schemas/contactLog.d.ts +121 -0
  34. package/dist/schemas/contactLog.d.ts.map +1 -0
  35. package/dist/schemas/contactLog.js +83 -0
  36. package/dist/schemas/contactLog.js.map +1 -0
  37. package/dist/schemas/dispatch.d.ts +51 -0
  38. package/dist/schemas/dispatch.d.ts.map +1 -0
  39. package/{src/schemas/dispatch.ts → dist/schemas/dispatch.js} +55 -61
  40. package/dist/schemas/dispatch.js.map +1 -0
  41. package/dist/schemas/email.d.ts +38 -0
  42. package/dist/schemas/email.d.ts.map +1 -0
  43. package/dist/schemas/email.js +34 -0
  44. package/dist/schemas/email.js.map +1 -0
  45. package/dist/schemas/index.d.ts +16 -0
  46. package/dist/schemas/index.d.ts.map +1 -0
  47. package/{src/schemas/index.ts → dist/schemas/index.js} +1 -0
  48. package/dist/schemas/index.js.map +1 -0
  49. package/dist/schemas/insight.d.ts +25 -0
  50. package/dist/schemas/insight.d.ts.map +1 -0
  51. package/{src/schemas/insight.ts → dist/schemas/insight.js} +6 -9
  52. package/dist/schemas/insight.js.map +1 -0
  53. package/dist/schemas/portfolios.d.ts +65 -0
  54. package/dist/schemas/portfolios.d.ts.map +1 -0
  55. package/dist/schemas/portfolios.js +40 -0
  56. package/dist/schemas/portfolios.js.map +1 -0
  57. package/dist/schemas/userSettings.d.ts +25 -0
  58. package/dist/schemas/userSettings.d.ts.map +1 -0
  59. package/{src/schemas/userSettings.ts → dist/schemas/userSettings.js} +4 -9
  60. package/dist/schemas/userSettings.js.map +1 -0
  61. package/dist/schemas/users.d.ts +7 -0
  62. package/dist/schemas/users.d.ts.map +1 -0
  63. package/dist/schemas/users.js +6 -0
  64. package/dist/schemas/users.js.map +1 -0
  65. package/dist/schemas/voiceEvent.d.ts +37 -0
  66. package/dist/schemas/voiceEvent.d.ts.map +1 -0
  67. package/dist/schemas/voiceEvent.js +35 -0
  68. package/dist/schemas/voiceEvent.js.map +1 -0
  69. package/dist/schemas/whatsApp.d.ts +76 -0
  70. package/dist/schemas/whatsApp.d.ts.map +1 -0
  71. package/dist/schemas/whatsApp.js +85 -0
  72. package/dist/schemas/whatsApp.js.map +1 -0
  73. package/dist/schemas/workspaceSettings.d.ts +27 -0
  74. package/dist/schemas/workspaceSettings.d.ts.map +1 -0
  75. package/{src/schemas/workspaceSettings.ts → dist/schemas/workspaceSettings.js} +6 -11
  76. package/dist/schemas/workspaceSettings.js.map +1 -0
  77. package/dist/schemas/workspaces.d.ts +50 -0
  78. package/dist/schemas/workspaces.d.ts.map +1 -0
  79. package/dist/schemas/workspaces.js +36 -0
  80. package/dist/schemas/workspaces.js.map +1 -0
  81. package/dist/types/agentTemplates.d.ts +119 -0
  82. package/dist/types/agentTemplates.d.ts.map +1 -0
  83. package/dist/types/agentTemplates.js +2 -0
  84. package/dist/types/agentTemplates.js.map +1 -0
  85. package/dist/types/campaigns.d.ts +257 -0
  86. package/dist/types/campaigns.d.ts.map +1 -0
  87. package/dist/types/campaigns.js +2 -0
  88. package/dist/types/campaigns.js.map +1 -0
  89. package/dist/types/dispatch.d.ts +168 -0
  90. package/dist/types/dispatch.d.ts.map +1 -0
  91. package/dist/types/dispatch.js +8 -0
  92. package/dist/types/dispatch.js.map +1 -0
  93. package/dist/types/email.d.ts +65 -0
  94. package/dist/types/email.d.ts.map +1 -0
  95. package/dist/types/email.js +7 -0
  96. package/dist/types/email.js.map +1 -0
  97. package/{src/types/engine.ts → dist/types/engine.d.ts} +23 -46
  98. package/dist/types/engine.d.ts.map +1 -0
  99. package/dist/types/engine.js +10 -0
  100. package/dist/types/engine.js.map +1 -0
  101. package/dist/types/index.d.ts +12 -0
  102. package/dist/types/index.d.ts.map +1 -0
  103. package/{src/types/index.ts → dist/types/index.js} +1 -0
  104. package/dist/types/index.js.map +1 -0
  105. package/{src/types/insight.ts → dist/types/insight.d.ts} +10 -8
  106. package/dist/types/insight.d.ts.map +1 -0
  107. package/dist/types/insight.js +2 -0
  108. package/dist/types/insight.js.map +1 -0
  109. package/dist/types/portfolios.d.ts +153 -0
  110. package/dist/types/portfolios.d.ts.map +1 -0
  111. package/dist/types/portfolios.js +2 -0
  112. package/dist/types/portfolios.js.map +1 -0
  113. package/dist/types/userSettings.d.ts +25 -0
  114. package/dist/types/userSettings.d.ts.map +1 -0
  115. package/dist/types/userSettings.js +2 -0
  116. package/dist/types/userSettings.js.map +1 -0
  117. package/dist/types/voiceApplication.d.ts +32 -0
  118. package/dist/types/voiceApplication.d.ts.map +1 -0
  119. package/dist/types/voiceApplication.js +7 -0
  120. package/dist/types/voiceApplication.js.map +1 -0
  121. package/dist/types/whatsApp.d.ts +97 -0
  122. package/dist/types/whatsApp.d.ts.map +1 -0
  123. package/dist/types/whatsApp.js +2 -0
  124. package/dist/types/whatsApp.js.map +1 -0
  125. package/dist/types/workspaceSettings.d.ts +26 -0
  126. package/dist/types/workspaceSettings.d.ts.map +1 -0
  127. package/dist/types/workspaceSettings.js +2 -0
  128. package/dist/types/workspaceSettings.js.map +1 -0
  129. package/dist/utils/index.d.ts +4 -0
  130. package/dist/utils/index.d.ts.map +1 -0
  131. package/dist/utils/index.js +4 -0
  132. package/dist/utils/index.js.map +1 -0
  133. package/{src/utils/outreach.ts → dist/utils/outreach.d.ts} +7 -32
  134. package/dist/utils/outreach.d.ts.map +1 -0
  135. package/dist/utils/outreach.js +49 -0
  136. package/dist/utils/outreach.js.map +1 -0
  137. package/dist/utils/time.d.ts +25 -0
  138. package/dist/utils/time.d.ts.map +1 -0
  139. package/dist/utils/time.js +52 -0
  140. package/dist/utils/time.js.map +1 -0
  141. package/dist/utils/withErrorHandlingAndValidation.d.ts +18 -0
  142. package/dist/utils/withErrorHandlingAndValidation.d.ts.map +1 -0
  143. package/{src/utils/withErrorHandlingAndValidation.ts → dist/utils/withErrorHandlingAndValidation.js} +9 -15
  144. package/dist/utils/withErrorHandlingAndValidation.js.map +1 -0
  145. package/package.json +4 -1
  146. package/CHANGELOG.md +0 -115
  147. package/src/config.test.ts +0 -19
  148. package/src/errors/ValidationError.test.ts +0 -38
  149. package/src/errors/ValidationError.ts +0 -68
  150. package/src/schemas/agentTemplates.ts +0 -100
  151. package/src/schemas/apiKeys.test.ts +0 -38
  152. package/src/schemas/auth.ts +0 -76
  153. package/src/schemas/contactLog.ts +0 -96
  154. package/src/schemas/email.ts +0 -37
  155. package/src/schemas/portfolios.ts +0 -49
  156. package/src/schemas/users.ts +0 -7
  157. package/src/schemas/voiceEvent.ts +0 -45
  158. package/src/schemas/whatsApp.ts +0 -101
  159. package/src/schemas/workspaces.ts +0 -53
  160. package/src/types/agentTemplates.ts +0 -104
  161. package/src/types/campaigns.ts +0 -210
  162. package/src/types/dispatch.ts +0 -160
  163. package/src/types/email.ts +0 -66
  164. package/src/types/portfolios.ts +0 -128
  165. package/src/types/userSettings.ts +0 -21
  166. package/src/types/voiceApplication.ts +0 -29
  167. package/src/types/whatsApp.ts +0 -82
  168. package/src/types/workspaceSettings.ts +0 -22
  169. package/src/utils/index.ts +0 -14
  170. package/src/utils/outreach.test.ts +0 -83
  171. package/src/utils/time.ts +0 -66
  172. package/src/utils/withErrorHandlingAndValidation.test.ts +0 -33
  173. package/tsconfig.json +0 -9
@@ -0,0 +1,119 @@
1
+ import type { AgentType, CreateAgentTemplateInput, UpdateAgentTemplateInput, DeleteAgentTemplateInput } from "../schemas/agentTemplates.js";
2
+ export interface AgentTemplateRecord {
3
+ id: string;
4
+ workspaceRef: string;
5
+ name: string;
6
+ type: AgentType;
7
+ archivedAt: Date | null;
8
+ createdAt: Date;
9
+ updatedAt: Date;
10
+ }
11
+ export interface VoiceAiConfigRecord {
12
+ templateId: string;
13
+ fonosterAppName: string;
14
+ fonosterAppRef: string | null;
15
+ voice: string;
16
+ systemPrompt: string;
17
+ firstMessage: string | null;
18
+ language: string;
19
+ }
20
+ export interface VoicePrerecordedConfigRecord {
21
+ templateId: string;
22
+ fonosterAppName: string;
23
+ fonosterAppRef: string | null;
24
+ voice: string;
25
+ script: string;
26
+ language: string;
27
+ }
28
+ export interface SmsConfigRecord {
29
+ templateId: string;
30
+ messageBody: string;
31
+ senderId: string | null;
32
+ }
33
+ export interface EmailConfigRecord {
34
+ templateId: string;
35
+ subject: string;
36
+ messageBody: string;
37
+ fromName: string;
38
+ fromEmail: string;
39
+ }
40
+ export interface WhatsAppConfigRecord {
41
+ templateId: string;
42
+ templateName: string;
43
+ messageBody: string;
44
+ }
45
+ /** A child-config delegate exposing the create/read/update calls the functions use. */
46
+ interface ChildConfigDelegate<R> {
47
+ create(args: {
48
+ data: Record<string, unknown>;
49
+ }): Promise<R>;
50
+ update(args: {
51
+ where: {
52
+ templateId: string;
53
+ };
54
+ data: Record<string, unknown>;
55
+ }): Promise<R>;
56
+ findUnique(args: {
57
+ where: {
58
+ templateId: string;
59
+ };
60
+ }): Promise<R | null>;
61
+ }
62
+ export interface AgentTemplateClient {
63
+ agentTemplate: {
64
+ findMany(args: {
65
+ where: {
66
+ workspaceRef: string;
67
+ type?: AgentType;
68
+ archivedAt?: Date | null;
69
+ };
70
+ orderBy?: {
71
+ createdAt: "asc" | "desc";
72
+ };
73
+ }): Promise<AgentTemplateRecord[]>;
74
+ findFirst(args: {
75
+ where: {
76
+ id: string;
77
+ workspaceRef: string;
78
+ };
79
+ }): Promise<AgentTemplateRecord | null>;
80
+ findFirstOrThrow(args: {
81
+ where: {
82
+ id: string;
83
+ workspaceRef: string;
84
+ };
85
+ }): Promise<AgentTemplateRecord>;
86
+ create(args: {
87
+ data: Record<string, unknown>;
88
+ }): Promise<AgentTemplateRecord>;
89
+ update(args: {
90
+ where: {
91
+ id: string;
92
+ };
93
+ data: Record<string, unknown>;
94
+ }): Promise<AgentTemplateRecord>;
95
+ delete(args: {
96
+ where: {
97
+ id: string;
98
+ };
99
+ }): Promise<AgentTemplateRecord>;
100
+ };
101
+ voiceAiConfig: ChildConfigDelegate<VoiceAiConfigRecord>;
102
+ voicePrerecordedConfig: ChildConfigDelegate<VoicePrerecordedConfigRecord>;
103
+ smsConfig: ChildConfigDelegate<SmsConfigRecord>;
104
+ emailConfig: ChildConfigDelegate<EmailConfigRecord>;
105
+ whatsAppConfig: ChildConfigDelegate<WhatsAppConfigRecord>;
106
+ campaign: {
107
+ count(args: {
108
+ where: {
109
+ agentTemplateId: string;
110
+ status?: {
111
+ not: "ARCHIVED";
112
+ };
113
+ };
114
+ }): Promise<number>;
115
+ };
116
+ $transaction<T>(fn: (tx: AgentTemplateClient) => Promise<T>): Promise<T>;
117
+ }
118
+ export type { CreateAgentTemplateInput, UpdateAgentTemplateInput, DeleteAgentTemplateInput };
119
+ //# sourceMappingURL=agentTemplates.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agentTemplates.d.ts","sourceRoot":"","sources":["../../src/types/agentTemplates.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=agentTemplates.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agentTemplates.js","sourceRoot":"","sources":["../../src/types/agentTemplates.ts"],"names":[],"mappings":""}
@@ -0,0 +1,257 @@
1
+ import type { AgentType } from "../schemas/agentTemplates.js";
2
+ import type { CampaignStatus, CreateCampaignInput, UpdateCampaignInput, UpdateCampaignStatusInput, DeleteCampaignInput } from "../schemas/campaigns.js";
3
+ import type { ContactOutcome, PaymentPromiseStatus, CreateContactLogInput, UpdatePaymentPromiseInput, FollowUpPaymentPromiseInput } from "../schemas/contactLog.js";
4
+ export interface CampaignRecord {
5
+ id: string;
6
+ workspaceRef: string;
7
+ name: string;
8
+ agentTemplateId: string;
9
+ status: CampaignStatus;
10
+ startDate: Date;
11
+ endDate: Date | null;
12
+ daysOfWeek: number[];
13
+ startTime: string;
14
+ endTime: string;
15
+ maxAttemptsPerAccount: number;
16
+ maxAttemptsPerDay: number;
17
+ createdAt: Date;
18
+ updatedAt: Date;
19
+ }
20
+ export interface CampaignTriggerRecord {
21
+ id: string;
22
+ campaignId: string;
23
+ type: "MAX_ATTEMPTS_PER_DAY" | "DNC_CHECK" | "WRONG_NUMBER" | "OPT_OUT" | "PAYMENT_PROMISE" | "INTENT_MET" | "CALLBACK_REQUESTED";
24
+ config: Record<string, unknown>;
25
+ }
26
+ export interface CampaignAccountStateRecord {
27
+ campaignId: string;
28
+ portfolioAccountId: string;
29
+ attemptCount: number;
30
+ attemptsToday: number;
31
+ lastAttemptAt: Date | null;
32
+ suppressUntil: Date | null;
33
+ }
34
+ export interface AccountContactLogRecord {
35
+ id: string;
36
+ portfolioAccountId: string;
37
+ campaignId: string | null;
38
+ agentType: AgentType;
39
+ contactedAt: Date;
40
+ durationSeconds: number | null;
41
+ outcome: ContactOutcome;
42
+ notes: string | null;
43
+ debtAmountSnapshot: number | null;
44
+ aiSummary: string | null;
45
+ aiSentiment: string | null;
46
+ aiDebtReason: string | null;
47
+ aiResult: string | null;
48
+ aiNextStep: string | null;
49
+ intentMetadata: Record<string, unknown> | null;
50
+ channelData: Record<string, unknown> | null;
51
+ correctedEntryId: string | null;
52
+ agentTemplateId: string | null;
53
+ paymentPromiseId: string | null;
54
+ providerRef: string | null;
55
+ createdAt: Date;
56
+ }
57
+ export interface PaymentPromiseRecord {
58
+ id: string;
59
+ contactLogId: string;
60
+ portfolioAccountId: string;
61
+ amount: number | null;
62
+ dueDate: Date;
63
+ status: PaymentPromiseStatus;
64
+ notes: string | null;
65
+ createdAt: Date;
66
+ updatedAt: Date;
67
+ }
68
+ export interface CampaignClient {
69
+ agentTemplate: {
70
+ findFirst(args: {
71
+ where: {
72
+ id: string;
73
+ workspaceRef: string;
74
+ };
75
+ }): Promise<{
76
+ id: string;
77
+ workspaceRef: string;
78
+ type: AgentType;
79
+ } | null>;
80
+ };
81
+ whatsAppSenderNumber: {
82
+ findUnique(args: {
83
+ where: {
84
+ id: string;
85
+ };
86
+ }): Promise<{
87
+ id: string;
88
+ workspaceRef: string;
89
+ } | null>;
90
+ };
91
+ campaign: {
92
+ findMany(args: {
93
+ where: {
94
+ workspaceRef: string;
95
+ status?: CampaignStatus | {
96
+ notIn: CampaignStatus[];
97
+ };
98
+ };
99
+ orderBy?: {
100
+ createdAt: "asc" | "desc";
101
+ };
102
+ }): Promise<CampaignRecord[]>;
103
+ findFirst(args: {
104
+ where: {
105
+ id: string;
106
+ workspaceRef?: string;
107
+ };
108
+ }): Promise<CampaignRecord | null>;
109
+ findFirstOrThrow(args: {
110
+ where: {
111
+ id: string;
112
+ workspaceRef: string;
113
+ };
114
+ }): Promise<CampaignRecord>;
115
+ create(args: {
116
+ data: Record<string, unknown>;
117
+ }): Promise<CampaignRecord>;
118
+ update(args: {
119
+ where: {
120
+ id: string;
121
+ };
122
+ data: Record<string, unknown>;
123
+ }): Promise<CampaignRecord>;
124
+ delete(args: {
125
+ where: {
126
+ id: string;
127
+ };
128
+ }): Promise<CampaignRecord>;
129
+ };
130
+ campaignPortfolio: {
131
+ createMany(args: {
132
+ data: Array<{
133
+ campaignId: string;
134
+ portfolioId: string;
135
+ }>;
136
+ }): Promise<{
137
+ count: number;
138
+ }>;
139
+ };
140
+ campaignTrigger: {
141
+ findMany(args: {
142
+ where: {
143
+ campaignId: string;
144
+ };
145
+ }): Promise<CampaignTriggerRecord[]>;
146
+ };
147
+ campaignAccountState: {
148
+ findUnique(args: {
149
+ where: {
150
+ campaignId_portfolioAccountId: {
151
+ campaignId: string;
152
+ portfolioAccountId: string;
153
+ };
154
+ };
155
+ }): Promise<CampaignAccountStateRecord | null>;
156
+ upsert(args: {
157
+ where: {
158
+ campaignId_portfolioAccountId: {
159
+ campaignId: string;
160
+ portfolioAccountId: string;
161
+ };
162
+ };
163
+ create: Record<string, unknown>;
164
+ update: Record<string, unknown>;
165
+ }): Promise<CampaignAccountStateRecord>;
166
+ count(args: {
167
+ where: {
168
+ campaignId: string;
169
+ attemptCount?: {
170
+ gt: number;
171
+ };
172
+ };
173
+ }): Promise<number>;
174
+ };
175
+ accountContactLog: {
176
+ create(args: {
177
+ data: Record<string, unknown>;
178
+ }): Promise<AccountContactLogRecord>;
179
+ findFirst(args: {
180
+ where: Record<string, unknown>;
181
+ }): Promise<AccountContactLogRecord | null>;
182
+ update(args: {
183
+ where: {
184
+ id: string;
185
+ };
186
+ data: Record<string, unknown>;
187
+ }): Promise<AccountContactLogRecord>;
188
+ findMany(args: {
189
+ where: Record<string, unknown>;
190
+ orderBy?: {
191
+ createdAt: "asc" | "desc";
192
+ };
193
+ take?: number;
194
+ skip?: number;
195
+ }): Promise<AccountContactLogRecord[]>;
196
+ };
197
+ paymentPromise: {
198
+ create(args: {
199
+ data: Record<string, unknown>;
200
+ }): Promise<PaymentPromiseRecord>;
201
+ findFirst(args: {
202
+ where: Record<string, unknown>;
203
+ }): Promise<PaymentPromiseRecord | null>;
204
+ update(args: {
205
+ where: {
206
+ id: string;
207
+ };
208
+ data: Record<string, unknown>;
209
+ }): Promise<PaymentPromiseRecord>;
210
+ updateMany(args: {
211
+ where: Record<string, unknown>;
212
+ data: {
213
+ status: PaymentPromiseStatus;
214
+ };
215
+ }): Promise<{
216
+ count: number;
217
+ }>;
218
+ findMany(args: {
219
+ where: Record<string, unknown>;
220
+ orderBy?: {
221
+ dueDate: "asc" | "desc";
222
+ };
223
+ }): Promise<PaymentPromiseRecord[]>;
224
+ };
225
+ portfolioAccount: {
226
+ findFirst(args: {
227
+ where: {
228
+ id: string;
229
+ };
230
+ }): Promise<{
231
+ id: string;
232
+ portfolioId: string;
233
+ outstandingBalance: number;
234
+ } | null>;
235
+ update(args: {
236
+ where: {
237
+ id: string;
238
+ };
239
+ data: Record<string, unknown>;
240
+ }): Promise<{
241
+ id: string;
242
+ }>;
243
+ };
244
+ portfolio: {
245
+ update(args: {
246
+ where: {
247
+ id: string;
248
+ };
249
+ data: Record<string, unknown>;
250
+ }): Promise<{
251
+ id: string;
252
+ }>;
253
+ };
254
+ $transaction<T>(fn: (tx: CampaignClient) => Promise<T>): Promise<T>;
255
+ }
256
+ export type { CreateCampaignInput, UpdateCampaignInput, UpdateCampaignStatusInput, DeleteCampaignInput, CreateContactLogInput, UpdatePaymentPromiseInput, FollowUpPaymentPromiseInput };
257
+ //# sourceMappingURL=campaigns.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"campaigns.d.ts","sourceRoot":"","sources":["../../src/types/campaigns.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=campaigns.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"campaigns.js","sourceRoot":"","sources":["../../src/types/campaigns.ts"],"names":[],"mappings":""}
@@ -0,0 +1,168 @@
1
+ /**
2
+ * Ports and result types for the channel-dispatch trigger layer. Kept
3
+ * provider-agnostic so dispatch functions depend on these interfaces and tests
4
+ * inject emulators — no live Fonoster/Twilio in unit tests. The same primitives back
5
+ * both the manual outreach flow and the campaigns engine.
6
+ */
7
+ /** Channels the dispatch layer can trigger. */
8
+ export type DispatchChannel = "VOICE_AI" | "VOICE_PRERECORDED" | "SMS" | "EMAIL" | "WHATSAPP";
9
+ /** Inputs for originating an outbound voice call (Fonoster). */
10
+ export interface OutboundCallInput {
11
+ /** Caller-ID number (E.164). */
12
+ from: string;
13
+ /** Destination number (E.164). */
14
+ to: string;
15
+ /** The provider application ref to drive the call (AUTOPILOT app). */
16
+ appRef: string;
17
+ /**
18
+ * Rendered, per-customer conversation payload passed as call metadata so
19
+ * personalization does not require re-syncing the application.
20
+ */
21
+ metadata: Record<string, string>;
22
+ }
23
+ export interface OutboundCallClient {
24
+ /** Originate a call; resolves with the provider call ref. */
25
+ createCall(input: OutboundCallInput): Promise<{
26
+ ref: string;
27
+ }>;
28
+ }
29
+ export interface SmsClient {
30
+ /** Send an SMS; resolves with the provider message ref/sid. */
31
+ sendMessage(input: {
32
+ from: string;
33
+ to: string;
34
+ body: string;
35
+ }): Promise<{
36
+ sid: string;
37
+ }>;
38
+ }
39
+ /** Inputs for sending an email (Resend). */
40
+ export interface EmailSendInput {
41
+ from: string;
42
+ fromName?: string;
43
+ to: string;
44
+ subject: string;
45
+ body: string;
46
+ /** Per-attempt reply-to address carrying the correlation token. */
47
+ replyTo: string;
48
+ /** When this is a reply within a thread, the upstream Message-ID to thread under. */
49
+ inReplyTo?: string;
50
+ }
51
+ /**
52
+ * A received inbound email fetched from the provider. The inbound webhook is
53
+ * metadata-only (Resend's `email.received`), so the body must be retrieved
54
+ * separately by provider id before it can be ingested.
55
+ */
56
+ export interface ReceivedEmail {
57
+ id: string;
58
+ from: string;
59
+ to: string[];
60
+ subject?: string;
61
+ text?: string | null;
62
+ html?: string | null;
63
+ messageId?: string;
64
+ headers?: Record<string, string>;
65
+ }
66
+ export interface EmailClient {
67
+ /** Send an email; resolves with the provider message id. */
68
+ sendEmail(input: EmailSendInput): Promise<{
69
+ id: string;
70
+ }>;
71
+ /**
72
+ * Fetch a received inbound email's full content by provider id. Optional because
73
+ * not every provider/emulator supports inbound retrieval; the inbound handler
74
+ * uses it to hydrate the body the webhook omits.
75
+ */
76
+ getReceivedEmail?(id: string): Promise<ReceivedEmail | null>;
77
+ }
78
+ /** A single named WhatsApp template parameter (`{ parameter_name, text }` at the Meta boundary). */
79
+ export interface WhatsAppTemplateParam {
80
+ parameterName: string;
81
+ text: string;
82
+ }
83
+ /** Inputs for sending a Meta-approved WhatsApp template (the conversation opener). */
84
+ export interface WhatsAppSendTemplateInput {
85
+ /** Destination number (E.164, no `+` is added here — pass provider-ready). */
86
+ to: string;
87
+ /** Meta-approved template name. */
88
+ templateName: string;
89
+ /** Meta template-send language code (e.g. `es_DO`), sourced from the workspace. */
90
+ languageCode: string;
91
+ /** Named body parameters; matched to the template's `{{placeholders}}` by name. */
92
+ params: WhatsAppTemplateParam[];
93
+ }
94
+ /**
95
+ * A WhatsApp template resolved from Meta by id. Backs the agent-template modal's
96
+ * read-only preview and the stored `templateName`/`messageBody`.
97
+ */
98
+ export interface WhatsAppFetchedTemplate {
99
+ id: string;
100
+ name: string;
101
+ language: string;
102
+ /** Template body text with `{{placeholders}}`. */
103
+ body: string;
104
+ /** Meta approval status (e.g. `APPROVED`, `PENDING`, `REJECTED`). */
105
+ status: string;
106
+ }
107
+ /**
108
+ * WhatsApp messaging port (Meta Cloud API). Resolved per-call from the owning
109
+ * workspace's integration + selected sender, because credentials are tenant-owned and
110
+ * cannot be injected once at boot like the voice/SMS pools.
111
+ */
112
+ export interface WhatsAppClient {
113
+ /** Send an approved template (the opener); resolves with the provider message id. */
114
+ sendTemplate(input: WhatsAppSendTemplateInput): Promise<{
115
+ id: string;
116
+ }>;
117
+ /** Send a free-form reply, valid only inside Meta's 24h window; resolves with the message id. */
118
+ sendText(input: {
119
+ to: string;
120
+ body: string;
121
+ }): Promise<{
122
+ id: string;
123
+ }>;
124
+ /** Fetch a template by id (modal preview / config-time resolution). */
125
+ fetchTemplate(templateId: string): Promise<WhatsAppFetchedTemplate | null>;
126
+ }
127
+ /** Picks a sending number from a configured pool. Injectable for determinism. */
128
+ export type NumberSelector = (numbers: string[]) => string;
129
+ /** Structured result of a single dispatch — what was sent, where, and the provider ref. */
130
+ export interface DispatchResult {
131
+ channel: DispatchChannel;
132
+ /** Provider call ref (voice), message sid (sms), or reply-to token (email). */
133
+ providerRef: string;
134
+ /** The sending number used. */
135
+ from: string;
136
+ /** The destination number. */
137
+ to: string;
138
+ /** The rendered body actually delivered (SMS body / voice first line or script). */
139
+ renderedBody: string;
140
+ /** The rendered subject line — present for EMAIL only. */
141
+ renderedSubject?: string;
142
+ }
143
+ /** Dependencies injected into the dispatch functions. */
144
+ export interface DispatchDeps {
145
+ outboundCallClient: OutboundCallClient | null;
146
+ smsClient: SmsClient | null;
147
+ /** Email provider client; null/omitted when email is unconfigured. */
148
+ emailClient?: EmailClient | null;
149
+ /**
150
+ * WhatsApp client for this dispatch. Resolved per-call from the owning workspace's
151
+ * integration + selected sender (decrypt token, build/cache client) and passed in;
152
+ * null/omitted when the dispatch is not WhatsApp or the workspace has no integration.
153
+ */
154
+ whatsAppClient?: WhatsAppClient | null;
155
+ /** E.164 caller-ID pool for voice. */
156
+ fonosterNumbers: string[];
157
+ /** E.164 sender pool for SMS. */
158
+ twilioFromNumbers: string[];
159
+ /** Sending identity for email (from `resend` config); null/omitted when unconfigured. */
160
+ emailFrom?: {
161
+ email: string;
162
+ name?: string;
163
+ inboundDomain: string;
164
+ } | null;
165
+ /** Number selector; defaults to a random pick when omitted by the caller. */
166
+ pickNumber?: NumberSelector;
167
+ }
168
+ //# sourceMappingURL=dispatch.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dispatch.d.ts","sourceRoot":"","sources":["../../src/types/dispatch.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Ports and result types for the channel-dispatch trigger layer. Kept
3
+ * provider-agnostic so dispatch functions depend on these interfaces and tests
4
+ * inject emulators — no live Fonoster/Twilio in unit tests. The same primitives back
5
+ * both the manual outreach flow and the campaigns engine.
6
+ */
7
+ export {};
8
+ //# sourceMappingURL=dispatch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dispatch.js","sourceRoot":"","sources":["../../src/types/dispatch.ts"],"names":[],"mappings":"AAAA;;;;;GAKG"}
@@ -0,0 +1,65 @@
1
+ /**
2
+ * Types for the bidirectional EMAIL channel: the per-gestión email thread (stored in the
3
+ * gestión `channelData`, the email analog of the voice transcript) and the autopilot
4
+ * decision contract used by `ingestEmailReply`.
5
+ */
6
+ /** One message in an email thread. */
7
+ export interface EmailThreadMessage {
8
+ direction: "outbound" | "inbound";
9
+ /** "agent" (autopilot/notice) or the customer's address. */
10
+ from: string;
11
+ at: string;
12
+ subject?: string;
13
+ body: string;
14
+ /** Provider Message-ID, for header-based threading fallback. */
15
+ messageId?: string;
16
+ }
17
+ /** The email thread + reply accounting carried on an EMAIL gestión's channelData. */
18
+ export interface EmailThread {
19
+ /** Correlation token, mirrored from the gestión providerRef. */
20
+ token: string;
21
+ messages: EmailThreadMessage[];
22
+ /** Count of autopilot replies sent on this thread (governs the reply cap). */
23
+ agentReplyCount: number;
24
+ }
25
+ /** Actions the EMAIL autopilot may take on an inbound reply. */
26
+ export type EmailAutopilotAction = "reply" | "ignore" | "resolve" | "escalate";
27
+ /** Structured result of the autopilot decision step over a thread. */
28
+ export interface EmailAutopilotDecision {
29
+ action: EmailAutopilotAction;
30
+ /** Present when `action === "reply"`. */
31
+ replyBody?: string;
32
+ /** Outcome to record on the gestión, when the reply implies one. */
33
+ outcome?: string;
34
+ /** Promise/objective details to capture, when applicable. */
35
+ objective?: {
36
+ type: string;
37
+ amount?: number;
38
+ dueDate?: string;
39
+ note?: string;
40
+ } | null;
41
+ }
42
+ /** What the autopilot is given to decide on. */
43
+ export interface EmailAutopilotRequest {
44
+ systemPrompt: string;
45
+ thread: EmailThreadMessage[];
46
+ context?: Record<string, unknown>;
47
+ language?: string;
48
+ }
49
+ /** The autopilot decision engine (LLM-backed in prod, deterministic mock offline). */
50
+ export interface EmailAutopilot {
51
+ decide(req: EmailAutopilotRequest): Promise<EmailAutopilotDecision>;
52
+ }
53
+ /** Normalized inbound email as received from the provider webhook. */
54
+ export interface InboundEmail {
55
+ from: string;
56
+ to: string[];
57
+ subject?: string;
58
+ text: string;
59
+ messageId?: string;
60
+ inReplyTo?: string;
61
+ references?: string[];
62
+ /** Raw header lookups used for auto-reply detection (`Auto-Submitted`, `Precedence`). */
63
+ headers?: Record<string, string>;
64
+ }
65
+ //# sourceMappingURL=email.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"email.d.ts","sourceRoot":"","sources":["../../src/types/email.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,sCAAsC;AACtC,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,UAAU,GAAG,SAAS,CAAC;IAClC,4DAA4D;IAC5D,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,gEAAgE;IAChE,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,qFAAqF;AACrF,MAAM,WAAW,WAAW;IAC1B,gEAAgE;IAChE,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,kBAAkB,EAAE,CAAC;IAC/B,8EAA8E;IAC9E,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,gEAAgE;AAChE,MAAM,MAAM,oBAAoB,GAAG,OAAO,GAAG,QAAQ,GAAG,SAAS,GAAG,UAAU,CAAC;AAE/E,sEAAsE;AACtE,MAAM,WAAW,sBAAsB;IACrC,MAAM,EAAE,oBAAoB,CAAC;IAC7B,yCAAyC;IACzC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,oEAAoE;IACpE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,6DAA6D;IAC7D,SAAS,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;CACvF;AAED,gDAAgD;AAChD,MAAM,WAAW,qBAAqB;IACpC,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,kBAAkB,EAAE,CAAC;IAC7B,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,sFAAsF;AACtF,MAAM,WAAW,cAAc;IAC7B,MAAM,CAAC,GAAG,EAAE,qBAAqB,GAAG,OAAO,CAAC,sBAAsB,CAAC,CAAC;CACrE;AAED,sEAAsE;AACtE,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,EAAE,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,yFAAyF;IACzF,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAClC"}