effect 4.0.7 → 4.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (679) hide show
  1. package/README.md +1 -1
  2. package/dist/BigDecimal.d.ts.map +1 -1
  3. package/dist/BigDecimal.js +3 -0
  4. package/dist/BigDecimal.js.map +1 -1
  5. package/dist/Channel.d.ts +12 -6
  6. package/dist/Channel.d.ts.map +1 -1
  7. package/dist/Channel.js +9 -3
  8. package/dist/Channel.js.map +1 -1
  9. package/dist/Config.d.ts +7 -1
  10. package/dist/Config.d.ts.map +1 -1
  11. package/dist/Config.js.map +1 -1
  12. package/dist/Context.d.ts +18 -1
  13. package/dist/Context.d.ts.map +1 -1
  14. package/dist/Context.js +27 -8
  15. package/dist/Context.js.map +1 -1
  16. package/dist/Cron.d.ts +81 -11
  17. package/dist/Cron.d.ts.map +1 -1
  18. package/dist/Cron.js +101 -26
  19. package/dist/Cron.js.map +1 -1
  20. package/dist/Duration.d.ts +78 -0
  21. package/dist/Duration.d.ts.map +1 -1
  22. package/dist/Duration.js +123 -0
  23. package/dist/Duration.js.map +1 -1
  24. package/dist/Effect.d.ts +164 -7
  25. package/dist/Effect.d.ts.map +1 -1
  26. package/dist/Effect.js +11 -1
  27. package/dist/Effect.js.map +1 -1
  28. package/dist/FileSystem.d.ts +59 -4
  29. package/dist/FileSystem.d.ts.map +1 -1
  30. package/dist/FileSystem.js +9 -2
  31. package/dist/FileSystem.js.map +1 -1
  32. package/dist/Glob.d.ts +165 -0
  33. package/dist/Glob.d.ts.map +1 -0
  34. package/dist/Glob.js +127 -0
  35. package/dist/Glob.js.map +1 -0
  36. package/dist/Match.d.ts +86 -0
  37. package/dist/Match.d.ts.map +1 -1
  38. package/dist/Match.js +72 -0
  39. package/dist/Match.js.map +1 -1
  40. package/dist/Pool.d.ts +51 -0
  41. package/dist/Pool.d.ts.map +1 -1
  42. package/dist/Pool.js +59 -9
  43. package/dist/Pool.js.map +1 -1
  44. package/dist/Random.d.ts.map +1 -1
  45. package/dist/Random.js +3 -3
  46. package/dist/Random.js.map +1 -1
  47. package/dist/RcMap.d.ts.map +1 -1
  48. package/dist/RcMap.js +8 -2
  49. package/dist/RcMap.js.map +1 -1
  50. package/dist/Schedule.d.ts +18 -1
  51. package/dist/Schedule.d.ts.map +1 -1
  52. package/dist/Schedule.js +7 -2
  53. package/dist/Schedule.js.map +1 -1
  54. package/dist/Schema.d.ts +666 -41
  55. package/dist/Schema.d.ts.map +1 -1
  56. package/dist/Schema.js +650 -0
  57. package/dist/Schema.js.map +1 -1
  58. package/dist/SchemaGetter.d.ts +6 -1
  59. package/dist/SchemaGetter.d.ts.map +1 -1
  60. package/dist/SchemaGetter.js +22 -11
  61. package/dist/SchemaGetter.js.map +1 -1
  62. package/dist/SchemaRepresentation.d.ts +14 -0
  63. package/dist/SchemaRepresentation.d.ts.map +1 -1
  64. package/dist/SchemaRepresentation.js +16 -0
  65. package/dist/SchemaRepresentation.js.map +1 -1
  66. package/dist/SchemaTransformation.d.ts +8 -3
  67. package/dist/SchemaTransformation.d.ts.map +1 -1
  68. package/dist/SchemaTransformation.js +6 -3
  69. package/dist/SchemaTransformation.js.map +1 -1
  70. package/dist/ScopedCache.d.ts.map +1 -1
  71. package/dist/ScopedCache.js +5 -7
  72. package/dist/ScopedCache.js.map +1 -1
  73. package/dist/Semaphore.d.ts +130 -0
  74. package/dist/Semaphore.d.ts.map +1 -1
  75. package/dist/Semaphore.js +40 -0
  76. package/dist/Semaphore.js.map +1 -1
  77. package/dist/Stream.d.ts +13 -4
  78. package/dist/Stream.d.ts.map +1 -1
  79. package/dist/Stream.js +9 -0
  80. package/dist/Stream.js.map +1 -1
  81. package/dist/Terminal.d.ts +18 -1
  82. package/dist/Terminal.d.ts.map +1 -1
  83. package/dist/Terminal.js +1 -1
  84. package/dist/Terminal.js.map +1 -1
  85. package/dist/ai/AiError.d.ts +43 -116
  86. package/dist/ai/AiError.d.ts.map +1 -1
  87. package/dist/ai/AiError.js +53 -72
  88. package/dist/ai/AiError.js.map +1 -1
  89. package/dist/ai/Decision.d.ts +196 -15
  90. package/dist/ai/Decision.d.ts.map +1 -1
  91. package/dist/ai/Decision.js +130 -0
  92. package/dist/ai/Decision.js.map +1 -1
  93. package/dist/ai/DecisionModel.d.ts +54 -13
  94. package/dist/ai/DecisionModel.d.ts.map +1 -1
  95. package/dist/ai/DecisionModel.js +123 -12
  96. package/dist/ai/DecisionModel.js.map +1 -1
  97. package/dist/ai/McpServer.d.ts +630 -29
  98. package/dist/ai/McpServer.d.ts.map +1 -1
  99. package/dist/ai/McpServer.js +562 -116
  100. package/dist/ai/McpServer.js.map +1 -1
  101. package/dist/ai/McpTest.d.ts +130 -0
  102. package/dist/ai/McpTest.d.ts.map +1 -0
  103. package/dist/ai/McpTest.js +237 -0
  104. package/dist/ai/McpTest.js.map +1 -0
  105. package/dist/ai/Response.d.ts +1 -25
  106. package/dist/ai/Response.d.ts.map +1 -1
  107. package/dist/ai/Response.js +1 -10
  108. package/dist/ai/Response.js.map +1 -1
  109. package/dist/ai/Tool.d.ts +19 -1
  110. package/dist/ai/Tool.d.ts.map +1 -1
  111. package/dist/ai/Tool.js.map +1 -1
  112. package/dist/ai/index.d.ts +5 -0
  113. package/dist/ai/index.d.ts.map +1 -1
  114. package/dist/ai/index.js +5 -0
  115. package/dist/ai/index.js.map +1 -1
  116. package/dist/ai/internal/mcpCore.js +17 -12
  117. package/dist/ai/internal/mcpCore.js.map +1 -1
  118. package/dist/ai/internal/mcpProtocol/v2024_11_05.js +4 -5
  119. package/dist/ai/internal/mcpProtocol/v2024_11_05.js.map +1 -1
  120. package/dist/ai/internal/mcpProtocol/v2025_03_26.js +4 -5
  121. package/dist/ai/internal/mcpProtocol/v2025_03_26.js.map +1 -1
  122. package/dist/ai/internal/mcpProtocol/v2025_06_18.js +4 -5
  123. package/dist/ai/internal/mcpProtocol/v2025_06_18.js.map +1 -1
  124. package/dist/ai/internal/mcpProtocol/v2025_11_25.js +4 -5
  125. package/dist/ai/internal/mcpProtocol/v2025_11_25.js.map +1 -1
  126. package/dist/ai/internal/mcpProtocol/v2026_07_28.js +18 -10
  127. package/dist/ai/internal/mcpProtocol/v2026_07_28.js.map +1 -1
  128. package/dist/ai/internal/mcpProtocol.js +13 -0
  129. package/dist/ai/internal/mcpProtocol.js.map +1 -1
  130. package/dist/ai/internal/mcpRuntime.js +5 -3
  131. package/dist/ai/internal/mcpRuntime.js.map +1 -1
  132. package/dist/ai/internal/mcpStatefulRuntime.js +6 -1
  133. package/dist/ai/internal/mcpStatefulRuntime.js.map +1 -1
  134. package/dist/cli/Argument.d.ts +6 -0
  135. package/dist/cli/Argument.d.ts.map +1 -1
  136. package/dist/cli/Argument.js +2 -0
  137. package/dist/cli/Argument.js.map +1 -1
  138. package/dist/cli/CliOutput.d.ts +65 -1
  139. package/dist/cli/CliOutput.d.ts.map +1 -1
  140. package/dist/cli/CliOutput.js +94 -37
  141. package/dist/cli/CliOutput.js.map +1 -1
  142. package/dist/cli/Command.d.ts +23 -0
  143. package/dist/cli/Command.d.ts.map +1 -1
  144. package/dist/cli/Command.js +8 -0
  145. package/dist/cli/Command.js.map +1 -1
  146. package/dist/cli/Flag.d.ts +107 -0
  147. package/dist/cli/Flag.d.ts.map +1 -1
  148. package/dist/cli/Flag.js +37 -0
  149. package/dist/cli/Flag.js.map +1 -1
  150. package/dist/cli/HelpDoc.d.ts +15 -1
  151. package/dist/cli/HelpDoc.d.ts.map +1 -1
  152. package/dist/cli/Param.d.ts +6 -0
  153. package/dist/cli/Param.d.ts.map +1 -1
  154. package/dist/cli/Param.js +2 -0
  155. package/dist/cli/Param.js.map +1 -1
  156. package/dist/cli/Primitive.d.ts +14 -0
  157. package/dist/cli/Primitive.d.ts.map +1 -1
  158. package/dist/cli/Primitive.js +15 -1
  159. package/dist/cli/Primitive.js.map +1 -1
  160. package/dist/cli/Prompt.d.ts +1 -0
  161. package/dist/cli/Prompt.d.ts.map +1 -1
  162. package/dist/cli/Prompt.js +1 -0
  163. package/dist/cli/Prompt.js.map +1 -1
  164. package/dist/cli/internal/help.d.ts.map +1 -1
  165. package/dist/cli/internal/help.js +17 -10
  166. package/dist/cli/internal/help.js.map +1 -1
  167. package/dist/cluster/Sharding.d.ts.map +1 -1
  168. package/dist/cluster/Sharding.js +90 -28
  169. package/dist/cluster/Sharding.js.map +1 -1
  170. package/dist/cluster/ShardingConfig.d.ts +72 -6
  171. package/dist/cluster/ShardingConfig.d.ts.map +1 -1
  172. package/dist/cluster/ShardingConfig.js +4 -0
  173. package/dist/cluster/ShardingConfig.js.map +1 -1
  174. package/dist/cluster/SingleRunner.d.ts +3 -3
  175. package/dist/cluster/SingleRunner.d.ts.map +1 -1
  176. package/dist/cluster/SingleRunner.js +1 -1
  177. package/dist/cluster/SqlMessageStorage.d.ts +37 -6
  178. package/dist/cluster/SqlMessageStorage.d.ts.map +1 -1
  179. package/dist/cluster/SqlMessageStorage.js +34 -7
  180. package/dist/cluster/SqlMessageStorage.js.map +1 -1
  181. package/dist/cluster/SqlRunnerStorage.d.ts.map +1 -1
  182. package/dist/cluster/SqlRunnerStorage.js +23 -8
  183. package/dist/cluster/SqlRunnerStorage.js.map +1 -1
  184. package/dist/crypto/Aead.d.ts +322 -0
  185. package/dist/crypto/Aead.d.ts.map +1 -0
  186. package/dist/crypto/Aead.js +331 -0
  187. package/dist/crypto/Aead.js.map +1 -0
  188. package/dist/crypto/Cipher.d.ts +235 -0
  189. package/dist/crypto/Cipher.d.ts.map +1 -0
  190. package/dist/crypto/Cipher.js +233 -0
  191. package/dist/crypto/Cipher.js.map +1 -0
  192. package/dist/crypto/CryptoError.d.ts +212 -0
  193. package/dist/crypto/CryptoError.d.ts.map +1 -0
  194. package/dist/crypto/CryptoError.js +202 -0
  195. package/dist/crypto/CryptoError.js.map +1 -0
  196. package/dist/crypto/Digest.d.ts +143 -0
  197. package/dist/crypto/Digest.d.ts.map +1 -0
  198. package/dist/crypto/Digest.js +146 -0
  199. package/dist/crypto/Digest.js.map +1 -0
  200. package/dist/crypto/Kdf.d.ts +220 -0
  201. package/dist/crypto/Kdf.d.ts.map +1 -0
  202. package/dist/crypto/Kdf.js +212 -0
  203. package/dist/crypto/Kdf.js.map +1 -0
  204. package/dist/crypto/KeyAgreement.d.ts +323 -0
  205. package/dist/crypto/KeyAgreement.d.ts.map +1 -0
  206. package/dist/crypto/KeyAgreement.js +303 -0
  207. package/dist/crypto/KeyAgreement.js.map +1 -0
  208. package/dist/crypto/KeyFormat.d.ts +309 -0
  209. package/dist/crypto/KeyFormat.d.ts.map +1 -0
  210. package/dist/crypto/KeyFormat.js +556 -0
  211. package/dist/crypto/KeyFormat.js.map +1 -0
  212. package/dist/crypto/KeyWrap.d.ts +389 -0
  213. package/dist/crypto/KeyWrap.d.ts.map +1 -0
  214. package/dist/crypto/KeyWrap.js +381 -0
  215. package/dist/crypto/KeyWrap.js.map +1 -0
  216. package/dist/crypto/Mac.d.ts +277 -0
  217. package/dist/crypto/Mac.d.ts.map +1 -0
  218. package/dist/crypto/Mac.js +288 -0
  219. package/dist/crypto/Mac.js.map +1 -0
  220. package/dist/crypto/SecureRandom.d.ts +340 -0
  221. package/dist/crypto/SecureRandom.d.ts.map +1 -0
  222. package/dist/crypto/SecureRandom.js +257 -0
  223. package/dist/crypto/SecureRandom.js.map +1 -0
  224. package/dist/crypto/Signature.d.ts +448 -0
  225. package/dist/crypto/Signature.d.ts.map +1 -0
  226. package/dist/crypto/Signature.js +484 -0
  227. package/dist/crypto/Signature.js.map +1 -0
  228. package/dist/crypto/WebCrypto.d.ts +61 -0
  229. package/dist/crypto/WebCrypto.d.ts.map +1 -0
  230. package/dist/crypto/WebCrypto.js +63 -0
  231. package/dist/crypto/WebCrypto.js.map +1 -0
  232. package/dist/crypto/index.d.ts +65 -0
  233. package/dist/crypto/index.d.ts.map +1 -0
  234. package/dist/crypto/index.js +66 -0
  235. package/dist/crypto/index.js.map +1 -0
  236. package/dist/crypto/internal/asymmetric.d.ts +2 -0
  237. package/dist/crypto/internal/asymmetric.d.ts.map +1 -0
  238. package/dist/crypto/internal/asymmetric.js +210 -0
  239. package/dist/crypto/internal/asymmetric.js.map +1 -0
  240. package/dist/crypto/internal/chacha.d.ts +46 -0
  241. package/dist/crypto/internal/chacha.d.ts.map +1 -0
  242. package/dist/crypto/internal/chacha.js +885 -0
  243. package/dist/crypto/internal/chacha.js.map +1 -0
  244. package/dist/crypto/internal/der.d.ts +6 -0
  245. package/dist/crypto/internal/der.d.ts.map +1 -0
  246. package/dist/crypto/internal/der.js +86 -0
  247. package/dist/crypto/internal/der.js.map +1 -0
  248. package/dist/crypto/internal/digest.d.ts +2 -0
  249. package/dist/crypto/internal/digest.d.ts.map +1 -0
  250. package/dist/crypto/internal/digest.js +15 -0
  251. package/dist/crypto/internal/digest.js.map +1 -0
  252. package/dist/crypto/internal/key.d.ts +2 -0
  253. package/dist/crypto/internal/key.d.ts.map +1 -0
  254. package/dist/crypto/internal/key.js +170 -0
  255. package/dist/crypto/internal/key.js.map +1 -0
  256. package/dist/crypto/internal/md5.d.ts +39 -0
  257. package/dist/crypto/internal/md5.d.ts.map +1 -0
  258. package/dist/crypto/internal/md5.js +179 -0
  259. package/dist/crypto/internal/md5.js.map +1 -0
  260. package/dist/crypto/internal/webCrypto.d.ts +2 -0
  261. package/dist/crypto/internal/webCrypto.d.ts.map +1 -0
  262. package/dist/crypto/internal/webCrypto.js +111 -0
  263. package/dist/crypto/internal/webCrypto.js.map +1 -0
  264. package/dist/encoding/Base64Url.d.ts.map +1 -1
  265. package/dist/encoding/Base64Url.js +3 -2
  266. package/dist/encoding/Base64Url.js.map +1 -1
  267. package/dist/encoding/Csv.d.ts +608 -0
  268. package/dist/encoding/Csv.d.ts.map +1 -0
  269. package/dist/encoding/Csv.js +718 -0
  270. package/dist/encoding/Csv.js.map +1 -0
  271. package/dist/encoding/Hex.d.ts +3 -2
  272. package/dist/encoding/Hex.d.ts.map +1 -1
  273. package/dist/encoding/Hex.js +3 -2
  274. package/dist/encoding/Hex.js.map +1 -1
  275. package/dist/encoding/SchemaBinary.d.ts.map +1 -1
  276. package/dist/encoding/SchemaBinary.js +42 -4
  277. package/dist/encoding/SchemaBinary.js.map +1 -1
  278. package/dist/encoding/Toml.d.ts +17 -3
  279. package/dist/encoding/Toml.d.ts.map +1 -1
  280. package/dist/encoding/Toml.js +104 -16
  281. package/dist/encoding/Toml.js.map +1 -1
  282. package/dist/encoding/Yaml.d.ts +8 -1
  283. package/dist/encoding/Yaml.d.ts.map +1 -1
  284. package/dist/encoding/Yaml.js +54 -18
  285. package/dist/encoding/Yaml.js.map +1 -1
  286. package/dist/encoding/index.d.ts +5 -0
  287. package/dist/encoding/index.d.ts.map +1 -1
  288. package/dist/encoding/index.js +5 -0
  289. package/dist/encoding/index.js.map +1 -1
  290. package/dist/eventlog/EventJournal.d.ts.map +1 -1
  291. package/dist/eventlog/EventJournal.js +6 -3
  292. package/dist/eventlog/EventJournal.js.map +1 -1
  293. package/dist/eventlog/EventLog.d.ts +119 -4
  294. package/dist/eventlog/EventLog.d.ts.map +1 -1
  295. package/dist/eventlog/EventLog.js +200 -12
  296. package/dist/eventlog/EventLog.js.map +1 -1
  297. package/dist/eventlog/EventLogEncryption.d.ts +41 -4
  298. package/dist/eventlog/EventLogEncryption.d.ts.map +1 -1
  299. package/dist/eventlog/EventLogEncryption.js +83 -64
  300. package/dist/eventlog/EventLogEncryption.js.map +1 -1
  301. package/dist/eventlog/EventLogMessage.d.ts +279 -0
  302. package/dist/eventlog/EventLogMessage.d.ts.map +1 -1
  303. package/dist/eventlog/EventLogMessage.js +217 -1
  304. package/dist/eventlog/EventLogMessage.js.map +1 -1
  305. package/dist/eventlog/EventLogRemote.d.ts +200 -28
  306. package/dist/eventlog/EventLogRemote.d.ts.map +1 -1
  307. package/dist/eventlog/EventLogRemote.js +186 -16
  308. package/dist/eventlog/EventLogRemote.js.map +1 -1
  309. package/dist/eventlog/EventLogServer.d.ts +3 -0
  310. package/dist/eventlog/EventLogServer.d.ts.map +1 -1
  311. package/dist/eventlog/EventLogServer.js +18 -10
  312. package/dist/eventlog/EventLogServer.js.map +1 -1
  313. package/dist/eventlog/EventLogServerEncrypted.d.ts +326 -5
  314. package/dist/eventlog/EventLogServerEncrypted.d.ts.map +1 -1
  315. package/dist/eventlog/EventLogServerEncrypted.js +769 -14
  316. package/dist/eventlog/EventLogServerEncrypted.js.map +1 -1
  317. package/dist/eventlog/EventLogSessionAuth.d.ts +5 -3
  318. package/dist/eventlog/EventLogSessionAuth.d.ts.map +1 -1
  319. package/dist/eventlog/EventLogSessionAuth.js +41 -64
  320. package/dist/eventlog/EventLogSessionAuth.js.map +1 -1
  321. package/dist/eventlog/EventRow.d.ts +4 -0
  322. package/dist/eventlog/EventRow.d.ts.map +1 -1
  323. package/dist/eventlog/EventRow.js +12 -2
  324. package/dist/eventlog/EventRow.js.map +1 -1
  325. package/dist/eventlog/SqlEventJournal.js +2 -2
  326. package/dist/eventlog/SqlEventJournal.js.map +1 -1
  327. package/dist/eventlog/SqlEventLogServerEncrypted.d.ts +21 -5
  328. package/dist/eventlog/SqlEventLogServerEncrypted.d.ts.map +1 -1
  329. package/dist/eventlog/SqlEventLogServerEncrypted.js +1048 -113
  330. package/dist/eventlog/SqlEventLogServerEncrypted.js.map +1 -1
  331. package/dist/eventlog/SqlEventLogServerUnencrypted.js +2 -2
  332. package/dist/eventlog/SqlEventLogServerUnencrypted.js.map +1 -1
  333. package/dist/eventlog/internal/batches.d.ts +12 -0
  334. package/dist/eventlog/internal/batches.d.ts.map +1 -0
  335. package/dist/eventlog/internal/batches.js +26 -0
  336. package/dist/eventlog/internal/batches.js.map +1 -0
  337. package/dist/eventlog/internal/compaction.d.ts +38 -0
  338. package/dist/eventlog/internal/compaction.d.ts.map +1 -0
  339. package/dist/eventlog/internal/compaction.js +33 -0
  340. package/dist/eventlog/internal/compaction.js.map +1 -0
  341. package/dist/eventlog/internal/identityRootSecretDerivation.js +66 -67
  342. package/dist/eventlog/internal/identityRootSecretDerivation.js.map +1 -1
  343. package/dist/eventlog/internal/remoteCompaction.d.ts +31 -0
  344. package/dist/eventlog/internal/remoteCompaction.d.ts.map +1 -0
  345. package/dist/eventlog/internal/remoteCompaction.js +76 -0
  346. package/dist/eventlog/internal/remoteCompaction.js.map +1 -0
  347. package/dist/http/Cookies.d.ts +172 -0
  348. package/dist/http/Cookies.d.ts.map +1 -1
  349. package/dist/http/Cookies.js +143 -1
  350. package/dist/http/Cookies.js.map +1 -1
  351. package/dist/http/FetchHttpClient.d.ts +26 -2
  352. package/dist/http/FetchHttpClient.d.ts.map +1 -1
  353. package/dist/http/FetchHttpClient.js +78 -15
  354. package/dist/http/FetchHttpClient.js.map +1 -1
  355. package/dist/http/HttpClient.d.ts +79 -8
  356. package/dist/http/HttpClient.d.ts.map +1 -1
  357. package/dist/http/HttpClient.js +65 -5
  358. package/dist/http/HttpClient.js.map +1 -1
  359. package/dist/http/HttpClientRequest.d.ts +9 -5
  360. package/dist/http/HttpClientRequest.d.ts.map +1 -1
  361. package/dist/http/HttpClientRequest.js +2 -3
  362. package/dist/http/HttpClientRequest.js.map +1 -1
  363. package/dist/http/HttpClientResponse.d.ts.map +1 -1
  364. package/dist/http/HttpClientResponse.js +3 -2
  365. package/dist/http/HttpClientResponse.js.map +1 -1
  366. package/dist/http/HttpMethod.d.ts +7 -1
  367. package/dist/http/HttpMethod.d.ts.map +1 -1
  368. package/dist/http/HttpMethod.js +3 -8
  369. package/dist/http/HttpMethod.js.map +1 -1
  370. package/dist/http/HttpServerRequest.d.ts +5 -2
  371. package/dist/http/HttpServerRequest.d.ts.map +1 -1
  372. package/dist/http/HttpServerRequest.js +6 -17
  373. package/dist/http/HttpServerRequest.js.map +1 -1
  374. package/dist/http/HttpServerResponse.d.ts.map +1 -1
  375. package/dist/http/HttpServerResponse.js +3 -2
  376. package/dist/http/HttpServerResponse.js.map +1 -1
  377. package/dist/http/HttpTraceContext.d.ts +2 -1
  378. package/dist/http/HttpTraceContext.d.ts.map +1 -1
  379. package/dist/http/HttpTraceContext.js +7 -5
  380. package/dist/http/HttpTraceContext.js.map +1 -1
  381. package/dist/http/ProblemDetails.d.ts +96 -0
  382. package/dist/http/ProblemDetails.d.ts.map +1 -0
  383. package/dist/http/ProblemDetails.js +98 -0
  384. package/dist/http/ProblemDetails.js.map +1 -0
  385. package/dist/http/index.d.ts +5 -0
  386. package/dist/http/index.d.ts.map +1 -1
  387. package/dist/http/index.js +5 -0
  388. package/dist/http/index.js.map +1 -1
  389. package/dist/http/internal/decompression.js +3 -2
  390. package/dist/http/internal/decompression.js.map +1 -1
  391. package/dist/http/internal/urlParams.js +8 -0
  392. package/dist/http/internal/urlParams.js.map +1 -1
  393. package/dist/http-api/HttpApiBuilder.js +19 -5
  394. package/dist/http-api/HttpApiBuilder.js.map +1 -1
  395. package/dist/http-api/HttpApiClient.d.ts +63 -0
  396. package/dist/http-api/HttpApiClient.d.ts.map +1 -1
  397. package/dist/http-api/HttpApiClient.js +51 -0
  398. package/dist/http-api/HttpApiClient.js.map +1 -1
  399. package/dist/http-api/HttpApiEndpoint.d.ts.map +1 -1
  400. package/dist/http-api/HttpApiEndpoint.js +14 -5
  401. package/dist/http-api/HttpApiEndpoint.js.map +1 -1
  402. package/dist/http-api/HttpApiError.d.ts +185 -13
  403. package/dist/http-api/HttpApiError.d.ts.map +1 -1
  404. package/dist/http-api/HttpApiError.js +128 -0
  405. package/dist/http-api/HttpApiError.js.map +1 -1
  406. package/dist/http-api/HttpApiMiddleware.d.ts +64 -17
  407. package/dist/http-api/HttpApiMiddleware.d.ts.map +1 -1
  408. package/dist/http-api/HttpApiMiddleware.js +85 -1
  409. package/dist/http-api/HttpApiMiddleware.js.map +1 -1
  410. package/dist/http-api/HttpApiSchema.d.ts +76 -14
  411. package/dist/http-api/HttpApiSchema.d.ts.map +1 -1
  412. package/dist/http-api/HttpApiSchema.js +53 -0
  413. package/dist/http-api/HttpApiSchema.js.map +1 -1
  414. package/dist/index.d.ts +5 -5
  415. package/dist/index.d.ts.map +1 -1
  416. package/dist/index.js +5 -5
  417. package/dist/index.js.map +1 -1
  418. package/dist/internal/effect.js +25 -14
  419. package/dist/internal/effect.js.map +1 -1
  420. package/dist/internal/glob.d.ts +2 -0
  421. package/dist/internal/glob.d.ts.map +1 -0
  422. package/dist/internal/glob.js +630 -0
  423. package/dist/internal/glob.js.map +1 -0
  424. package/dist/internal/matcher.js +10 -0
  425. package/dist/internal/matcher.js.map +1 -1
  426. package/dist/internal/persistence.js +9 -0
  427. package/dist/internal/persistence.js.map +1 -1
  428. package/dist/internal/rcRef.js +4 -1
  429. package/dist/internal/rcRef.js.map +1 -1
  430. package/dist/internal/schema/toCodeDocument.js +6 -3
  431. package/dist/internal/schema/toCodeDocument.js.map +1 -1
  432. package/dist/internal/trie.js +42 -13
  433. package/dist/internal/trie.js.map +1 -1
  434. package/dist/internal/ulid.js +41 -0
  435. package/dist/internal/ulid.js.map +1 -1
  436. package/dist/internal/uuid.js +52 -8
  437. package/dist/internal/uuid.js.map +1 -1
  438. package/dist/internal/version.js +1 -1
  439. package/dist/observability/Otlp.d.ts +15 -4
  440. package/dist/observability/Otlp.d.ts.map +1 -1
  441. package/dist/observability/Otlp.js +10 -0
  442. package/dist/observability/Otlp.js.map +1 -1
  443. package/dist/observability/OtlpResource.d.ts +7 -0
  444. package/dist/observability/OtlpResource.d.ts.map +1 -1
  445. package/dist/observability/OtlpResource.js +11 -1
  446. package/dist/observability/OtlpResource.js.map +1 -1
  447. package/dist/persistence/KeyValueStore.d.ts +47 -2
  448. package/dist/persistence/KeyValueStore.d.ts.map +1 -1
  449. package/dist/persistence/KeyValueStore.js +129 -18
  450. package/dist/persistence/KeyValueStore.js.map +1 -1
  451. package/dist/persistence/PersistedQueue.d.ts +9 -0
  452. package/dist/persistence/PersistedQueue.d.ts.map +1 -1
  453. package/dist/persistence/PersistedQueue.js +94 -52
  454. package/dist/persistence/PersistedQueue.js.map +1 -1
  455. package/dist/persistence/Persistence.d.ts +10 -4
  456. package/dist/persistence/Persistence.d.ts.map +1 -1
  457. package/dist/persistence/Persistence.js +18 -11
  458. package/dist/persistence/Persistence.js.map +1 -1
  459. package/dist/process/ChildProcess.d.ts +207 -67
  460. package/dist/process/ChildProcess.d.ts.map +1 -1
  461. package/dist/process/ChildProcess.js +56 -158
  462. package/dist/process/ChildProcess.js.map +1 -1
  463. package/dist/process/ChildProcessSpawner.d.ts +5 -0
  464. package/dist/process/ChildProcessSpawner.d.ts.map +1 -1
  465. package/dist/process/ChildProcessSpawner.js.map +1 -1
  466. package/dist/process/CommandLine.d.ts +294 -0
  467. package/dist/process/CommandLine.d.ts.map +1 -0
  468. package/dist/process/CommandLine.js +481 -0
  469. package/dist/process/CommandLine.js.map +1 -0
  470. package/dist/process/index.d.ts +5 -0
  471. package/dist/process/index.d.ts.map +1 -1
  472. package/dist/process/index.js +5 -0
  473. package/dist/process/index.js.map +1 -1
  474. package/dist/reactivity/Atom.d.ts +2 -1
  475. package/dist/reactivity/Atom.d.ts.map +1 -1
  476. package/dist/reactivity/Atom.js +3 -4
  477. package/dist/reactivity/Atom.js.map +1 -1
  478. package/dist/reactivity/AtomRegistry.js.map +1 -1
  479. package/dist/rpc/RpcClient.d.ts +16 -1
  480. package/dist/rpc/RpcClient.d.ts.map +1 -1
  481. package/dist/rpc/RpcClient.js +50 -16
  482. package/dist/rpc/RpcClient.js.map +1 -1
  483. package/dist/rpc/RpcMessage.d.ts +10 -1
  484. package/dist/rpc/RpcMessage.d.ts.map +1 -1
  485. package/dist/rpc/RpcMessage.js +1 -0
  486. package/dist/rpc/RpcMessage.js.map +1 -1
  487. package/dist/rpc/RpcSerialization.d.ts.map +1 -1
  488. package/dist/rpc/RpcSerialization.js +6 -0
  489. package/dist/rpc/RpcSerialization.js.map +1 -1
  490. package/dist/rpc/RpcServer.d.ts +31 -0
  491. package/dist/rpc/RpcServer.d.ts.map +1 -1
  492. package/dist/rpc/RpcServer.js +139 -66
  493. package/dist/rpc/RpcServer.js.map +1 -1
  494. package/dist/schema/Model.d.ts +14 -0
  495. package/dist/schema/Model.d.ts.map +1 -1
  496. package/dist/schema/Model.js +18 -3
  497. package/dist/schema/Model.js.map +1 -1
  498. package/dist/sql/Migrator.d.ts +0 -19
  499. package/dist/sql/Migrator.d.ts.map +1 -1
  500. package/dist/sql/Migrator.js +3 -48
  501. package/dist/sql/Migrator.js.map +1 -1
  502. package/dist/sql/MigratorFileSystem.d.ts +21 -0
  503. package/dist/sql/MigratorFileSystem.d.ts.map +1 -0
  504. package/dist/sql/MigratorFileSystem.js +57 -0
  505. package/dist/sql/MigratorFileSystem.js.map +1 -0
  506. package/dist/sql/SqlClient.d.ts.map +1 -1
  507. package/dist/sql/SqlClient.js +5 -9
  508. package/dist/sql/SqlClient.js.map +1 -1
  509. package/dist/sql/Statement.d.ts +20 -6
  510. package/dist/sql/Statement.d.ts.map +1 -1
  511. package/dist/sql/Statement.js +0 -13
  512. package/dist/sql/Statement.js.map +1 -1
  513. package/dist/sql/index.js +1 -1
  514. package/dist/testing/index.d.ts +0 -5
  515. package/dist/testing/index.d.ts.map +1 -1
  516. package/dist/testing/index.js +0 -5
  517. package/dist/testing/index.js.map +1 -1
  518. package/dist/workflow/internal/crypto.js +9 -8
  519. package/dist/workflow/internal/crypto.js.map +1 -1
  520. package/package.json +3 -1
  521. package/src/BigDecimal.ts +3 -0
  522. package/src/Channel.ts +17 -11
  523. package/src/Config.ts +7 -1
  524. package/src/Context.ts +34 -10
  525. package/src/Cron.ts +178 -29
  526. package/src/Duration.ts +140 -0
  527. package/src/Effect.ts +914 -85
  528. package/src/FileSystem.ts +65 -4
  529. package/src/Glob.ts +205 -0
  530. package/src/Match.ts +127 -0
  531. package/src/Pool.ts +73 -15
  532. package/src/Random.ts +3 -3
  533. package/src/RcMap.ts +5 -1
  534. package/src/Schedule.ts +26 -3
  535. package/src/Schema.ts +1189 -62
  536. package/src/SchemaGetter.ts +27 -11
  537. package/src/SchemaRepresentation.ts +19 -0
  538. package/src/SchemaTransformation.ts +8 -3
  539. package/src/ScopedCache.ts +5 -9
  540. package/src/Semaphore.ts +141 -0
  541. package/src/Stream.ts +15 -6
  542. package/src/Terminal.ts +19 -1
  543. package/src/ai/AiError.ts +56 -80
  544. package/src/ai/Decision.ts +257 -6
  545. package/src/ai/DecisionModel.ts +171 -28
  546. package/src/ai/McpServer.ts +1269 -286
  547. package/src/ai/McpTest.ts +380 -0
  548. package/src/ai/Response.ts +2 -22
  549. package/src/ai/Tool.ts +27 -8
  550. package/src/ai/index.ts +6 -0
  551. package/src/ai/internal/mcpCore.ts +78 -44
  552. package/src/ai/internal/mcpProtocol/v2024_11_05.ts +4 -7
  553. package/src/ai/internal/mcpProtocol/v2025_03_26.ts +4 -7
  554. package/src/ai/internal/mcpProtocol/v2025_06_18.ts +4 -7
  555. package/src/ai/internal/mcpProtocol/v2025_11_25.ts +4 -7
  556. package/src/ai/internal/mcpProtocol/v2026_07_28.ts +15 -10
  557. package/src/ai/internal/mcpProtocol.ts +29 -0
  558. package/src/ai/internal/mcpRuntime.ts +9 -5
  559. package/src/ai/internal/mcpStatefulRuntime.ts +14 -2
  560. package/src/cli/Argument.ts +6 -0
  561. package/src/cli/CliOutput.ts +117 -49
  562. package/src/cli/Command.ts +23 -0
  563. package/src/cli/Flag.ts +107 -0
  564. package/src/cli/HelpDoc.ts +18 -1
  565. package/src/cli/Param.ts +6 -0
  566. package/src/cli/Primitive.ts +16 -1
  567. package/src/cli/Prompt.ts +1 -0
  568. package/src/cli/internal/help.ts +21 -9
  569. package/src/cluster/Sharding.ts +93 -26
  570. package/src/cluster/ShardingConfig.ts +41 -3
  571. package/src/cluster/SingleRunner.ts +3 -3
  572. package/src/cluster/SqlMessageStorage.ts +49 -17
  573. package/src/cluster/SqlRunnerStorage.ts +37 -27
  574. package/src/crypto/Aead.ts +517 -0
  575. package/src/crypto/Cipher.ts +326 -0
  576. package/src/crypto/CryptoError.ts +242 -0
  577. package/src/crypto/Digest.ts +167 -0
  578. package/src/crypto/Kdf.ts +315 -0
  579. package/src/crypto/KeyAgreement.ts +489 -0
  580. package/src/crypto/KeyFormat.ts +712 -0
  581. package/src/crypto/KeyWrap.ts +639 -0
  582. package/src/crypto/Mac.ts +386 -0
  583. package/src/crypto/SecureRandom.ts +459 -0
  584. package/src/crypto/Signature.ts +673 -0
  585. package/src/crypto/WebCrypto.ts +64 -0
  586. package/src/crypto/index.ts +78 -0
  587. package/src/crypto/internal/asymmetric.ts +329 -0
  588. package/src/crypto/internal/chacha.ts +1088 -0
  589. package/src/crypto/internal/der.ts +110 -0
  590. package/src/crypto/internal/digest.ts +16 -0
  591. package/src/crypto/internal/key.ts +235 -0
  592. package/src/crypto/internal/md5.ts +170 -0
  593. package/src/crypto/internal/webCrypto.ts +150 -0
  594. package/src/encoding/Base64Url.ts +5 -2
  595. package/src/encoding/Csv.ts +1298 -0
  596. package/src/encoding/Hex.ts +3 -2
  597. package/src/encoding/SchemaBinary.ts +40 -4
  598. package/src/encoding/Toml.ts +85 -20
  599. package/src/encoding/Yaml.ts +61 -18
  600. package/src/encoding/index.ts +6 -0
  601. package/src/eventlog/EventJournal.ts +4 -3
  602. package/src/eventlog/EventLog.ts +340 -15
  603. package/src/eventlog/EventLogEncryption.ts +118 -110
  604. package/src/eventlog/EventLogMessage.ts +273 -1
  605. package/src/eventlog/EventLogRemote.ts +367 -23
  606. package/src/eventlog/EventLogServer.ts +23 -8
  607. package/src/eventlog/EventLogServerEncrypted.ts +1130 -67
  608. package/src/eventlog/EventLogSessionAuth.ts +56 -70
  609. package/src/eventlog/EventRow.ts +12 -3
  610. package/src/eventlog/SqlEventJournal.ts +2 -2
  611. package/src/eventlog/SqlEventLogServerEncrypted.ts +1244 -136
  612. package/src/eventlog/SqlEventLogServerUnencrypted.ts +2 -2
  613. package/src/eventlog/internal/batches.ts +30 -0
  614. package/src/eventlog/internal/compaction.ts +64 -0
  615. package/src/eventlog/internal/identityRootSecretDerivation.ts +93 -123
  616. package/src/eventlog/internal/remoteCompaction.ts +92 -0
  617. package/src/http/Cookies.ts +281 -1
  618. package/src/http/FetchHttpClient.ts +88 -16
  619. package/src/http/HttpClient.ts +89 -22
  620. package/src/http/HttpClientRequest.ts +12 -9
  621. package/src/http/HttpClientResponse.ts +3 -2
  622. package/src/http/HttpMethod.ts +10 -2
  623. package/src/http/HttpServerRequest.ts +15 -30
  624. package/src/http/HttpServerResponse.ts +3 -2
  625. package/src/http/HttpTraceContext.ts +7 -4
  626. package/src/http/ProblemDetails.ts +149 -0
  627. package/src/http/index.ts +6 -0
  628. package/src/http/internal/decompression.ts +4 -4
  629. package/src/http/internal/urlParams.ts +8 -0
  630. package/src/http-api/HttpApiBuilder.ts +24 -12
  631. package/src/http-api/HttpApiClient.ts +67 -1
  632. package/src/http-api/HttpApiEndpoint.ts +14 -5
  633. package/src/http-api/HttpApiError.ts +250 -0
  634. package/src/http-api/HttpApiMiddleware.ts +95 -1
  635. package/src/http-api/HttpApiSchema.ts +105 -14
  636. package/src/index.ts +6 -6
  637. package/src/internal/effect.ts +34 -18
  638. package/src/internal/glob.ts +736 -0
  639. package/src/internal/matcher.ts +17 -0
  640. package/src/internal/persistence.ts +11 -0
  641. package/src/internal/rcRef.ts +4 -1
  642. package/src/internal/schema/toCodeDocument.ts +7 -3
  643. package/src/internal/trie.ts +43 -14
  644. package/src/internal/ulid.ts +44 -0
  645. package/src/internal/uuid.ts +57 -16
  646. package/src/internal/version.ts +1 -1
  647. package/src/observability/Otlp.ts +21 -4
  648. package/src/observability/OtlpResource.ts +9 -1
  649. package/src/persistence/KeyValueStore.ts +219 -22
  650. package/src/persistence/PersistedQueue.ts +128 -59
  651. package/src/persistence/Persistence.ts +20 -13
  652. package/src/process/ChildProcess.ts +255 -260
  653. package/src/process/ChildProcessSpawner.ts +5 -0
  654. package/src/process/CommandLine.ts +630 -0
  655. package/src/process/index.ts +6 -0
  656. package/src/reactivity/Atom.ts +5 -5
  657. package/src/reactivity/AtomRegistry.ts +1 -1
  658. package/src/rpc/RpcClient.ts +62 -26
  659. package/src/rpc/RpcMessage.ts +10 -1
  660. package/src/rpc/RpcSerialization.ts +3 -0
  661. package/src/rpc/RpcServer.ts +176 -78
  662. package/src/schema/Model.ts +26 -3
  663. package/src/sql/Migrator.ts +4 -63
  664. package/src/sql/MigratorFileSystem.ts +71 -0
  665. package/src/sql/SqlClient.ts +2 -16
  666. package/src/sql/Statement.ts +8 -7
  667. package/src/sql/index.ts +1 -1
  668. package/src/testing/index.ts +0 -6
  669. package/src/workflow/internal/crypto.ts +15 -11
  670. package/dist/Crypto.d.ts +0 -244
  671. package/dist/Crypto.d.ts.map +0 -1
  672. package/dist/Crypto.js +0 -139
  673. package/dist/Crypto.js.map +0 -1
  674. package/dist/testing/TestCrypto.d.ts +0 -73
  675. package/dist/testing/TestCrypto.d.ts.map +0 -1
  676. package/dist/testing/TestCrypto.js +0 -87
  677. package/dist/testing/TestCrypto.js.map +0 -1
  678. package/src/Crypto.ts +0 -347
  679. package/src/testing/TestCrypto.ts +0 -94
