@yolk-sdk/emulators 0.1.0-canary.96
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/LICENSE +21 -0
- package/README.md +2135 -0
- package/dist/anthropic.d.mts +269 -0
- package/dist/anthropic.d.mts.map +1 -0
- package/dist/anthropic.mjs +177 -0
- package/dist/anthropic.mjs.map +1 -0
- package/dist/chat-completions.d.mts +288 -0
- package/dist/chat-completions.d.mts.map +1 -0
- package/dist/chat-completions.mjs +451 -0
- package/dist/chat-completions.mjs.map +1 -0
- package/dist/codex.d.mts +265 -0
- package/dist/codex.d.mts.map +1 -0
- package/dist/codex.mjs +199 -0
- package/dist/codex.mjs.map +1 -0
- package/dist/dropbox/api.d.mts +63 -0
- package/dist/dropbox/api.d.mts.map +1 -0
- package/dist/dropbox/api.mjs +565 -0
- package/dist/dropbox/api.mjs.map +1 -0
- package/dist/dropbox/state.d.mts +136 -0
- package/dist/dropbox/state.d.mts.map +1 -0
- package/dist/dropbox/state.mjs +209 -0
- package/dist/dropbox/state.mjs.map +1 -0
- package/dist/dropbox.d.mts +79 -0
- package/dist/dropbox.d.mts.map +1 -0
- package/dist/dropbox.mjs +124 -0
- package/dist/dropbox.mjs.map +1 -0
- package/dist/email-fixtures.d.mts +36 -0
- package/dist/email-fixtures.d.mts.map +1 -0
- package/dist/email-fixtures.mjs +1080 -0
- package/dist/email-fixtures.mjs.map +1 -0
- package/dist/email.d.mts +160 -0
- package/dist/email.d.mts.map +1 -0
- package/dist/email.mjs +608 -0
- package/dist/email.mjs.map +1 -0
- package/dist/emulator-compose.d.mts +40 -0
- package/dist/emulator-compose.d.mts.map +1 -0
- package/dist/emulator-compose.mjs +91 -0
- package/dist/emulator-compose.mjs.map +1 -0
- package/dist/emulator-http.d.mts +53 -0
- package/dist/emulator-http.d.mts.map +1 -0
- package/dist/emulator-http.mjs +117 -0
- package/dist/emulator-http.mjs.map +1 -0
- package/dist/emulator-kernel.d.mts +176 -0
- package/dist/emulator-kernel.d.mts.map +1 -0
- package/dist/emulator-kernel.mjs +413 -0
- package/dist/emulator-kernel.mjs.map +1 -0
- package/dist/fixture-route.d.mts +129 -0
- package/dist/fixture-route.d.mts.map +1 -0
- package/dist/fixture-route.mjs +257 -0
- package/dist/fixture-route.mjs.map +1 -0
- package/dist/fortnox/api.d.mts +92 -0
- package/dist/fortnox/api.d.mts.map +1 -0
- package/dist/fortnox/api.mjs +750 -0
- package/dist/fortnox/api.mjs.map +1 -0
- package/dist/fortnox/state.d.mts +533 -0
- package/dist/fortnox/state.d.mts.map +1 -0
- package/dist/fortnox/state.mjs +612 -0
- package/dist/fortnox/state.mjs.map +1 -0
- package/dist/fortnox.d.mts +128 -0
- package/dist/fortnox.d.mts.map +1 -0
- package/dist/fortnox.mjs +403 -0
- package/dist/fortnox.mjs.map +1 -0
- package/dist/gateway-evaluate-recordings.d.mts +12 -0
- package/dist/gateway-evaluate-recordings.d.mts.map +1 -0
- package/dist/gateway-evaluate-recordings.mjs +128 -0
- package/dist/gateway-evaluate-recordings.mjs.map +1 -0
- package/dist/gateway.d.mts +272 -0
- package/dist/gateway.d.mts.map +1 -0
- package/dist/gateway.mjs +400 -0
- package/dist/gateway.mjs.map +1 -0
- package/dist/github/api.d.mts +63 -0
- package/dist/github/api.d.mts.map +1 -0
- package/dist/github/api.mjs +527 -0
- package/dist/github/api.mjs.map +1 -0
- package/dist/github/state.d.mts +272 -0
- package/dist/github/state.d.mts.map +1 -0
- package/dist/github/state.mjs +303 -0
- package/dist/github/state.mjs.map +1 -0
- package/dist/github.d.mts +77 -0
- package/dist/github.d.mts.map +1 -0
- package/dist/github.mjs +180 -0
- package/dist/github.mjs.map +1 -0
- package/dist/google/calendar.d.mts +10 -0
- package/dist/google/calendar.d.mts.map +1 -0
- package/dist/google/calendar.mjs +252 -0
- package/dist/google/calendar.mjs.map +1 -0
- package/dist/google/drive.d.mts +8 -0
- package/dist/google/drive.d.mts.map +1 -0
- package/dist/google/drive.mjs +252 -0
- package/dist/google/drive.mjs.map +1 -0
- package/dist/google/gmail.d.mts +10 -0
- package/dist/google/gmail.d.mts.map +1 -0
- package/dist/google/gmail.mjs +591 -0
- package/dist/google/gmail.mjs.map +1 -0
- package/dist/google/shared.d.mts +107 -0
- package/dist/google/shared.d.mts.map +1 -0
- package/dist/google/shared.mjs +146 -0
- package/dist/google/shared.mjs.map +1 -0
- package/dist/google/state.d.mts +385 -0
- package/dist/google/state.d.mts.map +1 -0
- package/dist/google/state.mjs +496 -0
- package/dist/google/state.mjs.map +1 -0
- package/dist/google.d.mts +75 -0
- package/dist/google.d.mts.map +1 -0
- package/dist/google.mjs +210 -0
- package/dist/google.mjs.map +1 -0
- package/dist/linkedin-search/api.d.mts +45 -0
- package/dist/linkedin-search/api.d.mts.map +1 -0
- package/dist/linkedin-search/api.mjs +181 -0
- package/dist/linkedin-search/api.mjs.map +1 -0
- package/dist/linkedin-search/state.d.mts +123 -0
- package/dist/linkedin-search/state.d.mts.map +1 -0
- package/dist/linkedin-search/state.mjs +261 -0
- package/dist/linkedin-search/state.mjs.map +1 -0
- package/dist/linkedin-search.d.mts +69 -0
- package/dist/linkedin-search.d.mts.map +1 -0
- package/dist/linkedin-search.mjs +158 -0
- package/dist/linkedin-search.mjs.map +1 -0
- package/dist/mcp/api.d.mts +44 -0
- package/dist/mcp/api.d.mts.map +1 -0
- package/dist/mcp/api.mjs +557 -0
- package/dist/mcp/api.mjs.map +1 -0
- package/dist/mcp/recordings.d.mts +40 -0
- package/dist/mcp/recordings.d.mts.map +1 -0
- package/dist/mcp/recordings.mjs +2390 -0
- package/dist/mcp/recordings.mjs.map +1 -0
- package/dist/mcp/state.d.mts +71 -0
- package/dist/mcp/state.d.mts.map +1 -0
- package/dist/mcp/state.mjs +83 -0
- package/dist/mcp/state.mjs.map +1 -0
- package/dist/mcp.d.mts +84 -0
- package/dist/mcp.d.mts.map +1 -0
- package/dist/mcp.mjs +241 -0
- package/dist/mcp.mjs.map +1 -0
- package/dist/messages.d.mts +183 -0
- package/dist/messages.d.mts.map +1 -0
- package/dist/messages.mjs +532 -0
- package/dist/messages.mjs.map +1 -0
- package/dist/microsoft/api.d.mts +47 -0
- package/dist/microsoft/api.d.mts.map +1 -0
- package/dist/microsoft/api.mjs +178 -0
- package/dist/microsoft/api.mjs.map +1 -0
- package/dist/microsoft/calendar.d.mts +30 -0
- package/dist/microsoft/calendar.d.mts.map +1 -0
- package/dist/microsoft/calendar.mjs +271 -0
- package/dist/microsoft/calendar.mjs.map +1 -0
- package/dist/microsoft/drive.d.mts +36 -0
- package/dist/microsoft/drive.d.mts.map +1 -0
- package/dist/microsoft/drive.mjs +298 -0
- package/dist/microsoft/drive.mjs.map +1 -0
- package/dist/microsoft/graph.d.mts +198 -0
- package/dist/microsoft/graph.d.mts.map +1 -0
- package/dist/microsoft/graph.mjs +264 -0
- package/dist/microsoft/graph.mjs.map +1 -0
- package/dist/microsoft/mail.d.mts +48 -0
- package/dist/microsoft/mail.d.mts.map +1 -0
- package/dist/microsoft/mail.mjs +488 -0
- package/dist/microsoft/mail.mjs.map +1 -0
- package/dist/microsoft/state.d.mts +480 -0
- package/dist/microsoft/state.d.mts.map +1 -0
- package/dist/microsoft/state.mjs +625 -0
- package/dist/microsoft/state.mjs.map +1 -0
- package/dist/microsoft.d.mts +168 -0
- package/dist/microsoft.d.mts.map +1 -0
- package/dist/microsoft.mjs +483 -0
- package/dist/microsoft.mjs.map +1 -0
- package/dist/node.d.mts +47 -0
- package/dist/node.d.mts.map +1 -0
- package/dist/node.mjs +178 -0
- package/dist/node.mjs.map +1 -0
- package/dist/notion/api.d.mts +51 -0
- package/dist/notion/api.d.mts.map +1 -0
- package/dist/notion/api.mjs +507 -0
- package/dist/notion/api.mjs.map +1 -0
- package/dist/notion/state.d.mts +329 -0
- package/dist/notion/state.d.mts.map +1 -0
- package/dist/notion/state.mjs +432 -0
- package/dist/notion/state.mjs.map +1 -0
- package/dist/notion.d.mts +72 -0
- package/dist/notion.d.mts.map +1 -0
- package/dist/notion.mjs +127 -0
- package/dist/notion.mjs.map +1 -0
- package/dist/openai.d.mts +165 -0
- package/dist/openai.d.mts.map +1 -0
- package/dist/openai.mjs +141 -0
- package/dist/openai.mjs.map +1 -0
- package/dist/opencode-recordings.d.mts +7 -0
- package/dist/opencode-recordings.d.mts.map +1 -0
- package/dist/opencode-recordings.mjs +222 -0
- package/dist/opencode-recordings.mjs.map +1 -0
- package/dist/opencode.d.mts +70 -0
- package/dist/opencode.d.mts.map +1 -0
- package/dist/opencode.mjs +217 -0
- package/dist/opencode.mjs.map +1 -0
- package/dist/r2-fixtures.d.mts +36 -0
- package/dist/r2-fixtures.d.mts.map +1 -0
- package/dist/r2-fixtures.mjs +245 -0
- package/dist/r2-fixtures.mjs.map +1 -0
- package/dist/r2-guard.d.mts +43 -0
- package/dist/r2-guard.d.mts.map +1 -0
- package/dist/r2-guard.mjs +215 -0
- package/dist/r2-guard.mjs.map +1 -0
- package/dist/r2.d.mts +166 -0
- package/dist/r2.d.mts.map +1 -0
- package/dist/r2.mjs +517 -0
- package/dist/r2.mjs.map +1 -0
- package/dist/responses.d.mts +231 -0
- package/dist/responses.d.mts.map +1 -0
- package/dist/responses.mjs +556 -0
- package/dist/responses.mjs.map +1 -0
- package/dist/route-evidence.d.mts +45 -0
- package/dist/route-evidence.d.mts.map +1 -0
- package/dist/route-evidence.mjs +56 -0
- package/dist/route-evidence.mjs.map +1 -0
- package/dist/router.d.mts +93 -0
- package/dist/router.d.mts.map +1 -0
- package/dist/router.mjs +259 -0
- package/dist/router.mjs.map +1 -0
- package/dist/stateful-core.d.mts +17 -0
- package/dist/stateful-core.d.mts.map +1 -0
- package/dist/stateful-core.mjs +41 -0
- package/dist/stateful-core.mjs.map +1 -0
- package/dist/stateful-emulator.d.mts +565 -0
- package/dist/stateful-emulator.d.mts.map +1 -0
- package/dist/stateful-emulator.mjs +1228 -0
- package/dist/stateful-emulator.mjs.map +1 -0
- package/dist/stateful-secrets.d.mts +84 -0
- package/dist/stateful-secrets.d.mts.map +1 -0
- package/dist/stateful-secrets.mjs +216 -0
- package/dist/stateful-secrets.mjs.map +1 -0
- package/dist/subscription-usage-recordings.d.mts +9 -0
- package/dist/subscription-usage-recordings.d.mts.map +1 -0
- package/dist/subscription-usage-recordings.mjs +53 -0
- package/dist/subscription-usage-recordings.mjs.map +1 -0
- package/dist/subscription-usage.d.mts +53 -0
- package/dist/subscription-usage.d.mts.map +1 -0
- package/dist/subscription-usage.mjs +21 -0
- package/dist/subscription-usage.mjs.map +1 -0
- package/dist/telegram/api.d.mts +34 -0
- package/dist/telegram/api.d.mts.map +1 -0
- package/dist/telegram/api.mjs +257 -0
- package/dist/telegram/api.mjs.map +1 -0
- package/dist/telegram/state.d.mts +128 -0
- package/dist/telegram/state.d.mts.map +1 -0
- package/dist/telegram/state.mjs +154 -0
- package/dist/telegram/state.mjs.map +1 -0
- package/dist/telegram.d.mts +62 -0
- package/dist/telegram.d.mts.map +1 -0
- package/dist/telegram.mjs +127 -0
- package/dist/telegram.mjs.map +1 -0
- package/dist/todoist/api.d.mts +55 -0
- package/dist/todoist/api.d.mts.map +1 -0
- package/dist/todoist/api.mjs +415 -0
- package/dist/todoist/api.mjs.map +1 -0
- package/dist/todoist/state.d.mts +275 -0
- package/dist/todoist/state.d.mts.map +1 -0
- package/dist/todoist/state.mjs +345 -0
- package/dist/todoist/state.mjs.map +1 -0
- package/dist/todoist.d.mts +68 -0
- package/dist/todoist.d.mts.map +1 -0
- package/dist/todoist.mjs +181 -0
- package/dist/todoist.mjs.map +1 -0
- package/dist/xai.d.mts +267 -0
- package/dist/xai.d.mts.map +1 -0
- package/dist/xai.mjs +252 -0
- package/dist/xai.mjs.map +1 -0
- package/package.json +157 -0
- package/src/anthropic.ts +289 -0
- package/src/chat-completions.ts +924 -0
- package/src/codex.ts +296 -0
- package/src/dropbox/api.ts +1084 -0
- package/src/dropbox/state.ts +364 -0
- package/src/dropbox.ts +203 -0
- package/src/email-fixtures.ts +1297 -0
- package/src/email.ts +1108 -0
- package/src/emulator-compose.ts +147 -0
- package/src/emulator-http.ts +184 -0
- package/src/emulator-kernel.ts +844 -0
- package/src/fixture-route.ts +561 -0
- package/src/fortnox/api.ts +1352 -0
- package/src/fortnox/state.ts +798 -0
- package/src/fortnox.ts +801 -0
- package/src/gateway-evaluate-recordings.ts +153 -0
- package/src/gateway.ts +530 -0
- package/src/github/api.ts +986 -0
- package/src/github/state.ts +439 -0
- package/src/github.ts +271 -0
- package/src/google/calendar.ts +486 -0
- package/src/google/drive.ts +471 -0
- package/src/google/gmail.ts +1011 -0
- package/src/google/shared.ts +321 -0
- package/src/google/state.ts +686 -0
- package/src/google.ts +298 -0
- package/src/linkedin-search/api.ts +363 -0
- package/src/linkedin-search/state.ts +373 -0
- package/src/linkedin-search.ts +241 -0
- package/src/mcp/api.ts +995 -0
- package/src/mcp/recordings.ts +2665 -0
- package/src/mcp/state.ts +125 -0
- package/src/mcp.ts +319 -0
- package/src/messages.ts +844 -0
- package/src/microsoft/api.ts +426 -0
- package/src/microsoft/calendar.ts +491 -0
- package/src/microsoft/drive.ts +541 -0
- package/src/microsoft/graph.ts +550 -0
- package/src/microsoft/mail.ts +833 -0
- package/src/microsoft/state.ts +822 -0
- package/src/microsoft.ts +982 -0
- package/src/node.ts +293 -0
- package/src/notion/api.ts +976 -0
- package/src/notion/state.ts +512 -0
- package/src/notion.ts +210 -0
- package/src/openai.ts +198 -0
- package/src/opencode-recordings.ts +257 -0
- package/src/opencode.ts +271 -0
- package/src/r2-fixtures.ts +295 -0
- package/src/r2-guard.ts +323 -0
- package/src/r2.ts +890 -0
- package/src/responses.ts +901 -0
- package/src/route-evidence.ts +90 -0
- package/src/router.ts +490 -0
- package/src/stateful-core.ts +70 -0
- package/src/stateful-emulator.ts +2571 -0
- package/src/stateful-secrets.ts +299 -0
- package/src/subscription-usage-recordings.ts +77 -0
- package/src/subscription-usage.ts +68 -0
- package/src/telegram/api.ts +437 -0
- package/src/telegram/state.ts +229 -0
- package/src/telegram.ts +227 -0
- package/src/todoist/api.ts +736 -0
- package/src/todoist/state.ts +456 -0
- package/src/todoist.ts +316 -0
- package/src/xai.ts +341 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"email-fixtures.mjs","names":[],"sources":["../src/email-fixtures.ts"],"sourcesContent":["/**\n * The email conformance fixtures, copied as data (internal; re-exported by `email.ts`).\n *\n * Emulators never import SDK code: this is a verbatim copy of `emailConformanceFixtures` from\n * `@yolk-sdk/connectors/email/conformance` (synthetic `PortFixture`s; none observed live).\n * `test/email-conformance.test.ts` fails when the two drift apart; update both together.\n */\nimport type * as Schema from 'effect/Schema'\n\n/** A port failure as a fixture records it (mirrors `PortFailure` in `@yolk-sdk/conformance`). */\nexport type EmailEmulatorFailure = {\n readonly kind: 'expected' | 'error'\n readonly code: string\n readonly message: string\n readonly status?: number\n}\n\ntype EmailEmulatorFixtureFields = {\n readonly id: string\n readonly port: string\n readonly method: string\n readonly request: Schema.Json\n readonly observed?: { readonly account: string; readonly date: string }\n readonly note?: string\n}\n\n/**\n * One recorded `EmailClient` call (the plain-JSON shape of a `PortFixture`): exactly one of\n * `response` or `failure`.\n */\nexport type EmailEmulatorFixture =\n | (EmailEmulatorFixtureFields & { readonly response: Schema.Json; readonly failure?: never })\n | (EmailEmulatorFixtureFields & {\n readonly failure: EmailEmulatorFailure\n readonly response?: never\n })\n\nexport const emailEmulatorFixtures: ReadonlyArray<EmailEmulatorFixture> = [\n {\n id: 'email.imap.list-and-get-headers.list.synthetic',\n port: 'EmailClient',\n method: 'listMessages',\n request: {\n connection: {\n protocol: 'imap',\n host: 'imap.example.test',\n port: 993,\n security: 'tls'\n },\n limit: 50\n },\n response: {\n messages: [\n {\n id: '1700000001:41',\n subject: 'Synthetic welcome',\n from: [\n {\n address: 'sender@example.test',\n name: 'Synthetic Sender'\n }\n ],\n to: [\n {\n address: 'practice@example.test'\n }\n ],\n sentAt: '2026-09-28T08:00:00.000Z',\n receivedAt: '2026-09-28T08:00:05.000Z',\n snippet: 'Welcome to the synthetic practice mailbox.',\n hasAttachments: false,\n isRead: false,\n isFlagged: false\n },\n {\n id: '1700000001:42',\n subject: 'Synthetic weekly summary',\n from: [\n {\n address: 'sender@example.test',\n name: 'Synthetic Sender'\n }\n ],\n to: [\n {\n address: 'practice@example.test'\n }\n ],\n sentAt: '2026-09-29T08:00:00.000Z',\n receivedAt: '2026-09-29T08:00:04.000Z',\n snippet: 'Nothing happened this synthetic week.',\n hasAttachments: false,\n isRead: true,\n isFlagged: false\n }\n ]\n },\n note: 'Unfiltered INBOX list: the seeded unread message and one read message. Synthetic.'\n },\n {\n id: 'email.imap.list-and-get-headers.get.synthetic',\n port: 'EmailClient',\n method: 'getMessage',\n request: {\n connection: {\n protocol: 'imap',\n host: 'imap.example.test',\n port: 993,\n security: 'tls'\n },\n messageId: '1700000001:41'\n },\n response: {\n message: {\n id: '1700000001:41',\n messageId: '<welcome.0001@example.test>',\n subject: 'Synthetic welcome',\n from: [\n {\n address: 'sender@example.test',\n name: 'Synthetic Sender'\n }\n ],\n to: [\n {\n address: 'practice@example.test'\n }\n ],\n cc: [],\n bcc: [],\n replyTo: [],\n sentAt: '2026-09-28T08:00:00.000Z',\n receivedAt: '2026-09-28T08:00:05.000Z',\n body: {\n text: 'Welcome to the synthetic practice mailbox.'\n },\n attachments: [],\n isRead: false,\n isFlagged: false,\n headers: [\n {\n name: 'Date',\n value: 'Mon, 28 Sep 2026 08:00:00 +0000'\n },\n {\n name: 'From',\n value: 'Synthetic Sender <sender@example.test>'\n },\n {\n name: 'To',\n value: 'practice@example.test'\n },\n {\n name: 'Subject',\n value: 'Synthetic welcome'\n },\n {\n name: 'Message-ID',\n value: '<welcome.0001@example.test>'\n }\n ]\n }\n },\n note: 'Get of the seeded unread message with its header fields (BODY.PEEK[HEADER]). Synthetic.'\n },\n {\n id: 'email.imap.list-and-get-headers.list-again.synthetic',\n port: 'EmailClient',\n method: 'listMessages',\n request: {\n connection: {\n protocol: 'imap',\n host: 'imap.example.test',\n port: 993,\n security: 'tls'\n },\n limit: 50\n },\n response: {\n messages: [\n {\n id: '1700000001:41',\n subject: 'Synthetic welcome',\n from: [\n {\n address: 'sender@example.test',\n name: 'Synthetic Sender'\n }\n ],\n to: [\n {\n address: 'practice@example.test'\n }\n ],\n sentAt: '2026-09-28T08:00:00.000Z',\n receivedAt: '2026-09-28T08:00:05.000Z',\n snippet: 'Welcome to the synthetic practice mailbox.',\n hasAttachments: false,\n isRead: false,\n isFlagged: false\n },\n {\n id: '1700000001:42',\n subject: 'Synthetic weekly summary',\n from: [\n {\n address: 'sender@example.test',\n name: 'Synthetic Sender'\n }\n ],\n to: [\n {\n address: 'practice@example.test'\n }\n ],\n sentAt: '2026-09-29T08:00:00.000Z',\n receivedAt: '2026-09-29T08:00:04.000Z',\n snippet: 'Nothing happened this synthetic week.',\n hasAttachments: false,\n isRead: true,\n isFlagged: false\n }\n ]\n },\n note: 'The same INBOX list after the get: the message is still unread. Synthetic.'\n },\n {\n id: 'email.imap.filtered-list-no-fallback.list-unread.synthetic',\n port: 'EmailClient',\n method: 'listMessagesFiltered',\n request: {\n connection: {\n protocol: 'imap',\n host: 'imap.example.test',\n port: 993,\n security: 'tls'\n },\n limit: 50,\n isRead: false\n },\n response: {\n messages: [\n {\n id: '1700000001:41',\n subject: 'Synthetic welcome',\n from: [\n {\n address: 'sender@example.test',\n name: 'Synthetic Sender'\n }\n ],\n to: [\n {\n address: 'practice@example.test'\n }\n ],\n sentAt: '2026-09-28T08:00:00.000Z',\n receivedAt: '2026-09-28T08:00:05.000Z',\n snippet: 'Welcome to the synthetic practice mailbox.',\n hasAttachments: false,\n isRead: false,\n isFlagged: false\n }\n ]\n },\n note: 'Filtered INBOX list (UID SEARCH UNSEEN): only the seeded unread message. Synthetic.'\n },\n {\n id: 'email.imap.draft-drafts-discovery.create.synthetic',\n port: 'EmailClient',\n method: 'createDraft',\n request: {\n connection: {\n protocol: 'imap',\n host: 'imap.example.test',\n port: 993,\n security: 'tls'\n },\n message: {\n to: [],\n subject: 'yolk-conformance draft discovery: safe to delete',\n body: {\n text: 'Synthetic conformance draft; never sent.'\n }\n }\n },\n response: {\n saved: true,\n folder: 'Saved Drafts',\n draftId: '1700000002:7'\n },\n note: 'APPEND (\\\\Draft) to the mailbox LIST advertises as \\\\Drafts; UIDPLUS APPENDUID gives the id. Synthetic.'\n },\n {\n id: 'email.imap.draft-drafts-discovery.get.synthetic',\n port: 'EmailClient',\n method: 'getMessage',\n request: {\n connection: {\n protocol: 'imap',\n host: 'imap.example.test',\n port: 993,\n security: 'tls'\n },\n messageId: '1700000002:7',\n folder: 'Saved Drafts'\n },\n response: {\n message: {\n id: '1700000002:7',\n messageId: '<draft.0007@example.test>',\n subject: 'yolk-conformance draft discovery: safe to delete',\n from: [\n {\n address: 'practice@example.test'\n }\n ],\n to: [],\n cc: [],\n bcc: [],\n replyTo: [],\n sentAt: '2026-09-30T09:00:00.000Z',\n body: {\n text: 'Synthetic conformance draft; never sent.'\n },\n attachments: [],\n isRead: true,\n isFlagged: false,\n headers: [\n {\n name: 'Date',\n value: 'Wed, 30 Sep 2026 09:00:00 +0000'\n },\n {\n name: 'From',\n value: 'practice@example.test'\n },\n {\n name: 'Subject',\n value: 'yolk-conformance draft discovery: safe to delete'\n },\n {\n name: 'Message-ID',\n value: '<draft.0007@example.test>'\n }\n ]\n }\n },\n note: 'The saved draft read back by its draftId. Synthetic.'\n },\n {\n id: 'email.imap.draft-drafts-discovery.delete.synthetic',\n port: 'EmailClient',\n method: 'deletePermanently',\n request: {\n connection: {\n protocol: 'imap',\n host: 'imap.example.test',\n port: 993,\n security: 'tls'\n },\n messageIds: ['1700000002:7'],\n folder: 'Saved Drafts'\n },\n response: {\n results: [\n {\n messageId: '1700000002:7',\n status: 'succeeded'\n }\n ],\n summary: {\n requested: 1,\n succeeded: 1,\n failed: 0,\n unknown: 0,\n notAttempted: 0\n }\n },\n note: 'Restore: UID-scoped permanent delete of the case-created draft. Synthetic.'\n },\n {\n id: 'email.imap.set-read-and-flag.get-before.synthetic',\n port: 'EmailClient',\n method: 'getMessage',\n request: {\n connection: {\n protocol: 'imap',\n host: 'imap.example.test',\n port: 993,\n security: 'tls'\n },\n messageId: '1700000001:41'\n },\n response: {\n message: {\n id: '1700000001:41',\n messageId: '<welcome.0001@example.test>',\n subject: 'Synthetic welcome',\n from: [\n {\n address: 'sender@example.test',\n name: 'Synthetic Sender'\n }\n ],\n to: [\n {\n address: 'practice@example.test'\n }\n ],\n cc: [],\n bcc: [],\n replyTo: [],\n sentAt: '2026-09-28T08:00:00.000Z',\n receivedAt: '2026-09-28T08:00:05.000Z',\n body: {\n text: 'Welcome to the synthetic practice mailbox.'\n },\n attachments: [],\n isRead: false,\n isFlagged: false,\n headers: [\n {\n name: 'Date',\n value: 'Mon, 28 Sep 2026 08:00:00 +0000'\n },\n {\n name: 'From',\n value: 'Synthetic Sender <sender@example.test>'\n },\n {\n name: 'To',\n value: 'practice@example.test'\n },\n {\n name: 'Subject',\n value: 'Synthetic welcome'\n },\n {\n name: 'Message-ID',\n value: '<welcome.0001@example.test>'\n }\n ]\n }\n },\n note: 'Get of the seeded message (read false, flagged false). Synthetic.'\n },\n {\n id: 'email.imap.set-read-and-flag.set-read.synthetic',\n port: 'EmailClient',\n method: 'setRead',\n request: {\n connection: {\n protocol: 'imap',\n host: 'imap.example.test',\n port: 993,\n security: 'tls'\n },\n messageId: '1700000001:41',\n folder: 'INBOX',\n isRead: true\n },\n response: {\n messageId: '1700000001:41',\n isRead: true\n },\n note: 'UID STORE +FLAGS.SILENT (\\\\Seen). Synthetic.'\n },\n {\n id: 'email.imap.set-read-and-flag.get-read.synthetic',\n port: 'EmailClient',\n method: 'getMessage',\n request: {\n connection: {\n protocol: 'imap',\n host: 'imap.example.test',\n port: 993,\n security: 'tls'\n },\n messageId: '1700000001:41'\n },\n response: {\n message: {\n id: '1700000001:41',\n messageId: '<welcome.0001@example.test>',\n subject: 'Synthetic welcome',\n from: [\n {\n address: 'sender@example.test',\n name: 'Synthetic Sender'\n }\n ],\n to: [\n {\n address: 'practice@example.test'\n }\n ],\n cc: [],\n bcc: [],\n replyTo: [],\n sentAt: '2026-09-28T08:00:00.000Z',\n receivedAt: '2026-09-28T08:00:05.000Z',\n body: {\n text: 'Welcome to the synthetic practice mailbox.'\n },\n attachments: [],\n isRead: true,\n isFlagged: false,\n headers: [\n {\n name: 'Date',\n value: 'Mon, 28 Sep 2026 08:00:00 +0000'\n },\n {\n name: 'From',\n value: 'Synthetic Sender <sender@example.test>'\n },\n {\n name: 'To',\n value: 'practice@example.test'\n },\n {\n name: 'Subject',\n value: 'Synthetic welcome'\n },\n {\n name: 'Message-ID',\n value: '<welcome.0001@example.test>'\n }\n ]\n }\n },\n note: 'Get of the seeded message (read true, flagged false). Synthetic.'\n },\n {\n id: 'email.imap.set-read-and-flag.set-flag.synthetic',\n port: 'EmailClient',\n method: 'setFlag',\n request: {\n connection: {\n protocol: 'imap',\n host: 'imap.example.test',\n port: 993,\n security: 'tls'\n },\n messageId: '1700000001:41',\n folder: 'INBOX',\n isFlagged: true\n },\n response: {\n messageId: '1700000001:41',\n isFlagged: true\n },\n note: 'UID STORE +FLAGS.SILENT (\\\\Flagged). Synthetic.'\n },\n {\n id: 'email.imap.set-read-and-flag.get-flagged.synthetic',\n port: 'EmailClient',\n method: 'getMessage',\n request: {\n connection: {\n protocol: 'imap',\n host: 'imap.example.test',\n port: 993,\n security: 'tls'\n },\n messageId: '1700000001:41'\n },\n response: {\n message: {\n id: '1700000001:41',\n messageId: '<welcome.0001@example.test>',\n subject: 'Synthetic welcome',\n from: [\n {\n address: 'sender@example.test',\n name: 'Synthetic Sender'\n }\n ],\n to: [\n {\n address: 'practice@example.test'\n }\n ],\n cc: [],\n bcc: [],\n replyTo: [],\n sentAt: '2026-09-28T08:00:00.000Z',\n receivedAt: '2026-09-28T08:00:05.000Z',\n body: {\n text: 'Welcome to the synthetic practice mailbox.'\n },\n attachments: [],\n isRead: true,\n isFlagged: true,\n headers: [\n {\n name: 'Date',\n value: 'Mon, 28 Sep 2026 08:00:00 +0000'\n },\n {\n name: 'From',\n value: 'Synthetic Sender <sender@example.test>'\n },\n {\n name: 'To',\n value: 'practice@example.test'\n },\n {\n name: 'Subject',\n value: 'Synthetic welcome'\n },\n {\n name: 'Message-ID',\n value: '<welcome.0001@example.test>'\n }\n ]\n }\n },\n note: 'Get of the seeded message (read true, flagged true). Synthetic.'\n },\n {\n id: 'email.imap.set-read-and-flag.restore-read.synthetic',\n port: 'EmailClient',\n method: 'setRead',\n request: {\n connection: {\n protocol: 'imap',\n host: 'imap.example.test',\n port: 993,\n security: 'tls'\n },\n messageId: '1700000001:41',\n folder: 'INBOX',\n isRead: false\n },\n response: {\n messageId: '1700000001:41',\n isRead: false\n },\n note: 'UID STORE -FLAGS.SILENT (\\\\Seen). Synthetic.'\n },\n {\n id: 'email.imap.set-read-and-flag.restore-flag.synthetic',\n port: 'EmailClient',\n method: 'setFlag',\n request: {\n connection: {\n protocol: 'imap',\n host: 'imap.example.test',\n port: 993,\n security: 'tls'\n },\n messageId: '1700000001:41',\n folder: 'INBOX',\n isFlagged: false\n },\n response: {\n messageId: '1700000001:41',\n isFlagged: false\n },\n note: 'UID STORE -FLAGS.SILENT (\\\\Flagged). Synthetic.'\n },\n {\n id: 'email.imap.set-read-and-flag.get-restored.synthetic',\n port: 'EmailClient',\n method: 'getMessage',\n request: {\n connection: {\n protocol: 'imap',\n host: 'imap.example.test',\n port: 993,\n security: 'tls'\n },\n messageId: '1700000001:41'\n },\n response: {\n message: {\n id: '1700000001:41',\n messageId: '<welcome.0001@example.test>',\n subject: 'Synthetic welcome',\n from: [\n {\n address: 'sender@example.test',\n name: 'Synthetic Sender'\n }\n ],\n to: [\n {\n address: 'practice@example.test'\n }\n ],\n cc: [],\n bcc: [],\n replyTo: [],\n sentAt: '2026-09-28T08:00:00.000Z',\n receivedAt: '2026-09-28T08:00:05.000Z',\n body: {\n text: 'Welcome to the synthetic practice mailbox.'\n },\n attachments: [],\n isRead: false,\n isFlagged: false,\n headers: [\n {\n name: 'Date',\n value: 'Mon, 28 Sep 2026 08:00:00 +0000'\n },\n {\n name: 'From',\n value: 'Synthetic Sender <sender@example.test>'\n },\n {\n name: 'To',\n value: 'practice@example.test'\n },\n {\n name: 'Subject',\n value: 'Synthetic welcome'\n },\n {\n name: 'Message-ID',\n value: '<welcome.0001@example.test>'\n }\n ]\n }\n },\n note: 'Get of the seeded message (read false, flagged false). Synthetic.'\n },\n {\n id: 'email.imap.trash-untrash-to-inbox.create.synthetic',\n port: 'EmailClient',\n method: 'createDraft',\n request: {\n connection: {\n protocol: 'imap',\n host: 'imap.example.test',\n port: 993,\n security: 'tls'\n },\n message: {\n to: [],\n subject: 'yolk-conformance trash probe: safe to delete',\n body: {\n text: 'Synthetic conformance draft; never sent.'\n }\n },\n folder: 'Saved Drafts'\n },\n response: {\n saved: true,\n folder: 'Saved Drafts',\n draftId: '1700000002:8'\n },\n note: 'The case-owned draft in the seeded Drafts mailbox. Synthetic.'\n },\n {\n id: 'email.imap.trash-untrash-to-inbox.trash.synthetic',\n port: 'EmailClient',\n method: 'trash',\n request: {\n connection: {\n protocol: 'imap',\n host: 'imap.example.test',\n port: 993,\n security: 'tls'\n },\n messageId: '1700000002:8',\n folder: 'Saved Drafts'\n },\n response: {\n moved: true,\n folder: 'Deleted Items',\n messageId: '1700000004:3'\n },\n note: 'UID MOVE to the mailbox LIST advertises as \\\\Trash; COPYUID gives the destination id. Synthetic.'\n },\n {\n id: 'email.imap.trash-untrash-to-inbox.untrash.synthetic',\n port: 'EmailClient',\n method: 'untrash',\n request: {\n connection: {\n protocol: 'imap',\n host: 'imap.example.test',\n port: 993,\n security: 'tls'\n },\n messageId: '1700000004:3',\n folder: 'Deleted Items',\n destinationFolder: 'INBOX'\n },\n response: {\n moved: true,\n folder: 'INBOX',\n messageId: '1700000001:43'\n },\n note: 'Restore defaults to INBOX, not the original Drafts mailbox. Synthetic.'\n },\n {\n id: 'email.imap.trash-untrash-to-inbox.get.synthetic',\n port: 'EmailClient',\n method: 'getMessage',\n request: {\n connection: {\n protocol: 'imap',\n host: 'imap.example.test',\n port: 993,\n security: 'tls'\n },\n messageId: '1700000001:43'\n },\n response: {\n message: {\n id: '1700000001:43',\n messageId: '<draft.0008@example.test>',\n subject: 'yolk-conformance trash probe: safe to delete',\n from: [\n {\n address: 'practice@example.test'\n }\n ],\n to: [],\n cc: [],\n bcc: [],\n replyTo: [],\n sentAt: '2026-09-30T09:00:00.000Z',\n body: {\n text: 'Synthetic conformance draft; never sent.'\n },\n attachments: [],\n isRead: true,\n isFlagged: false,\n headers: [\n {\n name: 'Date',\n value: 'Wed, 30 Sep 2026 09:00:00 +0000'\n },\n {\n name: 'From',\n value: 'practice@example.test'\n },\n {\n name: 'Subject',\n value: 'yolk-conformance trash probe: safe to delete'\n },\n {\n name: 'Message-ID',\n value: '<draft.0008@example.test>'\n }\n ]\n }\n },\n note: 'The restored message read back in INBOX by its new id. Synthetic.'\n },\n {\n id: 'email.imap.trash-untrash-to-inbox.delete.synthetic',\n port: 'EmailClient',\n method: 'deletePermanently',\n request: {\n connection: {\n protocol: 'imap',\n host: 'imap.example.test',\n port: 993,\n security: 'tls'\n },\n messageIds: ['1700000001:43'],\n folder: 'INBOX'\n },\n response: {\n results: [\n {\n messageId: '1700000001:43',\n status: 'succeeded'\n }\n ],\n summary: {\n requested: 1,\n succeeded: 1,\n failed: 0,\n unknown: 0,\n notAttempted: 0\n }\n },\n note: 'Restore: UID-scoped permanent delete where the message ended up. Synthetic.'\n },\n {\n id: 'email.imap.move-destination-ids.create.synthetic',\n port: 'EmailClient',\n method: 'createDraft',\n request: {\n connection: {\n protocol: 'imap',\n host: 'imap.example.test',\n port: 993,\n security: 'tls'\n },\n message: {\n to: [],\n subject: 'yolk-conformance move probe: safe to delete',\n body: {\n text: 'Synthetic conformance draft; never sent.'\n }\n },\n folder: 'Saved Drafts'\n },\n response: {\n saved: true,\n folder: 'Saved Drafts',\n draftId: '1700000002:9'\n },\n note: 'The case-owned draft in the seeded Drafts mailbox. Synthetic.'\n },\n {\n id: 'email.imap.move-destination-ids.move.synthetic',\n port: 'EmailClient',\n method: 'move',\n request: {\n connection: {\n protocol: 'imap',\n host: 'imap.example.test',\n port: 993,\n security: 'tls'\n },\n messageId: '1700000002:9',\n folder: 'Saved Drafts',\n destinationFolder: 'Archive'\n },\n response: {\n moved: true,\n folder: 'Archive',\n messageId: '1700000005:12'\n },\n note: 'UID MOVE (RFC 6851); COPYUID gives the destination UIDVALIDITY:UID. Synthetic.'\n },\n {\n id: 'email.imap.move-destination-ids.get-destination.synthetic',\n port: 'EmailClient',\n method: 'getMessage',\n request: {\n connection: {\n protocol: 'imap',\n host: 'imap.example.test',\n port: 993,\n security: 'tls'\n },\n messageId: '1700000005:12',\n folder: 'Archive'\n },\n response: {\n message: {\n id: '1700000005:12',\n messageId: '<draft.0009@example.test>',\n subject: 'yolk-conformance move probe: safe to delete',\n from: [\n {\n address: 'practice@example.test'\n }\n ],\n to: [],\n cc: [],\n bcc: [],\n replyTo: [],\n sentAt: '2026-09-30T09:00:00.000Z',\n body: {\n text: 'Synthetic conformance draft; never sent.'\n },\n attachments: [],\n isRead: true,\n isFlagged: false,\n headers: [\n {\n name: 'Date',\n value: 'Wed, 30 Sep 2026 09:00:00 +0000'\n },\n {\n name: 'From',\n value: 'practice@example.test'\n },\n {\n name: 'Subject',\n value: 'yolk-conformance move probe: safe to delete'\n },\n {\n name: 'Message-ID',\n value: '<draft.0009@example.test>'\n }\n ]\n }\n },\n note: 'The moved message read back by its destination id. Synthetic.'\n },\n {\n id: 'email.imap.move-destination-ids.get-stale-source.synthetic',\n port: 'EmailClient',\n method: 'getMessage',\n request: {\n connection: {\n protocol: 'imap',\n host: 'imap.example.test',\n port: 993,\n security: 'tls'\n },\n messageId: '1700000002:9',\n folder: 'Saved Drafts'\n },\n failure: {\n kind: 'expected',\n code: 'message_not_found',\n message: 'No message with that UID in the mailbox.'\n },\n note: 'The stale source id no longer resolves after the move. Synthetic.'\n },\n {\n id: 'email.imap.move-destination-ids.delete.synthetic',\n port: 'EmailClient',\n method: 'deletePermanently',\n request: {\n connection: {\n protocol: 'imap',\n host: 'imap.example.test',\n port: 993,\n security: 'tls'\n },\n messageIds: ['1700000005:12'],\n folder: 'Archive'\n },\n response: {\n results: [\n {\n messageId: '1700000005:12',\n status: 'succeeded'\n }\n ],\n summary: {\n requested: 1,\n succeeded: 1,\n failed: 0,\n unknown: 0,\n notAttempted: 0\n }\n },\n note: 'Restore: UID-scoped permanent delete in the destination. Synthetic.'\n },\n {\n id: 'email.pop3.rejects-folders-drafts-mutations.list.synthetic',\n port: 'EmailClient',\n method: 'listMessages',\n request: {\n connection: {\n protocol: 'pop3',\n host: 'pop3.example.test',\n port: 995,\n security: 'tls'\n },\n limit: 50\n },\n response: {\n messages: [\n {\n id: 'uidl-synthetic-0041',\n subject: 'Synthetic welcome',\n from: [\n {\n address: 'sender@example.test',\n name: 'Synthetic Sender'\n }\n ],\n to: [\n {\n address: 'practice@example.test'\n }\n ],\n sentAt: '2026-09-28T08:00:00.000Z',\n hasAttachments: false\n },\n {\n id: 'uidl-synthetic-0042',\n subject: 'Synthetic weekly summary',\n from: [\n {\n address: 'sender@example.test',\n name: 'Synthetic Sender'\n }\n ],\n to: [\n {\n address: 'practice@example.test'\n }\n ],\n sentAt: '2026-09-29T08:00:00.000Z',\n hasAttachments: false\n }\n ]\n },\n note: 'POP3 maildrop list (UIDL plus TOP headers); POP3 has no read or flagged state. Synthetic.'\n },\n {\n id: 'email.smtp.sent-copy-statuses.send-saved.synthetic',\n port: 'EmailClient',\n method: 'sendMessage',\n request: {\n connection: {\n protocol: 'smtp',\n host: 'smtp.example.test',\n port: 587,\n security: 'starttls'\n },\n message: {\n to: [\n {\n address: 'practice@example.test'\n }\n ],\n subject: 'yolk-conformance send: saved copy',\n body: {\n text: 'Synthetic conformance message to the practice mailbox.'\n }\n },\n sentCopy: {\n connection: {\n protocol: 'imap',\n host: 'imap.example.test',\n port: 993,\n security: 'tls'\n }\n }\n },\n response: {\n accepted: true,\n submissionId: 'synthetic-submission-0001',\n sentCopy: {\n status: 'saved',\n folder: 'Sent Items'\n }\n },\n note: 'SMTP 250 after DATA, then APPEND of the same bytes to the mailbox LIST advertises as \\\\Sent. Synthetic.'\n },\n {\n id: 'email.smtp.sent-copy-statuses.send-skipped.synthetic',\n port: 'EmailClient',\n method: 'sendMessage',\n request: {\n connection: {\n protocol: 'smtp',\n host: 'smtp.example.test',\n port: 587,\n security: 'starttls'\n },\n message: {\n to: [\n {\n address: 'practice@example.test'\n }\n ],\n subject: 'yolk-conformance send: copy skipped',\n body: {\n text: 'Synthetic conformance message to the practice mailbox.'\n }\n }\n },\n response: {\n accepted: true,\n submissionId: 'synthetic-submission-0002'\n },\n note: 'No sentCopy requested, none reported; the action synthesizes skipped. Synthetic.'\n },\n {\n id: 'email.smtp.sent-copy-statuses.send-failed.synthetic',\n port: 'EmailClient',\n method: 'sendMessage',\n request: {\n connection: {\n protocol: 'smtp',\n host: 'smtp.example.test',\n port: 587,\n security: 'starttls'\n },\n message: {\n to: [\n {\n address: 'practice@example.test'\n }\n ],\n subject: 'yolk-conformance send: copy fails',\n body: {\n text: 'Synthetic conformance message to the practice mailbox.'\n }\n },\n sentCopy: {\n connection: {\n protocol: 'imap',\n host: 'imap.example.test',\n port: 993,\n security: 'tls'\n },\n folder: 'yolk-conformance-missing-sent-folder'\n }\n },\n response: {\n accepted: true,\n submissionId: 'synthetic-submission-0003',\n sentCopy: {\n status: 'failed',\n folder: 'yolk-conformance-missing-sent-folder'\n }\n },\n note: 'SMTP accepted; APPEND answered NO [TRYCREATE], so the copy failed (never resend). Synthetic.'\n },\n {\n id: 'email.smtp.legacy-host-sent-copy.send-requested.synthetic',\n port: 'EmailClient',\n method: 'sendMessage',\n request: {\n connection: {\n protocol: 'smtp',\n host: 'smtp.example.test',\n port: 587,\n security: 'starttls'\n },\n message: {\n to: [\n {\n address: 'practice@example.test'\n }\n ],\n subject: 'yolk-conformance send: legacy host, copy requested',\n body: {\n text: 'Synthetic legacy-host conformance message.'\n }\n }\n },\n response: {\n accepted: true,\n submissionId: 'synthetic-submission-0004'\n },\n note: 'What the host sees behind the legacy shim: no sentCopy in, none out. Synthetic.'\n },\n {\n id: 'email.smtp.legacy-host-sent-copy.send-disabled.synthetic',\n port: 'EmailClient',\n method: 'sendMessage',\n request: {\n connection: {\n protocol: 'smtp',\n host: 'smtp.example.test',\n port: 587,\n security: 'starttls'\n },\n message: {\n to: [\n {\n address: 'practice@example.test'\n }\n ],\n subject: 'yolk-conformance send: legacy host, copy disabled',\n body: {\n text: 'Synthetic legacy-host conformance message.'\n }\n }\n },\n response: {\n accepted: true,\n submissionId: 'synthetic-submission-0005'\n },\n note: 'What the host sees behind the legacy shim: no sentCopy in, none out. Synthetic.'\n },\n {\n id: 'email.smtp.acceptance-not-delivery.send.synthetic',\n port: 'EmailClient',\n method: 'sendMessage',\n request: {\n connection: {\n protocol: 'smtp',\n host: 'smtp.example.test',\n port: 587,\n security: 'starttls'\n },\n message: {\n to: [\n {\n address: 'nobody@undeliverable.example.test'\n }\n ],\n subject: 'yolk-conformance send: accepted, undeliverable',\n body: {\n text: 'Synthetic conformance message to an undeliverable address.'\n }\n }\n },\n response: {\n accepted: true,\n submissionId: 'synthetic-submission-0006'\n },\n note: 'SMTP 250 for the submission; the bounce (DSN) would arrive later. Synthetic.'\n }\n]\n"],"mappings":";AAqCA,MAAa,wBAA6D;CACxE;EACE,IAAI;EACJ,MAAM;EACN,QAAQ;EACR,SAAS;GACP,YAAY;IACV,UAAU;IACV,MAAM;IACN,MAAM;IACN,UAAU;GACZ;GACA,OAAO;EACT;EACA,UAAU,EACR,UAAU,CACR;GACE,IAAI;GACJ,SAAS;GACT,MAAM,CACJ;IACE,SAAS;IACT,MAAM;GACR,CACF;GACA,IAAI,CACF,EACE,SAAS,wBACX,CACF;GACA,QAAQ;GACR,YAAY;GACZ,SAAS;GACT,gBAAgB;GAChB,QAAQ;GACR,WAAW;EACb,GACA;GACE,IAAI;GACJ,SAAS;GACT,MAAM,CACJ;IACE,SAAS;IACT,MAAM;GACR,CACF;GACA,IAAI,CACF,EACE,SAAS,wBACX,CACF;GACA,QAAQ;GACR,YAAY;GACZ,SAAS;GACT,gBAAgB;GAChB,QAAQ;GACR,WAAW;EACb,CACF,EACF;EACA,MAAM;CACR;CACA;EACE,IAAI;EACJ,MAAM;EACN,QAAQ;EACR,SAAS;GACP,YAAY;IACV,UAAU;IACV,MAAM;IACN,MAAM;IACN,UAAU;GACZ;GACA,WAAW;EACb;EACA,UAAU,EACR,SAAS;GACP,IAAI;GACJ,WAAW;GACX,SAAS;GACT,MAAM,CACJ;IACE,SAAS;IACT,MAAM;GACR,CACF;GACA,IAAI,CACF,EACE,SAAS,wBACX,CACF;GACA,IAAI,CAAC;GACL,KAAK,CAAC;GACN,SAAS,CAAC;GACV,QAAQ;GACR,YAAY;GACZ,MAAM,EACJ,MAAM,6CACR;GACA,aAAa,CAAC;GACd,QAAQ;GACR,WAAW;GACX,SAAS;IACP;KACE,MAAM;KACN,OAAO;IACT;IACA;KACE,MAAM;KACN,OAAO;IACT;IACA;KACE,MAAM;KACN,OAAO;IACT;IACA;KACE,MAAM;KACN,OAAO;IACT;IACA;KACE,MAAM;KACN,OAAO;IACT;GACF;EACF,EACF;EACA,MAAM;CACR;CACA;EACE,IAAI;EACJ,MAAM;EACN,QAAQ;EACR,SAAS;GACP,YAAY;IACV,UAAU;IACV,MAAM;IACN,MAAM;IACN,UAAU;GACZ;GACA,OAAO;EACT;EACA,UAAU,EACR,UAAU,CACR;GACE,IAAI;GACJ,SAAS;GACT,MAAM,CACJ;IACE,SAAS;IACT,MAAM;GACR,CACF;GACA,IAAI,CACF,EACE,SAAS,wBACX,CACF;GACA,QAAQ;GACR,YAAY;GACZ,SAAS;GACT,gBAAgB;GAChB,QAAQ;GACR,WAAW;EACb,GACA;GACE,IAAI;GACJ,SAAS;GACT,MAAM,CACJ;IACE,SAAS;IACT,MAAM;GACR,CACF;GACA,IAAI,CACF,EACE,SAAS,wBACX,CACF;GACA,QAAQ;GACR,YAAY;GACZ,SAAS;GACT,gBAAgB;GAChB,QAAQ;GACR,WAAW;EACb,CACF,EACF;EACA,MAAM;CACR;CACA;EACE,IAAI;EACJ,MAAM;EACN,QAAQ;EACR,SAAS;GACP,YAAY;IACV,UAAU;IACV,MAAM;IACN,MAAM;IACN,UAAU;GACZ;GACA,OAAO;GACP,QAAQ;EACV;EACA,UAAU,EACR,UAAU,CACR;GACE,IAAI;GACJ,SAAS;GACT,MAAM,CACJ;IACE,SAAS;IACT,MAAM;GACR,CACF;GACA,IAAI,CACF,EACE,SAAS,wBACX,CACF;GACA,QAAQ;GACR,YAAY;GACZ,SAAS;GACT,gBAAgB;GAChB,QAAQ;GACR,WAAW;EACb,CACF,EACF;EACA,MAAM;CACR;CACA;EACE,IAAI;EACJ,MAAM;EACN,QAAQ;EACR,SAAS;GACP,YAAY;IACV,UAAU;IACV,MAAM;IACN,MAAM;IACN,UAAU;GACZ;GACA,SAAS;IACP,IAAI,CAAC;IACL,SAAS;IACT,MAAM,EACJ,MAAM,2CACR;GACF;EACF;EACA,UAAU;GACR,OAAO;GACP,QAAQ;GACR,SAAS;EACX;EACA,MAAM;CACR;CACA;EACE,IAAI;EACJ,MAAM;EACN,QAAQ;EACR,SAAS;GACP,YAAY;IACV,UAAU;IACV,MAAM;IACN,MAAM;IACN,UAAU;GACZ;GACA,WAAW;GACX,QAAQ;EACV;EACA,UAAU,EACR,SAAS;GACP,IAAI;GACJ,WAAW;GACX,SAAS;GACT,MAAM,CACJ,EACE,SAAS,wBACX,CACF;GACA,IAAI,CAAC;GACL,IAAI,CAAC;GACL,KAAK,CAAC;GACN,SAAS,CAAC;GACV,QAAQ;GACR,MAAM,EACJ,MAAM,2CACR;GACA,aAAa,CAAC;GACd,QAAQ;GACR,WAAW;GACX,SAAS;IACP;KACE,MAAM;KACN,OAAO;IACT;IACA;KACE,MAAM;KACN,OAAO;IACT;IACA;KACE,MAAM;KACN,OAAO;IACT;IACA;KACE,MAAM;KACN,OAAO;IACT;GACF;EACF,EACF;EACA,MAAM;CACR;CACA;EACE,IAAI;EACJ,MAAM;EACN,QAAQ;EACR,SAAS;GACP,YAAY;IACV,UAAU;IACV,MAAM;IACN,MAAM;IACN,UAAU;GACZ;GACA,YAAY,CAAC,cAAc;GAC3B,QAAQ;EACV;EACA,UAAU;GACR,SAAS,CACP;IACE,WAAW;IACX,QAAQ;GACV,CACF;GACA,SAAS;IACP,WAAW;IACX,WAAW;IACX,QAAQ;IACR,SAAS;IACT,cAAc;GAChB;EACF;EACA,MAAM;CACR;CACA;EACE,IAAI;EACJ,MAAM;EACN,QAAQ;EACR,SAAS;GACP,YAAY;IACV,UAAU;IACV,MAAM;IACN,MAAM;IACN,UAAU;GACZ;GACA,WAAW;EACb;EACA,UAAU,EACR,SAAS;GACP,IAAI;GACJ,WAAW;GACX,SAAS;GACT,MAAM,CACJ;IACE,SAAS;IACT,MAAM;GACR,CACF;GACA,IAAI,CACF,EACE,SAAS,wBACX,CACF;GACA,IAAI,CAAC;GACL,KAAK,CAAC;GACN,SAAS,CAAC;GACV,QAAQ;GACR,YAAY;GACZ,MAAM,EACJ,MAAM,6CACR;GACA,aAAa,CAAC;GACd,QAAQ;GACR,WAAW;GACX,SAAS;IACP;KACE,MAAM;KACN,OAAO;IACT;IACA;KACE,MAAM;KACN,OAAO;IACT;IACA;KACE,MAAM;KACN,OAAO;IACT;IACA;KACE,MAAM;KACN,OAAO;IACT;IACA;KACE,MAAM;KACN,OAAO;IACT;GACF;EACF,EACF;EACA,MAAM;CACR;CACA;EACE,IAAI;EACJ,MAAM;EACN,QAAQ;EACR,SAAS;GACP,YAAY;IACV,UAAU;IACV,MAAM;IACN,MAAM;IACN,UAAU;GACZ;GACA,WAAW;GACX,QAAQ;GACR,QAAQ;EACV;EACA,UAAU;GACR,WAAW;GACX,QAAQ;EACV;EACA,MAAM;CACR;CACA;EACE,IAAI;EACJ,MAAM;EACN,QAAQ;EACR,SAAS;GACP,YAAY;IACV,UAAU;IACV,MAAM;IACN,MAAM;IACN,UAAU;GACZ;GACA,WAAW;EACb;EACA,UAAU,EACR,SAAS;GACP,IAAI;GACJ,WAAW;GACX,SAAS;GACT,MAAM,CACJ;IACE,SAAS;IACT,MAAM;GACR,CACF;GACA,IAAI,CACF,EACE,SAAS,wBACX,CACF;GACA,IAAI,CAAC;GACL,KAAK,CAAC;GACN,SAAS,CAAC;GACV,QAAQ;GACR,YAAY;GACZ,MAAM,EACJ,MAAM,6CACR;GACA,aAAa,CAAC;GACd,QAAQ;GACR,WAAW;GACX,SAAS;IACP;KACE,MAAM;KACN,OAAO;IACT;IACA;KACE,MAAM;KACN,OAAO;IACT;IACA;KACE,MAAM;KACN,OAAO;IACT;IACA;KACE,MAAM;KACN,OAAO;IACT;IACA;KACE,MAAM;KACN,OAAO;IACT;GACF;EACF,EACF;EACA,MAAM;CACR;CACA;EACE,IAAI;EACJ,MAAM;EACN,QAAQ;EACR,SAAS;GACP,YAAY;IACV,UAAU;IACV,MAAM;IACN,MAAM;IACN,UAAU;GACZ;GACA,WAAW;GACX,QAAQ;GACR,WAAW;EACb;EACA,UAAU;GACR,WAAW;GACX,WAAW;EACb;EACA,MAAM;CACR;CACA;EACE,IAAI;EACJ,MAAM;EACN,QAAQ;EACR,SAAS;GACP,YAAY;IACV,UAAU;IACV,MAAM;IACN,MAAM;IACN,UAAU;GACZ;GACA,WAAW;EACb;EACA,UAAU,EACR,SAAS;GACP,IAAI;GACJ,WAAW;GACX,SAAS;GACT,MAAM,CACJ;IACE,SAAS;IACT,MAAM;GACR,CACF;GACA,IAAI,CACF,EACE,SAAS,wBACX,CACF;GACA,IAAI,CAAC;GACL,KAAK,CAAC;GACN,SAAS,CAAC;GACV,QAAQ;GACR,YAAY;GACZ,MAAM,EACJ,MAAM,6CACR;GACA,aAAa,CAAC;GACd,QAAQ;GACR,WAAW;GACX,SAAS;IACP;KACE,MAAM;KACN,OAAO;IACT;IACA;KACE,MAAM;KACN,OAAO;IACT;IACA;KACE,MAAM;KACN,OAAO;IACT;IACA;KACE,MAAM;KACN,OAAO;IACT;IACA;KACE,MAAM;KACN,OAAO;IACT;GACF;EACF,EACF;EACA,MAAM;CACR;CACA;EACE,IAAI;EACJ,MAAM;EACN,QAAQ;EACR,SAAS;GACP,YAAY;IACV,UAAU;IACV,MAAM;IACN,MAAM;IACN,UAAU;GACZ;GACA,WAAW;GACX,QAAQ;GACR,QAAQ;EACV;EACA,UAAU;GACR,WAAW;GACX,QAAQ;EACV;EACA,MAAM;CACR;CACA;EACE,IAAI;EACJ,MAAM;EACN,QAAQ;EACR,SAAS;GACP,YAAY;IACV,UAAU;IACV,MAAM;IACN,MAAM;IACN,UAAU;GACZ;GACA,WAAW;GACX,QAAQ;GACR,WAAW;EACb;EACA,UAAU;GACR,WAAW;GACX,WAAW;EACb;EACA,MAAM;CACR;CACA;EACE,IAAI;EACJ,MAAM;EACN,QAAQ;EACR,SAAS;GACP,YAAY;IACV,UAAU;IACV,MAAM;IACN,MAAM;IACN,UAAU;GACZ;GACA,WAAW;EACb;EACA,UAAU,EACR,SAAS;GACP,IAAI;GACJ,WAAW;GACX,SAAS;GACT,MAAM,CACJ;IACE,SAAS;IACT,MAAM;GACR,CACF;GACA,IAAI,CACF,EACE,SAAS,wBACX,CACF;GACA,IAAI,CAAC;GACL,KAAK,CAAC;GACN,SAAS,CAAC;GACV,QAAQ;GACR,YAAY;GACZ,MAAM,EACJ,MAAM,6CACR;GACA,aAAa,CAAC;GACd,QAAQ;GACR,WAAW;GACX,SAAS;IACP;KACE,MAAM;KACN,OAAO;IACT;IACA;KACE,MAAM;KACN,OAAO;IACT;IACA;KACE,MAAM;KACN,OAAO;IACT;IACA;KACE,MAAM;KACN,OAAO;IACT;IACA;KACE,MAAM;KACN,OAAO;IACT;GACF;EACF,EACF;EACA,MAAM;CACR;CACA;EACE,IAAI;EACJ,MAAM;EACN,QAAQ;EACR,SAAS;GACP,YAAY;IACV,UAAU;IACV,MAAM;IACN,MAAM;IACN,UAAU;GACZ;GACA,SAAS;IACP,IAAI,CAAC;IACL,SAAS;IACT,MAAM,EACJ,MAAM,2CACR;GACF;GACA,QAAQ;EACV;EACA,UAAU;GACR,OAAO;GACP,QAAQ;GACR,SAAS;EACX;EACA,MAAM;CACR;CACA;EACE,IAAI;EACJ,MAAM;EACN,QAAQ;EACR,SAAS;GACP,YAAY;IACV,UAAU;IACV,MAAM;IACN,MAAM;IACN,UAAU;GACZ;GACA,WAAW;GACX,QAAQ;EACV;EACA,UAAU;GACR,OAAO;GACP,QAAQ;GACR,WAAW;EACb;EACA,MAAM;CACR;CACA;EACE,IAAI;EACJ,MAAM;EACN,QAAQ;EACR,SAAS;GACP,YAAY;IACV,UAAU;IACV,MAAM;IACN,MAAM;IACN,UAAU;GACZ;GACA,WAAW;GACX,QAAQ;GACR,mBAAmB;EACrB;EACA,UAAU;GACR,OAAO;GACP,QAAQ;GACR,WAAW;EACb;EACA,MAAM;CACR;CACA;EACE,IAAI;EACJ,MAAM;EACN,QAAQ;EACR,SAAS;GACP,YAAY;IACV,UAAU;IACV,MAAM;IACN,MAAM;IACN,UAAU;GACZ;GACA,WAAW;EACb;EACA,UAAU,EACR,SAAS;GACP,IAAI;GACJ,WAAW;GACX,SAAS;GACT,MAAM,CACJ,EACE,SAAS,wBACX,CACF;GACA,IAAI,CAAC;GACL,IAAI,CAAC;GACL,KAAK,CAAC;GACN,SAAS,CAAC;GACV,QAAQ;GACR,MAAM,EACJ,MAAM,2CACR;GACA,aAAa,CAAC;GACd,QAAQ;GACR,WAAW;GACX,SAAS;IACP;KACE,MAAM;KACN,OAAO;IACT;IACA;KACE,MAAM;KACN,OAAO;IACT;IACA;KACE,MAAM;KACN,OAAO;IACT;IACA;KACE,MAAM;KACN,OAAO;IACT;GACF;EACF,EACF;EACA,MAAM;CACR;CACA;EACE,IAAI;EACJ,MAAM;EACN,QAAQ;EACR,SAAS;GACP,YAAY;IACV,UAAU;IACV,MAAM;IACN,MAAM;IACN,UAAU;GACZ;GACA,YAAY,CAAC,eAAe;GAC5B,QAAQ;EACV;EACA,UAAU;GACR,SAAS,CACP;IACE,WAAW;IACX,QAAQ;GACV,CACF;GACA,SAAS;IACP,WAAW;IACX,WAAW;IACX,QAAQ;IACR,SAAS;IACT,cAAc;GAChB;EACF;EACA,MAAM;CACR;CACA;EACE,IAAI;EACJ,MAAM;EACN,QAAQ;EACR,SAAS;GACP,YAAY;IACV,UAAU;IACV,MAAM;IACN,MAAM;IACN,UAAU;GACZ;GACA,SAAS;IACP,IAAI,CAAC;IACL,SAAS;IACT,MAAM,EACJ,MAAM,2CACR;GACF;GACA,QAAQ;EACV;EACA,UAAU;GACR,OAAO;GACP,QAAQ;GACR,SAAS;EACX;EACA,MAAM;CACR;CACA;EACE,IAAI;EACJ,MAAM;EACN,QAAQ;EACR,SAAS;GACP,YAAY;IACV,UAAU;IACV,MAAM;IACN,MAAM;IACN,UAAU;GACZ;GACA,WAAW;GACX,QAAQ;GACR,mBAAmB;EACrB;EACA,UAAU;GACR,OAAO;GACP,QAAQ;GACR,WAAW;EACb;EACA,MAAM;CACR;CACA;EACE,IAAI;EACJ,MAAM;EACN,QAAQ;EACR,SAAS;GACP,YAAY;IACV,UAAU;IACV,MAAM;IACN,MAAM;IACN,UAAU;GACZ;GACA,WAAW;GACX,QAAQ;EACV;EACA,UAAU,EACR,SAAS;GACP,IAAI;GACJ,WAAW;GACX,SAAS;GACT,MAAM,CACJ,EACE,SAAS,wBACX,CACF;GACA,IAAI,CAAC;GACL,IAAI,CAAC;GACL,KAAK,CAAC;GACN,SAAS,CAAC;GACV,QAAQ;GACR,MAAM,EACJ,MAAM,2CACR;GACA,aAAa,CAAC;GACd,QAAQ;GACR,WAAW;GACX,SAAS;IACP;KACE,MAAM;KACN,OAAO;IACT;IACA;KACE,MAAM;KACN,OAAO;IACT;IACA;KACE,MAAM;KACN,OAAO;IACT;IACA;KACE,MAAM;KACN,OAAO;IACT;GACF;EACF,EACF;EACA,MAAM;CACR;CACA;EACE,IAAI;EACJ,MAAM;EACN,QAAQ;EACR,SAAS;GACP,YAAY;IACV,UAAU;IACV,MAAM;IACN,MAAM;IACN,UAAU;GACZ;GACA,WAAW;GACX,QAAQ;EACV;EACA,SAAS;GACP,MAAM;GACN,MAAM;GACN,SAAS;EACX;EACA,MAAM;CACR;CACA;EACE,IAAI;EACJ,MAAM;EACN,QAAQ;EACR,SAAS;GACP,YAAY;IACV,UAAU;IACV,MAAM;IACN,MAAM;IACN,UAAU;GACZ;GACA,YAAY,CAAC,eAAe;GAC5B,QAAQ;EACV;EACA,UAAU;GACR,SAAS,CACP;IACE,WAAW;IACX,QAAQ;GACV,CACF;GACA,SAAS;IACP,WAAW;IACX,WAAW;IACX,QAAQ;IACR,SAAS;IACT,cAAc;GAChB;EACF;EACA,MAAM;CACR;CACA;EACE,IAAI;EACJ,MAAM;EACN,QAAQ;EACR,SAAS;GACP,YAAY;IACV,UAAU;IACV,MAAM;IACN,MAAM;IACN,UAAU;GACZ;GACA,OAAO;EACT;EACA,UAAU,EACR,UAAU,CACR;GACE,IAAI;GACJ,SAAS;GACT,MAAM,CACJ;IACE,SAAS;IACT,MAAM;GACR,CACF;GACA,IAAI,CACF,EACE,SAAS,wBACX,CACF;GACA,QAAQ;GACR,gBAAgB;EAClB,GACA;GACE,IAAI;GACJ,SAAS;GACT,MAAM,CACJ;IACE,SAAS;IACT,MAAM;GACR,CACF;GACA,IAAI,CACF,EACE,SAAS,wBACX,CACF;GACA,QAAQ;GACR,gBAAgB;EAClB,CACF,EACF;EACA,MAAM;CACR;CACA;EACE,IAAI;EACJ,MAAM;EACN,QAAQ;EACR,SAAS;GACP,YAAY;IACV,UAAU;IACV,MAAM;IACN,MAAM;IACN,UAAU;GACZ;GACA,SAAS;IACP,IAAI,CACF,EACE,SAAS,wBACX,CACF;IACA,SAAS;IACT,MAAM,EACJ,MAAM,yDACR;GACF;GACA,UAAU,EACR,YAAY;IACV,UAAU;IACV,MAAM;IACN,MAAM;IACN,UAAU;GACZ,EACF;EACF;EACA,UAAU;GACR,UAAU;GACV,cAAc;GACd,UAAU;IACR,QAAQ;IACR,QAAQ;GACV;EACF;EACA,MAAM;CACR;CACA;EACE,IAAI;EACJ,MAAM;EACN,QAAQ;EACR,SAAS;GACP,YAAY;IACV,UAAU;IACV,MAAM;IACN,MAAM;IACN,UAAU;GACZ;GACA,SAAS;IACP,IAAI,CACF,EACE,SAAS,wBACX,CACF;IACA,SAAS;IACT,MAAM,EACJ,MAAM,yDACR;GACF;EACF;EACA,UAAU;GACR,UAAU;GACV,cAAc;EAChB;EACA,MAAM;CACR;CACA;EACE,IAAI;EACJ,MAAM;EACN,QAAQ;EACR,SAAS;GACP,YAAY;IACV,UAAU;IACV,MAAM;IACN,MAAM;IACN,UAAU;GACZ;GACA,SAAS;IACP,IAAI,CACF,EACE,SAAS,wBACX,CACF;IACA,SAAS;IACT,MAAM,EACJ,MAAM,yDACR;GACF;GACA,UAAU;IACR,YAAY;KACV,UAAU;KACV,MAAM;KACN,MAAM;KACN,UAAU;IACZ;IACA,QAAQ;GACV;EACF;EACA,UAAU;GACR,UAAU;GACV,cAAc;GACd,UAAU;IACR,QAAQ;IACR,QAAQ;GACV;EACF;EACA,MAAM;CACR;CACA;EACE,IAAI;EACJ,MAAM;EACN,QAAQ;EACR,SAAS;GACP,YAAY;IACV,UAAU;IACV,MAAM;IACN,MAAM;IACN,UAAU;GACZ;GACA,SAAS;IACP,IAAI,CACF,EACE,SAAS,wBACX,CACF;IACA,SAAS;IACT,MAAM,EACJ,MAAM,6CACR;GACF;EACF;EACA,UAAU;GACR,UAAU;GACV,cAAc;EAChB;EACA,MAAM;CACR;CACA;EACE,IAAI;EACJ,MAAM;EACN,QAAQ;EACR,SAAS;GACP,YAAY;IACV,UAAU;IACV,MAAM;IACN,MAAM;IACN,UAAU;GACZ;GACA,SAAS;IACP,IAAI,CACF,EACE,SAAS,wBACX,CACF;IACA,SAAS;IACT,MAAM,EACJ,MAAM,6CACR;GACF;EACF;EACA,UAAU;GACR,UAAU;GACV,cAAc;EAChB;EACA,MAAM;CACR;CACA;EACE,IAAI;EACJ,MAAM;EACN,QAAQ;EACR,SAAS;GACP,YAAY;IACV,UAAU;IACV,MAAM;IACN,MAAM;IACN,UAAU;GACZ;GACA,SAAS;IACP,IAAI,CACF,EACE,SAAS,oCACX,CACF;IACA,SAAS;IACT,MAAM,EACJ,MAAM,6DACR;GACF;EACF;EACA,UAAU;GACR,UAAU;GACV,cAAc;EAChB;EACA,MAAM;CACR;AACF"}
|
package/dist/email.d.mts
ADDED
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
import { EmulatorEvidence, EmulatorRouteEvidence } from "./route-evidence.mjs";
|
|
2
|
+
import { EmailEmulatorFailure, EmailEmulatorFixture, emailEmulatorFixtures } from "./email-fixtures.mjs";
|
|
3
|
+
import * as Schema from "effect/Schema";
|
|
4
|
+
|
|
5
|
+
//#region src/email.d.ts
|
|
6
|
+
/** The port every email fixture and manifest route names. */
|
|
7
|
+
declare const emailEmulatorPort = "EmailClient";
|
|
8
|
+
/** Manifest routes of port emulators use this pseudo method; `path` is `<Port>.<method>`. */
|
|
9
|
+
declare const emailEmulatorRouteMethod = "PORT";
|
|
10
|
+
/**
|
|
11
|
+
* Route evidence manifest: every emulated `EmailClient` method (`PORT EmailClient.<method>`) and the
|
|
12
|
+
* email conformance cases whose (synthetic, unverified) fixtures it follows. Write methods are
|
|
13
|
+
* unverified connector writes: they need a pending entry in the repo's evidence check until an
|
|
14
|
+
* owner-approved live run against a practice mailbox verifies them.
|
|
15
|
+
*/
|
|
16
|
+
declare const emailEmulatorRoutes: ReadonlyArray<EmulatorRouteEvidence>;
|
|
17
|
+
/** SPECIAL-USE attributes (RFC 6154) a seeded folder may advertise. */
|
|
18
|
+
declare const EmailEmulatorSpecialUse: Schema.Literals<readonly ["\\All", "\\Archive", "\\Drafts", "\\Flagged", "\\Junk", "\\Sent", "\\Trash"]>;
|
|
19
|
+
type EmailEmulatorSpecialUse = typeof EmailEmulatorSpecialUse.Type;
|
|
20
|
+
/**
|
|
21
|
+
* One message in the emulated mailbox. `id` is the opaque IMAP id (absent for a Sent copy whose
|
|
22
|
+
* id no fixture named), `uidl` the POP3 id of an INBOX message; unknown flags stay absent until a
|
|
23
|
+
* fixture reports them.
|
|
24
|
+
*/
|
|
25
|
+
declare const EmailEmulatorMessage: Schema.Struct<{
|
|
26
|
+
readonly id: Schema.optionalKey<Schema.String>;
|
|
27
|
+
readonly uidl: Schema.optionalKey<Schema.String>;
|
|
28
|
+
readonly subject: Schema.optionalKey<Schema.String>;
|
|
29
|
+
readonly isRead: Schema.optionalKey<Schema.Boolean>;
|
|
30
|
+
readonly isFlagged: Schema.optionalKey<Schema.Boolean>;
|
|
31
|
+
}>;
|
|
32
|
+
type EmailEmulatorMessage = typeof EmailEmulatorMessage.Type;
|
|
33
|
+
declare const EmailEmulatorFolder: Schema.Struct<{
|
|
34
|
+
readonly name: Schema.String;
|
|
35
|
+
readonly specialUse: Schema.optionalKey<Schema.Literals<readonly ["\\All", "\\Archive", "\\Drafts", "\\Flagged", "\\Junk", "\\Sent", "\\Trash"]>>;
|
|
36
|
+
readonly messages: Schema.$Array<Schema.Struct<{
|
|
37
|
+
readonly id: Schema.optionalKey<Schema.String>;
|
|
38
|
+
readonly uidl: Schema.optionalKey<Schema.String>;
|
|
39
|
+
readonly subject: Schema.optionalKey<Schema.String>;
|
|
40
|
+
readonly isRead: Schema.optionalKey<Schema.Boolean>;
|
|
41
|
+
readonly isFlagged: Schema.optionalKey<Schema.Boolean>;
|
|
42
|
+
}>>;
|
|
43
|
+
}>;
|
|
44
|
+
type EmailEmulatorFolder = typeof EmailEmulatorFolder.Type;
|
|
45
|
+
/** The emulated mailbox: plain JSON, used both as the seed and as the `state()` snapshot. */
|
|
46
|
+
declare const EmailEmulatorSeed: Schema.Struct<{
|
|
47
|
+
readonly folders: Schema.$Array<Schema.Struct<{
|
|
48
|
+
readonly name: Schema.String;
|
|
49
|
+
readonly specialUse: Schema.optionalKey<Schema.Literals<readonly ["\\All", "\\Archive", "\\Drafts", "\\Flagged", "\\Junk", "\\Sent", "\\Trash"]>>;
|
|
50
|
+
readonly messages: Schema.$Array<Schema.Struct<{
|
|
51
|
+
readonly id: Schema.optionalKey<Schema.String>;
|
|
52
|
+
readonly uidl: Schema.optionalKey<Schema.String>;
|
|
53
|
+
readonly subject: Schema.optionalKey<Schema.String>;
|
|
54
|
+
readonly isRead: Schema.optionalKey<Schema.Boolean>;
|
|
55
|
+
readonly isFlagged: Schema.optionalKey<Schema.Boolean>;
|
|
56
|
+
}>>;
|
|
57
|
+
}>>;
|
|
58
|
+
}>;
|
|
59
|
+
type EmailEmulatorSeed = typeof EmailEmulatorSeed.Type;
|
|
60
|
+
/** The synthetic practice mailbox the email fixtures describe (the default seed). */
|
|
61
|
+
declare const emailEmulatorDefaultSeed: EmailEmulatorSeed;
|
|
62
|
+
/**
|
|
63
|
+
* A fault: answer the next `count` calls (every one when omitted) of `method` whose credential-free
|
|
64
|
+
* request contains `match` (a deep subset: objects by key, arrays element by element, other values
|
|
65
|
+
* exactly) with `failure` instead of a fixture. Faults change no mailbox state.
|
|
66
|
+
*/
|
|
67
|
+
declare const EmailEmulatorFault: Schema.Struct<{
|
|
68
|
+
readonly kind: Schema.Literal<"failure">;
|
|
69
|
+
readonly method: Schema.String;
|
|
70
|
+
readonly match: Schema.optionalKey<Schema.$Record<Schema.String, Schema.Codec<Schema.Json, Schema.Json, never, never>>>;
|
|
71
|
+
readonly count: Schema.optionalKey<Schema.Int>;
|
|
72
|
+
readonly failure: Schema.Struct<{
|
|
73
|
+
readonly kind: Schema.Literals<readonly ["expected", "error"]>;
|
|
74
|
+
readonly code: Schema.String;
|
|
75
|
+
readonly message: Schema.String;
|
|
76
|
+
readonly status: Schema.optionalKey<Schema.Int>;
|
|
77
|
+
}>;
|
|
78
|
+
}>;
|
|
79
|
+
type EmailEmulatorFault = typeof EmailEmulatorFault.Type;
|
|
80
|
+
type EmailEmulatorFaultState = {
|
|
81
|
+
readonly id: number;
|
|
82
|
+
readonly fault: EmailEmulatorFault; /** Remaining matching calls; `undefined` for an unlimited fault. */
|
|
83
|
+
readonly remaining: number | undefined;
|
|
84
|
+
readonly applied: number;
|
|
85
|
+
};
|
|
86
|
+
declare const EmailEmulatorInputInvalid_base: new <A extends Record<string, any> = {}>(args: import("effect/Types").VoidIfEmpty<{ readonly [P in keyof A as P extends "_tag" ? never : P]: A[P] }>) => import("effect/Cause").YieldableError & {
|
|
87
|
+
readonly _tag: "EmailEmulatorInputInvalid";
|
|
88
|
+
} & Readonly<A>;
|
|
89
|
+
/** Thrown by `makeEmailEmulator` (invalid seed) and `faults.add` (invalid fault). */
|
|
90
|
+
declare class EmailEmulatorInputInvalid extends EmailEmulatorInputInvalid_base<{
|
|
91
|
+
readonly input: 'seed' | 'fault';
|
|
92
|
+
readonly reason: string;
|
|
93
|
+
}> {
|
|
94
|
+
get message(): string;
|
|
95
|
+
}
|
|
96
|
+
/** Why a call failed closed. */
|
|
97
|
+
type EmailEmulatorNotEmulatedReason = 'unknown-method' | 'invalid-request' | 'no-matching-fixture' | 'state-conflict';
|
|
98
|
+
/** One emulator answer; structurally the reply of a plain-JSON `EmailBackend`. */
|
|
99
|
+
type EmailEmulatorReply = {
|
|
100
|
+
readonly response: Schema.Json;
|
|
101
|
+
} | {
|
|
102
|
+
readonly failure: EmailEmulatorFailure;
|
|
103
|
+
} | {
|
|
104
|
+
readonly notEmulated: {
|
|
105
|
+
readonly reason: string;
|
|
106
|
+
};
|
|
107
|
+
};
|
|
108
|
+
type EmailEmulatorLedgerEntry = {
|
|
109
|
+
readonly seq: number;
|
|
110
|
+
readonly method: string; /** The request as received, without credential fields. */
|
|
111
|
+
readonly request: Schema.Json;
|
|
112
|
+
readonly outcome: 'answered' | 'fault' | 'not-emulated'; /** `unknown-method` for a method outside the manifest. */
|
|
113
|
+
readonly evidence: EmulatorEvidence | 'unknown-method';
|
|
114
|
+
readonly fixtureId?: string;
|
|
115
|
+
readonly faultId?: number;
|
|
116
|
+
readonly reason?: EmailEmulatorNotEmulatedReason;
|
|
117
|
+
};
|
|
118
|
+
type EmailEmulatorRouteCoverage = EmulatorRouteEvidence & {
|
|
119
|
+
/** Ledger calls to this method since the last ledger clear or reset. */readonly calls: number;
|
|
120
|
+
};
|
|
121
|
+
type EmailEmulatorCoverage = {
|
|
122
|
+
readonly routes: ReadonlyArray<EmailEmulatorRouteCoverage>; /** Ledger calls that failed closed. */
|
|
123
|
+
readonly notEmulatedCalls: number; /** Fixtures that have not answered a call since the emulator was made or last reset. */
|
|
124
|
+
readonly unusedFixtureIds: ReadonlyArray<string>;
|
|
125
|
+
};
|
|
126
|
+
type EmailEmulatorOptions = {
|
|
127
|
+
/** The initial mailbox. Defaults to `emailEmulatorDefaultSeed`. */readonly seed?: EmailEmulatorSeed;
|
|
128
|
+
};
|
|
129
|
+
type EmailEmulator = {
|
|
130
|
+
/** Answer one `EmailClient` call; never throws. This makes the emulator an `EmailBackend`. */readonly call: (method: string, request: Schema.Json) => EmailEmulatorReply; /** The current mailbox (a copy). */
|
|
131
|
+
readonly state: () => EmailEmulatorSeed; /** The seed the emulator started from (a copy). */
|
|
132
|
+
readonly seed: () => EmailEmulatorSeed;
|
|
133
|
+
readonly ledger: {
|
|
134
|
+
readonly entries: () => ReadonlyArray<EmailEmulatorLedgerEntry>;
|
|
135
|
+
readonly clear: () => void;
|
|
136
|
+
}; /** Clear the ledger and faults, forget fixture use, and restore the seeded mailbox. */
|
|
137
|
+
readonly reset: () => void;
|
|
138
|
+
readonly faults: {
|
|
139
|
+
readonly add: (fault: EmailEmulatorFault) => EmailEmulatorFaultState;
|
|
140
|
+
readonly list: () => ReadonlyArray<EmailEmulatorFaultState>;
|
|
141
|
+
readonly clear: () => void;
|
|
142
|
+
};
|
|
143
|
+
readonly coverage: () => EmailEmulatorCoverage;
|
|
144
|
+
};
|
|
145
|
+
/**
|
|
146
|
+
* Create an email emulator. Each call has its own mailbox, ledger, faults, and fixture use.
|
|
147
|
+
*
|
|
148
|
+
* `call(method, request)` answers in this order: an unknown method or a non-object request fails
|
|
149
|
+
* closed; the first active matching fault answers its failure; otherwise the fixtures whose method
|
|
150
|
+
* and request match (after the request-shape latitude) are checked against the mailbox, and the
|
|
151
|
+
* first consistent one (preferring one not used since the last reset) answers and updates the
|
|
152
|
+
* mailbox; no match (`no-matching-fixture`) or no consistent match (`state-conflict`) fails closed.
|
|
153
|
+
* Every call is written to the ledger without credential fields.
|
|
154
|
+
*
|
|
155
|
+
* Throws `EmailEmulatorInputInvalid` for an invalid seed.
|
|
156
|
+
*/
|
|
157
|
+
declare const makeEmailEmulator: (options?: EmailEmulatorOptions) => EmailEmulator;
|
|
158
|
+
//#endregion
|
|
159
|
+
export { EmailEmulator, EmailEmulatorCoverage, type EmailEmulatorFailure, EmailEmulatorFault, EmailEmulatorFaultState, type EmailEmulatorFixture, EmailEmulatorFolder, EmailEmulatorInputInvalid, EmailEmulatorLedgerEntry, EmailEmulatorMessage, EmailEmulatorNotEmulatedReason, EmailEmulatorOptions, EmailEmulatorReply, EmailEmulatorRouteCoverage, EmailEmulatorSeed, EmailEmulatorSpecialUse, type EmulatorEvidence, type EmulatorRouteEvidence, emailEmulatorDefaultSeed, emailEmulatorFixtures, emailEmulatorPort, emailEmulatorRouteMethod, emailEmulatorRoutes, makeEmailEmulator };
|
|
160
|
+
//# sourceMappingURL=email.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"email.d.mts","names":[],"sources":["../src/email.ts"],"mappings":";;;;;AA8CA;AAAA,cAAa,iBAAA;;cAGA,wBAAA;AAHiB;AAG9B;;;;AAAqC;AAHP,cA6CjB,mBAAA,EAAqB,aAAa,CAAC,qBAAA;;cAuBnC,uBAAA,EAAuB,MAAA,CAAA,QAAA;AAAA,KAUxB,uBAAA,UAAiC,uBAAA,CAAwB,IAAI;AAjCJ;AAuBrE;;;;AAvBqE,cAwCxD,oBAAA,EAAoB,MAAA,CAAA,MAAA;EAAA;;;;;;KAQrB,oBAAA,UAA8B,oBAAA,CAAqB,IAAI;AAAA,cAEtD,mBAAA,EAAmB,MAAA,CAAA,MAAA;EAAA;;;;;;;;;;KAMpB,mBAAA,UAA6B,mBAAA,CAAoB,IAAI;;cAGpD,iBAAA,EAAiB,MAAA,CAAA,MAAA;EAAA;;;;;;;;;;;;KAIlB,iBAAA,UAA2B,iBAAA,CAAkB,IAAI;;cAGhD,wBAAA,EAA0B,iBA0BtC;;;;;;cAcY,kBAAA,EAAkB,MAAA,CAAA,MAAA;EAAA;;;;;;;;;;;KAQnB,kBAAA,UAA4B,kBAAA,CAAmB,IAAI;AAAA,KAEnD,uBAAA;EAAA,SACD,EAAA;EAAA,SACA,KAAA,EAAO,kBAAkB;WAEzB,SAAA;EAAA,SACA,OAAA;AAAA;AAAA,cACV,8BAAA;;;;cAGY,yBAAA,SAAkC,8BAAA;EAAA,SACpC,KAAA;EAAA,SACA,MAAA;AAAA;EAAA,IAEI,OAAA,CAAA;AAAA;;KAMH,8BAAA;;KAcA,kBAAA;EAAA,SACG,QAAA,EAAU,MAAA,CAAO,IAAA;AAAA;EAAA,SACjB,OAAA,EAAS,oBAAoB;AAAA;EAAA,SAC7B,WAAA;IAAA,SAAwB,MAAA;EAAA;AAAA;AAAA,KAE3B,wBAAA;EAAA,SACD,GAAA;EAAA,SACA,MAAA;WAEA,OAAA,EAAS,MAAA,CAAO,IAAA;EAAA,SAChB,OAAA;WAEA,QAAA,EAAU,gBAAA;EAAA,SACV,SAAA;EAAA,SACA,OAAA;EAAA,SACA,MAAA,GAAS,8BAAA;AAAA;AAAA,KAGR,0BAAA,GAA6B,qBAAqB;mFAEnD,KAAK;AAAA;AAAA,KAGJ,qBAAA;EAAA,SACD,MAAA,EAAQ,aAAA,CAAc,0BAAA;WAEtB,gBAAA;WAEA,gBAAA,EAAkB,aAAA;AAAA;AAAA,KAGjB,oBAAA;8EAED,IAAA,GAAO,iBAAiB;AAAA;AAAA,KAGvB,aAAA;yGAED,IAAA,GAAO,MAAA,UAAgB,OAAA,EAAS,MAAA,CAAO,IAAA,KAAS,kBAAA;WAEhD,KAAA,QAAa,iBAAA;WAEb,IAAA,QAAY,iBAAA;EAAA,SACZ,MAAA;IAAA,SACE,OAAA,QAAe,aAAA,CAAc,wBAAA;IAAA,SAC7B,KAAA;EAAA,GA1I4B;EAAA,SA6I9B,KAAA;EAAA,SACA,MAAA;IAAA,SACE,GAAA,GAAM,KAAA,EAAO,kBAAA,KAAuB,uBAAA;IAAA,SACpC,IAAA,QAAY,aAAA,CAAc,uBAAA;IAAA,SAC1B,KAAA;EAAA;EAAA,SAEF,QAAA,QAAgB,qBAAA;AAAA;;;;;;;;;;;;;cAqnBd,iBAAA,GAAqB,OAAA,GAAS,oBAAA,KAA4B,aAwLtE"}
|