game_dig 0.0.1 → 0.2.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.
- checksums.yaml +4 -4
- data/.gitignore +3 -1
- data/CHANGELOG.md +13 -0
- data/README.md +89 -26
- data/Rakefile +8 -0
- data/cli/pry_nodo.rb +5 -0
- data/game_dig.gemspec +21 -14
- data/lib/custom_errors/cli_not_found.rb +4 -0
- data/lib/custom_errors/error.rb +4 -0
- data/lib/game_dig/helper.rb +51 -0
- data/lib/game_dig/node/gamedig-example.js +17 -0
- data/lib/game_dig/node/node_modules/.bin/fxparser +1 -0
- data/lib/game_dig/node/node_modules/.bin/gamedig +1 -0
- data/lib/game_dig/node/node_modules/.bin/seek-bunzip +1 -0
- data/lib/game_dig/node/node_modules/.bin/seek-table +1 -0
- data/lib/game_dig/node/node_modules/.yarn-integrity +73 -0
- data/lib/game_dig/node/node_modules/@sindresorhus/is/dist/index.d.ts +246 -0
- data/lib/game_dig/node/node_modules/@sindresorhus/is/dist/index.js +454 -0
- data/lib/game_dig/node/node_modules/@sindresorhus/is/dist/types.d.ts +32 -0
- data/lib/game_dig/node/node_modules/@sindresorhus/is/dist/types.js +2 -0
- data/lib/game_dig/node/node_modules/@sindresorhus/is/license +9 -0
- data/lib/game_dig/node/node_modules/@sindresorhus/is/package.json +76 -0
- data/lib/game_dig/node/node_modules/@sindresorhus/is/readme.md +698 -0
- data/lib/game_dig/node/node_modules/@szmarczak/http-timer/LICENSE +21 -0
- data/lib/game_dig/node/node_modules/@szmarczak/http-timer/README.md +93 -0
- data/lib/game_dig/node/node_modules/@szmarczak/http-timer/dist/source/index.d.ts +32 -0
- data/lib/game_dig/node/node_modules/@szmarczak/http-timer/dist/source/index.js +106 -0
- data/lib/game_dig/node/node_modules/@szmarczak/http-timer/package.json +89 -0
- data/lib/game_dig/node/node_modules/@types/http-cache-semantics/LICENSE +21 -0
- data/lib/game_dig/node/node_modules/@types/http-cache-semantics/README.md +15 -0
- data/lib/game_dig/node/node_modules/@types/http-cache-semantics/index.d.ts +165 -0
- data/lib/game_dig/node/node_modules/@types/http-cache-semantics/package.json +25 -0
- data/lib/game_dig/node/node_modules/any-promise/.jshintrc +4 -0
- data/lib/game_dig/node/node_modules/any-promise/.npmignore +7 -0
- data/lib/game_dig/node/node_modules/any-promise/LICENSE +19 -0
- data/lib/game_dig/node/node_modules/any-promise/README.md +161 -0
- data/lib/game_dig/node/node_modules/any-promise/implementation.d.ts +3 -0
- data/lib/game_dig/node/node_modules/any-promise/implementation.js +1 -0
- data/lib/game_dig/node/node_modules/any-promise/index.d.ts +73 -0
- data/lib/game_dig/node/node_modules/any-promise/index.js +1 -0
- data/lib/game_dig/node/node_modules/any-promise/loader.js +78 -0
- data/lib/game_dig/node/node_modules/any-promise/optional.js +6 -0
- data/lib/game_dig/node/node_modules/any-promise/package.json +45 -0
- data/lib/game_dig/node/node_modules/any-promise/register/bluebird.d.ts +1 -0
- data/lib/game_dig/node/node_modules/any-promise/register/bluebird.js +2 -0
- data/lib/game_dig/node/node_modules/any-promise/register/es6-promise.d.ts +1 -0
- data/lib/game_dig/node/node_modules/any-promise/register/es6-promise.js +2 -0
- data/lib/game_dig/node/node_modules/any-promise/register/lie.d.ts +1 -0
- data/lib/game_dig/node/node_modules/any-promise/register/lie.js +2 -0
- data/lib/game_dig/node/node_modules/any-promise/register/native-promise-only.d.ts +1 -0
- data/lib/game_dig/node/node_modules/any-promise/register/native-promise-only.js +2 -0
- data/lib/game_dig/node/node_modules/any-promise/register/pinkie.d.ts +1 -0
- data/lib/game_dig/node/node_modules/any-promise/register/pinkie.js +2 -0
- data/lib/game_dig/node/node_modules/any-promise/register/promise.d.ts +1 -0
- data/lib/game_dig/node/node_modules/any-promise/register/promise.js +2 -0
- data/lib/game_dig/node/node_modules/any-promise/register/q.d.ts +1 -0
- data/lib/game_dig/node/node_modules/any-promise/register/q.js +2 -0
- data/lib/game_dig/node/node_modules/any-promise/register/rsvp.d.ts +1 -0
- data/lib/game_dig/node/node_modules/any-promise/register/rsvp.js +2 -0
- data/lib/game_dig/node/node_modules/any-promise/register/vow.d.ts +1 -0
- data/lib/game_dig/node/node_modules/any-promise/register/vow.js +2 -0
- data/lib/game_dig/node/node_modules/any-promise/register/when.d.ts +1 -0
- data/lib/game_dig/node/node_modules/any-promise/register/when.js +2 -0
- data/lib/game_dig/node/node_modules/any-promise/register-shim.js +18 -0
- data/lib/game_dig/node/node_modules/any-promise/register.d.ts +17 -0
- data/lib/game_dig/node/node_modules/any-promise/register.js +94 -0
- data/lib/game_dig/node/node_modules/barse/.npmignore +2 -0
- data/lib/game_dig/node/node_modules/barse/.travis.yml +4 -0
- data/lib/game_dig/node/node_modules/barse/README.md +138 -0
- data/lib/game_dig/node/node_modules/barse/example/complete.js +34 -0
- data/lib/game_dig/node/node_modules/barse/example/next.js +21 -0
- data/lib/game_dig/node/node_modules/barse/index.js +282 -0
- data/lib/game_dig/node/node_modules/barse/node_modules/readable-stream/.npmignore +5 -0
- data/lib/game_dig/node/node_modules/barse/node_modules/readable-stream/LICENSE +18 -0
- data/lib/game_dig/node/node_modules/barse/node_modules/readable-stream/README.md +15 -0
- data/lib/game_dig/node/node_modules/barse/node_modules/readable-stream/duplex.js +1 -0
- data/lib/game_dig/node/node_modules/barse/node_modules/readable-stream/lib/_stream_duplex.js +89 -0
- data/lib/game_dig/node/node_modules/barse/node_modules/readable-stream/lib/_stream_passthrough.js +46 -0
- data/lib/game_dig/node/node_modules/barse/node_modules/readable-stream/lib/_stream_readable.js +982 -0
- data/lib/game_dig/node/node_modules/barse/node_modules/readable-stream/lib/_stream_transform.js +210 -0
- data/lib/game_dig/node/node_modules/barse/node_modules/readable-stream/lib/_stream_writable.js +386 -0
- data/lib/game_dig/node/node_modules/barse/node_modules/readable-stream/package.json +32 -0
- data/lib/game_dig/node/node_modules/barse/node_modules/readable-stream/passthrough.js +1 -0
- data/lib/game_dig/node/node_modules/barse/node_modules/readable-stream/readable.js +11 -0
- data/lib/game_dig/node/node_modules/barse/node_modules/readable-stream/transform.js +1 -0
- data/lib/game_dig/node/node_modules/barse/node_modules/readable-stream/writable.js +1 -0
- data/lib/game_dig/node/node_modules/barse/package.json +48 -0
- data/lib/game_dig/node/node_modules/barse/test/integration.js +37 -0
- data/lib/game_dig/node/node_modules/barse/test/loop.js +36 -0
- data/lib/game_dig/node/node_modules/barse/test/next.js +34 -0
- data/lib/game_dig/node/node_modules/barse/test/scope.js +18 -0
- data/lib/game_dig/node/node_modules/barse/test/string.js +33 -0
- data/lib/game_dig/node/node_modules/barse/test/vars.js +20 -0
- data/lib/game_dig/node/node_modules/cacheable-lookup/LICENSE +21 -0
- data/lib/game_dig/node/node_modules/cacheable-lookup/README.md +245 -0
- data/lib/game_dig/node/node_modules/cacheable-lookup/index.d.ts +144 -0
- data/lib/game_dig/node/node_modules/cacheable-lookup/package.json +61 -0
- data/lib/game_dig/node/node_modules/cacheable-lookup/source/index.js +452 -0
- data/lib/game_dig/node/node_modules/cacheable-request/README.md +335 -0
- data/lib/game_dig/node/node_modules/cacheable-request/dist/index.d.ts +17 -0
- data/lib/game_dig/node/node_modules/cacheable-request/dist/index.d.ts.map +1 -0
- data/lib/game_dig/node/node_modules/cacheable-request/dist/index.js +275 -0
- data/lib/game_dig/node/node_modules/cacheable-request/dist/index.js.map +1 -0
- data/lib/game_dig/node/node_modules/cacheable-request/dist/types.d.ts +106 -0
- data/lib/game_dig/node/node_modules/cacheable-request/dist/types.d.ts.map +1 -0
- data/lib/game_dig/node/node_modules/cacheable-request/dist/types.js +19 -0
- data/lib/game_dig/node/node_modules/cacheable-request/dist/types.js.map +1 -0
- data/lib/game_dig/node/node_modules/cacheable-request/node_modules/mimic-response/index.d.ts +29 -0
- data/lib/game_dig/node/node_modules/cacheable-request/node_modules/mimic-response/index.js +75 -0
- data/lib/game_dig/node/node_modules/cacheable-request/node_modules/mimic-response/license +9 -0
- data/lib/game_dig/node/node_modules/cacheable-request/node_modules/mimic-response/package.json +44 -0
- data/lib/game_dig/node/node_modules/cacheable-request/node_modules/mimic-response/readme.md +78 -0
- data/lib/game_dig/node/node_modules/cacheable-request/package.json +121 -0
- data/lib/game_dig/node/node_modules/commander/CHANGELOG.md +361 -0
- data/lib/game_dig/node/node_modules/commander/LICENSE +22 -0
- data/lib/game_dig/node/node_modules/commander/Readme.md +791 -0
- data/lib/game_dig/node/node_modules/commander/index.js +1881 -0
- data/lib/game_dig/node/node_modules/commander/package.json +51 -0
- data/lib/game_dig/node/node_modules/commander/typings/index.d.ts +410 -0
- data/lib/game_dig/node/node_modules/core-util-is/LICENSE +19 -0
- data/lib/game_dig/node/node_modules/core-util-is/README.md +3 -0
- data/lib/game_dig/node/node_modules/core-util-is/lib/util.js +107 -0
- data/lib/game_dig/node/node_modules/core-util-is/package.json +38 -0
- data/lib/game_dig/node/node_modules/decompress-response/index.d.ts +22 -0
- data/lib/game_dig/node/node_modules/decompress-response/index.js +58 -0
- data/lib/game_dig/node/node_modules/decompress-response/license +9 -0
- data/lib/game_dig/node/node_modules/decompress-response/package.json +56 -0
- data/lib/game_dig/node/node_modules/decompress-response/readme.md +48 -0
- data/lib/game_dig/node/node_modules/defer-to-connect/LICENSE +21 -0
- data/lib/game_dig/node/node_modules/defer-to-connect/README.md +38 -0
- data/lib/game_dig/node/node_modules/defer-to-connect/dist/source/index.d.ts +10 -0
- data/lib/game_dig/node/node_modules/defer-to-connect/dist/source/index.js +47 -0
- data/lib/game_dig/node/node_modules/defer-to-connect/package.json +71 -0
- data/lib/game_dig/node/node_modules/emitter-component/History.md +35 -0
- data/lib/game_dig/node/node_modules/emitter-component/Makefile +7 -0
- data/lib/game_dig/node/node_modules/emitter-component/Readme.md +70 -0
- data/lib/game_dig/node/node_modules/emitter-component/bower.json +21 -0
- data/lib/game_dig/node/node_modules/emitter-component/component.json +9 -0
- data/lib/game_dig/node/node_modules/emitter-component/index.js +164 -0
- data/lib/game_dig/node/node_modules/emitter-component/package.json +19 -0
- data/lib/game_dig/node/node_modules/emitter-component/test/emitter.js +195 -0
- data/lib/game_dig/node/node_modules/event-to-promise/LICENSE +14 -0
- data/lib/game_dig/node/node_modules/event-to-promise/README.md +180 -0
- data/lib/game_dig/node/node_modules/event-to-promise/index.js +106 -0
- data/lib/game_dig/node/node_modules/event-to-promise/package.json +35 -0
- data/lib/game_dig/node/node_modules/fast-xml-parser/CHANGELOG.md +671 -0
- data/lib/game_dig/node/node_modules/fast-xml-parser/LICENSE +21 -0
- data/lib/game_dig/node/node_modules/fast-xml-parser/README.md +223 -0
- data/lib/game_dig/node/node_modules/fast-xml-parser/lib/fxbuilder.min.js +2 -0
- data/lib/game_dig/node/node_modules/fast-xml-parser/lib/fxbuilder.min.js.map +1 -0
- data/lib/game_dig/node/node_modules/fast-xml-parser/lib/fxp.cjs +1 -0
- data/lib/game_dig/node/node_modules/fast-xml-parser/lib/fxp.d.cts +458 -0
- data/lib/game_dig/node/node_modules/fast-xml-parser/lib/fxp.min.js +2 -0
- data/lib/game_dig/node/node_modules/fast-xml-parser/lib/fxp.min.js.map +1 -0
- data/lib/game_dig/node/node_modules/fast-xml-parser/lib/fxparser.min.js +2 -0
- data/lib/game_dig/node/node_modules/fast-xml-parser/lib/fxparser.min.js.map +1 -0
- data/lib/game_dig/node/node_modules/fast-xml-parser/lib/fxvalidator.min.js +2 -0
- data/lib/game_dig/node/node_modules/fast-xml-parser/lib/fxvalidator.min.js.map +1 -0
- data/lib/game_dig/node/node_modules/fast-xml-parser/package.json +90 -0
- data/lib/game_dig/node/node_modules/fast-xml-parser/src/cli/cli.js +97 -0
- data/lib/game_dig/node/node_modules/fast-xml-parser/src/cli/man.js +17 -0
- data/lib/game_dig/node/node_modules/fast-xml-parser/src/cli/read.js +43 -0
- data/lib/game_dig/node/node_modules/fast-xml-parser/src/fxp.d.ts +445 -0
- data/lib/game_dig/node/node_modules/fast-xml-parser/src/fxp.js +14 -0
- data/lib/game_dig/node/node_modules/fast-xml-parser/src/ignoreAttributes.js +18 -0
- data/lib/game_dig/node/node_modules/fast-xml-parser/src/util.js +68 -0
- data/lib/game_dig/node/node_modules/fast-xml-parser/src/v6/CharsSymbol.js +16 -0
- data/lib/game_dig/node/node_modules/fast-xml-parser/src/v6/EntitiesParser.js +104 -0
- data/lib/game_dig/node/node_modules/fast-xml-parser/src/v6/OptionsBuilder.js +61 -0
- data/lib/game_dig/node/node_modules/fast-xml-parser/src/v6/OutputBuilders/BaseOutputBuilder.js +69 -0
- data/lib/game_dig/node/node_modules/fast-xml-parser/src/v6/OutputBuilders/JsArrBuilder.js +103 -0
- data/lib/game_dig/node/node_modules/fast-xml-parser/src/v6/OutputBuilders/JsMinArrBuilder.js +100 -0
- data/lib/game_dig/node/node_modules/fast-xml-parser/src/v6/OutputBuilders/JsObjBuilder.js +154 -0
- data/lib/game_dig/node/node_modules/fast-xml-parser/src/v6/OutputBuilders/ParserOptionsBuilder.js +94 -0
- data/lib/game_dig/node/node_modules/fast-xml-parser/src/v6/Report.js +0 -0
- data/lib/game_dig/node/node_modules/fast-xml-parser/src/v6/TagPath.js +81 -0
- data/lib/game_dig/node/node_modules/fast-xml-parser/src/v6/TagPathMatcher.js +13 -0
- data/lib/game_dig/node/node_modules/fast-xml-parser/src/v6/XMLParser.js +83 -0
- data/lib/game_dig/node/node_modules/fast-xml-parser/src/v6/Xml2JsParser.js +235 -0
- data/lib/game_dig/node/node_modules/fast-xml-parser/src/v6/XmlPartReader.js +210 -0
- data/lib/game_dig/node/node_modules/fast-xml-parser/src/v6/XmlSpecialTagsReader.js +111 -0
- data/lib/game_dig/node/node_modules/fast-xml-parser/src/v6/inputSource/BufferSource.js +116 -0
- data/lib/game_dig/node/node_modules/fast-xml-parser/src/v6/inputSource/StringSource.js +121 -0
- data/lib/game_dig/node/node_modules/fast-xml-parser/src/v6/valueParsers/EntitiesParser.js +105 -0
- data/lib/game_dig/node/node_modules/fast-xml-parser/src/v6/valueParsers/booleanParser.js +22 -0
- data/lib/game_dig/node/node_modules/fast-xml-parser/src/v6/valueParsers/booleanParserExt.js +19 -0
- data/lib/game_dig/node/node_modules/fast-xml-parser/src/v6/valueParsers/currency.js +38 -0
- data/lib/game_dig/node/node_modules/fast-xml-parser/src/v6/valueParsers/join.js +13 -0
- data/lib/game_dig/node/node_modules/fast-xml-parser/src/v6/valueParsers/number.js +14 -0
- data/lib/game_dig/node/node_modules/fast-xml-parser/src/v6/valueParsers/trim.js +6 -0
- data/lib/game_dig/node/node_modules/fast-xml-parser/src/validator.js +425 -0
- data/lib/game_dig/node/node_modules/fast-xml-parser/src/xmlbuilder/json2xml.js +285 -0
- data/lib/game_dig/node/node_modules/fast-xml-parser/src/xmlbuilder/orderedJs2Xml.js +134 -0
- data/lib/game_dig/node/node_modules/fast-xml-parser/src/xmlbuilder/prettifyJs2Xml.js +0 -0
- data/lib/game_dig/node/node_modules/fast-xml-parser/src/xmlparser/DocTypeReader.js +369 -0
- data/lib/game_dig/node/node_modules/fast-xml-parser/src/xmlparser/OptionsBuilder.js +46 -0
- data/lib/game_dig/node/node_modules/fast-xml-parser/src/xmlparser/OrderedObjParser.js +606 -0
- data/lib/game_dig/node/node_modules/fast-xml-parser/src/xmlparser/XMLParser.js +71 -0
- data/lib/game_dig/node/node_modules/fast-xml-parser/src/xmlparser/node2json.js +119 -0
- data/lib/game_dig/node/node_modules/fast-xml-parser/src/xmlparser/xmlNode.js +40 -0
- data/lib/game_dig/node/node_modules/form-data-encoder/@type/FileLike.d.ts +23 -0
- data/lib/game_dig/node/node_modules/form-data-encoder/@type/FormDataEncoder.d.ts +169 -0
- data/lib/game_dig/node/node_modules/form-data-encoder/@type/FormDataLike.d.ts +40 -0
- data/lib/game_dig/node/node_modules/form-data-encoder/@type/index.d.ts +5 -0
- data/lib/game_dig/node/node_modules/form-data-encoder/@type/util/Headers.d.ts +8 -0
- data/lib/game_dig/node/node_modules/form-data-encoder/@type/util/createBoundary.d.ts +12 -0
- data/lib/game_dig/node/node_modules/form-data-encoder/@type/util/escapeName.d.ts +10 -0
- data/lib/game_dig/node/node_modules/form-data-encoder/@type/util/getStreamIterator.d.ts +6 -0
- data/lib/game_dig/node/node_modules/form-data-encoder/@type/util/isFile.d.ts +34 -0
- data/lib/game_dig/node/node_modules/form-data-encoder/@type/util/isFormData.d.ts +7 -0
- data/lib/game_dig/node/node_modules/form-data-encoder/@type/util/isFunction.d.ts +6 -0
- data/lib/game_dig/node/node_modules/form-data-encoder/@type/util/isPlainObject.d.ts +1 -0
- data/lib/game_dig/node/node_modules/form-data-encoder/@type/util/normalizeValue.d.ts +10 -0
- data/lib/game_dig/node/node_modules/form-data-encoder/@type/util/proxyHeaders.d.ts +2 -0
- data/lib/game_dig/node/node_modules/form-data-encoder/lib/FileLike.js +1 -0
- data/lib/game_dig/node/node_modules/form-data-encoder/lib/FormDataEncoder.js +134 -0
- data/lib/game_dig/node/node_modules/form-data-encoder/lib/FormDataLike.js +1 -0
- data/lib/game_dig/node/node_modules/form-data-encoder/lib/index.js +5 -0
- data/lib/game_dig/node/node_modules/form-data-encoder/lib/util/Headers.js +1 -0
- data/lib/game_dig/node/node_modules/form-data-encoder/lib/util/createBoundary.js +9 -0
- data/lib/game_dig/node/node_modules/form-data-encoder/lib/util/escapeName.js +4 -0
- data/lib/game_dig/node/node_modules/form-data-encoder/lib/util/getStreamIterator.js +21 -0
- data/lib/game_dig/node/node_modules/form-data-encoder/lib/util/isFile.js +8 -0
- data/lib/game_dig/node/node_modules/form-data-encoder/lib/util/isFormData.js +8 -0
- data/lib/game_dig/node/node_modules/form-data-encoder/lib/util/isFunction.js +1 -0
- data/lib/game_dig/node/node_modules/form-data-encoder/lib/util/isPlainObject.js +12 -0
- data/lib/game_dig/node/node_modules/form-data-encoder/lib/util/normalizeValue.js +8 -0
- data/lib/game_dig/node/node_modules/form-data-encoder/lib/util/proxyHeaders.js +14 -0
- data/lib/game_dig/node/node_modules/form-data-encoder/license +21 -0
- data/lib/game_dig/node/node_modules/form-data-encoder/package.json +70 -0
- data/lib/game_dig/node/node_modules/form-data-encoder/readme.md +368 -0
- data/lib/game_dig/node/node_modules/gamedig/GAMES_LIST.md +563 -0
- data/lib/game_dig/node/node_modules/gamedig/LICENSE +21 -0
- data/lib/game_dig/node/node_modules/gamedig/README.md +155 -0
- data/lib/game_dig/node/node_modules/gamedig/bin/gamedig.js +64 -0
- data/lib/game_dig/node/node_modules/gamedig/dist/index.cjs +18075 -0
- data/lib/game_dig/node/node_modules/gamedig/lib/DnsResolver.js +80 -0
- data/lib/game_dig/node/node_modules/gamedig/lib/GlobalUdpSocket.js +69 -0
- data/lib/game_dig/node/node_modules/gamedig/lib/HexUtil.js +20 -0
- data/lib/game_dig/node/node_modules/gamedig/lib/Logger.js +45 -0
- data/lib/game_dig/node/node_modules/gamedig/lib/Promises.js +18 -0
- data/lib/game_dig/node/node_modules/gamedig/lib/ProtocolResolver.js +7 -0
- data/lib/game_dig/node/node_modules/gamedig/lib/QueryRunner.js +122 -0
- data/lib/game_dig/node/node_modules/gamedig/lib/Results.js +36 -0
- data/lib/game_dig/node/node_modules/gamedig/lib/game-resolver.js +27 -0
- data/lib/game_dig/node/node_modules/gamedig/lib/gamedig.js +23 -0
- data/lib/game_dig/node/node_modules/gamedig/lib/games.js +3458 -0
- data/lib/game_dig/node/node_modules/gamedig/lib/index.js +5 -0
- data/lib/game_dig/node/node_modules/gamedig/lib/reader.js +172 -0
- data/lib/game_dig/node/node_modules/gamedig/node_modules/.bin/fxparser +1 -0
- data/lib/game_dig/node/node_modules/gamedig/node_modules/.bin/seek-bunzip +1 -0
- data/lib/game_dig/node/node_modules/gamedig/node_modules/.bin/seek-table +1 -0
- data/lib/game_dig/node/node_modules/gamedig/package.json +80 -0
- data/lib/game_dig/node/node_modules/gamedig/protocols/altvmp.js +63 -0
- data/lib/game_dig/node/node_modules/gamedig/protocols/armagetron.js +65 -0
- data/lib/game_dig/node/node_modules/gamedig/protocols/asa.js +18 -0
- data/lib/game_dig/node/node_modules/gamedig/protocols/ase.js +45 -0
- data/lib/game_dig/node/node_modules/gamedig/protocols/assettocorsa.js +41 -0
- data/lib/game_dig/node/node_modules/gamedig/protocols/battlefield.js +167 -0
- data/lib/game_dig/node/node_modules/gamedig/protocols/beammp.js +46 -0
- data/lib/game_dig/node/node_modules/gamedig/protocols/beammpmaster.js +17 -0
- data/lib/game_dig/node/node_modules/gamedig/protocols/brokeprotocol.js +13 -0
- data/lib/game_dig/node/node_modules/gamedig/protocols/brokeprotocolmaster.js +418 -0
- data/lib/game_dig/node/node_modules/gamedig/protocols/buildandshoot.js +42 -0
- data/lib/game_dig/node/node_modules/gamedig/protocols/core.js +369 -0
- data/lib/game_dig/node/node_modules/gamedig/protocols/cs2d.js +65 -0
- data/lib/game_dig/node/node_modules/gamedig/protocols/dayz.js +196 -0
- data/lib/game_dig/node/node_modules/gamedig/protocols/discord.js +29 -0
- data/lib/game_dig/node/node_modules/gamedig/protocols/doom3.js +149 -0
- data/lib/game_dig/node/node_modules/gamedig/protocols/eco.js +22 -0
- data/lib/game_dig/node/node_modules/gamedig/protocols/eldewrito.js +22 -0
- data/lib/game_dig/node/node_modules/gamedig/protocols/epic.js +153 -0
- data/lib/game_dig/node/node_modules/gamedig/protocols/factorio.js +24 -0
- data/lib/game_dig/node/node_modules/gamedig/protocols/farmingsimulator.js +69 -0
- data/lib/game_dig/node/node_modules/gamedig/protocols/ffow.js +38 -0
- data/lib/game_dig/node/node_modules/gamedig/protocols/fivem.js +35 -0
- data/lib/game_dig/node/node_modules/gamedig/protocols/gamespy1.js +182 -0
- data/lib/game_dig/node/node_modules/gamedig/protocols/gamespy2.js +142 -0
- data/lib/game_dig/node/node_modules/gamedig/protocols/gamespy3.js +198 -0
- data/lib/game_dig/node/node_modules/gamedig/protocols/geneshift.js +46 -0
- data/lib/game_dig/node/node_modules/gamedig/protocols/goldsrc.js +8 -0
- data/lib/game_dig/node/node_modules/gamedig/protocols/gtasao.js +8 -0
- data/lib/game_dig/node/node_modules/gamedig/protocols/hawakening.js +13 -0
- data/lib/game_dig/node/node_modules/gamedig/protocols/hawakeningmaster.js +718 -0
- data/lib/game_dig/node/node_modules/gamedig/protocols/hexen2.js +14 -0
- data/lib/game_dig/node/node_modules/gamedig/protocols/index.js +85 -0
- data/lib/game_dig/node/node_modules/gamedig/protocols/jc2mp.js +18 -0
- data/lib/game_dig/node/node_modules/gamedig/protocols/kspdmp.js +28 -0
- data/lib/game_dig/node/node_modules/gamedig/protocols/mafia2mp.js +42 -0
- data/lib/game_dig/node/node_modules/gamedig/protocols/mafia2online.js +9 -0
- data/lib/game_dig/node/node_modules/gamedig/protocols/minecraft.js +107 -0
- data/lib/game_dig/node/node_modules/gamedig/protocols/minecraftbedrock.js +73 -0
- data/lib/game_dig/node/node_modules/gamedig/protocols/minecraftvanilla.js +86 -0
- data/lib/game_dig/node/node_modules/gamedig/protocols/minetest.js +39 -0
- data/lib/game_dig/node/node_modules/gamedig/protocols/mumble.js +39 -0
- data/lib/game_dig/node/node_modules/gamedig/protocols/mumbleping.js +25 -0
- data/lib/game_dig/node/node_modules/gamedig/protocols/nadeo.js +85 -0
- data/lib/game_dig/node/node_modules/gamedig/protocols/openttd.js +164 -0
- data/lib/game_dig/node/node_modules/gamedig/protocols/palworld.js +32 -0
- data/lib/game_dig/node/node_modules/gamedig/protocols/quake1.js +14 -0
- data/lib/game_dig/node/node_modules/gamedig/protocols/quake2.js +90 -0
- data/lib/game_dig/node/node_modules/gamedig/protocols/quake3.js +28 -0
- data/lib/game_dig/node/node_modules/gamedig/protocols/ragemp.js +49 -0
- data/lib/game_dig/node/node_modules/gamedig/protocols/renegadex.js +232 -0
- data/lib/game_dig/node/node_modules/gamedig/protocols/renegadexmaster.js +21 -0
- data/lib/game_dig/node/node_modules/gamedig/protocols/renown.js +20 -0
- data/lib/game_dig/node/node_modules/gamedig/protocols/rfactor.js +69 -0
- data/lib/game_dig/node/node_modules/gamedig/protocols/samp.js +105 -0
- data/lib/game_dig/node/node_modules/gamedig/protocols/satisfactory.js +106 -0
- data/lib/game_dig/node/node_modules/gamedig/protocols/savage2.js +25 -0
- data/lib/game_dig/node/node_modules/gamedig/protocols/scpsl.js +54 -0
- data/lib/game_dig/node/node_modules/gamedig/protocols/sdtd.js +109 -0
- data/lib/game_dig/node/node_modules/gamedig/protocols/soldat.js +45 -0
- data/lib/game_dig/node/node_modules/gamedig/protocols/squad.js +20 -0
- data/lib/game_dig/node/node_modules/gamedig/protocols/starmade.js +67 -0
- data/lib/game_dig/node/node_modules/gamedig/protocols/starsiege.js +10 -0
- data/lib/game_dig/node/node_modules/gamedig/protocols/teamspeak2.js +72 -0
- data/lib/game_dig/node/node_modules/gamedig/protocols/teamspeak3.js +70 -0
- data/lib/game_dig/node/node_modules/gamedig/protocols/terraria.js +27 -0
- data/lib/game_dig/node/node_modules/gamedig/protocols/theisleevrima.js +19 -0
- data/lib/game_dig/node/node_modules/gamedig/protocols/toxikk.js +122 -0
- data/lib/game_dig/node/node_modules/gamedig/protocols/tribes1.js +153 -0
- data/lib/game_dig/node/node_modules/gamedig/protocols/tribes1master.js +80 -0
- data/lib/game_dig/node/node_modules/gamedig/protocols/unreal2.js +151 -0
- data/lib/game_dig/node/node_modules/gamedig/protocols/ut3.js +45 -0
- data/lib/game_dig/node/node_modules/gamedig/protocols/valve.js +472 -0
- data/lib/game_dig/node/node_modules/gamedig/protocols/vcmp.js +10 -0
- data/lib/game_dig/node/node_modules/gamedig/protocols/ventrilo.js +238 -0
- data/lib/game_dig/node/node_modules/gamedig/protocols/vintagestory.js +24 -0
- data/lib/game_dig/node/node_modules/gamedig/protocols/vintagestorymaster.js +17 -0
- data/lib/game_dig/node/node_modules/gamedig/protocols/warsow.js +13 -0
- data/lib/game_dig/node/node_modules/gamedig/protocols/xonotic.js +16 -0
- data/lib/game_dig/node/node_modules/gbxremote/.editorconfig +15 -0
- data/lib/game_dig/node/node_modules/gbxremote/.npmignore +5 -0
- data/lib/game_dig/node/node_modules/gbxremote/LICENSE +23 -0
- data/lib/game_dig/node/node_modules/gbxremote/README.md +196 -0
- data/lib/game_dig/node/node_modules/gbxremote/lib/client.js +214 -0
- data/lib/game_dig/node/node_modules/gbxremote/lib/gbxremote.js +18 -0
- data/lib/game_dig/node/node_modules/gbxremote/package.json +55 -0
- data/lib/game_dig/node/node_modules/get-stream/buffer-stream.js +52 -0
- data/lib/game_dig/node/node_modules/get-stream/index.d.ts +105 -0
- data/lib/game_dig/node/node_modules/get-stream/index.js +61 -0
- data/lib/game_dig/node/node_modules/get-stream/license +9 -0
- data/lib/game_dig/node/node_modules/get-stream/package.json +47 -0
- data/lib/game_dig/node/node_modules/get-stream/readme.md +124 -0
- data/lib/game_dig/node/node_modules/got/dist/source/as-promise/index.d.ts +3 -0
- data/lib/game_dig/node/node_modules/got/dist/source/as-promise/index.js +158 -0
- data/lib/game_dig/node/node_modules/got/dist/source/as-promise/types.d.ts +38 -0
- data/lib/game_dig/node/node_modules/got/dist/source/as-promise/types.js +17 -0
- data/lib/game_dig/node/node_modules/got/dist/source/core/calculate-retry-delay.d.ts +4 -0
- data/lib/game_dig/node/node_modules/got/dist/source/core/calculate-retry-delay.js +29 -0
- data/lib/game_dig/node/node_modules/got/dist/source/core/errors.d.ts +90 -0
- data/lib/game_dig/node/node_modules/got/dist/source/core/errors.js +178 -0
- data/lib/game_dig/node/node_modules/got/dist/source/core/index.d.ts +190 -0
- data/lib/game_dig/node/node_modules/got/dist/source/core/index.js +1126 -0
- data/lib/game_dig/node/node_modules/got/dist/source/core/options.d.ts +1253 -0
- data/lib/game_dig/node/node_modules/got/dist/source/core/options.js +1653 -0
- data/lib/game_dig/node/node_modules/got/dist/source/core/parse-link-header.d.ts +4 -0
- data/lib/game_dig/node/node_modules/got/dist/source/core/parse-link-header.js +33 -0
- data/lib/game_dig/node/node_modules/got/dist/source/core/response.d.ts +109 -0
- data/lib/game_dig/node/node_modules/got/dist/source/core/response.js +39 -0
- data/lib/game_dig/node/node_modules/got/dist/source/core/timed-out.d.ts +30 -0
- data/lib/game_dig/node/node_modules/got/dist/source/core/timed-out.js +138 -0
- data/lib/game_dig/node/node_modules/got/dist/source/core/utils/get-body-size.d.ts +3 -0
- data/lib/game_dig/node/node_modules/got/dist/source/core/utils/get-body-size.js +22 -0
- data/lib/game_dig/node/node_modules/got/dist/source/core/utils/is-client-request.d.ts +5 -0
- data/lib/game_dig/node/node_modules/got/dist/source/core/utils/is-client-request.js +4 -0
- data/lib/game_dig/node/node_modules/got/dist/source/core/utils/is-form-data.d.ts +8 -0
- data/lib/game_dig/node/node_modules/got/dist/source/core/utils/is-form-data.js +4 -0
- data/lib/game_dig/node/node_modules/got/dist/source/core/utils/is-unix-socket-url.d.ts +2 -0
- data/lib/game_dig/node/node_modules/got/dist/source/core/utils/is-unix-socket-url.js +4 -0
- data/lib/game_dig/node/node_modules/got/dist/source/core/utils/options-to-url.d.ts +13 -0
- data/lib/game_dig/node/node_modules/got/dist/source/core/utils/options-to-url.js +48 -0
- data/lib/game_dig/node/node_modules/got/dist/source/core/utils/proxy-events.d.ts +3 -0
- data/lib/game_dig/node/node_modules/got/dist/source/core/utils/proxy-events.js +15 -0
- data/lib/game_dig/node/node_modules/got/dist/source/core/utils/unhandle.d.ts +11 -0
- data/lib/game_dig/node/node_modules/got/dist/source/core/utils/unhandle.js +20 -0
- data/lib/game_dig/node/node_modules/got/dist/source/core/utils/url-to-options.d.ts +15 -0
- data/lib/game_dig/node/node_modules/got/dist/source/core/utils/url-to-options.js +22 -0
- data/lib/game_dig/node/node_modules/got/dist/source/core/utils/weakable-map.d.ts +8 -0
- data/lib/game_dig/node/node_modules/got/dist/source/core/utils/weakable-map.js +38 -0
- data/lib/game_dig/node/node_modules/got/dist/source/create.d.ts +3 -0
- data/lib/game_dig/node/node_modules/got/dist/source/create.js +187 -0
- data/lib/game_dig/node/node_modules/got/dist/source/index.d.ts +15 -0
- data/lib/game_dig/node/node_modules/got/dist/source/index.js +20 -0
- data/lib/game_dig/node/node_modules/got/dist/source/types.d.ts +262 -0
- data/lib/game_dig/node/node_modules/got/dist/source/types.js +1 -0
- data/lib/game_dig/node/node_modules/got/license +9 -0
- data/lib/game_dig/node/node_modules/got/package.json +155 -0
- data/lib/game_dig/node/node_modules/got/readme.md +527 -0
- data/lib/game_dig/node/node_modules/http-cache-semantics/LICENSE +9 -0
- data/lib/game_dig/node/node_modules/http-cache-semantics/README.md +268 -0
- data/lib/game_dig/node/node_modules/http-cache-semantics/index.js +928 -0
- data/lib/game_dig/node/node_modules/http-cache-semantics/package.json +22 -0
- data/lib/game_dig/node/node_modules/http2-wrapper/LICENSE +21 -0
- data/lib/game_dig/node/node_modules/http2-wrapper/README.md +459 -0
- data/lib/game_dig/node/node_modules/http2-wrapper/index.d.ts +141 -0
- data/lib/game_dig/node/node_modules/http2-wrapper/package.json +81 -0
- data/lib/game_dig/node/node_modules/http2-wrapper/source/agent.js +796 -0
- data/lib/game_dig/node/node_modules/http2-wrapper/source/auto.js +225 -0
- data/lib/game_dig/node/node_modules/http2-wrapper/source/client-request.js +563 -0
- data/lib/game_dig/node/node_modules/http2-wrapper/source/incoming-message.js +73 -0
- data/lib/game_dig/node/node_modules/http2-wrapper/source/index.js +50 -0
- data/lib/game_dig/node/node_modules/http2-wrapper/source/proxies/get-auth-headers.js +17 -0
- data/lib/game_dig/node/node_modules/http2-wrapper/source/proxies/h1-over-h2.js +90 -0
- data/lib/game_dig/node/node_modules/http2-wrapper/source/proxies/h2-over-h1.js +48 -0
- data/lib/game_dig/node/node_modules/http2-wrapper/source/proxies/h2-over-h2.js +32 -0
- data/lib/game_dig/node/node_modules/http2-wrapper/source/proxies/h2-over-hx.js +40 -0
- data/lib/game_dig/node/node_modules/http2-wrapper/source/proxies/initialize.js +21 -0
- data/lib/game_dig/node/node_modules/http2-wrapper/source/proxies/unexpected-status-code-error.js +11 -0
- data/lib/game_dig/node/node_modules/http2-wrapper/source/utils/calculate-server-name.js +29 -0
- data/lib/game_dig/node/node_modules/http2-wrapper/source/utils/check-type.js +20 -0
- data/lib/game_dig/node/node_modules/http2-wrapper/source/utils/delay-async-destroy.js +33 -0
- data/lib/game_dig/node/node_modules/http2-wrapper/source/utils/errors.js +51 -0
- data/lib/game_dig/node/node_modules/http2-wrapper/source/utils/is-request-pseudo-header.js +13 -0
- data/lib/game_dig/node/node_modules/http2-wrapper/source/utils/js-stream-socket.js +8 -0
- data/lib/game_dig/node/node_modules/http2-wrapper/source/utils/proxy-events.js +7 -0
- data/lib/game_dig/node/node_modules/http2-wrapper/source/utils/proxy-socket-handler.js +102 -0
- data/lib/game_dig/node/node_modules/http2-wrapper/source/utils/validate-header-name.js +11 -0
- data/lib/game_dig/node/node_modules/http2-wrapper/source/utils/validate-header-value.js +17 -0
- data/lib/game_dig/node/node_modules/iconv-lite/Changelog.md +236 -0
- data/lib/game_dig/node/node_modules/iconv-lite/LICENSE +21 -0
- data/lib/game_dig/node/node_modules/iconv-lite/README.md +138 -0
- data/lib/game_dig/node/node_modules/iconv-lite/encodings/dbcs-codec.js +532 -0
- data/lib/game_dig/node/node_modules/iconv-lite/encodings/dbcs-data.js +185 -0
- data/lib/game_dig/node/node_modules/iconv-lite/encodings/index.js +23 -0
- data/lib/game_dig/node/node_modules/iconv-lite/encodings/internal.js +218 -0
- data/lib/game_dig/node/node_modules/iconv-lite/encodings/sbcs-codec.js +75 -0
- data/lib/game_dig/node/node_modules/iconv-lite/encodings/sbcs-data-generated.js +451 -0
- data/lib/game_dig/node/node_modules/iconv-lite/encodings/sbcs-data.js +178 -0
- data/lib/game_dig/node/node_modules/iconv-lite/encodings/tables/big5-added.json +122 -0
- data/lib/game_dig/node/node_modules/iconv-lite/encodings/tables/cp936.json +264 -0
- data/lib/game_dig/node/node_modules/iconv-lite/encodings/tables/cp949.json +273 -0
- data/lib/game_dig/node/node_modules/iconv-lite/encodings/tables/cp950.json +177 -0
- data/lib/game_dig/node/node_modules/iconv-lite/encodings/tables/eucjp.json +182 -0
- data/lib/game_dig/node/node_modules/iconv-lite/encodings/tables/gb18030-ranges.json +1 -0
- data/lib/game_dig/node/node_modules/iconv-lite/encodings/tables/gbk-added.json +56 -0
- data/lib/game_dig/node/node_modules/iconv-lite/encodings/tables/shiftjis.json +125 -0
- data/lib/game_dig/node/node_modules/iconv-lite/encodings/utf16.js +187 -0
- data/lib/game_dig/node/node_modules/iconv-lite/encodings/utf32.js +307 -0
- data/lib/game_dig/node/node_modules/iconv-lite/encodings/utf7.js +283 -0
- data/lib/game_dig/node/node_modules/iconv-lite/lib/bom-handling.js +48 -0
- data/lib/game_dig/node/node_modules/iconv-lite/lib/helpers/merge-exports.js +13 -0
- data/lib/game_dig/node/node_modules/iconv-lite/lib/index.d.ts +41 -0
- data/lib/game_dig/node/node_modules/iconv-lite/lib/index.js +183 -0
- data/lib/game_dig/node/node_modules/iconv-lite/lib/streams.js +105 -0
- data/lib/game_dig/node/node_modules/iconv-lite/package.json +59 -0
- data/lib/game_dig/node/node_modules/inherits/LICENSE +16 -0
- data/lib/game_dig/node/node_modules/inherits/README.md +42 -0
- data/lib/game_dig/node/node_modules/inherits/inherits.js +9 -0
- data/lib/game_dig/node/node_modules/inherits/inherits_browser.js +27 -0
- data/lib/game_dig/node/node_modules/inherits/package.json +29 -0
- data/lib/game_dig/node/node_modules/isarray/README.md +54 -0
- data/lib/game_dig/node/node_modules/isarray/build/build.js +209 -0
- data/lib/game_dig/node/node_modules/isarray/component.json +19 -0
- data/lib/game_dig/node/node_modules/isarray/index.js +3 -0
- data/lib/game_dig/node/node_modules/isarray/package.json +25 -0
- data/lib/game_dig/node/node_modules/json-buffer/.travis.yml +3 -0
- data/lib/game_dig/node/node_modules/json-buffer/LICENSE +22 -0
- data/lib/game_dig/node/node_modules/json-buffer/README.md +24 -0
- data/lib/game_dig/node/node_modules/json-buffer/index.js +58 -0
- data/lib/game_dig/node/node_modules/json-buffer/package.json +34 -0
- data/lib/game_dig/node/node_modules/json-buffer/test/index.js +63 -0
- data/lib/game_dig/node/node_modules/keyv/README.md +429 -0
- data/lib/game_dig/node/node_modules/keyv/package.json +57 -0
- data/lib/game_dig/node/node_modules/keyv/src/index.d.ts +112 -0
- data/lib/game_dig/node/node_modules/keyv/src/index.js +259 -0
- data/lib/game_dig/node/node_modules/long/LICENSE +202 -0
- data/lib/game_dig/node/node_modules/long/README.md +286 -0
- data/lib/game_dig/node/node_modules/long/index.d.ts +2 -0
- data/lib/game_dig/node/node_modules/long/index.js +1581 -0
- data/lib/game_dig/node/node_modules/long/package.json +58 -0
- data/lib/game_dig/node/node_modules/long/types.d.ts +474 -0
- data/lib/game_dig/node/node_modules/long/umd/index.d.ts +3 -0
- data/lib/game_dig/node/node_modules/long/umd/index.js +1622 -0
- data/lib/game_dig/node/node_modules/long/umd/package.json +3 -0
- data/lib/game_dig/node/node_modules/long/umd/types.d.ts +474 -0
- data/lib/game_dig/node/node_modules/lowercase-keys/index.d.ts +14 -0
- data/lib/game_dig/node/node_modules/lowercase-keys/index.js +3 -0
- data/lib/game_dig/node/node_modules/lowercase-keys/license +9 -0
- data/lib/game_dig/node/node_modules/lowercase-keys/package.json +41 -0
- data/lib/game_dig/node/node_modules/lowercase-keys/readme.md +32 -0
- data/lib/game_dig/node/node_modules/mimic-response/index.d.ts +17 -0
- data/lib/game_dig/node/node_modules/mimic-response/index.js +77 -0
- data/lib/game_dig/node/node_modules/mimic-response/license +9 -0
- data/lib/game_dig/node/node_modules/mimic-response/package.json +42 -0
- data/lib/game_dig/node/node_modules/mimic-response/readme.md +78 -0
- data/lib/game_dig/node/node_modules/minimist/.eslintrc +29 -0
- data/lib/game_dig/node/node_modules/minimist/.github/FUNDING.yml +12 -0
- data/lib/game_dig/node/node_modules/minimist/.nycrc +14 -0
- data/lib/game_dig/node/node_modules/minimist/CHANGELOG.md +298 -0
- data/lib/game_dig/node/node_modules/minimist/LICENSE +18 -0
- data/lib/game_dig/node/node_modules/minimist/README.md +121 -0
- data/lib/game_dig/node/node_modules/minimist/example/parse.js +4 -0
- data/lib/game_dig/node/node_modules/minimist/index.js +263 -0
- data/lib/game_dig/node/node_modules/minimist/package.json +75 -0
- data/lib/game_dig/node/node_modules/minimist/test/all_bool.js +34 -0
- data/lib/game_dig/node/node_modules/minimist/test/bool.js +177 -0
- data/lib/game_dig/node/node_modules/minimist/test/dash.js +43 -0
- data/lib/game_dig/node/node_modules/minimist/test/default_bool.js +37 -0
- data/lib/game_dig/node/node_modules/minimist/test/dotted.js +24 -0
- data/lib/game_dig/node/node_modules/minimist/test/kv_short.js +32 -0
- data/lib/game_dig/node/node_modules/minimist/test/long.js +33 -0
- data/lib/game_dig/node/node_modules/minimist/test/num.js +38 -0
- data/lib/game_dig/node/node_modules/minimist/test/parse.js +209 -0
- data/lib/game_dig/node/node_modules/minimist/test/parse_modified.js +11 -0
- data/lib/game_dig/node/node_modules/minimist/test/proto.js +64 -0
- data/lib/game_dig/node/node_modules/minimist/test/short.js +69 -0
- data/lib/game_dig/node/node_modules/minimist/test/stop_early.js +17 -0
- data/lib/game_dig/node/node_modules/minimist/test/unknown.js +104 -0
- data/lib/game_dig/node/node_modules/minimist/test/whitespace.js +10 -0
- data/lib/game_dig/node/node_modules/net/LICENSE +19 -0
- data/lib/game_dig/node/node_modules/net/README.md +0 -0
- data/lib/game_dig/node/node_modules/net/index.js +28 -0
- data/lib/game_dig/node/node_modules/net/package.json +17 -0
- data/lib/game_dig/node/node_modules/net/test.js +6 -0
- data/lib/game_dig/node/node_modules/normalize-url/index.d.ts +342 -0
- data/lib/game_dig/node/node_modules/normalize-url/index.js +308 -0
- data/lib/game_dig/node/node_modules/normalize-url/license +9 -0
- data/lib/game_dig/node/node_modules/normalize-url/package.json +57 -0
- data/lib/game_dig/node/node_modules/normalize-url/readme.md +347 -0
- data/lib/game_dig/node/node_modules/p-cancelable/index.d.ts +168 -0
- data/lib/game_dig/node/node_modules/p-cancelable/index.js +110 -0
- data/lib/game_dig/node/node_modules/p-cancelable/license +9 -0
- data/lib/game_dig/node/node_modules/p-cancelable/package.json +50 -0
- data/lib/game_dig/node/node_modules/p-cancelable/readme.md +152 -0
- data/lib/game_dig/node/node_modules/process-nextick-args/index.js +45 -0
- data/lib/game_dig/node/node_modules/process-nextick-args/license.md +19 -0
- data/lib/game_dig/node/node_modules/process-nextick-args/package.json +25 -0
- data/lib/game_dig/node/node_modules/process-nextick-args/readme.md +18 -0
- data/lib/game_dig/node/node_modules/quick-lru/index.d.ts +97 -0
- data/lib/game_dig/node/node_modules/quick-lru/index.js +123 -0
- data/lib/game_dig/node/node_modules/quick-lru/license +9 -0
- data/lib/game_dig/node/node_modules/quick-lru/package.json +43 -0
- data/lib/game_dig/node/node_modules/quick-lru/readme.md +111 -0
- data/lib/game_dig/node/node_modules/readable-stream/.travis.yml +34 -0
- data/lib/game_dig/node/node_modules/readable-stream/CONTRIBUTING.md +38 -0
- data/lib/game_dig/node/node_modules/readable-stream/GOVERNANCE.md +136 -0
- data/lib/game_dig/node/node_modules/readable-stream/LICENSE +47 -0
- data/lib/game_dig/node/node_modules/readable-stream/README.md +58 -0
- data/lib/game_dig/node/node_modules/readable-stream/doc/wg-meetings/2015-01-30.md +60 -0
- data/lib/game_dig/node/node_modules/readable-stream/duplex-browser.js +1 -0
- data/lib/game_dig/node/node_modules/readable-stream/duplex.js +1 -0
- data/lib/game_dig/node/node_modules/readable-stream/lib/_stream_duplex.js +131 -0
- data/lib/game_dig/node/node_modules/readable-stream/lib/_stream_passthrough.js +47 -0
- data/lib/game_dig/node/node_modules/readable-stream/lib/_stream_readable.js +1019 -0
- data/lib/game_dig/node/node_modules/readable-stream/lib/_stream_transform.js +214 -0
- data/lib/game_dig/node/node_modules/readable-stream/lib/_stream_writable.js +685 -0
- data/lib/game_dig/node/node_modules/readable-stream/lib/internal/streams/BufferList.js +78 -0
- data/lib/game_dig/node/node_modules/readable-stream/lib/internal/streams/destroy.js +84 -0
- data/lib/game_dig/node/node_modules/readable-stream/lib/internal/streams/stream-browser.js +1 -0
- data/lib/game_dig/node/node_modules/readable-stream/lib/internal/streams/stream.js +1 -0
- data/lib/game_dig/node/node_modules/readable-stream/node_modules/isarray/.npmignore +1 -0
- data/lib/game_dig/node/node_modules/readable-stream/node_modules/isarray/.travis.yml +4 -0
- data/lib/game_dig/node/node_modules/readable-stream/node_modules/isarray/Makefile +6 -0
- data/lib/game_dig/node/node_modules/readable-stream/node_modules/isarray/README.md +60 -0
- data/lib/game_dig/node/node_modules/readable-stream/node_modules/isarray/component.json +19 -0
- data/lib/game_dig/node/node_modules/readable-stream/node_modules/isarray/index.js +5 -0
- data/lib/game_dig/node/node_modules/readable-stream/node_modules/isarray/package.json +45 -0
- data/lib/game_dig/node/node_modules/readable-stream/node_modules/isarray/test.js +20 -0
- data/lib/game_dig/node/node_modules/readable-stream/node_modules/string_decoder/.travis.yml +50 -0
- data/lib/game_dig/node/node_modules/readable-stream/node_modules/string_decoder/LICENSE +48 -0
- data/lib/game_dig/node/node_modules/readable-stream/node_modules/string_decoder/README.md +47 -0
- data/lib/game_dig/node/node_modules/readable-stream/node_modules/string_decoder/lib/string_decoder.js +296 -0
- data/lib/game_dig/node/node_modules/readable-stream/node_modules/string_decoder/package.json +31 -0
- data/lib/game_dig/node/node_modules/readable-stream/package.json +52 -0
- data/lib/game_dig/node/node_modules/readable-stream/passthrough.js +1 -0
- data/lib/game_dig/node/node_modules/readable-stream/readable-browser.js +7 -0
- data/lib/game_dig/node/node_modules/readable-stream/readable.js +19 -0
- data/lib/game_dig/node/node_modules/readable-stream/transform.js +1 -0
- data/lib/game_dig/node/node_modules/readable-stream/writable-browser.js +1 -0
- data/lib/game_dig/node/node_modules/readable-stream/writable.js +8 -0
- data/lib/game_dig/node/node_modules/resolve-alpn/LICENSE +22 -0
- data/lib/game_dig/node/node_modules/resolve-alpn/README.md +60 -0
- data/lib/game_dig/node/node_modules/resolve-alpn/index.js +43 -0
- data/lib/game_dig/node/node_modules/resolve-alpn/package.json +34 -0
- data/lib/game_dig/node/node_modules/responselike/LICENSE +19 -0
- data/lib/game_dig/node/node_modules/responselike/README.md +77 -0
- data/lib/game_dig/node/node_modules/responselike/index.d.ts +86 -0
- data/lib/game_dig/node/node_modules/responselike/index.js +39 -0
- data/lib/game_dig/node/node_modules/responselike/license +10 -0
- data/lib/game_dig/node/node_modules/responselike/package.json +39 -0
- data/lib/game_dig/node/node_modules/responselike/readme.md +75 -0
- data/lib/game_dig/node/node_modules/safe-buffer/LICENSE +21 -0
- data/lib/game_dig/node/node_modules/safe-buffer/README.md +584 -0
- data/lib/game_dig/node/node_modules/safe-buffer/index.d.ts +187 -0
- data/lib/game_dig/node/node_modules/safe-buffer/index.js +62 -0
- data/lib/game_dig/node/node_modules/safe-buffer/package.json +37 -0
- data/lib/game_dig/node/node_modules/safer-buffer/LICENSE +21 -0
- data/lib/game_dig/node/node_modules/safer-buffer/Porting-Buffer.md +268 -0
- data/lib/game_dig/node/node_modules/safer-buffer/Readme.md +156 -0
- data/lib/game_dig/node/node_modules/safer-buffer/dangerous.js +58 -0
- data/lib/game_dig/node/node_modules/safer-buffer/package.json +34 -0
- data/lib/game_dig/node/node_modules/safer-buffer/safer.js +77 -0
- data/lib/game_dig/node/node_modules/safer-buffer/tests.js +406 -0
- data/lib/game_dig/node/node_modules/sax/LICENSE +41 -0
- data/lib/game_dig/node/node_modules/sax/README.md +225 -0
- data/lib/game_dig/node/node_modules/sax/lib/sax.js +1565 -0
- data/lib/game_dig/node/node_modules/sax/package.json +25 -0
- data/lib/game_dig/node/node_modules/seek-bzip/LICENSE +26 -0
- data/lib/game_dig/node/node_modules/seek-bzip/README.md +185 -0
- data/lib/game_dig/node/node_modules/seek-bzip/bin/seek-bunzip +129 -0
- data/lib/game_dig/node/node_modules/seek-bzip/bin/seek-bzip-table +71 -0
- data/lib/game_dig/node/node_modules/seek-bzip/lib/bitreader.js +94 -0
- data/lib/game_dig/node/node_modules/seek-bzip/lib/crc32.js +104 -0
- data/lib/game_dig/node/node_modules/seek-bzip/lib/index.js +605 -0
- data/lib/game_dig/node/node_modules/seek-bzip/lib/stream.js +42 -0
- data/lib/game_dig/node/node_modules/seek-bzip/package.json +34 -0
- data/lib/game_dig/node/node_modules/stream/.npmignore +3 -0
- data/lib/game_dig/node/node_modules/stream/Makefile +11 -0
- data/lib/game_dig/node/node_modules/stream/README.md +59 -0
- data/lib/game_dig/node/node_modules/stream/component.json +19 -0
- data/lib/game_dig/node/node_modules/stream/index.js +115 -0
- data/lib/game_dig/node/node_modules/stream/package.json +25 -0
- data/lib/game_dig/node/node_modules/stream/test.html +173 -0
- data/lib/game_dig/node/node_modules/string-to-stream/LICENSE +20 -0
- data/lib/game_dig/node/node_modules/string-to-stream/README.md +34 -0
- data/lib/game_dig/node/node_modules/string-to-stream/index.js +23 -0
- data/lib/game_dig/node/node_modules/string-to-stream/package.json +53 -0
- data/lib/game_dig/node/node_modules/string_decoder/.npmignore +2 -0
- data/lib/game_dig/node/node_modules/string_decoder/LICENSE +20 -0
- data/lib/game_dig/node/node_modules/string_decoder/README.md +7 -0
- data/lib/game_dig/node/node_modules/string_decoder/index.js +221 -0
- data/lib/game_dig/node/node_modules/string_decoder/package.json +25 -0
- data/lib/game_dig/node/node_modules/strnum/.github/SECURITY.md +5 -0
- data/lib/game_dig/node/node_modules/strnum/.vscode/launch.json +25 -0
- data/lib/game_dig/node/node_modules/strnum/CHANGELOG.md +33 -0
- data/lib/game_dig/node/node_modules/strnum/LICENSE +21 -0
- data/lib/game_dig/node/node_modules/strnum/README.md +97 -0
- data/lib/game_dig/node/node_modules/strnum/algo.stflow +84 -0
- data/lib/game_dig/node/node_modules/strnum/package.json +31 -0
- data/lib/game_dig/node/node_modules/strnum/strnum.js +129 -0
- data/lib/game_dig/node/node_modules/strnum/strnum.test.js +173 -0
- data/lib/game_dig/node/node_modules/strnum/test.js +9 -0
- data/lib/game_dig/node/node_modules/telnet-client/LICENSE +8 -0
- data/lib/game_dig/node/node_modules/telnet-client/README.md +363 -0
- data/lib/game_dig/node/node_modules/telnet-client/lib/index.d.ts +92 -0
- data/lib/game_dig/node/node_modules/telnet-client/lib/index.js +506 -0
- data/lib/game_dig/node/node_modules/telnet-client/lib/index.js.map +1 -0
- data/lib/game_dig/node/node_modules/telnet-client/lib/utils.d.ts +15 -0
- data/lib/game_dig/node/node_modules/telnet-client/lib/utils.js +34 -0
- data/lib/game_dig/node/node_modules/telnet-client/lib/utils.js.map +1 -0
- data/lib/game_dig/node/node_modules/telnet-client/package.json +103 -0
- data/lib/game_dig/node/node_modules/util-deprecate/History.md +16 -0
- data/lib/game_dig/node/node_modules/util-deprecate/LICENSE +24 -0
- data/lib/game_dig/node/node_modules/util-deprecate/README.md +53 -0
- data/lib/game_dig/node/node_modules/util-deprecate/browser.js +67 -0
- data/lib/game_dig/node/node_modules/util-deprecate/node.js +6 -0
- data/lib/game_dig/node/node_modules/util-deprecate/package.json +27 -0
- data/lib/game_dig/node/node_modules/varint/README.md +53 -0
- data/lib/game_dig/node/node_modules/varint/bench.js +57 -0
- data/lib/game_dig/node/node_modules/varint/decode.js +29 -0
- data/lib/game_dig/node/node_modules/varint/encode.js +30 -0
- data/lib/game_dig/node/node_modules/varint/index.js +5 -0
- data/lib/game_dig/node/node_modules/varint/length.js +25 -0
- data/lib/game_dig/node/node_modules/varint/package.json +24 -0
- data/lib/game_dig/node/node_modules/varint/test.js +156 -0
- data/lib/game_dig/node/node_modules/xmlbuilder/.npmignore +5 -0
- data/lib/game_dig/node/node_modules/xmlbuilder/CHANGELOG.md +395 -0
- data/lib/game_dig/node/node_modules/xmlbuilder/LICENSE +21 -0
- data/lib/game_dig/node/node_modules/xmlbuilder/README.md +85 -0
- data/lib/game_dig/node/node_modules/xmlbuilder/lib/Utility.js +139 -0
- data/lib/game_dig/node/node_modules/xmlbuilder/lib/XMLAttribute.js +31 -0
- data/lib/game_dig/node/node_modules/xmlbuilder/lib/XMLCData.js +32 -0
- data/lib/game_dig/node/node_modules/xmlbuilder/lib/XMLComment.js +32 -0
- data/lib/game_dig/node/node_modules/xmlbuilder/lib/XMLDTDAttList.js +50 -0
- data/lib/game_dig/node/node_modules/xmlbuilder/lib/XMLDTDElement.js +35 -0
- data/lib/game_dig/node/node_modules/xmlbuilder/lib/XMLDTDEntity.js +56 -0
- data/lib/game_dig/node/node_modules/xmlbuilder/lib/XMLDTDNotation.js +37 -0
- data/lib/game_dig/node/node_modules/xmlbuilder/lib/XMLDeclaration.js +40 -0
- data/lib/game_dig/node/node_modules/xmlbuilder/lib/XMLDocType.js +107 -0
- data/lib/game_dig/node/node_modules/xmlbuilder/lib/XMLDocument.js +48 -0
- data/lib/game_dig/node/node_modules/xmlbuilder/lib/XMLDocumentCB.js +402 -0
- data/lib/game_dig/node/node_modules/xmlbuilder/lib/XMLElement.js +111 -0
- data/lib/game_dig/node/node_modules/xmlbuilder/lib/XMLNode.js +432 -0
- data/lib/game_dig/node/node_modules/xmlbuilder/lib/XMLProcessingInstruction.js +35 -0
- data/lib/game_dig/node/node_modules/xmlbuilder/lib/XMLRaw.js +32 -0
- data/lib/game_dig/node/node_modules/xmlbuilder/lib/XMLStreamWriter.js +278 -0
- data/lib/game_dig/node/node_modules/xmlbuilder/lib/XMLStringWriter.js +302 -0
- data/lib/game_dig/node/node_modules/xmlbuilder/lib/XMLStringifier.js +192 -0
- data/lib/game_dig/node/node_modules/xmlbuilder/lib/XMLText.js +32 -0
- data/lib/game_dig/node/node_modules/xmlbuilder/lib/XMLWriterBase.js +68 -0
- data/lib/game_dig/node/node_modules/xmlbuilder/lib/index.js +53 -0
- data/lib/game_dig/node/node_modules/xmlbuilder/package.json +37 -0
- data/lib/game_dig/node/node_modules/xmlrpc/.idea/date_formatter.js +77 -0
- data/lib/game_dig/node/node_modules/xmlrpc/.npmignore +5 -0
- data/lib/game_dig/node/node_modules/xmlrpc/.travis.yml +6 -0
- data/lib/game_dig/node/node_modules/xmlrpc/HISTORY.md +129 -0
- data/lib/game_dig/node/node_modules/xmlrpc/LICENSE +23 -0
- data/lib/game_dig/node/node_modules/xmlrpc/README.md +235 -0
- data/lib/game_dig/node/node_modules/xmlrpc/lib/client.js +177 -0
- data/lib/game_dig/node/node_modules/xmlrpc/lib/cookies.js +111 -0
- data/lib/game_dig/node/node_modules/xmlrpc/lib/customtype.js +10 -0
- data/lib/game_dig/node/node_modules/xmlrpc/lib/date_formatter.js +188 -0
- data/lib/game_dig/node/node_modules/xmlrpc/lib/deserializer.js +324 -0
- data/lib/game_dig/node/node_modules/xmlrpc/lib/serializer.js +202 -0
- data/lib/game_dig/node/node_modules/xmlrpc/lib/server.js +78 -0
- data/lib/game_dig/node/node_modules/xmlrpc/lib/xmlrpc.js +65 -0
- data/lib/game_dig/node/node_modules/xmlrpc/package.json +35 -0
- data/lib/game_dig/node/node_modules/xmlrpc/tmp/client.js +28 -0
- data/lib/game_dig/node/node_modules/xmlrpc/tmp/server.crt +13 -0
- data/lib/game_dig/node/node_modules/xmlrpc/tmp/server.csr +11 -0
- data/lib/game_dig/node/node_modules/xmlrpc/tmp/server.js +10 -0
- data/lib/game_dig/node/node_modules/xmlrpc/tmp/server.key +15 -0
- data/lib/game_dig/node/node_modules/xmlrpc/tmp/server.key.org +18 -0
- data/lib/game_dig/node/package.json +8 -0
- data/lib/game_dig/node/yarn.lock +359 -0
- data/lib/game_dig/nodo.rb +54 -0
- data/lib/game_dig/query_result.rb +71 -0
- data/lib/game_dig/version.rb +1 -1
- data/lib/game_dig.rb +78 -45
- metadata +742 -11
- data/lib/custom_errors/game_dig_cli_not_found.rb +0 -2
- data/lib/custom_errors/game_dig_error.rb +0 -2
|
@@ -0,0 +1,718 @@
|
|
|
1
|
+
import Core from './core.js'
|
|
2
|
+
// import Ajv from 'ajv'
|
|
3
|
+
// const ajv = new Ajv()
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Implements the protocol for retrieving a master list for Hawakening, a fan project of the UnrealEngine3 based game HAWKEN
|
|
7
|
+
* using a Meteor backend for the master server
|
|
8
|
+
*/
|
|
9
|
+
export default class hawakeningmaster extends Core {
|
|
10
|
+
constructor () {
|
|
11
|
+
super()
|
|
12
|
+
|
|
13
|
+
// backend API url for original Hawken release
|
|
14
|
+
// const meteorUri = 'https://v2-services-live-pc.playhawken.com'
|
|
15
|
+
// Hawakening API for public release in 2024
|
|
16
|
+
const meteorUri = 'https://hawakening.com/api'
|
|
17
|
+
|
|
18
|
+
this.backendApi = new MeteorBackendApi(this, meteorUri)
|
|
19
|
+
this.backendApi.setLogger(this.logger)
|
|
20
|
+
|
|
21
|
+
// set when querying needs access token
|
|
22
|
+
this.requireToken = false
|
|
23
|
+
// set when querying for specific server only
|
|
24
|
+
this.doQuerySingle = false
|
|
25
|
+
// set to logout on cleanup (to revoke access token)
|
|
26
|
+
this.doLogout = true
|
|
27
|
+
|
|
28
|
+
// stored user, queried from backend
|
|
29
|
+
this.userInfo = null
|
|
30
|
+
|
|
31
|
+
// Don't use the tcp ping probing
|
|
32
|
+
this.usedTcp = true
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
async run (state) {
|
|
36
|
+
await this.retrieveClientAccessToken()
|
|
37
|
+
await this.retrieveUser()
|
|
38
|
+
|
|
39
|
+
await this.queryInfo(state)
|
|
40
|
+
await this.cleanup(state)
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
async queryInfo (state) {
|
|
44
|
+
if (this.doQuerySingle) {
|
|
45
|
+
await this.queryInfoSingle(state)
|
|
46
|
+
} else {
|
|
47
|
+
await this.queryInfoMultiple(state)
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
async queryInfoMultiple (state) {
|
|
52
|
+
const servers = await this.getMasterServerList()
|
|
53
|
+
|
|
54
|
+
// pass processed servers as raw list
|
|
55
|
+
state.raw.servers = servers.map((serverListing) => {
|
|
56
|
+
// TODO: may use any other deep-copy method like structuredClone() (in Node.js 17+)
|
|
57
|
+
// or use a method of Core to retrieve a clean state
|
|
58
|
+
const serverState = JSON.parse(JSON.stringify(state))
|
|
59
|
+
|
|
60
|
+
// set state properties based on received server info
|
|
61
|
+
this.populateProperties(serverState, { serverListing })
|
|
62
|
+
return serverState
|
|
63
|
+
})
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
async queryInfoSingle (state) {
|
|
67
|
+
const servers = await this.getMasterServerList()
|
|
68
|
+
const serverListing = servers.find((server) => {
|
|
69
|
+
return server.Guid === this.options.serverId
|
|
70
|
+
})
|
|
71
|
+
|
|
72
|
+
this.logger.debug('Server Listing:', serverListing)
|
|
73
|
+
if (serverListing == null) {
|
|
74
|
+
throw new Error('Server not found in master server listing')
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
const serverInfo = await this.getServerInfo(serverListing)
|
|
78
|
+
this.logger.debug('Server Info:', serverInfo)
|
|
79
|
+
if (!serverInfo) {
|
|
80
|
+
throw new Error('Invalid server info received')
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
// set state properties based on received server info
|
|
84
|
+
this.populateProperties(state, { serverListing, serverInfo })
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
async cleanup (state) {
|
|
88
|
+
await this.sendExitMessage()
|
|
89
|
+
await this.sendLogout()
|
|
90
|
+
|
|
91
|
+
this.backendApi.cleanup()
|
|
92
|
+
this.userInfo = null
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
/**
|
|
96
|
+
* Translates raw properties into known properties
|
|
97
|
+
* @param {Object} state Parsed data
|
|
98
|
+
* @param {Object} data Queried data
|
|
99
|
+
*/
|
|
100
|
+
populateProperties (state, data) {
|
|
101
|
+
const { serverListing: listing, serverInfo: info } = data
|
|
102
|
+
|
|
103
|
+
if (info) {
|
|
104
|
+
state.gameHost = info.AssignedServerIp || null
|
|
105
|
+
state.gamePort = info.AssignedServerPort || null
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
state.name = listing.ServerName || ''
|
|
109
|
+
state.map = listing.Map || ''
|
|
110
|
+
state.password = !!listing.DeveloperData?.PasswordHash
|
|
111
|
+
|
|
112
|
+
state.numplayers = listing.Users?.length || 0
|
|
113
|
+
state.maxplayers = listing.MaxUsers || 0
|
|
114
|
+
state.version = listing.GameVersion || ''
|
|
115
|
+
|
|
116
|
+
// provide raw server info
|
|
117
|
+
Object.assign(state.raw, { listing, info })
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
async retrieveClientAccessToken () {
|
|
121
|
+
if (this.options.token) {
|
|
122
|
+
this.doLogout = false
|
|
123
|
+
this.backendApi.accessToken = this.options.token
|
|
124
|
+
await this.checkAccess()
|
|
125
|
+
return
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
if (!this.options.username && !this.requireToken) {
|
|
129
|
+
this.logger.debug('retrieveClientAccessToken: No username provided but no token required for current protocol.')
|
|
130
|
+
return
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
this.logger.debug(`Retrieving user access token for ${this.options.username}...`)
|
|
134
|
+
const response = await this.backendApi.getClientAccessToken(this.options.username, this.options.password)
|
|
135
|
+
|
|
136
|
+
const tag = 'access token'
|
|
137
|
+
MeteorBackendApi.AssertResponse(response, tag)
|
|
138
|
+
MeteorBackendApi.AssertResponseMessage(response, tag, { match: ['Access Grant Not Issued: Unrecognized options for login request'], errorMessage: 'No user name or password' })
|
|
139
|
+
MeteorBackendApi.AssertResponseMessage(response, tag, { match: ['Access Grant Not Issued: User not found'], errorMessage: 'Invalid user name' })
|
|
140
|
+
MeteorBackendApi.AssertResponseMessage(response, tag, { match: ['Access Grant Not Issued: Incorrect password'], errorMessage: 'Incorrect password' })
|
|
141
|
+
MeteorBackendApi.AssertResponseStatus(response, tag, { printStatus: true })
|
|
142
|
+
MeteorBackendApi.AssertResponseMessage(response, tag, { expected: ['User Logged In'] })
|
|
143
|
+
MeteorBackendApi.AssertResponseData(response, tag)
|
|
144
|
+
|
|
145
|
+
this.backendApi.accessToken = response.Result
|
|
146
|
+
await this.checkAccess()
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
async retrieveUser () {
|
|
150
|
+
if (!this.options.username && !this.requireToken) {
|
|
151
|
+
this.logger.debug('retrieveUser: No username provided but no token required for current protocol.')
|
|
152
|
+
return
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
this.userInfo = await this.getUserInfo()
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
async checkAccess () {
|
|
159
|
+
this.logger.debug('Checking access ...')
|
|
160
|
+
const responseServices = await this.backendApi.getStatusServices()
|
|
161
|
+
MeteorBackendApi.AssertResponseStatus(responseServices, 'service status')
|
|
162
|
+
MeteorBackendApi.AssertResponseMessage(responseServices, 'service status', { expected: ['Status found'] })
|
|
163
|
+
|
|
164
|
+
const responseTest = await this.backendApi.getBundles()
|
|
165
|
+
MeteorBackendApi.AssertResponseStatus(responseTest, 'bundles')
|
|
166
|
+
MeteorBackendApi.AssertResponseMessage(responseTest, 'bundles', { expected: ['Bundles Filter successful'] })
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
async getUserInfo () {
|
|
170
|
+
this.logger.debug(`Requesting user info for ${this.options.username} ...`)
|
|
171
|
+
const response = await this.backendApi.getUserInfo(this.options.username)
|
|
172
|
+
|
|
173
|
+
const tag = 'user info'
|
|
174
|
+
MeteorBackendApi.AssertResponse(response, tag)
|
|
175
|
+
MeteorBackendApi.AssertResponseMessage(response, tag, { match: ['User not found'], errorMessage: 'Invalid or no user name' })
|
|
176
|
+
MeteorBackendApi.AssertResponseStatus(response, tag, { printStatus: true })
|
|
177
|
+
MeteorBackendApi.AssertResponseMessage(response, tag, { expected: ['Userfound'] })
|
|
178
|
+
MeteorBackendApi.AssertResponseData(response, tag)
|
|
179
|
+
return response.Result
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
async getMasterServerList () {
|
|
183
|
+
this.logger.debug('Requesting game servers ...')
|
|
184
|
+
const response = await this.backendApi.getMasterServerList()
|
|
185
|
+
|
|
186
|
+
const tag = 'server list'
|
|
187
|
+
MeteorBackendApi.AssertResponseStatus(response, tag)
|
|
188
|
+
MeteorBackendApi.AssertResponseMessage(response, tag, { expected: ['Listings found'] })
|
|
189
|
+
MeteorBackendApi.AssertResponseData(response, tag)
|
|
190
|
+
|
|
191
|
+
const servers = response.Result
|
|
192
|
+
if (!Array.isArray(servers)) {
|
|
193
|
+
throw new Error('Invalid data received from master server. Expecting list of data')
|
|
194
|
+
}
|
|
195
|
+
if (servers.length === 0) {
|
|
196
|
+
throw new Error('No data received from master server.')
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
// TODO: Ajv response validation
|
|
200
|
+
// const isDataValid = ajv.validate(MasterServerResponseSchema, servers)
|
|
201
|
+
// if (!isDataValid) {
|
|
202
|
+
// throw new Error(`Received master server data is unknown/invalid: ${ajv.errorsText(ajv.errors)}`)
|
|
203
|
+
// }
|
|
204
|
+
|
|
205
|
+
return servers
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
async getServerInfo (serverListing) {
|
|
209
|
+
// match info is received by requesting a matchmaking "token"
|
|
210
|
+
// if the server is at capacity, the response won't provide valid data (500 error)
|
|
211
|
+
// return an empty server info when server is already full
|
|
212
|
+
if (serverListing.MaxUsers == serverListing.Users?.length) {
|
|
213
|
+
return {}
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
const serverToken = await this.getServerToken(serverListing)
|
|
217
|
+
const matchInfo = await this.getMatchInfo(serverToken)
|
|
218
|
+
return matchInfo
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
async getServerToken (serverListing) {
|
|
222
|
+
this.logger.debug(`Requesting server token ${serverListing.Guid} ...`)
|
|
223
|
+
const response = await this.backendApi.getServerToken(serverListing, this.userInfo)
|
|
224
|
+
|
|
225
|
+
const tag = 'server token'
|
|
226
|
+
MeteorBackendApi.AssertResponseStatus(response, tag)
|
|
227
|
+
MeteorBackendApi.AssertResponseMessage(response, tag, { expected: ['Succesfully created the advertisement'] })
|
|
228
|
+
MeteorBackendApi.AssertResponseData(response, tag)
|
|
229
|
+
return response.Result
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
async getMatchInfo (serverToken) {
|
|
233
|
+
this.logger.debug(`Requesting match info ${serverToken} ...`)
|
|
234
|
+
const response = await this.backendApi.getMatchInfo(serverToken)
|
|
235
|
+
|
|
236
|
+
const tag = 'match info'
|
|
237
|
+
MeteorBackendApi.AssertResponseStatus(response, tag)
|
|
238
|
+
MeteorBackendApi.AssertResponseMessage(response, tag, { expected: ['Successfully loaded ClientMatchmakingAdvertisement.'] })
|
|
239
|
+
MeteorBackendApi.AssertResponseData(response, tag)
|
|
240
|
+
return response.Result
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
async sendExitMessage () {
|
|
244
|
+
// in case of non-authorized query, early out and skip sending logout message
|
|
245
|
+
if (!this.backendApi.accessToken || !this.userInfo) {
|
|
246
|
+
return
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
this.logger.debug('Sending exit notify message ...')
|
|
250
|
+
const response = await this.backendApi.notifyExit(this.userInfo)
|
|
251
|
+
|
|
252
|
+
const tag = 'exit message'
|
|
253
|
+
MeteorBackendApi.AssertResponseStatus(response, tag)
|
|
254
|
+
MeteorBackendApi.AssertResponseMessage(response, tag, { expected: ['Event emission successful'] })
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
async sendLogout () {
|
|
258
|
+
// in case of no logged user or non-authorized query, early out and skip sending logout message
|
|
259
|
+
if (!this.doLogout || !this.backendApi.accessToken || !this.userInfo) {
|
|
260
|
+
return
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
this.logger.debug(`Sending logout message for ${this.userInfo?.EmailAddress || this.userInfo.Guid}...`)
|
|
264
|
+
const response = await this.backendApi.logout(this.userInfo)
|
|
265
|
+
|
|
266
|
+
const tag = 'logout message'
|
|
267
|
+
MeteorBackendApi.AssertResponseStatus(response, tag)
|
|
268
|
+
MeteorBackendApi.AssertResponseMessage(response, tag, { expected: ['AccessGrant Revoked'] })
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
/**
|
|
273
|
+
* Deeply merges two objects, combining their properties recursively.
|
|
274
|
+
*
|
|
275
|
+
* If both objects have a property with the same key and that property is an object,
|
|
276
|
+
* the properties of the second object will be merged into the first object's property.
|
|
277
|
+
* If the property is not an object or if it does not exist in the first object,
|
|
278
|
+
* the property from the second object will overwrite the property in the first object.
|
|
279
|
+
*
|
|
280
|
+
* @param {Object} obj1 - The first object to merge.
|
|
281
|
+
* @param {Object} obj2 - The second object to merge.
|
|
282
|
+
* @returns {Object} A new object containing the merged properties of both input objects.
|
|
283
|
+
*/
|
|
284
|
+
function deepMerge (obj1, obj2) {
|
|
285
|
+
const result = { ...obj1 }
|
|
286
|
+
|
|
287
|
+
for (const key in obj2) {
|
|
288
|
+
if (Object.hasOwn(obj2, key)) {
|
|
289
|
+
if (obj2[key] instanceof Object && obj1[key] instanceof Object) {
|
|
290
|
+
result[key] = deepMerge(obj1[key], obj2[key])
|
|
291
|
+
} else {
|
|
292
|
+
result[key] = obj2[key]
|
|
293
|
+
}
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
|
|
297
|
+
return result
|
|
298
|
+
}
|
|
299
|
+
|
|
300
|
+
function isObject (item) {
|
|
301
|
+
return (typeof item === 'object' && !Array.isArray(item) && item !== null)
|
|
302
|
+
}
|
|
303
|
+
|
|
304
|
+
/**
|
|
305
|
+
* Class representing a client for the Meteor Backend API.
|
|
306
|
+
*
|
|
307
|
+
* This class provides methods for interacting with the Meteor Backend API, including
|
|
308
|
+
* authentication, retrieving user information, and handling server-related operations.
|
|
309
|
+
*/
|
|
310
|
+
export class MeteorBackendApi {
|
|
311
|
+
#accessToken = null
|
|
312
|
+
#protocol = null
|
|
313
|
+
#apiUri = null
|
|
314
|
+
|
|
315
|
+
/**
|
|
316
|
+
* Creates an instance of the MeteorBackendApi.
|
|
317
|
+
*
|
|
318
|
+
* @param {Object} protocol - The protocol object to handle requests.
|
|
319
|
+
* @param {string} apiUri - The base URI for the API.
|
|
320
|
+
*/
|
|
321
|
+
constructor (protocol, apiUri) {
|
|
322
|
+
this.#protocol = protocol
|
|
323
|
+
this.#apiUri = apiUri
|
|
324
|
+
this.logger = null
|
|
325
|
+
}
|
|
326
|
+
|
|
327
|
+
/**
|
|
328
|
+
* The base URI of the API.
|
|
329
|
+
*
|
|
330
|
+
* @returns {string} The API URI.
|
|
331
|
+
*/
|
|
332
|
+
get apiUri () {
|
|
333
|
+
return this.#apiUri
|
|
334
|
+
}
|
|
335
|
+
|
|
336
|
+
/**
|
|
337
|
+
* Sets the current access token
|
|
338
|
+
* @param {string} value the access token
|
|
339
|
+
*/
|
|
340
|
+
set accessToken (value) {
|
|
341
|
+
this.#accessToken = value
|
|
342
|
+
}
|
|
343
|
+
|
|
344
|
+
/**
|
|
345
|
+
* Returns the current access token
|
|
346
|
+
*/
|
|
347
|
+
get accessToken () {
|
|
348
|
+
return this.#accessToken
|
|
349
|
+
}
|
|
350
|
+
|
|
351
|
+
/**
|
|
352
|
+
* Sets the logger for the instance.
|
|
353
|
+
*
|
|
354
|
+
* @param {Object} logger - The logger instance to use for logging.
|
|
355
|
+
*/
|
|
356
|
+
setLogger (logger) {
|
|
357
|
+
this.logger = logger
|
|
358
|
+
}
|
|
359
|
+
|
|
360
|
+
/**
|
|
361
|
+
* Makes an API call to the specified endpoint with the given request parameters.
|
|
362
|
+
*
|
|
363
|
+
* @param {string} endpoint - The API endpoint to call.
|
|
364
|
+
* @param {Object} requestParams - The parameters for the API request.
|
|
365
|
+
* @param {Object} callParams - Additional parameters for the call.
|
|
366
|
+
* @param {boolean} [callParams.requireAuth=false] - Whether the call requires authentication.
|
|
367
|
+
* @returns {Promise<Object>} A promise that resolves to the response object from the API call.
|
|
368
|
+
*/
|
|
369
|
+
makeCall (endpoint, requestParams = null, callParams = null) {
|
|
370
|
+
const { requireAuth = false } = callParams ?? {}
|
|
371
|
+
|
|
372
|
+
const url = `${this.#apiUri}/${endpoint}`
|
|
373
|
+
const headers = {
|
|
374
|
+
Accept: '*/*',
|
|
375
|
+
'Content-Type': 'application/json',
|
|
376
|
+
...(requireAuth ? { Authorization: `Basic ${this.accessToken}` } : {})
|
|
377
|
+
}
|
|
378
|
+
|
|
379
|
+
const defaultParams = {
|
|
380
|
+
url,
|
|
381
|
+
headers,
|
|
382
|
+
method: 'GET',
|
|
383
|
+
responseType: 'json'
|
|
384
|
+
}
|
|
385
|
+
const requestCollection = deepMerge(defaultParams, requestParams)
|
|
386
|
+
|
|
387
|
+
this.logger?.debug(`${requestCollection.method || 'GET'}: ${url}`)
|
|
388
|
+
const response = this.#protocol.request(requestCollection)
|
|
389
|
+
return response
|
|
390
|
+
}
|
|
391
|
+
|
|
392
|
+
/**
|
|
393
|
+
* Cleans up the instance
|
|
394
|
+
*/
|
|
395
|
+
cleanup () {
|
|
396
|
+
this.accessToken = null
|
|
397
|
+
}
|
|
398
|
+
|
|
399
|
+
/**
|
|
400
|
+
* Retrieves the status of the service.
|
|
401
|
+
*
|
|
402
|
+
* @returns {Promise<Object>} A promise that resolves to the response object from the API call.
|
|
403
|
+
*/
|
|
404
|
+
getStatusServices () {
|
|
405
|
+
const response = this.makeCall('status/services')
|
|
406
|
+
return response
|
|
407
|
+
}
|
|
408
|
+
|
|
409
|
+
/**
|
|
410
|
+
* Retrieves Bundles.
|
|
411
|
+
*
|
|
412
|
+
* @returns {Promise<Object>} A promise that resolves to the response object from the API call.
|
|
413
|
+
*/
|
|
414
|
+
getBundles () {
|
|
415
|
+
const response = this.makeCall('bundles', {}, { requireAuth: true })
|
|
416
|
+
return response
|
|
417
|
+
}
|
|
418
|
+
|
|
419
|
+
/**
|
|
420
|
+
* Retrieves an access token for a client using the provided username and password.
|
|
421
|
+
*
|
|
422
|
+
* @param {string} userName - The username of the client.
|
|
423
|
+
* @param {string} password - The password of the client.
|
|
424
|
+
* @returns {Promise<Object>} A promise that resolves to the response object from the API call.
|
|
425
|
+
*/
|
|
426
|
+
getClientAccessToken (userName, password) {
|
|
427
|
+
const endpoint = `users/${encodeURIComponent(userName)}/accessGrant`
|
|
428
|
+
const body = { Password: password }
|
|
429
|
+
const response = this.makeCall(endpoint, { json: body, method: 'POST' })
|
|
430
|
+
return response
|
|
431
|
+
}
|
|
432
|
+
|
|
433
|
+
/**
|
|
434
|
+
* Retrieves user information based on the username.
|
|
435
|
+
*
|
|
436
|
+
* @param {string} userName - The username of the user.
|
|
437
|
+
* @returns {Promise<Object>} A promise that resolves to the response object from the API call.
|
|
438
|
+
*/
|
|
439
|
+
getUserInfo (userName) {
|
|
440
|
+
const endpoint = `users/${encodeURIComponent(userName)}`
|
|
441
|
+
const response = this.makeCall(endpoint, {}, { requireAuth: true })
|
|
442
|
+
return response
|
|
443
|
+
}
|
|
444
|
+
|
|
445
|
+
/**
|
|
446
|
+
* Retrieves a list of master servers.
|
|
447
|
+
*
|
|
448
|
+
* @returns {Promise<Object>} A promise that resolves to the response object from the API call.
|
|
449
|
+
*/
|
|
450
|
+
getMasterServerList () {
|
|
451
|
+
const response = this.makeCall('gameServerListings', {}, { requireAuth: true })
|
|
452
|
+
return response
|
|
453
|
+
}
|
|
454
|
+
|
|
455
|
+
/**
|
|
456
|
+
* Retrieves a server token based on the server listing and user information.
|
|
457
|
+
*
|
|
458
|
+
* @param {Object} serverListing - The server listing object containing server details.
|
|
459
|
+
* @param {Object} userInfo - The user information object.
|
|
460
|
+
* @returns {Promise<Object>} A promise that resolves to the response object from the API call.
|
|
461
|
+
*/
|
|
462
|
+
getServerToken (serverListing, userInfo) {
|
|
463
|
+
const body = {
|
|
464
|
+
GameVersion: serverListing.GameVersion,
|
|
465
|
+
OwnerGuid: userInfo.Guid,
|
|
466
|
+
Region: serverListing.Region,
|
|
467
|
+
RequestedServerGuid: serverListing.Guid,
|
|
468
|
+
Users: [userInfo.Guid]
|
|
469
|
+
}
|
|
470
|
+
const response = this.makeCall('hawkenClientMatchmakingAdvertisements', { json: body, method: 'POST' }, { requireAuth: true })
|
|
471
|
+
return response
|
|
472
|
+
}
|
|
473
|
+
|
|
474
|
+
/**
|
|
475
|
+
* Retrieves match information based on the server token.
|
|
476
|
+
*
|
|
477
|
+
* @param {string} serverToken - The token of the server.
|
|
478
|
+
* @returns {Promise<Object>} A promise that resolves to the response object from the API call.
|
|
479
|
+
*/
|
|
480
|
+
getMatchInfo (serverToken) {
|
|
481
|
+
const endpoint = `hawkenClientMatchmakingAdvertisements/${serverToken}`
|
|
482
|
+
const response = this.makeCall(endpoint, {}, { requireAuth: true })
|
|
483
|
+
return response
|
|
484
|
+
}
|
|
485
|
+
|
|
486
|
+
/**
|
|
487
|
+
* Notifies the system that a user has exited.
|
|
488
|
+
*
|
|
489
|
+
* @param {Object} userInfo - The user information object.
|
|
490
|
+
* @returns {Promise<Object>} A promise that resolves to the response object from the API call.
|
|
491
|
+
*/
|
|
492
|
+
notifyExit (userInfo) {
|
|
493
|
+
const body = [{
|
|
494
|
+
Data: {
|
|
495
|
+
TimeCreated: (new Date().getTime() / 1000)
|
|
496
|
+
},
|
|
497
|
+
Producer: {
|
|
498
|
+
Id: '\\Hawken-CL142579\\Binaries\\Win32\\HawkenGame-Win32-Shipping.exe',
|
|
499
|
+
Type: 'HawkenGameClient'
|
|
500
|
+
},
|
|
501
|
+
Subject: {
|
|
502
|
+
Id: userInfo.Guid,
|
|
503
|
+
Type: 'Player'
|
|
504
|
+
},
|
|
505
|
+
Timestamp: (new Date().toISOString()),
|
|
506
|
+
Verb: 'ExitClient'
|
|
507
|
+
}]
|
|
508
|
+
const response = this.makeCall('gameClientEvent', { json: body, method: 'POST' }, { requireAuth: true })
|
|
509
|
+
return response
|
|
510
|
+
}
|
|
511
|
+
|
|
512
|
+
/**
|
|
513
|
+
* Logs out a user based on their information.
|
|
514
|
+
*
|
|
515
|
+
* @param {Object} userInfo - The user information object.
|
|
516
|
+
* @returns {Promise<Object>} A promise that resolves to the response object from the API call.
|
|
517
|
+
*/
|
|
518
|
+
logout (userInfo) {
|
|
519
|
+
const endpoint = `users/${userInfo.Guid}/accessGrant`
|
|
520
|
+
const body = { AccessGrant: this.accessToken }
|
|
521
|
+
const response = this.makeCall(endpoint, { json: body, method: 'PUT' }, { requireAuth: true })
|
|
522
|
+
return response
|
|
523
|
+
}
|
|
524
|
+
|
|
525
|
+
/**
|
|
526
|
+
* Asserts that the response is valid.
|
|
527
|
+
*
|
|
528
|
+
* @static
|
|
529
|
+
* @param {Object} response - The response object to validate.
|
|
530
|
+
* @param {string} tag - A tag for the error message.
|
|
531
|
+
* @param {Object} [params={}] - Additional parameters.
|
|
532
|
+
* @param {boolean} [params.printStatus=false] - Whether to include the status in the error message.
|
|
533
|
+
* @throws {Error} If the response is invalid.
|
|
534
|
+
*/
|
|
535
|
+
static AssertResponse (response, tag, params = {}) {
|
|
536
|
+
const { printStatus = false } = (params || {})
|
|
537
|
+
if (!response) {
|
|
538
|
+
const statusMessage = printStatus ? `Response Status: ${response.Status}` : ''
|
|
539
|
+
throw new Error(`Error retrieving ${tag || 'data'} with no valid response.${statusMessage}`)
|
|
540
|
+
}
|
|
541
|
+
}
|
|
542
|
+
|
|
543
|
+
/**
|
|
544
|
+
* Asserts that the response status is valid.
|
|
545
|
+
*
|
|
546
|
+
* @static
|
|
547
|
+
* @param {Object} response - The response object to validate.
|
|
548
|
+
* @param {string} tag - A tag for the error message.
|
|
549
|
+
* @param {Object} [params={}] - Additional parameters.
|
|
550
|
+
* @param {boolean} [params.checkStatus=true] - Whether to check the status code.
|
|
551
|
+
* @param {boolean} [params.printStatus=false] - Whether to include the status in the error message.
|
|
552
|
+
* @throws {Error} If the response status is invalid.
|
|
553
|
+
*/
|
|
554
|
+
static AssertResponseStatus (response, tag, params = {}) {
|
|
555
|
+
const { checkStatus = true, printStatus = false } = (params || {})
|
|
556
|
+
if (!response || !checkStatus || response.Status !== 200) {
|
|
557
|
+
const statusMessage = printStatus ? `Response Status: ${response.Status}` : ''
|
|
558
|
+
throw new Error(`Error retrieving ${tag || 'data'} with no valid response.${statusMessage}`)
|
|
559
|
+
}
|
|
560
|
+
}
|
|
561
|
+
|
|
562
|
+
/**
|
|
563
|
+
* Asserts that the response message is valid.
|
|
564
|
+
*
|
|
565
|
+
* @static
|
|
566
|
+
* @param {Object} response - The response object to validate.
|
|
567
|
+
* @param {string} tag - A tag for the error message.
|
|
568
|
+
* @param {Object} [params={}] - Additional parameters.
|
|
569
|
+
* @param {Array<string>} [params.expected=[]] - Expected messages.
|
|
570
|
+
* @param {Array<string>} [params.match=[]] - Matching messages.
|
|
571
|
+
* @param {boolean} [params.printCurrent=true] - Whether to include the current message in the error message.
|
|
572
|
+
* @throws {Error} If the response message is invalid.
|
|
573
|
+
*/
|
|
574
|
+
static AssertResponseMessage (response, tag, params = {}) {
|
|
575
|
+
const { expected = [], match = [], errorMessage, printCurrent = true } = (params || {})
|
|
576
|
+
const responseMessage = response?.Message?.toLowerCase()
|
|
577
|
+
|
|
578
|
+
if (expected?.length && !expected.some(x => responseMessage === `${x}`.toLowerCase())) {
|
|
579
|
+
const currentMessage = printCurrent ? ` Response message: ${response.Message}` : ''
|
|
580
|
+
throw new Error(`Invalid ${tag || 'data'} message received.${currentMessage}`)
|
|
581
|
+
}
|
|
582
|
+
|
|
583
|
+
if (match?.some(x => responseMessage === `${x}`.toLowerCase())) {
|
|
584
|
+
throw new Error(errorMessage || `Invalid ${tag || 'data'} message received.`)
|
|
585
|
+
}
|
|
586
|
+
}
|
|
587
|
+
|
|
588
|
+
/**
|
|
589
|
+
* Asserts that the response contains valid data.
|
|
590
|
+
*
|
|
591
|
+
* @static
|
|
592
|
+
* @param {Object} response - The response object to validate.
|
|
593
|
+
* @param {string} tag - A tag for the error message.
|
|
594
|
+
* @param {string} [key='Result'] - The key to check in the response.
|
|
595
|
+
* @throws {Error} If the response does not contain valid data.
|
|
596
|
+
*/
|
|
597
|
+
static AssertResponseData (response, tag, key = 'Result') {
|
|
598
|
+
if (response && (!isObject(response) || !response[key])) {
|
|
599
|
+
throw new Error(`No ${tag || 'data'} received`)
|
|
600
|
+
}
|
|
601
|
+
}
|
|
602
|
+
}
|
|
603
|
+
|
|
604
|
+
|
|
605
|
+
export const MasterServerServerListingSchema = {
|
|
606
|
+
type: 'object',
|
|
607
|
+
required: [
|
|
608
|
+
'userGuid',
|
|
609
|
+
'AllowedRoles',
|
|
610
|
+
'DeveloperData',
|
|
611
|
+
'Endpoint',
|
|
612
|
+
'GameType',
|
|
613
|
+
'GameVersion',
|
|
614
|
+
'IsMatchmakingVisible',
|
|
615
|
+
'IsPublicVisible',
|
|
616
|
+
'LastUpdate',
|
|
617
|
+
'Map',
|
|
618
|
+
'MatchCompletionPercent',
|
|
619
|
+
'MatchId',
|
|
620
|
+
'MaxUsers',
|
|
621
|
+
'MinUsers',
|
|
622
|
+
'Port',
|
|
623
|
+
'Region',
|
|
624
|
+
'ServerName',
|
|
625
|
+
'ServerRanking',
|
|
626
|
+
'ServerScore',
|
|
627
|
+
'Status',
|
|
628
|
+
'Users',
|
|
629
|
+
'VoiceChannelListing',
|
|
630
|
+
'Guid'
|
|
631
|
+
],
|
|
632
|
+
properties: {
|
|
633
|
+
userGuid: { type: 'string' },
|
|
634
|
+
AllowedRoles: {
|
|
635
|
+
type: 'array',
|
|
636
|
+
items: {
|
|
637
|
+
items: {}
|
|
638
|
+
}
|
|
639
|
+
},
|
|
640
|
+
DeveloperData: {
|
|
641
|
+
type: 'object',
|
|
642
|
+
properties: {
|
|
643
|
+
AveragePilotLevel: { type: 'string' },
|
|
644
|
+
MatchState: { type: 'string' },
|
|
645
|
+
bIgnoreMMR: { type: 'string' },
|
|
646
|
+
bTournament: { type: 'string' },
|
|
647
|
+
PasswordHash: {
|
|
648
|
+
type: 'string'
|
|
649
|
+
}
|
|
650
|
+
},
|
|
651
|
+
required: [
|
|
652
|
+
'AveragePilotLevel',
|
|
653
|
+
'MatchState',
|
|
654
|
+
'bIgnoreMMR',
|
|
655
|
+
'bTournament'
|
|
656
|
+
]
|
|
657
|
+
},
|
|
658
|
+
Endpoint: { type: 'null' },
|
|
659
|
+
GameType: { type: 'string' },
|
|
660
|
+
GameVersion: { type: 'string' },
|
|
661
|
+
IsMatchmakingVisible: { type: 'boolean' },
|
|
662
|
+
IsPublicVisible: { type: 'boolean' },
|
|
663
|
+
LastUpdate: { type: 'string' },
|
|
664
|
+
Map: { type: 'string' },
|
|
665
|
+
MatchCompletionPercent: {
|
|
666
|
+
type: 'integer',
|
|
667
|
+
minimum: 0
|
|
668
|
+
},
|
|
669
|
+
MatchId: {
|
|
670
|
+
type: 'string',
|
|
671
|
+
pattern: '^[A-Fa-f0-9]{32}$'
|
|
672
|
+
},
|
|
673
|
+
MaxUsers: {
|
|
674
|
+
type: 'integer',
|
|
675
|
+
minimum: 0
|
|
676
|
+
},
|
|
677
|
+
MinUsers: {
|
|
678
|
+
type: 'integer',
|
|
679
|
+
minimum: 0
|
|
680
|
+
},
|
|
681
|
+
Port: {
|
|
682
|
+
type: 'null'
|
|
683
|
+
},
|
|
684
|
+
Region: {
|
|
685
|
+
type: 'string',
|
|
686
|
+
enum: [
|
|
687
|
+
'Asia',
|
|
688
|
+
'Europe',
|
|
689
|
+
'North-America',
|
|
690
|
+
'Oceania'
|
|
691
|
+
]
|
|
692
|
+
},
|
|
693
|
+
ServerName: { type: 'string' },
|
|
694
|
+
ServerRanking: { type: 'integer' },
|
|
695
|
+
ServerScore: { type: 'string' },
|
|
696
|
+
Status: { type: 'integer' },
|
|
697
|
+
Users: {
|
|
698
|
+
type: 'array',
|
|
699
|
+
items: {
|
|
700
|
+
type: 'string',
|
|
701
|
+
format: 'uuid'
|
|
702
|
+
}
|
|
703
|
+
},
|
|
704
|
+
VoiceChannelListing: { type: 'string' },
|
|
705
|
+
Guid: {
|
|
706
|
+
type: 'string',
|
|
707
|
+
format: 'uuid'
|
|
708
|
+
}
|
|
709
|
+
}
|
|
710
|
+
}
|
|
711
|
+
|
|
712
|
+
export const MasterServerResponseSchema = {
|
|
713
|
+
type: 'array',
|
|
714
|
+
items: { $ref: '#/$defs/server' },
|
|
715
|
+
$defs: {
|
|
716
|
+
server: MasterServerServerListingSchema
|
|
717
|
+
}
|
|
718
|
+
}
|