@@ -511,6 +511,23 @@ export const tags = discriminators("_tag")
511
511
  /** @internal */
512
512
  export const tagsExhaustive = discriminatorsExhaustive("_tag")
513
513
 
514
+ /** @internal */
515
+ export const literals = (fields: object) => {
516
+ const predicate = makeWhen(
517
+ (arg: any) =>
518
+ (typeof arg === "string" || typeof arg === "number") && Object.hasOwn(fields, arg) &&
519
+ (fields as any)[arg] !== undefined,
520
+ (data: any) => (fields as any)[data](data)
521
+ )
522
+ return (self: any): any => self.add(predicate)
523
+ }
524
+
525
+ /** @internal */
526
+ export const literalsExhaustive = (fields: object) => {
527
+ const addCases = literals(fields)
528
+ return (matcher: any): any => exhaustive(addCases(matcher))
529
+ }
530
+
514
531
  /** @internal */
515
532
  export const not = <
516
533
  R,
@@ -1,2 +1,13 @@
1
1
  /** @internal */
2
2
  export const sqlCleanupBatchSize = 1000
3
+
4
+ /**
5
+ * Key prefix for a persistence store. The store id is escaped so the namespace
6
+ * always ends at its first `:`, and distinct store / key pairs never collide.
7
+ *
8
+ * @internal
9
+ */
10
+ export const storeNamespace = (storeId: string): string => `${storeId.replace(/%/g, "%25").replace(/:/g, "%3A")}:`
11
+
12
+ /** @internal */
13
+ export const escapeRedisGlob = (pattern: string): string => pattern.replace(/[\\*?[\]]/g, "\\$&")
@@ -225,7 +225,10 @@ const release = <A, E>(self: RcRefImpl<A, E>, state: State.Acquired<A>): Effect.
225
225
  Effect.flatMap(restore(Effect.sleep(idleTimeToLive)), () => {
226
226
  if (self.state === state && state.refCount === 0) {
227
227
  self.state = stateEmpty
228
- return Scope.close(state.scope, Exit.void)
228
+ return Effect.ignoreCause(Scope.close(state.scope, Exit.void), {
229
+ log: "Unhandled",
230
+ message: "Unhandled error in RcRef finalizer"
231
+ })
229
232
  }
230
233
  return Effect.void
231
234
  })
