diff --git a/src/core/engines/gows/grpc/gows.ts b/src/core/engines/gows/grpc/gows.ts index 71834c38..2ab71987 100644 --- a/src/core/engines/gows/grpc/gows.ts +++ b/src/core/engines/gows/grpc/gows.ts @@ -879,6 +879,99 @@ export namespace messages { return EventJson.deserialize(bytes); } } + export class StreamEventsRequest extends pb_1.Message { + #one_of_decls: number[][] = []; + constructor(data?: any[] | { + session?: Session; + exclude?: string[]; + }) { + super(); + pb_1.Message.initialize(this, Array.isArray(data) ? data : [], 0, -1, [2], this.#one_of_decls); + if (!Array.isArray(data) && typeof data == "object") { + if ("session" in data && data.session != undefined) { + this.session = data.session; + } + if ("exclude" in data && data.exclude != undefined) { + this.exclude = data.exclude; + } + } + } + get session() { + return pb_1.Message.getWrapperField(this, Session, 1) as Session; + } + set session(value: Session) { + pb_1.Message.setWrapperField(this, 1, value); + } + get has_session() { + return pb_1.Message.getField(this, 1) != null; + } + get exclude() { + return pb_1.Message.getFieldWithDefault(this, 2, []) as string[]; + } + set exclude(value: string[]) { + pb_1.Message.setField(this, 2, value); + } + static fromObject(data: { + session?: ReturnType; + exclude?: string[]; + }): StreamEventsRequest { + const message = new StreamEventsRequest({}); + if (data.session != null) { + message.session = Session.fromObject(data.session); + } + if (data.exclude != null) { + message.exclude = data.exclude; + } + return message; + } + toObject() { + const data: { + session?: ReturnType; + exclude?: string[]; + } = {}; + if (this.session != null) { + data.session = this.session.toObject(); + } + if (this.exclude != null) { + data.exclude = this.exclude; + } + return data; + } + serialize(): Uint8Array; + serialize(w: pb_1.BinaryWriter): void; + serialize(w?: pb_1.BinaryWriter): Uint8Array | void { + const writer = w || new pb_1.BinaryWriter(); + if (this.has_session) + writer.writeMessage(1, this.session, () => this.session.serialize(writer)); + if (this.exclude.length) + writer.writeRepeatedString(2, this.exclude); + if (!w) + return writer.getResultBuffer(); + } + static deserialize(bytes: Uint8Array | pb_1.BinaryReader): StreamEventsRequest { + const reader = bytes instanceof pb_1.BinaryReader ? bytes : new pb_1.BinaryReader(bytes), message = new StreamEventsRequest(); + while (reader.nextField()) { + if (reader.isEndGroup()) + break; + switch (reader.getFieldNumber()) { + case 1: + reader.readMessage(message.session, () => message.session = Session.deserialize(reader)); + break; + case 2: + pb_1.Message.addToRepeatedField(message, 2, reader.readString()); + break; + default: reader.skipField(); + } + } + return message; + } + serializeBinary(): Uint8Array { + return this.serialize(); + } + static deserializeBinary(bytes: Uint8Array): StreamEventsRequest { + return StreamEventsRequest.deserialize(bytes); + } + } export class PairCodeRequest extends pb_1.Message { #one_of_decls: number[][] = []; constructor(data?: any[] | { @@ -10491,20 +10584,20 @@ export namespace messages { path: "/messages.EventStream/StreamEvents", requestStream: false, responseStream: true, - requestSerialize: (message: Session) => Buffer.from(message.serialize()), - requestDeserialize: (bytes: Buffer) => Session.deserialize(new Uint8Array(bytes)), + requestSerialize: (message: StreamEventsRequest) => Buffer.from(message.serialize()), + requestDeserialize: (bytes: Buffer) => StreamEventsRequest.deserialize(new Uint8Array(bytes)), responseSerialize: (message: EventJson) => Buffer.from(message.serialize()), responseDeserialize: (bytes: Buffer) => EventJson.deserialize(new Uint8Array(bytes)) } }; [method: string]: grpc_1.UntypedHandleCall; - abstract StreamEvents(call: grpc_1.ServerWritableStream): void; + abstract StreamEvents(call: grpc_1.ServerWritableStream): void; } export class EventStreamClient extends grpc_1.makeGenericClientConstructor(UnimplementedEventStreamService.definition, "EventStream", {}) { constructor(address: string, credentials: grpc_1.ChannelCredentials, options?: Partial) { super(address, credentials, options); } - StreamEvents: GrpcStreamServiceInterface = (message: Session, metadata?: grpc_1.Metadata | grpc_1.CallOptions, options?: grpc_1.CallOptions): grpc_1.ClientReadableStream => { + StreamEvents: GrpcStreamServiceInterface = (message: StreamEventsRequest, metadata?: grpc_1.Metadata | grpc_1.CallOptions, options?: grpc_1.CallOptions): grpc_1.ClientReadableStream => { return super.StreamEvents(message, metadata, options); }; } diff --git a/src/core/engines/gows/grpc/gows_grpc_pb.js b/src/core/engines/gows/grpc/gows_grpc_pb.js index 625ad9cb..6c98bde1 100644 --- a/src/core/engines/gows/grpc/gows_grpc_pb.js +++ b/src/core/engines/gows/grpc/gows_grpc_pb.js @@ -642,6 +642,17 @@ function deserialize_messages_StartSessionRequest(buffer_arg) { return gows_pb.StartSessionRequest.deserializeBinary(new Uint8Array(buffer_arg)); } +function serialize_messages_StreamEventsRequest(arg) { + if (!(arg instanceof gows_pb.StreamEventsRequest)) { + throw new Error('Expected argument of type messages.StreamEventsRequest'); + } + return Buffer.from(arg.serializeBinary()); +} + +function deserialize_messages_StreamEventsRequest(buffer_arg) { + return gows_pb.StreamEventsRequest.deserializeBinary(new Uint8Array(buffer_arg)); +} + function serialize_messages_SubscribePresenceRequest(arg) { if (!(arg instanceof gows_pb.SubscribePresenceRequest)) { throw new Error('Expected argument of type messages.SubscribePresenceRequest'); @@ -695,10 +706,10 @@ var EventStreamService = exports.EventStreamService = { path: '/messages.EventStream/StreamEvents', requestStream: false, responseStream: true, - requestType: gows_pb.Session, + requestType: gows_pb.StreamEventsRequest, responseType: gows_pb.EventJson, - requestSerialize: serialize_messages_Session, - requestDeserialize: deserialize_messages_Session, + requestSerialize: serialize_messages_StreamEventsRequest, + requestDeserialize: deserialize_messages_StreamEventsRequest, responseSerialize: serialize_messages_EventJson, responseDeserialize: deserialize_messages_EventJson, }, diff --git a/src/core/engines/gows/grpc/gows_pb.js b/src/core/engines/gows/grpc/gows_pb.js index 39f8d3cf..8e14b15b 100644 --- a/src/core/engines/gows/grpc/gows_pb.js +++ b/src/core/engines/gows/grpc/gows_pb.js @@ -114,6 +114,7 @@ goog.exportSymbol('proto.messages.SetProfilePictureRequest', null, global); goog.exportSymbol('proto.messages.SortBy', null, global); goog.exportSymbol('proto.messages.SortBy.Order', null, global); goog.exportSymbol('proto.messages.StartSessionRequest', null, global); +goog.exportSymbol('proto.messages.StreamEventsRequest', null, global); goog.exportSymbol('proto.messages.SubscribePresenceRequest', null, global); goog.exportSymbol('proto.messages.UpdateContactRequest', null, global); goog.exportSymbol('proto.messages.UpdateParticipantsRequest', null, global); @@ -329,6 +330,27 @@ if (goog.DEBUG && !COMPILED) { */ proto.messages.EventJson.displayName = 'proto.messages.EventJson'; } +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.messages.StreamEventsRequest = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, proto.messages.StreamEventsRequest.repeatedFields_, null); +}; +goog.inherits(proto.messages.StreamEventsRequest, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.messages.StreamEventsRequest.displayName = 'proto.messages.StreamEventsRequest'; +} /** * Generated by JsPbCodeGenerator. * @param {Array=} opt_data Optional initial data array, typically from a @@ -3604,6 +3626,213 @@ proto.messages.EventJson.prototype.setData = function(value) { +/** + * List of repeated fields within this message type. + * @private {!Array} + * @const + */ +proto.messages.StreamEventsRequest.repeatedFields_ = [2]; + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.messages.StreamEventsRequest.prototype.toObject = function(opt_includeInstance) { + return proto.messages.StreamEventsRequest.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.messages.StreamEventsRequest} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.messages.StreamEventsRequest.toObject = function(includeInstance, msg) { + var f, obj = { + session: (f = msg.getSession()) && proto.messages.Session.toObject(includeInstance, f), + excludeList: (f = jspb.Message.getRepeatedField(msg, 2)) == null ? undefined : f + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.messages.StreamEventsRequest} + */ +proto.messages.StreamEventsRequest.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.messages.StreamEventsRequest; + return proto.messages.StreamEventsRequest.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.messages.StreamEventsRequest} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.messages.StreamEventsRequest} + */ +proto.messages.StreamEventsRequest.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = new proto.messages.Session; + reader.readMessage(value,proto.messages.Session.deserializeBinaryFromReader); + msg.setSession(value); + break; + case 2: + var value = /** @type {string} */ (reader.readString()); + msg.addExclude(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.messages.StreamEventsRequest.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.messages.StreamEventsRequest.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.messages.StreamEventsRequest} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.messages.StreamEventsRequest.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getSession(); + if (f != null) { + writer.writeMessage( + 1, + f, + proto.messages.Session.serializeBinaryToWriter + ); + } + f = message.getExcludeList(); + if (f.length > 0) { + writer.writeRepeatedString( + 2, + f + ); + } +}; + + +/** + * optional Session session = 1; + * @return {?proto.messages.Session} + */ +proto.messages.StreamEventsRequest.prototype.getSession = function() { + return /** @type{?proto.messages.Session} */ ( + jspb.Message.getWrapperField(this, proto.messages.Session, 1)); +}; + + +/** + * @param {?proto.messages.Session|undefined} value + * @return {!proto.messages.StreamEventsRequest} returns this +*/ +proto.messages.StreamEventsRequest.prototype.setSession = function(value) { + return jspb.Message.setWrapperField(this, 1, value); +}; + + +/** + * Clears the message field making it undefined. + * @return {!proto.messages.StreamEventsRequest} returns this + */ +proto.messages.StreamEventsRequest.prototype.clearSession = function() { + return this.setSession(undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.messages.StreamEventsRequest.prototype.hasSession = function() { + return jspb.Message.getField(this, 1) != null; +}; + + +/** + * repeated string exclude = 2; + * @return {!Array} + */ +proto.messages.StreamEventsRequest.prototype.getExcludeList = function() { + return /** @type {!Array} */ (jspb.Message.getRepeatedField(this, 2)); +}; + + +/** + * @param {!Array} value + * @return {!proto.messages.StreamEventsRequest} returns this + */ +proto.messages.StreamEventsRequest.prototype.setExcludeList = function(value) { + return jspb.Message.setField(this, 2, value || []); +}; + + +/** + * @param {string} value + * @param {number=} opt_index + * @return {!proto.messages.StreamEventsRequest} returns this + */ +proto.messages.StreamEventsRequest.prototype.addExclude = function(value, opt_index) { + return jspb.Message.addToRepeatedField(this, 2, value, opt_index); +}; + + +/** + * Clears the list making it empty but non-null. + * @return {!proto.messages.StreamEventsRequest} returns this + */ +proto.messages.StreamEventsRequest.prototype.clearExcludeList = function() { + return this.setExcludeList([]); +}; + + + if (jspb.Message.GENERATE_TO_OBJECT) { diff --git a/src/core/engines/gows/session.gows.core.ts b/src/core/engines/gows/session.gows.core.ts index 2000e688..79779b66 100644 --- a/src/core/engines/gows/session.gows.core.ts +++ b/src/core/engines/gows/session.gows.core.ts @@ -216,6 +216,10 @@ enum WhatsMeowEvent { CALL_REJECT = 'events.CallReject', CALL_TERMINATE = 'events.CallTerminate', CALL_OFFER_NOTICE = 'events.CallOfferNotice', + // Other + APP_STATE = 'events.AppState', + HISTORY_SYNC = 'events.HistorySync', + CONTACT = 'events.Contact', } export interface GowsConfig { @@ -313,7 +317,12 @@ export class WhatsappSessionGoWSCore extends WhatsappSession { this.engineConfig.connection, grpc.credentials.createInsecure(), ); - const stream = client.StreamEvents(this.session); + const exclude = []; + const request = new messages.StreamEventsRequest({ + session: this.session, + exclude: exclude, + }); + const stream = client.StreamEvents(request); return { client, stream }; }, );