@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.
Files changed (333) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +2135 -0
  3. package/dist/anthropic.d.mts +269 -0
  4. package/dist/anthropic.d.mts.map +1 -0
  5. package/dist/anthropic.mjs +177 -0
  6. package/dist/anthropic.mjs.map +1 -0
  7. package/dist/chat-completions.d.mts +288 -0
  8. package/dist/chat-completions.d.mts.map +1 -0
  9. package/dist/chat-completions.mjs +451 -0
  10. package/dist/chat-completions.mjs.map +1 -0
  11. package/dist/codex.d.mts +265 -0
  12. package/dist/codex.d.mts.map +1 -0
  13. package/dist/codex.mjs +199 -0
  14. package/dist/codex.mjs.map +1 -0
  15. package/dist/dropbox/api.d.mts +63 -0
  16. package/dist/dropbox/api.d.mts.map +1 -0
  17. package/dist/dropbox/api.mjs +565 -0
  18. package/dist/dropbox/api.mjs.map +1 -0
  19. package/dist/dropbox/state.d.mts +136 -0
  20. package/dist/dropbox/state.d.mts.map +1 -0
  21. package/dist/dropbox/state.mjs +209 -0
  22. package/dist/dropbox/state.mjs.map +1 -0
  23. package/dist/dropbox.d.mts +79 -0
  24. package/dist/dropbox.d.mts.map +1 -0
  25. package/dist/dropbox.mjs +124 -0
  26. package/dist/dropbox.mjs.map +1 -0
  27. package/dist/email-fixtures.d.mts +36 -0
  28. package/dist/email-fixtures.d.mts.map +1 -0
  29. package/dist/email-fixtures.mjs +1080 -0
  30. package/dist/email-fixtures.mjs.map +1 -0
  31. package/dist/email.d.mts +160 -0
  32. package/dist/email.d.mts.map +1 -0
  33. package/dist/email.mjs +608 -0
  34. package/dist/email.mjs.map +1 -0
  35. package/dist/emulator-compose.d.mts +40 -0
  36. package/dist/emulator-compose.d.mts.map +1 -0
  37. package/dist/emulator-compose.mjs +91 -0
  38. package/dist/emulator-compose.mjs.map +1 -0
  39. package/dist/emulator-http.d.mts +53 -0
  40. package/dist/emulator-http.d.mts.map +1 -0
  41. package/dist/emulator-http.mjs +117 -0
  42. package/dist/emulator-http.mjs.map +1 -0
  43. package/dist/emulator-kernel.d.mts +176 -0
  44. package/dist/emulator-kernel.d.mts.map +1 -0
  45. package/dist/emulator-kernel.mjs +413 -0
  46. package/dist/emulator-kernel.mjs.map +1 -0
  47. package/dist/fixture-route.d.mts +129 -0
  48. package/dist/fixture-route.d.mts.map +1 -0
  49. package/dist/fixture-route.mjs +257 -0
  50. package/dist/fixture-route.mjs.map +1 -0
  51. package/dist/fortnox/api.d.mts +92 -0
  52. package/dist/fortnox/api.d.mts.map +1 -0
  53. package/dist/fortnox/api.mjs +750 -0
  54. package/dist/fortnox/api.mjs.map +1 -0
  55. package/dist/fortnox/state.d.mts +533 -0
  56. package/dist/fortnox/state.d.mts.map +1 -0
  57. package/dist/fortnox/state.mjs +612 -0
  58. package/dist/fortnox/state.mjs.map +1 -0
  59. package/dist/fortnox.d.mts +128 -0
  60. package/dist/fortnox.d.mts.map +1 -0
  61. package/dist/fortnox.mjs +403 -0
  62. package/dist/fortnox.mjs.map +1 -0
  63. package/dist/gateway-evaluate-recordings.d.mts +12 -0
  64. package/dist/gateway-evaluate-recordings.d.mts.map +1 -0
  65. package/dist/gateway-evaluate-recordings.mjs +128 -0
  66. package/dist/gateway-evaluate-recordings.mjs.map +1 -0
  67. package/dist/gateway.d.mts +272 -0
  68. package/dist/gateway.d.mts.map +1 -0
  69. package/dist/gateway.mjs +400 -0
  70. package/dist/gateway.mjs.map +1 -0
  71. package/dist/github/api.d.mts +63 -0
  72. package/dist/github/api.d.mts.map +1 -0
  73. package/dist/github/api.mjs +527 -0
  74. package/dist/github/api.mjs.map +1 -0
  75. package/dist/github/state.d.mts +272 -0
  76. package/dist/github/state.d.mts.map +1 -0
  77. package/dist/github/state.mjs +303 -0
  78. package/dist/github/state.mjs.map +1 -0
  79. package/dist/github.d.mts +77 -0
  80. package/dist/github.d.mts.map +1 -0
  81. package/dist/github.mjs +180 -0
  82. package/dist/github.mjs.map +1 -0
  83. package/dist/google/calendar.d.mts +10 -0
  84. package/dist/google/calendar.d.mts.map +1 -0
  85. package/dist/google/calendar.mjs +252 -0
  86. package/dist/google/calendar.mjs.map +1 -0
  87. package/dist/google/drive.d.mts +8 -0
  88. package/dist/google/drive.d.mts.map +1 -0
  89. package/dist/google/drive.mjs +252 -0
  90. package/dist/google/drive.mjs.map +1 -0
  91. package/dist/google/gmail.d.mts +10 -0
  92. package/dist/google/gmail.d.mts.map +1 -0
  93. package/dist/google/gmail.mjs +591 -0
  94. package/dist/google/gmail.mjs.map +1 -0
  95. package/dist/google/shared.d.mts +107 -0
  96. package/dist/google/shared.d.mts.map +1 -0
  97. package/dist/google/shared.mjs +146 -0
  98. package/dist/google/shared.mjs.map +1 -0
  99. package/dist/google/state.d.mts +385 -0
  100. package/dist/google/state.d.mts.map +1 -0
  101. package/dist/google/state.mjs +496 -0
  102. package/dist/google/state.mjs.map +1 -0
  103. package/dist/google.d.mts +75 -0
  104. package/dist/google.d.mts.map +1 -0
  105. package/dist/google.mjs +210 -0
  106. package/dist/google.mjs.map +1 -0
  107. package/dist/linkedin-search/api.d.mts +45 -0
  108. package/dist/linkedin-search/api.d.mts.map +1 -0
  109. package/dist/linkedin-search/api.mjs +181 -0
  110. package/dist/linkedin-search/api.mjs.map +1 -0
  111. package/dist/linkedin-search/state.d.mts +123 -0
  112. package/dist/linkedin-search/state.d.mts.map +1 -0
  113. package/dist/linkedin-search/state.mjs +261 -0
  114. package/dist/linkedin-search/state.mjs.map +1 -0
  115. package/dist/linkedin-search.d.mts +69 -0
  116. package/dist/linkedin-search.d.mts.map +1 -0
  117. package/dist/linkedin-search.mjs +158 -0
  118. package/dist/linkedin-search.mjs.map +1 -0
  119. package/dist/mcp/api.d.mts +44 -0
  120. package/dist/mcp/api.d.mts.map +1 -0
  121. package/dist/mcp/api.mjs +557 -0
  122. package/dist/mcp/api.mjs.map +1 -0
  123. package/dist/mcp/recordings.d.mts +40 -0
  124. package/dist/mcp/recordings.d.mts.map +1 -0
  125. package/dist/mcp/recordings.mjs +2390 -0
  126. package/dist/mcp/recordings.mjs.map +1 -0
  127. package/dist/mcp/state.d.mts +71 -0
  128. package/dist/mcp/state.d.mts.map +1 -0
  129. package/dist/mcp/state.mjs +83 -0
  130. package/dist/mcp/state.mjs.map +1 -0
  131. package/dist/mcp.d.mts +84 -0
  132. package/dist/mcp.d.mts.map +1 -0
  133. package/dist/mcp.mjs +241 -0
  134. package/dist/mcp.mjs.map +1 -0
  135. package/dist/messages.d.mts +183 -0
  136. package/dist/messages.d.mts.map +1 -0
  137. package/dist/messages.mjs +532 -0
  138. package/dist/messages.mjs.map +1 -0
  139. package/dist/microsoft/api.d.mts +47 -0
  140. package/dist/microsoft/api.d.mts.map +1 -0
  141. package/dist/microsoft/api.mjs +178 -0
  142. package/dist/microsoft/api.mjs.map +1 -0
  143. package/dist/microsoft/calendar.d.mts +30 -0
  144. package/dist/microsoft/calendar.d.mts.map +1 -0
  145. package/dist/microsoft/calendar.mjs +271 -0
  146. package/dist/microsoft/calendar.mjs.map +1 -0
  147. package/dist/microsoft/drive.d.mts +36 -0
  148. package/dist/microsoft/drive.d.mts.map +1 -0
  149. package/dist/microsoft/drive.mjs +298 -0
  150. package/dist/microsoft/drive.mjs.map +1 -0
  151. package/dist/microsoft/graph.d.mts +198 -0
  152. package/dist/microsoft/graph.d.mts.map +1 -0
  153. package/dist/microsoft/graph.mjs +264 -0
  154. package/dist/microsoft/graph.mjs.map +1 -0
  155. package/dist/microsoft/mail.d.mts +48 -0
  156. package/dist/microsoft/mail.d.mts.map +1 -0
  157. package/dist/microsoft/mail.mjs +488 -0
  158. package/dist/microsoft/mail.mjs.map +1 -0
  159. package/dist/microsoft/state.d.mts +480 -0
  160. package/dist/microsoft/state.d.mts.map +1 -0
  161. package/dist/microsoft/state.mjs +625 -0
  162. package/dist/microsoft/state.mjs.map +1 -0
  163. package/dist/microsoft.d.mts +168 -0
  164. package/dist/microsoft.d.mts.map +1 -0
  165. package/dist/microsoft.mjs +483 -0
  166. package/dist/microsoft.mjs.map +1 -0
  167. package/dist/node.d.mts +47 -0
  168. package/dist/node.d.mts.map +1 -0
  169. package/dist/node.mjs +178 -0
  170. package/dist/node.mjs.map +1 -0
  171. package/dist/notion/api.d.mts +51 -0
  172. package/dist/notion/api.d.mts.map +1 -0
  173. package/dist/notion/api.mjs +507 -0
  174. package/dist/notion/api.mjs.map +1 -0
  175. package/dist/notion/state.d.mts +329 -0
  176. package/dist/notion/state.d.mts.map +1 -0
  177. package/dist/notion/state.mjs +432 -0
  178. package/dist/notion/state.mjs.map +1 -0
  179. package/dist/notion.d.mts +72 -0
  180. package/dist/notion.d.mts.map +1 -0
  181. package/dist/notion.mjs +127 -0
  182. package/dist/notion.mjs.map +1 -0
  183. package/dist/openai.d.mts +165 -0
  184. package/dist/openai.d.mts.map +1 -0
  185. package/dist/openai.mjs +141 -0
  186. package/dist/openai.mjs.map +1 -0
  187. package/dist/opencode-recordings.d.mts +7 -0
  188. package/dist/opencode-recordings.d.mts.map +1 -0
  189. package/dist/opencode-recordings.mjs +222 -0
  190. package/dist/opencode-recordings.mjs.map +1 -0
  191. package/dist/opencode.d.mts +70 -0
  192. package/dist/opencode.d.mts.map +1 -0
  193. package/dist/opencode.mjs +217 -0
  194. package/dist/opencode.mjs.map +1 -0
  195. package/dist/r2-fixtures.d.mts +36 -0
  196. package/dist/r2-fixtures.d.mts.map +1 -0
  197. package/dist/r2-fixtures.mjs +245 -0
  198. package/dist/r2-fixtures.mjs.map +1 -0
  199. package/dist/r2-guard.d.mts +43 -0
  200. package/dist/r2-guard.d.mts.map +1 -0
  201. package/dist/r2-guard.mjs +215 -0
  202. package/dist/r2-guard.mjs.map +1 -0
  203. package/dist/r2.d.mts +166 -0
  204. package/dist/r2.d.mts.map +1 -0
  205. package/dist/r2.mjs +517 -0
  206. package/dist/r2.mjs.map +1 -0
  207. package/dist/responses.d.mts +231 -0
  208. package/dist/responses.d.mts.map +1 -0
  209. package/dist/responses.mjs +556 -0
  210. package/dist/responses.mjs.map +1 -0
  211. package/dist/route-evidence.d.mts +45 -0
  212. package/dist/route-evidence.d.mts.map +1 -0
  213. package/dist/route-evidence.mjs +56 -0
  214. package/dist/route-evidence.mjs.map +1 -0
  215. package/dist/router.d.mts +93 -0
  216. package/dist/router.d.mts.map +1 -0
  217. package/dist/router.mjs +259 -0
  218. package/dist/router.mjs.map +1 -0
  219. package/dist/stateful-core.d.mts +17 -0
  220. package/dist/stateful-core.d.mts.map +1 -0
  221. package/dist/stateful-core.mjs +41 -0
  222. package/dist/stateful-core.mjs.map +1 -0
  223. package/dist/stateful-emulator.d.mts +565 -0
  224. package/dist/stateful-emulator.d.mts.map +1 -0
  225. package/dist/stateful-emulator.mjs +1228 -0
  226. package/dist/stateful-emulator.mjs.map +1 -0
  227. package/dist/stateful-secrets.d.mts +84 -0
  228. package/dist/stateful-secrets.d.mts.map +1 -0
  229. package/dist/stateful-secrets.mjs +216 -0
  230. package/dist/stateful-secrets.mjs.map +1 -0
  231. package/dist/subscription-usage-recordings.d.mts +9 -0
  232. package/dist/subscription-usage-recordings.d.mts.map +1 -0
  233. package/dist/subscription-usage-recordings.mjs +53 -0
  234. package/dist/subscription-usage-recordings.mjs.map +1 -0
  235. package/dist/subscription-usage.d.mts +53 -0
  236. package/dist/subscription-usage.d.mts.map +1 -0
  237. package/dist/subscription-usage.mjs +21 -0
  238. package/dist/subscription-usage.mjs.map +1 -0
  239. package/dist/telegram/api.d.mts +34 -0
  240. package/dist/telegram/api.d.mts.map +1 -0
  241. package/dist/telegram/api.mjs +257 -0
  242. package/dist/telegram/api.mjs.map +1 -0
  243. package/dist/telegram/state.d.mts +128 -0
  244. package/dist/telegram/state.d.mts.map +1 -0
  245. package/dist/telegram/state.mjs +154 -0
  246. package/dist/telegram/state.mjs.map +1 -0
  247. package/dist/telegram.d.mts +62 -0
  248. package/dist/telegram.d.mts.map +1 -0
  249. package/dist/telegram.mjs +127 -0
  250. package/dist/telegram.mjs.map +1 -0
  251. package/dist/todoist/api.d.mts +55 -0
  252. package/dist/todoist/api.d.mts.map +1 -0
  253. package/dist/todoist/api.mjs +415 -0
  254. package/dist/todoist/api.mjs.map +1 -0
  255. package/dist/todoist/state.d.mts +275 -0
  256. package/dist/todoist/state.d.mts.map +1 -0
  257. package/dist/todoist/state.mjs +345 -0
  258. package/dist/todoist/state.mjs.map +1 -0
  259. package/dist/todoist.d.mts +68 -0
  260. package/dist/todoist.d.mts.map +1 -0
  261. package/dist/todoist.mjs +181 -0
  262. package/dist/todoist.mjs.map +1 -0
  263. package/dist/xai.d.mts +267 -0
  264. package/dist/xai.d.mts.map +1 -0
  265. package/dist/xai.mjs +252 -0
  266. package/dist/xai.mjs.map +1 -0
  267. package/package.json +157 -0
  268. package/src/anthropic.ts +289 -0
  269. package/src/chat-completions.ts +924 -0
  270. package/src/codex.ts +296 -0
  271. package/src/dropbox/api.ts +1084 -0
  272. package/src/dropbox/state.ts +364 -0
  273. package/src/dropbox.ts +203 -0
  274. package/src/email-fixtures.ts +1297 -0
  275. package/src/email.ts +1108 -0
  276. package/src/emulator-compose.ts +147 -0
  277. package/src/emulator-http.ts +184 -0
  278. package/src/emulator-kernel.ts +844 -0
  279. package/src/fixture-route.ts +561 -0
  280. package/src/fortnox/api.ts +1352 -0
  281. package/src/fortnox/state.ts +798 -0
  282. package/src/fortnox.ts +801 -0
  283. package/src/gateway-evaluate-recordings.ts +153 -0
  284. package/src/gateway.ts +530 -0
  285. package/src/github/api.ts +986 -0
  286. package/src/github/state.ts +439 -0
  287. package/src/github.ts +271 -0
  288. package/src/google/calendar.ts +486 -0
  289. package/src/google/drive.ts +471 -0
  290. package/src/google/gmail.ts +1011 -0
  291. package/src/google/shared.ts +321 -0
  292. package/src/google/state.ts +686 -0
  293. package/src/google.ts +298 -0
  294. package/src/linkedin-search/api.ts +363 -0
  295. package/src/linkedin-search/state.ts +373 -0
  296. package/src/linkedin-search.ts +241 -0
  297. package/src/mcp/api.ts +995 -0
  298. package/src/mcp/recordings.ts +2665 -0
  299. package/src/mcp/state.ts +125 -0
  300. package/src/mcp.ts +319 -0
  301. package/src/messages.ts +844 -0
  302. package/src/microsoft/api.ts +426 -0
  303. package/src/microsoft/calendar.ts +491 -0
  304. package/src/microsoft/drive.ts +541 -0
  305. package/src/microsoft/graph.ts +550 -0
  306. package/src/microsoft/mail.ts +833 -0
  307. package/src/microsoft/state.ts +822 -0
  308. package/src/microsoft.ts +982 -0
  309. package/src/node.ts +293 -0
  310. package/src/notion/api.ts +976 -0
  311. package/src/notion/state.ts +512 -0
  312. package/src/notion.ts +210 -0
  313. package/src/openai.ts +198 -0
  314. package/src/opencode-recordings.ts +257 -0
  315. package/src/opencode.ts +271 -0
  316. package/src/r2-fixtures.ts +295 -0
  317. package/src/r2-guard.ts +323 -0
  318. package/src/r2.ts +890 -0
  319. package/src/responses.ts +901 -0
  320. package/src/route-evidence.ts +90 -0
  321. package/src/router.ts +490 -0
  322. package/src/stateful-core.ts +70 -0
  323. package/src/stateful-emulator.ts +2571 -0
  324. package/src/stateful-secrets.ts +299 -0
  325. package/src/subscription-usage-recordings.ts +77 -0
  326. package/src/subscription-usage.ts +68 -0
  327. package/src/telegram/api.ts +437 -0
  328. package/src/telegram/state.ts +229 -0
  329. package/src/telegram.ts +227 -0
  330. package/src/todoist/api.ts +736 -0
  331. package/src/todoist/state.ts +456 -0
  332. package/src/todoist.ts +316 -0
  333. package/src/xai.ts +341 -0
