@upbit-official/upbit-sdk 0.9.0 → 1.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 (406) hide show
  1. package/CHANGELOG.md +13 -0
  2. package/README.md +36 -16
  3. package/client.d.mts +13 -4
  4. package/client.d.mts.map +1 -1
  5. package/client.d.ts +13 -4
  6. package/client.d.ts.map +1 -1
  7. package/client.js +26 -4
  8. package/client.js.map +1 -1
  9. package/client.mjs +26 -4
  10. package/client.mjs.map +1 -1
  11. package/core/api-promise.d.mts.map +1 -1
  12. package/core/api-promise.d.ts.map +1 -1
  13. package/core/api-promise.js.map +1 -1
  14. package/core/api-promise.mjs.map +1 -1
  15. package/core/error.d.mts.map +1 -1
  16. package/core/error.d.ts.map +1 -1
  17. package/core/error.js.map +1 -1
  18. package/core/error.mjs.map +1 -1
  19. package/core/pagination.d.mts.map +1 -1
  20. package/core/pagination.d.ts.map +1 -1
  21. package/core/pagination.js.map +1 -1
  22. package/core/pagination.mjs.map +1 -1
  23. package/core/resource.d.mts.map +1 -1
  24. package/core/resource.d.ts.map +1 -1
  25. package/core/resource.js.map +1 -1
  26. package/core/resource.mjs.map +1 -1
  27. package/index.d.mts +3 -1
  28. package/index.d.mts.map +1 -1
  29. package/index.d.ts +3 -1
  30. package/index.d.ts.map +1 -1
  31. package/index.js +2 -1
  32. package/index.js.map +1 -1
  33. package/index.mjs +1 -1
  34. package/index.mjs.map +1 -1
  35. package/internal/builtin-types.d.mts.map +1 -1
  36. package/internal/builtin-types.d.ts.map +1 -1
  37. package/internal/errors.d.mts.map +1 -1
  38. package/internal/errors.d.ts.map +1 -1
  39. package/internal/errors.js.map +1 -1
  40. package/internal/errors.mjs.map +1 -1
  41. package/internal/headers.d.mts.map +1 -1
  42. package/internal/headers.d.ts.map +1 -1
  43. package/internal/headers.js.map +1 -1
  44. package/internal/headers.mjs.map +1 -1
  45. package/internal/parse.d.mts.map +1 -1
  46. package/internal/parse.d.ts.map +1 -1
  47. package/internal/parse.js.map +1 -1
  48. package/internal/parse.mjs.map +1 -1
  49. package/internal/request-options.d.mts.map +1 -1
  50. package/internal/request-options.d.ts.map +1 -1
  51. package/internal/request-options.js.map +1 -1
  52. package/internal/request-options.mjs.map +1 -1
  53. package/internal/shim-types.d.mts.map +1 -1
  54. package/internal/shim-types.d.ts.map +1 -1
  55. package/internal/shim-types.js.map +1 -1
  56. package/internal/shim-types.mjs.map +1 -1
  57. package/internal/shims.d.mts.map +1 -1
  58. package/internal/shims.d.ts.map +1 -1
  59. package/internal/shims.js.map +1 -1
  60. package/internal/shims.mjs.map +1 -1
  61. package/internal/types.d.mts.map +1 -1
  62. package/internal/types.d.ts.map +1 -1
  63. package/internal/utils/base64.d.mts.map +1 -1
  64. package/internal/utils/base64.d.ts.map +1 -1
  65. package/internal/utils/base64.js.map +1 -1
  66. package/internal/utils/base64.mjs.map +1 -1
  67. package/internal/utils/env.d.mts.map +1 -1
  68. package/internal/utils/env.d.ts.map +1 -1
  69. package/internal/utils/env.js.map +1 -1
  70. package/internal/utils/env.mjs.map +1 -1
  71. package/internal/utils/log.d.mts.map +1 -1
  72. package/internal/utils/log.d.ts.map +1 -1
  73. package/internal/utils/log.js.map +1 -1
  74. package/internal/utils/log.mjs.map +1 -1
  75. package/internal/utils/query.d.mts.map +1 -1
  76. package/internal/utils/query.d.ts.map +1 -1
  77. package/internal/utils/query.js.map +1 -1
  78. package/internal/utils/query.mjs.map +1 -1
  79. package/internal/utils/sleep.d.mts.map +1 -1
  80. package/internal/utils/sleep.d.ts.map +1 -1
  81. package/internal/utils/sleep.js.map +1 -1
  82. package/internal/utils/sleep.mjs.map +1 -1
  83. package/internal/utils/uuid.d.mts.map +1 -1
  84. package/internal/utils/uuid.d.ts.map +1 -1
  85. package/internal/utils/uuid.js.map +1 -1
  86. package/internal/utils/uuid.mjs.map +1 -1
  87. package/internal/utils/values.d.mts.map +1 -1
  88. package/internal/utils/values.d.ts.map +1 -1
  89. package/internal/utils/values.js.map +1 -1
  90. package/internal/utils/values.mjs.map +1 -1
  91. package/internal/utils.js.map +1 -1
  92. package/internal/ws-parser.d.mts +40 -0
  93. package/internal/ws-parser.d.mts.map +1 -0
  94. package/internal/ws-parser.d.ts +40 -0
  95. package/internal/ws-parser.d.ts.map +1 -0
  96. package/internal/ws-parser.js +125 -0
  97. package/internal/ws-parser.js.map +1 -0
  98. package/internal/ws-parser.mjs +118 -0
  99. package/internal/ws-parser.mjs.map +1 -0
  100. package/internal/ws-simple-types.d.mts +8 -0
  101. package/internal/ws-simple-types.d.mts.map +1 -0
  102. package/internal/ws-simple-types.d.ts +8 -0
  103. package/internal/ws-simple-types.d.ts.map +1 -0
  104. package/internal/ws-simple-types.js +3 -0
  105. package/internal/ws-simple-types.js.map +1 -0
  106. package/internal/ws-simple-types.mjs +2 -0
  107. package/internal/ws-simple-types.mjs.map +1 -0
  108. package/internal/ws.d.mts +1 -0
  109. package/internal/ws.d.mts.map +1 -1
  110. package/internal/ws.d.ts +1 -0
  111. package/internal/ws.d.ts.map +1 -1
  112. package/internal/ws.js.map +1 -1
  113. package/internal/ws.mjs.map +1 -1
  114. package/lib/index.d.mts +4 -2
  115. package/lib/index.d.mts.map +1 -1
  116. package/lib/index.d.ts +4 -2
  117. package/lib/index.d.ts.map +1 -1
  118. package/lib/index.js +2 -1
  119. package/lib/index.js.map +1 -1
  120. package/lib/index.mjs +1 -1
  121. package/lib/index.mjs.map +1 -1
  122. package/lib/jsonParseFloat.d.mts +5 -5
  123. package/lib/jsonParseFloat.d.mts.map +1 -1
  124. package/lib/jsonParseFloat.d.ts +5 -5
  125. package/lib/jsonParseFloat.d.ts.map +1 -1
  126. package/lib/jsonParseFloat.js +31 -12
  127. package/lib/jsonParseFloat.js.map +1 -1
  128. package/lib/jsonParseFloat.mjs +31 -12
  129. package/lib/jsonParseFloat.mjs.map +1 -1
  130. package/lib/ws.d.mts +102 -15
  131. package/lib/ws.d.mts.map +1 -1
  132. package/lib/ws.d.ts +102 -15
  133. package/lib/ws.d.ts.map +1 -1
  134. package/lib/ws.js +208 -34
  135. package/lib/ws.js.map +1 -1
  136. package/lib/ws.mjs +204 -33
  137. package/lib/ws.mjs.map +1 -1
  138. package/package.json +15 -9
  139. package/resources/accounts.d.mts +2 -0
  140. package/resources/accounts.d.mts.map +1 -1
  141. package/resources/accounts.d.ts +2 -0
  142. package/resources/accounts.d.ts.map +1 -1
  143. package/resources/accounts.js +2 -0
  144. package/resources/accounts.js.map +1 -1
  145. package/resources/accounts.mjs +2 -0
  146. package/resources/accounts.mjs.map +1 -1
  147. package/resources/api-keys.d.mts +3 -1
  148. package/resources/api-keys.d.mts.map +1 -1
  149. package/resources/api-keys.d.ts +3 -1
  150. package/resources/api-keys.d.ts.map +1 -1
  151. package/resources/api-keys.js +3 -1
  152. package/resources/api-keys.js.map +1 -1
  153. package/resources/api-keys.mjs +3 -1
  154. package/resources/api-keys.mjs.map +1 -1
  155. package/resources/candles.d.mts +21 -1
  156. package/resources/candles.d.mts.map +1 -1
  157. package/resources/candles.d.ts +21 -1
  158. package/resources/candles.d.ts.map +1 -1
  159. package/resources/candles.js +12 -0
  160. package/resources/candles.js.map +1 -1
  161. package/resources/candles.mjs +12 -0
  162. package/resources/candles.mjs.map +1 -1
  163. package/resources/deposits.d.mts +18 -1
  164. package/resources/deposits.d.mts.map +1 -1
  165. package/resources/deposits.d.ts +18 -1
  166. package/resources/deposits.d.ts.map +1 -1
  167. package/resources/deposits.js +18 -1
  168. package/resources/deposits.js.map +1 -1
  169. package/resources/deposits.mjs +18 -1
  170. package/resources/deposits.mjs.map +1 -1
  171. package/resources/index.d.mts +4 -2
  172. package/resources/index.d.mts.map +1 -1
  173. package/resources/index.d.ts +4 -2
  174. package/resources/index.d.ts.map +1 -1
  175. package/resources/index.js +5 -1
  176. package/resources/index.js.map +1 -1
  177. package/resources/index.mjs +4 -2
  178. package/resources/index.mjs.map +1 -1
  179. package/resources/orderbooks.d.mts +4 -0
  180. package/resources/orderbooks.d.mts.map +1 -1
  181. package/resources/orderbooks.d.ts +4 -0
  182. package/resources/orderbooks.d.ts.map +1 -1
  183. package/resources/orderbooks.js +4 -0
  184. package/resources/orderbooks.js.map +1 -1
  185. package/resources/orderbooks.mjs +4 -0
  186. package/resources/orderbooks.mjs.map +1 -1
  187. package/resources/orders.d.mts +12 -2
  188. package/resources/orders.d.mts.map +1 -1
  189. package/resources/orders.d.ts +12 -2
  190. package/resources/orders.d.ts.map +1 -1
  191. package/resources/orders.js +12 -2
  192. package/resources/orders.js.map +1 -1
  193. package/resources/orders.mjs +12 -2
  194. package/resources/orders.mjs.map +1 -1
  195. package/resources/pockets.d.mts +509 -0
  196. package/resources/pockets.d.mts.map +1 -0
  197. package/resources/pockets.d.ts +509 -0
  198. package/resources/pockets.d.ts.map +1 -0
  199. package/resources/pockets.js +157 -0
  200. package/resources/pockets.js.map +1 -0
  201. package/resources/pockets.mjs +153 -0
  202. package/resources/pockets.mjs.map +1 -0
  203. package/resources/tickers.d.mts +6 -0
  204. package/resources/tickers.d.mts.map +1 -1
  205. package/resources/tickers.d.ts +6 -0
  206. package/resources/tickers.d.ts.map +1 -1
  207. package/resources/tickers.js +6 -0
  208. package/resources/tickers.js.map +1 -1
  209. package/resources/tickers.mjs +6 -0
  210. package/resources/tickers.mjs.map +1 -1
  211. package/resources/trades.d.mts +5 -3
  212. package/resources/trades.d.mts.map +1 -1
  213. package/resources/trades.d.ts +5 -3
  214. package/resources/trades.d.ts.map +1 -1
  215. package/resources/trades.js +5 -3
  216. package/resources/trades.js.map +1 -1
  217. package/resources/trades.mjs +5 -3
  218. package/resources/trades.mjs.map +1 -1
  219. package/resources/trading-pairs.d.mts +2 -0
  220. package/resources/trading-pairs.d.mts.map +1 -1
  221. package/resources/trading-pairs.d.ts +2 -0
  222. package/resources/trading-pairs.d.ts.map +1 -1
  223. package/resources/trading-pairs.js +2 -0
  224. package/resources/trading-pairs.js.map +1 -1
  225. package/resources/trading-pairs.mjs +2 -0
  226. package/resources/trading-pairs.mjs.map +1 -1
  227. package/resources/travel-rule.d.mts +6 -0
  228. package/resources/travel-rule.d.mts.map +1 -1
  229. package/resources/travel-rule.d.ts +6 -0
  230. package/resources/travel-rule.d.ts.map +1 -1
  231. package/resources/travel-rule.js +6 -0
  232. package/resources/travel-rule.js.map +1 -1
  233. package/resources/travel-rule.mjs +6 -0
  234. package/resources/travel-rule.mjs.map +1 -1
  235. package/resources/wallet-status.d.mts +2 -0
  236. package/resources/wallet-status.d.mts.map +1 -1
  237. package/resources/wallet-status.d.ts +2 -0
  238. package/resources/wallet-status.d.ts.map +1 -1
  239. package/resources/wallet-status.js +2 -0
  240. package/resources/wallet-status.js.map +1 -1
  241. package/resources/wallet-status.mjs +2 -0
  242. package/resources/wallet-status.mjs.map +1 -1
  243. package/resources/withdraws.d.mts +18 -1
  244. package/resources/withdraws.d.mts.map +1 -1
  245. package/resources/withdraws.d.ts +18 -1
  246. package/resources/withdraws.d.ts.map +1 -1
  247. package/resources/withdraws.js +18 -1
  248. package/resources/withdraws.js.map +1 -1
  249. package/resources/withdraws.mjs +18 -1
  250. package/resources/withdraws.mjs.map +1 -1
  251. package/resources/ws-info/index.d.mts +6 -0
  252. package/resources/ws-info/index.d.mts.map +1 -0
  253. package/resources/ws-info/index.d.ts +6 -0
  254. package/resources/ws-info/index.d.ts.map +1 -0
  255. package/resources/ws-info/index.js +6 -0
  256. package/resources/ws-info/index.js.map +1 -0
  257. package/resources/ws-info/index.mjs +2 -0
  258. package/resources/ws-info/index.mjs.map +1 -0
  259. package/resources/ws-info/internal-base.d.mts +63 -0
  260. package/resources/ws-info/internal-base.d.mts.map +1 -0
  261. package/resources/ws-info/internal-base.d.ts +63 -0
  262. package/resources/ws-info/internal-base.d.ts.map +1 -0
  263. package/resources/ws-info/internal-base.js +47 -0
  264. package/resources/ws-info/internal-base.js.map +1 -0
  265. package/resources/ws-info/internal-base.mjs +41 -0
  266. package/resources/ws-info/internal-base.mjs.map +1 -0
  267. package/resources/ws-info/ws-info.d.mts +1180 -0
  268. package/resources/ws-info/ws-info.d.mts.map +1 -0
  269. package/resources/ws-info/ws-info.d.ts +1180 -0
  270. package/resources/ws-info/ws-info.d.ts.map +1 -0
  271. package/resources/ws-info/ws-info.js +8 -0
  272. package/resources/ws-info/ws-info.js.map +1 -0
  273. package/resources/ws-info/ws-info.mjs +4 -0
  274. package/resources/ws-info/ws-info.mjs.map +1 -0
  275. package/resources/ws-info/ws.d.mts +91 -0
  276. package/resources/ws-info/ws.d.mts.map +1 -0
  277. package/resources/ws-info/ws.d.ts +91 -0
  278. package/resources/ws-info/ws.d.ts.map +1 -0
  279. package/resources/ws-info/ws.js +463 -0
  280. package/resources/ws-info/ws.js.map +1 -0
  281. package/resources/ws-info/ws.mjs +458 -0
  282. package/resources/ws-info/ws.mjs.map +1 -0
  283. package/resources/ws-info.d.mts +2 -0
  284. package/resources/ws-info.d.mts.map +1 -0
  285. package/resources/ws-info.d.ts +2 -0
  286. package/resources/ws-info.d.ts.map +1 -0
  287. package/resources/ws-info.js +5 -0
  288. package/resources/ws-info.js.map +1 -0
  289. package/resources/ws-info.mjs +2 -0
  290. package/resources/ws-info.mjs.map +1 -0
  291. package/resources/ws-private/index.d.mts +3 -1
  292. package/resources/ws-private/index.d.mts.map +1 -1
  293. package/resources/ws-private/index.d.ts +3 -1
  294. package/resources/ws-private/index.d.ts.map +1 -1
  295. package/resources/ws-private/index.js.map +1 -1
  296. package/resources/ws-private/index.mjs +1 -1
  297. package/resources/ws-private/index.mjs.map +1 -1
  298. package/resources/ws-private/internal-base.d.mts.map +1 -1
  299. package/resources/ws-private/internal-base.d.ts.map +1 -1
  300. package/resources/ws-private/internal-base.js.map +1 -1
  301. package/resources/ws-private/internal-base.mjs.map +1 -1
  302. package/resources/ws-private/ws-private.d.mts +301 -9
  303. package/resources/ws-private/ws-private.d.mts.map +1 -1
  304. package/resources/ws-private/ws-private.d.ts +301 -9
  305. package/resources/ws-private/ws-private.d.ts.map +1 -1
  306. package/resources/ws-private/ws-private.js.map +1 -1
  307. package/resources/ws-private/ws-private.mjs.map +1 -1
  308. package/resources/ws-private/ws.d.mts +2 -2
  309. package/resources/ws-private/ws.d.mts.map +1 -1
  310. package/resources/ws-private/ws.d.ts +2 -2
  311. package/resources/ws-private/ws.d.ts.map +1 -1
  312. package/resources/ws-private/ws.js +15 -20
  313. package/resources/ws-private/ws.js.map +1 -1
  314. package/resources/ws-private/ws.mjs +15 -20
  315. package/resources/ws-private/ws.mjs.map +1 -1
  316. package/resources/ws-private.js.map +1 -1
  317. package/resources/ws-public/index.d.mts +3 -1
  318. package/resources/ws-public/index.d.mts.map +1 -1
  319. package/resources/ws-public/index.d.ts +3 -1
  320. package/resources/ws-public/index.d.ts.map +1 -1
  321. package/resources/ws-public/index.js.map +1 -1
  322. package/resources/ws-public/index.mjs +1 -1
  323. package/resources/ws-public/index.mjs.map +1 -1
  324. package/resources/ws-public/internal-base.d.mts.map +1 -1
  325. package/resources/ws-public/internal-base.d.ts.map +1 -1
  326. package/resources/ws-public/internal-base.js.map +1 -1
  327. package/resources/ws-public/internal-base.mjs.map +1 -1
  328. package/resources/ws-public/ws-public.d.mts +355 -5
  329. package/resources/ws-public/ws-public.d.mts.map +1 -1
  330. package/resources/ws-public/ws-public.d.ts +355 -5
  331. package/resources/ws-public/ws-public.d.ts.map +1 -1
  332. package/resources/ws-public/ws-public.js.map +1 -1
  333. package/resources/ws-public/ws-public.mjs.map +1 -1
  334. package/resources/ws-public/ws.d.mts +2 -2
  335. package/resources/ws-public/ws.d.mts.map +1 -1
  336. package/resources/ws-public/ws.d.ts +2 -2
  337. package/resources/ws-public/ws.d.ts.map +1 -1
  338. package/resources/ws-public/ws.js +15 -20
  339. package/resources/ws-public/ws.js.map +1 -1
  340. package/resources/ws-public/ws.mjs +15 -20
  341. package/resources/ws-public/ws.mjs.map +1 -1
  342. package/resources/ws-public.js.map +1 -1
  343. package/src/client.ts +141 -5
  344. package/src/core/api-promise.ts +0 -1
  345. package/src/core/error.ts +0 -1
  346. package/src/core/pagination.ts +0 -1
  347. package/src/core/resource.ts +0 -1
  348. package/src/index.ts +24 -2
  349. package/src/internal/builtin-types.ts +0 -1
  350. package/src/internal/errors.ts +0 -1
  351. package/src/internal/headers.ts +0 -1
  352. package/src/internal/parse.ts +0 -1
  353. package/src/internal/request-options.ts +0 -1
  354. package/src/internal/shim-types.ts +0 -1
  355. package/src/internal/shims.ts +0 -1
  356. package/src/internal/types.ts +0 -1
  357. package/src/internal/utils/base64.ts +0 -1
  358. package/src/internal/utils/env.ts +0 -1
  359. package/src/internal/utils/log.ts +0 -1
  360. package/src/internal/utils/query.ts +0 -1
  361. package/src/internal/utils/sleep.ts +0 -1
  362. package/src/internal/utils/uuid.ts +0 -1
  363. package/src/internal/utils/values.ts +0 -1
  364. package/src/internal/utils.ts +0 -1
  365. package/src/internal/ws-parser.ts +164 -0
  366. package/src/internal/ws-simple-types.ts +34 -0
  367. package/src/internal/ws.ts +1 -0
  368. package/src/lib/index.ts +17 -2
  369. package/src/lib/jsonParseFloat.ts +38 -12
  370. package/src/lib/ws.ts +367 -55
  371. package/src/resources/accounts.ts +2 -1
  372. package/src/resources/api-keys.ts +3 -2
  373. package/src/resources/candles.ts +22 -2
  374. package/src/resources/deposits.ts +18 -2
  375. package/src/resources/index.ts +65 -3
  376. package/src/resources/orderbooks.ts +4 -1
  377. package/src/resources/orders.ts +12 -3
  378. package/src/resources/pockets.ts +639 -0
  379. package/src/resources/tickers.ts +6 -1
  380. package/src/resources/trades.ts +5 -4
  381. package/src/resources/trading-pairs.ts +2 -1
  382. package/src/resources/travel-rule.ts +6 -1
  383. package/src/resources/wallet-status.ts +2 -1
  384. package/src/resources/withdraws.ts +18 -2
  385. package/src/resources/ws-info/index.ts +44 -0
  386. package/src/resources/ws-info/internal-base.ts +96 -0
  387. package/src/resources/ws-info/ws-info.ts +1855 -0
  388. package/src/resources/ws-info/ws.ts +574 -0
  389. package/src/resources/ws-info.ts +1 -0
  390. package/src/resources/ws-private/index.ts +12 -2
  391. package/src/resources/ws-private/internal-base.ts +0 -2
  392. package/src/resources/ws-private/ws-private.ts +419 -18
  393. package/src/resources/ws-private/ws.ts +16 -24
  394. package/src/resources/ws-private.ts +0 -1
  395. package/src/resources/ws-public/index.ts +16 -2
  396. package/src/resources/ws-public/internal-base.ts +0 -2
  397. package/src/resources/ws-public/ws-public.ts +459 -5
  398. package/src/resources/ws-public/ws.ts +16 -24
  399. package/src/resources/ws-public.ts +0 -1
  400. package/src/version.ts +1 -1
  401. package/version.d.mts +1 -1
  402. package/version.d.ts +1 -1
  403. package/version.js +1 -1
  404. package/version.js.map +1 -1
  405. package/version.mjs +1 -1
  406. package/version.mjs.map +1 -1
