diff --git a/AuctionServices/Scraper/Drouot/Drouot.js b/AuctionServices/Scraper/Drouot/Drouot.js index befd3fd..fab92e7 100644 --- a/AuctionServices/Scraper/Drouot/Drouot.js +++ b/AuctionServices/Scraper/Drouot/Drouot.js @@ -1,6 +1,5 @@ // Interencheres.js 'use strict'; -const { platform } = require('os'); const {Scraper} = require('../Scraper'); const DrouotData = require('./DrouotData'); @@ -24,6 +23,8 @@ class Drouot extends Scraper { this._USER = "jp.ranu@cogip.de" this._PWD = "LYPYRKDUsSMH5BaWQxvH#" this._PATH_SESSION_FILE = ".session/session_drouot.json" + this._PATH_PROTOBUF_FILE = "./AuctionServices/Scraper/Drouot/drouot.proto" + this._BROWSER_TOOL = "playwrightBrowser" } getPictures = async ({ page, data}) => { @@ -159,55 +160,79 @@ class Drouot extends Scraper { return LotList } - async CheckAndConnect(page) { + // ### Playwright + // ########################################################################### + async CheckCookieDialog(page) { + console.log("-- CheckCookieDialog --") + return new Promise(async (resolve, reject) => { + + //let XpathCookieButton = "xpath=//button[contains(@class, 'rgpd') and contains(text(), 'Tout refuser')" + // const CookieButton = await page.$$(XpathCookieButton); + const CookieButton = await page.$('//button[contains(@class, "rgpd") and contains(text(), "Tout refuser")]'); + //console.log(CookieButton) + if (CookieButton && await CookieButton.isVisible()) { + console.log("-- Click on CookieButton --") + await CookieButton.click(); + } + + resolve(true) + }) + } + + async CheckAndConnect(page) { + return new Promise(async (resolve, reject) => { await page.goto(this._PAGE_MAIN); + + await this.CheckCookieDialog(page); + console.log("-- CheckConnexion --") //get the Connexion button - const [Connexion] = await page.$x("//div[contains(@class, 'btn') and contains(@class, 'ghost') and contains(text(), 'Connexion')]"); - console.log(Connexion) - + + let XpathConnexion = "//div[contains(@class, 'btn') and contains(@class, 'ghost') and contains(text(), 'Connexion')]" + const Connexion = await page.$$(XpathConnexion); + // if Connection button found => Login - if (Connexion) { + if (Connexion.length > 0) { console.log("-- Login --") await page.goto(this._PAGE_LOGIN); //get the Email field //console.log("-- get Email Input --") - await page.type('#email', this._USER); + //await page.type('#email', this._USER); + await page.fill('#email', this._USER); //console.log("-- get password Input --") - await page.type("#password", this._PWD); + //wait page.type("#password", this._PWD); + await page.fill('#password', this._PWD); + + //await page.screenshot({ path: 'screenshot.png', fullPage: true }); //console.log("-- get ConnexionButton --") - const [ConnexionButton] = await page.$x("//button[contains(text(), 'Connexion')]"); - await ConnexionButton.evaluate(b => b.click()); + //const [ConnexionButton] = await page.$x("//button[contains(text(), 'Connexion')]"); + //await ConnexionButton.evaluate(b => b.click()); + await page.click("//button[contains(text(), 'Connexion')]"); //console.log("-- Login wait --") await page.waitForTimeout(1000); //resolve(page) + + const ConnexionOK = await page.$$("//button[contains(text(), 'Continuer en tant que')]"); + //console.log(ConnexionOK) + if (ConnexionOK.length > 0) { + + //await ConnexionOK.screenshot({ path: 'screenshot.png', fullPage: true }); - const [ConnexionOK] = await page.$x("//button[contains(text(), 'Continuer en tant que')]"); - if (ConnexionOK) { - console.log("-- Connection OK --") - await ConnexionOK.evaluate(b => b.click()); + //await ConnexionOK.evaluate(b => b.click()); + await ConnexionOK[0].click(); await page.waitForTimeout(1000); await this._saveSession(page) - // const sessionData = await page.session.dumpString({ - // storageProviders: [ - // StorageProviderName.Cookie, - // StorageProviderName.LocalStorage, - // StorageProviderName.SessionStorage, - // StorageProviderName.IndexedDB, - // ], - // }) - // fs.writeFileSync(this._PATH_SESSION_FILE, sessionData); - // console.log("-- Connection OK --") + console.log("-- Connection OK --") resolve(page) } else { console.error("-- !!!! Connection ERROR !!!! --"); @@ -224,111 +249,188 @@ class Drouot extends Scraper { } Live = async (browser) => { + + const context = await this._getContext(browser); console.log("Live "+this._Name+": "+this.Url) + + let page = await context.newPage(); - const page = await browser.newPage(); - page = await this.CheckAndConnect(page); - let CheckAskStop = null; - let Socket = null; - const StopLive = async (params) => { - clearInterval(CheckAskStop); - Socket.off('Network.webSocketFrameReceived', listener); - page.close() - } - - const listener = async (params) => { - let payload = params.response.payloadData - if(payload.length>1 && payload.substring(0, 2) == '42'){ - payload = JSON.parse(payload.substring(2)) - //console.log(payload) - - const type = payload[0]; - const payloadData = payload[1]; + //init Protobuf Decoder + const protobuf = require("protobufjs"); + const root = await protobuf.load(this._PATH_PROTOBUF_FILE); + const LiveBiddingMessage = root.lookupType("drouot.LiveBiddingMessage"); - switch (type) { + const listener = async (params) => { + + let buffer = params.payload; - case 'startSale': - break; - case 'listAuctionedItems': - break; - - case 'joinedSale': - await this.JucunduNextItem( - payloadData.sale_id, - payloadData.timestamp, - payloadData.item_id, - payloadData.order_number.primary, - payloadData.title, - payloadData.description, - payloadData.pricing.estimates.min, - payloadData.pricing.estimates.max, - payloadData - ); - break; - - case 'auctionedItem': - await this.JucunduAuctionedItem( - payloadData.item_id, - payloadData.timestamp, - payloadData.auctioned.amount, - payloadData.auctioned.sold, - payloadData.auctioned.type - ); - break; - - case 'nextItem': - await this.JucunduNextItem( - payloadData.sale_id, - payloadData.timestamp, - payloadData.item_id, - payloadData.order_number.primary, - payloadData.title, - payloadData.description, - payloadData.pricing.estimates.min, - payloadData.pricing.estimates.max, - payloadData - ); - break; - - case 'bid': - await this.JucundusBid( - payloadData.item_id, - payloadData.timestamp, - payloadData.amount, - payloadData.auctioned_type - ); - break; - - case 'pauseSale': - console.error('** Pause **'); - console.log(payloadData); - // await this.JucundusEndSale() - // StopLive() - break; - - case 'endSale': - // await this.JucundusEndSale() - // StopLive() - break; - - default: - console.error('Unknown data type:', type); - console.log(payloadData); - } + const err = LiveBiddingMessage.verify(buffer); + if (err) { + throw err; } + const message = LiveBiddingMessage.decode(buffer); + const BideMessage = LiveBiddingMessage.toObject(message, {enums: String}); + + let DataLot = null + if(BideMessage.vente && BideMessage.vente.lot && BideMessage.vente.lot.lotId != undefined){ + DataLot = await this.platformData.getLiveDataLot(BideMessage.vente.lot.lotId); + } + //console.log('BideMessage Type: '+BideMessage.type+' Lot: '+BideMessage.vente.lot.lotId); + + switch (BideMessage.type) { + case 'PING': + break; + case 'PONG': + break; + case 'INIT': + console.log('INIT'); + + break; + case 'CLOSE': + console.log('CLOSE'); + + break; + case 'BID': + console.log('BID'); + console.log('Lot: '+BideMessage.vente.lot.lotId+' Amount: '+BideMessage.vente.bid.amount); + + await this.JucundusBid( + BideMessage.vente.lot.lotId, + Date.now(), + BideMessage.vente.bid.amount, + BideMessage.vente.bid.type + ); + break; + + case 'SELECT_LOT': + console.log('SELECT_LOT'); + console.log('Lot: '+BideMessage.vente.lot.lotId); + + //console.log('DataLot : '+DataLot) + + await this.JucunduNextItem( + BideMessage.vente.venteId, + Date.now(), + BideMessage.vente.lot.lotId, + DataLot.num, + DataLot.titre, + DataLot.description, + DataLot.estimationBasse, + DataLot.estimationHaute, + DataLot + ); + + break; + case 'STARTING_PRICE': + console.log('STARTING_PRICE'); + + await this.JucunduNextItem( + BideMessage.vente.venteId, + Date.now(), + BideMessage.vente.lot.lotId, + DataLot.num, + DataLot.titre, + DataLot.description, + DataLot.estimationBasse, + DataLot.estimationHaute, + DataLot + ); + + break; + case 'INCREMENT': + console.log('INCREMENT'); + break; + + case 'TENDERING': + console.log('TENDERING'); + console.log('Lot: '+BideMessage.vente.lot.lotId+' Amount: '+BideMessage.vente.bid.amount); + + await this.JucunduAuctionedItem( + BideMessage.vente.lot.lotId, + Date.now(), + BideMessage.vente.bid.amount, + BideMessage.vente.lot.state == 'ADJ' ? true : false, + BideMessage.vente.bid.type + ); + + break; + + case 'GENERIC_MESSAGE': + console.log('GENERIC_MESSAGE'); + break; + case 'CREATE_LOT': + console.log('CREATE_LOT'); + break; + case 'NOT_INTERESTED': + break; + case 'INTERESTED': + break; + case 'ACTIVITY': + break; + case 'NEW_CLIENT': + console.log('NEW_CLIENT'); + break; + case 'CLOSED_CLIENT': + break; + case 'KILL': + break; + case 'MULTILOT_REQUEST': + break; + case 'MULTILOT_RESPONSE': + break; + case 'SYNC_PAYMENT_LIMIT': + break; + case 'SWITCH_FREE_BID_AUTHORIZE': + break; + case 'REFRESH_CLIENTS_COUNT': + console.log('REFRESH_CLIENTS_COUNT'); + break; + default: + //console.log('Unknown type:', BideMessage); + } + }; - try{ - await page.goto(this.Url); - Socket = await page.target().createCDPSession(); - await Socket.send('Network.enable'); - await Socket.send('Page.enable'); - Socket.on('Network.webSocketFrameReceived', listener); - console.log('Listener set up for Network.webSocketFrameReceived event'); + // create the live URL + let {saleID} = await this.platformData.getUrlInfo(this.Url); + let UrlLive = this._PAGE_MAIN + "live/bidlive/" + saleID; + + let CheckAskStop = null; + let Socket = null; + + // Stop the Live + const StopLive = async (params) => { + clearInterval(CheckAskStop); + page.close() + browser.close() + } + + try{ + console.log('UrlLive : '+UrlLive) + + await page.goto(UrlLive, { waitUntil: 'domcontentloaded' }); + // intercept Lots Data + await page.route('https://api.drouot.com/drouot/gingolem/api/live/venteInfos/'+saleID+'?lang=fr', async route => { + console.log('GetLiveData') + const response = await route.fetch(); + const LotData = await response.json(); + this.platformData.setLiveData(LotData.data); + route.continue(); + }); + + page.on('websocket', ws => { + Socket = ws; + Socket.on('framereceived', listener); + console.log('Websocket connected'); + }); + + console.log('UrlLive : reload') + await page.reload(); + // check if stop was asked CheckAskStop = setInterval(async () => { this.JucundusCheckStop() diff --git a/AuctionServices/Scraper/Drouot/DrouotData.js b/AuctionServices/Scraper/Drouot/DrouotData.js index ee27e9d..26be1e1 100644 --- a/AuctionServices/Scraper/Drouot/DrouotData.js +++ b/AuctionServices/Scraper/Drouot/DrouotData.js @@ -5,10 +5,12 @@ const moment = require('moment-timezone'); const { Console } = require('console'); const { title } = require('process'); -class InterencheresData extends ScraperTools { +class DrouotData extends ScraperTools { _Name = 'drouot' + _LiveData = null + getUrlInfo = async (url) => { // URL Lot : https://drouot.com/fr/l/25184163-john-conde-17651794-britanniqu @@ -373,6 +375,20 @@ class InterencheresData extends ScraperTools { return SaleHouseName.trim() } + // ## Live Data + setLiveData = (Data) => { + this._LiveData = Data + } + + getLiveDataLot = async(lotId) => { + for (let lot of this._LiveData.lots) { + if (lot.id === lotId) { + return lot; + } + } + } + + } -module.exports = InterencheresData \ No newline at end of file +module.exports = DrouotData \ No newline at end of file diff --git a/AuctionServices/Scraper/Drouot/drouot.proto b/AuctionServices/Scraper/Drouot/drouot.proto new file mode 100644 index 0000000..799d5d4 --- /dev/null +++ b/AuctionServices/Scraper/Drouot/drouot.proto @@ -0,0 +1,139 @@ +syntax = "proto3"; +package drouot; + +message BidStruct { + enum Type { + LIVE = 0; + ROOM = 1; + } + uint32 amount = 1; + uint32 currentBidder = 2; + Type type = 3; + bool hasPriority = 4; + bool isLate = 5; + bool isAuto = 6; + IncrementStruct increment = 7; + uint32 nextamount = 8; + uint32 nextsmallamount = 9; + uint32 nextmediumamount = 10; + uint32 nextbigamount = 11; + uint32 nextsmallvehicleamount = 12; + uint32 nextmediumvehicleamount = 13; + uint32 nextstandardamount = 14; + uint32 nextmodel10amount = 15; +} + +message IncrementStruct { + enum Type { + FIXED = 0; + SMALL = 1; + MEDIUM = 2; + BIG = 3; + SMALL_VEHICLE = 4; + MEDIUM_VEHICLE = 5; + STANDARD = 6; + MODEL10 = 7; + CUSTOM = 8; + } + + Type type = 1; + uint32 fixedvalue = 2; + IncrementData customincrement = 3; +} + +message IncrementData { + repeated IncrementStep incrementarray = 1; +} + +message IncrementStep { + uint32 startvalue = 1; + uint32 incrementvalue = 2; + bool specialstep = 3; +} + +message ClientStruct { + enum Permission { + BIDDER = 0; + CYBER = 1; + SPECTATOR = 2; + } + + enum Activity { + IDLE = 0; + ACTIVE = 1; + OVER = 2; + OUT = 3; + } + + string sessionId = 1; + uint32 passeportId = 2; + string uuid = 3; + Permission permission = 4; + Activity activity = 5; + uint32 pingdelay = 6; + uint32 maxamount = 7; + bool hasnolimit = 8; + string token = 9; + string refreshtoken = 10; +} + +message LiveBiddingMessage { + enum Type { + PING = 0; + PONG = 1; + INIT = 2; + CLOSE = 3; + BID = 4; + SELECT_LOT = 5; + STARTING_PRICE = 6; + INCREMENT = 7; + TENDERING = 8; + GENERIC_MESSAGE = 9; + CREATE_LOT = 10; + NOT_INTERESTED = 11; + INTERESTED = 12; + ACTIVITY = 13; + NEW_CLIENT = 14; + CLOSED_CLIENT = 15; + KILL = 16; + MULTILOT_REQUEST = 17; + MULTILOT_RESPONSE = 18; + SYNC_PAYMENT_LIMIT = 19; + SWITCH_FREE_BID_AUTHORIZE = 20; + REFRESH_CLIENTS_COUNT = 21; + } + + Type type = 1; + ClientStruct client = 2; + VenteStruct vente = 3; + string message = 4; + map paramsMap = 5; + int64 pingtime = 6; +} + +message LotStruct { + enum State { + NEW = 0; + MAP = 1; + BIDDING = 2; + ADJ = 3; + ADJ_CANCELED = 4; + } + + uint32 lotId = 1; + State state = 2; + uint32 nextLotId = 3; +} + +message VenteStruct { + uint32 venteId = 1; + BidStruct bid = 2; + LotStruct lot = 3; + repeated uint32 connectedRegisteredListList = 4; + repeated uint32 connectedSpectatorListList = 5; + repeated uint32 connectedCyberclercListList = 6; + bool isfreebidauthorized = 7; + uint32 connectedbiddercount = 8; + uint32 connectedspectatorcount = 9; + uint32 readytobidcount = 10; +} \ No newline at end of file diff --git a/AuctionServices/Scraper/Drouot/Drouot.old.js b/AuctionServices/Scraper/Drouot/workData/Drouot.old.js similarity index 98% rename from AuctionServices/Scraper/Drouot/Drouot.old.js rename to AuctionServices/Scraper/Drouot/workData/Drouot.old.js index 45f46b3..60d482c 100644 --- a/AuctionServices/Scraper/Drouot/Drouot.old.js +++ b/AuctionServices/Scraper/Drouot/workData/Drouot.old.js @@ -1,6 +1,6 @@ // Drouot.js 'use strict'; -const {Scraper} = require('../Scraper'); +const {Scraper} = require('../../Scraper'); class Drouot extends Scraper { diff --git a/AuctionServices/Scraper/Drouot/workData/drouot.protobuf.js b/AuctionServices/Scraper/Drouot/workData/drouot.protobuf.js new file mode 100644 index 0000000..cd4e614 --- /dev/null +++ b/AuctionServices/Scraper/Drouot/workData/drouot.protobuf.js @@ -0,0 +1,989 @@ +Ye.exportSymbol("proto.BidStruct", null, Ve), + Ye.exportSymbol("proto.BidStruct.Type", null, Ve), + Ye.exportSymbol("proto.ClientStruct", null, Ve), + Ye.exportSymbol("proto.ClientStruct.Activity", null, Ve), + Ye.exportSymbol("proto.ClientStruct.Permission", null, Ve), + Ye.exportSymbol("proto.IncrementData", null, Ve), + Ye.exportSymbol("proto.IncrementStep", null, Ve), + Ye.exportSymbol("proto.IncrementStruct", null, Ve), + Ye.exportSymbol("proto.IncrementStruct.Type", null, Ve), + Ye.exportSymbol("proto.LiveBiddingMessage", null, Ve), + Ye.exportSymbol("proto.LiveBiddingMessage.Type", null, Ve), + Ye.exportSymbol("proto.LotStruct", null, Ve), + Ye.exportSymbol("proto.LotStruct.State", null, Ve), + Ye.exportSymbol("proto.VenteStruct", null, Ve), + (proto.IncrementStep = function (Be) { + _e.Message.initialize(this, Be, 0, -1, null, null); + }), + Ye.inherits(proto.IncrementStep, _e.Message), + Ye.DEBUG && !COMPILED && (proto.IncrementStep.displayName = "proto.IncrementStep"), + (proto.IncrementData = function (Be) { + _e.Message.initialize(this, Be, 0, -1, proto.IncrementData.repeatedFields_, null); + }), + Ye.inherits(proto.IncrementData, _e.Message), + Ye.DEBUG && !COMPILED && (proto.IncrementData.displayName = "proto.IncrementData"), + (proto.IncrementStruct = function (Be) { + _e.Message.initialize(this, Be, 0, -1, null, null); + }), + Ye.inherits(proto.IncrementStruct, _e.Message), + Ye.DEBUG && !COMPILED && (proto.IncrementStruct.displayName = "proto.IncrementStruct"), + (proto.BidStruct = function (Be) { + _e.Message.initialize(this, Be, 0, -1, null, null); + }), + Ye.inherits(proto.BidStruct, _e.Message), + Ye.DEBUG && !COMPILED && (proto.BidStruct.displayName = "proto.BidStruct"), + (proto.LotStruct = function (Be) { + _e.Message.initialize(this, Be, 0, -1, null, null); + }), + Ye.inherits(proto.LotStruct, _e.Message), + Ye.DEBUG && !COMPILED && (proto.LotStruct.displayName = "proto.LotStruct"), + (proto.VenteStruct = function (Be) { + _e.Message.initialize(this, Be, 0, -1, proto.VenteStruct.repeatedFields_, null); + }), + Ye.inherits(proto.VenteStruct, _e.Message), + Ye.DEBUG && !COMPILED && (proto.VenteStruct.displayName = "proto.VenteStruct"), + (proto.ClientStruct = function (Be) { + _e.Message.initialize(this, Be, 0, -1, null, null); + }), + Ye.inherits(proto.ClientStruct, _e.Message), + Ye.DEBUG && !COMPILED && (proto.ClientStruct.displayName = "proto.ClientStruct"), + (proto.LiveBiddingMessage = function (Be) { + _e.Message.initialize(this, Be, 0, -1, null, null); + }), + Ye.inherits(proto.LiveBiddingMessage, _e.Message), + Ye.DEBUG && !COMPILED && (proto.LiveBiddingMessage.displayName = "proto.LiveBiddingMessage"), + _e.Message.GENERATE_TO_OBJECT && + ((proto.IncrementStep.prototype.toObject = function (Be) { + return proto.IncrementStep.toObject(Be, this); + }), + (proto.IncrementStep.toObject = function (Be, Re) { + var Ue = { startvalue: _e.Message.getFieldWithDefault(Re, 1, 0), incrementvalue: _e.Message.getFieldWithDefault(Re, 2, 0), specialstep: _e.Message.getBooleanFieldWithDefault(Re, 3, !1) }; + return Be && (Ue.$jspbMessageInstance = Re), Ue; + })), + (proto.IncrementStep.deserializeBinary = function (Be) { + var Re = new _e.BinaryReader(Be), + Ue = new proto.IncrementStep(); + return proto.IncrementStep.deserializeBinaryFromReader(Ue, Re); + }), + (proto.IncrementStep.deserializeBinaryFromReader = function (Be, Re) { + for (; Re.nextField() && !Re.isEndGroup(); ) { + switch (Re.getFieldNumber()) { + case 1: + var Ue = Re.readUint32(); + Be.setStartvalue(Ue); + break; + case 2: + Ue = Re.readUint32(); + Be.setIncrementvalue(Ue); + break; + case 3: + Ue = Re.readBool(); + Be.setSpecialstep(Ue); + break; + default: + Re.skipField(); + } + } + return Be; + }), + (proto.IncrementStep.prototype.serializeBinary = function () { + var Be = new _e.BinaryWriter(); + return proto.IncrementStep.serializeBinaryToWriter(this, Be), Be.getResultBuffer(); + }), + (proto.IncrementStep.serializeBinaryToWriter = function (Be, Re) { + var Ue = void 0; + 0 !== (Ue = Be.getStartvalue()) && Re.writeUint32(1, Ue), 0 !== (Ue = Be.getIncrementvalue()) && Re.writeUint32(2, Ue), (Ue = Be.getSpecialstep()) && Re.writeBool(3, Ue); + }), + (proto.IncrementStep.prototype.getStartvalue = function () { + return _e.Message.getFieldWithDefault(this, 1, 0); + }), + (proto.IncrementStep.prototype.setStartvalue = function (Be) { + return _e.Message.setProto3IntField(this, 1, Be); + }), + (proto.IncrementStep.prototype.getIncrementvalue = function () { + return _e.Message.getFieldWithDefault(this, 2, 0); + }), + (proto.IncrementStep.prototype.setIncrementvalue = function (Be) { + return _e.Message.setProto3IntField(this, 2, Be); + }), + (proto.IncrementStep.prototype.getSpecialstep = function () { + return _e.Message.getBooleanFieldWithDefault(this, 3, !1); + }), + (proto.IncrementStep.prototype.setSpecialstep = function (Be) { + return _e.Message.setProto3BooleanField(this, 3, Be); + }), + (proto.IncrementData.repeatedFields_ = [1]), + _e.Message.GENERATE_TO_OBJECT && + ((proto.IncrementData.prototype.toObject = function (Be) { + return proto.IncrementData.toObject(Be, this); + }), + (proto.IncrementData.toObject = function (Be, Re) { + var Ue = { incrementarrayList: _e.Message.toObjectList(Re.getIncrementarrayList(), proto.IncrementStep.toObject, Be) }; + return Be && (Ue.$jspbMessageInstance = Re), Ue; + })), + (proto.IncrementData.deserializeBinary = function (Be) { + var Re = new _e.BinaryReader(Be), + Ue = new proto.IncrementData(); + return proto.IncrementData.deserializeBinaryFromReader(Ue, Re); + }), + (proto.IncrementData.deserializeBinaryFromReader = function (Be, Re) { + for (; Re.nextField() && !Re.isEndGroup(); ) { + switch (Re.getFieldNumber()) { + case 1: + var Ue = new proto.IncrementStep(); + Re.readMessage(Ue, proto.IncrementStep.deserializeBinaryFromReader), Be.addIncrementarray(Ue); + break; + default: + Re.skipField(); + } + } + return Be; + }), + (proto.IncrementData.prototype.serializeBinary = function () { + var Be = new _e.BinaryWriter(); + return proto.IncrementData.serializeBinaryToWriter(this, Be), Be.getResultBuffer(); + }), + (proto.IncrementData.serializeBinaryToWriter = function (Be, Re) { + var Ue; + (Ue = Be.getIncrementarrayList()).length > 0 && Re.writeRepeatedMessage(1, Ue, proto.IncrementStep.serializeBinaryToWriter); + }), + (proto.IncrementData.prototype.getIncrementarrayList = function () { + return _e.Message.getRepeatedWrapperField(this, proto.IncrementStep, 1); + }), + (proto.IncrementData.prototype.setIncrementarrayList = function (Be) { + return _e.Message.setRepeatedWrapperField(this, 1, Be); + }), + (proto.IncrementData.prototype.addIncrementarray = function (Be, Re) { + return _e.Message.addToRepeatedWrapperField(this, 1, Be, proto.IncrementStep, Re); + }), + (proto.IncrementData.prototype.clearIncrementarrayList = function () { + return this.setIncrementarrayList([]); + }), + _e.Message.GENERATE_TO_OBJECT && + ((proto.IncrementStruct.prototype.toObject = function (Be) { + return proto.IncrementStruct.toObject(Be, this); + }), + (proto.IncrementStruct.toObject = function (Be, Re) { + var Ue, + Ye = { type: _e.Message.getFieldWithDefault(Re, 1, 0), fixedvalue: _e.Message.getFieldWithDefault(Re, 2, 0), customincrement: (Ue = Re.getCustomincrement()) && proto.IncrementData.toObject(Be, Ue) }; + return Be && (Ye.$jspbMessageInstance = Re), Ye; + })), + (proto.IncrementStruct.deserializeBinary = function (Be) { + var Re = new _e.BinaryReader(Be), + Ue = new proto.IncrementStruct(); + return proto.IncrementStruct.deserializeBinaryFromReader(Ue, Re); + }), + (proto.IncrementStruct.deserializeBinaryFromReader = function (Be, Re) { + for (; Re.nextField() && !Re.isEndGroup(); ) { + switch (Re.getFieldNumber()) { + case 1: + var Ue = Re.readEnum(); + Be.setType(Ue); + break; + case 2: + Ue = Re.readUint32(); + Be.setFixedvalue(Ue); + break; + case 3: + Ue = new proto.IncrementData(); + Re.readMessage(Ue, proto.IncrementData.deserializeBinaryFromReader), Be.setCustomincrement(Ue); + break; + default: + Re.skipField(); + } + } + return Be; + }), + (proto.IncrementStruct.prototype.serializeBinary = function () { + var Be = new _e.BinaryWriter(); + return proto.IncrementStruct.serializeBinaryToWriter(this, Be), Be.getResultBuffer(); + }), + (proto.IncrementStruct.serializeBinaryToWriter = function (Be, Re) { + var Ue = void 0; + 0 !== (Ue = Be.getType()) && Re.writeEnum(1, Ue), 0 !== (Ue = Be.getFixedvalue()) && Re.writeUint32(2, Ue), null != (Ue = Be.getCustomincrement()) && Re.writeMessage(3, Ue, proto.IncrementData.serializeBinaryToWriter); + }), + (proto.IncrementStruct.Type = { FIXED: 0, SMALL: 1, MEDIUM: 2, BIG: 3, SMALL_VEHICLE: 4, MEDIUM_VEHICLE: 5, STANDARD: 6, MODEL10: 7, CUSTOM: 8 }), + (proto.IncrementStruct.prototype.getType = function () { + return _e.Message.getFieldWithDefault(this, 1, 0); + }), + (proto.IncrementStruct.prototype.setType = function (Be) { + return _e.Message.setProto3EnumField(this, 1, Be); + }), + (proto.IncrementStruct.prototype.getFixedvalue = function () { + return _e.Message.getFieldWithDefault(this, 2, 0); + }), + (proto.IncrementStruct.prototype.setFixedvalue = function (Be) { + return _e.Message.setProto3IntField(this, 2, Be); + }), + (proto.IncrementStruct.prototype.getCustomincrement = function () { + return _e.Message.getWrapperField(this, proto.IncrementData, 3); + }), + (proto.IncrementStruct.prototype.setCustomincrement = function (Be) { + return _e.Message.setWrapperField(this, 3, Be); + }), + (proto.IncrementStruct.prototype.clearCustomincrement = function () { + return this.setCustomincrement(void 0); + }), + (proto.IncrementStruct.prototype.hasCustomincrement = function () { + return null != _e.Message.getField(this, 3); + }), + _e.Message.GENERATE_TO_OBJECT && + ((proto.BidStruct.prototype.toObject = function (Be) { + return proto.BidStruct.toObject(Be, this); + }), + (proto.BidStruct.toObject = function (Be, Re) { + var Ue, + Ye = { + amount: _e.Message.getFieldWithDefault(Re, 1, 0), + currentBidder: _e.Message.getFieldWithDefault(Re, 2, 0), + type: _e.Message.getFieldWithDefault(Re, 3, 0), + hasPriority: _e.Message.getBooleanFieldWithDefault(Re, 4, !1), + isLate: _e.Message.getBooleanFieldWithDefault(Re, 5, !1), + isAuto: _e.Message.getBooleanFieldWithDefault(Re, 6, !1), + increment: (Ue = Re.getIncrement()) && proto.IncrementStruct.toObject(Be, Ue), + nextamount: _e.Message.getFieldWithDefault(Re, 8, 0), + nextsmallamount: _e.Message.getFieldWithDefault(Re, 9, 0), + nextmediumamount: _e.Message.getFieldWithDefault(Re, 10, 0), + nextbigamount: _e.Message.getFieldWithDefault(Re, 11, 0), + nextsmallvehicleamount: _e.Message.getFieldWithDefault(Re, 12, 0), + nextmediumvehicleamount: _e.Message.getFieldWithDefault(Re, 13, 0), + nextstandardamount: _e.Message.getFieldWithDefault(Re, 14, 0), + nextmodel10amount: _e.Message.getFieldWithDefault(Re, 15, 0), + }; + return Be && (Ye.$jspbMessageInstance = Re), Ye; + })), + (proto.BidStruct.deserializeBinary = function (Be) { + var Re = new _e.BinaryReader(Be), + Ue = new proto.BidStruct(); + return proto.BidStruct.deserializeBinaryFromReader(Ue, Re); + }), + (proto.BidStruct.deserializeBinaryFromReader = function (Be, Re) { + for (; Re.nextField() && !Re.isEndGroup(); ) { + switch (Re.getFieldNumber()) { + case 1: + var Ue = Re.readUint32(); + Be.setAmount(Ue); + break; + case 2: + Ue = Re.readUint32(); + Be.setCurrentBidder(Ue); + break; + case 3: + Ue = Re.readEnum(); + Be.setType(Ue); + break; + case 4: + Ue = Re.readBool(); + Be.setHasPriority(Ue); + break; + case 5: + Ue = Re.readBool(); + Be.setIsLate(Ue); + break; + case 6: + Ue = Re.readBool(); + Be.setIsAuto(Ue); + break; + case 7: + Ue = new proto.IncrementStruct(); + Re.readMessage(Ue, proto.IncrementStruct.deserializeBinaryFromReader), Be.setIncrement(Ue); + break; + case 8: + Ue = Re.readUint32(); + Be.setNextamount(Ue); + break; + case 9: + Ue = Re.readUint32(); + Be.setNextsmallamount(Ue); + break; + case 10: + Ue = Re.readUint32(); + Be.setNextmediumamount(Ue); + break; + case 11: + Ue = Re.readUint32(); + Be.setNextbigamount(Ue); + break; + case 12: + Ue = Re.readUint32(); + Be.setNextsmallvehicleamount(Ue); + break; + case 13: + Ue = Re.readUint32(); + Be.setNextmediumvehicleamount(Ue); + break; + case 14: + Ue = Re.readUint32(); + Be.setNextstandardamount(Ue); + break; + case 15: + Ue = Re.readUint32(); + Be.setNextmodel10amount(Ue); + break; + default: + Re.skipField(); + } + } + return Be; + }), + (proto.BidStruct.prototype.serializeBinary = function () { + var Be = new _e.BinaryWriter(); + return proto.BidStruct.serializeBinaryToWriter(this, Be), Be.getResultBuffer(); + }), + (proto.BidStruct.serializeBinaryToWriter = function (Be, Re) { + var Ue = void 0; + 0 !== (Ue = Be.getAmount()) && Re.writeUint32(1, Ue), + 0 !== (Ue = Be.getCurrentBidder()) && Re.writeUint32(2, Ue), + 0 !== (Ue = Be.getType()) && Re.writeEnum(3, Ue), + (Ue = Be.getHasPriority()) && Re.writeBool(4, Ue), + (Ue = Be.getIsLate()) && Re.writeBool(5, Ue), + (Ue = Be.getIsAuto()) && Re.writeBool(6, Ue), + null != (Ue = Be.getIncrement()) && Re.writeMessage(7, Ue, proto.IncrementStruct.serializeBinaryToWriter), + 0 !== (Ue = Be.getNextamount()) && Re.writeUint32(8, Ue), + 0 !== (Ue = Be.getNextsmallamount()) && Re.writeUint32(9, Ue), + 0 !== (Ue = Be.getNextmediumamount()) && Re.writeUint32(10, Ue), + 0 !== (Ue = Be.getNextbigamount()) && Re.writeUint32(11, Ue), + 0 !== (Ue = Be.getNextsmallvehicleamount()) && Re.writeUint32(12, Ue), + 0 !== (Ue = Be.getNextmediumvehicleamount()) && Re.writeUint32(13, Ue), + 0 !== (Ue = Be.getNextstandardamount()) && Re.writeUint32(14, Ue), + 0 !== (Ue = Be.getNextmodel10amount()) && Re.writeUint32(15, Ue); + }), + (proto.BidStruct.Type = { LIVE: 0, ROOM: 1 }), + (proto.BidStruct.prototype.getAmount = function () { + return _e.Message.getFieldWithDefault(this, 1, 0); + }), + (proto.BidStruct.prototype.setAmount = function (Be) { + return _e.Message.setProto3IntField(this, 1, Be); + }), + (proto.BidStruct.prototype.getCurrentBidder = function () { + return _e.Message.getFieldWithDefault(this, 2, 0); + }), + (proto.BidStruct.prototype.setCurrentBidder = function (Be) { + return _e.Message.setProto3IntField(this, 2, Be); + }), + (proto.BidStruct.prototype.getType = function () { + return _e.Message.getFieldWithDefault(this, 3, 0); + }), + (proto.BidStruct.prototype.setType = function (Be) { + return _e.Message.setProto3EnumField(this, 3, Be); + }), + (proto.BidStruct.prototype.getHasPriority = function () { + return _e.Message.getBooleanFieldWithDefault(this, 4, !1); + }), + (proto.BidStruct.prototype.setHasPriority = function (Be) { + return _e.Message.setProto3BooleanField(this, 4, Be); + }), + (proto.BidStruct.prototype.getIsLate = function () { + return _e.Message.getBooleanFieldWithDefault(this, 5, !1); + }), + (proto.BidStruct.prototype.setIsLate = function (Be) { + return _e.Message.setProto3BooleanField(this, 5, Be); + }), + (proto.BidStruct.prototype.getIsAuto = function () { + return _e.Message.getBooleanFieldWithDefault(this, 6, !1); + }), + (proto.BidStruct.prototype.setIsAuto = function (Be) { + return _e.Message.setProto3BooleanField(this, 6, Be); + }), + (proto.BidStruct.prototype.getIncrement = function () { + return _e.Message.getWrapperField(this, proto.IncrementStruct, 7); + }), + (proto.BidStruct.prototype.setIncrement = function (Be) { + return _e.Message.setWrapperField(this, 7, Be); + }), + (proto.BidStruct.prototype.clearIncrement = function () { + return this.setIncrement(void 0); + }), + (proto.BidStruct.prototype.hasIncrement = function () { + return null != _e.Message.getField(this, 7); + }), + (proto.BidStruct.prototype.getNextamount = function () { + return _e.Message.getFieldWithDefault(this, 8, 0); + }), + (proto.BidStruct.prototype.setNextamount = function (Be) { + return _e.Message.setProto3IntField(this, 8, Be); + }), + (proto.BidStruct.prototype.getNextsmallamount = function () { + return _e.Message.getFieldWithDefault(this, 9, 0); + }), + (proto.BidStruct.prototype.setNextsmallamount = function (Be) { + return _e.Message.setProto3IntField(this, 9, Be); + }), + (proto.BidStruct.prototype.getNextmediumamount = function () { + return _e.Message.getFieldWithDefault(this, 10, 0); + }), + (proto.BidStruct.prototype.setNextmediumamount = function (Be) { + return _e.Message.setProto3IntField(this, 10, Be); + }), + (proto.BidStruct.prototype.getNextbigamount = function () { + return _e.Message.getFieldWithDefault(this, 11, 0); + }), + (proto.BidStruct.prototype.setNextbigamount = function (Be) { + return _e.Message.setProto3IntField(this, 11, Be); + }), + (proto.BidStruct.prototype.getNextsmallvehicleamount = function () { + return _e.Message.getFieldWithDefault(this, 12, 0); + }), + (proto.BidStruct.prototype.setNextsmallvehicleamount = function (Be) { + return _e.Message.setProto3IntField(this, 12, Be); + }), + (proto.BidStruct.prototype.getNextmediumvehicleamount = function () { + return _e.Message.getFieldWithDefault(this, 13, 0); + }), + (proto.BidStruct.prototype.setNextmediumvehicleamount = function (Be) { + return _e.Message.setProto3IntField(this, 13, Be); + }), + (proto.BidStruct.prototype.getNextstandardamount = function () { + return _e.Message.getFieldWithDefault(this, 14, 0); + }), + (proto.BidStruct.prototype.setNextstandardamount = function (Be) { + return _e.Message.setProto3IntField(this, 14, Be); + }), + (proto.BidStruct.prototype.getNextmodel10amount = function () { + return _e.Message.getFieldWithDefault(this, 15, 0); + }), + (proto.BidStruct.prototype.setNextmodel10amount = function (Be) { + return _e.Message.setProto3IntField(this, 15, Be); + }), + _e.Message.GENERATE_TO_OBJECT && + ((proto.LotStruct.prototype.toObject = function (Be) { + return proto.LotStruct.toObject(Be, this); + }), + (proto.LotStruct.toObject = function (Be, Re) { + var Ue = { lotId: _e.Message.getFieldWithDefault(Re, 1, 0), state: _e.Message.getFieldWithDefault(Re, 2, 0), nextLotId: _e.Message.getFieldWithDefault(Re, 3, 0) }; + return Be && (Ue.$jspbMessageInstance = Re), Ue; + })), + (proto.LotStruct.deserializeBinary = function (Be) { + var Re = new _e.BinaryReader(Be), + Ue = new proto.LotStruct(); + return proto.LotStruct.deserializeBinaryFromReader(Ue, Re); + }), + (proto.LotStruct.deserializeBinaryFromReader = function (Be, Re) { + for (; Re.nextField() && !Re.isEndGroup(); ) { + switch (Re.getFieldNumber()) { + case 1: + var Ue = Re.readUint32(); + Be.setLotId(Ue); + break; + case 2: + Ue = Re.readEnum(); + Be.setState(Ue); + break; + case 3: + Ue = Re.readUint32(); + Be.setNextLotId(Ue); + break; + default: + Re.skipField(); + } + } + return Be; + }), + (proto.LotStruct.prototype.serializeBinary = function () { + var Be = new _e.BinaryWriter(); + return proto.LotStruct.serializeBinaryToWriter(this, Be), Be.getResultBuffer(); + }), + (proto.LotStruct.serializeBinaryToWriter = function (Be, Re) { + var Ue = void 0; + 0 !== (Ue = Be.getLotId()) && Re.writeUint32(1, Ue), 0 !== (Ue = Be.getState()) && Re.writeEnum(2, Ue), 0 !== (Ue = Be.getNextLotId()) && Re.writeUint32(3, Ue); + }), + (proto.LotStruct.State = { NEW: 0, MAP: 1, BIDDING: 2, ADJ: 3, ADJ_CANCELED: 4 }), + (proto.LotStruct.prototype.getLotId = function () { + return _e.Message.getFieldWithDefault(this, 1, 0); + }), + (proto.LotStruct.prototype.setLotId = function (Be) { + return _e.Message.setProto3IntField(this, 1, Be); + }), + (proto.LotStruct.prototype.getState = function () { + return _e.Message.getFieldWithDefault(this, 2, 0); + }), + (proto.LotStruct.prototype.setState = function (Be) { + return _e.Message.setProto3EnumField(this, 2, Be); + }), + (proto.LotStruct.prototype.getNextLotId = function () { + return _e.Message.getFieldWithDefault(this, 3, 0); + }), + (proto.LotStruct.prototype.setNextLotId = function (Be) { + return _e.Message.setProto3IntField(this, 3, Be); + }), + (proto.VenteStruct.repeatedFields_ = [4, 5, 6]), + _e.Message.GENERATE_TO_OBJECT && + ((proto.VenteStruct.prototype.toObject = function (Be) { + return proto.VenteStruct.toObject(Be, this); + }), + (proto.VenteStruct.toObject = function (Be, Re) { + var Ue, + Ye = { + venteId: _e.Message.getFieldWithDefault(Re, 1, 0), + bid: (Ue = Re.getBid()) && proto.BidStruct.toObject(Be, Ue), + lot: (Ue = Re.getLot()) && proto.LotStruct.toObject(Be, Ue), + connectedRegisteredListList: null == (Ue = _e.Message.getRepeatedField(Re, 4)) ? void 0 : Ue, + connectedSpectatorListList: null == (Ue = _e.Message.getRepeatedField(Re, 5)) ? void 0 : Ue, + connectedCyberclercListList: null == (Ue = _e.Message.getRepeatedField(Re, 6)) ? void 0 : Ue, + isfreebidauthorized: _e.Message.getBooleanFieldWithDefault(Re, 7, !1), + connectedbiddercount: _e.Message.getFieldWithDefault(Re, 8, 0), + connectedspectatorcount: _e.Message.getFieldWithDefault(Re, 9, 0), + readytobidcount: _e.Message.getFieldWithDefault(Re, 10, 0), + }; + return Be && (Ye.$jspbMessageInstance = Re), Ye; + })), + (proto.VenteStruct.deserializeBinary = function (Be) { + var Re = new _e.BinaryReader(Be), + Ue = new proto.VenteStruct(); + return proto.VenteStruct.deserializeBinaryFromReader(Ue, Re); + }), + (proto.VenteStruct.deserializeBinaryFromReader = function (Be, Re) { + for (; Re.nextField() && !Re.isEndGroup(); ) { + switch (Re.getFieldNumber()) { + case 1: + var Ue = Re.readUint32(); + Be.setVenteId(Ue); + break; + case 2: + Ue = new proto.BidStruct(); + Re.readMessage(Ue, proto.BidStruct.deserializeBinaryFromReader), Be.setBid(Ue); + break; + case 3: + Ue = new proto.LotStruct(); + Re.readMessage(Ue, proto.LotStruct.deserializeBinaryFromReader), Be.setLot(Ue); + break; + case 4: + for (var _e = Re.isDelimited() ? Re.readPackedUint32() : [Re.readUint32()], Ye = 0; Ye < _e.length; Ye++) Be.addConnectedRegisteredList(_e[Ye]); + break; + case 5: + for (_e = Re.isDelimited() ? Re.readPackedUint32() : [Re.readUint32()], Ye = 0; Ye < _e.length; Ye++) Be.addConnectedSpectatorList(_e[Ye]); + break; + case 6: + for (_e = Re.isDelimited() ? Re.readPackedUint32() : [Re.readUint32()], Ye = 0; Ye < _e.length; Ye++) Be.addConnectedCyberclercList(_e[Ye]); + break; + case 7: + Ue = Re.readBool(); + Be.setIsfreebidauthorized(Ue); + break; + case 8: + Ue = Re.readUint32(); + Be.setConnectedbiddercount(Ue); + break; + case 9: + Ue = Re.readUint32(); + Be.setConnectedspectatorcount(Ue); + break; + case 10: + Ue = Re.readUint32(); + Be.setReadytobidcount(Ue); + break; + default: + Re.skipField(); + } + } + return Be; + }), + (proto.VenteStruct.prototype.serializeBinary = function () { + var Be = new _e.BinaryWriter(); + return proto.VenteStruct.serializeBinaryToWriter(this, Be), Be.getResultBuffer(); + }), + (proto.VenteStruct.serializeBinaryToWriter = function (Be, Re) { + var Ue = void 0; + 0 !== (Ue = Be.getVenteId()) && Re.writeUint32(1, Ue), + null != (Ue = Be.getBid()) && Re.writeMessage(2, Ue, proto.BidStruct.serializeBinaryToWriter), + null != (Ue = Be.getLot()) && Re.writeMessage(3, Ue, proto.LotStruct.serializeBinaryToWriter), + (Ue = Be.getConnectedRegisteredListList()).length > 0 && Re.writePackedUint32(4, Ue), + (Ue = Be.getConnectedSpectatorListList()).length > 0 && Re.writePackedUint32(5, Ue), + (Ue = Be.getConnectedCyberclercListList()).length > 0 && Re.writePackedUint32(6, Ue), + (Ue = Be.getIsfreebidauthorized()) && Re.writeBool(7, Ue), + 0 !== (Ue = Be.getConnectedbiddercount()) && Re.writeUint32(8, Ue), + 0 !== (Ue = Be.getConnectedspectatorcount()) && Re.writeUint32(9, Ue), + 0 !== (Ue = Be.getReadytobidcount()) && Re.writeUint32(10, Ue); + }), + (proto.VenteStruct.prototype.getVenteId = function () { + return _e.Message.getFieldWithDefault(this, 1, 0); + }), + (proto.VenteStruct.prototype.setVenteId = function (Be) { + return _e.Message.setProto3IntField(this, 1, Be); + }), + (proto.VenteStruct.prototype.getBid = function () { + return _e.Message.getWrapperField(this, proto.BidStruct, 2); + }), + (proto.VenteStruct.prototype.setBid = function (Be) { + return _e.Message.setWrapperField(this, 2, Be); + }), + (proto.VenteStruct.prototype.clearBid = function () { + return this.setBid(void 0); + }), + (proto.VenteStruct.prototype.hasBid = function () { + return null != _e.Message.getField(this, 2); + }), + (proto.VenteStruct.prototype.getLot = function () { + return _e.Message.getWrapperField(this, proto.LotStruct, 3); + }), + (proto.VenteStruct.prototype.setLot = function (Be) { + return _e.Message.setWrapperField(this, 3, Be); + }), + (proto.VenteStruct.prototype.clearLot = function () { + return this.setLot(void 0); + }), + (proto.VenteStruct.prototype.hasLot = function () { + return null != _e.Message.getField(this, 3); + }), + (proto.VenteStruct.prototype.getConnectedRegisteredListList = function () { + return _e.Message.getRepeatedField(this, 4); + }), + (proto.VenteStruct.prototype.setConnectedRegisteredListList = function (Be) { + return _e.Message.setField(this, 4, Be || []); + }), + (proto.VenteStruct.prototype.addConnectedRegisteredList = function (Be, Re) { + return _e.Message.addToRepeatedField(this, 4, Be, Re); + }), + (proto.VenteStruct.prototype.clearConnectedRegisteredListList = function () { + return this.setConnectedRegisteredListList([]); + }), + (proto.VenteStruct.prototype.getConnectedSpectatorListList = function () { + return _e.Message.getRepeatedField(this, 5); + }), + (proto.VenteStruct.prototype.setConnectedSpectatorListList = function (Be) { + return _e.Message.setField(this, 5, Be || []); + }), + (proto.VenteStruct.prototype.addConnectedSpectatorList = function (Be, Re) { + return _e.Message.addToRepeatedField(this, 5, Be, Re); + }), + (proto.VenteStruct.prototype.clearConnectedSpectatorListList = function () { + return this.setConnectedSpectatorListList([]); + }), + (proto.VenteStruct.prototype.getConnectedCyberclercListList = function () { + return _e.Message.getRepeatedField(this, 6); + }), + (proto.VenteStruct.prototype.setConnectedCyberclercListList = function (Be) { + return _e.Message.setField(this, 6, Be || []); + }), + (proto.VenteStruct.prototype.addConnectedCyberclercList = function (Be, Re) { + return _e.Message.addToRepeatedField(this, 6, Be, Re); + }), + (proto.VenteStruct.prototype.clearConnectedCyberclercListList = function () { + return this.setConnectedCyberclercListList([]); + }), + (proto.VenteStruct.prototype.getIsfreebidauthorized = function () { + return _e.Message.getBooleanFieldWithDefault(this, 7, !1); + }), + (proto.VenteStruct.prototype.setIsfreebidauthorized = function (Be) { + return _e.Message.setProto3BooleanField(this, 7, Be); + }), + (proto.VenteStruct.prototype.getConnectedbiddercount = function () { + return _e.Message.getFieldWithDefault(this, 8, 0); + }), + (proto.VenteStruct.prototype.setConnectedbiddercount = function (Be) { + return _e.Message.setProto3IntField(this, 8, Be); + }), + (proto.VenteStruct.prototype.getConnectedspectatorcount = function () { + return _e.Message.getFieldWithDefault(this, 9, 0); + }), + (proto.VenteStruct.prototype.setConnectedspectatorcount = function (Be) { + return _e.Message.setProto3IntField(this, 9, Be); + }), + (proto.VenteStruct.prototype.getReadytobidcount = function () { + return _e.Message.getFieldWithDefault(this, 10, 0); + }), + (proto.VenteStruct.prototype.setReadytobidcount = function (Be) { + return _e.Message.setProto3IntField(this, 10, Be); + }), + _e.Message.GENERATE_TO_OBJECT && + ((proto.ClientStruct.prototype.toObject = function (Be) { + return proto.ClientStruct.toObject(Be, this); + }), + (proto.ClientStruct.toObject = function (Be, Re) { + var Ue = { + sessionId: _e.Message.getFieldWithDefault(Re, 1, ""), + passeportId: _e.Message.getFieldWithDefault(Re, 2, 0), + uuid: _e.Message.getFieldWithDefault(Re, 3, ""), + permission: _e.Message.getFieldWithDefault(Re, 4, 0), + activity: _e.Message.getFieldWithDefault(Re, 5, 0), + pingdelay: _e.Message.getFieldWithDefault(Re, 6, 0), + maxamount: _e.Message.getFieldWithDefault(Re, 7, 0), + hasnolimit: _e.Message.getBooleanFieldWithDefault(Re, 8, !1), + token: _e.Message.getFieldWithDefault(Re, 9, ""), + refreshtoken: _e.Message.getFieldWithDefault(Re, 10, ""), + }; + return Be && (Ue.$jspbMessageInstance = Re), Ue; + })), + (proto.ClientStruct.deserializeBinary = function (Be) { + var Re = new _e.BinaryReader(Be), + Ue = new proto.ClientStruct(); + return proto.ClientStruct.deserializeBinaryFromReader(Ue, Re); + }), + (proto.ClientStruct.deserializeBinaryFromReader = function (Be, Re) { + for (; Re.nextField() && !Re.isEndGroup(); ) { + switch (Re.getFieldNumber()) { + case 1: + var Ue = Re.readString(); + Be.setSessionId(Ue); + break; + case 2: + Ue = Re.readUint32(); + Be.setPasseportId(Ue); + break; + case 3: + Ue = Re.readString(); + Be.setUuid(Ue); + break; + case 4: + Ue = Re.readEnum(); + Be.setPermission(Ue); + break; + case 5: + Ue = Re.readEnum(); + Be.setActivity(Ue); + break; + case 6: + Ue = Re.readUint32(); + Be.setPingdelay(Ue); + break; + case 7: + Ue = Re.readUint32(); + Be.setMaxamount(Ue); + break; + case 8: + Ue = Re.readBool(); + Be.setHasnolimit(Ue); + break; + case 9: + Ue = Re.readString(); + Be.setToken(Ue); + break; + case 10: + Ue = Re.readString(); + Be.setRefreshtoken(Ue); + break; + default: + Re.skipField(); + } + } + return Be; + }), + (proto.ClientStruct.prototype.serializeBinary = function () { + var Be = new _e.BinaryWriter(); + return proto.ClientStruct.serializeBinaryToWriter(this, Be), Be.getResultBuffer(); + }), + (proto.ClientStruct.serializeBinaryToWriter = function (Be, Re) { + var Ue = void 0; + (Ue = Be.getSessionId()).length > 0 && Re.writeString(1, Ue), + 0 !== (Ue = Be.getPasseportId()) && Re.writeUint32(2, Ue), + (Ue = Be.getUuid()).length > 0 && Re.writeString(3, Ue), + 0 !== (Ue = Be.getPermission()) && Re.writeEnum(4, Ue), + 0 !== (Ue = Be.getActivity()) && Re.writeEnum(5, Ue), + 0 !== (Ue = Be.getPingdelay()) && Re.writeUint32(6, Ue), + 0 !== (Ue = Be.getMaxamount()) && Re.writeUint32(7, Ue), + (Ue = Be.getHasnolimit()) && Re.writeBool(8, Ue), + (Ue = Be.getToken()).length > 0 && Re.writeString(9, Ue), + (Ue = Be.getRefreshtoken()).length > 0 && Re.writeString(10, Ue); + }), + (proto.ClientStruct.Permission = { BIDDER: 0, CYBER: 1, SPECTATOR: 2 }), + (proto.ClientStruct.Activity = { IDLE: 0, ACTIVE: 1, OVER: 2, OUT: 3 }), + (proto.ClientStruct.prototype.getSessionId = function () { + return _e.Message.getFieldWithDefault(this, 1, ""); + }), + (proto.ClientStruct.prototype.setSessionId = function (Be) { + return _e.Message.setProto3StringField(this, 1, Be); + }), + (proto.ClientStruct.prototype.getPasseportId = function () { + return _e.Message.getFieldWithDefault(this, 2, 0); + }), + (proto.ClientStruct.prototype.setPasseportId = function (Be) { + return _e.Message.setProto3IntField(this, 2, Be); + }), + (proto.ClientStruct.prototype.getUuid = function () { + return _e.Message.getFieldWithDefault(this, 3, ""); + }), + (proto.ClientStruct.prototype.setUuid = function (Be) { + return _e.Message.setProto3StringField(this, 3, Be); + }), + (proto.ClientStruct.prototype.getPermission = function () { + return _e.Message.getFieldWithDefault(this, 4, 0); + }), + (proto.ClientStruct.prototype.setPermission = function (Be) { + return _e.Message.setProto3EnumField(this, 4, Be); + }), + (proto.ClientStruct.prototype.getActivity = function () { + return _e.Message.getFieldWithDefault(this, 5, 0); + }), + (proto.ClientStruct.prototype.setActivity = function (Be) { + return _e.Message.setProto3EnumField(this, 5, Be); + }), + (proto.ClientStruct.prototype.getPingdelay = function () { + return _e.Message.getFieldWithDefault(this, 6, 0); + }), + (proto.ClientStruct.prototype.setPingdelay = function (Be) { + return _e.Message.setProto3IntField(this, 6, Be); + }), + (proto.ClientStruct.prototype.getMaxamount = function () { + return _e.Message.getFieldWithDefault(this, 7, 0); + }), + (proto.ClientStruct.prototype.setMaxamount = function (Be) { + return _e.Message.setProto3IntField(this, 7, Be); + }), + (proto.ClientStruct.prototype.getHasnolimit = function () { + return _e.Message.getBooleanFieldWithDefault(this, 8, !1); + }), + (proto.ClientStruct.prototype.setHasnolimit = function (Be) { + return _e.Message.setProto3BooleanField(this, 8, Be); + }), + (proto.ClientStruct.prototype.getToken = function () { + return _e.Message.getFieldWithDefault(this, 9, ""); + }), + (proto.ClientStruct.prototype.setToken = function (Be) { + return _e.Message.setProto3StringField(this, 9, Be); + }), + (proto.ClientStruct.prototype.getRefreshtoken = function () { + return _e.Message.getFieldWithDefault(this, 10, ""); + }), + (proto.ClientStruct.prototype.setRefreshtoken = function (Be) { + return _e.Message.setProto3StringField(this, 10, Be); + }), + _e.Message.GENERATE_TO_OBJECT && + ((proto.LiveBiddingMessage.prototype.toObject = function (Be) { + return proto.LiveBiddingMessage.toObject(Be, this); + }), + (proto.LiveBiddingMessage.toObject = function (Be, Re) { + var Ue, + Ye = { + type: _e.Message.getFieldWithDefault(Re, 1, 0), + client: (Ue = Re.getClient()) && proto.ClientStruct.toObject(Be, Ue), + vente: (Ue = Re.getVente()) && proto.VenteStruct.toObject(Be, Ue), + message: _e.Message.getFieldWithDefault(Re, 4, ""), + paramsMap: (Ue = Re.getParamsMap()) ? Ue.toObject(Be, void 0) : [], + pingtime: _e.Message.getFieldWithDefault(Re, 6, 0), + }; + return Be && (Ye.$jspbMessageInstance = Re), Ye; + })), + (proto.LiveBiddingMessage.deserializeBinary = function (Be) { + var Re = new _e.BinaryReader(Be), + Ue = new proto.LiveBiddingMessage(); + return proto.LiveBiddingMessage.deserializeBinaryFromReader(Ue, Re); + }), + (proto.LiveBiddingMessage.deserializeBinaryFromReader = function (Be, Re) { + for (; Re.nextField() && !Re.isEndGroup(); ) { + switch (Re.getFieldNumber()) { + case 1: + var Ue = Re.readEnum(); + Be.setType(Ue); + break; + case 2: + Ue = new proto.ClientStruct(); + Re.readMessage(Ue, proto.ClientStruct.deserializeBinaryFromReader), Be.setClient(Ue); + break; + case 3: + Ue = new proto.VenteStruct(); + Re.readMessage(Ue, proto.VenteStruct.deserializeBinaryFromReader), Be.setVente(Ue); + break; + case 4: + Ue = Re.readString(); + Be.setMessage(Ue); + break; + case 5: + Ue = Be.getParamsMap(); + Re.readMessage(Ue, function (Be, Re) { + _e.Map.deserializeBinary(Be, Re, _e.BinaryReader.prototype.readString, _e.BinaryReader.prototype.readString, null, "", ""); + }); + break; + case 6: + Ue = Re.readInt64(); + Be.setPingtime(Ue); + break; + default: + Re.skipField(); + } + } + return Be; + }), + (proto.LiveBiddingMessage.prototype.serializeBinary = function () { + var Be = new _e.BinaryWriter(); + return proto.LiveBiddingMessage.serializeBinaryToWriter(this, Be), Be.getResultBuffer(); + }), + (proto.LiveBiddingMessage.serializeBinaryToWriter = function (Be, Re) { + var Ue = void 0; + 0 !== (Ue = Be.getType()) && Re.writeEnum(1, Ue), + null != (Ue = Be.getClient()) && Re.writeMessage(2, Ue, proto.ClientStruct.serializeBinaryToWriter), + null != (Ue = Be.getVente()) && Re.writeMessage(3, Ue, proto.VenteStruct.serializeBinaryToWriter), + (Ue = Be.getMessage()).length > 0 && Re.writeString(4, Ue), + (Ue = Be.getParamsMap(!0)) && Ue.getLength() > 0 && Ue.serializeBinary(5, Re, _e.BinaryWriter.prototype.writeString, _e.BinaryWriter.prototype.writeString), + 0 !== (Ue = Be.getPingtime()) && Re.writeInt64(6, Ue); + }), + (proto.LiveBiddingMessage.Type = { + PING: 0, + PONG: 1, + INIT: 2, + CLOSE: 3, + BID: 4, + SELECT_LOT: 5, + STARTING_PRICE: 6, + INCREMENT: 7, + TENDERING: 8, + GENERIC_MESSAGE: 9, + CREATE_LOT: 10, + NOT_INTERESTED: 11, + INTERESTED: 12, + ACTIVITY: 13, + NEW_CLIENT: 14, + CLOSED_CLIENT: 15, + KILL: 16, + MULTILOT_REQUEST: 17, + MULTILOT_RESPONSE: 18, + SYNC_PAYMENT_LIMIT: 19, + SWITCH_FREE_BID_AUTHORIZE: 20, + REFRESH_CLIENTS_COUNT: 21, + }), + (proto.LiveBiddingMessage.prototype.getType = function () { + return _e.Message.getFieldWithDefault(this, 1, 0); + }), + (proto.LiveBiddingMessage.prototype.setType = function (Be) { + return _e.Message.setProto3EnumField(this, 1, Be); + }), + (proto.LiveBiddingMessage.prototype.getClient = function () { + return _e.Message.getWrapperField(this, proto.ClientStruct, 2); + }), + (proto.LiveBiddingMessage.prototype.setClient = function (Be) { + return _e.Message.setWrapperField(this, 2, Be); + }), + (proto.LiveBiddingMessage.prototype.clearClient = function () { + return this.setClient(void 0); + }), + (proto.LiveBiddingMessage.prototype.hasClient = function () { + return null != _e.Message.getField(this, 2); + }), + (proto.LiveBiddingMessage.prototype.getVente = function () { + return _e.Message.getWrapperField(this, proto.VenteStruct, 3); + }), + (proto.LiveBiddingMessage.prototype.setVente = function (Be) { + return _e.Message.setWrapperField(this, 3, Be); + }), + (proto.LiveBiddingMessage.prototype.clearVente = function () { + return this.setVente(void 0); + }), + (proto.LiveBiddingMessage.prototype.hasVente = function () { + return null != _e.Message.getField(this, 3); + }), + (proto.LiveBiddingMessage.prototype.getMessage = function () { + return _e.Message.getFieldWithDefault(this, 4, ""); + }), + (proto.LiveBiddingMessage.prototype.setMessage = function (Be) { + return _e.Message.setProto3StringField(this, 4, Be); + }), + (proto.LiveBiddingMessage.prototype.getParamsMap = function (Be) { + return _e.Message.getMapField(this, 5, Be, null); + }), + (proto.LiveBiddingMessage.prototype.clearParamsMap = function () { + return this.getParamsMap().clear(), this; + }), + (proto.LiveBiddingMessage.prototype.getPingtime = function () { + return _e.Message.getFieldWithDefault(this, 6, 0); + }), + (proto.LiveBiddingMessage.prototype.setPingtime = function (Be) { + return _e.Message.setProto3IntField(this, 6, Be); + }), + Ye.object.extend(Re, proto); + const Ze = proto.LiveBiddingMessage, + $e = proto.VenteStruct, + tt = proto.ClientStruct, + nt = proto.BidStruct, + rt = proto.LotStruct, + ot = proto.IncrementStruct, + it = proto.IncrementData, + at = proto.IncrementStep; \ No newline at end of file diff --git a/AuctionServices/Scraper/Interencheres/Interencheres.js b/AuctionServices/Scraper/Interencheres/Interencheres.js index e941a25..795134c 100644 --- a/AuctionServices/Scraper/Interencheres/Interencheres.js +++ b/AuctionServices/Scraper/Interencheres/Interencheres.js @@ -23,6 +23,7 @@ class Interencheres extends Scraper { this._USER = "" this._PWD = "" this._PATH_SESSION_FILE = ".session/session_inter.json" + this._BROWSER_TOOL = "puppeteerBrowser" } getPictures = async ({ page, data}) => { @@ -148,21 +149,41 @@ class Interencheres extends Scraper { return LotList } + // ### Puppeteer + // ########################################################################### + + async CheckCookieDialog(page) { + console.log("-- CheckCookieDialog --") + return new Promise(async (resolve, reject) => { + + const CookieButton = await page.$('//button[contains(@class, "cpm-cookies-bar-cta-refus") and contains(text(), "Refuser")]'); + //console.log(CookieButton) + if (CookieButton && await CookieButton.isVisible()) { + console.log("-- Click on CookieButton --") + await CookieButton.click(); + } + + resolve(true) + }) + } + Live = async (browser) => { console.log("Live "+this._Name+": "+this.Url) - + const page = await browser.newPage(); - + let CheckAskStop = null; let Socket = null; const StopLive = async (params) => { clearInterval(CheckAskStop); - Socket.off('Network.webSocketFrameReceived', listener); + //Socket.off('Network.webSocketFrameReceived', listener); page.close() + browser.close() } const listener = async (params) => { + let payload = params.response.payloadData if(payload.length>1 && payload.substring(0, 2) == '42'){ payload = JSON.parse(payload.substring(2)) @@ -246,6 +267,7 @@ class Interencheres extends Scraper { try{ await page.goto(this.Url); + Socket = await page.target().createCDPSession(); await Socket.send('Network.enable'); await Socket.send('Page.enable'); @@ -260,7 +282,7 @@ class Interencheres extends Scraper { StopLive() } }) - }, 10000); // 10000 milliseconds = 10 seconds + }, 5000); // 10000 milliseconds = 5 seconds }catch(e){ console.log('Error : '+e) diff --git a/AuctionServices/Scraper/Interencheres/InterencheresData.js b/AuctionServices/Scraper/Interencheres/InterencheresData.js index 9fae1da..0c458ea 100644 --- a/AuctionServices/Scraper/Interencheres/InterencheresData.js +++ b/AuctionServices/Scraper/Interencheres/InterencheresData.js @@ -299,7 +299,8 @@ class InterencheresData extends ScraperTools { const SaleTitleXPath = [ '/html/body/div[1]/div/div/div/main/div/div/div/div/div/div[1]/div/div[1]/div[2]/h1/div/div/div/div/div', '/html/body/div[1]/div/div/div/main/div/div/div/div/div/div[1]/div/div/div/h1/div/div/div/div/div', - '/html/body/div[1]/div/div/div/main/div/div/div/div/div/div[1]/div/div/div/div/h1/div/div/div/div/div' + '/html/body/div[1]/div/div/div/main/div/div/div/div/div/div[1]/div/div/div/div/h1/div/div/div/div/div', + '/html/body/div[1]/div/div/div[1]/main/div/div/div/div/div/div[1]/div/div/div/div/h1/div/div/div/div/div' ] let SaleTitle = await this.getTextContent(SaleTitleXPath, page, 'SaleTitleXPath') return SaleTitle diff --git a/AuctionServices/Scraper/Scraper.js b/AuctionServices/Scraper/Scraper.js index 4049414..c69981f 100644 --- a/AuctionServices/Scraper/Scraper.js +++ b/AuctionServices/Scraper/Scraper.js @@ -14,6 +14,8 @@ class Scraper { _PATH_SESSION_FILE = "" + _BROWSER_TOOL = null + _Proxy = "" _DebugMode = false @@ -23,29 +25,43 @@ class Scraper { this.Url = Url; } - async _saveSession(page) { + async _getContext(browser) { return new Promise(async (resolve, reject) => { - console.log('-- Save Session --') - const cookies = await page.cookies(); - //console.log(cookies) - //await fs.writeFile(this._PATH_SESSION_FILE, JSON.stringify(cookies)); - fs.writeFileSync(this._PATH_SESSION_FILE, JSON.stringify(cookies)); - resolve(page) + try { + + if (fs.existsSync(this._PATH_SESSION_FILE)) { + resolve(await browser.newContext({ + storageState: this._PATH_SESSION_FILE, + timezoneId: 'Europe/Paris', + extraHTTPHeaders: { + 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:126.0) Gecko/20100101 Firefox/126.0', + 'Accept-Language': 'fr-FR,fr;q=0.9' + } + })); + } else { + resolve(await browser.newContext({ + timezoneId: 'Europe/Paris', + extraHTTPHeaders: { + 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:126.0) Gecko/20100101 Firefox/126.0', + 'Accept-Language': 'fr-FR,fr;q=0.9' + } + })); + } + + }catch(e){ + console.error('Error: '+e) + reject(new Error('Error: '+e)) + } }) - } - async _restoreSession(page) { + async _saveSession(page) { return new Promise(async (resolve, reject) => { - - if (fs.existsSync(this._PATH_SESSION_FILE)) { - console.log('-- restore Session --') - const cookies = JSON.parse(fs.readFileSync(this._PATH_SESSION_FILE)); - await page.setCookie(...cookies); - } - + console.log('-- Save Session --') + await page.context().storageState({ path: this._PATH_SESSION_FILE }); resolve(page) }) + } getPictures({ page, data}) { diff --git a/agent/.session/session_drouot.json b/agent/.session/session_drouot.json new file mode 100644 index 0000000..18c8ef9 --- /dev/null +++ b/agent/.session/session_drouot.json @@ -0,0 +1,103 @@ +{ + "cookies": [ + { + "name": "locale", + "value": "fr", + "domain": ".drouot.com", + "path": "/", + "expires": -1, + "httpOnly": false, + "secure": false, + "sameSite": "Lax" + }, + { + "name": "JSESSIONID", + "value": "CEE9A69D532738CA6F448BC54BD5FA98", + "domain": "drouot.com", + "path": "/", + "expires": -1, + "httpOnly": true, + "secure": true, + "sameSite": "Lax" + }, + { + "name": "cf_clearance", + "value": "Nw88GFRRH4A.R3IrqBs1WHV3v2j6b72TL4xFNt1qtRY-1716455904-1.0.1.1-YiA2MwdTbDytd5SaxdOm_F7ru5Q5bW.MaPs1FxJrr7YtILq0z0u9a4Lghyt2DIaNM_b_2hbki5IKioTVnUlqkQ", + "domain": ".drouot.com", + "path": "/", + "expires": 1747991903.778234, + "httpOnly": true, + "secure": true, + "sameSite": "None" + }, + { + "name": "consentLevel", + "value": "none", + "domain": "drouot.com", + "path": "/", + "expires": 1732353503, + "httpOnly": false, + "secure": false, + "sameSite": "Lax" + }, + { + "name": "aws.auth.refresh", + "value": "eyJjdHkiOiJKV1QiLCJlbmMiOiJBMjU2R0NNIiwiYWxnIjoiUlNBLU9BRVAifQ.ej0FDIw3VwTFabbv_Xrthwn6QRxOrGSlTP8P-hM3xyDmhigcIepCgEUlgjSO-taBevdDgiDNuRZ2ymbsmSHjBTgtPPhBJMlNW1CJMFpf34cnHp8P8fNso7KVZH98CVT8a-klxeNUw8sJbzV76E2pefGPiKahMbgNcct6I4C0lmK60569b1ADgDJUXoZ3ZWLM5h7dmu2_zEwcu3rcJSAZvqLBQBrBhw1ck2tivoMVl0Rp3rRDmYCkbvjYpVxozv_KCBA1pKdm_n1E78T4nlJR12UVZKwGj4TnM3_AiV43J-FUKkj-rDEoPfJrWlZh0J3aV403sDGeO_R7C8zOvMz8qQ.HTEsnaMZSmoB5bMT.CPMenx7Y1fkZnG3xdudDXwto0S9nXhlrviwGAUaEV0PdAiN1JRyWyfd2gfZ9gqDJ6CxBog-kZ45nttrdY2JjS71HgBfrg3RAqRqUyiRd9OLUTtHXgysdf6tXGZYqm2j62uTzq5aYWwr_KUMEYKqH45TrxAEnBGlCaKX5ielLghK6ZA_EWrOK3oJW3aM_-mZKD0vrJd9_iwVAUMKk_hdCF1UFqsuVHXZqXxQ_iOPzyd_t5Ui_2WgVqqLZTteAsFwr_L_TqpoM11AgSH-8a1ad05JwCdeMxyhZnW8Gf172Yt7pVzUFuV491KAxXdsgxCbFIhReYhOqABCsS9fKKbi6VBDtDBrRqGeiHgfOapVMLeg8-Va-_YGa1_4oRbX_zye_HTz3WE-xmBBwt98PVEJp4pWr2lY7wDgisqzLgI8foWm1YVWFD5rypAsJxEu-9-25SVErMVlptRaZ650YFHWNrkEr3oeqzwriIxMEjm92gxgVPQOO0Q5gqj9WcUHrbeq01xr6WBhX84AqGqTpT-kxbSrFBxHFMM3zhPey4ElJ2unc_ppj2r96e3FNjTmhRdhYYz827oewmJZZwhAF2KI8a_MEz6-W18b5ju0teM4lWBWRedq8IMeTFuEZ8-nlkQTiDnsSFXqZNtFVfJGcbKKTX8LCm708DrG5QGvqjycOkXrrnw-OCaUibCWbymJzwYdPD1sLLhitMpgI6pKW8H74K7bIb_v2IeMo3hH9gm2n6SI120EpD7n74UCIGx1fn5CB28neuj-_BegrcZNd6KEs0iPEhNOpHKd7k_G8riKX-ZtKIQcqZ8MtwAvjWVVFELEkpXR2IwfW2jXzBObIvcDYYNVijroFUZ-8oObp0dAIaUFtoByIzw3VOzOc4qbCSyelFC1YyoZJgbNW2ic6ZvL8pdzYTogjI_XHakVLBk8jeRg95SXtz9XzpLyx_ZoTX5LzEh5T897tOePl1NmIptU17IiBuwxFj_nYoVgDYbbGz1ox9vEWdrAE6EpfzhFrxWVMijyfjyauWaixri-harPAbhirrGG7QEeURqv0LCMMy1w3LyaZ9p9saG3DzX0yzrERgXMNvbFi4OYY3Cb0O8bo0kjHVY7a6Yj_qKKpfIKGclRKmndxkLK5A6JJkqy4fSLK-v9RbpWUiTC-_0L2k9lEGiK5rgPhMSRhyI5XYUW1rbB_XEKPU12M5uxER0NvjomXgTUy0yOdbDfpIYb89Bs2BK-SE0MAJSepzC8bsW4CWOnfCWGnuOGQphRfCuxAIkvd-4Lwm-Nyt8-Mmvh5VhQw79v8mx2eZNzk4DyiTDbSQUwdoCoEpgyoQnvnxObYVxXUeixB.LW8iCOUVXGCbeHw2rTF6Uw", + "domain": ".drouot.com", + "path": "/", + "expires": 1718955905.860105, + "httpOnly": false, + "secure": true, + "sameSite": "Lax" + }, + { + "name": "aws.auth.id", + "value": "eyJraWQiOiJaTktsNEx3c1NcL0xyYVdwaGVtcHE4OWVLWk05eUtUemtUQW40ZlM2bXFtST0iLCJhbGciOiJSUzI1NiJ9.eyJzdWIiOiI1ODY0NWVjYS1mNDllLTQ1YTktOWI0ZC1lNTg0M2RhZWNjNWUiLCJlbWFpbF92ZXJpZmllZCI6dHJ1ZSwiaXNzIjoiaHR0cHM6XC9cL2NvZ25pdG8taWRwLmV1LWNlbnRyYWwtMS5hbWF6b25hd3MuY29tXC9ldS1jZW50cmFsLTFfWE5GWDNIMzE0IiwiY29nbml0bzp1c2VybmFtZSI6IjU4NjQ1ZWNhLWY0OWUtNDVhOS05YjRkLWU1ODQzZGFlY2M1ZSIsIm9yaWdpbl9qdGkiOiI2YjUxMTM2Mi1kYmMwLTQ3MDctYjA0Zi05YTVmNzQyZjM5YjAiLCJhdWQiOiI0amNsZG9ib2YycWJuc3NtN2YxMDdnbGlxOCIsImV2ZW50X2lkIjoiNDAwNGViODItNDg1Mi00OTk2LWFjMjctNWQ1MTBiMmI3NTJmIiwidG9rZW5fdXNlIjoiaWQiLCJhdXRoX3RpbWUiOjE3MTY0NTU5MDUsImV4cCI6MTcxNjQ1OTUwNiwiaWF0IjoxNzE2NDU1OTA2LCJjdXN0b206cGFzc19pZCI6IjczOTAzMCIsImp0aSI6IjZjZjhmYjFlLWU1YTgtNDBkNS04NzkzLTk2YmRjNmZjMDU0ZCIsImVtYWlsIjoianAucmFudUBjb2dpcC5kZSJ9.I6lc4Y-fKSQJ1Vd5Lu41fP6_XuG9yaedk1ZKlXy3iyYV17HVxbypjkdTkgy1vbTU-QdS2gHcp9Ynf90q-PxkMuJZ_IWIU3njhoKE7--U4OkIPf7wfsFKq2rZGcUEyM0DxuedpRYbjN0Xesd6DF8nqWs5WGzy1NZDbXVys3ji0h5Y9H00bX7oypI_2ihFkcpRUYRzv8wywjBYoD8Jc7eOwqzeHNUkbs8L4ON2OnPCNBkJ33HKfw5Prnf4DahiZ9h6Vz0I2CTG4uIjI7yy0PpmDXz81-4JHy9G8NV2rEWTKUvJu1TWsMB5tRH50Ho3TBAqhUafKr1VB9uLTRg3gezsHw", + "domain": ".drouot.com", + "path": "/", + "expires": 1716459506.054849, + "httpOnly": false, + "secure": true, + "sameSite": "Lax" + } + ], + "origins": [ + { + "origin": "https://auth.drouot.com", + "localStorage": [ + { + "name": "CognitoIdentityServiceProvider.4jcldobof2qbnssm7f107gliq8.58645eca-f49e-45a9-9b4d-e5843daecc5e.accessToken", + "value": "eyJraWQiOiJYSTd2ejJDRW9pRVwvTnR0UGNkOEY0NE5QSDhHMzMzclJQRVB3OFFwRlJJRT0iLCJhbGciOiJSUzI1NiJ9.eyJzdWIiOiI1ODY0NWVjYS1mNDllLTQ1YTktOWI0ZC1lNTg0M2RhZWNjNWUiLCJpc3MiOiJodHRwczpcL1wvY29nbml0by1pZHAuZXUtY2VudHJhbC0xLmFtYXpvbmF3cy5jb21cL2V1LWNlbnRyYWwtMV9YTkZYM0gzMTQiLCJjbGllbnRfaWQiOiI0amNsZG9ib2YycWJuc3NtN2YxMDdnbGlxOCIsIm9yaWdpbl9qdGkiOiI2YjUxMTM2Mi1kYmMwLTQ3MDctYjA0Zi05YTVmNzQyZjM5YjAiLCJldmVudF9pZCI6IjQwMDRlYjgyLTQ4NTItNDk5Ni1hYzI3LTVkNTEwYjJiNzUyZiIsInRva2VuX3VzZSI6ImFjY2VzcyIsInNjb3BlIjoiYXdzLmNvZ25pdG8uc2lnbmluLnVzZXIuYWRtaW4iLCJhdXRoX3RpbWUiOjE3MTY0NTU5MDUsImV4cCI6MTcxNjQ1OTUwNiwiaWF0IjoxNzE2NDU1OTA2LCJqdGkiOiJkOGViNmNlNS00ZTE3LTRiZmQtYWVkNy01MjBmNzZlOGU2NGYiLCJ1c2VybmFtZSI6IjU4NjQ1ZWNhLWY0OWUtNDVhOS05YjRkLWU1ODQzZGFlY2M1ZSJ9.ltgmmPsITav_sGRrsc7AJz7GzViEGpWc_0qly3dVkZPZfL_NpDxIEz0_-XaikQd_Al_WYZ_k5yvh3DeDJzM4TiBFVVQDPydBb3IkeEj0x7djK_Yj5JUXM-SxaDIrtCkzXhxrwt_SCa0wkeKoPGfHSDt75-NYo4LXeZ15tntnsox-RoasVEop4HXBejWsfOiBsqptd4N8vCrK67nxiuNHTWZYylUz72iwMxtgwSvMVVNVV3FzU2N-puM8QvHhZQ96tCq0-jwTBVwR-DRdHL7IwbStze3-c53LFxbBmreXKn4aGiQybTEEwpDASeU0-YOl-Hgw4BD9gyOv2ECbINeiGw" + }, + { + "name": "persist:root", + "value": "{\"navigation\":\"{\\\"redirUri\\\":\\\"\\\",\\\"initialLocation\\\":\\\"/\\\"}\",\"_persist\":\"{\\\"version\\\":-1,\\\"rehydrated\\\":true}\"}" + }, + { + "name": "CognitoIdentityServiceProvider.4jcldobof2qbnssm7f107gliq8.58645eca-f49e-45a9-9b4d-e5843daecc5e.clockDrift", + "value": "-1" + }, + { + "name": "amplify-signin-with-hostedUI", + "value": "false" + }, + { + "name": "CognitoIdentityServiceProvider.4jcldobof2qbnssm7f107gliq8.LastAuthUser", + "value": "58645eca-f49e-45a9-9b4d-e5843daecc5e" + }, + { + "name": "CognitoIdentityServiceProvider.4jcldobof2qbnssm7f107gliq8.58645eca-f49e-45a9-9b4d-e5843daecc5e.userData", + "value": "{\"UserAttributes\":[{\"Name\":\"sub\",\"Value\":\"58645eca-f49e-45a9-9b4d-e5843daecc5e\"},{\"Name\":\"email_verified\",\"Value\":\"true\"},{\"Name\":\"email\",\"Value\":\"jp.ranu@cogip.de\"},{\"Name\":\"custom:pass_id\",\"Value\":\"739030\"}],\"Username\":\"58645eca-f49e-45a9-9b4d-e5843daecc5e\"}" + }, + { + "name": "CognitoIdentityServiceProvider.4jcldobof2qbnssm7f107gliq8.58645eca-f49e-45a9-9b4d-e5843daecc5e.idToken", + "value": "eyJraWQiOiJaTktsNEx3c1NcL0xyYVdwaGVtcHE4OWVLWk05eUtUemtUQW40ZlM2bXFtST0iLCJhbGciOiJSUzI1NiJ9.eyJzdWIiOiI1ODY0NWVjYS1mNDllLTQ1YTktOWI0ZC1lNTg0M2RhZWNjNWUiLCJlbWFpbF92ZXJpZmllZCI6dHJ1ZSwiaXNzIjoiaHR0cHM6XC9cL2NvZ25pdG8taWRwLmV1LWNlbnRyYWwtMS5hbWF6b25hd3MuY29tXC9ldS1jZW50cmFsLTFfWE5GWDNIMzE0IiwiY29nbml0bzp1c2VybmFtZSI6IjU4NjQ1ZWNhLWY0OWUtNDVhOS05YjRkLWU1ODQzZGFlY2M1ZSIsIm9yaWdpbl9qdGkiOiI2YjUxMTM2Mi1kYmMwLTQ3MDctYjA0Zi05YTVmNzQyZjM5YjAiLCJhdWQiOiI0amNsZG9ib2YycWJuc3NtN2YxMDdnbGlxOCIsImV2ZW50X2lkIjoiNDAwNGViODItNDg1Mi00OTk2LWFjMjctNWQ1MTBiMmI3NTJmIiwidG9rZW5fdXNlIjoiaWQiLCJhdXRoX3RpbWUiOjE3MTY0NTU5MDUsImV4cCI6MTcxNjQ1OTUwNiwiaWF0IjoxNzE2NDU1OTA2LCJjdXN0b206cGFzc19pZCI6IjczOTAzMCIsImp0aSI6ImIwNDEyYTBmLTZiN2UtNDc1YS04NTAyLTU0YmY5ODU5MzkxMiIsImVtYWlsIjoianAucmFudUBjb2dpcC5kZSJ9.Qfnv42vNIezdxohbyA1rF_ebfjeqx-LReTDOsYyWxwXdJC7yceu2P84Chr0DvZ0bo2dVtvgsL4TAV1pwFNjqMr5xSzcFNwDF-MzgBRtRWQ6R5OnHN1IX0zUFP9qZkuhaJMCz2kId84C_1YaXhDKqrK_qcvQ_-W1J11yfEbS4kVVZXf70Ko2eAq4XnTjtnTWURjEHM7KTpAehqoxGG96kmaOz4DQ6BKsGdg8BvuG9W7G9wEoU6pBSPgblnTyVvqYvoOrG_TbK3T0K-a3xyWfeEnqW3omTyN_lWhLInZYCejIqxkgVgqGguZxgB5AV0JC77pyxEKs2DRu642mlsqEDZQ" + }, + { + "name": "CognitoIdentityServiceProvider.4jcldobof2qbnssm7f107gliq8.58645eca-f49e-45a9-9b4d-e5843daecc5e.refreshToken", + "value": "eyJjdHkiOiJKV1QiLCJlbmMiOiJBMjU2R0NNIiwiYWxnIjoiUlNBLU9BRVAifQ.ej0FDIw3VwTFabbv_Xrthwn6QRxOrGSlTP8P-hM3xyDmhigcIepCgEUlgjSO-taBevdDgiDNuRZ2ymbsmSHjBTgtPPhBJMlNW1CJMFpf34cnHp8P8fNso7KVZH98CVT8a-klxeNUw8sJbzV76E2pefGPiKahMbgNcct6I4C0lmK60569b1ADgDJUXoZ3ZWLM5h7dmu2_zEwcu3rcJSAZvqLBQBrBhw1ck2tivoMVl0Rp3rRDmYCkbvjYpVxozv_KCBA1pKdm_n1E78T4nlJR12UVZKwGj4TnM3_AiV43J-FUKkj-rDEoPfJrWlZh0J3aV403sDGeO_R7C8zOvMz8qQ.HTEsnaMZSmoB5bMT.CPMenx7Y1fkZnG3xdudDXwto0S9nXhlrviwGAUaEV0PdAiN1JRyWyfd2gfZ9gqDJ6CxBog-kZ45nttrdY2JjS71HgBfrg3RAqRqUyiRd9OLUTtHXgysdf6tXGZYqm2j62uTzq5aYWwr_KUMEYKqH45TrxAEnBGlCaKX5ielLghK6ZA_EWrOK3oJW3aM_-mZKD0vrJd9_iwVAUMKk_hdCF1UFqsuVHXZqXxQ_iOPzyd_t5Ui_2WgVqqLZTteAsFwr_L_TqpoM11AgSH-8a1ad05JwCdeMxyhZnW8Gf172Yt7pVzUFuV491KAxXdsgxCbFIhReYhOqABCsS9fKKbi6VBDtDBrRqGeiHgfOapVMLeg8-Va-_YGa1_4oRbX_zye_HTz3WE-xmBBwt98PVEJp4pWr2lY7wDgisqzLgI8foWm1YVWFD5rypAsJxEu-9-25SVErMVlptRaZ650YFHWNrkEr3oeqzwriIxMEjm92gxgVPQOO0Q5gqj9WcUHrbeq01xr6WBhX84AqGqTpT-kxbSrFBxHFMM3zhPey4ElJ2unc_ppj2r96e3FNjTmhRdhYYz827oewmJZZwhAF2KI8a_MEz6-W18b5ju0teM4lWBWRedq8IMeTFuEZ8-nlkQTiDnsSFXqZNtFVfJGcbKKTX8LCm708DrG5QGvqjycOkXrrnw-OCaUibCWbymJzwYdPD1sLLhitMpgI6pKW8H74K7bIb_v2IeMo3hH9gm2n6SI120EpD7n74UCIGx1fn5CB28neuj-_BegrcZNd6KEs0iPEhNOpHKd7k_G8riKX-ZtKIQcqZ8MtwAvjWVVFELEkpXR2IwfW2jXzBObIvcDYYNVijroFUZ-8oObp0dAIaUFtoByIzw3VOzOc4qbCSyelFC1YyoZJgbNW2ic6ZvL8pdzYTogjI_XHakVLBk8jeRg95SXtz9XzpLyx_ZoTX5LzEh5T897tOePl1NmIptU17IiBuwxFj_nYoVgDYbbGz1ox9vEWdrAE6EpfzhFrxWVMijyfjyauWaixri-harPAbhirrGG7QEeURqv0LCMMy1w3LyaZ9p9saG3DzX0yzrERgXMNvbFi4OYY3Cb0O8bo0kjHVY7a6Yj_qKKpfIKGclRKmndxkLK5A6JJkqy4fSLK-v9RbpWUiTC-_0L2k9lEGiK5rgPhMSRhyI5XYUW1rbB_XEKPU12M5uxER0NvjomXgTUy0yOdbDfpIYb89Bs2BK-SE0MAJSepzC8bsW4CWOnfCWGnuOGQphRfCuxAIkvd-4Lwm-Nyt8-Mmvh5VhQw79v8mx2eZNzk4DyiTDbSQUwdoCoEpgyoQnvnxObYVxXUeixB.LW8iCOUVXGCbeHw2rTF6Uw" + } + ] + } + ] +} \ No newline at end of file diff --git a/agent/Dockerfile-puppeteer.dev b/agent/Dockerfile-puppeteer.dev new file mode 100644 index 0000000..306721c --- /dev/null +++ b/agent/Dockerfile-puppeteer.dev @@ -0,0 +1,36 @@ +FROM node:slim + +# We don't need the standalone Chromium +ENV PUPPETEER_SKIP_CHROMIUM_DOWNLOAD true + +# Install Google Chrome Stable and fonts +# Note: this installs the necessary libs to make the browser work with Puppeteer. +RUN apt-get update && apt-get install gnupg wget -y && \ + wget --quiet --output-document=- https://dl-ssl.google.com/linux/linux_signing_key.pub | gpg --dearmor > /etc/apt/trusted.gpg.d/google-archive.gpg && \ + sh -c 'echo "deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google.list' && \ + apt-get update && \ + apt-get install google-chrome-stable -y --no-install-recommends && \ + rm -rf /var/lib/apt/lists/* + + +# Setting up the work directory +WORKDIR /agent + +#Copying all the files in our project +COPY . . + +# Installing dependencies +RUN npm install +#RUN npm ci + +# Starting our application +#CMD [ "npm", "run", "start" ] + +#ENV DEBUG="puppeteer:*" +CMD [ "npm", "run", "dev" ] + +# Exposing server port +EXPOSE 3020 + +# Expose Debugging port +EXPOSE 9229 \ No newline at end of file diff --git a/agent/Dockerfile.dev b/agent/Dockerfile.dev index c6d9050..5b10a09 100644 --- a/agent/Dockerfile.dev +++ b/agent/Dockerfile.dev @@ -1,4 +1,4 @@ -FROM node:slim +FROM node:20-bookworm # We don't need the standalone Chromium ENV PUPPETEER_SKIP_CHROMIUM_DOWNLOAD true @@ -12,6 +12,9 @@ RUN apt-get update && apt-get install gnupg wget -y && \ apt-get install google-chrome-stable -y --no-install-recommends && \ rm -rf /var/lib/apt/lists/* +# Install Playwright +RUN npx -y playwright@1.44.0 install --with-deps + # Setting up the work directory WORKDIR /agent @@ -20,22 +23,16 @@ COPY . . # Installing dependencies RUN npm install - - # Add user so we don't need --no-sandbox. - # same layer as npm install to keep re-chowned files from using up several hundred MBs more space -# RUN groupadd -r pptruser && useradd -r -g pptruser -G audio,video pptruser \ -# && mkdir -p /home/pptruser/Downloads \ -# && chown -R pptruser:pptruser /home/pptruser \ -# && chown -R pptruser:pptruser ./node_modules \ -# && chown -R pptruser:pptruser ./package.json \ -# && chown -R pptruser:pptruser ./package-lock.json - -# # Run everything after as non-privileged user. -# USER pptruser +#RUN npm ci # Starting our application -#CMD [ "npm", "run", "debug-cluster" ] -CMD [ "npm", "run", "start" ] +#CMD [ "npm", "run", "start" ] + +#ENV DEBUG="puppeteer:*" +CMD [ "npm", "run", "dev" ] # Exposing server port -EXPOSE 3020 \ No newline at end of file +EXPOSE 3020 + +# Expose Debugging port +EXPOSE 9229 \ No newline at end of file diff --git a/agent/controllers/follow.js b/agent/controllers/follow.js index 31f8864..98d3dd6 100644 --- a/agent/controllers/follow.js +++ b/agent/controllers/follow.js @@ -53,8 +53,15 @@ exports.sale = asyncHandler(async (req, res, next) => { console.log("Agent Follow Sale: ", url) - AuctionPlatform.Live(req.browser) - + switch(AuctionPlatform._BROWSER_TOOL){ + case "puppeteerBrowser": + AuctionPlatform.Live(req.puppeteerBrowser) + break; + case "playwrightBrowser": + AuctionPlatform.Live(req.playwrightBrowser) + break; + } + res.status(200).send({"Following URL": url}) }else{ res.status(400).send("URL not supported") diff --git a/agent/index.js b/agent/index.js index b145ab5..8e5a3d6 100644 --- a/agent/index.js +++ b/agent/index.js @@ -5,16 +5,22 @@ var bodyParser = require('body-parser'); app.use(bodyParser.json()) //const puppeteer = require('puppeteer'); +//const puppeteerPackage = require('puppeteer/package.json'); + const puppeteer = require('puppeteer-extra'); const pluginStealth = require('puppeteer-extra-plugin-stealth'); puppeteer.use(pluginStealth()) +const { chromium } = require('playwright'); + const puppeteerMiddleware = require('./middleware/puppeteer'); +const playwrightMiddleware = require('./middleware/playwright'); (async () => { app.use(puppeteerMiddleware(puppeteer)); - + app.use(playwrightMiddleware(chromium)); + // main routes app.use('/internApi/follow', require('./routes/follow')); app.use('/health', require('./routes/health')); diff --git a/agent/middleware/playwright.js b/agent/middleware/playwright.js new file mode 100644 index 0000000..be1faca --- /dev/null +++ b/agent/middleware/playwright.js @@ -0,0 +1,12 @@ +module.exports = (chromium) => { + return async (req, res, next) => { + + const browser = await chromium.launch({ + args: ['--no-sandbox', '--disable-setuid-sandbox', '--disable-gpu', '--disable-dev-shm-usage'], + headless: true + }); + + req.playwrightBrowser = browser; + next(); + } +} \ No newline at end of file diff --git a/agent/middleware/puppeteer.js b/agent/middleware/puppeteer.js index b6d256c..870e864 100644 --- a/agent/middleware/puppeteer.js +++ b/agent/middleware/puppeteer.js @@ -5,10 +5,10 @@ module.exports = (puppeteer) => { executablePath: '/usr/bin/google-chrome', args: ['--no-sandbox', '--disable-setuid-sandbox', '--disable-gpu'], ignoreDefaultArgs: ['--disable-extensions'], - headless: 'new' + headless: 'true' }); - req.browser = browser; + req.puppeteerBrowser = browser; next(); } } \ No newline at end of file diff --git a/agent/package-lock.json b/agent/package-lock.json index 7c7a32d..318666c 100644 --- a/agent/package-lock.json +++ b/agent/package-lock.json @@ -9,12 +9,14 @@ "version": "1.0.0", "license": "ISC", "dependencies": { + "@playwright/test": "^1.44.0", "body-parser": "^1.20.2", "express": "^4.19.2", "express-async-handler": "^1.2.0", "moment-timezone": "^0.5.45", "node-fetch": "^2.6.1", - "puppeteer": "^22.6.4", + "protobufjs": "^7.3.0", + "puppeteer": "^22.10.0", "puppeteer-extra": "^3.3.6", "puppeteer-extra-plugin-stealth": "^2.11.2" }, @@ -23,11 +25,11 @@ } }, "node_modules/@babel/code-frame": { - "version": "7.24.2", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.2.tgz", - "integrity": "sha512-y5+tLQyV8pg3fsiln67BVLD1P13Eg4lh5RW9mF0zUuvLrv9uIQ4MCL+CRT+FTsBlBjcIan6PGsLcBN0m3ClUyQ==", + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.6.tgz", + "integrity": "sha512-ZJhac6FkEd1yhG2AHOmfcXG4ceoLltoCVJjN5XsWN9BifBQr+cHJbWi0h68HZuSORq+3WtJ2z0hwF2NG1b5kcA==", "dependencies": { - "@babel/highlight": "^7.24.2", + "@babel/highlight": "^7.24.6", "picocolors": "^1.0.0" }, "engines": { @@ -35,19 +37,19 @@ } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", - "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.6.tgz", + "integrity": "sha512-4yA7s865JHaqUdRbnaxarZREuPTHrjpDT+pXoAZ1yhyo6uFnIEpS8VMu16siFOHDpZNKYv5BObhsB//ycbICyw==", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/highlight": { - "version": "7.24.2", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.2.tgz", - "integrity": "sha512-Yac1ao4flkTxTteCDZLEvdxg2fZfz1v8M4QpaGypq/WPDqg3ijHYbDfs+LG5hvzSoqaSZ9/Z9lKSP3CjZjv+pA==", + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.6.tgz", + "integrity": "sha512-2YnuOp4HAk2BsBrJJvYCbItHx0zWscI1C3zgWkz+wDyD9I7GIVrfnLyrR4Y1VR+7p+chAEcrgRQYZAGIKMV7vQ==", "dependencies": { - "@babel/helper-validator-identifier": "^7.22.20", + "@babel/helper-validator-identifier": "^7.24.6", "chalk": "^2.4.2", "js-tokens": "^4.0.0", "picocolors": "^1.0.0" @@ -56,10 +58,78 @@ "node": ">=6.9.0" } }, + "node_modules/@playwright/test": { + "version": "1.44.0", + "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.44.0.tgz", + "integrity": "sha512-rNX5lbNidamSUorBhB4XZ9SQTjAqfe5M+p37Z8ic0jPFBMo5iCtQz1kRWkEMg+rYOKSlVycpQmpqjSFq7LXOfg==", + "dependencies": { + "playwright": "1.44.0" + }, + "bin": { + "playwright": "cli.js" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/@protobufjs/aspromise": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", + "integrity": "sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==" + }, + "node_modules/@protobufjs/base64": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz", + "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==" + }, + "node_modules/@protobufjs/codegen": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz", + "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==" + }, + "node_modules/@protobufjs/eventemitter": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz", + "integrity": "sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==" + }, + "node_modules/@protobufjs/fetch": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz", + "integrity": "sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==", + "dependencies": { + "@protobufjs/aspromise": "^1.1.1", + "@protobufjs/inquire": "^1.1.0" + } + }, + "node_modules/@protobufjs/float": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz", + "integrity": "sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==" + }, + "node_modules/@protobufjs/inquire": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz", + "integrity": "sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==" + }, + "node_modules/@protobufjs/path": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz", + "integrity": "sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==" + }, + "node_modules/@protobufjs/pool": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz", + "integrity": "sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==" + }, + "node_modules/@protobufjs/utf8": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", + "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==" + }, "node_modules/@puppeteer/browsers": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@puppeteer/browsers/-/browsers-2.2.1.tgz", - "integrity": "sha512-QSXujx4d4ogDamQA8ckkkRieFzDgZEuZuGiey9G7CuDcbnX4iINKWxTPC5Br2AEzY9ICAvcndqgAUFMMKnS/Tw==", + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/@puppeteer/browsers/-/browsers-2.2.3.tgz", + "integrity": "sha512-bJ0UBsk0ESOs6RFcLXOt99a3yTDcOKlzfjad+rhFwdaG1Lu/Wzq58GHYCDTlZ9z6mldf4g+NTb+TXEfe0PpnsQ==", "dependencies": { "debug": "4.3.4", "extract-zip": "2.0.1", @@ -93,11 +163,36 @@ } } }, + "node_modules/@puppeteer/browsers/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/@puppeteer/browsers/node_modules/ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, + "node_modules/@puppeteer/browsers/node_modules/semver": { + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", + "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/@tootallnate/quickjs-emscripten": { "version": "0.23.0", "resolved": "https://registry.npmjs.org/@tootallnate/quickjs-emscripten/-/quickjs-emscripten-0.23.0.tgz", @@ -117,10 +212,9 @@ "integrity": "sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==" }, "node_modules/@types/node": { - "version": "20.12.7", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.12.7.tgz", - "integrity": "sha512-wq0cICSkRLVaf3UGLMGItu/PtdY7oaXaI/RVU+xliKVOtRna3PRY57ZDfztpDL0n11vfymMUnXv8QwYCO7L1wg==", - "optional": true, + "version": "20.12.12", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.12.12.tgz", + "integrity": "sha512-eWLDGF/FOSPtAvEqeRAQ4C8LSA7M1I7i0ky1I8U7kD1J5ITyW3AsRhQrKVoWf5pFKZ2kILsEGJhsI9r93PYnOw==", "dependencies": { "undici-types": "~5.26.4" } @@ -134,12 +228,6 @@ "@types/node": "*" } }, - "node_modules/abbrev": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", - "dev": true - }, "node_modules/accepts": { "version": "1.3.8", "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", @@ -256,37 +344,46 @@ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" }, "node_modules/bare-events": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.2.2.tgz", - "integrity": "sha512-h7z00dWdG0PYOQEvChhOSWvOfkIKsdZGkWr083FgN/HyoQuebSew/cgirYqh9SCuy/hRvxc5Vy6Fw8xAmYHLkQ==", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.3.1.tgz", + "integrity": "sha512-sJnSOTVESURZ61XgEleqmP255T6zTYwHPwE4r6SssIh0U9/uDvfpdoJYpVUerJJZH2fueO+CdT8ZT+OC/7aZDA==", "optional": true }, "node_modules/bare-fs": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/bare-fs/-/bare-fs-2.2.3.tgz", - "integrity": "sha512-amG72llr9pstfXOBOHve1WjiuKKAMnebcmMbPWDZ7BCevAoJLpugjuAPRsDINEyjT0a6tbaVx3DctkXIRbLuJw==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/bare-fs/-/bare-fs-2.3.0.tgz", + "integrity": "sha512-TNFqa1B4N99pds2a5NYHR15o0ZpdNKbAeKTE/+G6ED/UeOavv8RY3dr/Fu99HW3zU3pXpo2kDNO8Sjsm2esfOw==", "optional": true, "dependencies": { "bare-events": "^2.0.0", "bare-path": "^2.0.0", - "streamx": "^2.13.0" + "bare-stream": "^1.0.0" } }, "node_modules/bare-os": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/bare-os/-/bare-os-2.2.1.tgz", - "integrity": "sha512-OwPyHgBBMkhC29Hl3O4/YfxW9n7mdTr2+SsO29XBWKKJsbgj3mnorDB80r5TiCQgQstgE5ga1qNYrpes6NvX2w==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/bare-os/-/bare-os-2.3.0.tgz", + "integrity": "sha512-oPb8oMM1xZbhRQBngTgpcQ5gXw6kjOaRsSWsIeNyRxGed2w/ARyP7ScBYpWR1qfX2E5rS3gBw6OWcSQo+s+kUg==", "optional": true }, "node_modules/bare-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/bare-path/-/bare-path-2.1.1.tgz", - "integrity": "sha512-OHM+iwRDRMDBsSW7kl3dO62JyHdBKO3B25FB9vNQBPcGHMo4+eA8Yj41Lfbk3pS/seDY+siNge0LdRTulAau/A==", + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/bare-path/-/bare-path-2.1.3.tgz", + "integrity": "sha512-lh/eITfU8hrj9Ru5quUp0Io1kJWIk1bTjzo7JH1P5dWmQ2EL4hFUlfI8FonAhSlgIfhn63p84CDY/x+PisgcXA==", "optional": true, "dependencies": { "bare-os": "^2.1.0" } }, + "node_modules/bare-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/bare-stream/-/bare-stream-1.0.0.tgz", + "integrity": "sha512-KhNUoDL40iP4gFaLSsoGE479t0jHijfYdIcxRn/XtezA2BaUD0NRf/JGRpsMq6dMNM+SrCrB0YSSo/5wBY4rOQ==", + "optional": true, + "dependencies": { + "streamx": "^2.16.1" + } + }, "node_modules/base64-js": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", @@ -359,12 +456,12 @@ } }, "node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", "dev": true, "dependencies": { - "fill-range": "^7.0.1" + "fill-range": "^7.1.1" }, "engines": { "node": ">=8" @@ -473,9 +570,9 @@ } }, "node_modules/chromium-bidi": { - "version": "0.5.17", - "resolved": "https://registry.npmjs.org/chromium-bidi/-/chromium-bidi-0.5.17.tgz", - "integrity": "sha512-BqOuIWUgTPj8ayuBFJUYCCuwIcwjBsb3/614P7tt1bEPJ4i1M0kCdIl0Wi9xhtswBXnfO2bTpTMkHD71H8rJMg==", + "version": "0.5.19", + "resolved": "https://registry.npmjs.org/chromium-bidi/-/chromium-bidi-0.5.19.tgz", + "integrity": "sha512-UA6zL77b7RYCjJkZBsZ0wlvCTD+jTjllZ8f6wdO4buevXgTZYjV+XLB9CiEa2OuuTGGTLnI7eN9I60YxuALGQg==", "dependencies": { "mitt": "3.0.1", "urlpattern-polyfill": "10.0.0", @@ -659,9 +756,9 @@ } }, "node_modules/devtools-protocol": { - "version": "0.0.1262051", - "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1262051.tgz", - "integrity": "sha512-YJe4CT5SA8on3Spa+UDtNhEqtuV6Epwz3OZ4HQVLhlRccpZ9/PAYk0/cy/oKxFKRrZPBUPyxympQci4yWNWZ9g==" + "version": "0.0.1286932", + "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1286932.tgz", + "integrity": "sha512-wu58HMQll9voDjR4NlPyoDEw1syfzaBNHymMMZ/QOXiHRNluOnDgu9hp1yHOKYoMlxCh4lSSiugLITe6Fvu1eA==" }, "node_modules/ee-first": { "version": "1.1.1", @@ -901,9 +998,9 @@ } }, "node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", "dev": true, "dependencies": { "to-regex-range": "^5.0.1" @@ -1096,6 +1193,7 @@ "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -1327,6 +1425,7 @@ "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", "dependencies": { "once": "^1.3.0", "wrappy": "1" @@ -1505,15 +1604,17 @@ "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" }, + "node_modules/long": { + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/long/-/long-5.2.3.tgz", + "integrity": "sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q==" + }, "node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dependencies": { - "yallist": "^4.0.0" - }, + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", "engines": { - "node": ">=10" + "node": ">=12" } }, "node_modules/media-typer": { @@ -1657,11 +1758,22 @@ } }, "node_modules/node-fetch": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz", - "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==", + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "dependencies": { + "whatwg-url": "^5.0.0" + }, "engines": { "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } } }, "node_modules/nodemon": { @@ -1715,21 +1827,6 @@ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true }, - "node_modules/nopt": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", - "integrity": "sha512-NWmpvLSqUrgrAC9HCuxEvb+PSloHpqVu+FqcO4eeF2h5qYRhA7ev6KvelyQAKtegUbC6RypJnlEOhd8vloNKYg==", - "dev": true, - "dependencies": { - "abbrev": "1" - }, - "bin": { - "nopt": "bin/nopt.js" - }, - "engines": { - "node": "*" - } - }, "node_modules/normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", @@ -1872,9 +1969,9 @@ "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==" }, "node_modules/picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz", + "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==" }, "node_modules/picomatch": { "version": "2.3.1", @@ -1888,6 +1985,47 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, + "node_modules/playwright": { + "version": "1.44.0", + "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.44.0.tgz", + "integrity": "sha512-F9b3GUCLQ3Nffrfb6dunPOkE5Mh68tR7zN32L4jCk4FjQamgesGay7/dAAe1WaMEGV04DkdJfcJzjoCKygUaRQ==", + "dependencies": { + "playwright-core": "1.44.0" + }, + "bin": { + "playwright": "cli.js" + }, + "engines": { + "node": ">=16" + }, + "optionalDependencies": { + "fsevents": "2.3.2" + } + }, + "node_modules/playwright-core": { + "version": "1.44.0", + "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.44.0.tgz", + "integrity": "sha512-ZTbkNpFfYcGWohvTTl+xewITm7EOuqIqex0c7dNZ+aXsbrLj0qI8XlGKfPpipjm0Wny/4Lt4CJsWJk1stVS5qQ==", + "bin": { + "playwright-core": "cli.js" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/playwright/node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, "node_modules/progress": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", @@ -1896,6 +2034,29 @@ "node": ">=0.4.0" } }, + "node_modules/protobufjs": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.3.0.tgz", + "integrity": "sha512-YWD03n3shzV9ImZRX3ccbjqLxj7NokGN0V/ESiBV5xWqrommYHYiihuIyavq03pWSGqlyvYUFmfoMKd+1rPA/g==", + "hasInstallScript": true, + "dependencies": { + "@protobufjs/aspromise": "^1.1.2", + "@protobufjs/base64": "^1.1.2", + "@protobufjs/codegen": "^2.0.4", + "@protobufjs/eventemitter": "^1.1.0", + "@protobufjs/fetch": "^1.1.0", + "@protobufjs/float": "^1.0.2", + "@protobufjs/inquire": "^1.1.0", + "@protobufjs/path": "^1.1.2", + "@protobufjs/pool": "^1.1.0", + "@protobufjs/utf8": "^1.1.0", + "@types/node": ">=13.7.0", + "long": "^5.0.0" + }, + "engines": { + "node": ">=12.0.0" + } + }, "node_modules/proxy-addr": { "version": "2.0.7", "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", @@ -1942,14 +2103,6 @@ } } }, - "node_modules/proxy-agent/node_modules/lru-cache": { - "version": "7.18.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", - "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", - "engines": { - "node": ">=12" - } - }, "node_modules/proxy-agent/node_modules/ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", @@ -1976,15 +2129,15 @@ } }, "node_modules/puppeteer": { - "version": "22.6.4", - "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-22.6.4.tgz", - "integrity": "sha512-J9hXNwZmuqKDmNMj6kednZH8jzbdX9735NQfQJrq5LRD4nHisAMyW9pCD7glKi+iM7RV9JkesI1MYhdsN+0ZSQ==", + "version": "22.10.0", + "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-22.10.0.tgz", + "integrity": "sha512-ZOkZd6a6t0BdKcWb0wAYHWQqCfdlN1PPnXOmg/XNrbo6gJhYWFX4qCNb6ahSn8TpAqBqLCoD4Q010F7GwOM7mA==", "hasInstallScript": true, "dependencies": { - "@puppeteer/browsers": "2.2.1", + "@puppeteer/browsers": "2.2.3", "cosmiconfig": "9.0.0", - "devtools-protocol": "0.0.1262051", - "puppeteer-core": "22.6.4" + "devtools-protocol": "0.0.1286932", + "puppeteer-core": "22.10.0" }, "bin": { "puppeteer": "lib/esm/puppeteer/node/cli.js" @@ -1994,15 +2147,15 @@ } }, "node_modules/puppeteer-core": { - "version": "22.6.4", - "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-22.6.4.tgz", - "integrity": "sha512-QtfJwPmqQec3EHc6LqbEz03vSiuVAr9bYp0TV87dLoreev6ZevsXdLgOfQgoA3GocrsSe/eUf7NRPQ1lQfsc3w==", + "version": "22.10.0", + "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-22.10.0.tgz", + "integrity": "sha512-I54J4Vy4I07UHsgB1QSmuFoF7KNQjJWcvFBPhtY+ezMdBfwgGDr8dzYrJa11aPgP9kxIUHjhktcMmmfJkOAtTw==", "dependencies": { - "@puppeteer/browsers": "2.2.1", - "chromium-bidi": "0.5.17", + "@puppeteer/browsers": "2.2.3", + "chromium-bidi": "0.5.19", "debug": "4.3.4", - "devtools-protocol": "0.0.1262051", - "ws": "8.16.0" + "devtools-protocol": "0.0.1286932", + "ws": "8.17.0" }, "engines": { "node": ">=18" @@ -2338,6 +2491,7 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", "dependencies": { "glob": "^7.1.3" }, @@ -2373,12 +2527,10 @@ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, "node_modules/semver": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", - "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", - "dependencies": { - "lru-cache": "^6.0.0" - }, + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", + "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", + "dev": true, "bin": { "semver": "bin/semver.js" }, @@ -2685,17 +2837,19 @@ } }, "node_modules/touch": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz", - "integrity": "sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.1.tgz", + "integrity": "sha512-r0eojU4bI8MnHr8c5bNo7lJDdI2qXlWWJk6a9EAFG7vbhTjElYhBVS3/miuE0uOuoLdb8Mc/rVfsmm6eo5o9GA==", "dev": true, - "dependencies": { - "nopt": "~1.0.10" - }, "bin": { "nodetouch": "bin/nodetouch.js" } }, + "node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + }, "node_modules/tslib": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", @@ -2731,8 +2885,7 @@ "node_modules/undici-types": { "version": "5.26.5", "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", - "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", - "optional": true + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==" }, "node_modules/universalify": { "version": "2.0.1", @@ -2771,6 +2924,20 @@ "node": ">= 0.8" } }, + "node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" + }, + "node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, "node_modules/wrap-ansi": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", @@ -2823,9 +2990,9 @@ "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" }, "node_modules/ws": { - "version": "8.16.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.16.0.tgz", - "integrity": "sha512-HS0c//TP7Ina87TfiPUz1rQzMhHrl/SG2guqRcTOIUYD2q8uhUdNHZYJUaQ8aTGPzCh+c6oawMKW35nFl1dxyQ==", + "version": "8.17.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.0.tgz", + "integrity": "sha512-uJq6108EgZMAl20KagGkzCKfMEjxmKvZHG7Tlq0Z6nOky7YF7aq4mOx6xK8TJ/i1LeK4Qus7INktacctDgY8Ow==", "engines": { "node": ">=10.0.0" }, diff --git a/agent/package.json b/agent/package.json index 0fa7197..7d44fb2 100644 --- a/agent/package.json +++ b/agent/package.json @@ -4,18 +4,21 @@ "description": "", "main": "index.js", "scripts": { - "start": "nodemon server.js", + "start": "node server.js", + "dev": "nodemon --inspect=0.0.0.0 server.js", "test": "echo \"Error: no test specified\" && exit 1" }, "author": "", "license": "ISC", "dependencies": { + "@playwright/test": "^1.44.0", "body-parser": "^1.20.2", "express": "^4.19.2", "express-async-handler": "^1.2.0", "moment-timezone": "^0.5.45", "node-fetch": "^2.6.1", - "puppeteer": "^22.6.4", + "protobufjs": "^7.3.0", + "puppeteer": "^22.10.0", "puppeteer-extra": "^3.3.6", "puppeteer-extra-plugin-stealth": "^2.11.2" }, diff --git a/agent/screenshot.png b/agent/screenshot.png new file mode 100644 index 0000000..8288972 Binary files /dev/null and b/agent/screenshot.png differ diff --git a/docker-compose-dev.yml b/docker-compose-dev.yml index ef1dcbc..534a530 100644 --- a/docker-compose-dev.yml +++ b/docker-compose-dev.yml @@ -10,8 +10,8 @@ services: - ./AuctionServices:/agent/AuctionServices networks: - internal - # ports: - # - "80:80" + ports: + - "9229:9229" scrapper: build: diff --git a/node_modules/.package-lock.json b/node_modules/.package-lock.json new file mode 100644 index 0000000..9fc0a19 --- /dev/null +++ b/node_modules/.package-lock.json @@ -0,0 +1,6 @@ +{ + "name": "AuctionAgent", + "lockfileVersion": 3, + "requires": true, + "packages": {} +} diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..9fc0a19 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,6 @@ +{ + "name": "AuctionAgent", + "lockfileVersion": 3, + "requires": true, + "packages": {} +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/package.json @@ -0,0 +1 @@ +{}