pi-cursor-sdk 0.1.50 → 0.1.52

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 (279) hide show
  1. package/CHANGELOG.md +31 -0
  2. package/README.md +1 -1
  3. package/docs/cursor-live-smoke-checklist.md +4 -4
  4. package/docs/cursor-model-ux-spec.md +5 -5
  5. package/docs/cursor-native-tool-replay.md +2 -2
  6. package/docs/cursor-native-tool-visual-audit.md +1 -1
  7. package/docs/cursor-testing-lessons.md +1 -1
  8. package/package.json +3 -12
  9. package/src/cursor-fallback-models.generated.ts +536 -302
  10. package/src/cursor-provider-errors.ts +29 -0
  11. package/src/cursor-provider-turn-runner.ts +1 -1
  12. package/src/cursor-provider.ts +9 -2
  13. package/src/cursor-session-turn-queue.ts +52 -0
  14. package/src/cursor-tool-manifest.ts +1 -1
  15. package/node_modules/@connectrpc/connect-node/README.md +0 -141
  16. package/node_modules/@connectrpc/connect-node/dist/cjs/compression.d.ts +0 -15
  17. package/node_modules/@connectrpc/connect-node/dist/cjs/compression.js +0 -89
  18. package/node_modules/@connectrpc/connect-node/dist/cjs/connect-node-adapter.d.ts +0 -42
  19. package/node_modules/@connectrpc/connect-node/dist/cjs/connect-node-adapter.js +0 -61
  20. package/node_modules/@connectrpc/connect-node/dist/cjs/connect-transport.d.ts +0 -100
  21. package/node_modules/@connectrpc/connect-node/dist/cjs/connect-transport.js +0 -25
  22. package/node_modules/@connectrpc/connect-node/dist/cjs/grpc-transport.d.ts +0 -96
  23. package/node_modules/@connectrpc/connect-node/dist/cjs/grpc-transport.js +0 -25
  24. package/node_modules/@connectrpc/connect-node/dist/cjs/grpc-web-transport.d.ts +0 -96
  25. package/node_modules/@connectrpc/connect-node/dist/cjs/grpc-web-transport.js +0 -25
  26. package/node_modules/@connectrpc/connect-node/dist/cjs/http2-session-manager.d.ts +0 -146
  27. package/node_modules/@connectrpc/connect-node/dist/cjs/http2-session-manager.js +0 -536
  28. package/node_modules/@connectrpc/connect-node/dist/cjs/index.d.ts +0 -15
  29. package/node_modules/@connectrpc/connect-node/dist/cjs/index.js +0 -36
  30. package/node_modules/@connectrpc/connect-node/dist/cjs/node-error.d.ts +0 -45
  31. package/node_modules/@connectrpc/connect-node/dist/cjs/node-error.js +0 -154
  32. package/node_modules/@connectrpc/connect-node/dist/cjs/node-headers-polyfill.d.ts +0 -1
  33. package/node_modules/@connectrpc/connect-node/dist/cjs/node-headers-polyfill.js +0 -29
  34. package/node_modules/@connectrpc/connect-node/dist/cjs/node-transport-options.d.ts +0 -89
  35. package/node_modules/@connectrpc/connect-node/dist/cjs/node-transport-options.js +0 -58
  36. package/node_modules/@connectrpc/connect-node/dist/cjs/node-universal-client.d.ts +0 -54
  37. package/node_modules/@connectrpc/connect-node/dist/cjs/node-universal-client.js +0 -326
  38. package/node_modules/@connectrpc/connect-node/dist/cjs/node-universal-handler.d.ts +0 -41
  39. package/node_modules/@connectrpc/connect-node/dist/cjs/node-universal-handler.js +0 -234
  40. package/node_modules/@connectrpc/connect-node/dist/cjs/node-universal-header.d.ts +0 -19
  41. package/node_modules/@connectrpc/connect-node/dist/cjs/node-universal-header.js +0 -97
  42. package/node_modules/@connectrpc/connect-node/dist/cjs/package.json +0 -1
  43. package/node_modules/@connectrpc/connect-node/dist/esm/compression.d.ts +0 -15
  44. package/node_modules/@connectrpc/connect-node/dist/esm/compression.js +0 -86
  45. package/node_modules/@connectrpc/connect-node/dist/esm/connect-node-adapter.d.ts +0 -42
  46. package/node_modules/@connectrpc/connect-node/dist/esm/connect-node-adapter.js +0 -58
  47. package/node_modules/@connectrpc/connect-node/dist/esm/connect-transport.d.ts +0 -100
  48. package/node_modules/@connectrpc/connect-node/dist/esm/connect-transport.js +0 -22
  49. package/node_modules/@connectrpc/connect-node/dist/esm/grpc-transport.d.ts +0 -96
  50. package/node_modules/@connectrpc/connect-node/dist/esm/grpc-transport.js +0 -22
  51. package/node_modules/@connectrpc/connect-node/dist/esm/grpc-web-transport.d.ts +0 -96
  52. package/node_modules/@connectrpc/connect-node/dist/esm/grpc-web-transport.js +0 -22
  53. package/node_modules/@connectrpc/connect-node/dist/esm/http2-session-manager.d.ts +0 -146
  54. package/node_modules/@connectrpc/connect-node/dist/esm/http2-session-manager.js +0 -532
  55. package/node_modules/@connectrpc/connect-node/dist/esm/index.d.ts +0 -15
  56. package/node_modules/@connectrpc/connect-node/dist/esm/index.js +0 -23
  57. package/node_modules/@connectrpc/connect-node/dist/esm/node-error.d.ts +0 -45
  58. package/node_modules/@connectrpc/connect-node/dist/esm/node-error.js +0 -147
  59. package/node_modules/@connectrpc/connect-node/dist/esm/node-headers-polyfill.d.ts +0 -1
  60. package/node_modules/@connectrpc/connect-node/dist/esm/node-headers-polyfill.js +0 -27
  61. package/node_modules/@connectrpc/connect-node/dist/esm/node-transport-options.d.ts +0 -89
  62. package/node_modules/@connectrpc/connect-node/dist/esm/node-transport-options.js +0 -58
  63. package/node_modules/@connectrpc/connect-node/dist/esm/node-universal-client.d.ts +0 -54
  64. package/node_modules/@connectrpc/connect-node/dist/esm/node-universal-client.js +0 -324
  65. package/node_modules/@connectrpc/connect-node/dist/esm/node-universal-handler.d.ts +0 -41
  66. package/node_modules/@connectrpc/connect-node/dist/esm/node-universal-handler.js +0 -230
  67. package/node_modules/@connectrpc/connect-node/dist/esm/node-universal-header.d.ts +0 -19
  68. package/node_modules/@connectrpc/connect-node/dist/esm/node-universal-header.js +0 -93
  69. package/node_modules/@connectrpc/connect-node/package.json +0 -46
  70. package/node_modules/undici/LICENSE +0 -21
  71. package/node_modules/undici/README.md +0 -741
  72. package/node_modules/undici/docs/docs/api/Agent.md +0 -84
  73. package/node_modules/undici/docs/docs/api/BalancedPool.md +0 -99
  74. package/node_modules/undici/docs/docs/api/CacheStorage.md +0 -30
  75. package/node_modules/undici/docs/docs/api/CacheStore.md +0 -164
  76. package/node_modules/undici/docs/docs/api/Client.md +0 -288
  77. package/node_modules/undici/docs/docs/api/ClientStats.md +0 -27
  78. package/node_modules/undici/docs/docs/api/Connector.md +0 -115
  79. package/node_modules/undici/docs/docs/api/ContentType.md +0 -57
  80. package/node_modules/undici/docs/docs/api/Cookies.md +0 -128
  81. package/node_modules/undici/docs/docs/api/Debug.md +0 -62
  82. package/node_modules/undici/docs/docs/api/DiagnosticsChannel.md +0 -315
  83. package/node_modules/undici/docs/docs/api/Dispatcher.md +0 -1392
  84. package/node_modules/undici/docs/docs/api/EnvHttpProxyAgent.md +0 -159
  85. package/node_modules/undici/docs/docs/api/Errors.md +0 -49
  86. package/node_modules/undici/docs/docs/api/EventSource.md +0 -45
  87. package/node_modules/undici/docs/docs/api/Fetch.md +0 -60
  88. package/node_modules/undici/docs/docs/api/GlobalInstallation.md +0 -139
  89. package/node_modules/undici/docs/docs/api/H2CClient.md +0 -263
  90. package/node_modules/undici/docs/docs/api/MockAgent.md +0 -603
  91. package/node_modules/undici/docs/docs/api/MockCallHistory.md +0 -197
  92. package/node_modules/undici/docs/docs/api/MockCallHistoryLog.md +0 -43
  93. package/node_modules/undici/docs/docs/api/MockClient.md +0 -81
  94. package/node_modules/undici/docs/docs/api/MockErrors.md +0 -12
  95. package/node_modules/undici/docs/docs/api/MockPool.md +0 -555
  96. package/node_modules/undici/docs/docs/api/Pool.md +0 -84
  97. package/node_modules/undici/docs/docs/api/PoolStats.md +0 -35
  98. package/node_modules/undici/docs/docs/api/ProxyAgent.md +0 -229
  99. package/node_modules/undici/docs/docs/api/RedirectHandler.md +0 -93
  100. package/node_modules/undici/docs/docs/api/RetryAgent.md +0 -50
  101. package/node_modules/undici/docs/docs/api/RetryHandler.md +0 -118
  102. package/node_modules/undici/docs/docs/api/RoundRobinPool.md +0 -145
  103. package/node_modules/undici/docs/docs/api/SnapshotAgent.md +0 -616
  104. package/node_modules/undici/docs/docs/api/Socks5ProxyAgent.md +0 -275
  105. package/node_modules/undici/docs/docs/api/Util.md +0 -25
  106. package/node_modules/undici/docs/docs/api/WebSocket.md +0 -141
  107. package/node_modules/undici/docs/docs/api/api-lifecycle.md +0 -91
  108. package/node_modules/undici/docs/docs/best-practices/client-certificate.md +0 -64
  109. package/node_modules/undici/docs/docs/best-practices/crawling.md +0 -58
  110. package/node_modules/undici/docs/docs/best-practices/mocking-request.md +0 -190
  111. package/node_modules/undici/docs/docs/best-practices/proxy.md +0 -127
  112. package/node_modules/undici/docs/docs/best-practices/undici-vs-builtin-fetch.md +0 -224
  113. package/node_modules/undici/docs/docs/best-practices/writing-tests.md +0 -63
  114. package/node_modules/undici/index-fetch.js +0 -65
  115. package/node_modules/undici/index.d.ts +0 -3
  116. package/node_modules/undici/index.js +0 -234
  117. package/node_modules/undici/lib/api/abort-signal.js +0 -59
  118. package/node_modules/undici/lib/api/api-connect.js +0 -110
  119. package/node_modules/undici/lib/api/api-pipeline.js +0 -252
  120. package/node_modules/undici/lib/api/api-request.js +0 -214
  121. package/node_modules/undici/lib/api/api-stream.js +0 -209
  122. package/node_modules/undici/lib/api/api-upgrade.js +0 -111
  123. package/node_modules/undici/lib/api/index.js +0 -7
  124. package/node_modules/undici/lib/api/readable.js +0 -580
  125. package/node_modules/undici/lib/cache/memory-cache-store.js +0 -234
  126. package/node_modules/undici/lib/cache/sqlite-cache-store.js +0 -461
  127. package/node_modules/undici/lib/core/connect.js +0 -153
  128. package/node_modules/undici/lib/core/constants.js +0 -143
  129. package/node_modules/undici/lib/core/diagnostics.js +0 -227
  130. package/node_modules/undici/lib/core/errors.js +0 -477
  131. package/node_modules/undici/lib/core/request.js +0 -453
  132. package/node_modules/undici/lib/core/socks5-client.js +0 -422
  133. package/node_modules/undici/lib/core/socks5-utils.js +0 -212
  134. package/node_modules/undici/lib/core/symbols.js +0 -75
  135. package/node_modules/undici/lib/core/tree.js +0 -160
  136. package/node_modules/undici/lib/core/util.js +0 -992
  137. package/node_modules/undici/lib/dispatcher/agent.js +0 -158
  138. package/node_modules/undici/lib/dispatcher/balanced-pool.js +0 -219
  139. package/node_modules/undici/lib/dispatcher/client-h1.js +0 -1722
  140. package/node_modules/undici/lib/dispatcher/client-h2.js +0 -995
  141. package/node_modules/undici/lib/dispatcher/client.js +0 -664
  142. package/node_modules/undici/lib/dispatcher/dispatcher-base.js +0 -184
  143. package/node_modules/undici/lib/dispatcher/dispatcher.js +0 -48
  144. package/node_modules/undici/lib/dispatcher/env-http-proxy-agent.js +0 -146
  145. package/node_modules/undici/lib/dispatcher/fixed-queue.js +0 -135
  146. package/node_modules/undici/lib/dispatcher/h2c-client.js +0 -51
  147. package/node_modules/undici/lib/dispatcher/pool-base.js +0 -214
  148. package/node_modules/undici/lib/dispatcher/pool.js +0 -118
  149. package/node_modules/undici/lib/dispatcher/proxy-agent.js +0 -319
  150. package/node_modules/undici/lib/dispatcher/retry-agent.js +0 -35
  151. package/node_modules/undici/lib/dispatcher/round-robin-pool.js +0 -137
  152. package/node_modules/undici/lib/dispatcher/socks5-proxy-agent.js +0 -260
  153. package/node_modules/undici/lib/encoding/index.js +0 -33
  154. package/node_modules/undici/lib/global.js +0 -59
  155. package/node_modules/undici/lib/handler/cache-handler.js +0 -578
  156. package/node_modules/undici/lib/handler/cache-revalidation-handler.js +0 -124
  157. package/node_modules/undici/lib/handler/decorator-handler.js +0 -67
  158. package/node_modules/undici/lib/handler/deduplication-handler.js +0 -460
  159. package/node_modules/undici/lib/handler/redirect-handler.js +0 -238
  160. package/node_modules/undici/lib/handler/retry-handler.js +0 -394
  161. package/node_modules/undici/lib/handler/unwrap-handler.js +0 -106
  162. package/node_modules/undici/lib/handler/wrap-handler.js +0 -105
  163. package/node_modules/undici/lib/interceptor/cache.js +0 -495
  164. package/node_modules/undici/lib/interceptor/decompress.js +0 -259
  165. package/node_modules/undici/lib/interceptor/deduplicate.js +0 -117
  166. package/node_modules/undici/lib/interceptor/dns.js +0 -571
  167. package/node_modules/undici/lib/interceptor/dump.js +0 -112
  168. package/node_modules/undici/lib/interceptor/redirect.js +0 -21
  169. package/node_modules/undici/lib/interceptor/response-error.js +0 -95
  170. package/node_modules/undici/lib/interceptor/retry.js +0 -19
  171. package/node_modules/undici/lib/llhttp/.gitkeep +0 -0
  172. package/node_modules/undici/lib/llhttp/constants.d.ts +0 -195
  173. package/node_modules/undici/lib/llhttp/constants.js +0 -531
  174. package/node_modules/undici/lib/llhttp/llhttp-wasm.js +0 -15
  175. package/node_modules/undici/lib/llhttp/llhttp_simd-wasm.js +0 -15
  176. package/node_modules/undici/lib/llhttp/utils.d.ts +0 -2
  177. package/node_modules/undici/lib/llhttp/utils.js +0 -12
  178. package/node_modules/undici/lib/mock/mock-agent.js +0 -232
  179. package/node_modules/undici/lib/mock/mock-call-history.js +0 -248
  180. package/node_modules/undici/lib/mock/mock-client.js +0 -68
  181. package/node_modules/undici/lib/mock/mock-errors.js +0 -29
  182. package/node_modules/undici/lib/mock/mock-interceptor.js +0 -209
  183. package/node_modules/undici/lib/mock/mock-pool.js +0 -68
  184. package/node_modules/undici/lib/mock/mock-symbols.js +0 -32
  185. package/node_modules/undici/lib/mock/mock-utils.js +0 -486
  186. package/node_modules/undici/lib/mock/pending-interceptors-formatter.js +0 -43
  187. package/node_modules/undici/lib/mock/snapshot-agent.js +0 -353
  188. package/node_modules/undici/lib/mock/snapshot-recorder.js +0 -588
  189. package/node_modules/undici/lib/mock/snapshot-utils.js +0 -158
  190. package/node_modules/undici/lib/util/cache.js +0 -414
  191. package/node_modules/undici/lib/util/date.js +0 -653
  192. package/node_modules/undici/lib/util/promise.js +0 -28
  193. package/node_modules/undici/lib/util/runtime-features.js +0 -124
  194. package/node_modules/undici/lib/util/stats.js +0 -32
  195. package/node_modules/undici/lib/util/timers.js +0 -425
  196. package/node_modules/undici/lib/web/cache/cache.js +0 -864
  197. package/node_modules/undici/lib/web/cache/cachestorage.js +0 -152
  198. package/node_modules/undici/lib/web/cache/util.js +0 -45
  199. package/node_modules/undici/lib/web/cookies/constants.js +0 -12
  200. package/node_modules/undici/lib/web/cookies/index.js +0 -199
  201. package/node_modules/undici/lib/web/cookies/parse.js +0 -314
  202. package/node_modules/undici/lib/web/cookies/util.js +0 -282
  203. package/node_modules/undici/lib/web/eventsource/eventsource-stream.js +0 -399
  204. package/node_modules/undici/lib/web/eventsource/eventsource.js +0 -501
  205. package/node_modules/undici/lib/web/eventsource/util.js +0 -29
  206. package/node_modules/undici/lib/web/fetch/LICENSE +0 -21
  207. package/node_modules/undici/lib/web/fetch/body.js +0 -509
  208. package/node_modules/undici/lib/web/fetch/constants.js +0 -131
  209. package/node_modules/undici/lib/web/fetch/data-url.js +0 -596
  210. package/node_modules/undici/lib/web/fetch/formdata-parser.js +0 -586
  211. package/node_modules/undici/lib/web/fetch/formdata.js +0 -259
  212. package/node_modules/undici/lib/web/fetch/global.js +0 -40
  213. package/node_modules/undici/lib/web/fetch/headers.js +0 -719
  214. package/node_modules/undici/lib/web/fetch/index.js +0 -2413
  215. package/node_modules/undici/lib/web/fetch/request.js +0 -1115
  216. package/node_modules/undici/lib/web/fetch/response.js +0 -641
  217. package/node_modules/undici/lib/web/fetch/util.js +0 -1522
  218. package/node_modules/undici/lib/web/infra/index.js +0 -229
  219. package/node_modules/undici/lib/web/subresource-integrity/Readme.md +0 -9
  220. package/node_modules/undici/lib/web/subresource-integrity/subresource-integrity.js +0 -307
  221. package/node_modules/undici/lib/web/webidl/index.js +0 -1006
  222. package/node_modules/undici/lib/web/websocket/connection.js +0 -329
  223. package/node_modules/undici/lib/web/websocket/constants.js +0 -126
  224. package/node_modules/undici/lib/web/websocket/events.js +0 -331
  225. package/node_modules/undici/lib/web/websocket/frame.js +0 -133
  226. package/node_modules/undici/lib/web/websocket/permessage-deflate.js +0 -100
  227. package/node_modules/undici/lib/web/websocket/receiver.js +0 -507
  228. package/node_modules/undici/lib/web/websocket/sender.js +0 -109
  229. package/node_modules/undici/lib/web/websocket/stream/websocketerror.js +0 -104
  230. package/node_modules/undici/lib/web/websocket/stream/websocketstream.js +0 -498
  231. package/node_modules/undici/lib/web/websocket/util.js +0 -347
  232. package/node_modules/undici/lib/web/websocket/websocket.js +0 -758
  233. package/node_modules/undici/package.json +0 -152
  234. package/node_modules/undici/scripts/strip-comments.js +0 -10
  235. package/node_modules/undici/types/README.md +0 -6
  236. package/node_modules/undici/types/agent.d.ts +0 -32
  237. package/node_modules/undici/types/api.d.ts +0 -43
  238. package/node_modules/undici/types/balanced-pool.d.ts +0 -30
  239. package/node_modules/undici/types/cache-interceptor.d.ts +0 -179
  240. package/node_modules/undici/types/cache.d.ts +0 -36
  241. package/node_modules/undici/types/client-stats.d.ts +0 -15
  242. package/node_modules/undici/types/client.d.ts +0 -139
  243. package/node_modules/undici/types/connector.d.ts +0 -36
  244. package/node_modules/undici/types/content-type.d.ts +0 -21
  245. package/node_modules/undici/types/cookies.d.ts +0 -30
  246. package/node_modules/undici/types/diagnostics-channel.d.ts +0 -74
  247. package/node_modules/undici/types/dispatcher.d.ts +0 -275
  248. package/node_modules/undici/types/env-http-proxy-agent.d.ts +0 -22
  249. package/node_modules/undici/types/errors.d.ts +0 -177
  250. package/node_modules/undici/types/eventsource.d.ts +0 -66
  251. package/node_modules/undici/types/fetch.d.ts +0 -231
  252. package/node_modules/undici/types/formdata.d.ts +0 -114
  253. package/node_modules/undici/types/global-dispatcher.d.ts +0 -9
  254. package/node_modules/undici/types/global-origin.d.ts +0 -7
  255. package/node_modules/undici/types/h2c-client.d.ts +0 -73
  256. package/node_modules/undici/types/handlers.d.ts +0 -14
  257. package/node_modules/undici/types/header.d.ts +0 -160
  258. package/node_modules/undici/types/index.d.ts +0 -91
  259. package/node_modules/undici/types/interceptors.d.ts +0 -80
  260. package/node_modules/undici/types/mock-agent.d.ts +0 -68
  261. package/node_modules/undici/types/mock-call-history.d.ts +0 -111
  262. package/node_modules/undici/types/mock-client.d.ts +0 -27
  263. package/node_modules/undici/types/mock-errors.d.ts +0 -12
  264. package/node_modules/undici/types/mock-interceptor.d.ts +0 -94
  265. package/node_modules/undici/types/mock-pool.d.ts +0 -27
  266. package/node_modules/undici/types/patch.d.ts +0 -29
  267. package/node_modules/undici/types/pool-stats.d.ts +0 -19
  268. package/node_modules/undici/types/pool.d.ts +0 -41
  269. package/node_modules/undici/types/proxy-agent.d.ts +0 -29
  270. package/node_modules/undici/types/readable.d.ts +0 -68
  271. package/node_modules/undici/types/retry-agent.d.ts +0 -8
  272. package/node_modules/undici/types/retry-handler.d.ts +0 -125
  273. package/node_modules/undici/types/round-robin-pool.d.ts +0 -41
  274. package/node_modules/undici/types/snapshot-agent.d.ts +0 -109
  275. package/node_modules/undici/types/socks5-proxy-agent.d.ts +0 -25
  276. package/node_modules/undici/types/util.d.ts +0 -18
  277. package/node_modules/undici/types/utility.d.ts +0 -7
  278. package/node_modules/undici/types/webidl.d.ts +0 -347
  279. package/node_modules/undici/types/websocket.d.ts +0 -188
