Source

logger/index.js

const Logger = require('./logger');

/**
 * @typedef {import('./logger')} Logger
 */

/**
 * @typedef LoggerContext
 * @property {import('./session')} session
 * @property {import('puppeteer').Page} page
 * @property {Record<string, typeof import('sequelize').Model>} models
 * @property {Logger} logger
 */

/**
	@typedef {Object} ModelDescription
	@property {(sequelize: typeof import('sequelize')) => Record<string, any>} schema

	@property {(
		model: typeof import('sequelize').Model,
		models: Record<string, typeof import('sequelize').Model>
		) => Record<String, any>
	} relations
	
	@property {(
		values: Record<string, string|number|boolean>,
 		session: import('./session'):
		) => any
	} onSession

	@property {(
		values: Record<string, string|number|boolean>,
		request: import('puppeteer').Request,
		context: LoggerContext
		) => any
	} onPage

	@property {(
		values: Record<string, string|number|boolean>,
		request: import('puppeteer').Request,
		context: LoggerContext
		) => any
	} onRequest

	@property {(
		values: Record<string, string|number|boolean>,
		response: import('puppeteer').Response,
		context: LoggerContext
		) => any
	} onResponse

	@property {(
		body: Buffer | string,
		values: Record<string, string|number|boolean>,
		response: import('puppeteer').Response,
		context: LoggerContext
		) => any
	} onResponseBody
 */

/**
 * This function will create a logger that will listen and record to requests and responses
 * and let you access to the browsers cookies.
 * In order
 * @param {object} browser
 * @param {string} resultPath
 * @param {Record<String, ModelDescription>} [models]
 * @returns {Logger}
 * @example
 * let profile = await atrica.profile({browser: "firefox"});
 * let browser = await atrica.launch(profile);
 * let logger = await atrica.logger(browser, {resultPath: "./results"});
 * let session = await logger.makeSession
 * let page = await browser.newPage();
 *
 */
async function logger(browser, resultPath, models = {}) {
	const logger = new Logger(browser, resultPath);
	await logger.init(models);
	return logger;
}

module.exports = logger;