@upbit-official/upbit-sdk 0.9.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.
- package/LICENSE +201 -0
- package/README.md +390 -0
- package/api-promise.d.mts +2 -0
- package/api-promise.d.mts.map +1 -0
- package/api-promise.d.ts +2 -0
- package/api-promise.d.ts.map +1 -0
- package/api-promise.js +6 -0
- package/api-promise.js.map +1 -0
- package/api-promise.mjs +2 -0
- package/api-promise.mjs.map +1 -0
- package/client.d.mts +261 -0
- package/client.d.mts.map +1 -0
- package/client.d.ts +261 -0
- package/client.d.ts.map +1 -0
- package/client.js +557 -0
- package/client.js.map +1 -0
- package/client.mjs +553 -0
- package/client.mjs.map +1 -0
- package/core/EventEmitter.d.mts +56 -0
- package/core/EventEmitter.d.mts.map +1 -0
- package/core/EventEmitter.d.ts +56 -0
- package/core/EventEmitter.d.ts.map +1 -0
- package/core/EventEmitter.js +93 -0
- package/core/EventEmitter.js.map +1 -0
- package/core/EventEmitter.mjs +88 -0
- package/core/EventEmitter.mjs.map +1 -0
- package/core/api-promise.d.mts +46 -0
- package/core/api-promise.d.mts.map +1 -0
- package/core/api-promise.d.ts +46 -0
- package/core/api-promise.d.ts.map +1 -0
- package/core/api-promise.js +73 -0
- package/core/api-promise.js.map +1 -0
- package/core/api-promise.mjs +69 -0
- package/core/api-promise.mjs.map +1 -0
- package/core/error.d.mts +51 -0
- package/core/error.d.mts.map +1 -0
- package/core/error.d.ts +51 -0
- package/core/error.d.ts.map +1 -0
- package/core/error.js +150 -0
- package/core/error.js.map +1 -0
- package/core/error.mjs +133 -0
- package/core/error.mjs.map +1 -0
- package/core/pagination.d.mts +63 -0
- package/core/pagination.d.mts.map +1 -0
- package/core/pagination.d.ts +63 -0
- package/core/pagination.d.ts.map +1 -0
- package/core/pagination.js +125 -0
- package/core/pagination.js.map +1 -0
- package/core/pagination.mjs +118 -0
- package/core/pagination.mjs.map +1 -0
- package/core/resource.d.mts +6 -0
- package/core/resource.d.mts.map +1 -0
- package/core/resource.d.ts +6 -0
- package/core/resource.d.ts.map +1 -0
- package/core/resource.js +10 -0
- package/core/resource.js.map +1 -0
- package/core/resource.mjs +6 -0
- package/core/resource.mjs.map +1 -0
- package/core/uploads.d.mts +3 -0
- package/core/uploads.d.mts.map +1 -0
- package/core/uploads.d.ts +3 -0
- package/core/uploads.d.ts.map +1 -0
- package/core/uploads.js +6 -0
- package/core/uploads.js.map +1 -0
- package/core/uploads.mjs +2 -0
- package/core/uploads.mjs.map +1 -0
- package/error.d.mts +2 -0
- package/error.d.mts.map +1 -0
- package/error.d.ts +2 -0
- package/error.d.ts.map +1 -0
- package/error.js +6 -0
- package/error.js.map +1 -0
- package/error.mjs +2 -0
- package/error.mjs.map +1 -0
- package/index.d.mts +8 -0
- package/index.d.mts.map +1 -0
- package/index.d.ts +8 -0
- package/index.d.ts.map +1 -0
- package/index.js +36 -0
- package/index.js.map +1 -0
- package/index.mjs +8 -0
- package/index.mjs.map +1 -0
- package/internal/builtin-types.d.mts +73 -0
- package/internal/builtin-types.d.mts.map +1 -0
- package/internal/builtin-types.d.ts +73 -0
- package/internal/builtin-types.d.ts.map +1 -0
- package/internal/builtin-types.js +3 -0
- package/internal/builtin-types.js.map +1 -0
- package/internal/builtin-types.mjs +2 -0
- package/internal/builtin-types.mjs.map +1 -0
- package/internal/errors.d.mts +3 -0
- package/internal/errors.d.mts.map +1 -0
- package/internal/errors.d.ts +3 -0
- package/internal/errors.d.ts.map +1 -0
- package/internal/errors.js +40 -0
- package/internal/errors.js.map +1 -0
- package/internal/errors.mjs +35 -0
- package/internal/errors.mjs.map +1 -0
- package/internal/headers.d.mts +20 -0
- package/internal/headers.d.mts.map +1 -0
- package/internal/headers.d.ts +20 -0
- package/internal/headers.d.ts.map +1 -0
- package/internal/headers.js +78 -0
- package/internal/headers.js.map +1 -0
- package/internal/headers.mjs +73 -0
- package/internal/headers.mjs.map +1 -0
- package/internal/parse.d.mts +12 -0
- package/internal/parse.d.mts.map +1 -0
- package/internal/parse.d.ts +12 -0
- package/internal/parse.d.ts.map +1 -0
- package/internal/parse.js +40 -0
- package/internal/parse.js.map +1 -0
- package/internal/parse.mjs +37 -0
- package/internal/parse.mjs.map +1 -0
- package/internal/qs/formats.d.mts +7 -0
- package/internal/qs/formats.d.mts.map +1 -0
- package/internal/qs/formats.d.ts +7 -0
- package/internal/qs/formats.d.ts.map +1 -0
- package/internal/qs/formats.js +13 -0
- package/internal/qs/formats.js.map +1 -0
- package/internal/qs/formats.mjs +9 -0
- package/internal/qs/formats.mjs.map +1 -0
- package/internal/qs/index.d.mts +10 -0
- package/internal/qs/index.d.mts.map +1 -0
- package/internal/qs/index.d.ts +10 -0
- package/internal/qs/index.d.ts.map +1 -0
- package/internal/qs/index.js +14 -0
- package/internal/qs/index.js.map +1 -0
- package/internal/qs/index.mjs +10 -0
- package/internal/qs/index.mjs.map +1 -0
- package/internal/qs/stringify.d.mts +3 -0
- package/internal/qs/stringify.d.mts.map +1 -0
- package/internal/qs/stringify.d.ts +3 -0
- package/internal/qs/stringify.d.ts.map +1 -0
- package/internal/qs/stringify.js +277 -0
- package/internal/qs/stringify.js.map +1 -0
- package/internal/qs/stringify.mjs +274 -0
- package/internal/qs/stringify.mjs.map +1 -0
- package/internal/qs/types.d.mts +57 -0
- package/internal/qs/types.d.mts.map +1 -0
- package/internal/qs/types.d.ts +57 -0
- package/internal/qs/types.d.ts.map +1 -0
- package/internal/qs/types.js +3 -0
- package/internal/qs/types.js.map +1 -0
- package/internal/qs/types.mjs +2 -0
- package/internal/qs/types.mjs.map +1 -0
- package/internal/qs/utils.d.mts +15 -0
- package/internal/qs/utils.d.mts.map +1 -0
- package/internal/qs/utils.d.ts +15 -0
- package/internal/qs/utils.d.ts.map +1 -0
- package/internal/qs/utils.js +230 -0
- package/internal/qs/utils.js.map +1 -0
- package/internal/qs/utils.mjs +217 -0
- package/internal/qs/utils.mjs.map +1 -0
- package/internal/request-options.d.mts +78 -0
- package/internal/request-options.d.mts.map +1 -0
- package/internal/request-options.d.ts +78 -0
- package/internal/request-options.d.ts.map +1 -0
- package/internal/request-options.js +13 -0
- package/internal/request-options.js.map +1 -0
- package/internal/request-options.mjs +9 -0
- package/internal/request-options.mjs.map +1 -0
- package/internal/shim-types.d.mts +17 -0
- package/internal/shim-types.d.mts.map +1 -0
- package/internal/shim-types.d.ts +17 -0
- package/internal/shim-types.d.ts.map +1 -0
- package/internal/shim-types.js +9 -0
- package/internal/shim-types.js.map +1 -0
- package/internal/shim-types.mjs +8 -0
- package/internal/shim-types.mjs.map +1 -0
- package/internal/shims.d.mts +26 -0
- package/internal/shims.d.mts.map +1 -0
- package/internal/shims.d.ts +26 -0
- package/internal/shims.d.ts.map +1 -0
- package/internal/shims.js +97 -0
- package/internal/shims.js.map +1 -0
- package/internal/shims.mjs +90 -0
- package/internal/shims.mjs.map +1 -0
- package/internal/to-file.d.mts +45 -0
- package/internal/to-file.d.mts.map +1 -0
- package/internal/to-file.d.ts +45 -0
- package/internal/to-file.d.ts.map +1 -0
- package/internal/to-file.js +91 -0
- package/internal/to-file.js.map +1 -0
- package/internal/to-file.mjs +88 -0
- package/internal/to-file.mjs.map +1 -0
- package/internal/tslib.js +81 -0
- package/internal/tslib.mjs +17 -0
- package/internal/types.d.mts +69 -0
- package/internal/types.d.mts.map +1 -0
- package/internal/types.d.ts +69 -0
- package/internal/types.d.ts.map +1 -0
- package/internal/types.js +3 -0
- package/internal/types.js.map +1 -0
- package/internal/types.mjs +2 -0
- package/internal/types.mjs.map +1 -0
- package/internal/uploads.d.mts +42 -0
- package/internal/uploads.d.mts.map +1 -0
- package/internal/uploads.d.ts +42 -0
- package/internal/uploads.d.ts.map +1 -0
- package/internal/uploads.js +141 -0
- package/internal/uploads.js.map +1 -0
- package/internal/uploads.mjs +131 -0
- package/internal/uploads.mjs.map +1 -0
- package/internal/utils/base64.d.mts +3 -0
- package/internal/utils/base64.d.mts.map +1 -0
- package/internal/utils/base64.d.ts +3 -0
- package/internal/utils/base64.d.ts.map +1 -0
- package/internal/utils/base64.js +37 -0
- package/internal/utils/base64.js.map +1 -0
- package/internal/utils/base64.mjs +32 -0
- package/internal/utils/base64.mjs.map +1 -0
- package/internal/utils/bytes.d.mts +4 -0
- package/internal/utils/bytes.d.mts.map +1 -0
- package/internal/utils/bytes.d.ts +4 -0
- package/internal/utils/bytes.d.ts.map +1 -0
- package/internal/utils/bytes.js +31 -0
- package/internal/utils/bytes.js.map +1 -0
- package/internal/utils/bytes.mjs +26 -0
- package/internal/utils/bytes.mjs.map +1 -0
- package/internal/utils/env.d.mts +9 -0
- package/internal/utils/env.d.mts.map +1 -0
- package/internal/utils/env.d.ts +9 -0
- package/internal/utils/env.d.ts.map +1 -0
- package/internal/utils/env.js +21 -0
- package/internal/utils/env.js.map +1 -0
- package/internal/utils/env.mjs +17 -0
- package/internal/utils/env.mjs.map +1 -0
- package/internal/utils/log.d.mts +37 -0
- package/internal/utils/log.d.mts.map +1 -0
- package/internal/utils/log.d.ts +37 -0
- package/internal/utils/log.d.ts.map +1 -0
- package/internal/utils/log.js +84 -0
- package/internal/utils/log.js.map +1 -0
- package/internal/utils/log.mjs +78 -0
- package/internal/utils/log.mjs.map +1 -0
- package/internal/utils/path.d.mts +15 -0
- package/internal/utils/path.d.mts.map +1 -0
- package/internal/utils/path.d.ts +15 -0
- package/internal/utils/path.d.ts.map +1 -0
- package/internal/utils/path.js +79 -0
- package/internal/utils/path.js.map +1 -0
- package/internal/utils/path.mjs +74 -0
- package/internal/utils/path.mjs.map +1 -0
- package/internal/utils/query.d.mts +2 -0
- package/internal/utils/query.d.mts.map +1 -0
- package/internal/utils/query.d.ts +2 -0
- package/internal/utils/query.d.ts.map +1 -0
- package/internal/utils/query.js +9 -0
- package/internal/utils/query.js.map +1 -0
- package/internal/utils/query.mjs +5 -0
- package/internal/utils/query.mjs.map +1 -0
- package/internal/utils/sleep.d.mts +2 -0
- package/internal/utils/sleep.d.mts.map +1 -0
- package/internal/utils/sleep.d.ts +2 -0
- package/internal/utils/sleep.d.ts.map +1 -0
- package/internal/utils/sleep.js +6 -0
- package/internal/utils/sleep.js.map +1 -0
- package/internal/utils/sleep.mjs +2 -0
- package/internal/utils/sleep.mjs.map +1 -0
- package/internal/utils/uuid.d.mts +5 -0
- package/internal/utils/uuid.d.mts.map +1 -0
- package/internal/utils/uuid.d.ts +5 -0
- package/internal/utils/uuid.d.ts.map +1 -0
- package/internal/utils/uuid.js +21 -0
- package/internal/utils/uuid.js.map +1 -0
- package/internal/utils/uuid.mjs +17 -0
- package/internal/utils/uuid.mjs.map +1 -0
- package/internal/utils/values.d.mts +18 -0
- package/internal/utils/values.d.mts.map +1 -0
- package/internal/utils/values.d.ts +18 -0
- package/internal/utils/values.d.ts.map +1 -0
- package/internal/utils/values.js +111 -0
- package/internal/utils/values.js.map +1 -0
- package/internal/utils/values.mjs +93 -0
- package/internal/utils/values.mjs.map +1 -0
- package/internal/utils.d.mts +8 -0
- package/internal/utils.d.mts.map +1 -0
- package/internal/utils.d.ts +8 -0
- package/internal/utils.d.ts.map +1 -0
- package/internal/utils.js +11 -0
- package/internal/utils.js.map +1 -0
- package/internal/utils.mjs +8 -0
- package/internal/utils.mjs.map +1 -0
- package/internal/ws.d.mts +31 -0
- package/internal/ws.d.mts.map +1 -0
- package/internal/ws.d.ts +31 -0
- package/internal/ws.d.ts.map +1 -0
- package/internal/ws.js +39 -0
- package/internal/ws.js.map +1 -0
- package/internal/ws.mjs +36 -0
- package/internal/ws.mjs.map +1 -0
- package/lib/index.d.mts +5 -0
- package/lib/index.d.mts.map +1 -0
- package/lib/index.d.ts +5 -0
- package/lib/index.d.ts.map +1 -0
- package/lib/index.js +11 -0
- package/lib/index.js.map +1 -0
- package/lib/index.mjs +4 -0
- package/lib/index.mjs.map +1 -0
- package/lib/jsonParseFloat.d.mts +16 -0
- package/lib/jsonParseFloat.d.mts.map +1 -0
- package/lib/jsonParseFloat.d.ts +16 -0
- package/lib/jsonParseFloat.d.ts.map +1 -0
- package/lib/jsonParseFloat.js +77 -0
- package/lib/jsonParseFloat.js.map +1 -0
- package/lib/jsonParseFloat.mjs +74 -0
- package/lib/jsonParseFloat.mjs.map +1 -0
- package/lib/jwtAuth.d.mts +7 -0
- package/lib/jwtAuth.d.mts.map +1 -0
- package/lib/jwtAuth.d.ts +7 -0
- package/lib/jwtAuth.d.ts.map +1 -0
- package/lib/jwtAuth.js +33 -0
- package/lib/jwtAuth.js.map +1 -0
- package/lib/jwtAuth.mjs +30 -0
- package/lib/jwtAuth.mjs.map +1 -0
- package/lib/ws.d.mts +95 -0
- package/lib/ws.d.mts.map +1 -0
- package/lib/ws.d.ts +95 -0
- package/lib/ws.d.ts.map +1 -0
- package/lib/ws.js +229 -0
- package/lib/ws.js.map +1 -0
- package/lib/ws.mjs +223 -0
- package/lib/ws.mjs.map +1 -0
- package/package.json +169 -0
- package/pagination.d.mts +2 -0
- package/pagination.d.mts.map +1 -0
- package/pagination.d.ts +2 -0
- package/pagination.d.ts.map +1 -0
- package/pagination.js +6 -0
- package/pagination.js.map +1 -0
- package/pagination.mjs +2 -0
- package/pagination.mjs.map +1 -0
- package/resource.d.mts +2 -0
- package/resource.d.mts.map +1 -0
- package/resource.d.ts +2 -0
- package/resource.d.ts.map +1 -0
- package/resource.js +6 -0
- package/resource.js.map +1 -0
- package/resource.mjs +2 -0
- package/resource.mjs.map +1 -0
- package/resources/accounts.d.mts +48 -0
- package/resources/accounts.d.mts.map +1 -0
- package/resources/accounts.d.ts +48 -0
- package/resources/accounts.d.ts.map +1 -0
- package/resources/accounts.js +19 -0
- package/resources/accounts.js.map +1 -0
- package/resources/accounts.mjs +15 -0
- package/resources/accounts.mjs.map +1 -0
- package/resources/api-keys.d.mts +33 -0
- package/resources/api-keys.d.mts.map +1 -0
- package/resources/api-keys.d.ts +33 -0
- package/resources/api-keys.d.ts.map +1 -0
- package/resources/api-keys.js +19 -0
- package/resources/api-keys.js.map +1 -0
- package/resources/api-keys.mjs +15 -0
- package/resources/api-keys.mjs.map +1 -0
- package/resources/candles.d.mts +310 -0
- package/resources/candles.d.mts.map +1 -0
- package/resources/candles.d.ts +310 -0
- package/resources/candles.d.ts.map +1 -0
- package/resources/candles.js +117 -0
- package/resources/candles.js.map +1 -0
- package/resources/candles.mjs +113 -0
- package/resources/candles.mjs.map +1 -0
- package/resources/deposits.d.mts +373 -0
- package/resources/deposits.d.mts.map +1 -0
- package/resources/deposits.d.ts +373 -0
- package/resources/deposits.d.ts.map +1 -0
- package/resources/deposits.js +139 -0
- package/resources/deposits.js.map +1 -0
- package/resources/deposits.mjs +135 -0
- package/resources/deposits.mjs.map +1 -0
- package/resources/index.d.mts +15 -0
- package/resources/index.d.mts.map +1 -0
- package/resources/index.d.ts +15 -0
- package/resources/index.d.ts.map +1 -0
- package/resources/index.js +32 -0
- package/resources/index.js.map +1 -0
- package/resources/index.mjs +15 -0
- package/resources/index.mjs.map +1 -0
- package/resources/orderbooks.d.mts +134 -0
- package/resources/orderbooks.d.mts.map +1 -0
- package/resources/orderbooks.d.ts +134 -0
- package/resources/orderbooks.d.ts.map +1 -0
- package/resources/orderbooks.js +31 -0
- package/resources/orderbooks.js.map +1 -0
- package/resources/orderbooks.mjs +27 -0
- package/resources/orderbooks.mjs.map +1 -0
- package/resources/orders.d.mts +886 -0
- package/resources/orders.d.mts.map +1 -0
- package/resources/orders.d.ts +886 -0
- package/resources/orders.d.ts.map +1 -0
- package/resources/orders.js +250 -0
- package/resources/orders.js.map +1 -0
- package/resources/orders.mjs +246 -0
- package/resources/orders.mjs.map +1 -0
- package/resources/tickers.d.mts +184 -0
- package/resources/tickers.d.mts.map +1 -0
- package/resources/tickers.d.ts +184 -0
- package/resources/tickers.d.ts.map +1 -0
- package/resources/tickers.js +30 -0
- package/resources/tickers.js.map +1 -0
- package/resources/tickers.mjs +26 -0
- package/resources/tickers.mjs.map +1 -0
- package/resources/trades.d.mts +107 -0
- package/resources/trades.d.mts.map +1 -0
- package/resources/trades.d.ts +107 -0
- package/resources/trades.d.ts.map +1 -0
- package/resources/trades.js +19 -0
- package/resources/trades.js.map +1 -0
- package/resources/trades.mjs +15 -0
- package/resources/trades.mjs.map +1 -0
- package/resources/trading-pairs.d.mts +96 -0
- package/resources/trading-pairs.d.mts.map +1 -0
- package/resources/trading-pairs.d.ts +96 -0
- package/resources/trading-pairs.d.ts.map +1 -0
- package/resources/trading-pairs.js +19 -0
- package/resources/trading-pairs.js.map +1 -0
- package/resources/trading-pairs.mjs +15 -0
- package/resources/trading-pairs.mjs.map +1 -0
- package/resources/travel-rule.d.mts +139 -0
- package/resources/travel-rule.d.mts.map +1 -0
- package/resources/travel-rule.d.ts +139 -0
- package/resources/travel-rule.d.ts.map +1 -0
- package/resources/travel-rule.js +68 -0
- package/resources/travel-rule.js.map +1 -0
- package/resources/travel-rule.mjs +64 -0
- package/resources/travel-rule.mjs.map +1 -0
- package/resources/wallet-status.d.mts +74 -0
- package/resources/wallet-status.d.mts.map +1 -0
- package/resources/wallet-status.d.ts +74 -0
- package/resources/wallet-status.d.ts.map +1 -0
- package/resources/wallet-status.js +19 -0
- package/resources/wallet-status.js.map +1 -0
- package/resources/wallet-status.mjs +15 -0
- package/resources/wallet-status.mjs.map +1 -0
- package/resources/withdraws.d.mts +599 -0
- package/resources/withdraws.d.mts.map +1 -0
- package/resources/withdraws.d.ts +599 -0
- package/resources/withdraws.d.ts.map +1 -0
- package/resources/withdraws.js +139 -0
- package/resources/withdraws.js.map +1 -0
- package/resources/withdraws.mjs +135 -0
- package/resources/withdraws.mjs.map +1 -0
- package/resources/ws-private/index.d.mts +3 -0
- package/resources/ws-private/index.d.mts.map +1 -0
- package/resources/ws-private/index.d.ts +3 -0
- package/resources/ws-private/index.d.ts.map +1 -0
- package/resources/ws-private/index.js +6 -0
- package/resources/ws-private/index.js.map +1 -0
- package/resources/ws-private/index.mjs +2 -0
- package/resources/ws-private/index.mjs.map +1 -0
- package/resources/ws-private/internal-base.d.mts +58 -0
- package/resources/ws-private/internal-base.d.mts.map +1 -0
- package/resources/ws-private/internal-base.d.ts +58 -0
- package/resources/ws-private/internal-base.d.ts.map +1 -0
- package/resources/ws-private/internal-base.js +51 -0
- package/resources/ws-private/internal-base.js.map +1 -0
- package/resources/ws-private/internal-base.mjs +45 -0
- package/resources/ws-private/internal-base.mjs.map +1 -0
- package/resources/ws-private/ws-private.d.mts +224 -0
- package/resources/ws-private/ws-private.d.mts.map +1 -0
- package/resources/ws-private/ws-private.d.ts +224 -0
- package/resources/ws-private/ws-private.d.ts.map +1 -0
- package/resources/ws-private/ws-private.js +8 -0
- package/resources/ws-private/ws-private.js.map +1 -0
- package/resources/ws-private/ws-private.mjs +4 -0
- package/resources/ws-private/ws-private.mjs.map +1 -0
- package/resources/ws-private/ws.d.mts +85 -0
- package/resources/ws-private/ws.d.mts.map +1 -0
- package/resources/ws-private/ws.d.ts +85 -0
- package/resources/ws-private/ws.d.ts.map +1 -0
- package/resources/ws-private/ws.js +433 -0
- package/resources/ws-private/ws.js.map +1 -0
- package/resources/ws-private/ws.mjs +428 -0
- package/resources/ws-private/ws.mjs.map +1 -0
- package/resources/ws-private.d.mts +2 -0
- package/resources/ws-private.d.mts.map +1 -0
- package/resources/ws-private.d.ts +2 -0
- package/resources/ws-private.d.ts.map +1 -0
- package/resources/ws-private.js +5 -0
- package/resources/ws-private.js.map +1 -0
- package/resources/ws-private.mjs +2 -0
- package/resources/ws-private.mjs.map +1 -0
- package/resources/ws-public/index.d.mts +3 -0
- package/resources/ws-public/index.d.mts.map +1 -0
- package/resources/ws-public/index.d.ts +3 -0
- package/resources/ws-public/index.d.ts.map +1 -0
- package/resources/ws-public/index.js +6 -0
- package/resources/ws-public/index.js.map +1 -0
- package/resources/ws-public/index.mjs +2 -0
- package/resources/ws-public/index.mjs.map +1 -0
- package/resources/ws-public/internal-base.d.mts +58 -0
- package/resources/ws-public/internal-base.d.mts.map +1 -0
- package/resources/ws-public/internal-base.d.ts +58 -0
- package/resources/ws-public/internal-base.d.ts.map +1 -0
- package/resources/ws-public/internal-base.js +51 -0
- package/resources/ws-public/internal-base.js.map +1 -0
- package/resources/ws-public/internal-base.mjs +45 -0
- package/resources/ws-public/internal-base.mjs.map +1 -0
- package/resources/ws-public/ws-public.d.mts +427 -0
- package/resources/ws-public/ws-public.d.mts.map +1 -0
- package/resources/ws-public/ws-public.d.ts +427 -0
- package/resources/ws-public/ws-public.d.ts.map +1 -0
- package/resources/ws-public/ws-public.js +8 -0
- package/resources/ws-public/ws-public.js.map +1 -0
- package/resources/ws-public/ws-public.mjs +4 -0
- package/resources/ws-public/ws-public.mjs.map +1 -0
- package/resources/ws-public/ws.d.mts +85 -0
- package/resources/ws-public/ws.d.mts.map +1 -0
- package/resources/ws-public/ws.d.ts +85 -0
- package/resources/ws-public/ws.d.ts.map +1 -0
- package/resources/ws-public/ws.js +428 -0
- package/resources/ws-public/ws.js.map +1 -0
- package/resources/ws-public/ws.mjs +423 -0
- package/resources/ws-public/ws.mjs.map +1 -0
- package/resources/ws-public.d.mts +2 -0
- package/resources/ws-public.d.mts.map +1 -0
- package/resources/ws-public.d.ts +2 -0
- package/resources/ws-public.d.ts.map +1 -0
- package/resources/ws-public.js +5 -0
- package/resources/ws-public.js.map +1 -0
- package/resources/ws-public.mjs +2 -0
- package/resources/ws-public.mjs.map +1 -0
- package/resources.d.mts +2 -0
- package/resources.d.mts.map +1 -0
- package/resources.d.ts +2 -0
- package/resources.d.ts.map +1 -0
- package/resources.js +5 -0
- package/resources.js.map +1 -0
- package/resources.mjs +2 -0
- package/resources.mjs.map +1 -0
- package/src/api-promise.ts +2 -0
- package/src/client.ts +1112 -0
- package/src/core/EventEmitter.ts +114 -0
- package/src/core/README.md +3 -0
- package/src/core/api-promise.ts +91 -0
- package/src/core/error.ts +182 -0
- package/src/core/pagination.ts +195 -0
- package/src/core/resource.ts +10 -0
- package/src/core/uploads.ts +2 -0
- package/src/error.ts +2 -0
- package/src/index.ts +24 -0
- package/src/internal/README.md +3 -0
- package/src/internal/builtin-types.ts +92 -0
- package/src/internal/errors.ts +32 -0
- package/src/internal/headers.ts +96 -0
- package/src/internal/parse.ts +56 -0
- package/src/internal/qs/LICENSE.md +13 -0
- package/src/internal/qs/README.md +3 -0
- package/src/internal/qs/formats.ts +10 -0
- package/src/internal/qs/index.ts +13 -0
- package/src/internal/qs/stringify.ts +385 -0
- package/src/internal/qs/types.ts +71 -0
- package/src/internal/qs/utils.ts +265 -0
- package/src/internal/request-options.ts +92 -0
- package/src/internal/shim-types.ts +25 -0
- package/src/internal/shims.ts +106 -0
- package/src/internal/to-file.ts +154 -0
- package/src/internal/types.ts +94 -0
- package/src/internal/uploads.ts +187 -0
- package/src/internal/utils/base64.ts +39 -0
- package/src/internal/utils/bytes.ts +32 -0
- package/src/internal/utils/env.ts +17 -0
- package/src/internal/utils/log.ts +125 -0
- package/src/internal/utils/path.ts +88 -0
- package/src/internal/utils/query.ts +6 -0
- package/src/internal/utils/sleep.ts +2 -0
- package/src/internal/utils/uuid.ts +19 -0
- package/src/internal/utils/values.ts +104 -0
- package/src/internal/utils.ts +8 -0
- package/src/internal/ws.ts +68 -0
- package/src/lib/index.ts +4 -0
- package/src/lib/jsonParseFloat.ts +73 -0
- package/src/lib/jwtAuth.ts +39 -0
- package/src/lib/ws.ts +282 -0
- package/src/pagination.ts +2 -0
- package/src/resource.ts +2 -0
- package/src/resources/accounts.ts +59 -0
- package/src/resources/api-keys.ts +40 -0
- package/src/resources/candles.ts +392 -0
- package/src/resources/deposits.ts +484 -0
- package/src/resources/index.ts +102 -0
- package/src/resources/orderbooks.ts +170 -0
- package/src/resources/orders.ts +1102 -0
- package/src/resources/tickers.ts +233 -0
- package/src/resources/trades.ts +127 -0
- package/src/resources/trading-pairs.ts +120 -0
- package/src/resources/travel-rule.ts +181 -0
- package/src/resources/wallet-status.ts +87 -0
- package/src/resources/withdraws.ts +734 -0
- package/src/resources/ws-private/index.ts +3 -0
- package/src/resources/ws-private/internal-base.ts +99 -0
- package/src/resources/ws-private/ws-private.ts +283 -0
- package/src/resources/ws-private/ws.ts +529 -0
- package/src/resources/ws-private.ts +2 -0
- package/src/resources/ws-public/index.ts +3 -0
- package/src/resources/ws-public/internal-base.ts +99 -0
- package/src/resources/ws-public/ws-public.ts +561 -0
- package/src/resources/ws-public/ws.ts +525 -0
- package/src/resources/ws-public.ts +2 -0
- package/src/resources.ts +1 -0
- package/src/tsconfig.json +11 -0
- package/src/uploads.ts +2 -0
- package/src/version.ts +1 -0
- package/uploads.d.mts +2 -0
- package/uploads.d.mts.map +1 -0
- package/uploads.d.ts +2 -0
- package/uploads.d.ts.map +1 -0
- package/uploads.js +6 -0
- package/uploads.js.map +1 -0
- package/uploads.mjs +2 -0
- package/uploads.mjs.map +1 -0
- package/version.d.mts +2 -0
- package/version.d.mts.map +1 -0
- package/version.d.ts +2 -0
- package/version.d.ts.map +1 -0
- package/version.js +5 -0
- package/version.js.map +1 -0
- package/version.mjs +2 -0
- package/version.mjs.map +1 -0
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
type EventListener<Events, EventType extends keyof Events> = Events[EventType];
|
|
2
|
+
|
|
3
|
+
type EventListeners<Events, EventType extends keyof Events> = Array<{
|
|
4
|
+
listener: EventListener<Events, EventType>;
|
|
5
|
+
once?: boolean;
|
|
6
|
+
}>;
|
|
7
|
+
|
|
8
|
+
export type EventParameters<Events, EventType extends keyof Events> = {
|
|
9
|
+
[Event in EventType]: EventListener<Events, EventType> extends (...args: infer P) => any ? P : never;
|
|
10
|
+
}[EventType];
|
|
11
|
+
|
|
12
|
+
export class EventEmitter<EventTypes extends Record<string, (...args: any) => any>> {
|
|
13
|
+
#listeners: {
|
|
14
|
+
[Event in keyof EventTypes]?: EventListeners<EventTypes, Event>;
|
|
15
|
+
} = {};
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* Adds the listener function to the end of the listeners array for the event.
|
|
19
|
+
* No checks are made to see if the listener has already been added. Multiple calls passing
|
|
20
|
+
* the same combination of event and listener will result in the listener being added, and
|
|
21
|
+
* called, multiple times.
|
|
22
|
+
* @returns this, so that calls can be chained
|
|
23
|
+
*/
|
|
24
|
+
on<Event extends keyof EventTypes>(event: Event, listener: EventListener<EventTypes, Event>): this {
|
|
25
|
+
const listeners: EventListeners<EventTypes, Event> =
|
|
26
|
+
this.#listeners[event] || (this.#listeners[event] = []);
|
|
27
|
+
listeners.push({ listener });
|
|
28
|
+
return this;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* Removes the specified listener from the listener array for the event.
|
|
33
|
+
* off() will remove, at most, one instance of a listener from the listener array. If any single
|
|
34
|
+
* listener has been added multiple times to the listener array for the specified event, then
|
|
35
|
+
* off() must be called multiple times to remove each instance.
|
|
36
|
+
* @returns this, so that calls can be chained
|
|
37
|
+
*/
|
|
38
|
+
off<Event extends keyof EventTypes>(event: Event, listener: EventListener<EventTypes, Event>): this {
|
|
39
|
+
const listeners = this.#listeners[event];
|
|
40
|
+
if (!listeners) return this;
|
|
41
|
+
const index = listeners.findIndex((l) => l.listener === listener);
|
|
42
|
+
if (index >= 0) listeners.splice(index, 1);
|
|
43
|
+
return this;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* Adds a one-time listener function for the event. The next time the event is triggered,
|
|
48
|
+
* this listener is removed and then invoked.
|
|
49
|
+
* @returns this, so that calls can be chained
|
|
50
|
+
*/
|
|
51
|
+
once<Event extends keyof EventTypes>(event: Event, listener: EventListener<EventTypes, Event>): this {
|
|
52
|
+
const listeners: EventListeners<EventTypes, Event> =
|
|
53
|
+
this.#listeners[event] || (this.#listeners[event] = []);
|
|
54
|
+
listeners.push({ listener, once: true });
|
|
55
|
+
return this;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* This is similar to `.once()`, but returns a Promise that resolves the next time
|
|
60
|
+
* the event is triggered, instead of calling a listener callback.
|
|
61
|
+
* @returns a Promise that resolves the next time given event is triggered,
|
|
62
|
+
* or rejects if an error is emitted. (If you request the 'error' event,
|
|
63
|
+
* returns a promise that resolves with the error).
|
|
64
|
+
*
|
|
65
|
+
* Example:
|
|
66
|
+
*
|
|
67
|
+
* const message = await stream.emitted('message') // rejects if the stream errors
|
|
68
|
+
*/
|
|
69
|
+
emitted<Event extends keyof EventTypes>(
|
|
70
|
+
event: Event,
|
|
71
|
+
): Promise<
|
|
72
|
+
EventParameters<EventTypes, Event> extends [infer Param] ? Param
|
|
73
|
+
: EventParameters<EventTypes, Event> extends [] ? void
|
|
74
|
+
: EventParameters<EventTypes, Event>
|
|
75
|
+
> {
|
|
76
|
+
return new Promise((resolve, reject) => {
|
|
77
|
+
// TODO: handle errors
|
|
78
|
+
this.once(event, resolve as any);
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
protected _emit<Event extends keyof EventTypes>(
|
|
83
|
+
this: EventEmitter<EventTypes>,
|
|
84
|
+
event: Event,
|
|
85
|
+
...args: EventParameters<EventTypes, Event>
|
|
86
|
+
) {
|
|
87
|
+
const listeners: EventListeners<EventTypes, Event> | undefined = this.#listeners[event];
|
|
88
|
+
if (listeners) {
|
|
89
|
+
this.#listeners[event] = listeners.filter((l) => !l.once) as any;
|
|
90
|
+
listeners.forEach(({ listener }: any) => listener(...(args as any)));
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
protected _hasListener(event: keyof EventTypes): boolean {
|
|
95
|
+
const listeners = this.#listeners[event];
|
|
96
|
+
return listeners && listeners.length > 0;
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
/**
|
|
101
|
+
* An EventEmitter variant that exposes `_emit()` publicly.
|
|
102
|
+
*
|
|
103
|
+
* The base {@link EventEmitter} keeps `_emit` protected so that consumers
|
|
104
|
+
* can only listen, not dispatch. When you need a separate emitter instance
|
|
105
|
+
* that your own code can emit on, without exposing emit on the
|
|
106
|
+
* consumer-facing emitter, use this class.
|
|
107
|
+
*/
|
|
108
|
+
export class InternalEventEmitter<
|
|
109
|
+
EventTypes extends Record<string, (...args: any) => any>,
|
|
110
|
+
> extends EventEmitter<EventTypes> {
|
|
111
|
+
override _emit<Event extends keyof EventTypes>(event: Event, ...args: EventParameters<EventTypes, Event>) {
|
|
112
|
+
super._emit(event, ...args);
|
|
113
|
+
}
|
|
114
|
+
}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
|
|
2
|
+
import { type Upbit } from '../client';
|
|
3
|
+
|
|
4
|
+
import { type PromiseOrValue } from '../internal/types';
|
|
5
|
+
import { APIResponseProps, defaultParseResponse } from '../internal/parse';
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* A subclass of `Promise` providing additional helper methods
|
|
9
|
+
* for interacting with the SDK.
|
|
10
|
+
*/
|
|
11
|
+
export class APIPromise<T> extends Promise<T> {
|
|
12
|
+
private parsedPromise: Promise<T> | undefined;
|
|
13
|
+
#client: Upbit;
|
|
14
|
+
|
|
15
|
+
constructor(
|
|
16
|
+
client: Upbit,
|
|
17
|
+
private responsePromise: Promise<APIResponseProps>,
|
|
18
|
+
private parseResponse: (
|
|
19
|
+
client: Upbit,
|
|
20
|
+
props: APIResponseProps,
|
|
21
|
+
) => PromiseOrValue<T> = defaultParseResponse,
|
|
22
|
+
) {
|
|
23
|
+
super((resolve) => {
|
|
24
|
+
// this is maybe a bit weird but this has to be a no-op to not implicitly
|
|
25
|
+
// parse the response body; instead .then, .catch, .finally are overridden
|
|
26
|
+
// to parse the response
|
|
27
|
+
resolve(null as any);
|
|
28
|
+
});
|
|
29
|
+
this.#client = client;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
_thenUnwrap<U>(transform: (data: T, props: APIResponseProps) => U): APIPromise<U> {
|
|
33
|
+
return new APIPromise(this.#client, this.responsePromise, async (client, props) =>
|
|
34
|
+
transform(await this.parseResponse(client, props), props),
|
|
35
|
+
);
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* Gets the raw `Response` instance instead of parsing the response
|
|
40
|
+
* data.
|
|
41
|
+
*
|
|
42
|
+
* If you want to parse the response body but still get the `Response`
|
|
43
|
+
* instance, you can use {@link withResponse()}.
|
|
44
|
+
*
|
|
45
|
+
* Getting the wrong TypeScript type for `Response`?
|
|
46
|
+
* Try setting `"moduleResolution": "NodeNext"` or add `"lib": ["DOM"]`
|
|
47
|
+
* to your `tsconfig.json`.
|
|
48
|
+
*/
|
|
49
|
+
asResponse(): Promise<Response> {
|
|
50
|
+
return this.responsePromise.then((p) => p.response);
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
/**
|
|
54
|
+
* Gets the parsed response data and the raw `Response` instance.
|
|
55
|
+
*
|
|
56
|
+
* If you just want to get the raw `Response` instance without parsing it,
|
|
57
|
+
* you can use {@link asResponse()}.
|
|
58
|
+
*
|
|
59
|
+
* Getting the wrong TypeScript type for `Response`?
|
|
60
|
+
* Try setting `"moduleResolution": "NodeNext"` or add `"lib": ["DOM"]`
|
|
61
|
+
* to your `tsconfig.json`.
|
|
62
|
+
*/
|
|
63
|
+
async withResponse(): Promise<{ data: T; response: Response }> {
|
|
64
|
+
const [data, response] = await Promise.all([this.parse(), this.asResponse()]);
|
|
65
|
+
return { data, response };
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
private parse(): Promise<T> {
|
|
69
|
+
if (!this.parsedPromise) {
|
|
70
|
+
this.parsedPromise = this.responsePromise.then((data) => this.parseResponse(this.#client, data));
|
|
71
|
+
}
|
|
72
|
+
return this.parsedPromise;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
override then<TResult1 = T, TResult2 = never>(
|
|
76
|
+
onfulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | undefined | null,
|
|
77
|
+
onrejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | undefined | null,
|
|
78
|
+
): Promise<TResult1 | TResult2> {
|
|
79
|
+
return this.parse().then(onfulfilled, onrejected);
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
override catch<TResult = never>(
|
|
83
|
+
onrejected?: ((reason: any) => TResult | PromiseLike<TResult>) | undefined | null,
|
|
84
|
+
): Promise<T | TResult> {
|
|
85
|
+
return this.parse().catch(onrejected);
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
override finally(onfinally?: (() => void) | undefined | null): Promise<T> {
|
|
89
|
+
return this.parse().finally(onfinally);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
|
|
2
|
+
import { castToError } from '../internal/errors';
|
|
3
|
+
|
|
4
|
+
export class UpbitError extends Error {}
|
|
5
|
+
|
|
6
|
+
export class APIError<
|
|
7
|
+
TStatus extends number | undefined = number | undefined,
|
|
8
|
+
THeaders extends Headers | undefined = Headers | undefined,
|
|
9
|
+
TError extends Object | undefined = Object | undefined,
|
|
10
|
+
> extends UpbitError {
|
|
11
|
+
/** HTTP status for the response that caused the error */
|
|
12
|
+
readonly status: TStatus;
|
|
13
|
+
/** HTTP headers for the response that caused the error */
|
|
14
|
+
readonly headers: THeaders;
|
|
15
|
+
/** JSON body of the response that caused the error */
|
|
16
|
+
readonly error: TError;
|
|
17
|
+
/** Upbit API error name (e.g. "not_found", "invalid_query_payload") */
|
|
18
|
+
override readonly name: string;
|
|
19
|
+
|
|
20
|
+
constructor(
|
|
21
|
+
status: TStatus,
|
|
22
|
+
error: TError,
|
|
23
|
+
message: string | undefined,
|
|
24
|
+
headers: THeaders,
|
|
25
|
+
name?: string | null,
|
|
26
|
+
) {
|
|
27
|
+
super(`${APIError.makeMessage(status, error, message, name ?? null)}`);
|
|
28
|
+
this.status = status;
|
|
29
|
+
this.headers = headers;
|
|
30
|
+
this.error = error;
|
|
31
|
+
this.name = name ?? '';
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
private static makeMessage(
|
|
35
|
+
status: number | undefined,
|
|
36
|
+
error: any,
|
|
37
|
+
message: string | undefined,
|
|
38
|
+
name: string | null,
|
|
39
|
+
) {
|
|
40
|
+
const errorBody =
|
|
41
|
+
error && typeof error === 'object' && !Array.isArray(error) && Object.keys(error).length > 0 ?
|
|
42
|
+
error
|
|
43
|
+
: undefined;
|
|
44
|
+
const msg =
|
|
45
|
+
message ??
|
|
46
|
+
(errorBody?.message ?
|
|
47
|
+
typeof errorBody.message === 'string' ?
|
|
48
|
+
errorBody.message
|
|
49
|
+
: JSON.stringify(errorBody.message)
|
|
50
|
+
: errorBody ? JSON.stringify(errorBody)
|
|
51
|
+
: undefined);
|
|
52
|
+
|
|
53
|
+
if (status && msg) {
|
|
54
|
+
return name ? `${status} [${name}] ${msg}` : `${status} ${msg}`;
|
|
55
|
+
}
|
|
56
|
+
if (status) {
|
|
57
|
+
return `${status} status code (no body)`;
|
|
58
|
+
}
|
|
59
|
+
if (msg) {
|
|
60
|
+
return msg;
|
|
61
|
+
}
|
|
62
|
+
return '(no status code or body)';
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
private static parseErrorBody(error: any): { message: string | null; name: string | null } {
|
|
66
|
+
if (!error || typeof error !== 'object' || Array.isArray(error)) {
|
|
67
|
+
return { message: null, name: null };
|
|
68
|
+
}
|
|
69
|
+
// Shape B: {"error": {"name": "...", "message": "..."}}
|
|
70
|
+
const nested = error['error'];
|
|
71
|
+
if (nested != null && typeof nested === 'object' && !Array.isArray(nested)) {
|
|
72
|
+
const rawName = nested['name'];
|
|
73
|
+
const rawMessage = nested['message'];
|
|
74
|
+
return {
|
|
75
|
+
message: rawMessage != null ? String(rawMessage) : null,
|
|
76
|
+
name: rawName != null ? String(rawName) : null,
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
// Shape A: {"name": "...", "message": "..."}
|
|
80
|
+
const rawName = error['name'];
|
|
81
|
+
if (rawName != null) {
|
|
82
|
+
const rawMessage = error['message'];
|
|
83
|
+
return {
|
|
84
|
+
message: rawMessage != null ? String(rawMessage) : null,
|
|
85
|
+
name: String(rawName),
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
return { message: null, name: null };
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
static generate(
|
|
92
|
+
status: number | undefined,
|
|
93
|
+
errorResponse: Object | undefined,
|
|
94
|
+
message: string | undefined,
|
|
95
|
+
headers: Headers | undefined,
|
|
96
|
+
): APIError {
|
|
97
|
+
if (!status || !headers) {
|
|
98
|
+
return new APIConnectionError({ message, cause: castToError(errorResponse) });
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
const error = errorResponse as Record<string, any>;
|
|
102
|
+
const { name: errorName, message: parsedMessage } = APIError.parseErrorBody(error);
|
|
103
|
+
const resolvedMessage = parsedMessage ?? message;
|
|
104
|
+
|
|
105
|
+
if (status === 400) {
|
|
106
|
+
return new BadRequestError(status, error, resolvedMessage, headers, errorName);
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
if (status === 401) {
|
|
110
|
+
return new AuthenticationError(status, error, resolvedMessage, headers, errorName);
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
if (status === 403) {
|
|
114
|
+
return new PermissionDeniedError(status, error, resolvedMessage, headers, errorName);
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
if (status === 404) {
|
|
118
|
+
return new NotFoundError(status, error, resolvedMessage, headers, errorName);
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
if (status === 409) {
|
|
122
|
+
return new ConflictError(status, error, resolvedMessage, headers, errorName);
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
if (status === 418) {
|
|
126
|
+
return new RateLimitPenaltyError(status, error, resolvedMessage, headers, errorName);
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
if (status === 422) {
|
|
130
|
+
return new UnprocessableEntityError(status, error, resolvedMessage, headers, errorName);
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
if (status === 429) {
|
|
134
|
+
return new RateLimitError(status, error, resolvedMessage, headers, errorName);
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
if (status >= 500) {
|
|
138
|
+
return new InternalServerError(status, error, resolvedMessage, headers, errorName);
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
return new APIError(status, error, resolvedMessage, headers, errorName);
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
export class APIUserAbortError extends APIError<undefined, undefined, undefined> {
|
|
146
|
+
constructor({ message }: { message?: string } = {}) {
|
|
147
|
+
super(undefined, undefined, message || 'Request was aborted.', undefined);
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
export class APIConnectionError extends APIError<undefined, undefined, undefined> {
|
|
152
|
+
constructor({ message, cause }: { message?: string | undefined; cause?: Error | undefined }) {
|
|
153
|
+
super(undefined, undefined, message || 'Connection error.', undefined);
|
|
154
|
+
// in some environments the 'cause' property is already declared
|
|
155
|
+
// @ts-ignore
|
|
156
|
+
if (cause) this.cause = cause;
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
export class APIConnectionTimeoutError extends APIConnectionError {
|
|
161
|
+
constructor({ message }: { message?: string } = {}) {
|
|
162
|
+
super({ message: message ?? 'Request timed out.' });
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
export class BadRequestError extends APIError<400, Headers> {}
|
|
167
|
+
|
|
168
|
+
export class AuthenticationError extends APIError<401, Headers> {}
|
|
169
|
+
|
|
170
|
+
export class PermissionDeniedError extends APIError<403, Headers> {}
|
|
171
|
+
|
|
172
|
+
export class NotFoundError extends APIError<404, Headers> {}
|
|
173
|
+
|
|
174
|
+
export class ConflictError extends APIError<409, Headers> {}
|
|
175
|
+
|
|
176
|
+
export class UnprocessableEntityError extends APIError<422, Headers> {}
|
|
177
|
+
|
|
178
|
+
export class RateLimitError extends APIError<429, Headers> {}
|
|
179
|
+
|
|
180
|
+
export class RateLimitPenaltyError extends APIError<418, Headers> {}
|
|
181
|
+
|
|
182
|
+
export class InternalServerError extends APIError<number, Headers> {}
|
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
|
|
2
|
+
import { UpbitError } from './error';
|
|
3
|
+
import { FinalRequestOptions } from '../internal/request-options';
|
|
4
|
+
import { defaultParseResponse } from '../internal/parse';
|
|
5
|
+
import { type Upbit } from '../client';
|
|
6
|
+
import { APIPromise } from './api-promise';
|
|
7
|
+
import { type APIResponseProps } from '../internal/parse';
|
|
8
|
+
import { maybeObj } from '../internal/utils/values';
|
|
9
|
+
|
|
10
|
+
export type PageRequestOptions = Pick<FinalRequestOptions, 'query' | 'headers' | 'body' | 'path' | 'method'>;
|
|
11
|
+
|
|
12
|
+
export abstract class AbstractPage<Item> implements AsyncIterable<Item> {
|
|
13
|
+
#client: Upbit;
|
|
14
|
+
protected options: FinalRequestOptions;
|
|
15
|
+
|
|
16
|
+
protected response: Response;
|
|
17
|
+
protected body: unknown;
|
|
18
|
+
|
|
19
|
+
constructor(client: Upbit, response: Response, body: unknown, options: FinalRequestOptions) {
|
|
20
|
+
this.#client = client;
|
|
21
|
+
this.options = options;
|
|
22
|
+
this.response = response;
|
|
23
|
+
this.body = body;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
abstract nextPageRequestOptions(): PageRequestOptions | null;
|
|
27
|
+
|
|
28
|
+
abstract getPaginatedItems(): Item[];
|
|
29
|
+
|
|
30
|
+
hasNextPage(): boolean {
|
|
31
|
+
const items = this.getPaginatedItems();
|
|
32
|
+
if (!items.length) return false;
|
|
33
|
+
return this.nextPageRequestOptions() != null;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
async getNextPage(): Promise<this> {
|
|
37
|
+
const nextOptions = this.nextPageRequestOptions();
|
|
38
|
+
if (!nextOptions) {
|
|
39
|
+
throw new UpbitError(
|
|
40
|
+
'No next page expected; please check `.hasNextPage()` before calling `.getNextPage()`.',
|
|
41
|
+
);
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
return await this.#client.requestAPIList(this.constructor as any, nextOptions);
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
async *iterPages(): AsyncGenerator<this> {
|
|
48
|
+
let page: this = this;
|
|
49
|
+
yield page;
|
|
50
|
+
while (page.hasNextPage()) {
|
|
51
|
+
page = await page.getNextPage();
|
|
52
|
+
yield page;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
async *[Symbol.asyncIterator](): AsyncGenerator<Item> {
|
|
57
|
+
for await (const page of this.iterPages()) {
|
|
58
|
+
for (const item of page.getPaginatedItems()) {
|
|
59
|
+
yield item;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
/**
|
|
66
|
+
* This subclass of Promise will resolve to an instantiated Page once the request completes.
|
|
67
|
+
*
|
|
68
|
+
* It also implements AsyncIterable to allow auto-paginating iteration on an unawaited list call, eg:
|
|
69
|
+
*
|
|
70
|
+
* for await (const item of client.items.list()) {
|
|
71
|
+
* console.log(item)
|
|
72
|
+
* }
|
|
73
|
+
*/
|
|
74
|
+
export class PagePromise<
|
|
75
|
+
PageClass extends AbstractPage<Item>,
|
|
76
|
+
Item = ReturnType<PageClass['getPaginatedItems']>[number],
|
|
77
|
+
>
|
|
78
|
+
extends APIPromise<PageClass>
|
|
79
|
+
implements AsyncIterable<Item>
|
|
80
|
+
{
|
|
81
|
+
constructor(
|
|
82
|
+
client: Upbit,
|
|
83
|
+
request: Promise<APIResponseProps>,
|
|
84
|
+
Page: new (...args: ConstructorParameters<typeof AbstractPage>) => PageClass,
|
|
85
|
+
) {
|
|
86
|
+
super(
|
|
87
|
+
client,
|
|
88
|
+
request,
|
|
89
|
+
async (client, props) =>
|
|
90
|
+
new Page(client, props.response, await defaultParseResponse(client, props), props.options),
|
|
91
|
+
);
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
/**
|
|
95
|
+
* Allow auto-paginating iteration on an unawaited list call, eg:
|
|
96
|
+
*
|
|
97
|
+
* for await (const item of client.items.list()) {
|
|
98
|
+
* console.log(item)
|
|
99
|
+
* }
|
|
100
|
+
*/
|
|
101
|
+
async *[Symbol.asyncIterator](): AsyncGenerator<Item> {
|
|
102
|
+
const page = await this;
|
|
103
|
+
for await (const item of page) {
|
|
104
|
+
yield item;
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
export type PageNumberPageResponse<Item> = Item[];
|
|
110
|
+
|
|
111
|
+
export interface PageNumberPageParams {
|
|
112
|
+
page?: number;
|
|
113
|
+
|
|
114
|
+
limit?: number;
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
export class PageNumberPage<Item> extends AbstractPage<Item> {
|
|
118
|
+
items: Array<Item>;
|
|
119
|
+
|
|
120
|
+
constructor(
|
|
121
|
+
client: Upbit,
|
|
122
|
+
response: Response,
|
|
123
|
+
body: PageNumberPageResponse<Item>,
|
|
124
|
+
options: FinalRequestOptions,
|
|
125
|
+
) {
|
|
126
|
+
super(client, response, body, options);
|
|
127
|
+
|
|
128
|
+
this.items = body || [];
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
getPaginatedItems(): Item[] {
|
|
132
|
+
return this.items ?? [];
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
nextPageRequestOptions(): PageRequestOptions | null {
|
|
136
|
+
const query = this.options.query as PageNumberPageParams;
|
|
137
|
+
const currentPage = query?.page ?? 1;
|
|
138
|
+
const limit = query?.limit;
|
|
139
|
+
|
|
140
|
+
if (limit !== undefined && this.getPaginatedItems().length < limit) {
|
|
141
|
+
return null;
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
return {
|
|
145
|
+
...this.options,
|
|
146
|
+
query: {
|
|
147
|
+
...maybeObj(this.options.query),
|
|
148
|
+
page: currentPage + 1,
|
|
149
|
+
},
|
|
150
|
+
};
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
export type UuidCursorIDPageResponse<Item> = Item[];
|
|
155
|
+
|
|
156
|
+
export interface UuidCursorIDPageParams {
|
|
157
|
+
to?: string;
|
|
158
|
+
|
|
159
|
+
limit?: number;
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
export class UuidCursorIDPage<Item extends { uuid: string }> extends AbstractPage<Item> {
|
|
163
|
+
items: Array<Item>;
|
|
164
|
+
|
|
165
|
+
constructor(
|
|
166
|
+
client: Upbit,
|
|
167
|
+
response: Response,
|
|
168
|
+
body: UuidCursorIDPageResponse<Item>,
|
|
169
|
+
options: FinalRequestOptions,
|
|
170
|
+
) {
|
|
171
|
+
super(client, response, body, options);
|
|
172
|
+
|
|
173
|
+
this.items = body || [];
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
getPaginatedItems(): Item[] {
|
|
177
|
+
return this.items ?? [];
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
nextPageRequestOptions(): PageRequestOptions | null {
|
|
181
|
+
const items = this.getPaginatedItems();
|
|
182
|
+
const uuid = items[items.length - 1]?.uuid;
|
|
183
|
+
if (!uuid) {
|
|
184
|
+
return null;
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
return {
|
|
188
|
+
...this.options,
|
|
189
|
+
query: {
|
|
190
|
+
...maybeObj(this.options.query),
|
|
191
|
+
to: uuid,
|
|
192
|
+
},
|
|
193
|
+
};
|
|
194
|
+
}
|
|
195
|
+
}
|
package/src/error.ts
ADDED
package/src/index.ts
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
|
|
2
|
+
export { Upbit as default } from './client';
|
|
3
|
+
export { createJwtToken, WsStream, WsStreamManager, type WsStreamOptions } from './lib';
|
|
4
|
+
|
|
5
|
+
export { type Uploadable, toFile } from './core/uploads';
|
|
6
|
+
export { APIPromise } from './core/api-promise';
|
|
7
|
+
export { Upbit, type ClientOptions } from './client';
|
|
8
|
+
export { PagePromise } from './core/pagination';
|
|
9
|
+
export {
|
|
10
|
+
UpbitError,
|
|
11
|
+
APIError,
|
|
12
|
+
APIConnectionError,
|
|
13
|
+
APIConnectionTimeoutError,
|
|
14
|
+
APIUserAbortError,
|
|
15
|
+
NotFoundError,
|
|
16
|
+
ConflictError,
|
|
17
|
+
RateLimitError,
|
|
18
|
+
RateLimitPenaltyError,
|
|
19
|
+
BadRequestError,
|
|
20
|
+
AuthenticationError,
|
|
21
|
+
InternalServerError,
|
|
22
|
+
PermissionDeniedError,
|
|
23
|
+
UnprocessableEntityError,
|
|
24
|
+
} from './core/error';
|