@vicacha-devs/strapi-plugin-broadcasts 0.0.0-stage → 0.1.0

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 (87) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +15 -2
  3. package/dist/admin/BroadcastsHomePage-CM_N_spo.mjs +1210 -0
  4. package/dist/admin/BroadcastsHomePage-DQueM7nj.js +1228 -0
  5. package/dist/admin/SettingsPage-TawvAAiv.js +1187 -0
  6. package/dist/admin/SettingsPage-ikcb0cfh.mjs +1169 -0
  7. package/dist/admin/ar-vwekVqfp.js +232 -0
  8. package/dist/admin/ar-wZTCd3Za.mjs +232 -0
  9. package/dist/admin/de-IZicxuvv.mjs +232 -0
  10. package/dist/admin/de-Qa2SQQfY.js +232 -0
  11. package/dist/admin/en-B-HnZo8U.mjs +232 -0
  12. package/dist/admin/en-D1byrK0s.js +232 -0
  13. package/dist/admin/es-Co7PmAj8.mjs +232 -0
  14. package/dist/admin/es-Dgylqagv.js +232 -0
  15. package/dist/admin/fr-B9zZn3z1.mjs +232 -0
  16. package/dist/admin/fr-C7-MIWnw.js +232 -0
  17. package/dist/admin/index-CApLw9Uu.mjs +1036 -0
  18. package/dist/admin/index-Dw6J7U1v.js +1053 -0
  19. package/dist/admin/index.js +6 -0
  20. package/dist/admin/index.mjs +6 -0
  21. package/dist/admin/it-DJU9iBqT.mjs +232 -0
  22. package/dist/admin/it-D_mulZtx.js +232 -0
  23. package/dist/admin/pt-B9swwjPu.js +232 -0
  24. package/dist/admin/pt-Dr8u5we0.mjs +232 -0
  25. package/dist/admin/ru-B0NNiMNA.js +232 -0
  26. package/dist/admin/ru-Bd4cEKDV.mjs +232 -0
  27. package/dist/admin/selectOptions-BlvNrhvc.mjs +150 -0
  28. package/dist/admin/selectOptions-DuHQ0KK3.js +149 -0
  29. package/dist/admin/src/components/AutomationAndLogsTabs.d.ts +16 -0
  30. package/dist/admin/src/components/BridgesSandboxTab.d.ts +8 -0
  31. package/dist/admin/src/components/CampaignComposerForm.d.ts +26 -0
  32. package/dist/admin/src/components/CampaignsTableSection.d.ts +27 -0
  33. package/dist/admin/src/components/DeliveryLedgerSection.d.ts +17 -0
  34. package/dist/admin/src/components/Initializer.d.ts +6 -0
  35. package/dist/admin/src/components/OrganizationEmailTab.d.ts +10 -0
  36. package/dist/admin/src/components/PluginIcon.d.ts +3 -0
  37. package/dist/admin/src/components/WhatsAppTransportTab.d.ts +11 -0
  38. package/dist/admin/src/index.d.ts +24 -0
  39. package/dist/admin/src/pages/BroadcastsHomePage.d.ts +2 -0
  40. package/dist/admin/src/pages/SettingsPage.d.ts +3 -0
  41. package/dist/admin/src/permissions.d.ts +30 -0
  42. package/dist/admin/src/pluginId.d.ts +2 -0
  43. package/dist/admin/src/translations/cmLabels.d.ts +1 -0
  44. package/dist/admin/src/translations/cmLabelsExtra.d.ts +1 -0
  45. package/dist/admin/src/translations/cmPlaceholders.d.ts +1 -0
  46. package/dist/admin/src/translations/cmPlaceholdersExtra.d.ts +1 -0
  47. package/dist/admin/src/utils/extractApiError.d.ts +1 -0
  48. package/dist/admin/src/utils/selectOptions.d.ts +21 -0
  49. package/dist/admin/tr-Cc-ItZUP.js +232 -0
  50. package/dist/admin/tr-DlyHa2Vk.mjs +232 -0
  51. package/dist/admin/zh-CLzJ7x3y.mjs +232 -0
  52. package/dist/admin/zh-CaqwZk-p.js +232 -0
  53. package/dist/server/index.js +3399 -0
  54. package/dist/server/index.mjs +3399 -0
  55. package/dist/server/src/bootstrap.d.ts +5 -0
  56. package/dist/server/src/config/index.d.ts +5 -0
  57. package/dist/server/src/content-types/automation-rule/index.d.ts +90 -0
  58. package/dist/server/src/content-types/automation-rule/schema.json.d.ts +90 -0
  59. package/dist/server/src/content-types/campaign/index.d.ts +118 -0
  60. package/dist/server/src/content-types/campaign/schema.json.d.ts +118 -0
  61. package/dist/server/src/content-types/delivery-log/index.d.ts +71 -0
  62. package/dist/server/src/content-types/delivery-log/schema.json.d.ts +71 -0
  63. package/dist/server/src/content-types/index.d.ts +279 -0
  64. package/dist/server/src/controllers/broadcastController.d.ts +32 -0
  65. package/dist/server/src/controllers/index.d.ts +22 -0
  66. package/dist/server/src/destroy.d.ts +5 -0
  67. package/dist/server/src/eventHubRegistry.d.ts +5 -0
  68. package/dist/server/src/index.d.ts +463 -0
  69. package/dist/server/src/register.d.ts +5 -0
  70. package/dist/server/src/routes/admin.d.ts +17 -0
  71. package/dist/server/src/routes/content-api.d.ts +13 -0
  72. package/dist/server/src/routes/index.d.ts +31 -0
  73. package/dist/server/src/services/automationService.d.ts +33 -0
  74. package/dist/server/src/services/campaignChannelDispatch.d.ts +20 -0
  75. package/dist/server/src/services/campaignHelpers.d.ts +20 -0
  76. package/dist/server/src/services/campaignLifecycle.d.ts +23 -0
  77. package/dist/server/src/services/campaignService.d.ts +54 -0
  78. package/dist/server/src/services/deliveryLedger.d.ts +18 -0
  79. package/dist/server/src/services/emailDesignerBridge.d.ts +30 -0
  80. package/dist/server/src/services/idempotency.d.ts +5 -0
  81. package/dist/server/src/services/index.d.ts +119 -0
  82. package/dist/server/src/services/settings.d.ts +12 -0
  83. package/dist/server/src/services/transportService.d.ts +70 -0
  84. package/dist/shared/index.d.ts +1 -0
  85. package/dist/shared/index.js +825 -0
  86. package/dist/shared/index.mjs +823 -0
  87. package/package.json +109 -3
