pi-cursor-sdk 0.1.50 → 0.1.51

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 (276) hide show
  1. package/CHANGELOG.md +19 -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-tool-manifest.ts +1 -1
  12. package/node_modules/@connectrpc/connect-node/README.md +0 -141
  13. package/node_modules/@connectrpc/connect-node/dist/cjs/compression.d.ts +0 -15
  14. package/node_modules/@connectrpc/connect-node/dist/cjs/compression.js +0 -89
  15. package/node_modules/@connectrpc/connect-node/dist/cjs/connect-node-adapter.d.ts +0 -42
  16. package/node_modules/@connectrpc/connect-node/dist/cjs/connect-node-adapter.js +0 -61
  17. package/node_modules/@connectrpc/connect-node/dist/cjs/connect-transport.d.ts +0 -100
  18. package/node_modules/@connectrpc/connect-node/dist/cjs/connect-transport.js +0 -25
  19. package/node_modules/@connectrpc/connect-node/dist/cjs/grpc-transport.d.ts +0 -96
  20. package/node_modules/@connectrpc/connect-node/dist/cjs/grpc-transport.js +0 -25
  21. package/node_modules/@connectrpc/connect-node/dist/cjs/grpc-web-transport.d.ts +0 -96
  22. package/node_modules/@connectrpc/connect-node/dist/cjs/grpc-web-transport.js +0 -25
  23. package/node_modules/@connectrpc/connect-node/dist/cjs/http2-session-manager.d.ts +0 -146
  24. package/node_modules/@connectrpc/connect-node/dist/cjs/http2-session-manager.js +0 -536
  25. package/node_modules/@connectrpc/connect-node/dist/cjs/index.d.ts +0 -15
  26. package/node_modules/@connectrpc/connect-node/dist/cjs/index.js +0 -36
  27. package/node_modules/@connectrpc/connect-node/dist/cjs/node-error.d.ts +0 -45
  28. package/node_modules/@connectrpc/connect-node/dist/cjs/node-error.js +0 -154
  29. package/node_modules/@connectrpc/connect-node/dist/cjs/node-headers-polyfill.d.ts +0 -1
  30. package/node_modules/@connectrpc/connect-node/dist/cjs/node-headers-polyfill.js +0 -29
  31. package/node_modules/@connectrpc/connect-node/dist/cjs/node-transport-options.d.ts +0 -89
  32. package/node_modules/@connectrpc/connect-node/dist/cjs/node-transport-options.js +0 -58
  33. package/node_modules/@connectrpc/connect-node/dist/cjs/node-universal-client.d.ts +0 -54
  34. package/node_modules/@connectrpc/connect-node/dist/cjs/node-universal-client.js +0 -326
  35. package/node_modules/@connectrpc/connect-node/dist/cjs/node-universal-handler.d.ts +0 -41
  36. package/node_modules/@connectrpc/connect-node/dist/cjs/node-universal-handler.js +0 -234
  37. package/node_modules/@connectrpc/connect-node/dist/cjs/node-universal-header.d.ts +0 -19
  38. package/node_modules/@connectrpc/connect-node/dist/cjs/node-universal-header.js +0 -97
  39. package/node_modules/@connectrpc/connect-node/dist/cjs/package.json +0 -1
  40. package/node_modules/@connectrpc/connect-node/dist/esm/compression.d.ts +0 -15
  41. package/node_modules/@connectrpc/connect-node/dist/esm/compression.js +0 -86
  42. package/node_modules/@connectrpc/connect-node/dist/esm/connect-node-adapter.d.ts +0 -42
  43. package/node_modules/@connectrpc/connect-node/dist/esm/connect-node-adapter.js +0 -58
  44. package/node_modules/@connectrpc/connect-node/dist/esm/connect-transport.d.ts +0 -100
  45. package/node_modules/@connectrpc/connect-node/dist/esm/connect-transport.js +0 -22
  46. package/node_modules/@connectrpc/connect-node/dist/esm/grpc-transport.d.ts +0 -96
  47. package/node_modules/@connectrpc/connect-node/dist/esm/grpc-transport.js +0 -22
  48. package/node_modules/@connectrpc/connect-node/dist/esm/grpc-web-transport.d.ts +0 -96
  49. package/node_modules/@connectrpc/connect-node/dist/esm/grpc-web-transport.js +0 -22
  50. package/node_modules/@connectrpc/connect-node/dist/esm/http2-session-manager.d.ts +0 -146
  51. package/node_modules/@connectrpc/connect-node/dist/esm/http2-session-manager.js +0 -532
  52. package/node_modules/@connectrpc/connect-node/dist/esm/index.d.ts +0 -15
  53. package/node_modules/@connectrpc/connect-node/dist/esm/index.js +0 -23
  54. package/node_modules/@connectrpc/connect-node/dist/esm/node-error.d.ts +0 -45
  55. package/node_modules/@connectrpc/connect-node/dist/esm/node-error.js +0 -147
  56. package/node_modules/@connectrpc/connect-node/dist/esm/node-headers-polyfill.d.ts +0 -1
  57. package/node_modules/@connectrpc/connect-node/dist/esm/node-headers-polyfill.js +0 -27
  58. package/node_modules/@connectrpc/connect-node/dist/esm/node-transport-options.d.ts +0 -89
  59. package/node_modules/@connectrpc/connect-node/dist/esm/node-transport-options.js +0 -58
  60. package/node_modules/@connectrpc/connect-node/dist/esm/node-universal-client.d.ts +0 -54
  61. package/node_modules/@connectrpc/connect-node/dist/esm/node-universal-client.js +0 -324
  62. package/node_modules/@connectrpc/connect-node/dist/esm/node-universal-handler.d.ts +0 -41
  63. package/node_modules/@connectrpc/connect-node/dist/esm/node-universal-handler.js +0 -230
  64. package/node_modules/@connectrpc/connect-node/dist/esm/node-universal-header.d.ts +0 -19
  65. package/node_modules/@connectrpc/connect-node/dist/esm/node-universal-header.js +0 -93
  66. package/node_modules/@connectrpc/connect-node/package.json +0 -46
  67. package/node_modules/undici/LICENSE +0 -21
  68. package/node_modules/undici/README.md +0 -741
  69. package/node_modules/undici/docs/docs/api/Agent.md +0 -84
  70. package/node_modules/undici/docs/docs/api/BalancedPool.md +0 -99
  71. package/node_modules/undici/docs/docs/api/CacheStorage.md +0 -30
  72. package/node_modules/undici/docs/docs/api/CacheStore.md +0 -164
  73. package/node_modules/undici/docs/docs/api/Client.md +0 -288
  74. package/node_modules/undici/docs/docs/api/ClientStats.md +0 -27
  75. package/node_modules/undici/docs/docs/api/Connector.md +0 -115
  76. package/node_modules/undici/docs/docs/api/ContentType.md +0 -57
  77. package/node_modules/undici/docs/docs/api/Cookies.md +0 -128
  78. package/node_modules/undici/docs/docs/api/Debug.md +0 -62
  79. package/node_modules/undici/docs/docs/api/DiagnosticsChannel.md +0 -315
  80. package/node_modules/undici/docs/docs/api/Dispatcher.md +0 -1392
  81. package/node_modules/undici/docs/docs/api/EnvHttpProxyAgent.md +0 -159
  82. package/node_modules/undici/docs/docs/api/Errors.md +0 -49
  83. package/node_modules/undici/docs/docs/api/EventSource.md +0 -45
  84. package/node_modules/undici/docs/docs/api/Fetch.md +0 -60
  85. package/node_modules/undici/docs/docs/api/GlobalInstallation.md +0 -139
  86. package/node_modules/undici/docs/docs/api/H2CClient.md +0 -263
  87. package/node_modules/undici/docs/docs/api/MockAgent.md +0 -603
  88. package/node_modules/undici/docs/docs/api/MockCallHistory.md +0 -197
  89. package/node_modules/undici/docs/docs/api/MockCallHistoryLog.md +0 -43
  90. package/node_modules/undici/docs/docs/api/MockClient.md +0 -81
  91. package/node_modules/undici/docs/docs/api/MockErrors.md +0 -12
  92. package/node_modules/undici/docs/docs/api/MockPool.md +0 -555
  93. package/node_modules/undici/docs/docs/api/Pool.md +0 -84
  94. package/node_modules/undici/docs/docs/api/PoolStats.md +0 -35
  95. package/node_modules/undici/docs/docs/api/ProxyAgent.md +0 -229
  96. package/node_modules/undici/docs/docs/api/RedirectHandler.md +0 -93
  97. package/node_modules/undici/docs/docs/api/RetryAgent.md +0 -50
  98. package/node_modules/undici/docs/docs/api/RetryHandler.md +0 -118
  99. package/node_modules/undici/docs/docs/api/RoundRobinPool.md +0 -145
  100. package/node_modules/undici/docs/docs/api/SnapshotAgent.md +0 -616
  101. package/node_modules/undici/docs/docs/api/Socks5ProxyAgent.md +0 -275
  102. package/node_modules/undici/docs/docs/api/Util.md +0 -25
  103. package/node_modules/undici/docs/docs/api/WebSocket.md +0 -141
  104. package/node_modules/undici/docs/docs/api/api-lifecycle.md +0 -91
  105. package/node_modules/undici/docs/docs/best-practices/client-certificate.md +0 -64
  106. package/node_modules/undici/docs/docs/best-practices/crawling.md +0 -58
  107. package/node_modules/undici/docs/docs/best-practices/mocking-request.md +0 -190
  108. package/node_modules/undici/docs/docs/best-practices/proxy.md +0 -127
  109. package/node_modules/undici/docs/docs/best-practices/undici-vs-builtin-fetch.md +0 -224
  110. package/node_modules/undici/docs/docs/best-practices/writing-tests.md +0 -63
  111. package/node_modules/undici/index-fetch.js +0 -65
  112. package/node_modules/undici/index.d.ts +0 -3
  113. package/node_modules/undici/index.js +0 -234
  114. package/node_modules/undici/lib/api/abort-signal.js +0 -59
  115. package/node_modules/undici/lib/api/api-connect.js +0 -110
  116. package/node_modules/undici/lib/api/api-pipeline.js +0 -252
  117. package/node_modules/undici/lib/api/api-request.js +0 -214
  118. package/node_modules/undici/lib/api/api-stream.js +0 -209
  119. package/node_modules/undici/lib/api/api-upgrade.js +0 -111
  120. package/node_modules/undici/lib/api/index.js +0 -7
  121. package/node_modules/undici/lib/api/readable.js +0 -580
  122. package/node_modules/undici/lib/cache/memory-cache-store.js +0 -234
  123. package/node_modules/undici/lib/cache/sqlite-cache-store.js +0 -461
  124. package/node_modules/undici/lib/core/connect.js +0 -153
  125. package/node_modules/undici/lib/core/constants.js +0 -143
  126. package/node_modules/undici/lib/core/diagnostics.js +0 -227
  127. package/node_modules/undici/lib/core/errors.js +0 -477
  128. package/node_modules/undici/lib/core/request.js +0 -453
  129. package/node_modules/undici/lib/core/socks5-client.js +0 -422
  130. package/node_modules/undici/lib/core/socks5-utils.js +0 -212
  131. package/node_modules/undici/lib/core/symbols.js +0 -75
  132. package/node_modules/undici/lib/core/tree.js +0 -160
  133. package/node_modules/undici/lib/core/util.js +0 -992
  134. package/node_modules/undici/lib/dispatcher/agent.js +0 -158
  135. package/node_modules/undici/lib/dispatcher/balanced-pool.js +0 -219
  136. package/node_modules/undici/lib/dispatcher/client-h1.js +0 -1722
  137. package/node_modules/undici/lib/dispatcher/client-h2.js +0 -995
  138. package/node_modules/undici/lib/dispatcher/client.js +0 -664
  139. package/node_modules/undici/lib/dispatcher/dispatcher-base.js +0 -184
  140. package/node_modules/undici/lib/dispatcher/dispatcher.js +0 -48
  141. package/node_modules/undici/lib/dispatcher/env-http-proxy-agent.js +0 -146
  142. package/node_modules/undici/lib/dispatcher/fixed-queue.js +0 -135
  143. package/node_modules/undici/lib/dispatcher/h2c-client.js +0 -51
  144. package/node_modules/undici/lib/dispatcher/pool-base.js +0 -214
  145. package/node_modules/undici/lib/dispatcher/pool.js +0 -118
  146. package/node_modules/undici/lib/dispatcher/proxy-agent.js +0 -319
  147. package/node_modules/undici/lib/dispatcher/retry-agent.js +0 -35
  148. package/node_modules/undici/lib/dispatcher/round-robin-pool.js +0 -137
  149. package/node_modules/undici/lib/dispatcher/socks5-proxy-agent.js +0 -260
  150. package/node_modules/undici/lib/encoding/index.js +0 -33
  151. package/node_modules/undici/lib/global.js +0 -59
  152. package/node_modules/undici/lib/handler/cache-handler.js +0 -578
  153. package/node_modules/undici/lib/handler/cache-revalidation-handler.js +0 -124
  154. package/node_modules/undici/lib/handler/decorator-handler.js +0 -67
  155. package/node_modules/undici/lib/handler/deduplication-handler.js +0 -460
  156. package/node_modules/undici/lib/handler/redirect-handler.js +0 -238
  157. package/node_modules/undici/lib/handler/retry-handler.js +0 -394
  158. package/node_modules/undici/lib/handler/unwrap-handler.js +0 -106
  159. package/node_modules/undici/lib/handler/wrap-handler.js +0 -105
  160. package/node_modules/undici/lib/interceptor/cache.js +0 -495
  161. package/node_modules/undici/lib/interceptor/decompress.js +0 -259
  162. package/node_modules/undici/lib/interceptor/deduplicate.js +0 -117
  163. package/node_modules/undici/lib/interceptor/dns.js +0 -571
  164. package/node_modules/undici/lib/interceptor/dump.js +0 -112
  165. package/node_modules/undici/lib/interceptor/redirect.js +0 -21
  166. package/node_modules/undici/lib/interceptor/response-error.js +0 -95
  167. package/node_modules/undici/lib/interceptor/retry.js +0 -19
  168. package/node_modules/undici/lib/llhttp/.gitkeep +0 -0
  169. package/node_modules/undici/lib/llhttp/constants.d.ts +0 -195
  170. package/node_modules/undici/lib/llhttp/constants.js +0 -531
  171. package/node_modules/undici/lib/llhttp/llhttp-wasm.js +0 -15
  172. package/node_modules/undici/lib/llhttp/llhttp_simd-wasm.js +0 -15
  173. package/node_modules/undici/lib/llhttp/utils.d.ts +0 -2
  174. package/node_modules/undici/lib/llhttp/utils.js +0 -12
  175. package/node_modules/undici/lib/mock/mock-agent.js +0 -232
  176. package/node_modules/undici/lib/mock/mock-call-history.js +0 -248
  177. package/node_modules/undici/lib/mock/mock-client.js +0 -68
  178. package/node_modules/undici/lib/mock/mock-errors.js +0 -29
  179. package/node_modules/undici/lib/mock/mock-interceptor.js +0 -209
  180. package/node_modules/undici/lib/mock/mock-pool.js +0 -68
  181. package/node_modules/undici/lib/mock/mock-symbols.js +0 -32
  182. package/node_modules/undici/lib/mock/mock-utils.js +0 -486
  183. package/node_modules/undici/lib/mock/pending-interceptors-formatter.js +0 -43
  184. package/node_modules/undici/lib/mock/snapshot-agent.js +0 -353
  185. package/node_modules/undici/lib/mock/snapshot-recorder.js +0 -588
  186. package/node_modules/undici/lib/mock/snapshot-utils.js +0 -158
  187. package/node_modules/undici/lib/util/cache.js +0 -414
  188. package/node_modules/undici/lib/util/date.js +0 -653
  189. package/node_modules/undici/lib/util/promise.js +0 -28
  190. package/node_modules/undici/lib/util/runtime-features.js +0 -124
  191. package/node_modules/undici/lib/util/stats.js +0 -32
  192. package/node_modules/undici/lib/util/timers.js +0 -425
  193. package/node_modules/undici/lib/web/cache/cache.js +0 -864
  194. package/node_modules/undici/lib/web/cache/cachestorage.js +0 -152
  195. package/node_modules/undici/lib/web/cache/util.js +0 -45
  196. package/node_modules/undici/lib/web/cookies/constants.js +0 -12
  197. package/node_modules/undici/lib/web/cookies/index.js +0 -199
  198. package/node_modules/undici/lib/web/cookies/parse.js +0 -314
  199. package/node_modules/undici/lib/web/cookies/util.js +0 -282
  200. package/node_modules/undici/lib/web/eventsource/eventsource-stream.js +0 -399
  201. package/node_modules/undici/lib/web/eventsource/eventsource.js +0 -501
  202. package/node_modules/undici/lib/web/eventsource/util.js +0 -29
  203. package/node_modules/undici/lib/web/fetch/LICENSE +0 -21
  204. package/node_modules/undici/lib/web/fetch/body.js +0 -509
  205. package/node_modules/undici/lib/web/fetch/constants.js +0 -131
  206. package/node_modules/undici/lib/web/fetch/data-url.js +0 -596
  207. package/node_modules/undici/lib/web/fetch/formdata-parser.js +0 -586
  208. package/node_modules/undici/lib/web/fetch/formdata.js +0 -259
  209. package/node_modules/undici/lib/web/fetch/global.js +0 -40
  210. package/node_modules/undici/lib/web/fetch/headers.js +0 -719
  211. package/node_modules/undici/lib/web/fetch/index.js +0 -2413
  212. package/node_modules/undici/lib/web/fetch/request.js +0 -1115
  213. package/node_modules/undici/lib/web/fetch/response.js +0 -641
  214. package/node_modules/undici/lib/web/fetch/util.js +0 -1522
  215. package/node_modules/undici/lib/web/infra/index.js +0 -229
  216. package/node_modules/undici/lib/web/subresource-integrity/Readme.md +0 -9
  217. package/node_modules/undici/lib/web/subresource-integrity/subresource-integrity.js +0 -307
  218. package/node_modules/undici/lib/web/webidl/index.js +0 -1006
  219. package/node_modules/undici/lib/web/websocket/connection.js +0 -329
  220. package/node_modules/undici/lib/web/websocket/constants.js +0 -126
  221. package/node_modules/undici/lib/web/websocket/events.js +0 -331
  222. package/node_modules/undici/lib/web/websocket/frame.js +0 -133
  223. package/node_modules/undici/lib/web/websocket/permessage-deflate.js +0 -100
  224. package/node_modules/undici/lib/web/websocket/receiver.js +0 -507
  225. package/node_modules/undici/lib/web/websocket/sender.js +0 -109
  226. package/node_modules/undici/lib/web/websocket/stream/websocketerror.js +0 -104
  227. package/node_modules/undici/lib/web/websocket/stream/websocketstream.js +0 -498
  228. package/node_modules/undici/lib/web/websocket/util.js +0 -347
  229. package/node_modules/undici/lib/web/websocket/websocket.js +0 -758
  230. package/node_modules/undici/package.json +0 -152
  231. package/node_modules/undici/scripts/strip-comments.js +0 -10
  232. package/node_modules/undici/types/README.md +0 -6
  233. package/node_modules/undici/types/agent.d.ts +0 -32
  234. package/node_modules/undici/types/api.d.ts +0 -43
  235. package/node_modules/undici/types/balanced-pool.d.ts +0 -30
  236. package/node_modules/undici/types/cache-interceptor.d.ts +0 -179
  237. package/node_modules/undici/types/cache.d.ts +0 -36
  238. package/node_modules/undici/types/client-stats.d.ts +0 -15
  239. package/node_modules/undici/types/client.d.ts +0 -139
  240. package/node_modules/undici/types/connector.d.ts +0 -36
  241. package/node_modules/undici/types/content-type.d.ts +0 -21
  242. package/node_modules/undici/types/cookies.d.ts +0 -30
  243. package/node_modules/undici/types/diagnostics-channel.d.ts +0 -74
  244. package/node_modules/undici/types/dispatcher.d.ts +0 -275
  245. package/node_modules/undici/types/env-http-proxy-agent.d.ts +0 -22
  246. package/node_modules/undici/types/errors.d.ts +0 -177
  247. package/node_modules/undici/types/eventsource.d.ts +0 -66
  248. package/node_modules/undici/types/fetch.d.ts +0 -231
  249. package/node_modules/undici/types/formdata.d.ts +0 -114
  250. package/node_modules/undici/types/global-dispatcher.d.ts +0 -9
  251. package/node_modules/undici/types/global-origin.d.ts +0 -7
  252. package/node_modules/undici/types/h2c-client.d.ts +0 -73
  253. package/node_modules/undici/types/handlers.d.ts +0 -14
  254. package/node_modules/undici/types/header.d.ts +0 -160
  255. package/node_modules/undici/types/index.d.ts +0 -91
  256. package/node_modules/undici/types/interceptors.d.ts +0 -80
  257. package/node_modules/undici/types/mock-agent.d.ts +0 -68
  258. package/node_modules/undici/types/mock-call-history.d.ts +0 -111
  259. package/node_modules/undici/types/mock-client.d.ts +0 -27
  260. package/node_modules/undici/types/mock-errors.d.ts +0 -12
  261. package/node_modules/undici/types/mock-interceptor.d.ts +0 -94
  262. package/node_modules/undici/types/mock-pool.d.ts +0 -27
  263. package/node_modules/undici/types/patch.d.ts +0 -29
  264. package/node_modules/undici/types/pool-stats.d.ts +0 -19
  265. package/node_modules/undici/types/pool.d.ts +0 -41
  266. package/node_modules/undici/types/proxy-agent.d.ts +0 -29
  267. package/node_modules/undici/types/readable.d.ts +0 -68
  268. package/node_modules/undici/types/retry-agent.d.ts +0 -8
  269. package/node_modules/undici/types/retry-handler.d.ts +0 -125
  270. package/node_modules/undici/types/round-robin-pool.d.ts +0 -41
  271. package/node_modules/undici/types/snapshot-agent.d.ts +0 -109
  272. package/node_modules/undici/types/socks5-proxy-agent.d.ts +0 -25
  273. package/node_modules/undici/types/util.d.ts +0 -18
  274. package/node_modules/undici/types/utility.d.ts +0 -7
  275. package/node_modules/undici/types/webidl.d.ts +0 -347
  276. 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.