@@ -1,501 +0,0 @@
1
- 'use strict'
2
-
3
- const { pipeline } = require('node:stream')
4
- const { fetching } = require('../fetch')
5
- const { makeRequest } = require('../fetch/request')
6
- const { webidl } = require('../webidl')
7
- const { EventSourceStream } = require('./eventsource-stream')
8
- const { parseMIMEType } = require('../fetch/data-url')
9
- const { createFastMessageEvent } = require('../websocket/events')
10
- const { isNetworkError } = require('../fetch/response')
11
- const { kEnumerableProperty } = require('../../core/util')
12
- const { environmentSettingsObject } = require('../fetch/util')
13
-
14
- let experimentalWarned = false
15
-
16
- /**
17
- * A reconnection time, in milliseconds. This must initially be an implementation-defined value,
18
- * probably in the region of a few seconds.
19
- *
20
- * In Comparison:
21
- * - Chrome uses 3000ms.
22
- * - Deno uses 5000ms.
23
- *
24
- * @type {3000}
25
- */
26
- const defaultReconnectionTime = 3000
27
-
28
- /**
29
- * The readyState attribute represents the state of the connection.
30
- * @typedef ReadyState
31
- * @type {0|1|2}
32
- * @readonly
33
- * @see https://html.spec.whatwg.org/multipage/server-sent-events.html#dom-eventsource-readystate-dev
34
- */
35
-
36
- /**
37
- * The connection has not yet been established, or it was closed and the user
38
- * agent is reconnecting.
39
- * @type {0}
40
- */
41
- const CONNECTING = 0
42
-
43
- /**
44
- * The user agent has an open connection and is dispatching events as it
45
- * receives them.
46
- * @type {1}
47
- */
48
- const OPEN = 1
49
-
50
- /**
51
- * The connection is not open, and the user agent is not trying to reconnect.
52
- * @type {2}
53
- */
54
- const CLOSED = 2
55
-
56
- /**
57
- * Requests for the element will have their mode set to "cors" and their credentials mode set to "same-origin".
58
- * @type {'anonymous'}
59
- */
60
- const ANONYMOUS = 'anonymous'
61
-
62
- /**
63
- * Requests for the element will have their mode set to "cors" and their credentials mode set to "include".
64
- * @type {'use-credentials'}
65
- */
66
- const USE_CREDENTIALS = 'use-credentials'
67
-
68
- /**
69
- * The EventSource interface is used to receive server-sent events. It
70
- * connects to a server over HTTP and receives events in text/event-stream
71
- * format without closing the connection.
72
- * @extends {EventTarget}
73
- * @see https://html.spec.whatwg.org/multipage/server-sent-events.html#server-sent-events
74
- * @api public
75
- */
76
- class EventSource extends EventTarget {
77
- #events = {
78
- open: null,
79
- error: null,
80
- message: null
81
- }
82
-
83
- #url
84
- #withCredentials = false
85
-
86
- /**
87
- * @type {ReadyState}
88
- */
89
- #readyState = CONNECTING
90
-
91
- #request = null
92
- #controller = null
93
-
94
- #dispatcher
95
-
96
- /**
97
- * @type {import('./eventsource-stream').eventSourceSettings}
98
- */
99
- #state
100
-
101
- /**
102
- * Creates a new EventSource object.
103
- * @param {string} url
104
- * @param {EventSourceInit} [eventSourceInitDict={}]
105
- * @see https://html.spec.whatwg.org/multipage/server-sent-events.html#the-eventsource-interface
106
- */
107
- constructor (url, eventSourceInitDict = {}) {
108
- // 1. Let ev be a new EventSource object.
109
- super()
110
-
111
- webidl.util.markAsUncloneable(this)
112
-
113
- const prefix = 'EventSource constructor'
114
- webidl.argumentLengthCheck(arguments, 1, prefix)
115
-
116
- if (!experimentalWarned) {
117
- experimentalWarned = true
118
- process.emitWarning('EventSource is experimental, expect them to change at any time.', {
119
- code: 'UNDICI-ES'
120
- })
121
- }
122
-
123
- url = webidl.converters.USVString(url)
124
- eventSourceInitDict = webidl.converters.EventSourceInitDict(eventSourceInitDict, prefix, 'eventSourceInitDict')
125
-
126
- this.#dispatcher = eventSourceInitDict.node.dispatcher || eventSourceInitDict.dispatcher
127
- this.#state = {
128
- lastEventId: '',
129
- reconnectionTime: eventSourceInitDict.node.reconnectionTime
130
- }
131
-
132
- // 2. Let settings be ev's relevant settings object.
133
- // https://html.spec.whatwg.org/multipage/webappapis.html#environment-settings-object
134
- const settings = environmentSettingsObject
135
-
136
- let urlRecord
137
-
138
- try {
139
- // 3. Let urlRecord be the result of encoding-parsing a URL given url, relative to settings.
140
- urlRecord = new URL(url, settings.settingsObject.baseUrl)
141
- this.#state.origin = urlRecord.origin
142
- } catch (e) {
143
- // 4. If urlRecord is failure, then throw a "SyntaxError" DOMException.
144
- throw new DOMException(e, 'SyntaxError')
145
- }
146
-
147
- // 5. Set ev's url to urlRecord.
148
- this.#url = urlRecord.href
149
-
150
- // 6. Let corsAttributeState be Anonymous.
151
- let corsAttributeState = ANONYMOUS
152
-
153
- // 7. If the value of eventSourceInitDict's withCredentials member is true,
154
- // then set corsAttributeState to Use Credentials and set ev's
155
- // withCredentials attribute to true.
156
- if (eventSourceInitDict.withCredentials === true) {
157
- corsAttributeState = USE_CREDENTIALS
158
- this.#withCredentials = true
159
- }
160
-
161
- // 8. Let request be the result of creating a potential-CORS request given
162
- // urlRecord, the empty string, and corsAttributeState.
163
- const initRequest = {
164
- redirect: 'follow',
165
- keepalive: true,
166
- // @see https://html.spec.whatwg.org/multipage/urls-and-fetching.html#cors-settings-attributes
167
- mode: 'cors',
168
- credentials: corsAttributeState === 'anonymous'
169
- ? 'same-origin'
170
- : 'omit',
171
- referrer: 'no-referrer'
172
- }
173
-
174
- // 9. Set request's client to settings.
175
- initRequest.client = environmentSettingsObject.settingsObject
176
-
177
- // 10. User agents may set (`Accept`, `text/event-stream`) in request's header list.
178
- initRequest.headersList = [['accept', { name: 'accept', value: 'text/event-stream' }]]
179
-
180
- // 11. Set request's cache mode to "no-store".
181
- initRequest.cache = 'no-store'
182
-
183
- // 12. Set request's initiator type to "other".
184
- initRequest.initiator = 'other'
185
-
186
- initRequest.urlList = [new URL(this.#url)]
187
-
188
- // 13. Set ev's request to request.
189
- this.#request = makeRequest(initRequest)
190
-
191
- this.#connect()
192
- }
193
-
194
- /**
195
- * Returns the state of this EventSource object's connection. It can have the
196
- * values described below.
197
- * @returns {ReadyState}
198
- * @readonly
199
- */
200
- get readyState () {
201
- return this.#readyState
202
- }
203
-
204
- /**
205
- * Returns the URL providing the event stream.
206
- * @readonly
207
- * @returns {string}
208
- */
209
- get url () {
210
- return this.#url
211
- }
212
-
213
- /**
214
- * Returns a boolean indicating whether the EventSource object was
215
- * instantiated with CORS credentials set (true), or not (false, the default).
216
- */
217
- get withCredentials () {
218
- return this.#withCredentials
219
- }
220
-
221
- #connect () {
222
- if (this.#readyState === CLOSED) return
223
-
224
- this.#readyState = CONNECTING
225
-
226
- const fetchParams = {
227
- request: this.#request,
228
- dispatcher: this.#dispatcher
229
- }
230
-
231
- // 14. Let processEventSourceEndOfBody given response res be the following step: if res is not a network error, then reestablish the connection.
232
- const processEventSourceEndOfBody = (response) => {
233
- if (!isNetworkError(response)) {
234
- return this.#reconnect()
235
- }
236
- }
237
-
238
- // 15. Fetch request, with processResponseEndOfBody set to processEventSourceEndOfBody...
239
- fetchParams.processResponseEndOfBody = processEventSourceEndOfBody
240
-
241
- // and processResponse set to the following steps given response res:
242
- fetchParams.processResponse = (response) => {
243
- // 1. If res is an aborted network error, then fail the connection.
244
-
245
- if (isNetworkError(response)) {
246
- // 1. When a user agent is to fail the connection, the user agent
247
- // must queue a task which, if the readyState attribute is set to a
248
- // value other than CLOSED, sets the readyState attribute to CLOSED
249
- // and fires an event named error at the EventSource object. Once the
250
- // user agent has failed the connection, it does not attempt to
251
- // reconnect.
252
- if (response.aborted) {
253
- this.close()
254
- this.dispatchEvent(new Event('error'))
255
- return
256
- // 2. Otherwise, if res is a network error, then reestablish the
257
- // connection, unless the user agent knows that to be futile, in
258
- // which case the user agent may fail the connection.
259
- } else {
260
- this.#reconnect()
261
- return
262
- }
263
- }
264
-
265
- // 3. Otherwise, if res's status is not 200, or if res's `Content-Type`
266
- // is not `text/event-stream`, then fail the connection.
267
- const contentType = response.headersList.get('content-type', true)
268
- const mimeType = contentType !== null ? parseMIMEType(contentType) : 'failure'
269
- const contentTypeValid = mimeType !== 'failure' && mimeType.essence === 'text/event-stream'
270
- if (
271
- response.status !== 200 ||
272
- contentTypeValid === false
273
- ) {
274
- this.close()
275
- this.dispatchEvent(new Event('error'))
276
- return
277
- }
278
-
279
- // 4. Otherwise, announce the connection and interpret res's body
280
- // line by line.
281
-
282
- // When a user agent is to announce the connection, the user agent
283
- // must queue a task which, if the readyState attribute is set to a
284
- // value other than CLOSED, sets the readyState attribute to OPEN
285
- // and fires an event named open at the EventSource object.
286
- // @see https://html.spec.whatwg.org/multipage/server-sent-events.html#sse-processing-model
287
- this.#readyState = OPEN
288
- this.dispatchEvent(new Event('open'))
289
-
290
- // If redirected to a different origin, set the origin to the new origin.
291
- this.#state.origin = response.urlList[response.urlList.length - 1].origin
292
-
293
- const eventSourceStream = new EventSourceStream({
294
- eventSourceSettings: this.#state,
295
- push: (event) => {
296
- this.dispatchEvent(createFastMessageEvent(
297
- event.type,
298
- event.options
299
- ))
300
- }
301
- })
302
-
303
- pipeline(response.body.stream,
304
- eventSourceStream,
305
- (error) => {
306
- if (
307
- error?.aborted === false
308
- ) {
309
- this.close()
310
- this.dispatchEvent(new Event('error'))
311
- }
312
- })
313
- }
314
-
315
- this.#controller = fetching(fetchParams)
316
- }
317
-
318
- /**
319
- * @see https://html.spec.whatwg.org/multipage/server-sent-events.html#sse-processing-model
320
- * @returns {void}
321
- */
322
- #reconnect () {
323
- // When a user agent is to reestablish the connection, the user agent must
324
- // run the following steps. These steps are run in parallel, not as part of
325
- // a task. (The tasks that it queues, of course, are run like normal tasks
326
- // and not themselves in parallel.)
327
-
328
- // 1. Queue a task to run the following steps:
329
-
330
- // 1. If the readyState attribute is set to CLOSED, abort the task.
331
- if (this.#readyState === CLOSED) return
332
-
333
- // 2. Set the readyState attribute to CONNECTING.
334
- this.#readyState = CONNECTING
335
-
336
- // 3. Fire an event named error at the EventSource object.
337
- this.dispatchEvent(new Event('error'))
338
-
339
- // 2. Wait a delay equal to the reconnection time of the event source.
340
- setTimeout(() => {
341
- // 5. Queue a task to run the following steps:
342
-
343
- // 1. If the EventSource object's readyState attribute is not set to
344
- // CONNECTING, then return.
345
- if (this.#readyState !== CONNECTING) return
346
-
347
- // 2. Let request be the EventSource object's request.
348
- // 3. If the EventSource object's last event ID string is not the empty
349
- // string, then:
350
- // 1. Let lastEventIDValue be the EventSource object's last event ID
351
- // string, encoded as UTF-8.
352
- // 2. Set (`Last-Event-ID`, lastEventIDValue) in request's header
353
- // list.
354
- if (this.#state.lastEventId.length) {
355
- this.#request.headersList.set('last-event-id', this.#state.lastEventId, true)
356
- }
357
-
358
- // 4. Fetch request and process the response obtained in this fashion, if any, as described earlier in this section.
359
- this.#connect()
360
- }, this.#state.reconnectionTime)?.unref()
361
- }
362
-
363
- /**
364
- * Closes the connection, if any, and sets the readyState attribute to
365
- * CLOSED.
366
- */
367
- close () {
368
- webidl.brandCheck(this, EventSource)
369
-
370
- if (this.#readyState === CLOSED) return
371
- this.#readyState = CLOSED
372
- this.#controller.abort()
373
- this.#request = null
374
- }
375
-
376
- get onopen () {
377
- return this.#events.open
378
- }
379
-
380
- set onopen (fn) {
381
- if (this.#events.open) {
382
- this.removeEventListener('open', this.#events.open)
383
- }
384
-
385
- const listener = webidl.converters.EventHandlerNonNull(fn)
386
-
387
- if (listener !== null) {
388
- this.addEventListener('open', listener)
389
- this.#events.open = fn
390
- } else {
391
- this.#events.open = null
392
- }
393
- }
394
-
395
- get onmessage () {
396
- return this.#events.message
397
- }
398
-
399
- set onmessage (fn) {
400
- if (this.#events.message) {
401
- this.removeEventListener('message', this.#events.message)
402
- }
403
-
404
- const listener = webidl.converters.EventHandlerNonNull(fn)
405
-
406
- if (listener !== null) {
407
- this.addEventListener('message', listener)
408
- this.#events.message = fn
409
- } else {
410
- this.#events.message = null
411
- }
412
- }
413
-
414
- get onerror () {
415
- return this.#events.error
416
- }
417
-
418
- set onerror (fn) {
419
- if (this.#events.error) {
420
- this.removeEventListener('error', this.#events.error)
421
- }
422
-
423
- const listener = webidl.converters.EventHandlerNonNull(fn)
424
-
425
- if (listener !== null) {
426
- this.addEventListener('error', listener)
427
- this.#events.error = fn
428
- } else {
429
- this.#events.error = null
430
- }
431
- }
432
- }
433
-
434
- const constantsPropertyDescriptors = {
435
- CONNECTING: {
436
- __proto__: null,
437
- configurable: false,
438
- enumerable: true,
439
- value: CONNECTING,
440
- writable: false
441
- },
442
- OPEN: {
443
- __proto__: null,
444
- configurable: false,
445
- enumerable: true,
446
- value: OPEN,
447
- writable: false
448
- },
449
- CLOSED: {
450
- __proto__: null,
451
- configurable: false,
452
- enumerable: true,
453
- value: CLOSED,
454
- writable: false
455
- }
456
- }
457
-
458
- Object.defineProperties(EventSource, constantsPropertyDescriptors)
459
- Object.defineProperties(EventSource.prototype, constantsPropertyDescriptors)
460
-
461
- Object.defineProperties(EventSource.prototype, {
462
- close: kEnumerableProperty,
463
- onerror: kEnumerableProperty,
464
- onmessage: kEnumerableProperty,
465
- onopen: kEnumerableProperty,
466
- readyState: kEnumerableProperty,
467
- url: kEnumerableProperty,
468
- withCredentials: kEnumerableProperty
469
- })
470
-
471
- webidl.converters.EventSourceInitDict = webidl.dictionaryConverter([
472
- {
473
- key: 'withCredentials',
474
- converter: webidl.converters.boolean,
475
- defaultValue: () => false
476
- },
477
- {
478
- key: 'dispatcher', // undici only
479
- converter: webidl.converters.any
480
- },
481
- {
482
- key: 'node', // undici only
483
- converter: webidl.dictionaryConverter([
484
- {
485
- key: 'reconnectionTime',
486
- converter: webidl.converters['unsigned long'],
487
- defaultValue: () => defaultReconnectionTime
488
- },
489
- {
490
- key: 'dispatcher',
491
- converter: webidl.converters.any
492
- }
493
- ]),
494
- defaultValue: () => ({})
495
- }
496
- ])
497
-
498
- module.exports = {
499
- EventSource,
500
- defaultReconnectionTime
501
- }
@@ -1,29 +0,0 @@
1
- 'use strict'
2
-
3
- /**
4
- * Checks if the given value is a valid LastEventId.
5
- * @param {string} value
6
- * @returns {boolean}
7
- */
8
- function isValidLastEventId (value) {
9
- // LastEventId should not contain U+0000 NULL
10
- return value.indexOf('\u0000') === -1
11
- }
12
-
13
- /**
14
- * Checks if the given value is a base 10 digit.
15
- * @param {string} value
16
- * @returns {boolean}
17
- */
18
- function isASCIINumber (value) {
19
- if (value.length === 0) return false
20
- for (let i = 0; i < value.length; i++) {
21
- if (value.charCodeAt(i) < 0x30 || value.charCodeAt(i) > 0x39) return false
22
- }
23
- return true
24
- }
25
-
26
- module.exports = {
27
- isValidLastEventId,
28
- isASCIINumber
29
- }
@@ -1,21 +0,0 @@
1
- MIT License
2
-
3
- Copyright (c) 2020 Ethan Arrowood
4
-
5
- Permission is hereby granted, free of charge, to any person obtaining a copy
6
- of this software and associated documentation files (the "Software"), to deal
7
- in the Software without restriction, including without limitation the rights
8
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
- copies of the Software, and to permit persons to whom the Software is
10
- furnished to do so, subject to the following conditions:
11
-
12
- The above copyright notice and this permission notice shall be included in all
13
- copies or substantial portions of the Software.
14
-
15
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
- SOFTWARE.