diff --git a/lib/proto/messages.js b/lib/proto/messages.js index 403b4a2e..f4e77a16 100644 --- a/lib/proto/messages.js +++ b/lib/proto/messages.js @@ -13,6 +13,13 @@ var encodings = require('protocol-buffers-encodings') var varint = encodings.varint var skip = encodings.skip +var InnertubePayload = exports.InnertubePayload = { + buffer: true, + encodingLength: null, + encode: null, + decode: null +} + var NotificationPreferences = exports.NotificationPreferences = { buffer: true, encodingLength: null, @@ -62,6 +69,7 @@ var SearchFilter = exports.SearchFilter = { decode: null } +defineInnertubePayload() defineNotificationPreferences() defineLiveMessageParams() defineGetCommentsSectionParams() @@ -70,6 +78,344 @@ defineCreateCommentReplyParams() definePeformCommentActionParams() defineSearchFilter() +function defineInnertubePayload () { + var Context = InnertubePayload.Context = { + buffer: true, + encodingLength: null, + encode: null, + decode: null + } + + var SoundSearchParams = InnertubePayload.SoundSearchParams = { + buffer: true, + encodingLength: null, + encode: null, + decode: null + } + + defineContext() + defineSoundSearchParams() + + function defineContext () { + var Client = Context.Client = { + buffer: true, + encodingLength: null, + encode: null, + decode: null + } + + defineClient() + + function defineClient () { + Client.encodingLength = encodingLength + Client.encode = encode + Client.decode = decode + + function encodingLength (obj) { + var length = 0 + if (!defined(obj.unkparam)) throw new Error("unkparam is required") + var len = encodings.int32.encodingLength(obj.unkparam) + length += 2 + len + if (!defined(obj.client_version)) throw new Error("client_version is required") + var len = encodings.string.encodingLength(obj.client_version) + length += 2 + len + if (!defined(obj.client_name)) throw new Error("client_name is required") + var len = encodings.string.encodingLength(obj.client_name) + length += 2 + len + return length + } + + function encode (obj, buf, offset) { + if (!offset) offset = 0 + if (!buf) buf = Buffer.allocUnsafe(encodingLength(obj)) + var oldOffset = offset + if (!defined(obj.unkparam)) throw new Error("unkparam is required") + buf[offset++] = 128 + buf[offset++] = 1 + encodings.int32.encode(obj.unkparam, buf, offset) + offset += encodings.int32.encode.bytes + if (!defined(obj.client_version)) throw new Error("client_version is required") + buf[offset++] = 138 + buf[offset++] = 1 + encodings.string.encode(obj.client_version, buf, offset) + offset += encodings.string.encode.bytes + if (!defined(obj.client_name)) throw new Error("client_name is required") + buf[offset++] = 146 + buf[offset++] = 1 + encodings.string.encode(obj.client_name, buf, offset) + offset += encodings.string.encode.bytes + encode.bytes = offset - oldOffset + return buf + } + + function decode (buf, offset, end) { + if (!offset) offset = 0 + if (!end) end = buf.length + if (!(end <= buf.length && offset <= buf.length)) throw new Error("Decoded message is not valid") + var oldOffset = offset + var obj = { + unkparam: 0, + client_version: "", + client_name: "" + } + var found0 = false + var found1 = false + var found2 = false + while (true) { + if (end <= offset) { + if (!found0 || !found1 || !found2) throw new Error("Decoded message is not valid") + decode.bytes = offset - oldOffset + return obj + } + var prefix = varint.decode(buf, offset) + offset += varint.decode.bytes + var tag = prefix >> 3 + switch (tag) { + case 16: + obj.unkparam = encodings.int32.decode(buf, offset) + offset += encodings.int32.decode.bytes + found0 = true + break + case 17: + obj.client_version = encodings.string.decode(buf, offset) + offset += encodings.string.decode.bytes + found1 = true + break + case 18: + obj.client_name = encodings.string.decode(buf, offset) + offset += encodings.string.decode.bytes + found2 = true + break + default: + offset = skip(prefix & 7, buf, offset) + } + } + } + } + + Context.encodingLength = encodingLength + Context.encode = encode + Context.decode = decode + + function encodingLength (obj) { + var length = 0 + if (defined(obj.client)) { + var len = Client.encodingLength(obj.client) + length += varint.encodingLength(len) + length += 1 + len + } + return length + } + + function encode (obj, buf, offset) { + if (!offset) offset = 0 + if (!buf) buf = Buffer.allocUnsafe(encodingLength(obj)) + var oldOffset = offset + if (defined(obj.client)) { + buf[offset++] = 10 + varint.encode(Client.encodingLength(obj.client), buf, offset) + offset += varint.encode.bytes + Client.encode(obj.client, buf, offset) + offset += Client.encode.bytes + } + encode.bytes = offset - oldOffset + return buf + } + + function decode (buf, offset, end) { + if (!offset) offset = 0 + if (!end) end = buf.length + if (!(end <= buf.length && offset <= buf.length)) throw new Error("Decoded message is not valid") + var oldOffset = offset + var obj = { + client: null + } + while (true) { + if (end <= offset) { + decode.bytes = offset - oldOffset + return obj + } + var prefix = varint.decode(buf, offset) + offset += varint.decode.bytes + var tag = prefix >> 3 + switch (tag) { + case 1: + var len = varint.decode(buf, offset) + offset += varint.decode.bytes + obj.client = Client.decode(buf, offset, offset + len) + offset += Client.decode.bytes + break + default: + offset = skip(prefix & 7, buf, offset) + } + } + } + } + + function defineSoundSearchParams () { + SoundSearchParams.encodingLength = encodingLength + SoundSearchParams.encode = encode + SoundSearchParams.decode = decode + + function encodingLength (obj) { + var length = 0 + if (!defined(obj.target_id)) throw new Error("target_id is required") + var len = encodings.string.encodingLength(obj.target_id) + length += 1 + len + if (!defined(obj.query)) throw new Error("query is required") + var len = encodings.string.encodingLength(obj.query) + length += 1 + len + return length + } + + function encode (obj, buf, offset) { + if (!offset) offset = 0 + if (!buf) buf = Buffer.allocUnsafe(encodingLength(obj)) + var oldOffset = offset + if (!defined(obj.target_id)) throw new Error("target_id is required") + buf[offset++] = 18 + encodings.string.encode(obj.target_id, buf, offset) + offset += encodings.string.encode.bytes + if (!defined(obj.query)) throw new Error("query is required") + buf[offset++] = 26 + encodings.string.encode(obj.query, buf, offset) + offset += encodings.string.encode.bytes + encode.bytes = offset - oldOffset + return buf + } + + function decode (buf, offset, end) { + if (!offset) offset = 0 + if (!end) end = buf.length + if (!(end <= buf.length && offset <= buf.length)) throw new Error("Decoded message is not valid") + var oldOffset = offset + var obj = { + target_id: "", + query: "" + } + var found0 = false + var found1 = false + while (true) { + if (end <= offset) { + if (!found0 || !found1) throw new Error("Decoded message is not valid") + decode.bytes = offset - oldOffset + return obj + } + var prefix = varint.decode(buf, offset) + offset += varint.decode.bytes + var tag = prefix >> 3 + switch (tag) { + case 2: + obj.target_id = encodings.string.decode(buf, offset) + offset += encodings.string.decode.bytes + found0 = true + break + case 3: + obj.query = encodings.string.decode(buf, offset) + offset += encodings.string.decode.bytes + found1 = true + break + default: + offset = skip(prefix & 7, buf, offset) + } + } + } + } + + InnertubePayload.encodingLength = encodingLength + InnertubePayload.encode = encode + InnertubePayload.decode = decode + + function encodingLength (obj) { + var length = 0 + if (!defined(obj.context)) throw new Error("context is required") + var len = Context.encodingLength(obj.context) + length += varint.encodingLength(len) + length += 1 + len + if (defined(obj.target)) { + var len = encodings.string.encodingLength(obj.target) + length += 1 + len + } + if (defined(obj.sound_search_params)) { + var len = SoundSearchParams.encodingLength(obj.sound_search_params) + length += varint.encodingLength(len) + length += 2 + len + } + return length + } + + function encode (obj, buf, offset) { + if (!offset) offset = 0 + if (!buf) buf = Buffer.allocUnsafe(encodingLength(obj)) + var oldOffset = offset + if (!defined(obj.context)) throw new Error("context is required") + buf[offset++] = 10 + varint.encode(Context.encodingLength(obj.context), buf, offset) + offset += varint.encode.bytes + Context.encode(obj.context, buf, offset) + offset += Context.encode.bytes + if (defined(obj.target)) { + buf[offset++] = 18 + encodings.string.encode(obj.target, buf, offset) + offset += encodings.string.encode.bytes + } + if (defined(obj.sound_search_params)) { + buf[offset++] = 130 + buf[offset++] = 1 + varint.encode(SoundSearchParams.encodingLength(obj.sound_search_params), buf, offset) + offset += varint.encode.bytes + SoundSearchParams.encode(obj.sound_search_params, buf, offset) + offset += SoundSearchParams.encode.bytes + } + encode.bytes = offset - oldOffset + return buf + } + + function decode (buf, offset, end) { + if (!offset) offset = 0 + if (!end) end = buf.length + if (!(end <= buf.length && offset <= buf.length)) throw new Error("Decoded message is not valid") + var oldOffset = offset + var obj = { + context: null, + target: "", + sound_search_params: null + } + var found0 = false + while (true) { + if (end <= offset) { + if (!found0) throw new Error("Decoded message is not valid") + decode.bytes = offset - oldOffset + return obj + } + var prefix = varint.decode(buf, offset) + offset += varint.decode.bytes + var tag = prefix >> 3 + switch (tag) { + case 1: + var len = varint.decode(buf, offset) + offset += varint.decode.bytes + obj.context = Context.decode(buf, offset, offset + len) + offset += Context.decode.bytes + found0 = true + break + case 2: + obj.target = encodings.string.decode(buf, offset) + offset += encodings.string.decode.bytes + break + case 16: + var len = varint.decode(buf, offset) + offset += varint.decode.bytes + obj.sound_search_params = SoundSearchParams.decode(buf, offset, offset + len) + offset += SoundSearchParams.decode.bytes + break + default: + offset = skip(prefix & 7, buf, offset) + } + } + } +} + function defineNotificationPreferences () { var Preference = NotificationPreferences.Preference = { buffer: true, @@ -1748,4 +2094,4 @@ function defineSearchFilter () { function defined (val) { return val !== null && val !== undefined && (typeof val !== 'number' || !isNaN(val)) -} \ No newline at end of file +}