@@ -0,0 +1,54 @@
1
+ import { Core } from '@strapi/strapi';
2
+ import { BroadcastSettings, CampaignRecord, CampaignStats, ChannelDispatchResult, SubscriberRecipient } from '../../../shared';
3
+ import { TransportServiceContract } from './campaignChannelDispatch';
4
+ import { RawDispatchOptions } from './campaignLifecycle';
5
+ declare const createCampaignService: ({ strapi }: {
6
+ strapi: Core.Strapi;
7
+ }) => {
8
+ getSettingsService(): {
9
+ getSettings(): Promise<BroadcastSettings>;
10
+ };
11
+ getTransportService(): TransportServiceContract;
12
+ listCampaigns(params?: {
13
+ status?: string;
14
+ topic?: string;
15
+ }): Promise<CampaignRecord[]>;
16
+ listPublicArchive(params?: {
17
+ topic?: string;
18
+ limit?: number;
19
+ }): Promise<{
20
+ slug: string;
21
+ title: string;
22
+ topic: string;
23
+ subject: string;
24
+ bodyText: string;
25
+ ctaLabel: string | undefined;
26
+ ctaUrl: string | undefined;
27
+ sentAt: string | undefined;
28
+ secondaryDateLabel: string | undefined;
29
+ translations: Record<string, import('../../../shared').CampaignTranslation> | undefined;
30
+ }[]>;
31
+ getCampaignBySlug(slug: string): Promise<CampaignRecord | null>;
32
+ findCampaignByDocIdOrSlug(documentIdOrSlug: string): Promise<CampaignRecord | null>;
33
+ createCampaign(input: Partial<CampaignRecord>): Promise<CampaignRecord>;
34
+ updateCampaign(documentIdOrSlug: string, input: Partial<CampaignRecord>): Promise<CampaignRecord>;
35
+ createFromStarterTemplate(templateId: string): Promise<CampaignRecord>;
36
+ seedStarterCampaigns(): Promise<number>;
37
+ resolveRecipientsForTopic(topic: string): Promise<SubscriberRecipient[]>;
38
+ selectCampaignRecipients(campaign: CampaignRecord, settings: BroadcastSettings, options: RawDispatchOptions): Promise<{
39
+ isTestDispatch: boolean;
40
+ testTelegramChatId?: string;
41
+ recipients: SubscriberRecipient[];
42
+ }>;
43
+ finalizeDispatchedCampaign(campaign: CampaignRecord, secondaryDate: CampaignRecord["secondaryDate"], secondaryDateLabel: string, stats: CampaignStats): Promise<CampaignRecord>;
44
+ dispatchCampaign(documentIdOrSlug: string, options?: {
45
+ customRecipients?: SubscriberRecipient[];
46
+ testRecipientEmail?: string;
47
+ testRecipientPhone?: string;
48
+ testTelegramChatId?: string;
49
+ }): Promise<{
50
+ campaign: CampaignRecord;
51
+ results: ChannelDispatchResult[];
52
+ }>;
53
+ };
54
+ export default createCampaignService;
@@ -0,0 +1,18 @@
1
+ import { Core } from '@strapi/strapi';
2
+ import { BroadcastChannel, BroadcastSettings, ChannelDispatchResult, DeliveryLogRecord } from '../../../shared';
3
+ import { EmailSendPayload } from './transportService';
4
+ export declare function buildSafeListUnsubscribeHeader(rawUnsubscribeUrl?: string): Record<string, string>;
5
+ export declare function hasAlreadyDeliveredInDb(strapi: Core.Strapi, idempotencyKey: string): Promise<boolean>;
6
+ export declare function upsertDeliveryLogInDb(strapi: Core.Strapi, entry: Omit<DeliveryLogRecord, "documentId" | "sentAt">, secrets?: Array<string | undefined>): Promise<DeliveryLogRecord>;
7
+ export declare function listDeliveryLogsFromDb(strapi: Core.Strapi, params?: {
8
+ campaignSlug?: string;
9
+ channel?: BroadcastChannel;
10
+ limit?: number;
11
+ }): Promise<DeliveryLogRecord[]>;
12
+ export declare function extractSecretList(settings?: BroadcastSettings): Array<string | undefined>;
13
+ export declare function sanitizeDispatchResult(result: ChannelDispatchResult, secrets: Array<string | undefined>): ChannelDispatchResult;
14
+ export declare function sendLiveEmailViaProviders(strapi: Core.Strapi, payload: EmailSendPayload, settings: BroadcastSettings, effectiveTemplateRef: string): Promise<{
15
+ driver: string;
16
+ status: "sent" | "simulated";
17
+ externalMessageId: string;
18
+ }>;
@@ -0,0 +1,30 @@
1
+ import { Core } from '@strapi/strapi';
2
+ import { EmailDesignerTemplateSummary } from '../../../shared';
3
+ export declare const EMAIL_DESIGNER_TEMPLATE_UID = "plugin::email-designer-5.email-designer-template";
4
+ export interface EmailDesignerTemplateRow {
5
+ id?: number;
6
+ documentId?: string;
7
+ templateReferenceId?: number;
8
+ name?: string;
9
+ subject?: string;
10
+ bodyHtml?: string;
11
+ bodyText?: string;
12
+ tags?: string[];
13
+ updatedAt?: string;
14
+ }
15
+ export declare function fetchRawEmailDesignerTemplates(strapi: Core.Strapi): Promise<EmailDesignerTemplateRow[]>;
16
+ export declare function listEmailDesignerTemplatesFromDb(strapi: Core.Strapi): Promise<EmailDesignerTemplateSummary[]>;
17
+ export declare function resolveEmailDesignerTemplateFromDb(strapi: Core.Strapi, templateRef: string, locale?: string): Promise<EmailDesignerTemplateRow | null>;
18
+ export declare function trySendEmailViaDesigner5(params: {
19
+ strapi: Core.Strapi;
20
+ effectiveTemplateRef: string;
21
+ locale: string;
22
+ recipientEmail: string;
23
+ fromAddress: string;
24
+ replyToAddress: string;
25
+ subject: string;
26
+ text: string;
27
+ headers: Record<string, string>;
28
+ templateVars: Record<string, string | number | undefined>;
29
+ interpolate: (tpl: string, vars: Record<string, string | number | undefined>) => string;
30
+ }): Promise<string | null>;
@@ -0,0 +1,5 @@
1
+ export declare function computeIdempotencyKey(campaignSlug: string, channel: string, recipient: string, options?: {
2
+ isTest?: boolean;
3
+ }): string;
4
+ export declare function generateUniqueSlugSuffix(): string;
5
+ export declare function redactSecretsFromMessage(rawMessage: string, secrets?: Array<string | undefined>): string;
@@ -0,0 +1,119 @@
1
+ declare const _default: {
2
+ settings: ({ strapi }: {
3
+ strapi: import("@strapi/strapi").Core.Strapi;
4
+ }) => {
5
+ getPluginStore(): import("@strapi/strapi").Core.PluginStore;
6
+ getConfigDefaults(): import('../../../shared').BroadcastSettings;
7
+ getSettings(): Promise<import('../../../shared').BroadcastSettings>;
8
+ getPublicSafeSettings(): Promise<import('../../../shared').BroadcastSettings>;
9
+ updateSettings(rawPartial: Partial<import('../../../shared').BroadcastSettings>): Promise<import('../../../shared').BroadcastSettings>;
10
+ };
11
+ transportService: ({ strapi }: {
12
+ strapi: import("@strapi/strapi").Core.Strapi;
13
+ }) => {
14
+ getSettingsService(): {
15
+ getSettings(): Promise<import('../../../shared').BroadcastSettings>;
16
+ };
17
+ fetchRawEmailDesignerTemplates(): Promise<import('./emailDesignerBridge').EmailDesignerTemplateRow[]>;
18
+ listEmailDesignerTemplates(): Promise<import('../../../shared').EmailDesignerTemplateSummary[]>;
19
+ resolveEmailDesignerTemplate(templateRef: string, locale?: string): Promise<import('./emailDesignerBridge').EmailDesignerTemplateRow | null>;
20
+ hasAlreadyDelivered(idempotencyKey: string): Promise<boolean>;
21
+ recordDeliveryLog(entry: Omit<import('../../../shared').DeliveryLogRecord, "documentId" | "sentAt">, secrets?: Array<string | undefined>): Promise<import('../../../shared').DeliveryLogRecord>;
22
+ listDeliveryLogs(params?: {
23
+ campaignSlug?: string;
24
+ channel?: import('../../../shared').BroadcastChannel;
25
+ limit?: number;
26
+ }): Promise<import('../../../shared').DeliveryLogRecord[]>;
27
+ persistResult(campaignSlug: string, secondaryDateLabel: string | undefined, result: import('../../../shared').ChannelDispatchResult, settings?: import('../../../shared').BroadcastSettings): Promise<import('../../../shared').ChannelDispatchResult>;
28
+ logOutcome(p: {
29
+ campaignSlug: string;
30
+ locale: string;
31
+ secondaryDateLabel?: string;
32
+ }, channel: import('../../../shared').BroadcastChannel, driver: string, recipientMasked: string, status: import('../../../shared').ChannelDispatchResult["status"], idempotencyKey: string, extra?: Partial<import('../../../shared').ChannelDispatchResult>, settings?: import('../../../shared').BroadcastSettings): Promise<import('../../../shared').ChannelDispatchResult>;
33
+ simulateDryRunEmail(payload: import('./transportService').EmailSendPayload, effectiveTemplateRef: string, recipientMasked: string, idempotencyKey: string, settings: import('../../../shared').BroadcastSettings): Promise<import('../../../shared').ChannelDispatchResult>;
34
+ executeLiveEmailSend(payload: import('./transportService').EmailSendPayload, settings: import('../../../shared').BroadcastSettings, effectiveTemplateRef: string, recipientMasked: string, idempotencyKey: string): Promise<import('../../../shared').ChannelDispatchResult>;
35
+ sendEmailBroadcast(payload: import('./transportService').EmailSendPayload): Promise<import('../../../shared').ChannelDispatchResult>;
36
+ sendTelegramBroadcast(payload: import('./transportService').TelegramSendPayload): Promise<import('../../../shared').ChannelDispatchResult>;
37
+ sendWhatsAppBroadcast(payload: import('./transportService').WhatsAppSendPayload): Promise<import('../../../shared').ChannelDispatchResult>;
38
+ };
39
+ campaignService: ({ strapi }: {
40
+ strapi: import("@strapi/strapi").Core.Strapi;
41
+ }) => {
42
+ getSettingsService(): {
43
+ getSettings(): Promise<import('../../../shared').BroadcastSettings>;
44
+ };
45
+ getTransportService(): import('./campaignChannelDispatch').TransportServiceContract;
46
+ listCampaigns(params?: {
47
+ status?: string;
48
+ topic?: string;
49
+ }): Promise<import('../../../shared').CampaignRecord[]>;
50
+ listPublicArchive(params?: {
51
+ topic?: string;
52
+ limit?: number;
53
+ }): Promise<{
54
+ slug: string;
55
+ title: string;
56
+ topic: string;
57
+ subject: string;
58
+ bodyText: string;
59
+ ctaLabel: string | undefined;
60
+ ctaUrl: string | undefined;
61
+ sentAt: string | undefined;
62
+ secondaryDateLabel: string | undefined;
63
+ translations: Record<string, import('../../../shared').CampaignTranslation> | undefined;
64
+ }[]>;
65
+ getCampaignBySlug(slug: string): Promise<import('../../../shared').CampaignRecord | null>;
66
+ findCampaignByDocIdOrSlug(documentIdOrSlug: string): Promise<import('../../../shared').CampaignRecord | null>;
67
+ createCampaign(input: Partial<import('../../../shared').CampaignRecord>): Promise<import('../../../shared').CampaignRecord>;
68
+ updateCampaign(documentIdOrSlug: string, input: Partial<import('../../../shared').CampaignRecord>): Promise<import('../../../shared').CampaignRecord>;
69
+ createFromStarterTemplate(templateId: string): Promise<import('../../../shared').CampaignRecord>;
70
+ seedStarterCampaigns(): Promise<number>;
71
+ resolveRecipientsForTopic(topic: string): Promise<import('../../../shared').SubscriberRecipient[]>;
72
+ selectCampaignRecipients(campaign: import('../../../shared').CampaignRecord, settings: import('../../../shared').BroadcastSettings, options: import('./campaignLifecycle').RawDispatchOptions): Promise<{
73
+ isTestDispatch: boolean;
74
+ testTelegramChatId?: string;
75
+ recipients: import('../../../shared').SubscriberRecipient[];
76
+ }>;
77
+ finalizeDispatchedCampaign(campaign: import('../../../shared').CampaignRecord, secondaryDate: import('../../../shared').CampaignRecord["secondaryDate"], secondaryDateLabel: string, stats: import('../../../shared').CampaignStats): Promise<import('../../../shared').CampaignRecord>;
78
+ dispatchCampaign(documentIdOrSlug: string, options?: {
79
+ customRecipients?: import('../../../shared').SubscriberRecipient[];
80
+ testRecipientEmail?: string;
81
+ testRecipientPhone?: string;
82
+ testTelegramChatId?: string;
83
+ }): Promise<{
84
+ campaign: import('../../../shared').CampaignRecord;
85
+ results: import('../../../shared').ChannelDispatchResult[];
86
+ }>;
87
+ };
88
+ automationService: ({ strapi }: {
89
+ strapi: import("@strapi/strapi").Core.Strapi;
90
+ }) => {
91
+ getSettingsService(): {
92
+ getSettings(): Promise<import('../../../shared').BroadcastSettings>;
93
+ };
94
+ getCampaignService(): {
95
+ createCampaign(input: Partial<import('../../../shared').CampaignRecord>): Promise<import('../../../shared').CampaignRecord>;
96
+ dispatchCampaign(documentIdOrSlug: string): Promise<{
97
+ campaign: import('../../../shared').CampaignRecord;
98
+ results: import('../../../shared').ChannelDispatchResult[];
99
+ }>;
100
+ };
101
+ listRules(): Promise<import('../../../shared').AutomationRuleRecord[]>;
102
+ getRuleBySlug(slug: string): Promise<import('../../../shared').AutomationRuleRecord | null>;
103
+ findRuleByDocIdOrSlug(documentIdOrSlug: string): Promise<import('../../../shared').AutomationRuleRecord | null>;
104
+ createRule(input: Partial<import('../../../shared').AutomationRuleRecord>): Promise<import('../../../shared').AutomationRuleRecord>;
105
+ updateRule(documentIdOrSlug: string, input: Partial<import('../../../shared').AutomationRuleRecord>): Promise<import('../../../shared').AutomationRuleRecord>;
106
+ seedStarterRules(): Promise<number>;
107
+ executeSingleTriggerRule(rule: import('../../../shared').AutomationRuleRecord, vars: Record<string, string | number | undefined>): Promise<{
108
+ ruleSlug: string;
109
+ campaignSlug: string;
110
+ results: import('../../../shared').ChannelDispatchResult[];
111
+ }>;
112
+ handleEventTrigger(eventName: string, payload?: Record<string, unknown>): Promise<Array<{
113
+ ruleSlug: string;
114
+ campaignSlug: string;
115
+ results: import('../../../shared').ChannelDispatchResult[];
116
+ }>>;
117
+ };
118
+ };
119
+ export default _default;
@@ -0,0 +1,12 @@
1
+ import { Core } from '@strapi/strapi';
2
+ import { BroadcastSettings } from '../../../shared';
3
+ declare const createSettingsService: ({ strapi }: {
4
+ strapi: Core.Strapi;
5
+ }) => {
6
+ getPluginStore(): Core.PluginStore;
7
+ getConfigDefaults(): BroadcastSettings;
8
+ getSettings(): Promise<BroadcastSettings>;
9
+ getPublicSafeSettings(): Promise<BroadcastSettings>;
10
+ updateSettings(rawPartial: Partial<BroadcastSettings>): Promise<BroadcastSettings>;
11
+ };
12
+ export default createSettingsService;
@@ -0,0 +1,70 @@
1
+ import { Core } from '@strapi/strapi';
2
+ import { BroadcastChannel, BroadcastSettings, ChannelDispatchResult, DeliveryLogRecord, EmailDesignerTemplateSummary } from '../../../shared';
3
+ import { EMAIL_DESIGNER_TEMPLATE_UID, EmailDesignerTemplateRow } from './emailDesignerBridge';
4
+ export { EMAIL_DESIGNER_TEMPLATE_UID, type EmailDesignerTemplateRow };
5
+ export interface EmailSendPayload {
6
+ campaignSlug: string;
7
+ recipientEmail: string;
8
+ locale: string;
9
+ subject: string;
10
+ text: string;
11
+ html?: string;
12
+ ctaLabel?: string;
13
+ ctaUrl?: string;
14
+ unsubscribeUrl?: string;
15
+ emailTemplateRef?: string;
16
+ secondaryDateLabel?: string;
17
+ templateData?: Record<string, string | number | undefined>;
18
+ isTestDispatch?: boolean;
19
+ }
20
+ export interface TelegramSendPayload {
21
+ campaignSlug: string;
22
+ chatId: string;
23
+ threadId?: number;
24
+ locale: string;
25
+ subject: string;
26
+ htmlBody: string;
27
+ ctaLabel?: string;
28
+ ctaUrl?: string;
29
+ secondaryDateLabel?: string;
30
+ isTestDispatch?: boolean;
31
+ }
32
+ export interface WhatsAppSendPayload {
33
+ campaignSlug: string;
34
+ recipientPhone: string;
35
+ locale: string;
36
+ textBody: string;
37
+ templateName?: string;
38
+ ctaUrl?: string;
39
+ secondaryDateLabel?: string;
40
+ isTestDispatch?: boolean;
41
+ }
42
+ declare const createTransportService: ({ strapi }: {
43
+ strapi: Core.Strapi;
44
+ }) => {
45
+ getSettingsService(): {
46
+ getSettings(): Promise<BroadcastSettings>;
47
+ };
48
+ fetchRawEmailDesignerTemplates(): Promise<EmailDesignerTemplateRow[]>;
49
+ listEmailDesignerTemplates(): Promise<EmailDesignerTemplateSummary[]>;
50
+ resolveEmailDesignerTemplate(templateRef: string, locale?: string): Promise<EmailDesignerTemplateRow | null>;
51
+ hasAlreadyDelivered(idempotencyKey: string): Promise<boolean>;
52
+ recordDeliveryLog(entry: Omit<DeliveryLogRecord, "documentId" | "sentAt">, secrets?: Array<string | undefined>): Promise<DeliveryLogRecord>;
53
+ listDeliveryLogs(params?: {
54
+ campaignSlug?: string;
55
+ channel?: BroadcastChannel;
56
+ limit?: number;
57
+ }): Promise<DeliveryLogRecord[]>;
58
+ persistResult(campaignSlug: string, secondaryDateLabel: string | undefined, result: ChannelDispatchResult, settings?: BroadcastSettings): Promise<ChannelDispatchResult>;
59
+ logOutcome(p: {
60
+ campaignSlug: string;
61
+ locale: string;
62
+ secondaryDateLabel?: string;
63
+ }, channel: BroadcastChannel, driver: string, recipientMasked: string, status: ChannelDispatchResult["status"], idempotencyKey: string, extra?: Partial<ChannelDispatchResult>, settings?: BroadcastSettings): Promise<ChannelDispatchResult>;
64
+ simulateDryRunEmail(payload: EmailSendPayload, effectiveTemplateRef: string, recipientMasked: string, idempotencyKey: string, settings: BroadcastSettings): Promise<ChannelDispatchResult>;
65
+ executeLiveEmailSend(payload: EmailSendPayload, settings: BroadcastSettings, effectiveTemplateRef: string, recipientMasked: string, idempotencyKey: string): Promise<ChannelDispatchResult>;
66
+ sendEmailBroadcast(payload: EmailSendPayload): Promise<ChannelDispatchResult>;
67
+ sendTelegramBroadcast(payload: TelegramSendPayload): Promise<ChannelDispatchResult>;
68
+ sendWhatsAppBroadcast(payload: WhatsAppSendPayload): Promise<ChannelDispatchResult>;
69
+ };
70
+ export default createTransportService;
@@ -0,0 +1 @@
1
+ export * from '../../shared/index.js';