@@ -16,6 +16,10 @@ export function makeCode(runtime: string, Type: string): SchemaRepresentation.Co
16
16
  return { runtime, Type }
17
17
  }
18
18
 
19
+ function formatObjectLiteralKey(key: PropertyKey, formatted = formatPropertyKey(key)): string {
20
+ return key === "__proto__" ? `[${formatted}]` : formatted
21
+ }
22
+
19
23
  function renderEmittableAnnotation(input: unknown): string | undefined {
20
24
  if (
21
25
  input === null ||
@@ -43,7 +47,7 @@ function renderEmittableAnnotation(input: unknown): string | undefined {
43
47
  for (const [key, value] of Object.entries(input)) {
44
48
  const rendered = renderEmittableAnnotation(value)
45
49
  if (rendered === undefined) return undefined
46
- entries.push(`${formatPropertyKey(key)}: ${rendered}`)
50
+ entries.push(`${formatObjectLiteralKey(key)}: ${rendered}`)
47
51
  }
48
52
  return entries.length === 0 ? "{}" : `{ ${entries.join(", ")} }`
49
53
  }
@@ -63,7 +67,7 @@ function renderAnnotations(
63
67
  for (const [key, value] of Object.entries(annotations)) {
64
68
  if (InternalAnnotations.annotationExcludedKeys.has(key)) continue
65
69
  const rendered = renderEmittableAnnotation(value)
66
- if (rendered !== undefined) entries.push(`${formatPropertyKey(key)}: ${rendered}`)
70
+ if (rendered !== undefined) entries.push(`${formatObjectLiteralKey(key)}: ${rendered}`)
67
71
  }
68
72
  return entries.length === 0 ? undefined : `{ ${entries.join(", ")} }`
69
73
  }
@@ -499,7 +503,7 @@ export function toCodeDocument(
499
503
  if (property.isMutable) runtime = `Schema.mutableKey(${runtime})`
500
504
  if (property.isOptional) runtime = `Schema.optionalKey(${runtime})`
501
505
  runtime += runtimeAnnotate(property.annotations, "annotateKey")
502
- const runtimeName = property.name === "__proto__" ? `[${name}]` : name
506
+ const runtimeName = formatObjectLiteralKey(property.name, name)
503
507
  const typeName = `${property.isMutable ? "" : "readonly "}${name}${property.isOptional ? "?" : ""}`
504
508
  return {
505
509
  code: makeCode(`${runtimeName}: ${runtime}`, `${typeName}: ${type.Type}`)
@@ -21,6 +21,7 @@ type TraversalFilter<K, V> = (k: K, v: V) => boolean
21
21
  /** @internal */
22
22
  export interface TrieImpl<in out V> extends TR.Trie<V> {
23
23
  readonly _root: Node<V> | undefined
24
+ readonly _empty: Entry<V> | undefined
24
25
  readonly _count: number
25
26
  }
26
27
 
@@ -70,15 +71,17 @@ const TrieProto: TR.Trie<unknown> = {
70
71
  }
71
72
  }
72
73
 
73
- const makeImpl = <V>(root: Node<V> | undefined): TrieImpl<V> => {
74
+ const makeImpl = <V>(root: Node<V> | undefined, emptyEntry: Entry<V> | undefined): TrieImpl<V> => {
74
75
  const trie = Object.create(TrieProto)
75
76
  trie._root = root
76
- trie._count = root?.count ?? 0
77
+ trie._empty = emptyEntry
78
+ trie._count = (root?.count ?? 0) + (emptyEntry === undefined ? 0 : 1)
77
79
  return trie
78
80
  }
79
81
 
80
82
  class TrieIterator<in out V, out T> implements IterableIterator<T> {
81
83
  stack: Array<[Node<V>, string, boolean]> = []
84
+ emptyEntry: Entry<V> | undefined
82
85
  readonly f: TraversalMap<string, V, T>
83
86
  readonly filter: TraversalFilter<string, V>
84
87
 
@@ -89,6 +92,7 @@ class TrieIterator<in out V, out T> implements IterableIterator<T> {
89
92
  ) {
90
93
  this.f = f
91
94
  this.filter = filter
95
+ this.emptyEntry = trie._empty
92
96
  const root = trie._root !== undefined ? trie._root : undefined
93
97
  if (root !== undefined) {
94
98
  this.stack.push([root, "", false])
@@ -96,6 +100,13 @@ class TrieIterator<in out V, out T> implements IterableIterator<T> {
96
100
  }
97
101
 
98
102
  next(): IteratorResult<T> {
103
+ const emptyEntry = this.emptyEntry
104
+ if (emptyEntry !== undefined) {
105
+ this.emptyEntry = undefined
106
+ if (this.filter("", emptyEntry.value)) {
107
+ return { done: false, value: this.f("", emptyEntry.value) }
108
+ }
109
+ }
99
110
  while (this.stack.length > 0) {
100
111
  const [node, keyString, isAdded] = this.stack.pop()!
101
112
 
@@ -140,7 +151,7 @@ export const isTrie: {
140
151
  } = (u: unknown): u is TR.Trie<unknown> => hasProperty(u, TrieTypeId)
141
152
 
142
153
  /** @internal */
143
- export const empty = <V = never>(): TR.Trie<V> => makeImpl<V>(undefined)
154
+ export const empty = <V = never>(): TR.Trie<V> => makeImpl<V>(undefined, undefined)
144
155
 
145
156
  /** @internal */
146
157
  export const fromIterable = <V>(entries: Iterable<readonly [string, V]>) => {
@@ -163,7 +174,7 @@ export const insert = dual<
163
174
  <V>(key: string, value: V) => (self: TR.Trie<V>) => TR.Trie<V>,
164
175
  <V>(self: TR.Trie<V>, key: string, value: V) => TR.Trie<V>
165
176
  >(3, <V>(self: TR.Trie<V>, key: string, value: V) => {
166
- if (key.length === 0) return self
177
+ if (key.length === 0) return makeImpl((self as TrieImpl<V>)._root, { value })
167
178
 
168
179
  // -1:left | 0:mid | 1:right
169
180
  const dStack: Array<Ordering.Ordering> = []
@@ -255,11 +266,11 @@ export const insert = dual<
255
266
  }
256
267
 
257
268
  nStack[0].count = count
258
- return makeImpl(nStack[0])
269
+ return makeImpl(nStack[0], (self as TrieImpl<V>)._empty)
259
270
  })
260
271
 
261
272
  /** @internal */
262
- export const size = <V>(self: TR.Trie<V>): number => (self as TrieImpl<V>)._root?.count ?? 0
273
+ export const size = <V>(self: TR.Trie<V>): number => (self as TrieImpl<V>)._count
263
274
 
264
275
  /** @internal */
265
276
  export const isEmpty = <V>(self: TR.Trie<V>): boolean => size(self) === 0
@@ -394,8 +405,12 @@ export const get = dual<
394
405
  >(
395
406
  2,
396
407
  <V>(self: TR.Trie<V>, key: string) => {
408
+ if (key.length === 0) {
409
+ const emptyEntry = (self as TrieImpl<V>)._empty
410
+ return emptyEntry === undefined ? Option.none() : Option.some(emptyEntry.value)
411
+ }
397
412
  let n: Node<V> | undefined = (self as TrieImpl<V>)._root
398
- if (n === undefined || key.length === 0) return Option.none()
413
+ if (n === undefined) return Option.none()
399
414
  let cIndex = 0
400
415
  while (cIndex < key.length) {
401
416
  const c = key[cIndex]
@@ -453,8 +468,11 @@ export const remove = dual<
453
468
  >(
454
469
  2,
455
470
  <V>(self: TR.Trie<V>, key: string) => {
471
+ if (key.length === 0) {
472
+ return (self as TrieImpl<V>)._empty === undefined ? self : makeImpl((self as TrieImpl<V>)._root, undefined)
473
+ }
456
474
  let n: Node<V> | undefined = (self as TrieImpl<V>)._root
457
- if (n === undefined || key.length === 0) return self
475
+ if (n === undefined) return self
458
476
 
459
477
  const count = n.count - 1
460
478
  // -1:left | 0:mid | 1:right
@@ -554,7 +572,7 @@ export const remove = dual<
554
572
  }
555
573
 
556
574
  nStack[0].count = count
557
- return makeImpl(nStack[0])
575
+ return makeImpl(nStack[0], (self as TrieImpl<V>)._empty)
558
576
  }
559
577
  )
560
578
 
@@ -589,8 +607,12 @@ export const modify = dual<
589
607
  >(
590
608
  3,
591
609
  <V>(self: TR.Trie<V>, key: string, f: (v: V) => V): TR.Trie<V> => {
610
+ if (key.length === 0) {
611
+ const emptyEntry = (self as TrieImpl<V>)._empty
612
+ return emptyEntry === undefined ? self : makeImpl((self as TrieImpl<V>)._root, { value: f(emptyEntry.value) })
613
+ }
592
614
  let n: Node<V> | undefined = (self as TrieImpl<V>)._root
593
- if (n === undefined || key.length === 0) return self
615
+ if (n === undefined) return self
594
616
 
595
617
  // -1:left | 0:mid | 1:right
596
618
  const dStack: Array<Ordering.Ordering> = []
@@ -689,7 +711,7 @@ export const modify = dual<
689
711
  }
690
712
  }
691
713
 
692
- return makeImpl(nStack[0])
714
+ return makeImpl(nStack[0], (self as TrieImpl<V>)._empty)
693
715
  }
694
716
  )
695
717
 
@@ -700,9 +722,12 @@ export const longestPrefixOf = dual<
700
722
  >(
701
723
  2,
702
724
  <V>(self: TR.Trie<V>, key: string): Option.Option<[string, V]> => {
725
+ const emptyEntry = (self as TrieImpl<V>)._empty
726
+ let longestPrefixNode: Option.Option<[string, V]> = emptyEntry === undefined
727
+ ? Option.none()
728
+ : Option.some(["", emptyEntry.value])
703
729
  let n: Node<V> | undefined = (self as TrieImpl<V>)._root
704
- if (n === undefined || key.length === 0) return Option.none()
705
- let longestPrefixNode: Option.Option<[string, V]> = Option.none()
730
+ if (n === undefined || key.length === 0) return longestPrefixNode
706
731
  let cIndex = 0
707
732
  while (cIndex < key.length) {
708
733
  const c = key[cIndex]
@@ -735,10 +760,14 @@ export const longestPrefixOf = dual<
735
760
  }
736
761
  )
737
762
 
763
+ interface Entry<V> {
764
+ readonly value: V
765
+ }
766
+
738
767
  interface Node<V> {
739
768
  key: string
740
769
  count: number
741
- value?: { readonly value: V } | undefined
770
+ value?: Entry<V> | undefined
742
771
  left?: Node<V> | undefined
743
772
  mid?: Node<V> | undefined
744
773
  right?: Node<V> | undefined
@@ -28,3 +28,47 @@ export const ulidString = (timestampMillis: number, bytes: Uint8Array): string =
28
28
 
29
29
  return out
30
30
  }
31
+
32
+ /**
33
+ * Makes a ULID generator in the ULID spec's monotonic mode: within a
34
+ * millisecond, or when the clock moves back, the 80-bit random part of the last
35
+ * ULID is incremented. The ordering ends at the maximum timestamp, 2^48 − 1 ms,
36
+ * which overflow cannot advance. `randomBytes` is only called for fresh
37
+ * randomness.
38
+ *
39
+ * @internal
40
+ */
41
+ export const makeMonotonic = () => {
42
+ let lastTimestamp = -1
43
+ const random = new Uint8Array(10)
44
+ return (timestampMillis: number, randomBytes: () => Uint8Array): string => {
45
+ const timestamp = timestampMillis >= 0 ? Math.min(Math.trunc(timestampMillis), maxTimestamp) : 0
46
+ if (timestamp > lastTimestamp) {
47
+ lastTimestamp = timestamp
48
+ random.set(randomBytes())
49
+ } else if (!increment(random)) {
50
+ lastTimestamp = Math.min(lastTimestamp + 1, maxTimestamp)
51
+ random.set(randomBytes())
52
+ }
53
+ return ulidString(lastTimestamp, random)
54
+ }
55
+ }
56
+
57
+ // Returns false when the bytes overflow, leaving them all zero.
58
+ const increment = (bytes: Uint8Array): boolean => {
59
+ for (let i = bytes.length - 1; i >= 0; i--) {
60
+ if (bytes[i] !== 0xff) {
61
+ bytes[i]++
62
+ return true
63
+ }
64
+ bytes[i] = 0
65
+ }
66
+ return false
67
+ }
68
+
69
+ /**
70
+ * The ULID ordering state shared by every `Date.now()` caller in the realm.
71
+ *
72
+ * @internal
73
+ */
74
+ export const monotonic = makeMonotonic()
@@ -18,30 +18,20 @@ export const stringify = (bytes: Uint8Array): string => {
18
18
  hex[bytes[10]] + hex[bytes[11]] + hex[bytes[12]] + hex[bytes[13]] + hex[bytes[14]] + hex[bytes[15]]
19
19
  }
20
20
 
21
- const randomBytes = (): Uint8Array<ArrayBuffer> => globalThis.crypto.getRandomValues(new Uint8Array(16))
22
-
23
- /** @internal */
24
- export function v4Bytes(): Uint8Array<ArrayBuffer>
25
- /** @internal */
26
- export function v4Bytes<A extends ArrayBufferLike>(bytes: Uint8Array<A>): Uint8Array<A>
27
21
  /** @internal */
28
- export function v4Bytes(bytes: Uint8Array = randomBytes()): Uint8Array {
22
+ export const v4Bytes = <A extends ArrayBufferLike>(bytes: Uint8Array<A>): Uint8Array<A> => {
29
23
  bytes[6] = (bytes[6] & 0x0f) | 0x40
30
24
  bytes[8] = (bytes[8] & 0x3f) | 0x80
31
25
  return bytes
32
26
  }
33
27
 
34
28
  /** @internal */
35
- export const v4String = (bytes?: Uint8Array): string => stringify(bytes === undefined ? v4Bytes() : v4Bytes(bytes))
29
+ export const v4String = (bytes: Uint8Array): string => stringify(v4Bytes(bytes))
36
30
 
37
31
  const maxV7Timestamp = 2 ** 48 - 1
38
32
 
39
33
  /** @internal */
40
- export function v7Bytes(timestampMillis: number): Uint8Array<ArrayBuffer>
41
- /** @internal */
42
- export function v7Bytes<A extends ArrayBufferLike>(timestampMillis: number, bytes: Uint8Array<A>): Uint8Array<A>
43
- /** @internal */
44
- export function v7Bytes(timestampMillis: number, bytes: Uint8Array = randomBytes()): Uint8Array {
34
+ export const v7Bytes = <A extends ArrayBufferLike>(timestampMillis: number, bytes: Uint8Array<A>): Uint8Array<A> => {
45
35
  const timestamp = Math.min(Math.max(0, Math.trunc(timestampMillis)), maxV7Timestamp)
46
36
 
47
37
  bytes[0] = Math.floor(timestamp / 2 ** 40)
@@ -55,6 +45,57 @@ export function v7Bytes(timestampMillis: number, bytes: Uint8Array = randomBytes
55
45
  return bytes
56
46
  }
57
47
 
58
- /** @internal */
59
- export const v7String = (timestampMillis: number, bytes?: Uint8Array): string =>
60
- stringify(bytes === undefined ? v7Bytes(timestampMillis) : v7Bytes(timestampMillis, bytes))
48
+ const clampV7Timestamp = (timestampMillis: number): number =>
49
+ timestampMillis >= 0 ? Math.min(Math.trunc(timestampMillis), maxV7Timestamp) : 0
50
+
51
+ const maxV7Counter = 2 ** 42 - 1
52
+
53
+ /**
54
+ * Makes a UUIDv7 generator that orders the UUIDs it returns, following RFC
55
+ * 9562 §6.2 Method 1. A 42-bit counter fills the 12 bits of `rand_a` and the
56
+ * top 30 bits of `rand_b`; the last 32 bits stay random. The ordering ends at
57
+ * the maximum timestamp, 2^48 − 1 ms, which counter overflow cannot advance.
58
+ *
59
+ * @internal
60
+ */
61
+ export const makeV7Monotonic = () => {
62
+ let lastTimestamp = -1
63
+ let counter = 0
64
+ return <A extends ArrayBufferLike>(timestampMillis: number, bytes: Uint8Array<A>): Uint8Array<A> => {
65
+ const timestamp = clampV7Timestamp(timestampMillis)
66
+ if (timestamp > lastTimestamp) {
67
+ lastTimestamp = timestamp
68
+ counter = seedV7Counter(bytes)
69
+ } else if (counter < maxV7Counter) {
70
+ // The clock stalled or moved back, so keep the last timestamp.
71
+ counter++
72
+ } else {
73
+ lastTimestamp = Math.min(lastTimestamp + 1, maxV7Timestamp)
74
+ counter = seedV7Counter(bytes)
75
+ }
76
+ v7Bytes(lastTimestamp, bytes)
77
+ const high = Math.floor(counter / 2 ** 30)
78
+ const low = counter - high * 2 ** 30
79
+ bytes[6] = 0x70 | (high >>> 8)
80
+ bytes[7] = high & 0xff
81
+ bytes[8] = 0x80 | (low >>> 24)
82
+ bytes[9] = (low >>> 16) & 0xff
83
+ bytes[10] = (low >>> 8) & 0xff
84
+ bytes[11] = low & 0xff
85
+ return bytes
86
+ }
87
+ }
88
+
89
+ // Clears the counter's top bit, so a millisecond has at least 2^41 increments
90
+ // before it overflows.
91
+ const seedV7Counter = (bytes: Uint8Array): number =>
92
+ (((bytes[6] & 0x07) << 8) | bytes[7]) * 2 ** 30 +
93
+ (((bytes[8] & 0x3f) << 24) | (bytes[9] << 16) | (bytes[10] << 8) | bytes[11])
94
+
95
+ /**
96
+ * The UUIDv7 ordering state shared by every `Date.now()` or `Clock` caller in
97
+ * the realm that has no `SecureRandom` instance of its own.
98
+ *
99
+ * @internal
100
+ */
101
+ export const v7Monotonic = makeV7Monotonic()
@@ -1,2 +1,2 @@
1
1
  /** @internal */
2
- export const version = "4.0.7"
2
+ export const version = "4.1.0"
@@ -16,6 +16,7 @@ import type * as HttpClient from "../http/HttpClient.ts"
16
16
  import * as HttpClientRequest from "../http/HttpClientRequest.ts"
17
17
  import * as Layer from "../Layer.ts"
18
18
  import type * as Tracer from "../Tracer.ts"
19
+ import type * as OtlpExporter from "./OtlpExporter.ts"
19
20
  import * as OtlpLogger from "./OtlpLogger.ts"
20
21
  import type { AggregationTemporality } from "./OtlpMetrics.ts"
21
22
  import * as OtlpMetrics from "./OtlpMetrics.ts"
@@ -30,6 +31,10 @@ import * as OtlpTracer from "./OtlpTracer.ts"
30
31
  * The layer sends data to `/v1/logs`, `/v1/metrics`, and `/v1/traces` below
31
32
  * `baseUrl` and requires an `OtlpSerialization` implementation.
32
33
  *
34
+ * The layer provides the `OtlpExporter.Flusher` shared by all three signals,
35
+ * so one `flush` exports their buffered telemetry, for example before a
36
+ * serverless instance is suspended.
37
+ *
33
38
  * @stability unstable
34
39
  * @category layers
35
40
  * @since 4.0.0
@@ -56,7 +61,7 @@ export const layer = (options: {
56
61
  readonly metricsTemporality?: AggregationTemporality | undefined
57
62
  readonly tracerExportInterval?: Duration.Input | undefined
58
63
  readonly shutdownTimeout?: Duration.Input | undefined
59
- }): Layer.Layer<never, never, HttpClient.HttpClient | OtlpSerialization.OtlpSerialization> => {
64
+ }): Layer.Layer<OtlpExporter.Flusher, never, HttpClient.HttpClient | OtlpSerialization.OtlpSerialization> => {
60
65
  const base = HttpClientRequest.get(options.baseUrl)
61
66
  const url = (path: string) => HttpClientRequest.appendUrl(base, path).url
62
67
  return Layer.mergeAll(
@@ -97,6 +102,12 @@ export const layer = (options: {
97
102
  * Creates a combined OTLP layer for logs, metrics, and traces from
98
103
  * OpenTelemetry configuration.
99
104
  *
105
+ * **Details**
106
+ *
107
+ * The layer provides the `OtlpExporter.Flusher` shared by all enabled signals.
108
+ * It is provided even when configuration disables every signal, in which case
109
+ * `flush` is a no-op.
110
+ *
100
111
  * @stability unstable
101
112
  * @category layers
102
113
  * @since 4.0.0
@@ -111,7 +122,7 @@ export const layerFromConfig = (options?: {
111
122
  readonly tracerContext?: (<X>(primitive: Tracer.EffectPrimitive<X>, span: Tracer.AnySpan) => X) | undefined
112
123
  readonly loggerExcludeLogSpans?: boolean | undefined
113
124
  readonly loggerMergeWithExisting?: boolean | undefined
114
- }): Layer.Layer<never, never, HttpClient.HttpClient | OtlpSerialization.OtlpSerialization> =>
125
+ }): Layer.Layer<OtlpExporter.Flusher, never, HttpClient.HttpClient | OtlpSerialization.OtlpSerialization> =>
115
126
  Layer.mergeAll(
116
127
  OtlpLogger.layerFromConfig({
117
128
  resource: options?.resource,
@@ -160,7 +171,10 @@ export const layerJson: (options: {
160
171
  readonly metricsTemporality?: AggregationTemporality | undefined
161
172
  readonly tracerExportInterval?: Duration.Input | undefined
162
173
  readonly shutdownTimeout?: Duration.Input | undefined
163
- }) => Layer.Layer<never, never, HttpClient.HttpClient> = flow(layer, Layer.provide(OtlpSerialization.layerJson))
174
+ }) => Layer.Layer<OtlpExporter.Flusher, never, HttpClient.HttpClient> = flow(
175
+ layer,
176
+ Layer.provide(OtlpSerialization.layerJson)
177
+ )
164
178
 
165
179
  /**
166
180
  * Creates the combined OTLP logs, metrics, and traces layer using protobuf
@@ -192,4 +206,7 @@ export const layerProtobuf: (options: {
192
206
  readonly metricsTemporality?: AggregationTemporality | undefined
193
207
  readonly tracerExportInterval?: Duration.Input | undefined
194
208
  readonly shutdownTimeout?: Duration.Input | undefined
195
- }) => Layer.Layer<never, never, HttpClient.HttpClient> = flow(layer, Layer.provide(OtlpSerialization.layerProtobuf))
209
+ }) => Layer.Layer<OtlpExporter.Flusher, never, HttpClient.HttpClient> = flow(
210
+ layer,
211
+ Layer.provide(OtlpSerialization.layerProtobuf)
212
+ )
@@ -79,6 +79,13 @@ export const make = (options: {
79
79
  * precedence over matching attributes in `OTEL_RESOURCE_ATTRIBUTES`. Missing
80
80
  * required configuration is converted to a defect.
81
81
  *
82
+ * Keys and values in `OTEL_RESOURCE_ATTRIBUTES` are trimmed, then
83
+ * percent-decoded. Entries with an empty value are kept as `""`; entries
84
+ * without `=` or with an empty key are skipped. When a key is repeated as
85
+ * written, the last entry wins and the earlier ones are not decoded. Invalid
86
+ * percent-encoding in the remaining entries is a `ConfigError` and is
87
+ * converted to a defect.
88
+ *
82
89
  * @stability unstable
83
90
  * @category constructors
84
91
  * @since 4.0.0
@@ -97,7 +104,8 @@ export const fromConfig: (
97
104
  const env = yield* Config.Record(
98
105
  Schema.StringFromUriComponent,
99
106
  Schema.StringFromUriComponent,
100
- "OTEL_RESOURCE_ATTRIBUTES"
107
+ "OTEL_RESOURCE_ATTRIBUTES",
108
+ { trim: true, keepEmptyValues: true }
101
109
  ).pipe(Config.withDefault(undefined))
102
110
 
103
111
  const serviceName = options?.serviceName