@honeybbq/teamspeak 0.0.1 → 1.0.0-beta.11
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 +21 -0
- package/README.md +749 -2
- package/dist/client/abort.d.ts +5 -0
- package/dist/client/abort.d.ts.map +1 -0
- package/dist/client/abort.js +23 -0
- package/dist/client/abort.js.map +1 -0
- package/dist/client/address.d.ts +17 -0
- package/dist/client/address.d.ts.map +1 -0
- package/dist/client/address.js +66 -0
- package/dist/client/address.js.map +1 -0
- package/dist/client/api/avatars.d.ts +65 -0
- package/dist/client/api/avatars.d.ts.map +1 -0
- package/dist/client/api/avatars.js +118 -0
- package/dist/client/api/avatars.js.map +1 -0
- package/dist/client/api/voice.d.ts +59 -0
- package/dist/client/api/voice.d.ts.map +1 -0
- package/dist/client/api/voice.js +110 -0
- package/dist/client/api/voice.js.map +1 -0
- package/dist/client/capabilities.d.ts +68 -0
- package/dist/client/capabilities.d.ts.map +1 -0
- package/dist/client/capabilities.js +59 -0
- package/dist/client/capabilities.js.map +1 -0
- package/dist/client/client.d.ts +235 -0
- package/dist/client/client.d.ts.map +1 -0
- package/dist/client/client.js +1666 -0
- package/dist/client/client.js.map +1 -0
- package/dist/client/commands.d.ts +66 -0
- package/dist/client/commands.d.ts.map +1 -0
- package/dist/client/commands.js +168 -0
- package/dist/client/commands.js.map +1 -0
- package/dist/client/connection-info.d.ts +14 -0
- package/dist/client/connection-info.d.ts.map +1 -0
- package/dist/client/connection-info.js +47 -0
- package/dist/client/connection-info.js.map +1 -0
- package/dist/client/crypto/crypt-ops.d.ts +7 -0
- package/dist/client/crypto/crypt-ops.d.ts.map +1 -0
- package/dist/client/crypto/crypt-ops.js +2 -0
- package/dist/client/crypto/crypt-ops.js.map +1 -0
- package/dist/client/crypto/crypt.d.ts +37 -0
- package/dist/client/crypto/crypt.d.ts.map +1 -0
- package/dist/client/crypto/crypt.js +203 -0
- package/dist/client/crypto/crypt.js.map +1 -0
- package/dist/client/crypto/eax.d.ts +12 -0
- package/dist/client/crypto/eax.d.ts.map +1 -0
- package/dist/client/crypto/eax.js +118 -0
- package/dist/client/crypto/eax.js.map +1 -0
- package/dist/client/crypto/identity.d.ts +97 -0
- package/dist/client/crypto/identity.d.ts.map +1 -0
- package/dist/client/crypto/identity.js +412 -0
- package/dist/client/crypto/identity.js.map +1 -0
- package/dist/client/crypto/index.d.ts +7 -0
- package/dist/client/crypto/index.d.ts.map +1 -0
- package/dist/client/crypto/index.js +5 -0
- package/dist/client/crypto/index.js.map +1 -0
- package/dist/client/crypto/primitives.d.ts +43 -0
- package/dist/client/crypto/primitives.d.ts.map +1 -0
- package/dist/client/crypto/primitives.js +116 -0
- package/dist/client/crypto/primitives.js.map +1 -0
- package/dist/client/diagnostics.d.ts +45 -0
- package/dist/client/diagnostics.d.ts.map +1 -0
- package/dist/client/diagnostics.js +30 -0
- package/dist/client/diagnostics.js.map +1 -0
- package/dist/client/discovery/index.d.ts +2 -0
- package/dist/client/discovery/index.d.ts.map +1 -0
- package/dist/client/discovery/index.js +2 -0
- package/dist/client/discovery/index.js.map +1 -0
- package/dist/client/discovery/resolver.d.ts +26 -0
- package/dist/client/discovery/resolver.d.ts.map +1 -0
- package/dist/client/discovery/resolver.js +275 -0
- package/dist/client/discovery/resolver.js.map +1 -0
- package/dist/client/errors.d.ts +82 -0
- package/dist/client/errors.d.ts.map +1 -0
- package/dist/client/errors.js +201 -0
- package/dist/client/errors.js.map +1 -0
- package/dist/client/events.d.ts +3 -0
- package/dist/client/events.d.ts.map +1 -0
- package/dist/client/events.js +8 -0
- package/dist/client/events.js.map +1 -0
- package/dist/client/handshake/crypt-handshake.d.ts +17 -0
- package/dist/client/handshake/crypt-handshake.d.ts.map +1 -0
- package/dist/client/handshake/crypt-handshake.js +128 -0
- package/dist/client/handshake/crypt-handshake.js.map +1 -0
- package/dist/client/handshake/crypt-init2.d.ts +7 -0
- package/dist/client/handshake/crypt-init2.d.ts.map +1 -0
- package/dist/client/handshake/crypt-init2.js +37 -0
- package/dist/client/handshake/crypt-init2.js.map +1 -0
- package/dist/client/handshake/index.d.ts +4 -0
- package/dist/client/handshake/index.d.ts.map +1 -0
- package/dist/client/handshake/index.js +4 -0
- package/dist/client/handshake/index.js.map +1 -0
- package/dist/client/handshake/license.d.ts +35 -0
- package/dist/client/handshake/license.d.ts.map +1 -0
- package/dist/client/handshake/license.js +169 -0
- package/dist/client/handshake/license.js.map +1 -0
- package/dist/client/handshake.d.ts +27 -0
- package/dist/client/handshake.d.ts.map +1 -0
- package/dist/client/handshake.js +126 -0
- package/dist/client/handshake.js.map +1 -0
- package/dist/client/helpers.d.ts +6 -0
- package/dist/client/helpers.d.ts.map +1 -0
- package/dist/client/helpers.js +13 -0
- package/dist/client/helpers.js.map +1 -0
- package/dist/client/hooks.d.ts +7 -0
- package/dist/client/hooks.d.ts.map +1 -0
- package/dist/client/hooks.js +28 -0
- package/dist/client/hooks.js.map +1 -0
- package/dist/client/index.d.ts +28 -0
- package/dist/client/index.d.ts.map +1 -0
- package/dist/client/index.js +29 -0
- package/dist/client/index.js.map +1 -0
- package/dist/client/reconnect.d.ts +12 -0
- package/dist/client/reconnect.d.ts.map +1 -0
- package/dist/client/reconnect.js +44 -0
- package/dist/client/reconnect.js.map +1 -0
- package/dist/client/throttle.d.ts +20 -0
- package/dist/client/throttle.d.ts.map +1 -0
- package/dist/client/throttle.js +83 -0
- package/dist/client/throttle.js.map +1 -0
- package/dist/client/trace.d.ts +223 -0
- package/dist/client/trace.d.ts.map +1 -0
- package/dist/client/trace.js +13 -0
- package/dist/client/trace.js.map +1 -0
- package/dist/client/transfer.d.ts +111 -0
- package/dist/client/transfer.d.ts.map +1 -0
- package/dist/client/transfer.js +243 -0
- package/dist/client/transfer.js.map +1 -0
- package/dist/client/transport/generation-window.d.ts +30 -0
- package/dist/client/transport/generation-window.d.ts.map +1 -0
- package/dist/client/transport/generation-window.js +97 -0
- package/dist/client/transport/generation-window.js.map +1 -0
- package/dist/client/transport/handler.d.ts +79 -0
- package/dist/client/transport/handler.d.ts.map +1 -0
- package/dist/client/transport/handler.js +868 -0
- package/dist/client/transport/handler.js.map +1 -0
- package/dist/client/transport/index.d.ts +6 -0
- package/dist/client/transport/index.d.ts.map +1 -0
- package/dist/client/transport/index.js +5 -0
- package/dist/client/transport/index.js.map +1 -0
- package/dist/client/transport/packet.d.ts +36 -0
- package/dist/client/transport/packet.d.ts.map +1 -0
- package/dist/client/transport/packet.js +55 -0
- package/dist/client/transport/packet.js.map +1 -0
- package/dist/client/transport/quicklz.d.ts +24 -0
- package/dist/client/transport/quicklz.d.ts.map +1 -0
- package/dist/client/transport/quicklz.js +179 -0
- package/dist/client/transport/quicklz.js.map +1 -0
- package/dist/client/transport/traffic.d.ts +43 -0
- package/dist/client/transport/traffic.d.ts.map +1 -0
- package/dist/client/transport/traffic.js +90 -0
- package/dist/client/transport/traffic.js.map +1 -0
- package/dist/client/types.d.ts +402 -0
- package/dist/client/types.d.ts.map +1 -0
- package/dist/client/types.js +113 -0
- package/dist/client/types.js.map +1 -0
- package/dist/client/view.d.ts +162 -0
- package/dist/client/view.d.ts.map +1 -0
- package/dist/client/view.js +228 -0
- package/dist/client/view.js.map +1 -0
- package/dist/core/api/avatars.d.ts +26 -0
- package/dist/core/api/avatars.d.ts.map +1 -0
- package/dist/core/api/avatars.js +37 -0
- package/dist/core/api/avatars.js.map +1 -0
- package/dist/core/api/channels.d.ts +191 -0
- package/dist/core/api/channels.d.ts.map +1 -0
- package/dist/core/api/channels.js +174 -0
- package/dist/core/api/channels.js.map +1 -0
- package/dist/core/api/clients.d.ts +562 -0
- package/dist/core/api/clients.d.ts.map +1 -0
- package/dist/core/api/clients.js +435 -0
- package/dist/core/api/clients.js.map +1 -0
- package/dist/core/api/command.d.ts +400 -0
- package/dist/core/api/command.d.ts.map +1 -0
- package/dist/core/api/command.js +462 -0
- package/dist/core/api/command.js.map +1 -0
- package/dist/core/api/credentials.d.ts +186 -0
- package/dist/core/api/credentials.d.ts.map +1 -0
- package/dist/core/api/credentials.js +144 -0
- package/dist/core/api/credentials.js.map +1 -0
- package/dist/core/api/files.d.ts +153 -0
- package/dist/core/api/files.d.ts.map +1 -0
- package/dist/core/api/files.js +185 -0
- package/dist/core/api/files.js.map +1 -0
- package/dist/core/api/groups.d.ts +301 -0
- package/dist/core/api/groups.d.ts.map +1 -0
- package/dist/core/api/groups.js +339 -0
- package/dist/core/api/groups.js.map +1 -0
- package/dist/core/api/icons.d.ts +67 -0
- package/dist/core/api/icons.d.ts.map +1 -0
- package/dist/core/api/icons.js +125 -0
- package/dist/core/api/icons.js.map +1 -0
- package/dist/core/api/instance.d.ts +197 -0
- package/dist/core/api/instance.d.ts.map +1 -0
- package/dist/core/api/instance.js +160 -0
- package/dist/core/api/instance.js.map +1 -0
- package/dist/core/api/moderation.d.ts +266 -0
- package/dist/core/api/moderation.d.ts.map +1 -0
- package/dist/core/api/moderation.js +258 -0
- package/dist/core/api/moderation.js.map +1 -0
- package/dist/core/api/parse.d.ts +36 -0
- package/dist/core/api/parse.d.ts.map +1 -0
- package/dist/core/api/parse.js +109 -0
- package/dist/core/api/parse.js.map +1 -0
- package/dist/core/api/server.d.ts +334 -0
- package/dist/core/api/server.d.ts.map +1 -0
- package/dist/core/api/server.js +324 -0
- package/dist/core/api/server.js.map +1 -0
- package/dist/core/channel-tree.d.ts +87 -0
- package/dist/core/channel-tree.d.ts.map +1 -0
- package/dist/core/channel-tree.js +378 -0
- package/dist/core/channel-tree.js.map +1 -0
- package/dist/core/command/command.d.ts +20 -0
- package/dist/core/command/command.d.ts.map +1 -0
- package/dist/core/command/command.js +112 -0
- package/dist/core/command/command.js.map +1 -0
- package/dist/core/command/ids.d.ts +131 -0
- package/dist/core/command/ids.d.ts.map +1 -0
- package/dist/core/command/ids.js +87 -0
- package/dist/core/command/ids.js.map +1 -0
- package/dist/core/command/parser.d.ts +17 -0
- package/dist/core/command/parser.d.ts.map +1 -0
- package/dist/core/command/parser.js +65 -0
- package/dist/core/command/parser.js.map +1 -0
- package/dist/core/command/request.d.ts +61 -0
- package/dist/core/command/request.d.ts.map +1 -0
- package/dist/core/command/request.js +64 -0
- package/dist/core/command/request.js.map +1 -0
- package/dist/core/command/responses.d.ts +73 -0
- package/dist/core/command/responses.d.ts.map +1 -0
- package/dist/core/command/responses.js +97 -0
- package/dist/core/command/responses.js.map +1 -0
- package/dist/core/command-name.d.ts +349 -0
- package/dist/core/command-name.d.ts.map +1 -0
- package/dist/core/command-name.js +347 -0
- package/dist/core/command-name.js.map +1 -0
- package/dist/core/enums.d.ts +188 -0
- package/dist/core/enums.d.ts.map +1 -0
- package/dist/core/enums.js +172 -0
- package/dist/core/enums.js.map +1 -0
- package/dist/core/errorcode.d.ts +413 -0
- package/dist/core/errorcode.d.ts.map +1 -0
- package/dist/core/errorcode.js +410 -0
- package/dist/core/errorcode.js.map +1 -0
- package/dist/core/errors.d.ts +119 -0
- package/dist/core/errors.d.ts.map +1 -0
- package/dist/core/errors.js +241 -0
- package/dist/core/errors.js.map +1 -0
- package/dist/core/events.d.ts +404 -0
- package/dist/core/events.d.ts.map +1 -0
- package/dist/core/events.js +6 -0
- package/dist/core/events.js.map +1 -0
- package/dist/core/helpers.d.ts +42 -0
- package/dist/core/helpers.d.ts.map +1 -0
- package/dist/core/helpers.js +156 -0
- package/dist/core/helpers.js.map +1 -0
- package/dist/core/index.d.ts +41 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +40 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/internal.d.ts +24 -0
- package/dist/core/internal.d.ts.map +1 -0
- package/dist/core/internal.js +21 -0
- package/dist/core/internal.js.map +1 -0
- package/dist/core/middleware.d.ts +14 -0
- package/dist/core/middleware.d.ts.map +1 -0
- package/dist/core/middleware.js +18 -0
- package/dist/core/middleware.js.map +1 -0
- package/dist/core/notification-name.d.ts +160 -0
- package/dist/core/notification-name.d.ts.map +1 -0
- package/dist/core/notification-name.js +158 -0
- package/dist/core/notification-name.js.map +1 -0
- package/dist/core/notifications.d.ts +93 -0
- package/dist/core/notifications.d.ts.map +1 -0
- package/dist/core/notifications.js +301 -0
- package/dist/core/notifications.js.map +1 -0
- package/dist/core/permission-name.d.ts +1046 -0
- package/dist/core/permission-name.d.ts.map +1 -0
- package/dist/core/permission-name.js +1045 -0
- package/dist/core/permission-name.js.map +1 -0
- package/dist/core/permission.d.ts +31 -0
- package/dist/core/permission.d.ts.map +1 -0
- package/dist/core/permission.js +20 -0
- package/dist/core/permission.js.map +1 -0
- package/dist/core/property-name.d.ts +403 -0
- package/dist/core/property-name.d.ts.map +1 -0
- package/dist/core/property-name.js +405 -0
- package/dist/core/property-name.js.map +1 -0
- package/dist/core/reason.d.ts +39 -0
- package/dist/core/reason.d.ts.map +1 -0
- package/dist/core/reason.js +36 -0
- package/dist/core/reason.js.map +1 -0
- package/dist/core/reconnect.d.ts +59 -0
- package/dist/core/reconnect.d.ts.map +1 -0
- package/dist/core/reconnect.js +55 -0
- package/dist/core/reconnect.js.map +1 -0
- package/dist/core/types.d.ts +122 -0
- package/dist/core/types.d.ts.map +1 -0
- package/dist/core/types.js +27 -0
- package/dist/core/types.js.map +1 -0
- package/dist/query/client.d.ts +244 -0
- package/dist/query/client.d.ts.map +1 -0
- package/dist/query/client.js +1122 -0
- package/dist/query/client.js.map +1 -0
- package/dist/query/errors.d.ts +61 -0
- package/dist/query/errors.d.ts.map +1 -0
- package/dist/query/errors.js +100 -0
- package/dist/query/errors.js.map +1 -0
- package/dist/query/index.d.ts +36 -0
- package/dist/query/index.d.ts.map +1 -0
- package/dist/query/index.js +34 -0
- package/dist/query/index.js.map +1 -0
- package/dist/query/knownhosts.d.ts +61 -0
- package/dist/query/knownhosts.d.ts.map +1 -0
- package/dist/query/knownhosts.js +223 -0
- package/dist/query/knownhosts.js.map +1 -0
- package/dist/query/lines.d.ts +14 -0
- package/dist/query/lines.d.ts.map +1 -0
- package/dist/query/lines.js +29 -0
- package/dist/query/lines.js.map +1 -0
- package/dist/query/options.d.ts +206 -0
- package/dist/query/options.d.ts.map +1 -0
- package/dist/query/options.js +251 -0
- package/dist/query/options.js.map +1 -0
- package/dist/query/reconnect.d.ts +29 -0
- package/dist/query/reconnect.d.ts.map +1 -0
- package/dist/query/reconnect.js +87 -0
- package/dist/query/reconnect.js.map +1 -0
- package/dist/query/ssh.d.ts +385 -0
- package/dist/query/ssh.d.ts.map +1 -0
- package/dist/query/ssh.js +257 -0
- package/dist/query/ssh.js.map +1 -0
- package/dist/query/stream.d.ts +38 -0
- package/dist/query/stream.d.ts.map +1 -0
- package/dist/query/stream.js +70 -0
- package/dist/query/stream.js.map +1 -0
- package/dist/query/tcp.d.ts +38 -0
- package/dist/query/tcp.d.ts.map +1 -0
- package/dist/query/tcp.js +53 -0
- package/dist/query/tcp.js.map +1 -0
- package/dist/query/transport.d.ts +36 -0
- package/dist/query/transport.d.ts.map +1 -0
- package/dist/query/transport.js +2 -0
- package/dist/query/transport.js.map +1 -0
- package/dist/query/web.d.ts +78 -0
- package/dist/query/web.d.ts.map +1 -0
- package/dist/query/web.js +157 -0
- package/dist/query/web.js.map +1 -0
- package/dist/versions/index.d.ts +3094 -0
- package/dist/versions/index.d.ts.map +1 -0
- package/dist/versions/index.js +9237 -0
- package/dist/versions/index.js.map +1 -0
- package/package.json +119 -4
- package/src/client/abort.ts +24 -0
- package/src/client/address.ts +74 -0
- package/src/client/api/avatars.ts +164 -0
- package/src/client/api/voice.ts +177 -0
- package/src/client/capabilities.ts +106 -0
- package/src/client/client.ts +1976 -0
- package/src/client/commands.ts +201 -0
- package/src/client/connection-info.ts +52 -0
- package/src/client/crypto/crypt-ops.ts +6 -0
- package/src/client/crypto/crypt.ts +275 -0
- package/src/client/crypto/eax.ts +152 -0
- package/src/client/crypto/identity.ts +484 -0
- package/src/client/crypto/index.ts +21 -0
- package/src/client/crypto/primitives.ts +141 -0
- package/src/client/diagnostics.ts +58 -0
- package/src/client/discovery/index.ts +1 -0
- package/src/client/discovery/resolver.ts +325 -0
- package/src/client/errors.ts +217 -0
- package/src/client/events.ts +12 -0
- package/src/client/handshake/crypt-handshake.ts +157 -0
- package/src/client/handshake/crypt-init2.ts +48 -0
- package/src/client/handshake/index.ts +3 -0
- package/src/client/handshake/license.ts +208 -0
- package/src/client/handshake.ts +150 -0
- package/src/client/helpers.ts +10 -0
- package/src/client/hooks.ts +30 -0
- package/src/client/index.ts +97 -0
- package/src/client/reconnect.ts +43 -0
- package/src/client/throttle.ts +92 -0
- package/src/client/trace.ts +237 -0
- package/src/client/transfer.ts +436 -0
- package/src/client/transport/generation-window.ts +108 -0
- package/src/client/transport/handler.ts +1021 -0
- package/src/client/transport/index.ts +14 -0
- package/src/client/transport/packet.ts +69 -0
- package/src/client/transport/quicklz.ts +209 -0
- package/src/client/transport/traffic.ts +116 -0
- package/src/client/types.ts +478 -0
- package/src/client/view.ts +372 -0
- package/src/core/api/avatars.ts +40 -0
- package/src/core/api/channels.ts +420 -0
- package/src/core/api/clients.ts +1098 -0
- package/src/core/api/command.ts +737 -0
- package/src/core/api/credentials.ts +335 -0
- package/src/core/api/files.ts +411 -0
- package/src/core/api/groups.ts +730 -0
- package/src/core/api/icons.ts +175 -0
- package/src/core/api/instance.ts +369 -0
- package/src/core/api/moderation.ts +632 -0
- package/src/core/api/parse.ts +139 -0
- package/src/core/api/server.ts +769 -0
- package/src/core/channel-tree.ts +398 -0
- package/src/core/command/command.ts +125 -0
- package/src/core/command/ids.ts +153 -0
- package/src/core/command/parser.ts +68 -0
- package/src/core/command/request.ts +119 -0
- package/src/core/command/responses.ts +152 -0
- package/src/core/command-name.ts +350 -0
- package/src/core/enums.ts +215 -0
- package/src/core/errorcode.ts +412 -0
- package/src/core/errors.ts +266 -0
- package/src/core/events.ts +431 -0
- package/src/core/helpers.ts +161 -0
- package/src/core/index.ts +153 -0
- package/src/core/internal.ts +24 -0
- package/src/core/middleware.ts +24 -0
- package/src/core/notification-name.ts +161 -0
- package/src/core/notifications.ts +404 -0
- package/src/core/permission-name.ts +1162 -0
- package/src/core/permission.ts +34 -0
- package/src/core/property-name.ts +411 -0
- package/src/core/reason.ts +38 -0
- package/src/core/reconnect.ts +98 -0
- package/src/core/types.ts +150 -0
- package/src/query/client.ts +1303 -0
- package/src/query/errors.ts +108 -0
- package/src/query/index.ts +66 -0
- package/src/query/knownhosts.ts +257 -0
- package/src/query/lines.ts +28 -0
- package/src/query/options.ts +452 -0
- package/src/query/reconnect.ts +84 -0
- package/src/query/ssh.ts +674 -0
- package/src/query/stream.ts +91 -0
- package/src/query/tcp.ts +85 -0
- package/src/query/transport.ts +35 -0
- package/src/query/web.ts +234 -0
- package/src/versions/index.ts +10774 -0
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* What the connected server is, and what that means for the caller.
|
|
3
|
+
*
|
|
4
|
+
* TS3 and TS6 differ in ways that stay invisible until something breaks. The
|
|
5
|
+
* clearest: the server hashes a client's public key with SHA-1 on TS3 and
|
|
6
|
+
* SHA-256 on TS6, so a client that assumes either one computes a
|
|
7
|
+
* `client_unique_identifier` the other server never sends.
|
|
8
|
+
*
|
|
9
|
+
* Everything below comes from the handshake — `initserver` carries
|
|
10
|
+
* `virtualserver_version`, the one place the server names itself, along with
|
|
11
|
+
* its name, icon, banner and welcome message — so reading it costs no extra
|
|
12
|
+
* round trip.
|
|
13
|
+
*/
|
|
14
|
+
import { asServerID } from "@honeybbq/teamspeak";
|
|
15
|
+
import { parseIconID, parseUint64 } from "../core/internal.js";
|
|
16
|
+
import { uidAlgorithmForVersion } from "./crypto/identity.js";
|
|
17
|
+
/**
|
|
18
|
+
* Read what a server says about itself in `initserver`, or a version string
|
|
19
|
+
* alone, such as "6.0.0-beta13.1 [Build: 1]".
|
|
20
|
+
*/
|
|
21
|
+
export function parseServerCapabilities(initserver) {
|
|
22
|
+
const params = typeof initserver === "string" ? { virtualserver_version: initserver } : initserver;
|
|
23
|
+
const version = params["virtualserver_version"] ?? "";
|
|
24
|
+
const parsed = Number.parseInt(version, 10);
|
|
25
|
+
const major = Number.isNaN(parsed) ? 0 : parsed;
|
|
26
|
+
let family = "unknown";
|
|
27
|
+
if (major === 3)
|
|
28
|
+
family = "ts3";
|
|
29
|
+
else if (major >= 6)
|
|
30
|
+
family = "ts6";
|
|
31
|
+
return {
|
|
32
|
+
version,
|
|
33
|
+
major,
|
|
34
|
+
family,
|
|
35
|
+
uidAlgorithm: uidAlgorithmForVersion(version),
|
|
36
|
+
name: params["virtualserver_name"] ?? "",
|
|
37
|
+
iconID: parseIconID(params["virtualserver_icon_id"]),
|
|
38
|
+
hostBannerImageURL: params["virtualserver_hostbanner_gfx_url"]?.trim() || undefined,
|
|
39
|
+
welcomeMessage: params["virtualserver_welcomemessage"] ?? "",
|
|
40
|
+
serverID: asServerID(parseUint64(params["virtualserver_id"] ?? "")),
|
|
41
|
+
serverUID: params["virtualserver_unique_identifier"] ?? "",
|
|
42
|
+
hostMessage: params["virtualserver_hostmessage"] ?? "",
|
|
43
|
+
hostMessageMode: hostMessageMode(params["virtualserver_hostmessage_mode"]),
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Capabilities of a server that has not been connected to yet.
|
|
48
|
+
*
|
|
49
|
+
* The family is `unknown` — nothing has said which server this is — and
|
|
50
|
+
* `uidAlgorithm` is SHA-1, the TS3 hash.
|
|
51
|
+
*/
|
|
52
|
+
export function unknownServerCapabilities() {
|
|
53
|
+
return parseServerCapabilities("");
|
|
54
|
+
}
|
|
55
|
+
function hostMessageMode(value) {
|
|
56
|
+
const parsed = Number.parseInt(value ?? "", 10);
|
|
57
|
+
return Number.isNaN(parsed) ? 0 : parsed;
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=capabilities.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"capabilities.js","sourceRoot":"","sources":["../../src/client/capabilities.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,UAAU,EAAiD,MAAM,qBAAqB,CAAC;AAChG,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAC/D,OAAO,EAAE,sBAAsB,EAAqB,MAAM,sBAAsB,CAAC;AA2CjF;;;GAGG;AACH,MAAM,UAAU,uBAAuB,CACrC,UAAqD;IAErD,MAAM,MAAM,GACV,OAAO,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,qBAAqB,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC;IACtF,MAAM,OAAO,GAAG,MAAM,CAAC,uBAAuB,CAAC,IAAI,EAAE,CAAC;IACtD,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;IAC5C,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;IAEhD,IAAI,MAAM,GAAiB,SAAS,CAAC;IACrC,IAAI,KAAK,KAAK,CAAC;QAAE,MAAM,GAAG,KAAK,CAAC;SAC3B,IAAI,KAAK,IAAI,CAAC;QAAE,MAAM,GAAG,KAAK,CAAC;IAEpC,OAAO;QACL,OAAO;QACP,KAAK;QACL,MAAM;QACN,YAAY,EAAE,sBAAsB,CAAC,OAAO,CAAC;QAC7C,IAAI,EAAE,MAAM,CAAC,oBAAoB,CAAC,IAAI,EAAE;QACxC,MAAM,EAAE,WAAW,CAAC,MAAM,CAAC,uBAAuB,CAAC,CAAC;QACpD,kBAAkB,EAAE,MAAM,CAAC,kCAAkC,CAAC,EAAE,IAAI,EAAE,IAAI,SAAS;QACnF,cAAc,EAAE,MAAM,CAAC,8BAA8B,CAAC,IAAI,EAAE;QAC5D,QAAQ,EAAE,UAAU,CAAC,WAAW,CAAC,MAAM,CAAC,kBAAkB,CAAC,IAAI,EAAE,CAAC,CAAC;QACnE,SAAS,EAAE,MAAM,CAAC,iCAAiC,CAAC,IAAI,EAAE;QAC1D,WAAW,EAAE,MAAM,CAAC,2BAA2B,CAAC,IAAI,EAAE;QACtD,eAAe,EAAE,eAAe,CAAC,MAAM,CAAC,gCAAgC,CAAC,CAAC;KAC3E,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,yBAAyB;IACvC,OAAO,uBAAuB,CAAC,EAAE,CAAC,CAAC;AACrC,CAAC;AAED,SAAS,eAAe,CAAC,KAAyB;IAChD,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,KAAK,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;IAChD,OAAO,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;AAC3C,CAAC"}
|
|
@@ -0,0 +1,235 @@
|
|
|
1
|
+
import { type EventMap, type VoiceOptions, type WhisperTargets, type GroupWhisperTarget, type ClientOptions } from "./types.js";
|
|
2
|
+
import { type ChannelID, type ClientID, type Codec, type CommandOptions, type UID, type Listener, type Unsubscribe, ClientStatus } from "@honeybbq/teamspeak";
|
|
3
|
+
import type { Identity } from "./crypto/index.js";
|
|
4
|
+
import { type FileTransferOptions } from "./transfer.js";
|
|
5
|
+
import type { ClientVersion, CommandExecutor, CommandRequest } from "@honeybbq/teamspeak";
|
|
6
|
+
import type { FileUploadInfo, FileDownloadInfo } from "@honeybbq/teamspeak";
|
|
7
|
+
import type { Readable, Writable } from "node:stream";
|
|
8
|
+
import { type ServerCapabilities } from "./capabilities.js";
|
|
9
|
+
import { type ServerView } from "./view.js";
|
|
10
|
+
/**
|
|
11
|
+
* What clientinit sends about the connection, with the passwords already in
|
|
12
|
+
* their wire form, `base64(sha1(password))`: hashed once, when the client is
|
|
13
|
+
* made, so the plain text is never held.
|
|
14
|
+
*/
|
|
15
|
+
export interface ClientInitOptions {
|
|
16
|
+
readonly serverPasswordHash: string;
|
|
17
|
+
readonly defaultChannel: string;
|
|
18
|
+
readonly defaultChannelPasswordHash: string;
|
|
19
|
+
/** The privilege key (`client_default_token`), or `""`; dropped once a connection succeeds. */
|
|
20
|
+
readonly privilegeKey: string;
|
|
21
|
+
/** The meta data (`client_meta_data`), or `""`. */
|
|
22
|
+
readonly metaData: string;
|
|
23
|
+
/** The platform, version and signature, copied so later changes to the option have no effect. */
|
|
24
|
+
readonly version: ClientVersion;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* A TeamSpeak client over the voice protocol.
|
|
28
|
+
*
|
|
29
|
+
* Listeners run one at a time, in the order their events arrived, after the
|
|
30
|
+
* packet that carried them has been handled, so a listener may call the client
|
|
31
|
+
* and await an answer.
|
|
32
|
+
*/
|
|
33
|
+
export declare class Client implements CommandExecutor, AsyncDisposable {
|
|
34
|
+
#private;
|
|
35
|
+
constructor(identity: Identity, addr: string, nickname: string, options?: ClientOptions);
|
|
36
|
+
/**
|
|
37
|
+
* What this client knows of the server: the channel tree, the clients it
|
|
38
|
+
* has been told about, and itself. Always there, and `"empty"` until the
|
|
39
|
+
* first `connect()`.
|
|
40
|
+
*
|
|
41
|
+
* @experimental New in 1.x and may change in a minor release.
|
|
42
|
+
*/
|
|
43
|
+
get view(): ServerView;
|
|
44
|
+
/** Where the client is in its connection's life. */
|
|
45
|
+
get status(): ClientStatus;
|
|
46
|
+
/**
|
|
47
|
+
* Connect to the server. Resolves once the handshake completes.
|
|
48
|
+
*
|
|
49
|
+
* An address that cannot be one — no host, a port outside 1–65535 — rejects
|
|
50
|
+
* with an InvalidAddressError at once, before anything starts. A host name
|
|
51
|
+
* that does not resolve fails the attempt with a TeamspeakError whose
|
|
52
|
+
* `cause` is the lookup's error.
|
|
53
|
+
*
|
|
54
|
+
* A failed attempt rejects with its cause, such as the server's error for a
|
|
55
|
+
* rejected password. Aborting `signal` abandons the attempt and rejects with
|
|
56
|
+
* the signal's reason. The signal bounds only the connecting: once this
|
|
57
|
+
* resolves, the connection lasts until `disconnect()` or a drop.
|
|
58
|
+
* `connect()` does not retry; the `reconnect` option only retries a
|
|
59
|
+
* connection that drops after it was established.
|
|
60
|
+
*
|
|
61
|
+
* Called while a `disconnect()` is still saying goodbye, or while an earlier
|
|
62
|
+
* session's `disconnected` is still waiting to be delivered, this waits for
|
|
63
|
+
* that first, so the old session is closed, and its `disconnected`
|
|
64
|
+
* delivered, before the new one starts: no listener or `events()` iterator
|
|
65
|
+
* of the new session hears the old one end. A `disconnect()` called during
|
|
66
|
+
* that wait wins: this then rejects with a NotConnectedError.
|
|
67
|
+
*
|
|
68
|
+
* `connected` is delivered after this resolves, so a listener added right
|
|
69
|
+
* after `await client.connect()` still hears it.
|
|
70
|
+
*/
|
|
71
|
+
connect(options?: {
|
|
72
|
+
readonly signal?: AbortSignal | undefined;
|
|
73
|
+
}): Promise<void>;
|
|
74
|
+
/**
|
|
75
|
+
* Leave the server and close the connection.
|
|
76
|
+
*
|
|
77
|
+
* Says goodbye first, waiting for the server's acknowledgement for a second
|
|
78
|
+
* at most, or less if `signal` aborts sooner. The connection is closed
|
|
79
|
+
* either way. A `connect()` still waiting for its handshake rejects with a
|
|
80
|
+
* NotConnectedError, and so do the commands still waiting for an answer.
|
|
81
|
+
* Resolves once `disconnected` has been delivered to the listeners, so one
|
|
82
|
+
* added after `await client.disconnect()` does not hear it. Does nothing on
|
|
83
|
+
* a client that is not connected; called again while an earlier call is
|
|
84
|
+
* still saying goodbye, it waits for that one (and its message is the first
|
|
85
|
+
* call's).
|
|
86
|
+
*
|
|
87
|
+
* `reasonMessage` is what the server tells the other clients who see this
|
|
88
|
+
* one leave, in `clientLeave`'s `reasonMessage` (`reasonmsg` of
|
|
89
|
+
* `clientdisconnect`, sent with `reasonid=8`, `Reason.Disconnect`: measured
|
|
90
|
+
* on TeamSpeak 3 and 6, the server drops the message without it);
|
|
91
|
+
* default `"Shutdown"`.
|
|
92
|
+
*/
|
|
93
|
+
disconnect(options?: {
|
|
94
|
+
readonly signal?: AbortSignal | undefined;
|
|
95
|
+
readonly reasonMessage?: string | undefined;
|
|
96
|
+
}): Promise<void>;
|
|
97
|
+
/** `await using client = …` disconnects when the scope ends. */
|
|
98
|
+
[Symbol.asyncDispose](): Promise<void>;
|
|
99
|
+
/**
|
|
100
|
+
* Send a raw command line and return the rows that answer it: the escape
|
|
101
|
+
* hatch for a command the typed functions do not cover. The line is sent as
|
|
102
|
+
* given, so its values must already be escaped and any channel password
|
|
103
|
+
* already hashed. `CommandName` lists the command names.
|
|
104
|
+
*
|
|
105
|
+
* Rejects with a NotConnectedError unless the client is connected: while it
|
|
106
|
+
* is still connecting, the session's keys may not exist yet.
|
|
107
|
+
*/
|
|
108
|
+
exec(command: string, options?: CommandOptions): Promise<Record<string, string>[]>;
|
|
109
|
+
/**
|
|
110
|
+
* Send a raw command line without waiting for an answer, for the few
|
|
111
|
+
* commands the server answers with nothing at all. `CommandName` lists
|
|
112
|
+
* the command names.
|
|
113
|
+
*
|
|
114
|
+
* Commands are paced by a flood throttle; aborting `signal` while this waits
|
|
115
|
+
* for its turn rejects with the signal's reason and sends nothing. Rejects
|
|
116
|
+
* with a NotConnectedError unless the client is connected.
|
|
117
|
+
*/
|
|
118
|
+
execNoWait(command: string, options?: {
|
|
119
|
+
readonly signal?: AbortSignal | undefined;
|
|
120
|
+
}): Promise<void>;
|
|
121
|
+
/**
|
|
122
|
+
* Send a typed command; this is the CommandExecutor the typed commands run on.
|
|
123
|
+
*
|
|
124
|
+
* The request passes through the `commandMiddleware` first. Channel
|
|
125
|
+
* passwords are then hashed, because that is this protocol's rule: the voice
|
|
126
|
+
* protocol expects `base64(sha1(password))`, where ServerQuery takes the
|
|
127
|
+
* password itself.
|
|
128
|
+
*/
|
|
129
|
+
send(request: CommandRequest, options?: CommandOptions): Promise<Record<string, string>[]>;
|
|
130
|
+
/**
|
|
131
|
+
* Listen for an event. Returns a function that removes the listener.
|
|
132
|
+
*
|
|
133
|
+
* The event is named by an {@link EventName} constant or by its string, and
|
|
134
|
+
* the listener's payload type follows from it:
|
|
135
|
+
*
|
|
136
|
+
* ```ts
|
|
137
|
+
* client.on(EventName.TextMessage, (message) => console.log(message.message));
|
|
138
|
+
* ```
|
|
139
|
+
*
|
|
140
|
+
* A listener that throws does not stop the others: the rest of the event's
|
|
141
|
+
* listeners, and the events after it, are still delivered, and the exception
|
|
142
|
+
* is rethrown on its own, from a microtask, so it surfaces as an
|
|
143
|
+
* `uncaughtException` just as an EventEmitter listener's would. An async
|
|
144
|
+
* listener's rejection is not caught, and surfaces as an unhandled
|
|
145
|
+
* rejection.
|
|
146
|
+
*/
|
|
147
|
+
on<K extends keyof EventMap>(event: K, listener: Listener<EventMap, K>): Unsubscribe;
|
|
148
|
+
/** Listen for the next occurrence of an event only. */
|
|
149
|
+
once<K extends keyof EventMap>(event: K, listener: Listener<EventMap, K>): Unsubscribe;
|
|
150
|
+
/**
|
|
151
|
+
* An event as an async iterator, for `for await`:
|
|
152
|
+
*
|
|
153
|
+
* ```ts
|
|
154
|
+
* for await (const message of client.events("textMessage", { signal })) { … }
|
|
155
|
+
* ```
|
|
156
|
+
*
|
|
157
|
+
* Events that arrive while the loop body runs are buffered, so none is
|
|
158
|
+
* missed. The buffer is unbounded: an iterator that is not consumed as fast
|
|
159
|
+
* as events arrive holds every one of them in memory until it is read, so
|
|
160
|
+
* stop iterating (or abort `signal`) when you stop reading. Voice is the
|
|
161
|
+
* exception: at most 256 `voiceData` frames are buffered, and the rest are
|
|
162
|
+
* dropped, as for a listener that falls behind.
|
|
163
|
+
*
|
|
164
|
+
* Iteration ends when the loop exits early (`break`, `return`, a throw), and
|
|
165
|
+
* — for every event but `disconnected` — when the client disconnects. When
|
|
166
|
+
* `signal` aborts, listening stops at once, whatever is buffered is
|
|
167
|
+
* discarded, and the pending and every later `next()` reject with the
|
|
168
|
+
* signal's reason, as `events.on` in Node does.
|
|
169
|
+
*
|
|
170
|
+
* `next()` may be called again before an earlier call has settled; the calls
|
|
171
|
+
* are answered in order.
|
|
172
|
+
*/
|
|
173
|
+
events<K extends keyof EventMap>(event: K, options?: {
|
|
174
|
+
readonly signal?: AbortSignal | undefined;
|
|
175
|
+
}): AsyncIterableIterator<EventMap[K]>;
|
|
176
|
+
/** This client's id on the server, assigned in the handshake; 0 before it. */
|
|
177
|
+
get clientID(): ClientID;
|
|
178
|
+
/**
|
|
179
|
+
* What the connected server is: version, generation, and the uid hash it
|
|
180
|
+
* uses. Read from `initserver`; before connecting the family is `unknown`
|
|
181
|
+
* and the uid hash SHA-1.
|
|
182
|
+
*/
|
|
183
|
+
get serverCapabilities(): ServerCapabilities;
|
|
184
|
+
/**
|
|
185
|
+
* Our own `client_unique_identifier`, hashed with the algorithm the connected
|
|
186
|
+
* server uses.
|
|
187
|
+
*
|
|
188
|
+
* TS3 uses SHA-1 and TS6 SHA-256, so this reads the algorithm learned during
|
|
189
|
+
* initserver rather than assuming one. Comparing a hard-coded SHA-1 UID to a
|
|
190
|
+
* TS6 server silently never matches.
|
|
191
|
+
*/
|
|
192
|
+
get uid(): UID;
|
|
193
|
+
/**
|
|
194
|
+
* The host this client connects to, as it was given, without the port: where
|
|
195
|
+
* the file transfer port is, for `uploadFileData` and the avatar and icon
|
|
196
|
+
* helpers.
|
|
197
|
+
*/
|
|
198
|
+
get host(): string;
|
|
199
|
+
/** The channel this client is in, as it last learned; 0 before connecting. */
|
|
200
|
+
get channelID(): ChannelID;
|
|
201
|
+
/**
|
|
202
|
+
* Send Opus voice directly to clients, to channels, or to both: the
|
|
203
|
+
* packet's direct form. Throws a NotConnectedError unless the client is
|
|
204
|
+
* connected, and a RangeError for no target at all, more than 32 clients,
|
|
205
|
+
* more than 255 channels, or an id the packet cannot hold. Whether a target
|
|
206
|
+
* hears it is the server's decision, from `i_client_whisper_power` against
|
|
207
|
+
* the target's `i_client_needed_whisper_power`.
|
|
208
|
+
*/
|
|
209
|
+
sendWhisper(data: Uint8Array, targets: WhisperTargets, codec: Codec): void;
|
|
210
|
+
/**
|
|
211
|
+
* Send Opus voice to a group of clients: a server group, a channel group,
|
|
212
|
+
* the channel commanders or everyone, within the channels the target's
|
|
213
|
+
* `scope` picks. The packet's group form; `sendWhisper` is the direct one.
|
|
214
|
+
* Throws a NotConnectedError unless the client is connected, and a
|
|
215
|
+
* RangeError for a type, scope or group id the packet cannot hold. Whether
|
|
216
|
+
* a client hears it is the server's decision, as for `sendWhisper`.
|
|
217
|
+
*/
|
|
218
|
+
sendGroupWhisper(data: Uint8Array, target: GroupWhisperTarget, codec: Codec): void;
|
|
219
|
+
/**
|
|
220
|
+
* Send one encoded audio frame to the channel this client is in. Throws a
|
|
221
|
+
* NotConnectedError unless the client is connected.
|
|
222
|
+
*/
|
|
223
|
+
sendVoice(data: Uint8Array, codec: Codec, options?: VoiceOptions): void;
|
|
224
|
+
/**
|
|
225
|
+
* Upload `data` over a negotiated transfer, through the client's
|
|
226
|
+
* `fileTransferSocketFactory` if it has one.
|
|
227
|
+
*/
|
|
228
|
+
uploadFileData(host: string, info: FileUploadInfo, data: Readable, options?: Pick<FileTransferOptions, "signal" | "trace">): Promise<void>;
|
|
229
|
+
/**
|
|
230
|
+
* Download a negotiated transfer into `dest`, through the client's
|
|
231
|
+
* `fileTransferSocketFactory` if it has one.
|
|
232
|
+
*/
|
|
233
|
+
downloadFileData(host: string, info: FileDownloadInfo, dest: Writable, options?: Pick<FileTransferOptions, "signal" | "trace">): Promise<void>;
|
|
234
|
+
}
|
|
235
|
+
//# sourceMappingURL=client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/client/client.ts"],"names":[],"mappings":"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"}
|