@wildo-ai/external-connectors-models 1.1.11 → 1.1.12
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.
- package/dist/esm/companion-exports.d.ts.map +1 -1
- package/dist/esm/companion-exports.js.map +1 -1
- package/dist/esm/core/commons.external-connectors-models.schemas.d.ts +10 -0
- package/dist/esm/core/commons.external-connectors-models.schemas.d.ts.map +1 -1
- package/dist/esm/core/commons.external-connectors-models.schemas.js +10 -0
- package/dist/esm/core/commons.external-connectors-models.schemas.js.map +1 -1
- package/dist/esm/core/oauth2.enums.d.ts.map +1 -1
- package/dist/esm/core/oauth2.enums.js.map +1 -1
- package/dist/esm/core/operation-classification.external-connectors-models.schemas.d.ts.map +1 -1
- package/dist/esm/core/operation-classification.external-connectors-models.schemas.js.map +1 -1
- package/dist/esm/core/operations.external-connectors-models.schemas.d.ts.map +1 -1
- package/dist/esm/core/operations.external-connectors-models.schemas.js.map +1 -1
- package/dist/esm/core/security.external-connectors-models.schemas.d.ts.map +1 -1
- package/dist/esm/core/security.external-connectors-models.schemas.js.map +1 -1
- package/dist/esm/index.d.ts +6 -0
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +6 -0
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/protocols/agent-client-protocol.external-connectors-models.schemas.d.ts +8 -42
- package/dist/esm/protocols/agent-client-protocol.external-connectors-models.schemas.d.ts.map +1 -1
- package/dist/esm/protocols/agent-client-protocol.external-connectors-models.schemas.js +21 -0
- package/dist/esm/protocols/agent-client-protocol.external-connectors-models.schemas.js.map +1 -1
- package/dist/esm/protocols/billing.standard-interface.schemas.d.ts +56 -3
- package/dist/esm/protocols/billing.standard-interface.schemas.d.ts.map +1 -1
- package/dist/esm/protocols/billing.standard-interface.schemas.js +15 -2
- package/dist/esm/protocols/billing.standard-interface.schemas.js.map +1 -1
- package/dist/esm/protocols/content-safety.external-connectors-models.schemas.d.ts.map +1 -1
- package/dist/esm/protocols/content-safety.external-connectors-models.schemas.js.map +1 -1
- package/dist/esm/protocols/document-extraction.external-connectors-models.schemas.d.ts.map +1 -1
- package/dist/esm/protocols/document-extraction.external-connectors-models.schemas.js.map +1 -1
- package/dist/esm/protocols/electronic-signature.external-connectors-models.schemas.d.ts +157 -0
- package/dist/esm/protocols/electronic-signature.external-connectors-models.schemas.d.ts.map +1 -0
- package/dist/esm/protocols/electronic-signature.external-connectors-models.schemas.js +134 -0
- package/dist/esm/protocols/electronic-signature.external-connectors-models.schemas.js.map +1 -0
- package/dist/esm/protocols/email-inbound.standard-interface.schemas.d.ts +85 -0
- package/dist/esm/protocols/email-inbound.standard-interface.schemas.d.ts.map +1 -1
- package/dist/esm/protocols/email-inbound.standard-interface.schemas.js +46 -2
- package/dist/esm/protocols/email-inbound.standard-interface.schemas.js.map +1 -1
- package/dist/esm/protocols/email.external-connectors-models.schemas.d.ts.map +1 -1
- package/dist/esm/protocols/email.external-connectors-models.schemas.js.map +1 -1
- package/dist/esm/protocols/email.standard-interface.schemas.d.ts.map +1 -1
- package/dist/esm/protocols/email.standard-interface.schemas.js.map +1 -1
- package/dist/esm/protocols/embeddings.external-connectors-models.schemas.d.ts +49 -6
- package/dist/esm/protocols/embeddings.external-connectors-models.schemas.d.ts.map +1 -1
- package/dist/esm/protocols/embeddings.external-connectors-models.schemas.js +89 -6
- package/dist/esm/protocols/embeddings.external-connectors-models.schemas.js.map +1 -1
- package/dist/esm/protocols/file-storage.standard-interface.d.ts +9 -2
- package/dist/esm/protocols/file-storage.standard-interface.d.ts.map +1 -1
- package/dist/esm/protocols/file-storage.standard-interface.js +6 -0
- package/dist/esm/protocols/file-storage.standard-interface.js.map +1 -1
- package/dist/esm/protocols/frontend.external-connectors-models.schemas.d.ts.map +1 -1
- package/dist/esm/protocols/frontend.external-connectors-models.schemas.js.map +1 -1
- package/dist/esm/protocols/graphql-operations.external-connectors-models.schemas.d.ts +254 -0
- package/dist/esm/protocols/graphql-operations.external-connectors-models.schemas.d.ts.map +1 -0
- package/dist/esm/protocols/graphql-operations.external-connectors-models.schemas.js +480 -0
- package/dist/esm/protocols/graphql-operations.external-connectors-models.schemas.js.map +1 -0
- package/dist/esm/protocols/hooks-capability.external-connectors-models.schemas.d.ts.map +1 -1
- package/dist/esm/protocols/hooks-capability.external-connectors-models.schemas.js.map +1 -1
- package/dist/esm/protocols/hooks.external-connectors-models.schemas.d.ts +95 -1
- package/dist/esm/protocols/hooks.external-connectors-models.schemas.d.ts.map +1 -1
- package/dist/esm/protocols/hooks.external-connectors-models.schemas.js +110 -0
- package/dist/esm/protocols/hooks.external-connectors-models.schemas.js.map +1 -1
- package/dist/esm/protocols/image.external-connectors-models.schemas.d.ts.map +1 -1
- package/dist/esm/protocols/image.external-connectors-models.schemas.js.map +1 -1
- package/dist/esm/protocols/llm.external-connectors-models.schemas.d.ts +95 -3
- package/dist/esm/protocols/llm.external-connectors-models.schemas.d.ts.map +1 -1
- package/dist/esm/protocols/llm.external-connectors-models.schemas.js +147 -15
- package/dist/esm/protocols/llm.external-connectors-models.schemas.js.map +1 -1
- package/dist/esm/protocols/oauth2-provider-assurance.definitions.d.ts.map +1 -1
- package/dist/esm/protocols/oauth2-provider-assurance.definitions.js.map +1 -1
- package/dist/esm/protocols/oauth2-provider-assurance.schemas.d.ts.map +1 -1
- package/dist/esm/protocols/oauth2-provider-assurance.schemas.js.map +1 -1
- package/dist/esm/protocols/oauth2.external-connectors-models.schemas.d.ts.map +1 -1
- package/dist/esm/protocols/oauth2.external-connectors-models.schemas.js.map +1 -1
- package/dist/esm/protocols/provider-configuration-authoring.external-connectors-models.schemas.d.ts +52 -0
- package/dist/esm/protocols/provider-configuration-authoring.external-connectors-models.schemas.d.ts.map +1 -0
- package/dist/esm/protocols/provider-configuration-authoring.external-connectors-models.schemas.js +132 -0
- package/dist/esm/protocols/provider-configuration-authoring.external-connectors-models.schemas.js.map +1 -0
- package/dist/esm/protocols/provider-connection-parameters.external-connectors-models.d.ts +111 -0
- package/dist/esm/protocols/provider-connection-parameters.external-connectors-models.d.ts.map +1 -0
- package/dist/esm/protocols/provider-connection-parameters.external-connectors-models.js +203 -0
- package/dist/esm/protocols/provider-connection-parameters.external-connectors-models.js.map +1 -0
- package/dist/esm/protocols/provider-oauth2-token-endpoint-hosts.external-connectors-models.d.ts +6 -0
- package/dist/esm/protocols/provider-oauth2-token-endpoint-hosts.external-connectors-models.d.ts.map +1 -1
- package/dist/esm/protocols/provider-oauth2-token-endpoint-hosts.external-connectors-models.js +13 -7
- package/dist/esm/protocols/provider-oauth2-token-endpoint-hosts.external-connectors-models.js.map +1 -1
- package/dist/esm/protocols/provider-vendor-registration.external-connectors-models.d.ts +50 -0
- package/dist/esm/protocols/provider-vendor-registration.external-connectors-models.d.ts.map +1 -0
- package/dist/esm/protocols/provider-vendor-registration.external-connectors-models.js +30 -0
- package/dist/esm/protocols/provider-vendor-registration.external-connectors-models.js.map +1 -0
- package/dist/esm/protocols/rest-operations.external-connectors-models.schemas.d.ts +730 -17
- package/dist/esm/protocols/rest-operations.external-connectors-models.schemas.d.ts.map +1 -1
- package/dist/esm/protocols/rest-operations.external-connectors-models.schemas.js +822 -20
- package/dist/esm/protocols/rest-operations.external-connectors-models.schemas.js.map +1 -1
- package/dist/esm/protocols/service-account-token.external-connectors-models.schemas.d.ts +73 -0
- package/dist/esm/protocols/service-account-token.external-connectors-models.schemas.d.ts.map +1 -0
- package/dist/esm/protocols/service-account-token.external-connectors-models.schemas.js +82 -0
- package/dist/esm/protocols/service-account-token.external-connectors-models.schemas.js.map +1 -0
- package/dist/esm/protocols/sms.external-connectors-models.schemas.d.ts.map +1 -1
- package/dist/esm/protocols/sms.external-connectors-models.schemas.js.map +1 -1
- package/dist/esm/protocols/sms.standard-interface.schemas.d.ts +79 -1
- package/dist/esm/protocols/sms.standard-interface.schemas.d.ts.map +1 -1
- package/dist/esm/protocols/sms.standard-interface.schemas.js +93 -0
- package/dist/esm/protocols/sms.standard-interface.schemas.js.map +1 -1
- package/dist/esm/protocols/subject-erasure-effect.standard-interface.d.ts.map +1 -1
- package/dist/esm/protocols/subject-erasure-effect.standard-interface.js.map +1 -1
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/package.json +5 -5
- package/dist/esm/.native.tsbuildinfo +0 -1
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
|
+
import { z_wireDate } from '@wildo-ai/zod-decorators';
|
|
2
3
|
// ===============================================================
|
|
3
4
|
// Standard Inbound Email Interface (#1630)
|
|
4
5
|
// --------
|
|
@@ -81,7 +82,15 @@ export const StandardInboundEmail_NotificationSchema = z.object({
|
|
|
81
82
|
providerMessageId: z.string().min(1),
|
|
82
83
|
/** The addresses the message was delivered FOR (the SMTP envelope recipients), which routing reads. */
|
|
83
84
|
receivedFor: z.array(z.string().min(1)).min(1),
|
|
84
|
-
|
|
85
|
+
/**
|
|
86
|
+
* Every address the stored notification body names, sender first, then its recipients and copied (#1642). Read for one
|
|
87
|
+
* purpose only: the subject keys of the delivery that stores the body, so a person's erasure finds and deletes it, and
|
|
88
|
+
* their access export reads it. Never trusted for routing, identity or anything else. Absent when the provider module
|
|
89
|
+
* does not project it, and then the delivery is keyed by `receivedFor` alone.
|
|
90
|
+
*/
|
|
91
|
+
namedAddresses: z.array(z.string().min(1)).optional(),
|
|
92
|
+
// Framework-internal z_wireDate (#3480): a provider adapter parses the provider's own HTTP JSON with this contract directly (email-inbound-provider-adapter), outside every framework conversion.
|
|
93
|
+
receivedAt: z_wireDate(),
|
|
85
94
|
});
|
|
86
95
|
/**
|
|
87
96
|
* One received message, provider-neutral.
|
|
@@ -107,13 +116,47 @@ export const StandardInboundEmail_MessageSchema = z.object({
|
|
|
107
116
|
authentication: StandardInboundEmail_AuthenticationSchema,
|
|
108
117
|
attachments: z.array(StandardInboundEmail_AttachmentSchema).default([]),
|
|
109
118
|
sizeBytes: z.number().int().nonnegative().optional(),
|
|
110
|
-
receivedAt:
|
|
119
|
+
receivedAt: z_wireDate(),
|
|
111
120
|
/**
|
|
112
121
|
* Where the ORIGINAL message bytes are, when the provider keeps them (#1600). Opaque to the engine; handed
|
|
113
122
|
* to `openRaw`. Absent when the provider offers no raw copy — the engine then keeps no raw MIME.
|
|
114
123
|
*/
|
|
115
124
|
rawRef: z.string().min(1).optional(),
|
|
116
125
|
});
|
|
126
|
+
/**
|
|
127
|
+
* How a receiving provider hands the engine a message (#3395). A closed vocabulary because the engine's whole path
|
|
128
|
+
* from the webhook to the stored message depends on it.
|
|
129
|
+
*/
|
|
130
|
+
export var InboundEmailMessageDelivery;
|
|
131
|
+
(function (InboundEmailMessageDelivery) {
|
|
132
|
+
/**
|
|
133
|
+
* The webhook NOTIFIES: a small signed notification names the message, and the engine fetches the message, its
|
|
134
|
+
* attachments and its original bytes through the provider's API (Resend). The default.
|
|
135
|
+
*/
|
|
136
|
+
InboundEmailMessageDelivery["FETCHED"] = "fetched";
|
|
137
|
+
/**
|
|
138
|
+
* The webhook IS the message: the whole message, attachments included as base64, arrives in the request body, and
|
|
139
|
+
* nothing is fetched (Postmark; Mailgun's routes post the message too). The engine reads the bytes out of the body
|
|
140
|
+
* it verified and stores them through the same path a fetched message's bytes take.
|
|
141
|
+
*/
|
|
142
|
+
InboundEmailMessageDelivery["PUSHED"] = "pushed";
|
|
143
|
+
})(InboundEmailMessageDelivery || (InboundEmailMessageDelivery = {}));
|
|
144
|
+
/**
|
|
145
|
+
* A pushed message as a provider module maps it (#3395): the standard message, and the bytes its attachments and its
|
|
146
|
+
* original copy arrived with. The engine re-validates it, refuses an attachment whose content is absent or not
|
|
147
|
+
* base64, and refuses a `rawRef` with no raw content (or raw content with no `rawRef`).
|
|
148
|
+
*/
|
|
149
|
+
export const StandardInboundEmail_PushedMessageSchema = z.object({
|
|
150
|
+
message: StandardInboundEmail_MessageSchema,
|
|
151
|
+
/** Each attachment's content as the vendor posted it, base64, keyed by the attachment's `ref`. */
|
|
152
|
+
attachmentContents: z.record(z.string(), z.string()).default({}),
|
|
153
|
+
/**
|
|
154
|
+
* The original message as text, when the vendor includes it (Postmark's `RawEmail`, a server option), stored under
|
|
155
|
+
* the message's `rawRef`. A JSON string, so it is the vendor's text rendering of the MIME message, re-encoded as UTF-8:
|
|
156
|
+
* not necessarily byte-identical to what the sending server transmitted.
|
|
157
|
+
*/
|
|
158
|
+
raw: z.string().optional(),
|
|
159
|
+
});
|
|
117
160
|
// ===============================================================
|
|
118
161
|
// Receiving domains (#1600)
|
|
119
162
|
// ===============================================================
|
|
@@ -154,6 +197,7 @@ export var EmailProviderHttpMethod;
|
|
|
154
197
|
(function (EmailProviderHttpMethod) {
|
|
155
198
|
EmailProviderHttpMethod["GET"] = "GET";
|
|
156
199
|
EmailProviderHttpMethod["POST"] = "POST";
|
|
200
|
+
EmailProviderHttpMethod["PUT"] = "PUT";
|
|
157
201
|
EmailProviderHttpMethod["PATCH"] = "PATCH";
|
|
158
202
|
EmailProviderHttpMethod["DELETE"] = "DELETE";
|
|
159
203
|
})(EmailProviderHttpMethod || (EmailProviderHttpMethod = {}));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"email-inbound.standard-interface.schemas.js","sourceRoot":"","sources":["../../../../src/protocols/email-inbound.standard-interface.schemas.ts"],"names":[],"mappings":"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","sourcesContent":["import { z } from \"zod\";\n\n// ===============================================================\n// Standard Inbound Email Interface (#1630)\n// --------\n// The canonical shape of a message an EMAIL_INBOUND provider RECEIVED for the application, and the\n// three calls the engine makes on the provider to get it. Provider-agnostic: a vendor's module maps\n// its own notification and message payloads onto these schemas, and nothing past that mapping ever\n// sees a vendor field.\n//\n// There is deliberately NO `verify` here. The notification reaches the application through the\n// provider's `WEBHOOK_ORIGINATOR` endpoint (the `inbound-email` key, capability `EMAIL_INBOUND`), and\n// that endpoint is verified by the ENGINE-owned scheme its `signatureConfig` names (#1596). A\n// provider that verified its own notifications would put the one fail-closed decision of the inbound\n// path in vendor code, where nothing checks it.\n// ===============================================================\n\n/**\n * One authentication method's result, as a receiving server records it in `Authentication-Results`.\n *\n * The union of the results the three methods define, so one vocabulary serves SPF, DKIM and DMARC.\n * Two members go beyond what a DMARC result can be — `SOFTFAIL` (SPF only) and `POLICY` (DKIM and\n * SPF) — and are here because mapping them onto a neighbour would record a result the receiver did\n * not report: a softfail is neither a fail nor neutral.\n *\n * spec-cite: RFC 8601 §2.7.1 (DKIM results: none, pass, fail, policy, neutral, temperror, permerror)\n * and §2.7.2 (SPF results: none, pass, fail, softfail, neutral, temperror, permerror, plus policy\n * from §2.4); DMARC results per RFC 7489 §11.2 (none, pass, fail, temperror, permerror). Fetched 2026-09-27.\n */\nexport enum EmailAuthenticationVerdict {\n PASS = \"pass\",\n FAIL = \"fail\",\n SOFTFAIL = \"softfail\",\n NEUTRAL = \"neutral\",\n NONE = \"none\",\n POLICY = \"policy\",\n TEMPERROR = \"temperror\",\n PERMERROR = \"permerror\",\n}\n\n/**\n * What the receiving provider concluded about a message's origin.\n *\n * `dmarcAligned` is kept beside the DMARC verdict rather than folded into it because it is the fact\n * sender assurance is built on: DMARC authenticates the `From` DOMAIN by requiring that it align with\n * an identifier SPF or DKIM authenticated. A provider that reports DMARC `pass` has already required\n * alignment, so for most vendors `dmarcAligned` equals `dmarc === PASS`; it is a separate field so a\n * vendor that reports the two independently is not forced to invent one from the other.\n */\nexport const StandardInboundEmail_AuthenticationSchema = z.object({\n spf: z.enum(EmailAuthenticationVerdict),\n dkim: z.enum(EmailAuthenticationVerdict),\n dmarc: z.enum(EmailAuthenticationVerdict),\n dmarcAligned: z.boolean(),\n});\n\nexport type StandardInboundEmail_Authentication = z.infer<typeof StandardInboundEmail_AuthenticationSchema>;\n\nexport const StandardInboundEmail_AddressSchema = z.object({\n address: z.string().min(1),\n name: z.string().optional(),\n});\n\nexport type StandardInboundEmail_Address = z.infer<typeof StandardInboundEmail_AddressSchema>;\n\n/** How a MIME part asks to be presented (`Content-Disposition`). spec-cite: RFC 2183 §2.1 (`inline`) and §2.2 (`attachment`). */\nexport enum EmailAttachmentDisposition {\n ATTACHMENT = \"attachment\",\n INLINE = \"inline\",\n}\n\n/** One attachment as the provider describes it. The bytes are fetched through `openAttachment`, never inlined. */\nexport const StandardInboundEmail_AttachmentSchema = z.object({\n /** Opaque to the engine; handed back to `openAttachment`. */\n ref: z.string().min(1),\n filename: z.string(),\n contentType: z.string(),\n sizeBytes: z.number().int().nonnegative(),\n /** The `Content-ID` of an inline part, without angle brackets. */\n contentId: z.string().optional(),\n disposition: z.enum(EmailAttachmentDisposition).optional(),\n});\n\nexport type StandardInboundEmail_Attachment = z.infer<typeof StandardInboundEmail_AttachmentSchema>;\n\n/**\n * What a provider's notification says, parsed. Small on purpose: a notification tells the engine\n * THAT a message arrived and where to fetch it, and nothing past this point trusts it for more.\n */\nexport const StandardInboundEmail_NotificationSchema = z.object({\n /** The provider's id for the message — what `fetchMessage` takes, and the dedup key of the channel delivery. */\n providerMessageId: z.string().min(1),\n /** The addresses the message was delivered FOR (the SMTP envelope recipients), which routing reads. */\n receivedFor: z.array(z.string().min(1)).min(1),\n receivedAt: z.coerce.date(),\n});\n\nexport type StandardInboundEmail_Notification = z.infer<typeof StandardInboundEmail_NotificationSchema>;\n\n/**\n * One received message, provider-neutral.\n *\n * The threading headers are separated out because the engine correlates threads from them;\n * `headers` carries the rest, for a channel record that chooses to keep an allow-listed subset.\n */\nexport const StandardInboundEmail_MessageSchema = z.object({\n providerMessageId: z.string().min(1),\n /** The RFC 5322 `Message-ID`, angle brackets included, or absent when the sender set none. */\n messageId: z.string().optional(),\n inReplyTo: z.string().optional(),\n references: z.array(z.string()).default([]),\n from: StandardInboundEmail_AddressSchema,\n to: z.array(StandardInboundEmail_AddressSchema).default([]),\n cc: z.array(StandardInboundEmail_AddressSchema).default([]),\n replyTo: StandardInboundEmail_AddressSchema.optional(),\n receivedFor: z.array(z.string().min(1)).min(1),\n subject: z.string().default(\"\"),\n textBody: z.string().optional(),\n htmlBody: z.string().optional(),\n headers: z.record(z.string(), z.string()).default({}),\n authentication: StandardInboundEmail_AuthenticationSchema,\n attachments: z.array(StandardInboundEmail_AttachmentSchema).default([]),\n sizeBytes: z.number().int().nonnegative().optional(),\n receivedAt: z.coerce.date(),\n /**\n * Where the ORIGINAL message bytes are, when the provider keeps them (#1600). Opaque to the engine; handed\n * to `openRaw`. Absent when the provider offers no raw copy — the engine then keeps no raw MIME.\n */\n rawRef: z.string().min(1).optional(),\n});\n\nexport type StandardInboundEmail_Message = z.infer<typeof StandardInboundEmail_MessageSchema>;\n\n/** The bytes of one attachment. */\nexport interface StandardInboundEmail_OpenedAttachment {\n readonly bytes: Uint8Array;\n readonly contentType: string;\n readonly filename: string;\n}\n\n/** The original bytes of a message, exactly as the provider serves them. */\nexport interface StandardInboundEmail_OpenedRaw {\n readonly bytes: Uint8Array;\n}\n\n// ===============================================================\n// Receiving domains (#1600)\n// ===============================================================\n\n/** Where a domain stands AT THE PROVIDER — distinct from the organization's own status, which also records ownership proof. */\nexport enum EmailProviderDomainStatus {\n /** The provider has not verified the domain's records yet (not started, pending, or a temporary failure it will retry). */\n PENDING = \"pending\",\n /** The provider verified the domain's records. */\n VERIFIED = \"verified\",\n /** The provider gave up verifying the records. */\n FAILED = \"failed\",\n}\n\n/** One DNS record the provider asks to be published. */\nexport const StandardEmailDomain_DnsRecordSchema = z.object({\n /** What it is for, as the provider names it (DKIM, SPF, MX, Receiving…). */\n purpose: z.string(),\n type: z.string(),\n name: z.string(),\n value: z.string(),\n priority: z.number().int().optional(),\n status: z.string().optional(),\n});\n\nexport type StandardEmailDomain_DnsRecord = z.infer<typeof StandardEmailDomain_DnsRecordSchema>;\n\n/** A domain as the provider describes it. */\nexport const StandardEmailDomainSchema = z.object({\n providerDomainId: z.string().min(1),\n name: z.string().min(1),\n status: z.enum(EmailProviderDomainStatus),\n sending: z.boolean(),\n receiving: z.boolean(),\n records: z.array(StandardEmailDomain_DnsRecordSchema).default([]),\n});\n\nexport type StandardEmailDomain = z.infer<typeof StandardEmailDomainSchema>;\n\n/**\n * What an EMAIL_INBOUND provider implements to host an organization's own domain. Every tenant shares one\n * provider account, so the ENGINE proves the organization owns the domain before it ever calls `createDomain`.\n */\nexport interface StandardEmailDomains_Interface {\n createDomain(input: { readonly name: string; readonly sending: boolean; readonly receiving: boolean }): Promise<StandardEmailDomain>;\n getDomain(providerDomainId: string): Promise<StandardEmailDomain | null>;\n /** Start the provider's (asynchronous) verification. */\n verifyDomain(providerDomainId: string): Promise<void>;\n deleteDomain(providerDomainId: string): Promise<void>;\n}\n\n/**\n * What an EMAIL_INBOUND provider implements. Built by the provider module's adapter factory with the\n * credential the engine resolved, exactly as a billing adapter is — the module never reads a secret\n * itself.\n */\nexport interface StandardInboundEmail_Interface {\n /** Map the verified notification body onto the standard notification. Pure; refuses an unknown shape by throwing. */\n parseNotification(body: unknown): StandardInboundEmail_Notification;\n /** Fetch the whole message the notification announced. */\n fetchMessage(providerMessageId: string): Promise<StandardInboundEmail_Message>;\n /** Fetch one attachment's bytes, by the `ref` the message listed. */\n openAttachment(ref: string): Promise<StandardInboundEmail_OpenedAttachment>;\n /** Fetch the original message bytes, by the message's `rawRef`. */\n openRaw(rawRef: string): Promise<StandardInboundEmail_OpenedRaw>;\n}\n\n// ===============================================================\n// What a provider module DECLARES (pure functions; the engine owns the transport)\n// ===============================================================\n\n/**\n * One request a provider module asks the engine to make on its behalf.\n *\n * `path` is appended to the contract's `baseUrl`. A provider that serves bytes from ANOTHER host (a\n * signed download URL) returns `url` instead, and the engine admits it only against the hosts the\n * contract declares — a provider-supplied URL is never fetched merely because a provider named it.\n */\nexport type InboundEmailProviderRequest =\n | { readonly path: string; readonly method?: EmailProviderHttpMethod; readonly jsonBody?: unknown; readonly headers?: Readonly<Record<string, string>> }\n | { readonly url: string; readonly headers?: Readonly<Record<string, string>> };\n\n/**\n * The methods a provider's `path` request may use. A `url` request (a signed download link) is always a GET.\n * Absent means GET.\n */\nexport enum EmailProviderHttpMethod {\n GET = \"GET\",\n POST = \"POST\",\n PATCH = \"PATCH\",\n DELETE = \"DELETE\",\n}\n\n/** A provider's HTTP answer, as the engine hands it to the provider's parser. */\nexport interface InboundEmailProviderResponseInput {\n readonly status: number;\n /** The JSON body, or `undefined` when the answer was not JSON. */\n readonly body: unknown;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"email-inbound.standard-interface.schemas.js","sourceRoot":"","sources":["../../../src/protocols/email-inbound.standard-interface.schemas.ts"],"names":[],"mappings":"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","sourcesContent":["import { z } from \"zod\";\nimport { z_wireDate } from '@wildo-ai/zod-decorators';\n\n// ===============================================================\n// Standard Inbound Email Interface (#1630)\n// --------\n// The canonical shape of a message an EMAIL_INBOUND provider RECEIVED for the application, and the\n// three calls the engine makes on the provider to get it. Provider-agnostic: a vendor's module maps\n// its own notification and message payloads onto these schemas, and nothing past that mapping ever\n// sees a vendor field.\n//\n// There is deliberately NO `verify` here. The notification reaches the application through the\n// provider's `WEBHOOK_ORIGINATOR` endpoint (the `inbound-email` key, capability `EMAIL_INBOUND`), and\n// that endpoint is verified by the ENGINE-owned scheme its `signatureConfig` names (#1596). A\n// provider that verified its own notifications would put the one fail-closed decision of the inbound\n// path in vendor code, where nothing checks it.\n// ===============================================================\n\n/**\n * One authentication method's result, as a receiving server records it in `Authentication-Results`.\n *\n * The union of the results the three methods define, so one vocabulary serves SPF, DKIM and DMARC.\n * Two members go beyond what a DMARC result can be — `SOFTFAIL` (SPF only) and `POLICY` (DKIM and\n * SPF) — and are here because mapping them onto a neighbour would record a result the receiver did\n * not report: a softfail is neither a fail nor neutral.\n *\n * spec-cite: RFC 8601 §2.7.1 (DKIM results: none, pass, fail, policy, neutral, temperror, permerror)\n * and §2.7.2 (SPF results: none, pass, fail, softfail, neutral, temperror, permerror, plus policy\n * from §2.4); DMARC results per RFC 7489 §11.2 (none, pass, fail, temperror, permerror). Fetched 2026-09-27.\n */\nexport enum EmailAuthenticationVerdict {\n PASS = \"pass\",\n FAIL = \"fail\",\n SOFTFAIL = \"softfail\",\n NEUTRAL = \"neutral\",\n NONE = \"none\",\n POLICY = \"policy\",\n TEMPERROR = \"temperror\",\n PERMERROR = \"permerror\",\n}\n\n/**\n * What the receiving provider concluded about a message's origin.\n *\n * `dmarcAligned` is kept beside the DMARC verdict rather than folded into it because it is the fact\n * sender assurance is built on: DMARC authenticates the `From` DOMAIN by requiring that it align with\n * an identifier SPF or DKIM authenticated. A provider that reports DMARC `pass` has already required\n * alignment, so for most vendors `dmarcAligned` equals `dmarc === PASS`; it is a separate field so a\n * vendor that reports the two independently is not forced to invent one from the other.\n */\nexport const StandardInboundEmail_AuthenticationSchema = z.object({\n spf: z.enum(EmailAuthenticationVerdict),\n dkim: z.enum(EmailAuthenticationVerdict),\n dmarc: z.enum(EmailAuthenticationVerdict),\n dmarcAligned: z.boolean(),\n});\n\nexport type StandardInboundEmail_Authentication = z.infer<typeof StandardInboundEmail_AuthenticationSchema>;\n\nexport const StandardInboundEmail_AddressSchema = z.object({\n address: z.string().min(1),\n name: z.string().optional(),\n});\n\nexport type StandardInboundEmail_Address = z.infer<typeof StandardInboundEmail_AddressSchema>;\n\n/** How a MIME part asks to be presented (`Content-Disposition`). spec-cite: RFC 2183 §2.1 (`inline`) and §2.2 (`attachment`). */\nexport enum EmailAttachmentDisposition {\n ATTACHMENT = \"attachment\",\n INLINE = \"inline\",\n}\n\n/** One attachment as the provider describes it. The bytes are fetched through `openAttachment`, never inlined. */\nexport const StandardInboundEmail_AttachmentSchema = z.object({\n /** Opaque to the engine; handed back to `openAttachment`. */\n ref: z.string().min(1),\n filename: z.string(),\n contentType: z.string(),\n sizeBytes: z.number().int().nonnegative(),\n /** The `Content-ID` of an inline part, without angle brackets. */\n contentId: z.string().optional(),\n disposition: z.enum(EmailAttachmentDisposition).optional(),\n});\n\nexport type StandardInboundEmail_Attachment = z.infer<typeof StandardInboundEmail_AttachmentSchema>;\n\n/**\n * What a provider's notification says, parsed. Small on purpose: a notification tells the engine\n * THAT a message arrived and where to fetch it, and nothing past this point trusts it for more.\n */\nexport const StandardInboundEmail_NotificationSchema = z.object({\n /** The provider's id for the message — what `fetchMessage` takes, and the dedup key of the channel delivery. */\n providerMessageId: z.string().min(1),\n /** The addresses the message was delivered FOR (the SMTP envelope recipients), which routing reads. */\n receivedFor: z.array(z.string().min(1)).min(1),\n /**\n * Every address the stored notification body names, sender first, then its recipients and copied (#1642). Read for one\n * purpose only: the subject keys of the delivery that stores the body, so a person's erasure finds and deletes it, and\n * their access export reads it. Never trusted for routing, identity or anything else. Absent when the provider module\n * does not project it, and then the delivery is keyed by `receivedFor` alone.\n */\n namedAddresses: z.array(z.string().min(1)).optional(),\n // Framework-internal z_wireDate (#3480): a provider adapter parses the provider's own HTTP JSON with this contract directly (email-inbound-provider-adapter), outside every framework conversion.\n receivedAt: z_wireDate(),\n});\n\nexport type StandardInboundEmail_Notification = z.infer<typeof StandardInboundEmail_NotificationSchema>;\n\n/**\n * One received message, provider-neutral.\n *\n * The threading headers are separated out because the engine correlates threads from them;\n * `headers` carries the rest, for a channel record that chooses to keep an allow-listed subset.\n */\nexport const StandardInboundEmail_MessageSchema = z.object({\n providerMessageId: z.string().min(1),\n /** The RFC 5322 `Message-ID`, angle brackets included, or absent when the sender set none. */\n messageId: z.string().optional(),\n inReplyTo: z.string().optional(),\n references: z.array(z.string()).default([]),\n from: StandardInboundEmail_AddressSchema,\n to: z.array(StandardInboundEmail_AddressSchema).default([]),\n cc: z.array(StandardInboundEmail_AddressSchema).default([]),\n replyTo: StandardInboundEmail_AddressSchema.optional(),\n receivedFor: z.array(z.string().min(1)).min(1),\n subject: z.string().default(\"\"),\n textBody: z.string().optional(),\n htmlBody: z.string().optional(),\n headers: z.record(z.string(), z.string()).default({}),\n authentication: StandardInboundEmail_AuthenticationSchema,\n attachments: z.array(StandardInboundEmail_AttachmentSchema).default([]),\n sizeBytes: z.number().int().nonnegative().optional(),\n receivedAt: z_wireDate(),\n /**\n * Where the ORIGINAL message bytes are, when the provider keeps them (#1600). Opaque to the engine; handed\n * to `openRaw`. Absent when the provider offers no raw copy — the engine then keeps no raw MIME.\n */\n rawRef: z.string().min(1).optional(),\n});\n\nexport type StandardInboundEmail_Message = z.infer<typeof StandardInboundEmail_MessageSchema>;\n\n/**\n * How a receiving provider hands the engine a message (#3395). A closed vocabulary because the engine's whole path\n * from the webhook to the stored message depends on it.\n */\nexport enum InboundEmailMessageDelivery {\n /**\n * The webhook NOTIFIES: a small signed notification names the message, and the engine fetches the message, its\n * attachments and its original bytes through the provider's API (Resend). The default.\n */\n FETCHED = \"fetched\",\n /**\n * The webhook IS the message: the whole message, attachments included as base64, arrives in the request body, and\n * nothing is fetched (Postmark; Mailgun's routes post the message too). The engine reads the bytes out of the body\n * it verified and stores them through the same path a fetched message's bytes take.\n */\n PUSHED = \"pushed\",\n}\n\n/**\n * A pushed message as a provider module maps it (#3395): the standard message, and the bytes its attachments and its\n * original copy arrived with. The engine re-validates it, refuses an attachment whose content is absent or not\n * base64, and refuses a `rawRef` with no raw content (or raw content with no `rawRef`).\n */\nexport const StandardInboundEmail_PushedMessageSchema = z.object({\n message: StandardInboundEmail_MessageSchema,\n /** Each attachment's content as the vendor posted it, base64, keyed by the attachment's `ref`. */\n attachmentContents: z.record(z.string(), z.string()).default({}),\n /**\n * The original message as text, when the vendor includes it (Postmark's `RawEmail`, a server option), stored under\n * the message's `rawRef`. A JSON string, so it is the vendor's text rendering of the MIME message, re-encoded as UTF-8:\n * not necessarily byte-identical to what the sending server transmitted.\n */\n raw: z.string().optional(),\n});\n\nexport type StandardInboundEmail_PushedMessage = z.infer<typeof StandardInboundEmail_PushedMessageSchema>;\n\n/** The bytes of one attachment. */\nexport interface StandardInboundEmail_OpenedAttachment {\n readonly bytes: Uint8Array;\n readonly contentType: string;\n readonly filename: string;\n}\n\n/** The original bytes of a message, exactly as the provider serves them. */\nexport interface StandardInboundEmail_OpenedRaw {\n readonly bytes: Uint8Array;\n}\n\n// ===============================================================\n// Receiving domains (#1600)\n// ===============================================================\n\n/** Where a domain stands AT THE PROVIDER — distinct from the organization's own status, which also records ownership proof. */\nexport enum EmailProviderDomainStatus {\n /** The provider has not verified the domain's records yet (not started, pending, or a temporary failure it will retry). */\n PENDING = \"pending\",\n /** The provider verified the domain's records. */\n VERIFIED = \"verified\",\n /** The provider gave up verifying the records. */\n FAILED = \"failed\",\n}\n\n/** One DNS record the provider asks to be published. */\nexport const StandardEmailDomain_DnsRecordSchema = z.object({\n /** What it is for, as the provider names it (DKIM, SPF, MX, Receiving…). */\n purpose: z.string(),\n type: z.string(),\n name: z.string(),\n value: z.string(),\n priority: z.number().int().optional(),\n status: z.string().optional(),\n});\n\nexport type StandardEmailDomain_DnsRecord = z.infer<typeof StandardEmailDomain_DnsRecordSchema>;\n\n/** A domain as the provider describes it. */\nexport const StandardEmailDomainSchema = z.object({\n providerDomainId: z.string().min(1),\n name: z.string().min(1),\n status: z.enum(EmailProviderDomainStatus),\n sending: z.boolean(),\n receiving: z.boolean(),\n records: z.array(StandardEmailDomain_DnsRecordSchema).default([]),\n});\n\nexport type StandardEmailDomain = z.infer<typeof StandardEmailDomainSchema>;\n\n/**\n * What an EMAIL_INBOUND provider implements to host an organization's own domain. Every tenant shares one\n * provider account, so the ENGINE proves the organization owns the domain before it ever calls `createDomain`.\n */\nexport interface StandardEmailDomains_Interface {\n createDomain(input: { readonly name: string; readonly sending: boolean; readonly receiving: boolean }): Promise<StandardEmailDomain>;\n getDomain(providerDomainId: string): Promise<StandardEmailDomain | null>;\n /** Start the provider's (asynchronous) verification. */\n verifyDomain(providerDomainId: string): Promise<void>;\n deleteDomain(providerDomainId: string): Promise<void>;\n}\n\n/**\n * What an EMAIL_INBOUND provider implements. Built by the provider module's adapter factory with the\n * credential the engine resolved, exactly as a billing adapter is — the module never reads a secret\n * itself.\n */\nexport interface StandardInboundEmail_Interface {\n /** Map the verified notification body onto the standard notification. Pure; refuses an unknown shape by throwing. */\n parseNotification(body: unknown): StandardInboundEmail_Notification;\n /** Fetch the whole message the notification announced. */\n fetchMessage(providerMessageId: string): Promise<StandardInboundEmail_Message>;\n /** Fetch one attachment's bytes, by the `ref` the message listed. */\n openAttachment(ref: string): Promise<StandardInboundEmail_OpenedAttachment>;\n /** Fetch the original message bytes, by the message's `rawRef`. */\n openRaw(rawRef: string): Promise<StandardInboundEmail_OpenedRaw>;\n}\n\n// ===============================================================\n// What a provider module DECLARES (pure functions; the engine owns the transport)\n// ===============================================================\n\n/**\n * One request a provider module asks the engine to make on its behalf.\n *\n * `path` is appended to the contract's `baseUrl`. A provider that serves bytes from ANOTHER host (a\n * signed download URL) returns `url` instead, and the engine admits it only against the hosts the\n * contract declares — a provider-supplied URL is never fetched merely because a provider named it.\n */\nexport type InboundEmailProviderRequest =\n | {\n readonly path: string;\n readonly method?: EmailProviderHttpMethod;\n readonly headers?: Readonly<Record<string, string>>;\n /** A JSON body (Resend). At most one of `jsonBody` and `multipartFormFields`. */\n readonly jsonBody?: unknown;\n readonly multipartFormFields?: never;\n }\n | {\n readonly path: string;\n readonly method?: EmailProviderHttpMethod;\n readonly headers?: Readonly<Record<string, string>>;\n /**\n * Text fields sent as a `multipart/form-data` body (#3395), for an API documented to take one (Mailgun's domains\n * API). The engine encodes it and sets the content type with its boundary.\n */\n readonly multipartFormFields: Readonly<Record<string, string>>;\n readonly jsonBody?: never;\n }\n | { readonly url: string; readonly headers?: Readonly<Record<string, string>> };\n\n/**\n * The methods a provider's `path` request may use. A `url` request (a signed download link) is always a GET.\n * Absent means GET.\n */\nexport enum EmailProviderHttpMethod {\n GET = \"GET\",\n POST = \"POST\",\n PUT = \"PUT\",\n PATCH = \"PATCH\",\n DELETE = \"DELETE\",\n}\n\n/** A provider's HTTP answer, as the engine hands it to the provider's parser. */\nexport interface InboundEmailProviderResponseInput {\n readonly status: number;\n /** The JSON body, or `undefined` when the answer was not JSON. */\n readonly body: unknown;\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"email.external-connectors-models.schemas.d.ts","sourceRoot":"","sources":["
|
|
1
|
+
{"version":3,"file":"email.external-connectors-models.schemas.d.ts","sourceRoot":"","sources":["../../../src/protocols/email.external-connectors-models.schemas.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"email.external-connectors-models.schemas.js","sourceRoot":"","sources":["../../../../src/protocols/email.external-connectors-models.schemas.ts"],"names":[],"mappings":"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","sourcesContent":["import { z } from \"zod\";\nimport { \n ExternalProvider_ExchangeProtocol_Kind \n} from \"../core/commons.external-connectors-models.schemas\";\nimport { ExternalProvider_OperationContextSchema, ExternalProvider_OperationDefinition_Base } from \"../core/operations.external-connectors-models.schemas\";\n\n//===============================================================\n// Email Provider\n// --------\n// Integration with email service providers for sending transactional\n// and marketing emails. Supports both REST API and SMTP-based providers\n// with differentiated operations for each email type.\n//\n// CONFIGURATION LEVELS:\n// - Profile (Provider-level): Fixed by the provider, cannot be changed.\n// Examples: API endpoints, SMTP server addresses, capabilities, limits.\n// - Configuration (Consumer-level): User-configurable settings.\n// Examples: API keys, sender addresses, tracking preferences, webhooks.\n//===============================================================\n\n// ===============================================================\n// Email Provider Enums\n// ===============================================================\n\n/**\n * The type of email operation - transactional vs marketing have different\n * requirements, compliance rules, and often use separate sending domains/IPs.\n */\nexport enum EmailProvider_EmailType {\n TRANSACTIONAL = \"transactional\", // Password resets, receipts, notifications\n MARKETING = \"marketing\", // Newsletters, promotions, campaigns\n}\n\n/**\n * The delivery method used by the email provider.\n * REST API provides more features, SMTP is simpler but more limited.\n */\nexport enum EmailProvider_DeliveryMethod {\n REST_API = \"rest_api\",\n SMTP = \"smtp\",\n}\n\n/**\n * SMTP encryption/security modes.\n */\nexport enum EmailProvider_SMTP_Security {\n NONE = \"none\", // Plain text (port 25, not recommended)\n STARTTLS = \"starttls\", // Upgrade to TLS (port 587)\n TLS = \"tls\", // Implicit TLS/SSL (port 465)\n}\n\n/**\n * Email delivery status for tracking.\n */\nexport enum EmailProvider_DeliveryStatus {\n QUEUED = \"queued\",\n SENT = \"sent\",\n DELIVERED = \"delivered\",\n OPENED = \"opened\",\n CLICKED = \"clicked\",\n BOUNCED = \"bounced\",\n SOFT_BOUNCED = \"soft_bounced\",\n SPAM_COMPLAINT = \"spam_complaint\",\n UNSUBSCRIBED = \"unsubscribed\",\n DROPPED = \"dropped\",\n DEFERRED = \"deferred\",\n FAILED = \"failed\",\n}\n\n/**\n * Email bounce types.\n */\nexport enum EmailProvider_BounceType {\n HARD = \"hard\", // Permanent failure (address doesn't exist)\n SOFT = \"soft\", // Temporary failure (mailbox full, server down)\n TRANSIENT = \"transient\",\n}\n\n/**\n * Standard email provider operation keys.\n * Each provider implements a subset of these based on capabilities.\n */\nexport enum EmailProvider_OperationKey {\n // Core Transactional Operations\n SEND_EMAIL = \"email.send\",\n SEND_BATCH = \"email.sendBatch\",\n SEND_TEMPLATE = \"email.sendTemplate\",\n \n // Marketing/Campaign Operations\n SEND_CAMPAIGN = \"email.campaign.send\",\n CREATE_CAMPAIGN = \"email.campaign.create\",\n SCHEDULE_CAMPAIGN = \"email.campaign.schedule\",\n GET_CAMPAIGN = \"email.campaign.get\",\n \n // List Management (Marketing)\n LIST_CREATE = \"email.list.create\",\n LIST_ADD_CONTACT = \"email.list.addContact\",\n LIST_REMOVE_CONTACT = \"email.list.removeContact\",\n LIST_GET = \"email.list.get\",\n \n // Template Operations\n TEMPLATE_CREATE = \"email.template.create\",\n TEMPLATE_GET = \"email.template.get\",\n TEMPLATE_LIST = \"email.template.list\",\n TEMPLATE_DELETE = \"email.template.delete\",\n \n // Status & Analytics\n GET_MESSAGE_STATUS = \"email.message.getStatus\",\n GET_ANALYTICS = \"email.analytics.get\",\n \n // Suppression/Bounces\n GET_SUPPRESSIONS = \"email.suppressions.get\",\n ADD_SUPPRESSION = \"email.suppressions.add\",\n DELETE_SUPPRESSION = \"email.suppressions.delete\",\n \n // Domain Verification\n DOMAIN_VERIFY = \"email.domain.verify\",\n DOMAIN_GET_STATUS = \"email.domain.getStatus\",\n}\n\n/**\n * Email provider capabilities - what features the provider supports.\n * Used to determine which operations are available.\n */\nexport enum EmailProvider_Capability {\n // Delivery Methods\n SUPPORTS_REST_API = \"supports_rest_api\",\n SUPPORTS_SMTP = \"supports_smtp\",\n \n // Email Types\n SUPPORTS_TRANSACTIONAL = \"supports_transactional\",\n SUPPORTS_MARKETING = \"supports_marketing\",\n \n // Core Features\n SUPPORTS_TEMPLATES = \"supports_templates\",\n SUPPORTS_BATCH_SENDING = \"supports_batch_sending\",\n SUPPORTS_SCHEDULING = \"supports_scheduling\",\n SUPPORTS_ATTACHMENTS = \"supports_attachments\",\n SUPPORTS_INLINE_IMAGES = \"supports_inline_images\",\n \n // Tracking\n SUPPORTS_OPEN_TRACKING = \"supports_open_tracking\",\n SUPPORTS_CLICK_TRACKING = \"supports_click_tracking\",\n SUPPORTS_WEBHOOKS = \"supports_webhooks\",\n \n // Marketing Specific\n SUPPORTS_CAMPAIGNS = \"supports_campaigns\",\n SUPPORTS_LIST_MANAGEMENT = \"supports_list_management\",\n SUPPORTS_SEGMENTATION = \"supports_segmentation\",\n SUPPORTS_AB_TESTING = \"supports_ab_testing\",\n \n // Compliance & Deliverability\n SUPPORTS_SUPPRESSION_LISTS = \"supports_suppression_lists\",\n SUPPORTS_DEDICATED_IP = \"supports_dedicated_ip\",\n SUPPORTS_CUSTOM_DOMAIN = \"supports_custom_domain\",\n SUPPORTS_EMAIL_VALIDATION = \"supports_email_validation\",\n}\n\n// ===============================================================\n// SMTP Server Profile (Provider-level, fixed)\n// ===============================================================\n\nexport const EmailProvider_SMTP_ServerProfileSchema = z.object({\n host: z.string().min(1),\n port: z.number().int().min(1).max(65535),\n security: z.enum(EmailProvider_SMTP_Security),\n // Note: username/password are consumer-level (in Configuration)\n});\nexport type EmailProvider_SMTP_ServerProfile = z.infer<typeof EmailProvider_SMTP_ServerProfileSchema>;\n\n// ===============================================================\n// Email Address Schema\n// ===============================================================\n\nexport const EmailProvider_AddressSchema = z.object({\n email: z.email(),\n name: z.string().optional(),\n});\nexport type EmailProvider_Address = z.infer<typeof EmailProvider_AddressSchema>;\n\n// ===============================================================\n// Email Attachment Schema\n// ===============================================================\n\nexport const EmailProvider_AttachmentSchema = z.object({\n filename: z.string().min(1),\n content: z.string(), // Base64 encoded content\n contentType: z.string().optional(),\n contentId: z.string().optional(), // For inline images (cid:)\n});\nexport type EmailProvider_Attachment = z.infer<typeof EmailProvider_AttachmentSchema>;\n\n// ===============================================================\n// Send Email Input Schema\n// ===============================================================\n\nexport const EmailProvider_SendEmailInputSchema = z.object({\n // Recipients\n to: z.array(EmailProvider_AddressSchema).min(1),\n cc: z.array(EmailProvider_AddressSchema).optional(),\n bcc: z.array(EmailProvider_AddressSchema).optional(),\n \n // Sender (can override configuration default)\n from: EmailProvider_AddressSchema.optional(),\n replyTo: EmailProvider_AddressSchema.optional(),\n \n // Content\n subject: z.string().min(1),\n text: z.string().optional(),\n html: z.string().optional(),\n \n // Attachments\n attachments: z.array(EmailProvider_AttachmentSchema).optional(),\n \n // Headers\n headers: z.record(z.string(), z.string()).optional(),\n \n // Tags for categorization/analytics\n tags: z.array(z.string()).optional(),\n \n // Scheduling\n scheduledAt: z.iso.datetime().optional(),\n \n // Tracking overrides\n trackOpens: z.boolean().optional(),\n trackClicks: z.boolean().optional(),\n});\nexport type EmailProvider_SendEmailInput = z.infer<typeof EmailProvider_SendEmailInputSchema>;\n\n// ===============================================================\n// Send Email Output Schema\n// ===============================================================\n\nexport const EmailProvider_SendEmailOutputSchema = z.object({\n // Provider's message ID\n id: z.string(),\n \n // Status (if available immediately)\n status: z.enum(EmailProvider_DeliveryStatus).optional(),\n \n // Provider-specific data\n providerMessageId: z.string().optional(),\n});\nexport type EmailProvider_SendEmailOutput = z.infer<typeof EmailProvider_SendEmailOutputSchema>;\n\n// ===============================================================\n// Send Template Email Input Schema\n// ===============================================================\n\nexport const EmailProvider_SendTemplateInputSchema = z.object({\n // Recipients\n to: z.array(EmailProvider_AddressSchema).min(1),\n cc: z.array(EmailProvider_AddressSchema).optional(),\n bcc: z.array(EmailProvider_AddressSchema).optional(),\n \n // Sender\n from: EmailProvider_AddressSchema.optional(),\n replyTo: EmailProvider_AddressSchema.optional(),\n \n // Template\n templateId: z.string().min(1),\n templateAlias: z.string().optional(), // Some providers use alias instead of ID\n \n // Template variables\n variables: z.record(z.string(), z.unknown()).optional(),\n \n // Subject override (if template allows)\n subject: z.string().optional(),\n \n // Tags\n tags: z.array(z.string()).optional(),\n \n // Scheduling\n scheduledAt: z.iso.datetime().optional(),\n});\nexport type EmailProvider_SendTemplateInput = z.infer<typeof EmailProvider_SendTemplateInputSchema>;\n\n// ===============================================================\n// Batch Send Input Schema\n// ===============================================================\n\nconst emailProviderBatchItemSchema = z.object({\n to: EmailProvider_AddressSchema,\n variables: z.record(z.string(), z.unknown()).optional(),\n subject: z.string().optional(), // Override per recipient\n});\n\nexport const EmailProvider_SendBatchInputSchema = z.object({\n // Sender\n from: EmailProvider_AddressSchema.optional(),\n replyTo: EmailProvider_AddressSchema.optional(),\n \n // Content (direct or template)\n subject: z.string().optional(), // Default subject\n text: z.string().optional(),\n html: z.string().optional(),\n templateId: z.string().optional(),\n \n // Recipients with personalizations\n recipients: z.array(emailProviderBatchItemSchema).min(1),\n \n // Tags\n tags: z.array(z.string()).optional(),\n});\nexport type EmailProvider_SendBatchInput = z.infer<typeof EmailProvider_SendBatchInputSchema>;\n\n// ===============================================================\n// Batch Send Output Schema\n// ===============================================================\n\nexport const EmailProvider_SendBatchOutputSchema = z.object({\n // Summary\n totalRequested: z.number().int(),\n totalAccepted: z.number().int(),\n totalRejected: z.number().int(),\n \n // Results per recipient\n results: z.array(z.object({\n email: z.string(),\n id: z.string().optional(),\n status: z.enum([\"accepted\", \"rejected\"]),\n error: z.string().optional(),\n })),\n});\nexport type EmailProvider_SendBatchOutput = z.infer<typeof EmailProvider_SendBatchOutputSchema>;\n\n// ===============================================================\n// Campaign Input Schema (Marketing)\n// ===============================================================\n\nexport const EmailProvider_CreateCampaignInputSchema = z.object({\n // Campaign details\n name: z.string().min(1),\n subject: z.string().min(1),\n previewText: z.string().optional(),\n \n // Sender\n from: EmailProvider_AddressSchema,\n replyTo: EmailProvider_AddressSchema.optional(),\n \n // Content\n html: z.string().optional(),\n text: z.string().optional(),\n templateId: z.string().optional(),\n \n // Recipients\n listIds: z.array(z.string()).optional(),\n segmentIds: z.array(z.string()).optional(),\n \n // Scheduling\n scheduledAt: z.iso.datetime().optional(),\n \n // Tracking\n trackOpens: z.boolean().optional().default(true),\n trackClicks: z.boolean().optional().default(true),\n});\nexport type EmailProvider_CreateCampaignInput = z.infer<typeof EmailProvider_CreateCampaignInputSchema>;\n\n// ===============================================================\n// Campaign Output Schema\n// ===============================================================\n\nexport const EmailProvider_CampaignOutputSchema = z.object({\n id: z.string(),\n status: z.enum([\"draft\", \"scheduled\", \"sending\", \"sent\", \"cancelled\"]),\n scheduledAt: z.iso.datetime().optional(),\n sentAt: z.iso.datetime().optional(),\n});\nexport type EmailProvider_CampaignOutput = z.infer<typeof EmailProvider_CampaignOutputSchema>;\n\n// ===============================================================\n// Message Status Schema\n// ===============================================================\n\nexport const EmailProvider_MessageStatusSchema = z.object({\n id: z.string(),\n status: z.enum(EmailProvider_DeliveryStatus),\n to: z.email(),\n subject: z.string().optional(),\n sentAt: z.iso.datetime().optional(),\n deliveredAt: z.iso.datetime().optional(),\n openedAt: z.iso.datetime().optional(),\n clickedAt: z.iso.datetime().optional(),\n bouncedAt: z.iso.datetime().optional(),\n bounceType: z.enum(EmailProvider_BounceType).optional(),\n bounceReason: z.string().optional(),\n});\nexport type EmailProvider_MessageStatus = z.infer<typeof EmailProvider_MessageStatusSchema>;\n\n// ===============================================================\n// Email Operation Context (for tracking)\n// ===============================================================\n\nexport const EmailProvider_OperationContextSchema = ExternalProvider_OperationContextSchema.extend({\n // Message identification\n messageId: z.string().optional(),\n \n // Delivery info\n deliveryMethod: z.enum(EmailProvider_DeliveryMethod).optional(),\n deliveryStatus: z.enum(EmailProvider_DeliveryStatus).optional(),\n \n // Email type\n emailType: z.enum(EmailProvider_EmailType).optional(),\n \n // Counts\n recipientCount: z.number().int().optional(),\n \n // Rate limit headers from provider\n rateLimitRemaining: z.number().optional(),\n rateLimitResetAt: z.iso.datetime().optional(),\n});\nexport type EmailProvider_OperationContext = z.infer<typeof EmailProvider_OperationContextSchema>;\n\n// ===============================================================\n// Webhook Event Schema\n// ===============================================================\n\nexport const EmailProvider_WebhookEventSchema = z.object({\n eventType: z.enum(EmailProvider_DeliveryStatus),\n messageId: z.string(),\n email: z.email(),\n timestamp: z.iso.datetime(),\n \n // Event-specific data\n bounceType: z.enum(EmailProvider_BounceType).optional(),\n bounceReason: z.string().optional(),\n link: z.url().optional(), // For click events\n userAgent: z.string().optional(),\n \n // Original tags\n tags: z.array(z.string()).optional(),\n});\nexport type EmailProvider_WebhookEvent = z.infer<typeof EmailProvider_WebhookEventSchema>;\n\n// ===============================================================\n// Email Operation Definition\n// ===============================================================\n\nexport type EmailProvider_OperationDefinition = ExternalProvider_OperationDefinition_Base & {\n operationContextSchema: typeof EmailProvider_OperationContextSchema;\n \n // Which email types this operation supports\n supportedEmailTypes: EmailProvider_EmailType[];\n \n // Which delivery methods work for this operation\n supportedDeliveryMethods: EmailProvider_DeliveryMethod[];\n \n // Required capabilities\n requiredCapabilities?: EmailProvider_Capability[];\n};\n\n"]}
|
|
1
|
+
{"version":3,"file":"email.external-connectors-models.schemas.js","sourceRoot":"","sources":["../../../src/protocols/email.external-connectors-models.schemas.ts"],"names":[],"mappings":"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","sourcesContent":["import { z } from \"zod\";\nimport { \n ExternalProvider_ExchangeProtocol_Kind \n} from \"../core/commons.external-connectors-models.schemas\";\nimport { ExternalProvider_OperationContextSchema, ExternalProvider_OperationDefinition_Base } from \"../core/operations.external-connectors-models.schemas\";\n\n//===============================================================\n// Email Provider\n// --------\n// Integration with email service providers for sending transactional\n// and marketing emails. Supports both REST API and SMTP-based providers\n// with differentiated operations for each email type.\n//\n// CONFIGURATION LEVELS:\n// - Profile (Provider-level): Fixed by the provider, cannot be changed.\n// Examples: API endpoints, SMTP server addresses, capabilities, limits.\n// - Configuration (Consumer-level): User-configurable settings.\n// Examples: API keys, sender addresses, tracking preferences, webhooks.\n//===============================================================\n\n// ===============================================================\n// Email Provider Enums\n// ===============================================================\n\n/**\n * The type of email operation - transactional vs marketing have different\n * requirements, compliance rules, and often use separate sending domains/IPs.\n */\nexport enum EmailProvider_EmailType {\n TRANSACTIONAL = \"transactional\", // Password resets, receipts, notifications\n MARKETING = \"marketing\", // Newsletters, promotions, campaigns\n}\n\n/**\n * The delivery method used by the email provider.\n * REST API provides more features, SMTP is simpler but more limited.\n */\nexport enum EmailProvider_DeliveryMethod {\n REST_API = \"rest_api\",\n SMTP = \"smtp\",\n}\n\n/**\n * SMTP encryption/security modes.\n */\nexport enum EmailProvider_SMTP_Security {\n NONE = \"none\", // Plain text (port 25, not recommended)\n STARTTLS = \"starttls\", // Upgrade to TLS (port 587)\n TLS = \"tls\", // Implicit TLS/SSL (port 465)\n}\n\n/**\n * Email delivery status for tracking.\n */\nexport enum EmailProvider_DeliveryStatus {\n QUEUED = \"queued\",\n SENT = \"sent\",\n DELIVERED = \"delivered\",\n OPENED = \"opened\",\n CLICKED = \"clicked\",\n BOUNCED = \"bounced\",\n SOFT_BOUNCED = \"soft_bounced\",\n SPAM_COMPLAINT = \"spam_complaint\",\n UNSUBSCRIBED = \"unsubscribed\",\n DROPPED = \"dropped\",\n DEFERRED = \"deferred\",\n FAILED = \"failed\",\n}\n\n/**\n * Email bounce types.\n */\nexport enum EmailProvider_BounceType {\n HARD = \"hard\", // Permanent failure (address doesn't exist)\n SOFT = \"soft\", // Temporary failure (mailbox full, server down)\n TRANSIENT = \"transient\",\n}\n\n/**\n * Standard email provider operation keys.\n * Each provider implements a subset of these based on capabilities.\n */\nexport enum EmailProvider_OperationKey {\n // Core Transactional Operations\n SEND_EMAIL = \"email.send\",\n SEND_BATCH = \"email.sendBatch\",\n SEND_TEMPLATE = \"email.sendTemplate\",\n \n // Marketing/Campaign Operations\n SEND_CAMPAIGN = \"email.campaign.send\",\n CREATE_CAMPAIGN = \"email.campaign.create\",\n SCHEDULE_CAMPAIGN = \"email.campaign.schedule\",\n GET_CAMPAIGN = \"email.campaign.get\",\n \n // List Management (Marketing)\n LIST_CREATE = \"email.list.create\",\n LIST_ADD_CONTACT = \"email.list.addContact\",\n LIST_REMOVE_CONTACT = \"email.list.removeContact\",\n LIST_GET = \"email.list.get\",\n \n // Template Operations\n TEMPLATE_CREATE = \"email.template.create\",\n TEMPLATE_GET = \"email.template.get\",\n TEMPLATE_LIST = \"email.template.list\",\n TEMPLATE_DELETE = \"email.template.delete\",\n \n // Status & Analytics\n GET_MESSAGE_STATUS = \"email.message.getStatus\",\n GET_ANALYTICS = \"email.analytics.get\",\n \n // Suppression/Bounces\n GET_SUPPRESSIONS = \"email.suppressions.get\",\n ADD_SUPPRESSION = \"email.suppressions.add\",\n DELETE_SUPPRESSION = \"email.suppressions.delete\",\n \n // Domain Verification\n DOMAIN_VERIFY = \"email.domain.verify\",\n DOMAIN_GET_STATUS = \"email.domain.getStatus\",\n}\n\n/**\n * Email provider capabilities - what features the provider supports.\n * Used to determine which operations are available.\n */\nexport enum EmailProvider_Capability {\n // Delivery Methods\n SUPPORTS_REST_API = \"supports_rest_api\",\n SUPPORTS_SMTP = \"supports_smtp\",\n \n // Email Types\n SUPPORTS_TRANSACTIONAL = \"supports_transactional\",\n SUPPORTS_MARKETING = \"supports_marketing\",\n \n // Core Features\n SUPPORTS_TEMPLATES = \"supports_templates\",\n SUPPORTS_BATCH_SENDING = \"supports_batch_sending\",\n SUPPORTS_SCHEDULING = \"supports_scheduling\",\n SUPPORTS_ATTACHMENTS = \"supports_attachments\",\n SUPPORTS_INLINE_IMAGES = \"supports_inline_images\",\n \n // Tracking\n SUPPORTS_OPEN_TRACKING = \"supports_open_tracking\",\n SUPPORTS_CLICK_TRACKING = \"supports_click_tracking\",\n SUPPORTS_WEBHOOKS = \"supports_webhooks\",\n \n // Marketing Specific\n SUPPORTS_CAMPAIGNS = \"supports_campaigns\",\n SUPPORTS_LIST_MANAGEMENT = \"supports_list_management\",\n SUPPORTS_SEGMENTATION = \"supports_segmentation\",\n SUPPORTS_AB_TESTING = \"supports_ab_testing\",\n \n // Compliance & Deliverability\n SUPPORTS_SUPPRESSION_LISTS = \"supports_suppression_lists\",\n SUPPORTS_DEDICATED_IP = \"supports_dedicated_ip\",\n SUPPORTS_CUSTOM_DOMAIN = \"supports_custom_domain\",\n SUPPORTS_EMAIL_VALIDATION = \"supports_email_validation\",\n}\n\n// ===============================================================\n// SMTP Server Profile (Provider-level, fixed)\n// ===============================================================\n\nexport const EmailProvider_SMTP_ServerProfileSchema = z.object({\n host: z.string().min(1),\n port: z.number().int().min(1).max(65535),\n security: z.enum(EmailProvider_SMTP_Security),\n // Note: username/password are consumer-level (in Configuration)\n});\nexport type EmailProvider_SMTP_ServerProfile = z.infer<typeof EmailProvider_SMTP_ServerProfileSchema>;\n\n// ===============================================================\n// Email Address Schema\n// ===============================================================\n\nexport const EmailProvider_AddressSchema = z.object({\n email: z.email(),\n name: z.string().optional(),\n});\nexport type EmailProvider_Address = z.infer<typeof EmailProvider_AddressSchema>;\n\n// ===============================================================\n// Email Attachment Schema\n// ===============================================================\n\nexport const EmailProvider_AttachmentSchema = z.object({\n filename: z.string().min(1),\n content: z.string(), // Base64 encoded content\n contentType: z.string().optional(),\n contentId: z.string().optional(), // For inline images (cid:)\n});\nexport type EmailProvider_Attachment = z.infer<typeof EmailProvider_AttachmentSchema>;\n\n// ===============================================================\n// Send Email Input Schema\n// ===============================================================\n\nexport const EmailProvider_SendEmailInputSchema = z.object({\n // Recipients\n to: z.array(EmailProvider_AddressSchema).min(1),\n cc: z.array(EmailProvider_AddressSchema).optional(),\n bcc: z.array(EmailProvider_AddressSchema).optional(),\n \n // Sender (can override configuration default)\n from: EmailProvider_AddressSchema.optional(),\n replyTo: EmailProvider_AddressSchema.optional(),\n \n // Content\n subject: z.string().min(1),\n text: z.string().optional(),\n html: z.string().optional(),\n \n // Attachments\n attachments: z.array(EmailProvider_AttachmentSchema).optional(),\n \n // Headers\n headers: z.record(z.string(), z.string()).optional(),\n \n // Tags for categorization/analytics\n tags: z.array(z.string()).optional(),\n \n // Scheduling\n scheduledAt: z.iso.datetime().optional(),\n \n // Tracking overrides\n trackOpens: z.boolean().optional(),\n trackClicks: z.boolean().optional(),\n});\nexport type EmailProvider_SendEmailInput = z.infer<typeof EmailProvider_SendEmailInputSchema>;\n\n// ===============================================================\n// Send Email Output Schema\n// ===============================================================\n\nexport const EmailProvider_SendEmailOutputSchema = z.object({\n // Provider's message ID\n id: z.string(),\n \n // Status (if available immediately)\n status: z.enum(EmailProvider_DeliveryStatus).optional(),\n \n // Provider-specific data\n providerMessageId: z.string().optional(),\n});\nexport type EmailProvider_SendEmailOutput = z.infer<typeof EmailProvider_SendEmailOutputSchema>;\n\n// ===============================================================\n// Send Template Email Input Schema\n// ===============================================================\n\nexport const EmailProvider_SendTemplateInputSchema = z.object({\n // Recipients\n to: z.array(EmailProvider_AddressSchema).min(1),\n cc: z.array(EmailProvider_AddressSchema).optional(),\n bcc: z.array(EmailProvider_AddressSchema).optional(),\n \n // Sender\n from: EmailProvider_AddressSchema.optional(),\n replyTo: EmailProvider_AddressSchema.optional(),\n \n // Template\n templateId: z.string().min(1),\n templateAlias: z.string().optional(), // Some providers use alias instead of ID\n \n // Template variables\n variables: z.record(z.string(), z.unknown()).optional(),\n \n // Subject override (if template allows)\n subject: z.string().optional(),\n \n // Tags\n tags: z.array(z.string()).optional(),\n \n // Scheduling\n scheduledAt: z.iso.datetime().optional(),\n});\nexport type EmailProvider_SendTemplateInput = z.infer<typeof EmailProvider_SendTemplateInputSchema>;\n\n// ===============================================================\n// Batch Send Input Schema\n// ===============================================================\n\nconst emailProviderBatchItemSchema = z.object({\n to: EmailProvider_AddressSchema,\n variables: z.record(z.string(), z.unknown()).optional(),\n subject: z.string().optional(), // Override per recipient\n});\n\nexport const EmailProvider_SendBatchInputSchema = z.object({\n // Sender\n from: EmailProvider_AddressSchema.optional(),\n replyTo: EmailProvider_AddressSchema.optional(),\n \n // Content (direct or template)\n subject: z.string().optional(), // Default subject\n text: z.string().optional(),\n html: z.string().optional(),\n templateId: z.string().optional(),\n \n // Recipients with personalizations\n recipients: z.array(emailProviderBatchItemSchema).min(1),\n \n // Tags\n tags: z.array(z.string()).optional(),\n});\nexport type EmailProvider_SendBatchInput = z.infer<typeof EmailProvider_SendBatchInputSchema>;\n\n// ===============================================================\n// Batch Send Output Schema\n// ===============================================================\n\nexport const EmailProvider_SendBatchOutputSchema = z.object({\n // Summary\n totalRequested: z.number().int(),\n totalAccepted: z.number().int(),\n totalRejected: z.number().int(),\n \n // Results per recipient\n results: z.array(z.object({\n email: z.string(),\n id: z.string().optional(),\n status: z.enum([\"accepted\", \"rejected\"]),\n error: z.string().optional(),\n })),\n});\nexport type EmailProvider_SendBatchOutput = z.infer<typeof EmailProvider_SendBatchOutputSchema>;\n\n// ===============================================================\n// Campaign Input Schema (Marketing)\n// ===============================================================\n\nexport const EmailProvider_CreateCampaignInputSchema = z.object({\n // Campaign details\n name: z.string().min(1),\n subject: z.string().min(1),\n previewText: z.string().optional(),\n \n // Sender\n from: EmailProvider_AddressSchema,\n replyTo: EmailProvider_AddressSchema.optional(),\n \n // Content\n html: z.string().optional(),\n text: z.string().optional(),\n templateId: z.string().optional(),\n \n // Recipients\n listIds: z.array(z.string()).optional(),\n segmentIds: z.array(z.string()).optional(),\n \n // Scheduling\n scheduledAt: z.iso.datetime().optional(),\n \n // Tracking\n trackOpens: z.boolean().optional().default(true),\n trackClicks: z.boolean().optional().default(true),\n});\nexport type EmailProvider_CreateCampaignInput = z.infer<typeof EmailProvider_CreateCampaignInputSchema>;\n\n// ===============================================================\n// Campaign Output Schema\n// ===============================================================\n\nexport const EmailProvider_CampaignOutputSchema = z.object({\n id: z.string(),\n status: z.enum([\"draft\", \"scheduled\", \"sending\", \"sent\", \"cancelled\"]),\n scheduledAt: z.iso.datetime().optional(),\n sentAt: z.iso.datetime().optional(),\n});\nexport type EmailProvider_CampaignOutput = z.infer<typeof EmailProvider_CampaignOutputSchema>;\n\n// ===============================================================\n// Message Status Schema\n// ===============================================================\n\nexport const EmailProvider_MessageStatusSchema = z.object({\n id: z.string(),\n status: z.enum(EmailProvider_DeliveryStatus),\n to: z.email(),\n subject: z.string().optional(),\n sentAt: z.iso.datetime().optional(),\n deliveredAt: z.iso.datetime().optional(),\n openedAt: z.iso.datetime().optional(),\n clickedAt: z.iso.datetime().optional(),\n bouncedAt: z.iso.datetime().optional(),\n bounceType: z.enum(EmailProvider_BounceType).optional(),\n bounceReason: z.string().optional(),\n});\nexport type EmailProvider_MessageStatus = z.infer<typeof EmailProvider_MessageStatusSchema>;\n\n// ===============================================================\n// Email Operation Context (for tracking)\n// ===============================================================\n\nexport const EmailProvider_OperationContextSchema = ExternalProvider_OperationContextSchema.extend({\n // Message identification\n messageId: z.string().optional(),\n \n // Delivery info\n deliveryMethod: z.enum(EmailProvider_DeliveryMethod).optional(),\n deliveryStatus: z.enum(EmailProvider_DeliveryStatus).optional(),\n \n // Email type\n emailType: z.enum(EmailProvider_EmailType).optional(),\n \n // Counts\n recipientCount: z.number().int().optional(),\n \n // Rate limit headers from provider\n rateLimitRemaining: z.number().optional(),\n rateLimitResetAt: z.iso.datetime().optional(),\n});\nexport type EmailProvider_OperationContext = z.infer<typeof EmailProvider_OperationContextSchema>;\n\n// ===============================================================\n// Webhook Event Schema\n// ===============================================================\n\nexport const EmailProvider_WebhookEventSchema = z.object({\n eventType: z.enum(EmailProvider_DeliveryStatus),\n messageId: z.string(),\n email: z.email(),\n timestamp: z.iso.datetime(),\n \n // Event-specific data\n bounceType: z.enum(EmailProvider_BounceType).optional(),\n bounceReason: z.string().optional(),\n link: z.url().optional(), // For click events\n userAgent: z.string().optional(),\n \n // Original tags\n tags: z.array(z.string()).optional(),\n});\nexport type EmailProvider_WebhookEvent = z.infer<typeof EmailProvider_WebhookEventSchema>;\n\n// ===============================================================\n// Email Operation Definition\n// ===============================================================\n\nexport type EmailProvider_OperationDefinition = ExternalProvider_OperationDefinition_Base & {\n operationContextSchema: typeof EmailProvider_OperationContextSchema;\n \n // Which email types this operation supports\n supportedEmailTypes: EmailProvider_EmailType[];\n \n // Which delivery methods work for this operation\n supportedDeliveryMethods: EmailProvider_DeliveryMethod[];\n \n // Required capabilities\n requiredCapabilities?: EmailProvider_Capability[];\n};\n\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"email.standard-interface.schemas.d.ts","sourceRoot":"","sources":["
|
|
1
|
+
{"version":3,"file":"email.standard-interface.schemas.d.ts","sourceRoot":"","sources":["../../../src/protocols/email.standard-interface.schemas.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"email.standard-interface.schemas.js","sourceRoot":"","sources":["../../../../src/protocols/email.standard-interface.schemas.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,wBAAwB,EAA2B,4BAA4B,EAAE,MAAM,4CAA4C,CAAC;AAE7I,iEAAiE;AACjE,2BAA2B;AAC3B,WAAW;AACX,qEAAqE;AACrE,gEAAgE;AAChE,+BAA+B;AAC/B,EAAE;AACF,qBAAqB;AACrB,uDAAuD;AACvD,gEAAgE;AAChE,yEAAyE;AACzE,iEAAiE;AAEjE,kEAAkE;AAClE,yBAAyB;AACzB,kEAAkE;AAElE,MAAM,CAAC,MAAM,2BAA2B,GAAG,CAAC,CAAC,MAAM,CAAC;IAClD,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE;IAChB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CAC5B,CAAC,CAAC;AAIH,kEAAkE;AAClE,sBAAsB;AACtB,kEAAkE;AAElE,MAAM,CAAC,MAAM,8BAA8B,GAAG,CAAC,CAAC,MAAM,CAAC;IACrD,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC3B,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,iBAAiB;IACtC,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAClC,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,EAAE,2BAA2B;CAC9D,CAAC,CAAC;AAIH;;;;;;GAMG;AACH,MAAM,CAAN,IAAY,4BAGX;AAHD,WAAY,4BAA4B;IACtC,6CAAa,CAAA;IACb,2EAA2C,CAAA;AAC7C,CAAC,EAHW,4BAA4B,KAA5B,4BAA4B,QAGvC;AAED,8EAA8E;AAC9E,MAAM,CAAN,IAAY,6BAIX;AAJD,WAAY,6BAA6B;IACvC,kDAAiB,CAAA;IACjB,8CAAa,CAAA;IACb,wDAAuB,CAAA;AACzB,CAAC,EAJW,6BAA6B,KAA7B,6BAA6B,QAIxC;AAED,kFAAkF;AAClF,MAAM,CAAN,IAAY,qCAIX;AAJD,WAAY,qCAAqC;IAC/C,8DAAqB,CAAA;IACrB,8DAAqB,CAAA;IACrB,kFAAyC,CAAA;AAC3C,CAAC,EAJW,qCAAqC,KAArC,qCAAqC,QAIhD;AAED,kEAAkE;AAClE,oCAAoC;AACpC,kEAAkE;AAElE,MAAM,CAAC,MAAM,+BAA+B,GAAG,CAAC,CAAC,MAAM,CAAC;IACtD;;;;;;;OAOG;IACH,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC;IAExC,wBAAwB;IACxB,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,2BAA2B,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAC/C,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,2BAA2B,CAAC,CAAC,QAAQ,EAAE;IACnD,GAAG,EAAE,CAAC,CAAC,KAAK,CAAC,2BAA2B,CAAC,CAAC,QAAQ,EAAE;IAEpD,uDAAuD;IACvD,IAAI,EAAE,2BAA2B,CAAC,QAAQ,EAAE;IAC5C,OAAO,EAAE,2BAA2B,CAAC,QAAQ,EAAE;IAE/C,kCAAkC;IAClC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC1B,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC3B,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAE3B,oBAAoB;IACpB,WAAW,EAAE,CAAC,CAAC,KAAK,CAAC,8BAA8B,CAAC,CAAC,QAAQ,EAAE;IAC/D,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;IACpD,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;IAEpC,uDAAuD;IACvD,WAAW,EAAE,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;IAExC,wDAAwD;IACxD,UAAU,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;IAClC,WAAW,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;IAEnC,oCAAoC;IACpC,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;CACtD,CAAC,CAAC,MAAM,CACP,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,EAC5D,EAAE,OAAO,EAAE,yCAAyC,EAAE,CACvD,CAAC;AAIF,kEAAkE;AAClE,qCAAqC;AACrC,kEAAkE;AAElE,MAAM,CAAC,MAAM,gCAAgC,GAAG,CAAC,CAAC,MAAM,CAAC;IACvD,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE;IACpB;;;OAGG;IACH,cAAc,EAAE,CAAC,CAAC,IAAI,CAAC,qCAAqC,CAAC;IAC7D;;;;;OAKG;IACH,kBAAkB,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IAC9C,sFAAsF;IACtF,kBAAkB,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC;QACnC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;QACxB,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;KAC9B,CAAC,CAAC,CAAC,QAAQ,EAAE;IACd;;;;;;;OAOG;IACH,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;IAC3C;;;;OAIG;IACH,SAAS,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;IACjC,6EAA6E;IAC7E,YAAY,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;IACpC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC,QAAQ,EAAE;IACxD,WAAW,EAAE,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;CACzC,CAAC,CAAC,WAAW,CAAC,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE;IACnC,MAAM,QAAQ,GACZ,QAAQ,CAAC,cAAc;YACnB,qCAAqC,CAAC,QAAQ,CAAC;IAErD;;;;;;;;OAQG;IACH,IAAI,QAAQ,CAAC,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAC;QAClC,OAAO,CAAC,QAAQ,CAAC;YACf,IAAI,EAAE,QAAQ;YACd,IAAI,EAAE,CAAC,SAAS,CAAC;YACjB,OAAO,EACL,4DAA4D;SAC/D,CAAC,CAAC;IACL,CAAC;IACD,IAAI,QAAQ,CAAC,OAAO,IAAI,CAAC,QAAQ,CAAC,kBAAkB,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC;QACvE,OAAO,CAAC,QAAQ,CAAC;YACf,IAAI,EAAE,QAAQ;YACd,IAAI,EAAE,CAAC,oBAAoB,CAAC;YAC5B,OAAO,EACL,gEAAgE;SACnE,CAAC,CAAC;IACL,CAAC;IACD,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,kBAAkB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxD,OAAO,CAAC,QAAQ,CAAC;YACf,IAAI,EAAE,QAAQ;YACd,IAAI,EAAE,CAAC,oBAAoB,CAAC;YAC5B,OAAO,EACL,2EAA2E;SAC9E,CAAC,CAAC;IACL,CAAC;IACD,KAAK,MAAM,CAAC,KAAK,EAAE,iBAAiB,CAAC,IAAI,QAAQ,CAAC,kBAAkB,CAAC,OAAO,EAAE,EAAE,CAAC;QAC/E,IAAI,QAAQ,CAAC,kBAAkB,CAAC,OAAO,CAAC,iBAAiB,CAAC,KAAK,KAAK,EAAE,CAAC;YACrE,OAAO,CAAC,QAAQ,CAAC;gBACf,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,CAAC,oBAAoB,EAAE,KAAK,CAAC;gBACnC,OAAO,EAAE,0CAA0C;aACpD,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,KAAK,MAAM,iBAAiB,IAAI;QAC9B,cAAc;QACd,QAAQ;QACR,aAAa;KACL,EAAE,CAAC;QACX,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,iBAAiB,CAAC,KAAK,SAAS,EAAE,CAAC;YAC3D,OAAO,CAAC,QAAQ,CAAC;gBACf,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,CAAC,iBAAiB,CAAC;gBACzB,OAAO,EACL,GAAG,iBAAiB,+CAA+C;aACtE,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IACD,IACE,QAAQ,CAAC,WAAW,KAAK,SAAS;WAC/B,QAAQ,CAAC,MAAM,KAAK,6BAA6B,CAAC,SAAS,EAC9D,CAAC;QACD,OAAO,CAAC,QAAQ,CAAC;YACf,IAAI,EAAE,QAAQ;YACd,IAAI,EAAE,CAAC,aAAa,CAAC;YACrB,OAAO,EACL,0DAA0D;SAC7D,CAAC,CAAC;IACL,CAAC;IACD,IAAI,QAAQ,IAAI,QAAQ,CAAC,SAAS,KAAK,IAAI,EAAE,CAAC;QAC5C,OAAO,CAAC,QAAQ,CAAC;YACf,IAAI,EAAE,QAAQ;YACd,IAAI,EAAE,CAAC,WAAW,CAAC;YACnB,OAAO,EAAE,kDAAkD;SAC5D,CAAC,CAAC;IACL,CAAC;AACH,CAAC,CAAC,CAAC;AAIH,kEAAkE;AAClE,uCAAuC;AACvC,kEAAkE;AAElE,MAAM,CAAC,MAAM,uCAAuC,GAAG,CAAC,CAAC,MAAM,CAAC;IAC9D,aAAa;IACb,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,2BAA2B,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAC/C,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,2BAA2B,CAAC,CAAC,QAAQ,EAAE;IACnD,GAAG,EAAE,CAAC,CAAC,KAAK,CAAC,2BAA2B,CAAC,CAAC,QAAQ,EAAE;IAEpD,SAAS;IACT,IAAI,EAAE,2BAA2B,CAAC,QAAQ,EAAE;IAC5C,OAAO,EAAE,2BAA2B,CAAC,QAAQ,EAAE;IAE/C,yCAAyC;IACzC,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC7B,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,EAAE,oCAAoC;IAC1E,SAAS,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,EAAE;IAEvD,qBAAqB;IACrB,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,EAAE,4BAA4B;IAE5D,oBAAoB;IACpB,WAAW,EAAE,CAAC,CAAC,KAAK,CAAC,8BAA8B,CAAC,CAAC,QAAQ,EAAE;IAC/D,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;IACpC,WAAW,EAAE,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;IAExC,WAAW;IACX,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;CACtD,CAAC,CAAC;AAIH,kEAAkE;AAClE,oCAAoC;AACpC,kEAAkE;AAElE,MAAM,CAAC,MAAM,kCAAkC,GAAG,CAAC,CAAC,MAAM,CAAC;IACzD,EAAE,EAAE,2BAA2B;IAC/B,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,2BAA2B,CAAC,CAAC,QAAQ,EAAE;IACnD,GAAG,EAAE,CAAC,CAAC,KAAK,CAAC,2BAA2B,CAAC,CAAC,QAAQ,EAAE;IACpD,SAAS,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,EAAE;IACvD,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,EAAE,iCAAiC;IACjE,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;CACtD,CAAC,CAAC;AAIH,MAAM,CAAC,MAAM,gCAAgC,GAAG,CAAC,CAAC,MAAM,CAAC;IACvD,kBAAkB;IAClB,IAAI,EAAE,2BAA2B,CAAC,QAAQ,EAAE;IAC5C,OAAO,EAAE,2BAA2B,CAAC,QAAQ,EAAE;IAE/C,+CAA+C;IAC/C,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,EAAE,kBAAkB;IAClD,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC3B,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC3B,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAEjC,qEAAqE;IACrE,UAAU,EAAE,CAAC,CAAC,KAAK,CAAC,kCAAkC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAE9D,oBAAoB;IACpB,WAAW,EAAE,CAAC,CAAC,KAAK,CAAC,8BAA8B,CAAC,CAAC,QAAQ,EAAE;IAC/D,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;IACpC,WAAW,EAAE,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;CACzC,CAAC,CAAC;AAIH,kEAAkE;AAClE,qCAAqC;AACrC,kEAAkE;AAElE,MAAM,CAAC,MAAM,iCAAiC,GAAG,CAAC,CAAC,MAAM,CAAC;IACxD,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE;IACpB,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE;IAChC,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE;IAC/B,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE;IAC/B,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC;QACxB,4FAA4F;QAC5F,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;QACxB,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE;QACpB,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QAChC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;KAC7B,CAAC,CAAC;CACJ,CAAC,CAAC;AAIH,kEAAkE;AAClE,qBAAqB;AACrB,kEAAkE;AAElE,MAAM,CAAC,MAAM,+BAA+B,GAAG,CAAC,CAAC,MAAM,CAAC;IACtD,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE;IAChB,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAChC,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC/B,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC5B,UAAU,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,EAAE;CACzD,CAAC,CAAC;AAIH,kEAAkE;AAClE,kBAAkB;AAClB,kEAAkE;AAElE,MAAM,CAAC,MAAM,4BAA4B,GAAG,CAAC,CAAC,MAAM,CAAC;IACnD,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,EAAE,6BAA6B;IACxD,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACvB,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CACnC,CAAC,CAAC;AAIH,kEAAkE;AAClE,wCAAwC;AACxC,kEAAkE;AAElE,MAAM,CAAC,MAAM,gCAAgC,GAAG,CAAC,CAAC,MAAM,CAAC;IACvD,8DAA8D;IAC9D,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC;QACb,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QACzB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QAC3B,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;KACnC,CAAC,CAAC,MAAM,CACP,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,KAAK,SAAS,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,EAC1D,EAAE,OAAO,EAAE,yCAAyC,EAAE,CACvD;IAED,yDAAyD;IACzD,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,+BAA+B,CAAC,CAAC,QAAQ,EAAE;CAC9D,CAAC,CAAC;AAIH,kEAAkE;AAClE,8BAA8B;AAC9B,kEAAkE;AAElE,MAAM,CAAC,MAAM,+BAA+B,GAAG,CAAC,CAAC,MAAM,CAAC;IACtD,iCAAiC;IACjC,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACjC,iBAAiB,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,EAAE;IAE/D,kCAAkC;IAClC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC9B,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC3B,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC3B,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAElC,cAAc;IACd,WAAW,EAAE,CAAC,CAAC,KAAK,CAAC,8BAA8B,CAAC,CAAC,QAAQ,EAAE;CAChE,CAAC,CAAC,MAAM,CACP,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,KAAK,SAAS,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS,EACrE,EAAE,OAAO,EAAE,0CAA0C,EAAE,CACxD,CAAC;AAIF,kEAAkE;AAClE,8BAA8B;AAC9B,kEAAkE;AAElE,MAAM,CAAC,MAAM,uCAAuC,GAAG,CAAC,CAAC,MAAM,CAAC;IAC9D,gBAAgB;IAChB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAEvB,SAAS;IACT,IAAI,EAAE,2BAA2B;IACjC,OAAO,EAAE,2BAA2B,CAAC,QAAQ,EAAE;IAE/C,WAAW;IACX,QAAQ,EAAE,gCAAgC;IAE1C,UAAU;IACV,OAAO,EAAE,+BAA+B;IAExC,YAAY;IACZ,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC;QACjB,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;QACnC,eAAe,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;KACxC,CAAC,CAAC,QAAQ,EAAE;IAEb,WAAW;IACX,UAAU,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;IAChD,WAAW,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;IAEjD,OAAO;IACP,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;IAEpC,WAAW;IACX,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;CACtD,CAAC,CAAC;AAIH,kEAAkE;AAClE,+BAA+B;AAC/B,kEAAkE;AAElE,MAAM,CAAC,MAAM,wCAAwC,GAAG,CAAC,CAAC,MAAM,CAAC;IAC/D,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE;IACpB,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE;IACtB,kBAAkB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACzC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC;IACtE,WAAW,EAAE,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;IACxC,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC7B,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE;CAC1C,CAAC,CAAC;AAIH,kEAAkE;AAClE,kCAAkC;AAClC,kEAAkE;AAElE,MAAM,CAAC,MAAM,oCAAoC,GAAG,CAAC,CAAC,MAAM,CAAC;IAC3D,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;CAC7B,CAAC,CAAC;AAIH,MAAM,CAAC,MAAM,qCAAqC,GAAG,CAAC,CAAC,MAAM,CAAC;IAC5D,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;IACrB,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,4BAA4B,CAAC;IAC5C,EAAE,EAAE,CAAC,CAAC,KAAK,EAAE;IACb,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC9B,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;IACnC,WAAW,EAAE,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;IACxC,QAAQ,EAAE,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;IACrC,SAAS,EAAE,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;IACtC,SAAS,EAAE,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;IACtC,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CACpC,CAAC,CAAC;AAIH,kEAAkE;AAClE,iBAAiB;AACjB,kEAAkE;AAElE,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,CAAC,MAAM,CAAC;IAChD,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC;QACX,kBAAkB;QAClB,gBAAgB;QAChB,0BAA0B;QAC1B,yBAAyB;QACzB,0BAA0B;QAC1B,oBAAoB;QACpB,qBAAqB;QACrB,uBAAuB;QACvB,gBAAgB;QAChB,eAAe;KAChB,CAAC;IACF,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;IACnB,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC/B,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;IAE/B,8DAA8D;IAC9D,kBAAkB,EAAE,CAAC,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC,QAAQ,EAAE;IAC/D,kBAAkB,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;CACnD,CAAC,CAAC;AAIH,kEAAkE;AAClE,0BAA0B;AAC1B,kEAAkE;AAElE;;;GAGG;AACH,MAAM,CAAC,MAAM,mCAAmC,GAAG;IACjD,SAAS,EAAE,EAAgC,EAAE,mCAAmC;IAChF,YAAY,EAAE,CAAC,wBAAwB,CAAC,kBAAkB,CAAC;IAC3D,SAAS,EAAE,CAAC,wBAAwB,CAAC,sBAAsB,CAAC;IAC5D,aAAa,EAAE,CAAC,wBAAwB,CAAC,mBAAmB,CAAC;IAC7D,YAAY,EAAE,CAAC,wBAAwB,CAAC,kBAAkB,EAAE,wBAAwB,CAAC,kBAAkB,CAAC;IACxG,UAAU,EAAE,CAAC,wBAAwB,CAAC,wBAAwB,CAAC;CACvD,CAAC","sourcesContent":["import { z } from \"zod\";\nimport { EmailProvider_Capability, EmailProvider_EmailType, EmailProvider_DeliveryStatus } from \"./email.external-connectors-models.schemas\";\n\n//===============================================================\n// Standard Email Interface\n// --------\n// This is the canonical interface that Wildo uses internally to send\n// emails. The ETL layer transforms these standard requests into\n// provider-specific API calls.\n//\n// Design Principles:\n// 1. Provider-agnostic - works with any email provider\n// 2. Capability-aware - validates against provider capabilities\n// 3. Extensible - new fields can be added without breaking existing code\n//===============================================================\n\n// ===============================================================\n// Standard Email Address\n// ===============================================================\n\nexport const StandardEmail_AddressSchema = z.object({\n email: z.email(),\n name: z.string().optional(),\n});\n\nexport type StandardEmail_Address = z.infer<typeof StandardEmail_AddressSchema>;\n\n// ===============================================================\n// Standard Attachment\n// ===============================================================\n\nexport const StandardEmail_AttachmentSchema = z.object({\n filename: z.string().min(1),\n content: z.string(), // Base64 encoded\n contentType: z.string().optional(),\n contentId: z.string().optional(), // For inline images (cid:)\n});\n\nexport type StandardEmail_Attachment = z.infer<typeof StandardEmail_AttachmentSchema>;\n\n/**\n * Wire encoding used by a network email provider gateway.\n *\n * This vocabulary is deliberately closed and explicit on every provider\n * contract: JSON and multipart data require materially different headers and\n * serialization. There is no implicit default.\n */\nexport enum EmailProviderPayloadEncoding {\n JSON = \"json\",\n MULTIPART_FORM_DATA = \"multipart-form-data\",\n}\n\n/** Provider acknowledgement state returned by a synchronous send endpoint. */\nexport enum EmailProviderSubmissionStatus {\n QUEUED = \"queued\",\n SENT = \"sent\",\n SCHEDULED = \"scheduled\",\n}\n\n/** Provider-owned classification for HTTP responses whose status is ambiguous. */\nexport enum EmailProviderSubmissionClassification {\n ACCEPTED = \"accepted\",\n REJECTED = \"rejected\",\n ACCEPTANCE_UNKNOWN = \"acceptance_unknown\",\n}\n\n// ===============================================================\n// TRANSACTIONAL: Send Email Request\n// ===============================================================\n\nexport const StandardEmail_SendRequestSchema = z.object({\n /**\n * Stable identity of ONE logical provider submission across retries.\n *\n * Deliberately not named `idempotencyKey`: it remains the framework's\n * correlation identity even when the selected provider cannot enforce\n * idempotency. Provider gateways may map it to a native idempotency field as\n * an optional duplicate-risk reduction.\n */\n submissionId: z.string().min(1).max(256),\n\n // Recipients (required)\n to: z.array(StandardEmail_AddressSchema).min(1),\n cc: z.array(StandardEmail_AddressSchema).optional(),\n bcc: z.array(StandardEmail_AddressSchema).optional(),\n \n // Sender (required unless provider config has default)\n from: StandardEmail_AddressSchema.optional(),\n replyTo: StandardEmail_AddressSchema.optional(),\n \n // Content (html OR text required)\n subject: z.string().min(1),\n html: z.string().optional(),\n text: z.string().optional(),\n \n // Optional features\n attachments: z.array(StandardEmail_AttachmentSchema).optional(),\n headers: z.record(z.string(), z.string()).optional(),\n tags: z.array(z.string()).optional(),\n \n // Scheduling (optional - requires SUPPORTS_SCHEDULING)\n scheduledAt: z.iso.datetime().optional(),\n \n // Tracking (optional, uses provider default if not set)\n trackOpens: z.boolean().optional(),\n trackClicks: z.boolean().optional(),\n \n // Metadata for correlation/tracking\n metadata: z.record(z.string(), z.string()).optional(),\n}).refine(\n (data) => data.html !== undefined || data.text !== undefined,\n { message: \"Either html or text content is required\" }\n);\n\nexport type StandardEmail_SendRequest = z.infer<typeof StandardEmail_SendRequestSchema>;\n\n// ===============================================================\n// TRANSACTIONAL: Send Email Response\n// ===============================================================\n\nexport const StandardEmail_SendResponseSchema = z.object({\n success: z.boolean(),\n /**\n * Mandatory provider-owned submission meaning. HTTP status, receipt shape,\n * and recipient-level `success` are not interchangeable across providers.\n */\n classification: z.enum(EmailProviderSubmissionClassification),\n /**\n * Provider-assigned receipts. An array is required because Brevo and\n * Mailchimp may acknowledge several recipient messages in one response.\n * Empty is honest for a successful non-delivery preview or a provider that\n * accepted the request without returning a receipt.\n */\n providerMessageIds: z.array(z.string().min(1)),\n /** Per-recipient rejections returned inside an otherwise successful HTTP response. */\n rejectedRecipients: z.array(z.object({\n email: z.string().min(1),\n reason: z.string().optional(),\n })).optional(),\n /**\n * Provider-declared detail explaining its explicit classification, including\n * semantic rejection or an ambiguous idempotency/processing conflict.\n *\n * CONTENT-FREE: the vendor's own code or error name, never the vendor's message, which routinely quotes the refused\n * address or the payload. The engine logs this text and returns it in batch results, and a log outlives an erasure\n * (#2251).\n */\n providerError: z.string().min(1).optional(),\n /**\n * Whether the caller should retry this response under at-least-once\n * semantics. For an acceptance-unknown response, a retry may duplicate a\n * message unless the selected provider happens to enforce the submission id.\n */\n retryable: z.boolean().optional(),\n /** Provider reports that this submission identity was already suppressed. */\n deduplicated: z.boolean().optional(),\n status: z.enum(EmailProviderSubmissionStatus).optional(),\n scheduledAt: z.iso.datetime().optional(),\n}).superRefine((response, context) => {\n const accepted =\n response.classification\n === EmailProviderSubmissionClassification.ACCEPTED;\n\n /**\n * `success` describes whole-request success, whereas `classification`\n * describes whether any provider submission was accepted. Once a provider\n * adapter classifies a submission as accepted, auxiliary result metadata\n * must never turn that acknowledgement into permission to replay. A false\n * `success` may describe an honest partial result (for example Mailchimp)\n * or anomalous adapter metadata; `rejectedRecipients` is therefore useful\n * evidence, but not a prerequisite for preserving acceptance.\n */\n if (response.success && !accepted) {\n context.addIssue({\n code: 'custom',\n path: ['success'],\n message:\n 'A successful email response must be classified as accepted',\n });\n }\n if (response.success && (response.rejectedRecipients?.length ?? 0) > 0) {\n context.addIssue({\n code: 'custom',\n path: ['rejectedRecipients'],\n message:\n 'A successful email response cannot contain rejected recipients',\n });\n }\n if (!accepted && response.providerMessageIds.length > 0) {\n context.addIssue({\n code: 'custom',\n path: ['providerMessageIds'],\n message:\n 'A non-accepted email response cannot contain provider acceptance receipts',\n });\n }\n for (const [index, providerMessageId] of response.providerMessageIds.entries()) {\n if (response.providerMessageIds.indexOf(providerMessageId) !== index) {\n context.addIssue({\n code: 'custom',\n path: ['providerMessageIds', index],\n message: 'Provider message receipts must be unique',\n });\n }\n }\n\n for (const acceptedOnlyField of [\n 'deduplicated',\n 'status',\n 'scheduledAt',\n ] as const) {\n if (!accepted && response[acceptedOnlyField] !== undefined) {\n context.addIssue({\n code: 'custom',\n path: [acceptedOnlyField],\n message:\n `${acceptedOnlyField} is valid only for an accepted email response`,\n });\n }\n }\n if (\n response.scheduledAt !== undefined\n && response.status !== EmailProviderSubmissionStatus.SCHEDULED\n ) {\n context.addIssue({\n code: 'custom',\n path: ['scheduledAt'],\n message:\n 'A scheduledAt receipt requires provider status scheduled',\n });\n }\n if (accepted && response.retryable === true) {\n context.addIssue({\n code: 'custom',\n path: ['retryable'],\n message: 'An accepted email response cannot request replay',\n });\n }\n});\n\nexport type StandardEmail_SendResponse = z.infer<typeof StandardEmail_SendResponseSchema>;\n\n// ===============================================================\n// TRANSACTIONAL: Send Template Request\n// ===============================================================\n\nexport const StandardEmail_SendTemplateRequestSchema = z.object({\n // Recipients\n to: z.array(StandardEmail_AddressSchema).min(1),\n cc: z.array(StandardEmail_AddressSchema).optional(),\n bcc: z.array(StandardEmail_AddressSchema).optional(),\n \n // Sender\n from: StandardEmail_AddressSchema.optional(),\n replyTo: StandardEmail_AddressSchema.optional(),\n \n // Template (requires SUPPORTS_TEMPLATES)\n templateId: z.string().min(1),\n templateAlias: z.string().optional(), // Alternative identifier (Postmark)\n variables: z.record(z.string(), z.unknown()).optional(),\n \n // Optional overrides\n subject: z.string().optional(), // Override template subject\n \n // Optional features\n attachments: z.array(StandardEmail_AttachmentSchema).optional(),\n tags: z.array(z.string()).optional(),\n scheduledAt: z.iso.datetime().optional(),\n \n // Metadata\n metadata: z.record(z.string(), z.string()).optional(),\n});\n\nexport type StandardEmail_SendTemplateRequest = z.infer<typeof StandardEmail_SendTemplateRequestSchema>;\n\n// ===============================================================\n// TRANSACTIONAL: Batch Send Request\n// ===============================================================\n\nexport const StandardEmail_BatchRecipientSchema = z.object({\n to: StandardEmail_AddressSchema,\n cc: z.array(StandardEmail_AddressSchema).optional(),\n bcc: z.array(StandardEmail_AddressSchema).optional(),\n variables: z.record(z.string(), z.unknown()).optional(),\n subject: z.string().optional(), // Per-recipient subject override\n metadata: z.record(z.string(), z.string()).optional(),\n});\n\nexport type StandardEmail_BatchRecipient = z.infer<typeof StandardEmail_BatchRecipientSchema>;\n\nexport const StandardEmail_BatchRequestSchema = z.object({\n // Sender (shared)\n from: StandardEmail_AddressSchema.optional(),\n replyTo: StandardEmail_AddressSchema.optional(),\n \n // Content (shared - either direct or template)\n subject: z.string().optional(), // Default subject\n html: z.string().optional(),\n text: z.string().optional(),\n templateId: z.string().optional(),\n \n // Recipients with personalizations (requires SUPPORTS_BATCH_SENDING)\n recipients: z.array(StandardEmail_BatchRecipientSchema).min(1),\n \n // Optional features\n attachments: z.array(StandardEmail_AttachmentSchema).optional(),\n tags: z.array(z.string()).optional(),\n scheduledAt: z.iso.datetime().optional(),\n});\n\nexport type StandardEmail_BatchRequest = z.infer<typeof StandardEmail_BatchRequestSchema>;\n\n// ===============================================================\n// TRANSACTIONAL: Batch Send Response\n// ===============================================================\n\nexport const StandardEmail_BatchResponseSchema = z.object({\n success: z.boolean(),\n totalRequested: z.number().int(),\n totalAccepted: z.number().int(),\n totalRejected: z.number().int(),\n results: z.array(z.object({\n // Email address OR summary identifier (e.g. \"batch\" when provider returns aggregate result)\n email: z.string().min(1),\n success: z.boolean(),\n messageId: z.string().optional(),\n error: z.string().optional(),\n })),\n});\n\nexport type StandardEmail_BatchResponse = z.infer<typeof StandardEmail_BatchResponseSchema>;\n\n// ===============================================================\n// MARKETING: Contact\n// ===============================================================\n\nexport const StandardMarketing_ContactSchema = z.object({\n email: z.email(),\n firstName: z.string().optional(),\n lastName: z.string().optional(),\n phone: z.string().optional(),\n attributes: z.record(z.string(), z.unknown()).optional(),\n});\n\nexport type StandardMarketing_Contact = z.infer<typeof StandardMarketing_ContactSchema>;\n\n// ===============================================================\n// MARKETING: List\n// ===============================================================\n\nexport const StandardMarketing_ListSchema = z.object({\n id: z.string().optional(), // Provider assigns on create\n name: z.string().min(1),\n description: z.string().optional(),\n});\n\nexport type StandardMarketing_List = z.infer<typeof StandardMarketing_ListSchema>;\n\n// ===============================================================\n// MARKETING: Audience (List + Contacts)\n// ===============================================================\n\nexport const StandardMarketing_AudienceSchema = z.object({\n // List reference (use existing by ID, or create/find by name)\n list: z.object({\n id: z.string().optional(),\n name: z.string().optional(),\n description: z.string().optional(),\n }).refine(\n (data) => data.id !== undefined || data.name !== undefined,\n { message: \"Either list.id or list.name is required\" }\n ),\n \n // Contacts to add/sync (optional if using existing list)\n contacts: z.array(StandardMarketing_ContactSchema).optional(),\n});\n\nexport type StandardMarketing_Audience = z.infer<typeof StandardMarketing_AudienceSchema>;\n\n// ===============================================================\n// MARKETING: Campaign Content\n// ===============================================================\n\nexport const StandardMarketing_ContentSchema = z.object({\n // Use template OR inline content\n templateId: z.string().optional(),\n templateVariables: z.record(z.string(), z.unknown()).optional(),\n \n // Inline content (if no template)\n subject: z.string().optional(),\n html: z.string().optional(),\n text: z.string().optional(),\n previewText: z.string().optional(),\n \n // Attachments\n attachments: z.array(StandardEmail_AttachmentSchema).optional(),\n}).refine(\n (data) => data.templateId !== undefined || data.subject !== undefined,\n { message: \"Either templateId or subject is required\" }\n);\n\nexport type StandardMarketing_Content = z.infer<typeof StandardMarketing_ContentSchema>;\n\n// ===============================================================\n// MARKETING: Campaign Request\n// ===============================================================\n\nexport const StandardMarketing_CampaignRequestSchema = z.object({\n // Campaign name\n name: z.string().min(1),\n \n // Sender\n from: StandardEmail_AddressSchema,\n replyTo: StandardEmail_AddressSchema.optional(),\n \n // Audience\n audience: StandardMarketing_AudienceSchema,\n \n // Content\n content: StandardMarketing_ContentSchema,\n \n // Execution\n schedule: z.object({\n sendAt: z.iso.datetime().optional(),\n sendImmediately: z.boolean().optional(),\n }).optional(),\n \n // Tracking\n trackOpens: z.boolean().optional().default(true),\n trackClicks: z.boolean().optional().default(true),\n \n // Tags\n tags: z.array(z.string()).optional(),\n \n // Metadata\n metadata: z.record(z.string(), z.string()).optional(),\n});\n\nexport type StandardMarketing_CampaignRequest = z.infer<typeof StandardMarketing_CampaignRequestSchema>;\n\n// ===============================================================\n// MARKETING: Campaign Response\n// ===============================================================\n\nexport const StandardMarketing_CampaignResponseSchema = z.object({\n success: z.boolean(),\n campaignId: z.string(),\n providerCampaignId: z.string().optional(),\n status: z.enum([\"draft\", \"scheduled\", \"sending\", \"sent\", \"cancelled\"]),\n scheduledAt: z.iso.datetime().optional(),\n listId: z.string().optional(),\n audienceSize: z.number().int().optional(),\n});\n\nexport type StandardMarketing_CampaignResponse = z.infer<typeof StandardMarketing_CampaignResponseSchema>;\n\n// ===============================================================\n// Message Status Request/Response\n// ===============================================================\n\nexport const StandardEmail_GetStatusRequestSchema = z.object({\n messageId: z.string().min(1),\n});\n\nexport type StandardEmail_GetStatusRequest = z.infer<typeof StandardEmail_GetStatusRequestSchema>;\n\nexport const StandardEmail_GetStatusResponseSchema = z.object({\n messageId: z.string(),\n status: z.enum(EmailProvider_DeliveryStatus),\n to: z.email(),\n subject: z.string().optional(),\n sentAt: z.iso.datetime().optional(),\n deliveredAt: z.iso.datetime().optional(),\n openedAt: z.iso.datetime().optional(),\n clickedAt: z.iso.datetime().optional(),\n bouncedAt: z.iso.datetime().optional(),\n bounceReason: z.string().optional(),\n});\n\nexport type StandardEmail_GetStatusResponse = z.infer<typeof StandardEmail_GetStatusResponseSchema>;\n\n// ===============================================================\n// Standard Error\n// ===============================================================\n\nexport const StandardEmail_ErrorSchema = z.object({\n code: z.enum([\n \"VALIDATION_ERROR\",\n \"PROVIDER_ERROR\",\n \"CAPABILITY_NOT_SUPPORTED\",\n \"MARKETING_NOT_SUPPORTED\",\n \"SCHEDULING_NOT_SUPPORTED\",\n \"TEMPLATE_NOT_FOUND\",\n \"RATE_LIMIT_EXCEEDED\",\n \"AUTHENTICATION_FAILED\",\n \"QUOTA_EXCEEDED\",\n \"UNKNOWN_ERROR\",\n ]),\n message: z.string(),\n provider: z.string().optional(),\n details: z.unknown().optional(),\n \n // For capability errors - dynamically populated from registry\n requiredCapability: z.enum(EmailProvider_Capability).optional(),\n supportedProviders: z.array(z.string()).optional(),\n});\n\nexport type StandardEmail_Error = z.infer<typeof StandardEmail_ErrorSchema>;\n\n// ===============================================================\n// Capability Requirements\n// ===============================================================\n\n/**\n * Maps standard operations to required capabilities.\n * Used by the ETL layer to validate provider support.\n */\nexport const StandardEmail_OperationCapabilities = {\n sendEmail: [] as EmailProvider_Capability[], // All providers support basic send\n sendTemplate: [EmailProvider_Capability.SUPPORTS_TEMPLATES],\n sendBatch: [EmailProvider_Capability.SUPPORTS_BATCH_SENDING],\n sendScheduled: [EmailProvider_Capability.SUPPORTS_SCHEDULING],\n sendCampaign: [EmailProvider_Capability.SUPPORTS_MARKETING, EmailProvider_Capability.SUPPORTS_CAMPAIGNS],\n manageList: [EmailProvider_Capability.SUPPORTS_LIST_MANAGEMENT],\n} as const;\n\nexport type StandardEmail_Operation = keyof typeof StandardEmail_OperationCapabilities;\n"]}
|
|
1
|
+
{"version":3,"file":"email.standard-interface.schemas.js","sourceRoot":"","sources":["../../../src/protocols/email.standard-interface.schemas.ts"],"names":[],"mappings":"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","sourcesContent":["import { z } from \"zod\";\nimport { EmailProvider_Capability, EmailProvider_EmailType, EmailProvider_DeliveryStatus } from \"./email.external-connectors-models.schemas\";\n\n//===============================================================\n// Standard Email Interface\n// --------\n// This is the canonical interface that Wildo uses internally to send\n// emails. The ETL layer transforms these standard requests into\n// provider-specific API calls.\n//\n// Design Principles:\n// 1. Provider-agnostic - works with any email provider\n// 2. Capability-aware - validates against provider capabilities\n// 3. Extensible - new fields can be added without breaking existing code\n//===============================================================\n\n// ===============================================================\n// Standard Email Address\n// ===============================================================\n\nexport const StandardEmail_AddressSchema = z.object({\n email: z.email(),\n name: z.string().optional(),\n});\n\nexport type StandardEmail_Address = z.infer<typeof StandardEmail_AddressSchema>;\n\n// ===============================================================\n// Standard Attachment\n// ===============================================================\n\nexport const StandardEmail_AttachmentSchema = z.object({\n filename: z.string().min(1),\n content: z.string(), // Base64 encoded\n contentType: z.string().optional(),\n contentId: z.string().optional(), // For inline images (cid:)\n});\n\nexport type StandardEmail_Attachment = z.infer<typeof StandardEmail_AttachmentSchema>;\n\n/**\n * Wire encoding used by a network email provider gateway.\n *\n * This vocabulary is deliberately closed and explicit on every provider\n * contract: JSON and multipart data require materially different headers and\n * serialization. There is no implicit default.\n */\nexport enum EmailProviderPayloadEncoding {\n JSON = \"json\",\n MULTIPART_FORM_DATA = \"multipart-form-data\",\n}\n\n/** Provider acknowledgement state returned by a synchronous send endpoint. */\nexport enum EmailProviderSubmissionStatus {\n QUEUED = \"queued\",\n SENT = \"sent\",\n SCHEDULED = \"scheduled\",\n}\n\n/** Provider-owned classification for HTTP responses whose status is ambiguous. */\nexport enum EmailProviderSubmissionClassification {\n ACCEPTED = \"accepted\",\n REJECTED = \"rejected\",\n ACCEPTANCE_UNKNOWN = \"acceptance_unknown\",\n}\n\n// ===============================================================\n// TRANSACTIONAL: Send Email Request\n// ===============================================================\n\nexport const StandardEmail_SendRequestSchema = z.object({\n /**\n * Stable identity of ONE logical provider submission across retries.\n *\n * Deliberately not named `idempotencyKey`: it remains the framework's\n * correlation identity even when the selected provider cannot enforce\n * idempotency. Provider gateways may map it to a native idempotency field as\n * an optional duplicate-risk reduction.\n */\n submissionId: z.string().min(1).max(256),\n\n // Recipients (required)\n to: z.array(StandardEmail_AddressSchema).min(1),\n cc: z.array(StandardEmail_AddressSchema).optional(),\n bcc: z.array(StandardEmail_AddressSchema).optional(),\n \n // Sender (required unless provider config has default)\n from: StandardEmail_AddressSchema.optional(),\n replyTo: StandardEmail_AddressSchema.optional(),\n \n // Content (html OR text required)\n subject: z.string().min(1),\n html: z.string().optional(),\n text: z.string().optional(),\n \n // Optional features\n attachments: z.array(StandardEmail_AttachmentSchema).optional(),\n headers: z.record(z.string(), z.string()).optional(),\n tags: z.array(z.string()).optional(),\n \n // Scheduling (optional - requires SUPPORTS_SCHEDULING)\n scheduledAt: z.iso.datetime().optional(),\n \n // Tracking (optional, uses provider default if not set)\n trackOpens: z.boolean().optional(),\n trackClicks: z.boolean().optional(),\n \n // Metadata for correlation/tracking\n metadata: z.record(z.string(), z.string()).optional(),\n}).refine(\n (data) => data.html !== undefined || data.text !== undefined,\n { message: \"Either html or text content is required\" }\n);\n\nexport type StandardEmail_SendRequest = z.infer<typeof StandardEmail_SendRequestSchema>;\n\n// ===============================================================\n// TRANSACTIONAL: Send Email Response\n// ===============================================================\n\nexport const StandardEmail_SendResponseSchema = z.object({\n success: z.boolean(),\n /**\n * Mandatory provider-owned submission meaning. HTTP status, receipt shape,\n * and recipient-level `success` are not interchangeable across providers.\n */\n classification: z.enum(EmailProviderSubmissionClassification),\n /**\n * Provider-assigned receipts. An array is required because Brevo and\n * Mailchimp may acknowledge several recipient messages in one response.\n * Empty is honest for a successful non-delivery preview or a provider that\n * accepted the request without returning a receipt.\n */\n providerMessageIds: z.array(z.string().min(1)),\n /** Per-recipient rejections returned inside an otherwise successful HTTP response. */\n rejectedRecipients: z.array(z.object({\n email: z.string().min(1),\n reason: z.string().optional(),\n })).optional(),\n /**\n * Provider-declared detail explaining its explicit classification, including\n * semantic rejection or an ambiguous idempotency/processing conflict.\n *\n * CONTENT-FREE: the vendor's own code or error name, never the vendor's message, which routinely quotes the refused\n * address or the payload. The engine logs this text and returns it in batch results, and a log outlives an erasure\n * (#2251).\n */\n providerError: z.string().min(1).optional(),\n /**\n * Whether the caller should retry this response under at-least-once\n * semantics. For an acceptance-unknown response, a retry may duplicate a\n * message unless the selected provider happens to enforce the submission id.\n */\n retryable: z.boolean().optional(),\n /** Provider reports that this submission identity was already suppressed. */\n deduplicated: z.boolean().optional(),\n status: z.enum(EmailProviderSubmissionStatus).optional(),\n scheduledAt: z.iso.datetime().optional(),\n}).superRefine((response, context) => {\n const accepted =\n response.classification\n === EmailProviderSubmissionClassification.ACCEPTED;\n\n /**\n * `success` describes whole-request success, whereas `classification`\n * describes whether any provider submission was accepted. Once a provider\n * adapter classifies a submission as accepted, auxiliary result metadata\n * must never turn that acknowledgement into permission to replay. A false\n * `success` may describe an honest partial result (for example Mailchimp)\n * or anomalous adapter metadata; `rejectedRecipients` is therefore useful\n * evidence, but not a prerequisite for preserving acceptance.\n */\n if (response.success && !accepted) {\n context.addIssue({\n code: 'custom',\n path: ['success'],\n message:\n 'A successful email response must be classified as accepted',\n });\n }\n if (response.success && (response.rejectedRecipients?.length ?? 0) > 0) {\n context.addIssue({\n code: 'custom',\n path: ['rejectedRecipients'],\n message:\n 'A successful email response cannot contain rejected recipients',\n });\n }\n if (!accepted && response.providerMessageIds.length > 0) {\n context.addIssue({\n code: 'custom',\n path: ['providerMessageIds'],\n message:\n 'A non-accepted email response cannot contain provider acceptance receipts',\n });\n }\n for (const [index, providerMessageId] of response.providerMessageIds.entries()) {\n if (response.providerMessageIds.indexOf(providerMessageId) !== index) {\n context.addIssue({\n code: 'custom',\n path: ['providerMessageIds', index],\n message: 'Provider message receipts must be unique',\n });\n }\n }\n\n for (const acceptedOnlyField of [\n 'deduplicated',\n 'status',\n 'scheduledAt',\n ] as const) {\n if (!accepted && response[acceptedOnlyField] !== undefined) {\n context.addIssue({\n code: 'custom',\n path: [acceptedOnlyField],\n message:\n `${acceptedOnlyField} is valid only for an accepted email response`,\n });\n }\n }\n if (\n response.scheduledAt !== undefined\n && response.status !== EmailProviderSubmissionStatus.SCHEDULED\n ) {\n context.addIssue({\n code: 'custom',\n path: ['scheduledAt'],\n message:\n 'A scheduledAt receipt requires provider status scheduled',\n });\n }\n if (accepted && response.retryable === true) {\n context.addIssue({\n code: 'custom',\n path: ['retryable'],\n message: 'An accepted email response cannot request replay',\n });\n }\n});\n\nexport type StandardEmail_SendResponse = z.infer<typeof StandardEmail_SendResponseSchema>;\n\n// ===============================================================\n// TRANSACTIONAL: Send Template Request\n// ===============================================================\n\nexport const StandardEmail_SendTemplateRequestSchema = z.object({\n // Recipients\n to: z.array(StandardEmail_AddressSchema).min(1),\n cc: z.array(StandardEmail_AddressSchema).optional(),\n bcc: z.array(StandardEmail_AddressSchema).optional(),\n \n // Sender\n from: StandardEmail_AddressSchema.optional(),\n replyTo: StandardEmail_AddressSchema.optional(),\n \n // Template (requires SUPPORTS_TEMPLATES)\n templateId: z.string().min(1),\n templateAlias: z.string().optional(), // Alternative identifier (Postmark)\n variables: z.record(z.string(), z.unknown()).optional(),\n \n // Optional overrides\n subject: z.string().optional(), // Override template subject\n \n // Optional features\n attachments: z.array(StandardEmail_AttachmentSchema).optional(),\n tags: z.array(z.string()).optional(),\n scheduledAt: z.iso.datetime().optional(),\n \n // Metadata\n metadata: z.record(z.string(), z.string()).optional(),\n});\n\nexport type StandardEmail_SendTemplateRequest = z.infer<typeof StandardEmail_SendTemplateRequestSchema>;\n\n// ===============================================================\n// TRANSACTIONAL: Batch Send Request\n// ===============================================================\n\nexport const StandardEmail_BatchRecipientSchema = z.object({\n to: StandardEmail_AddressSchema,\n cc: z.array(StandardEmail_AddressSchema).optional(),\n bcc: z.array(StandardEmail_AddressSchema).optional(),\n variables: z.record(z.string(), z.unknown()).optional(),\n subject: z.string().optional(), // Per-recipient subject override\n metadata: z.record(z.string(), z.string()).optional(),\n});\n\nexport type StandardEmail_BatchRecipient = z.infer<typeof StandardEmail_BatchRecipientSchema>;\n\nexport const StandardEmail_BatchRequestSchema = z.object({\n // Sender (shared)\n from: StandardEmail_AddressSchema.optional(),\n replyTo: StandardEmail_AddressSchema.optional(),\n \n // Content (shared - either direct or template)\n subject: z.string().optional(), // Default subject\n html: z.string().optional(),\n text: z.string().optional(),\n templateId: z.string().optional(),\n \n // Recipients with personalizations (requires SUPPORTS_BATCH_SENDING)\n recipients: z.array(StandardEmail_BatchRecipientSchema).min(1),\n \n // Optional features\n attachments: z.array(StandardEmail_AttachmentSchema).optional(),\n tags: z.array(z.string()).optional(),\n scheduledAt: z.iso.datetime().optional(),\n});\n\nexport type StandardEmail_BatchRequest = z.infer<typeof StandardEmail_BatchRequestSchema>;\n\n// ===============================================================\n// TRANSACTIONAL: Batch Send Response\n// ===============================================================\n\nexport const StandardEmail_BatchResponseSchema = z.object({\n success: z.boolean(),\n totalRequested: z.number().int(),\n totalAccepted: z.number().int(),\n totalRejected: z.number().int(),\n results: z.array(z.object({\n // Email address OR summary identifier (e.g. \"batch\" when provider returns aggregate result)\n email: z.string().min(1),\n success: z.boolean(),\n messageId: z.string().optional(),\n error: z.string().optional(),\n })),\n});\n\nexport type StandardEmail_BatchResponse = z.infer<typeof StandardEmail_BatchResponseSchema>;\n\n// ===============================================================\n// MARKETING: Contact\n// ===============================================================\n\nexport const StandardMarketing_ContactSchema = z.object({\n email: z.email(),\n firstName: z.string().optional(),\n lastName: z.string().optional(),\n phone: z.string().optional(),\n attributes: z.record(z.string(), z.unknown()).optional(),\n});\n\nexport type StandardMarketing_Contact = z.infer<typeof StandardMarketing_ContactSchema>;\n\n// ===============================================================\n// MARKETING: List\n// ===============================================================\n\nexport const StandardMarketing_ListSchema = z.object({\n id: z.string().optional(), // Provider assigns on create\n name: z.string().min(1),\n description: z.string().optional(),\n});\n\nexport type StandardMarketing_List = z.infer<typeof StandardMarketing_ListSchema>;\n\n// ===============================================================\n// MARKETING: Audience (List + Contacts)\n// ===============================================================\n\nexport const StandardMarketing_AudienceSchema = z.object({\n // List reference (use existing by ID, or create/find by name)\n list: z.object({\n id: z.string().optional(),\n name: z.string().optional(),\n description: z.string().optional(),\n }).refine(\n (data) => data.id !== undefined || data.name !== undefined,\n { message: \"Either list.id or list.name is required\" }\n ),\n \n // Contacts to add/sync (optional if using existing list)\n contacts: z.array(StandardMarketing_ContactSchema).optional(),\n});\n\nexport type StandardMarketing_Audience = z.infer<typeof StandardMarketing_AudienceSchema>;\n\n// ===============================================================\n// MARKETING: Campaign Content\n// ===============================================================\n\nexport const StandardMarketing_ContentSchema = z.object({\n // Use template OR inline content\n templateId: z.string().optional(),\n templateVariables: z.record(z.string(), z.unknown()).optional(),\n \n // Inline content (if no template)\n subject: z.string().optional(),\n html: z.string().optional(),\n text: z.string().optional(),\n previewText: z.string().optional(),\n \n // Attachments\n attachments: z.array(StandardEmail_AttachmentSchema).optional(),\n}).refine(\n (data) => data.templateId !== undefined || data.subject !== undefined,\n { message: \"Either templateId or subject is required\" }\n);\n\nexport type StandardMarketing_Content = z.infer<typeof StandardMarketing_ContentSchema>;\n\n// ===============================================================\n// MARKETING: Campaign Request\n// ===============================================================\n\nexport const StandardMarketing_CampaignRequestSchema = z.object({\n // Campaign name\n name: z.string().min(1),\n \n // Sender\n from: StandardEmail_AddressSchema,\n replyTo: StandardEmail_AddressSchema.optional(),\n \n // Audience\n audience: StandardMarketing_AudienceSchema,\n \n // Content\n content: StandardMarketing_ContentSchema,\n \n // Execution\n schedule: z.object({\n sendAt: z.iso.datetime().optional(),\n sendImmediately: z.boolean().optional(),\n }).optional(),\n \n // Tracking\n trackOpens: z.boolean().optional().default(true),\n trackClicks: z.boolean().optional().default(true),\n \n // Tags\n tags: z.array(z.string()).optional(),\n \n // Metadata\n metadata: z.record(z.string(), z.string()).optional(),\n});\n\nexport type StandardMarketing_CampaignRequest = z.infer<typeof StandardMarketing_CampaignRequestSchema>;\n\n// ===============================================================\n// MARKETING: Campaign Response\n// ===============================================================\n\nexport const StandardMarketing_CampaignResponseSchema = z.object({\n success: z.boolean(),\n campaignId: z.string(),\n providerCampaignId: z.string().optional(),\n status: z.enum([\"draft\", \"scheduled\", \"sending\", \"sent\", \"cancelled\"]),\n scheduledAt: z.iso.datetime().optional(),\n listId: z.string().optional(),\n audienceSize: z.number().int().optional(),\n});\n\nexport type StandardMarketing_CampaignResponse = z.infer<typeof StandardMarketing_CampaignResponseSchema>;\n\n// ===============================================================\n// Message Status Request/Response\n// ===============================================================\n\nexport const StandardEmail_GetStatusRequestSchema = z.object({\n messageId: z.string().min(1),\n});\n\nexport type StandardEmail_GetStatusRequest = z.infer<typeof StandardEmail_GetStatusRequestSchema>;\n\nexport const StandardEmail_GetStatusResponseSchema = z.object({\n messageId: z.string(),\n status: z.enum(EmailProvider_DeliveryStatus),\n to: z.email(),\n subject: z.string().optional(),\n sentAt: z.iso.datetime().optional(),\n deliveredAt: z.iso.datetime().optional(),\n openedAt: z.iso.datetime().optional(),\n clickedAt: z.iso.datetime().optional(),\n bouncedAt: z.iso.datetime().optional(),\n bounceReason: z.string().optional(),\n});\n\nexport type StandardEmail_GetStatusResponse = z.infer<typeof StandardEmail_GetStatusResponseSchema>;\n\n// ===============================================================\n// Standard Error\n// ===============================================================\n\nexport const StandardEmail_ErrorSchema = z.object({\n code: z.enum([\n \"VALIDATION_ERROR\",\n \"PROVIDER_ERROR\",\n \"CAPABILITY_NOT_SUPPORTED\",\n \"MARKETING_NOT_SUPPORTED\",\n \"SCHEDULING_NOT_SUPPORTED\",\n \"TEMPLATE_NOT_FOUND\",\n \"RATE_LIMIT_EXCEEDED\",\n \"AUTHENTICATION_FAILED\",\n \"QUOTA_EXCEEDED\",\n \"UNKNOWN_ERROR\",\n ]),\n message: z.string(),\n provider: z.string().optional(),\n details: z.unknown().optional(),\n \n // For capability errors - dynamically populated from registry\n requiredCapability: z.enum(EmailProvider_Capability).optional(),\n supportedProviders: z.array(z.string()).optional(),\n});\n\nexport type StandardEmail_Error = z.infer<typeof StandardEmail_ErrorSchema>;\n\n// ===============================================================\n// Capability Requirements\n// ===============================================================\n\n/**\n * Maps standard operations to required capabilities.\n * Used by the ETL layer to validate provider support.\n */\nexport const StandardEmail_OperationCapabilities = {\n sendEmail: [] as EmailProvider_Capability[], // All providers support basic send\n sendTemplate: [EmailProvider_Capability.SUPPORTS_TEMPLATES],\n sendBatch: [EmailProvider_Capability.SUPPORTS_BATCH_SENDING],\n sendScheduled: [EmailProvider_Capability.SUPPORTS_SCHEDULING],\n sendCampaign: [EmailProvider_Capability.SUPPORTS_MARKETING, EmailProvider_Capability.SUPPORTS_CAMPAIGNS],\n manageList: [EmailProvider_Capability.SUPPORTS_LIST_MANAGEMENT],\n} as const;\n\nexport type StandardEmail_Operation = keyof typeof StandardEmail_OperationCapabilities;\n"]}
|
|
@@ -27,20 +27,63 @@ export declare enum EmbeddingsProvider_OperationKey {
|
|
|
27
27
|
EMBED_TEXTS = "embeddings.embedTexts"
|
|
28
28
|
}
|
|
29
29
|
/**
|
|
30
|
-
* WHY a text is being embedded —
|
|
31
|
-
* DOCUMENTS they search over
|
|
32
|
-
*
|
|
33
|
-
*
|
|
30
|
+
* WHY a text is being embedded — the ROLE of the text in a retrieval. Some models embed retrieval
|
|
31
|
+
* QUERIES differently from the DOCUMENTS they search over, so the caller's intent must travel with
|
|
32
|
+
* the call rather than being inferred. The caller that knows sets it: the `rag:embedding-drain`
|
|
33
|
+
* worker embeds corpus chunks as {@link CORPUS}, retrieval embeds the search text as {@link QUERY}.
|
|
34
|
+
*
|
|
35
|
+
* It reaches the vendor through the provider's declared {@link EmbeddingsProvider_TextPurposeHandling}
|
|
36
|
+
* (#3427); the engine never names a vendor parameter. Measured 2026-11-06, the vendors split:
|
|
37
|
+
* - Cohere's `input_type` is "Required for embedding models v3 and higher": `search_document` is
|
|
38
|
+
* "Used for embeddings stored in a vector database for search use-cases", `search_query` "Used for
|
|
39
|
+
* embeddings of search queries run against a vector DB to find relevant documents".
|
|
40
|
+
* spec-cite: Cohere API reference, "Embed API (v2)" (https://docs.cohere.com/reference/embed, fetched 2026-11-06), `input_type`.
|
|
41
|
+
* - Voyage's `input_type` takes `None` (default), `query` or `document`; for the last two it prepends
|
|
42
|
+
* "Represent the query for retrieving supporting documents:" / "Represent the document for retrieval:",
|
|
43
|
+
* and recommends specifying it for retrieval.
|
|
44
|
+
* spec-cite: Voyage AI documentation, "Text Embeddings" (https://docs.voyageai.com/docs/embeddings, fetched 2026-11-06), `input_type`.
|
|
45
|
+
* - OpenAI's embeddings request has no such parameter (`input`, `model`, `dimensions`,
|
|
46
|
+
* `encoding_format`, `user`), nor does Amazon Titan Text Embeddings V2 (`inputText`, `dimensions`,
|
|
47
|
+
* `normalize`, `embeddingTypes`): those providers declare that their vendor has no role.
|
|
34
48
|
*
|
|
35
49
|
* A named home (semantic-string-literals rule): `'corpus'`/`'query'` are a closed vocabulary,
|
|
36
50
|
* and this enum is where their semantics live.
|
|
37
51
|
*/
|
|
38
52
|
export declare enum EmbeddingsProvider_TextPurpose {
|
|
39
|
-
/** The text IS retrievable content — a RAG chunk entering the corpus. */
|
|
53
|
+
/** The text IS retrievable content — a RAG chunk entering the corpus (Cohere `search_document`, Voyage `document`). */
|
|
40
54
|
CORPUS = "corpus",
|
|
41
|
-
/** The text is a SEARCH query that will be matched against corpus vectors. */
|
|
55
|
+
/** The text is a SEARCH query that will be matched against corpus vectors (Cohere `search_query`, Voyage `query`). */
|
|
42
56
|
QUERY = "query"
|
|
43
57
|
}
|
|
58
|
+
/**
|
|
59
|
+
* HOW a provider carries {@link EmbeddingsProvider_TextPurpose} to its vendor — the kind of an embeddings arm's
|
|
60
|
+
* `textPurposeHandling` (#3427). The arm must declare one: a provider whose vendor distinguishes the roles maps each,
|
|
61
|
+
* and one whose vendor does not says so with its reason, so "this provider ignores the role" is a decision on record
|
|
62
|
+
* and never the silent default it was. (Until #3427 no provider could map it: the role reached the trace only, and
|
|
63
|
+
* Cohere's SDK, given nothing, sent `search_query` for the corpus too.)
|
|
64
|
+
*/
|
|
65
|
+
export declare enum EmbeddingsProvider_TextPurposeHandlingKind {
|
|
66
|
+
/**
|
|
67
|
+
* The vendor's embedding API has no query/document parameter, so one vector space serves both roles and the engine
|
|
68
|
+
* sends nothing for it. Declared with the reason (the vendor's documented request parameters), never assumed.
|
|
69
|
+
*/
|
|
70
|
+
VENDOR_HAS_NO_ROLE = "vendor-has-no-role",
|
|
71
|
+
/**
|
|
72
|
+
* The vendor distinguishes the roles, and its AI-SDK client reads the role from `providerOptions`: the arm declares,
|
|
73
|
+
* for EVERY purpose, the options the engine hands `embedMany` for a call of that purpose (Cohere:
|
|
74
|
+
* `{ cohere: { inputType: 'search_document' } }` for CORPUS). Data, not a function, so the engine stays
|
|
75
|
+
* provider-neutral and a registry module's declaration can be checked before any text leaves.
|
|
76
|
+
*/
|
|
77
|
+
SDK_PROVIDER_OPTIONS = "sdk-provider-options"
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Why a provider's declared `textPurposeHandling` cannot be used, or `undefined` (#3427). A registry module is loaded at
|
|
81
|
+
* runtime, so nothing compiled its declaration; absence is a defect too, because an embeddings arm must state how the
|
|
82
|
+
* role reaches its vendor. A {@link EmbeddingsProvider_TextPurposeHandlingKind.SDK_PROVIDER_OPTIONS} declaration must
|
|
83
|
+
* map EVERY purpose to a non-empty `{ <sdk provider id>: { <option>: string | number | boolean } }`: a purpose left
|
|
84
|
+
* out would be embedded with the SDK's default, which is exactly the mismatch the declaration exists to prevent.
|
|
85
|
+
*/
|
|
86
|
+
export declare const describeEmbeddingsTextPurposeHandlingDefect: (handling: unknown) => string | undefined;
|
|
44
87
|
/**
|
|
45
88
|
* @wildo_source:part:start saas.external-providers.embeddings.applicability facet:kind:api facet:audience:app-developer
|
|
46
89
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"embeddings.external-connectors-models.schemas.d.ts","sourceRoot":"","sources":["
|
|
1
|
+
{"version":3,"file":"embeddings.external-connectors-models.schemas.d.ts","sourceRoot":"","sources":["../../../src/protocols/embeddings.external-connectors-models.schemas.ts"],"names":[],"mappings":"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"}
|