@@ -0,0 +1,1080 @@
1
+ //#region src/email-fixtures.ts
2
+ const emailEmulatorFixtures = [
3
+ {
4
+ id: "email.imap.list-and-get-headers.list.synthetic",
5
+ port: "EmailClient",
6
+ method: "listMessages",
7
+ request: {
8
+ connection: {
9
+ protocol: "imap",
10
+ host: "imap.example.test",
11
+ port: 993,
12
+ security: "tls"
13
+ },
14
+ limit: 50
15
+ },
16
+ response: { messages: [{
17
+ id: "1700000001:41",
18
+ subject: "Synthetic welcome",
19
+ from: [{
20
+ address: "sender@example.test",
21
+ name: "Synthetic Sender"
22
+ }],
23
+ to: [{ address: "practice@example.test" }],
24
+ sentAt: "2026-09-28T08:00:00.000Z",
25
+ receivedAt: "2026-09-28T08:00:05.000Z",
26
+ snippet: "Welcome to the synthetic practice mailbox.",
27
+ hasAttachments: false,
28
+ isRead: false,
29
+ isFlagged: false
30
+ }, {
31
+ id: "1700000001:42",
32
+ subject: "Synthetic weekly summary",
33
+ from: [{
34
+ address: "sender@example.test",
35
+ name: "Synthetic Sender"
36
+ }],
37
+ to: [{ address: "practice@example.test" }],
38
+ sentAt: "2026-09-29T08:00:00.000Z",
39
+ receivedAt: "2026-09-29T08:00:04.000Z",
40
+ snippet: "Nothing happened this synthetic week.",
41
+ hasAttachments: false,
42
+ isRead: true,
43
+ isFlagged: false
44
+ }] },
45
+ note: "Unfiltered INBOX list: the seeded unread message and one read message. Synthetic."
46
+ },
47
+ {
48
+ id: "email.imap.list-and-get-headers.get.synthetic",
49
+ port: "EmailClient",
50
+ method: "getMessage",
51
+ request: {
52
+ connection: {
53
+ protocol: "imap",
54
+ host: "imap.example.test",
55
+ port: 993,
56
+ security: "tls"
57
+ },
58
+ messageId: "1700000001:41"
59
+ },
60
+ response: { message: {
61
+ id: "1700000001:41",
62
+ messageId: "<welcome.0001@example.test>",
63
+ subject: "Synthetic welcome",
64
+ from: [{
65
+ address: "sender@example.test",
66
+ name: "Synthetic Sender"
67
+ }],
68
+ to: [{ address: "practice@example.test" }],
69
+ cc: [],
70
+ bcc: [],
71
+ replyTo: [],
72
+ sentAt: "2026-09-28T08:00:00.000Z",
73
+ receivedAt: "2026-09-28T08:00:05.000Z",
74
+ body: { text: "Welcome to the synthetic practice mailbox." },
75
+ attachments: [],
76
+ isRead: false,
77
+ isFlagged: false,
78
+ headers: [
79
+ {
80
+ name: "Date",
81
+ value: "Mon, 28 Sep 2026 08:00:00 +0000"
82
+ },
83
+ {
84
+ name: "From",
85
+ value: "Synthetic Sender <sender@example.test>"
86
+ },
87
+ {
88
+ name: "To",
89
+ value: "practice@example.test"
90
+ },
91
+ {
92
+ name: "Subject",
93
+ value: "Synthetic welcome"
94
+ },
95
+ {
96
+ name: "Message-ID",
97
+ value: "<welcome.0001@example.test>"
98
+ }
99
+ ]
100
+ } },
101
+ note: "Get of the seeded unread message with its header fields (BODY.PEEK[HEADER]). Synthetic."
102
+ },
103
+ {
104
+ id: "email.imap.list-and-get-headers.list-again.synthetic",
105
+ port: "EmailClient",
106
+ method: "listMessages",
107
+ request: {
108
+ connection: {
109
+ protocol: "imap",
110
+ host: "imap.example.test",
111
+ port: 993,
112
+ security: "tls"
113
+ },
114
+ limit: 50
115
+ },
116
+ response: { messages: [{
117
+ id: "1700000001:41",
118
+ subject: "Synthetic welcome",
119
+ from: [{
120
+ address: "sender@example.test",
121
+ name: "Synthetic Sender"
122
+ }],
123
+ to: [{ address: "practice@example.test" }],
124
+ sentAt: "2026-09-28T08:00:00.000Z",
125
+ receivedAt: "2026-09-28T08:00:05.000Z",
126
+ snippet: "Welcome to the synthetic practice mailbox.",
127
+ hasAttachments: false,
128
+ isRead: false,
129
+ isFlagged: false
130
+ }, {
131
+ id: "1700000001:42",
132
+ subject: "Synthetic weekly summary",
133
+ from: [{
134
+ address: "sender@example.test",
135
+ name: "Synthetic Sender"
136
+ }],
137
+ to: [{ address: "practice@example.test" }],
138
+ sentAt: "2026-09-29T08:00:00.000Z",
139
+ receivedAt: "2026-09-29T08:00:04.000Z",
140
+ snippet: "Nothing happened this synthetic week.",
141
+ hasAttachments: false,
142
+ isRead: true,
143
+ isFlagged: false
144
+ }] },
145
+ note: "The same INBOX list after the get: the message is still unread. Synthetic."
146
+ },
147
+ {
148
+ id: "email.imap.filtered-list-no-fallback.list-unread.synthetic",
149
+ port: "EmailClient",
150
+ method: "listMessagesFiltered",
151
+ request: {
152
+ connection: {
153
+ protocol: "imap",
154
+ host: "imap.example.test",
155
+ port: 993,
156
+ security: "tls"
157
+ },
158
+ limit: 50,
159
+ isRead: false
160
+ },
161
+ response: { messages: [{
162
+ id: "1700000001:41",
163
+ subject: "Synthetic welcome",
164
+ from: [{
165
+ address: "sender@example.test",
166
+ name: "Synthetic Sender"
167
+ }],
168
+ to: [{ address: "practice@example.test" }],
169
+ sentAt: "2026-09-28T08:00:00.000Z",
170
+ receivedAt: "2026-09-28T08:00:05.000Z",
171
+ snippet: "Welcome to the synthetic practice mailbox.",
172
+ hasAttachments: false,
173
+ isRead: false,
174
+ isFlagged: false
175
+ }] },
176
+ note: "Filtered INBOX list (UID SEARCH UNSEEN): only the seeded unread message. Synthetic."
177
+ },
178
+ {
179
+ id: "email.imap.draft-drafts-discovery.create.synthetic",
180
+ port: "EmailClient",
181
+ method: "createDraft",
182
+ request: {
183
+ connection: {
184
+ protocol: "imap",
185
+ host: "imap.example.test",
186
+ port: 993,
187
+ security: "tls"
188
+ },
189
+ message: {
190
+ to: [],
191
+ subject: "yolk-conformance draft discovery: safe to delete",
192
+ body: { text: "Synthetic conformance draft; never sent." }
193
+ }
194
+ },
195
+ response: {
196
+ saved: true,
197
+ folder: "Saved Drafts",
198
+ draftId: "1700000002:7"
199
+ },
200
+ note: "APPEND (\\Draft) to the mailbox LIST advertises as \\Drafts; UIDPLUS APPENDUID gives the id. Synthetic."
201
+ },
202
+ {
203
+ id: "email.imap.draft-drafts-discovery.get.synthetic",
204
+ port: "EmailClient",
205
+ method: "getMessage",
206
+ request: {
207
+ connection: {
208
+ protocol: "imap",
209
+ host: "imap.example.test",
210
+ port: 993,
211
+ security: "tls"
212
+ },
213
+ messageId: "1700000002:7",
214
+ folder: "Saved Drafts"
215
+ },
216
+ response: { message: {
217
+ id: "1700000002:7",
218
+ messageId: "<draft.0007@example.test>",
219
+ subject: "yolk-conformance draft discovery: safe to delete",
220
+ from: [{ address: "practice@example.test" }],
221
+ to: [],
222
+ cc: [],
223
+ bcc: [],
224
+ replyTo: [],
225
+ sentAt: "2026-09-30T09:00:00.000Z",
226
+ body: { text: "Synthetic conformance draft; never sent." },
227
+ attachments: [],
228
+ isRead: true,
229
+ isFlagged: false,
230
+ headers: [
231
+ {
232
+ name: "Date",
233
+ value: "Wed, 30 Sep 2026 09:00:00 +0000"
234
+ },
235
+ {
236
+ name: "From",
237
+ value: "practice@example.test"
238
+ },
239
+ {
240
+ name: "Subject",
241
+ value: "yolk-conformance draft discovery: safe to delete"
242
+ },
243
+ {
244
+ name: "Message-ID",
245
+ value: "<draft.0007@example.test>"
246
+ }
247
+ ]
248
+ } },
249
+ note: "The saved draft read back by its draftId. Synthetic."
250
+ },
251
+ {
252
+ id: "email.imap.draft-drafts-discovery.delete.synthetic",
253
+ port: "EmailClient",
254
+ method: "deletePermanently",
255
+ request: {
256
+ connection: {
257
+ protocol: "imap",
258
+ host: "imap.example.test",
259
+ port: 993,
260
+ security: "tls"
261
+ },
262
+ messageIds: ["1700000002:7"],
263
+ folder: "Saved Drafts"
264
+ },
265
+ response: {
266
+ results: [{
267
+ messageId: "1700000002:7",
268
+ status: "succeeded"
269
+ }],
270
+ summary: {
271
+ requested: 1,
272
+ succeeded: 1,
273
+ failed: 0,
274
+ unknown: 0,
275
+ notAttempted: 0
276
+ }
277
+ },
278
+ note: "Restore: UID-scoped permanent delete of the case-created draft. Synthetic."
279
+ },
280
+ {
281
+ id: "email.imap.set-read-and-flag.get-before.synthetic",
282
+ port: "EmailClient",
283
+ method: "getMessage",
284
+ request: {
285
+ connection: {
286
+ protocol: "imap",
287
+ host: "imap.example.test",
288
+ port: 993,
289
+ security: "tls"
290
+ },
291
+ messageId: "1700000001:41"
292
+ },
293
+ response: { message: {
294
+ id: "1700000001:41",
295
+ messageId: "<welcome.0001@example.test>",
296
+ subject: "Synthetic welcome",
297
+ from: [{
298
+ address: "sender@example.test",
299
+ name: "Synthetic Sender"
300
+ }],
301
+ to: [{ address: "practice@example.test" }],
302
+ cc: [],
303
+ bcc: [],
304
+ replyTo: [],
305
+ sentAt: "2026-09-28T08:00:00.000Z",
306
+ receivedAt: "2026-09-28T08:00:05.000Z",
307
+ body: { text: "Welcome to the synthetic practice mailbox." },
308
+ attachments: [],
309
+ isRead: false,
310
+ isFlagged: false,
311
+ headers: [
312
+ {
313
+ name: "Date",
314
+ value: "Mon, 28 Sep 2026 08:00:00 +0000"
315
+ },
316
+ {
317
+ name: "From",
318
+ value: "Synthetic Sender <sender@example.test>"
319
+ },
320
+ {
321
+ name: "To",
322
+ value: "practice@example.test"
323
+ },
324
+ {
325
+ name: "Subject",
326
+ value: "Synthetic welcome"
327
+ },
328
+ {
329
+ name: "Message-ID",
330
+ value: "<welcome.0001@example.test>"
331
+ }
332
+ ]
333
+ } },
334
+ note: "Get of the seeded message (read false, flagged false). Synthetic."
335
+ },
336
+ {
337
+ id: "email.imap.set-read-and-flag.set-read.synthetic",
338
+ port: "EmailClient",
339
+ method: "setRead",
340
+ request: {
341
+ connection: {
342
+ protocol: "imap",
343
+ host: "imap.example.test",
344
+ port: 993,
345
+ security: "tls"
346
+ },
347
+ messageId: "1700000001:41",
348
+ folder: "INBOX",
349
+ isRead: true
350
+ },
351
+ response: {
352
+ messageId: "1700000001:41",
353
+ isRead: true
354
+ },
355
+ note: "UID STORE +FLAGS.SILENT (\\Seen). Synthetic."
356
+ },
357
+ {
358
+ id: "email.imap.set-read-and-flag.get-read.synthetic",
359
+ port: "EmailClient",
360
+ method: "getMessage",
361
+ request: {
362
+ connection: {
363
+ protocol: "imap",
364
+ host: "imap.example.test",
365
+ port: 993,
366
+ security: "tls"
367
+ },
368
+ messageId: "1700000001:41"
369
+ },
370
+ response: { message: {
371
+ id: "1700000001:41",
372
+ messageId: "<welcome.0001@example.test>",
373
+ subject: "Synthetic welcome",
374
+ from: [{
375
+ address: "sender@example.test",
376
+ name: "Synthetic Sender"
377
+ }],
378
+ to: [{ address: "practice@example.test" }],
379
+ cc: [],
380
+ bcc: [],
381
+ replyTo: [],
382
+ sentAt: "2026-09-28T08:00:00.000Z",
383
+ receivedAt: "2026-09-28T08:00:05.000Z",
384
+ body: { text: "Welcome to the synthetic practice mailbox." },
385
+ attachments: [],
386
+ isRead: true,
387
+ isFlagged: false,
388
+ headers: [
389
+ {
390
+ name: "Date",
391
+ value: "Mon, 28 Sep 2026 08:00:00 +0000"
392
+ },
393
+ {
394
+ name: "From",
395
+ value: "Synthetic Sender <sender@example.test>"
396
+ },
397
+ {
398
+ name: "To",
399
+ value: "practice@example.test"
400
+ },
401
+ {
402
+ name: "Subject",
403
+ value: "Synthetic welcome"
404
+ },
405
+ {
406
+ name: "Message-ID",
407
+ value: "<welcome.0001@example.test>"
408
+ }
409
+ ]
410
+ } },
411
+ note: "Get of the seeded message (read true, flagged false). Synthetic."
412
+ },
413
+ {
414
+ id: "email.imap.set-read-and-flag.set-flag.synthetic",
415
+ port: "EmailClient",
416
+ method: "setFlag",
417
+ request: {
418
+ connection: {
419
+ protocol: "imap",
420
+ host: "imap.example.test",
421
+ port: 993,
422
+ security: "tls"
423
+ },
424
+ messageId: "1700000001:41",
425
+ folder: "INBOX",
426
+ isFlagged: true
427
+ },
428
+ response: {
429
+ messageId: "1700000001:41",
430
+ isFlagged: true
431
+ },
432
+ note: "UID STORE +FLAGS.SILENT (\\Flagged). Synthetic."
433
+ },
434
+ {
435
+ id: "email.imap.set-read-and-flag.get-flagged.synthetic",
436
+ port: "EmailClient",
437
+ method: "getMessage",
438
+ request: {
439
+ connection: {
440
+ protocol: "imap",
441
+ host: "imap.example.test",
442
+ port: 993,
443
+ security: "tls"
444
+ },
445
+ messageId: "1700000001:41"
446
+ },
447
+ response: { message: {
448
+ id: "1700000001:41",
449
+ messageId: "<welcome.0001@example.test>",
450
+ subject: "Synthetic welcome",
451
+ from: [{
452
+ address: "sender@example.test",
453
+ name: "Synthetic Sender"
454
+ }],
455
+ to: [{ address: "practice@example.test" }],
456
+ cc: [],
457
+ bcc: [],
458
+ replyTo: [],
459
+ sentAt: "2026-09-28T08:00:00.000Z",
460
+ receivedAt: "2026-09-28T08:00:05.000Z",
461
+ body: { text: "Welcome to the synthetic practice mailbox." },
462
+ attachments: [],
463
+ isRead: true,
464
+ isFlagged: true,
465
+ headers: [
466
+ {
467
+ name: "Date",
468
+ value: "Mon, 28 Sep 2026 08:00:00 +0000"
469
+ },
470
+ {
471
+ name: "From",
472
+ value: "Synthetic Sender <sender@example.test>"
473
+ },
474
+ {
475
+ name: "To",
476
+ value: "practice@example.test"
477
+ },
478
+ {
479
+ name: "Subject",
480
+ value: "Synthetic welcome"
481
+ },
482
+ {
483
+ name: "Message-ID",
484
+ value: "<welcome.0001@example.test>"
485
+ }
486
+ ]
487
+ } },
488
+ note: "Get of the seeded message (read true, flagged true). Synthetic."
489
+ },
490
+ {
491
+ id: "email.imap.set-read-and-flag.restore-read.synthetic",
492
+ port: "EmailClient",
493
+ method: "setRead",
494
+ request: {
495
+ connection: {
496
+ protocol: "imap",
497
+ host: "imap.example.test",
498
+ port: 993,
499
+ security: "tls"
500
+ },
501
+ messageId: "1700000001:41",
502
+ folder: "INBOX",
503
+ isRead: false
504
+ },
505
+ response: {
506
+ messageId: "1700000001:41",
507
+ isRead: false
508
+ },
509
+ note: "UID STORE -FLAGS.SILENT (\\Seen). Synthetic."
510
+ },
511
+ {
512
+ id: "email.imap.set-read-and-flag.restore-flag.synthetic",
513
+ port: "EmailClient",
514
+ method: "setFlag",
515
+ request: {
516
+ connection: {
517
+ protocol: "imap",
518
+ host: "imap.example.test",
519
+ port: 993,
520
+ security: "tls"
521
+ },
522
+ messageId: "1700000001:41",
523
+ folder: "INBOX",
524
+ isFlagged: false
525
+ },
526
+ response: {
527
+ messageId: "1700000001:41",
528
+ isFlagged: false
529
+ },
530
+ note: "UID STORE -FLAGS.SILENT (\\Flagged). Synthetic."
531
+ },
532
+ {
533
+ id: "email.imap.set-read-and-flag.get-restored.synthetic",
534
+ port: "EmailClient",
535
+ method: "getMessage",
536
+ request: {
537
+ connection: {
538
+ protocol: "imap",
539
+ host: "imap.example.test",
540
+ port: 993,
541
+ security: "tls"
542
+ },
543
+ messageId: "1700000001:41"
544
+ },
545
+ response: { message: {
546
+ id: "1700000001:41",
547
+ messageId: "<welcome.0001@example.test>",
548
+ subject: "Synthetic welcome",
549
+ from: [{
550
+ address: "sender@example.test",
551
+ name: "Synthetic Sender"
552
+ }],
553
+ to: [{ address: "practice@example.test" }],
554
+ cc: [],
555
+ bcc: [],
556
+ replyTo: [],
557
+ sentAt: "2026-09-28T08:00:00.000Z",
558
+ receivedAt: "2026-09-28T08:00:05.000Z",
559
+ body: { text: "Welcome to the synthetic practice mailbox." },
560
+ attachments: [],
561
+ isRead: false,
562
+ isFlagged: false,
563
+ headers: [
564
+ {
565
+ name: "Date",
566
+ value: "Mon, 28 Sep 2026 08:00:00 +0000"
567
+ },
568
+ {
569
+ name: "From",
570
+ value: "Synthetic Sender <sender@example.test>"
571
+ },
572
+ {
573
+ name: "To",
574
+ value: "practice@example.test"
575
+ },
576
+ {
577
+ name: "Subject",
578
+ value: "Synthetic welcome"
579
+ },
580
+ {
581
+ name: "Message-ID",
582
+ value: "<welcome.0001@example.test>"
583
+ }
584
+ ]
585
+ } },
586
+ note: "Get of the seeded message (read false, flagged false). Synthetic."
587
+ },
588
+ {
589
+ id: "email.imap.trash-untrash-to-inbox.create.synthetic",
590
+ port: "EmailClient",
591
+ method: "createDraft",
592
+ request: {
593
+ connection: {
594
+ protocol: "imap",
595
+ host: "imap.example.test",
596
+ port: 993,
597
+ security: "tls"
598
+ },
599
+ message: {
600
+ to: [],
601
+ subject: "yolk-conformance trash probe: safe to delete",
602
+ body: { text: "Synthetic conformance draft; never sent." }
603
+ },
604
+ folder: "Saved Drafts"
605
+ },
606
+ response: {
607
+ saved: true,
608
+ folder: "Saved Drafts",
609
+ draftId: "1700000002:8"
610
+ },
611
+ note: "The case-owned draft in the seeded Drafts mailbox. Synthetic."
612
+ },
613
+ {
614
+ id: "email.imap.trash-untrash-to-inbox.trash.synthetic",
615
+ port: "EmailClient",
616
+ method: "trash",
617
+ request: {
618
+ connection: {
619
+ protocol: "imap",
620
+ host: "imap.example.test",
621
+ port: 993,
622
+ security: "tls"
623
+ },
624
+ messageId: "1700000002:8",
625
+ folder: "Saved Drafts"
626
+ },
627
+ response: {
628
+ moved: true,
629
+ folder: "Deleted Items",
630
+ messageId: "1700000004:3"
631
+ },
632
+ note: "UID MOVE to the mailbox LIST advertises as \\Trash; COPYUID gives the destination id. Synthetic."
633
+ },
634
+ {
635
+ id: "email.imap.trash-untrash-to-inbox.untrash.synthetic",
636
+ port: "EmailClient",
637
+ method: "untrash",
638
+ request: {
639
+ connection: {
640
+ protocol: "imap",
641
+ host: "imap.example.test",
642
+ port: 993,
643
+ security: "tls"
644
+ },
645
+ messageId: "1700000004:3",
646
+ folder: "Deleted Items",
647
+ destinationFolder: "INBOX"
648
+ },
649
+ response: {
650
+ moved: true,
651
+ folder: "INBOX",
652
+ messageId: "1700000001:43"
653
+ },
654
+ note: "Restore defaults to INBOX, not the original Drafts mailbox. Synthetic."
655
+ },
656
+ {
657
+ id: "email.imap.trash-untrash-to-inbox.get.synthetic",
658
+ port: "EmailClient",
659
+ method: "getMessage",
660
+ request: {
661
+ connection: {
662
+ protocol: "imap",
663
+ host: "imap.example.test",
664
+ port: 993,
665
+ security: "tls"
666
+ },
667
+ messageId: "1700000001:43"
668
+ },
669
+ response: { message: {
670
+ id: "1700000001:43",
671
+ messageId: "<draft.0008@example.test>",
672
+ subject: "yolk-conformance trash probe: safe to delete",
673
+ from: [{ address: "practice@example.test" }],
674
+ to: [],
675
+ cc: [],
676
+ bcc: [],
677
+ replyTo: [],
678
+ sentAt: "2026-09-30T09:00:00.000Z",
679
+ body: { text: "Synthetic conformance draft; never sent." },
680
+ attachments: [],
681
+ isRead: true,
682
+ isFlagged: false,
683
+ headers: [
684
+ {
685
+ name: "Date",
686
+ value: "Wed, 30 Sep 2026 09:00:00 +0000"
687
+ },
688
+ {
689
+ name: "From",
690
+ value: "practice@example.test"
691
+ },
692
+ {
693
+ name: "Subject",
694
+ value: "yolk-conformance trash probe: safe to delete"
695
+ },
696
+ {
697
+ name: "Message-ID",
698
+ value: "<draft.0008@example.test>"
699
+ }
700
+ ]
701
+ } },
702
+ note: "The restored message read back in INBOX by its new id. Synthetic."
703
+ },
704
+ {
705
+ id: "email.imap.trash-untrash-to-inbox.delete.synthetic",
706
+ port: "EmailClient",
707
+ method: "deletePermanently",
708
+ request: {
709
+ connection: {
710
+ protocol: "imap",
711
+ host: "imap.example.test",
712
+ port: 993,
713
+ security: "tls"
714
+ },
715
+ messageIds: ["1700000001:43"],
716
+ folder: "INBOX"
717
+ },
718
+ response: {
719
+ results: [{
720
+ messageId: "1700000001:43",
721
+ status: "succeeded"
722
+ }],
723
+ summary: {
724
+ requested: 1,
725
+ succeeded: 1,
726
+ failed: 0,
727
+ unknown: 0,
728
+ notAttempted: 0
729
+ }
730
+ },
731
+ note: "Restore: UID-scoped permanent delete where the message ended up. Synthetic."
732
+ },
733
+ {
734
+ id: "email.imap.move-destination-ids.create.synthetic",
735
+ port: "EmailClient",
736
+ method: "createDraft",
737
+ request: {
738
+ connection: {
739
+ protocol: "imap",
740
+ host: "imap.example.test",
741
+ port: 993,
742
+ security: "tls"
743
+ },
744
+ message: {
745
+ to: [],
746
+ subject: "yolk-conformance move probe: safe to delete",
747
+ body: { text: "Synthetic conformance draft; never sent." }
748
+ },
749
+ folder: "Saved Drafts"
750
+ },
751
+ response: {
752
+ saved: true,
753
+ folder: "Saved Drafts",
754
+ draftId: "1700000002:9"
755
+ },
756
+ note: "The case-owned draft in the seeded Drafts mailbox. Synthetic."
757
+ },
758
+ {
759
+ id: "email.imap.move-destination-ids.move.synthetic",
760
+ port: "EmailClient",
761
+ method: "move",
762
+ request: {
763
+ connection: {
764
+ protocol: "imap",
765
+ host: "imap.example.test",
766
+ port: 993,
767
+ security: "tls"
768
+ },
769
+ messageId: "1700000002:9",
770
+ folder: "Saved Drafts",
771
+ destinationFolder: "Archive"
772
+ },
773
+ response: {
774
+ moved: true,
775
+ folder: "Archive",
776
+ messageId: "1700000005:12"
777
+ },
778
+ note: "UID MOVE (RFC 6851); COPYUID gives the destination UIDVALIDITY:UID. Synthetic."
779
+ },
780
+ {
781
+ id: "email.imap.move-destination-ids.get-destination.synthetic",
782
+ port: "EmailClient",
783
+ method: "getMessage",
784
+ request: {
785
+ connection: {
786
+ protocol: "imap",
787
+ host: "imap.example.test",
788
+ port: 993,
789
+ security: "tls"
790
+ },
791
+ messageId: "1700000005:12",
792
+ folder: "Archive"
793
+ },
794
+ response: { message: {
795
+ id: "1700000005:12",
796
+ messageId: "<draft.0009@example.test>",
797
+ subject: "yolk-conformance move probe: safe to delete",
798
+ from: [{ address: "practice@example.test" }],
799
+ to: [],
800
+ cc: [],
801
+ bcc: [],
802
+ replyTo: [],
803
+ sentAt: "2026-09-30T09:00:00.000Z",
804
+ body: { text: "Synthetic conformance draft; never sent." },
805
+ attachments: [],
806
+ isRead: true,
807
+ isFlagged: false,
808
+ headers: [
809
+ {
810
+ name: "Date",
811
+ value: "Wed, 30 Sep 2026 09:00:00 +0000"
812
+ },
813
+ {
814
+ name: "From",
815
+ value: "practice@example.test"
816
+ },
817
+ {
818
+ name: "Subject",
819
+ value: "yolk-conformance move probe: safe to delete"
820
+ },
821
+ {
822
+ name: "Message-ID",
823
+ value: "<draft.0009@example.test>"
824
+ }
825
+ ]
826
+ } },
827
+ note: "The moved message read back by its destination id. Synthetic."
828
+ },
829
+ {
830
+ id: "email.imap.move-destination-ids.get-stale-source.synthetic",
831
+ port: "EmailClient",
832
+ method: "getMessage",
833
+ request: {
834
+ connection: {
835
+ protocol: "imap",
836
+ host: "imap.example.test",
837
+ port: 993,
838
+ security: "tls"
839
+ },
840
+ messageId: "1700000002:9",
841
+ folder: "Saved Drafts"
842
+ },
843
+ failure: {
844
+ kind: "expected",
845
+ code: "message_not_found",
846
+ message: "No message with that UID in the mailbox."
847
+ },
848
+ note: "The stale source id no longer resolves after the move. Synthetic."
849
+ },
850
+ {
851
+ id: "email.imap.move-destination-ids.delete.synthetic",
852
+ port: "EmailClient",
853
+ method: "deletePermanently",
854
+ request: {
855
+ connection: {
856
+ protocol: "imap",
857
+ host: "imap.example.test",
858
+ port: 993,
859
+ security: "tls"
860
+ },
861
+ messageIds: ["1700000005:12"],
862
+ folder: "Archive"
863
+ },
864
+ response: {
865
+ results: [{
866
+ messageId: "1700000005:12",
867
+ status: "succeeded"
868
+ }],
869
+ summary: {
870
+ requested: 1,
871
+ succeeded: 1,
872
+ failed: 0,
873
+ unknown: 0,
874
+ notAttempted: 0
875
+ }
876
+ },
877
+ note: "Restore: UID-scoped permanent delete in the destination. Synthetic."
878
+ },
879
+ {
880
+ id: "email.pop3.rejects-folders-drafts-mutations.list.synthetic",
881
+ port: "EmailClient",
882
+ method: "listMessages",
883
+ request: {
884
+ connection: {
885
+ protocol: "pop3",
886
+ host: "pop3.example.test",
887
+ port: 995,
888
+ security: "tls"
889
+ },
890
+ limit: 50
891
+ },
892
+ response: { messages: [{
893
+ id: "uidl-synthetic-0041",
894
+ subject: "Synthetic welcome",
895
+ from: [{
896
+ address: "sender@example.test",
897
+ name: "Synthetic Sender"
898
+ }],
899
+ to: [{ address: "practice@example.test" }],
900
+ sentAt: "2026-09-28T08:00:00.000Z",
901
+ hasAttachments: false
902
+ }, {
903
+ id: "uidl-synthetic-0042",
904
+ subject: "Synthetic weekly summary",
905
+ from: [{
906
+ address: "sender@example.test",
907
+ name: "Synthetic Sender"
908
+ }],
909
+ to: [{ address: "practice@example.test" }],
910
+ sentAt: "2026-09-29T08:00:00.000Z",
911
+ hasAttachments: false
912
+ }] },
913
+ note: "POP3 maildrop list (UIDL plus TOP headers); POP3 has no read or flagged state. Synthetic."
914
+ },
915
+ {
916
+ id: "email.smtp.sent-copy-statuses.send-saved.synthetic",
917
+ port: "EmailClient",
918
+ method: "sendMessage",
919
+ request: {
920
+ connection: {
921
+ protocol: "smtp",
922
+ host: "smtp.example.test",
923
+ port: 587,
924
+ security: "starttls"
925
+ },
926
+ message: {
927
+ to: [{ address: "practice@example.test" }],
928
+ subject: "yolk-conformance send: saved copy",
929
+ body: { text: "Synthetic conformance message to the practice mailbox." }
930
+ },
931
+ sentCopy: { connection: {
932
+ protocol: "imap",
933
+ host: "imap.example.test",
934
+ port: 993,
935
+ security: "tls"
936
+ } }
937
+ },
938
+ response: {
939
+ accepted: true,
940
+ submissionId: "synthetic-submission-0001",
941
+ sentCopy: {
942
+ status: "saved",
943
+ folder: "Sent Items"
944
+ }
945
+ },
946
+ note: "SMTP 250 after DATA, then APPEND of the same bytes to the mailbox LIST advertises as \\Sent. Synthetic."
947
+ },
948
+ {
949
+ id: "email.smtp.sent-copy-statuses.send-skipped.synthetic",
950
+ port: "EmailClient",
951
+ method: "sendMessage",
952
+ request: {
953
+ connection: {
954
+ protocol: "smtp",
955
+ host: "smtp.example.test",
956
+ port: 587,
957
+ security: "starttls"
958
+ },
959
+ message: {
960
+ to: [{ address: "practice@example.test" }],
961
+ subject: "yolk-conformance send: copy skipped",
962
+ body: { text: "Synthetic conformance message to the practice mailbox." }
963
+ }
964
+ },
965
+ response: {
966
+ accepted: true,
967
+ submissionId: "synthetic-submission-0002"
968
+ },
969
+ note: "No sentCopy requested, none reported; the action synthesizes skipped. Synthetic."
970
+ },
971
+ {
972
+ id: "email.smtp.sent-copy-statuses.send-failed.synthetic",
973
+ port: "EmailClient",
974
+ method: "sendMessage",
975
+ request: {
976
+ connection: {
977
+ protocol: "smtp",
978
+ host: "smtp.example.test",
979
+ port: 587,
980
+ security: "starttls"
981
+ },
982
+ message: {
983
+ to: [{ address: "practice@example.test" }],
984
+ subject: "yolk-conformance send: copy fails",
985
+ body: { text: "Synthetic conformance message to the practice mailbox." }
986
+ },
987
+ sentCopy: {
988
+ connection: {
989
+ protocol: "imap",
990
+ host: "imap.example.test",
991
+ port: 993,
992
+ security: "tls"
993
+ },
994
+ folder: "yolk-conformance-missing-sent-folder"
995
+ }
996
+ },
997
+ response: {
998
+ accepted: true,
999
+ submissionId: "synthetic-submission-0003",
1000
+ sentCopy: {
1001
+ status: "failed",
1002
+ folder: "yolk-conformance-missing-sent-folder"
1003
+ }
1004
+ },
1005
+ note: "SMTP accepted; APPEND answered NO [TRYCREATE], so the copy failed (never resend). Synthetic."
1006
+ },
1007
+ {
1008
+ id: "email.smtp.legacy-host-sent-copy.send-requested.synthetic",
1009
+ port: "EmailClient",
1010
+ method: "sendMessage",
1011
+ request: {
1012
+ connection: {
1013
+ protocol: "smtp",
1014
+ host: "smtp.example.test",
1015
+ port: 587,
1016
+ security: "starttls"
1017
+ },
1018
+ message: {
1019
+ to: [{ address: "practice@example.test" }],
1020
+ subject: "yolk-conformance send: legacy host, copy requested",
1021
+ body: { text: "Synthetic legacy-host conformance message." }
1022
+ }
1023
+ },
1024
+ response: {
1025
+ accepted: true,
1026
+ submissionId: "synthetic-submission-0004"
1027
+ },
1028
+ note: "What the host sees behind the legacy shim: no sentCopy in, none out. Synthetic."
1029
+ },
1030
+ {
1031
+ id: "email.smtp.legacy-host-sent-copy.send-disabled.synthetic",
1032
+ port: "EmailClient",
1033
+ method: "sendMessage",
1034
+ request: {
1035
+ connection: {
1036
+ protocol: "smtp",
1037
+ host: "smtp.example.test",
1038
+ port: 587,
1039
+ security: "starttls"
1040
+ },
1041
+ message: {
1042
+ to: [{ address: "practice@example.test" }],
1043
+ subject: "yolk-conformance send: legacy host, copy disabled",
1044
+ body: { text: "Synthetic legacy-host conformance message." }
1045
+ }
1046
+ },
1047
+ response: {
1048
+ accepted: true,
1049
+ submissionId: "synthetic-submission-0005"
1050
+ },
1051
+ note: "What the host sees behind the legacy shim: no sentCopy in, none out. Synthetic."
1052
+ },
1053
+ {
1054
+ id: "email.smtp.acceptance-not-delivery.send.synthetic",
1055
+ port: "EmailClient",
1056
+ method: "sendMessage",
1057
+ request: {
1058
+ connection: {
1059
+ protocol: "smtp",
1060
+ host: "smtp.example.test",
1061
+ port: 587,
1062
+ security: "starttls"
1063
+ },
1064
+ message: {
1065
+ to: [{ address: "nobody@undeliverable.example.test" }],
1066
+ subject: "yolk-conformance send: accepted, undeliverable",
1067
+ body: { text: "Synthetic conformance message to an undeliverable address." }
1068
+ }
1069
+ },
1070
+ response: {
1071
+ accepted: true,
1072
+ submissionId: "synthetic-submission-0006"
1073
+ },
1074
+ note: "SMTP 250 for the submission; the bounce (DSN) would arrive later. Synthetic."
1075
+ }
1076
+ ];
1077
+ //#endregion
1078
+ export { emailEmulatorFixtures };
1079
+
1080
+ //# sourceMappingURL=email-fixtures.mjs.map