@@ -0,0 +1,463 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.WsInfoWS = void 0;
4
+ const tslib_1 = require("../../internal/tslib.js");
5
+ const internal_base_1 = require("./internal-base.js");
6
+ const EventEmitter_1 = require("../../core/EventEmitter.js");
7
+ const sleep_1 = require("../../internal/utils/sleep.js");
8
+ const WS = tslib_1.__importStar(require("ws"));
9
+ const ws_1 = require("../../internal/ws.js");
10
+ const error_1 = require("../../core/error.js");
11
+ const jwtAuth_1 = require("../../lib/jwtAuth.js");
12
+ const ws_parser_1 = require("../../internal/ws-parser.js");
13
+ class WsInfoWS extends internal_base_1.WsInfoEmitter {
14
+ constructor(client, parameters, options) {
15
+ super();
16
+ this._sendQueue = [];
17
+ this._isReconnecting = false;
18
+ this._intentionallyClosed = false;
19
+ this._closeCode = 1000;
20
+ this._closeReason = 'OK';
21
+ this._lastCloseCode = 1006;
22
+ this._lastCloseReason = '';
23
+ // Necessary to keep the public event interface clean while we manage reconnecting
24
+ this._internalEvents = new EventEmitter_1.InternalEventEmitter();
25
+ if (!WS?.WebSocket) {
26
+ throw new Error('WsInfoWS requires the "ws" package but it could not be loaded');
27
+ }
28
+ this._client = client;
29
+ this._parameters = parameters;
30
+ const { reconnect, ...wsOptions } = options ?? {};
31
+ this._wsOptions = wsOptions;
32
+ this._reconnectOptions = reconnect ?? null;
33
+ this.url = (0, internal_base_1.buildURL)(client, parameters);
34
+ this.socket = this._connect();
35
+ }
36
+ send(event) {
37
+ if (!this.socket) {
38
+ throw new error_1.UpbitError('Internal error: failed to initialize socket. Please report this issue.');
39
+ }
40
+ if (this._isReconnecting || this.socket.readyState === WS.WebSocket.CONNECTING) {
41
+ this._sendQueue.push(JSON.stringify(event));
42
+ return;
43
+ }
44
+ if (this.socket.readyState !== WS.WebSocket.OPEN) {
45
+ this._onError(null, 'cannot send on a closed WebSocket', undefined);
46
+ return;
47
+ }
48
+ try {
49
+ this.socket.send(JSON.stringify(event));
50
+ }
51
+ catch (err) {
52
+ this._onError(null, 'could not send data', err);
53
+ }
54
+ }
55
+ close(props) {
56
+ if (!this.socket) {
57
+ throw new error_1.UpbitError('Internal error: failed to initialize socket. Please report this issue.');
58
+ }
59
+ this._intentionallyClosed = true;
60
+ this._closeCode = props?.code ?? 1000;
61
+ this._closeReason = props?.reason ?? 'OK';
62
+ try {
63
+ this.socket.close(this._closeCode, this._closeReason);
64
+ }
65
+ catch (err) {
66
+ this._onError(null, 'could not close the connection', err);
67
+ }
68
+ }
69
+ /**
70
+ * Returns an async iterator over WebSocket lifecycle and message events,
71
+ * providing an alternative to the event-based `.on()` API.
72
+ * The iterator will exit if the socket closes but exiting the iterator
73
+ * does not close the socket.
74
+ *
75
+ * @example
76
+ * ```ts
77
+ * for await (const event of client.stream()) {
78
+ * switch (event.type) {
79
+ * case 'message':
80
+ * console.log('received:', event.message);
81
+ * break;
82
+ * case 'error':
83
+ * console.error(event.error);
84
+ * break;
85
+ * case 'close':
86
+ * console.log('connection closed');
87
+ * break;
88
+ * }
89
+ * }
90
+ * ```
91
+ */
92
+ stream() {
93
+ return this[Symbol.asyncIterator]();
94
+ }
95
+ [Symbol.asyncIterator]() {
96
+ if (!this.socket) {
97
+ throw new error_1.UpbitError('Internal error: failed to initialize socket. Please report this issue.');
98
+ }
99
+ // Two-queue async iterator: `queue` buffers incoming messages,
100
+ // `resolvers` buffers waiting next() calls. A push wakes the
101
+ // oldest next(); a next() drains the oldest message.
102
+ const queue = [];
103
+ const resolvers = [];
104
+ let done = false;
105
+ let currentSocket = this.socket;
106
+ const push = (msg) => {
107
+ queue.push(msg);
108
+ resolvers.shift()?.();
109
+ };
110
+ const onEvent = (event) => {
111
+ push({ type: 'message', message: event });
112
+ };
113
+ // Connection and transport errors funnel through _onError → 'error' event
114
+ const onEmitterError = (err) => {
115
+ push({ type: 'error', error: err });
116
+ };
117
+ const onOpen = () => {
118
+ push({ type: 'open' });
119
+ };
120
+ const onReconnecting = (evt) => {
121
+ push({ type: 'reconnecting', reconnect: evt });
122
+ };
123
+ const onReconnected = () => {
124
+ push({ type: 'reconnected' });
125
+ };
126
+ const flushResolvers = () => {
127
+ for (let resolver = resolvers.shift(); resolver; resolver = resolvers.shift()) {
128
+ resolver();
129
+ }
130
+ };
131
+ const onClose = (code, reason) => {
132
+ push({ type: 'close', code, reason });
133
+ done = true;
134
+ flushResolvers();
135
+ cleanup();
136
+ };
137
+ const onSocketSwap = (oldSocket, newSocket) => {
138
+ oldSocket.off('open', onOpen);
139
+ newSocket.on('open', onOpen);
140
+ currentSocket = newSocket;
141
+ };
142
+ const cleanup = () => {
143
+ this.off('event', onEvent);
144
+ this.off('error', onEmitterError);
145
+ currentSocket.off('open', onOpen);
146
+ this._internalEvents.off('close', onClose);
147
+ this._internalEvents.off('socketSwap', onSocketSwap);
148
+ this._internalEvents.off('reconnecting', onReconnecting);
149
+ this._internalEvents.off('reconnected', onReconnected);
150
+ };
151
+ this.on('event', onEvent);
152
+ this.on('error', onEmitterError);
153
+ this.socket.on('open', onOpen);
154
+ this._internalEvents.on('close', onClose);
155
+ this._internalEvents.on('socketSwap', onSocketSwap);
156
+ this._internalEvents.on('reconnecting', onReconnecting);
157
+ this._internalEvents.on('reconnected', onReconnected);
158
+ if (this._isReconnecting) {
159
+ // A reconnect is already in flight. The socket may be CLOSED but the
160
+ // instance is still alive. Emit 'reconnecting' so the iterator stays
161
+ // open and receives the upcoming reconnected/message events.
162
+ push({
163
+ type: 'reconnecting',
164
+ reconnect: { attempt: 0, maxAttempts: 0, delay: 0, closeCode: 0, parameters: undefined },
165
+ });
166
+ }
167
+ else {
168
+ switch (this.socket.readyState) {
169
+ case WS.WebSocket.CONNECTING:
170
+ push({ type: 'connecting' });
171
+ break;
172
+ case WS.WebSocket.OPEN:
173
+ push({ type: 'open' });
174
+ break;
175
+ case WS.WebSocket.CLOSING:
176
+ push({ type: 'closing' });
177
+ break;
178
+ case WS.WebSocket.CLOSED:
179
+ push({
180
+ type: 'close',
181
+ code: this._lastCloseCode,
182
+ reason: this._lastCloseReason,
183
+ });
184
+ done = true;
185
+ cleanup();
186
+ break;
187
+ }
188
+ }
189
+ const resolve = (res) => {
190
+ if (queue.length > 0) {
191
+ res({ value: queue.shift(), done: false });
192
+ }
193
+ else if (done) {
194
+ res({ value: undefined, done: true });
195
+ }
196
+ else {
197
+ return false;
198
+ }
199
+ return true;
200
+ };
201
+ const next = () => new Promise((res) => {
202
+ if (resolve(res))
203
+ return;
204
+ resolvers.push(() => {
205
+ resolve(res);
206
+ });
207
+ });
208
+ return {
209
+ next,
210
+ return: () => {
211
+ done = true;
212
+ cleanup();
213
+ flushResolvers();
214
+ return Promise.resolve({ value: undefined, done: true });
215
+ },
216
+ [Symbol.asyncIterator]() {
217
+ return this;
218
+ },
219
+ };
220
+ }
221
+ _connect() {
222
+ this.url = (0, internal_base_1.buildURL)(this._client, this._parameters ?? {});
223
+ const socket = new WS.WebSocket(this.url, {
224
+ ...this._wsOptions,
225
+ headers: this._client._buildWebSocketHandshakeHeaders(this._authHeaders(), this._wsOptions?.headers),
226
+ });
227
+ let pingTimer;
228
+ socket.on('open', () => {
229
+ pingTimer = setInterval(() => {
230
+ if (socket.readyState === WS.WebSocket.OPEN)
231
+ socket.ping();
232
+ }, 30000);
233
+ });
234
+ socket.on('close', () => {
235
+ if (pingTimer !== undefined)
236
+ clearInterval(pingTimer);
237
+ });
238
+ socket.on('message', (data, _isBinary) => {
239
+ let event;
240
+ try {
241
+ event = (0, ws_parser_1.parseWebSocketValue)(data);
242
+ }
243
+ catch {
244
+ this._onError(null, 'could not parse WebSocket message', new SyntaxError('Invalid WebSocket JSON'));
245
+ return;
246
+ }
247
+ this._emit('event', event);
248
+ if ((0, ws_parser_1.isRecord)(event) && (event['type'] === 'indicator' || event['type'] === 'indicator_signal')) {
249
+ // @ts-ignore The discriminator is checked at runtime.
250
+ this._emit(event['type'], event);
251
+ }
252
+ });
253
+ socket.on('error', (err) => {
254
+ // Suppress transient errors during reconnection — the retry loop
255
+ // already handles them and will surface a close if retries exhaust.
256
+ if (this._isReconnecting)
257
+ return;
258
+ this._onError(null, err.message, err);
259
+ });
260
+ socket.on('open', () => {
261
+ this._flushSendQueue();
262
+ });
263
+ socket.on('close', (code, reason) => {
264
+ // Ignore close events from superseded sockets — a stale socket's
265
+ // late close must not kick off a second reconnect loop.
266
+ if (socket !== this.socket)
267
+ return;
268
+ if (!this._intentionallyClosed && this._canReconnect(code)) {
269
+ this._reconnect(code);
270
+ }
271
+ else if (!this._isReconnecting) {
272
+ this._emitPermanentClose(code, reason.toString());
273
+ }
274
+ });
275
+ return socket;
276
+ }
277
+ // Reconnect is opt-in via onReconnecting so callers can pass
278
+ // state (e.g. session IDs) into the new connection.
279
+ _canReconnect(code) {
280
+ if (this._intentionallyClosed)
281
+ return false;
282
+ if (!this._reconnectOptions)
283
+ return false;
284
+ if (this._reconnectOptions.maxRetries === 0)
285
+ return false;
286
+ if (!this._reconnectOptions.onReconnecting)
287
+ return false;
288
+ return (0, ws_1.isRecoverableClose)(code);
289
+ }
290
+ async _reconnect(closeCode) {
291
+ if (!this.socket) {
292
+ throw new error_1.UpbitError('Internal error: failed to initialize socket. Please report this issue.');
293
+ }
294
+ if (this._isReconnecting || !this._reconnectOptions)
295
+ return;
296
+ this._isReconnecting = true;
297
+ const maxRetries = this._reconnectOptions.maxRetries ?? 5;
298
+ const initialDelay = this._reconnectOptions.initialDelay ?? 500;
299
+ const maxDelay = this._reconnectOptions.maxDelay ?? 8000;
300
+ for (let attempt = 1; attempt <= maxRetries; attempt++) {
301
+ if (!this._canReconnect(closeCode)) {
302
+ this._isReconnecting = false;
303
+ if (!this._intentionallyClosed) {
304
+ this._onError(null, `WebSocket reconnect aborted: non-recoverable close code ${closeCode}`, undefined);
305
+ }
306
+ this._emitPermanentClose(this._intentionallyClosed ? this._closeCode : closeCode, this._intentionallyClosed ? this._closeReason : 'reconnect aborted');
307
+ return;
308
+ }
309
+ const baseDelay = Math.min(initialDelay * Math.pow(2, attempt - 1), maxDelay);
310
+ // Jitter: rand [0.75, 1.0] to spread out connection attempts without over-delaying
311
+ const jitter = 0.75 + Math.random() * 0.25;
312
+ const actualDelay = Math.round(baseDelay * jitter);
313
+ let reconnectingEvent = {
314
+ attempt,
315
+ maxAttempts: maxRetries,
316
+ delay: actualDelay,
317
+ closeCode,
318
+ parameters: this._parameters ? { ...this._parameters } : undefined,
319
+ };
320
+ let overrides;
321
+ try {
322
+ overrides = this._reconnectOptions.onReconnecting(reconnectingEvent);
323
+ }
324
+ catch (err) {
325
+ this._isReconnecting = false;
326
+ this._onError(null, 'onReconnecting callback threw', err);
327
+ this._emitPermanentClose(closeCode, 'onReconnecting callback threw');
328
+ return;
329
+ }
330
+ if (overrides && 'abort' in overrides && overrides.abort) {
331
+ this._isReconnecting = false;
332
+ this._emitPermanentClose(closeCode, 'reconnect aborted by handler');
333
+ return;
334
+ }
335
+ if (overrides && 'parameters' in overrides) {
336
+ this._parameters = overrides.parameters;
337
+ reconnectingEvent = { ...reconnectingEvent, parameters: this._parameters };
338
+ }
339
+ try {
340
+ this._emit('reconnecting', reconnectingEvent);
341
+ }
342
+ catch (err) {
343
+ this._onError(null, 'onReconnecting callback threw', err);
344
+ }
345
+ this._internalEvents._emit('reconnecting', reconnectingEvent);
346
+ if (!this._canReconnect(closeCode)) {
347
+ this._isReconnecting = false;
348
+ if (!this._intentionallyClosed) {
349
+ this._onError(null, `WebSocket reconnect aborted: non-recoverable close code ${closeCode}`, undefined);
350
+ }
351
+ this._emitPermanentClose(this._intentionallyClosed ? this._closeCode : closeCode, this._intentionallyClosed ? this._closeReason : 'reconnect aborted');
352
+ return;
353
+ }
354
+ await (0, sleep_1.sleep)(actualDelay);
355
+ if (!this._canReconnect(closeCode)) {
356
+ this._isReconnecting = false;
357
+ if (!this._intentionallyClosed) {
358
+ this._onError(null, `WebSocket reconnect aborted: non-recoverable close code ${closeCode}`, undefined);
359
+ }
360
+ this._emitPermanentClose(this._intentionallyClosed ? this._closeCode : closeCode, this._intentionallyClosed ? this._closeReason : 'reconnect aborted');
361
+ return;
362
+ }
363
+ let closeCodePromise;
364
+ try {
365
+ const oldSocket = this.socket;
366
+ this.socket = this._connect();
367
+ // Registered synchronously after _connect() and before any
368
+ // await so the code is captured even when ws emits 'close'
369
+ // in the same tick as 'error' (e.g. abortHandshake).
370
+ closeCodePromise = new Promise((resolve) => {
371
+ this.socket.once('close', resolve);
372
+ });
373
+ await this._awaitOpen(this.socket);
374
+ this._internalEvents._emit('socketSwap', oldSocket, this.socket);
375
+ this._isReconnecting = false;
376
+ this._flushSendQueue();
377
+ this._emit('reconnected');
378
+ this._internalEvents._emit('reconnected');
379
+ return;
380
+ }
381
+ catch {
382
+ if (closeCodePromise) {
383
+ // ws may emit 'error' before 'close', so await the code
384
+ // rather than reading it synchronously.
385
+ closeCode = await closeCodePromise;
386
+ }
387
+ }
388
+ }
389
+ // All retries exhausted — surface an error so consumers can
390
+ // distinguish retry failure from a clean close.
391
+ this._isReconnecting = false;
392
+ this._onError(null, `WebSocket reconnect failed after ${maxRetries} attempts (close code: ${closeCode})`, undefined);
393
+ this._emitPermanentClose(closeCode, `reconnect failed after ${maxRetries} attempts`);
394
+ }
395
+ /**
396
+ * Resolves once the socket is open, rejects if it errors or closes first
397
+ */
398
+ _awaitOpen(socket) {
399
+ return new Promise((resolve, reject) => {
400
+ const cleanup = () => {
401
+ socket.off('open', onOpen);
402
+ socket.off('error', onError);
403
+ socket.off('close', onFail);
404
+ };
405
+ const onOpen = () => {
406
+ cleanup();
407
+ resolve();
408
+ };
409
+ const onError = (err) => {
410
+ cleanup();
411
+ reject(err);
412
+ };
413
+ const onFail = () => {
414
+ cleanup();
415
+ reject(new Error('socket closed before open'));
416
+ };
417
+ socket.once('open', onOpen);
418
+ socket.once('error', onError);
419
+ socket.once('close', onFail);
420
+ });
421
+ }
422
+ _flushSendQueue() {
423
+ if (!this.socket) {
424
+ throw new error_1.UpbitError('Internal error: failed to initialize socket. Please report this issue.');
425
+ }
426
+ const pending = this._sendQueue.splice(0);
427
+ for (let i = 0; i < pending.length; i++) {
428
+ try {
429
+ if (this.socket.readyState !== WS.WebSocket.OPEN) {
430
+ // Avoid dropping messages by sending them out over a closing socket
431
+ this._sendQueue.unshift(...pending.slice(i));
432
+ return;
433
+ }
434
+ else {
435
+ this.socket.send(pending[i]);
436
+ }
437
+ }
438
+ catch (err) {
439
+ // Re-queue remaining for next open/reconnect
440
+ this._sendQueue.unshift(...pending.slice(i));
441
+ this._onError(null, 'could not send queued data', err);
442
+ return;
443
+ }
444
+ }
445
+ }
446
+ /** Close the iterator even when a public close listener throws. */
447
+ _emitPermanentClose(code, reason) {
448
+ this._lastCloseCode = code;
449
+ this._lastCloseReason = reason;
450
+ this._sendQueue = [];
451
+ this._internalEvents._emit('close', code, reason);
452
+ this._emit('close', code, reason);
453
+ }
454
+ _authHeaders() {
455
+ const { accessKey, secretKey } = this._client;
456
+ if (!accessKey || !secretKey) {
457
+ throw new error_1.UpbitError('Info WebSocket requires accessKey and secretKey');
458
+ }
459
+ return { Authorization: `Bearer ${(0, jwtAuth_1.createJwtToken)(accessKey, secretKey)}` };
460
+ }
461
+ }
462
+ exports.WsInfoWS = WsInfoWS;
463
+ //# sourceMappingURL=ws.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ws.js","sourceRoot":"","sources":["../../src/resources/ws-info/ws.ts"],"names":[],"mappings":"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"}