4 } from "common/Actions.sys.mjs";
5 import Joi from "joi-browser";
7 export const baseKeys = {
8 client_id: Joi.string().optional(),
9 addon_version: Joi.string().required(),
10 locale: Joi.string().required(),
11 session_id: Joi.string(),
19 user_prefs: Joi.number().integer().required(),
22 export const eventsTelemetryExtraKeys = Joi.object()
24 session_id: baseKeys.session_id.required(),
25 page: baseKeys.page.required(),
26 addon_version: baseKeys.addon_version.required(),
27 user_prefs: baseKeys.user_prefs.required(),
28 action_position: Joi.string().optional(),
30 .options({ allowUnknown: false });
32 export const UTUserEventPing = Joi.array().items(
33 Joi.string().required().valid("activity_stream"),
34 Joi.string().required().valid("event"),
46 "OPEN_PRIVATE_WINDOW",
55 Joi.string().required(),
56 eventsTelemetryExtraKeys
59 // Use this to validate actions generated from Redux
60 export const UserEventAction = Joi.object().keys({
61 type: Joi.string().required(),
74 "OPEN_PRIVATE_WINDOW",
91 "MENU_PRIVACY_NOTICE",
93 "ARCHIVE_FROM_POCKET",
100 source: Joi.valid(["TOP_SITES", "TOP_STORIES", "HIGHLIGHTS"]),
101 action_position: Joi.number().integer(),
102 value: Joi.object().keys({
103 icon_type: Joi.valid([
106 "screenshot_with_icon",
111 card_type: Joi.valid([
120 search_vendor: Joi.valid(["google", "amazon"]),
121 has_flow_params: Joi.bool(),
127 to: Joi.valid(MAIN_MESSAGE_TYPE).required(),
128 from: Joi.valid(CONTENT_MESSAGE_TYPE).required(),
133 export const TileSchema = Joi.object().keys({
134 id: Joi.number().integer().required(),
135 pos: Joi.number().integer(),
138 export const UTSessionPing = Joi.array().items(
139 Joi.string().required().valid("activity_stream"),
140 Joi.string().required().valid("end"),
141 Joi.string().required().valid("session"),
142 Joi.string().required(),
143 eventsTelemetryExtraKeys
146 export function chaiAssertions(_chai, utils) {
147 const { Assertion } = _chai;
149 Assertion.addMethod("validate", function (schema, schemaName) {
150 const { error } = Joi.validate(this._obj, schema, { allowUnknown: false });
154 schemaName ? `a valid ${schemaName}` : "valid"
155 } but there were errors: ${error}`
161 * assert.validate - Validates an item given a Joi schema
163 * @param {any} actual The item to validate
164 * @param {obj} schema A Joi schema
166 validate(actual, schema, schemaName) {
167 new Assertion(actual).validate(schema, schemaName);
171 * isUserEventAction - Passes if the item is a valid UserEvent action
173 * @param {any} actual The item to validate
175 isUserEventAction(actual) {
176 new Assertion(actual).validate(UserEventAction, "UserEventAction");
180 Object.assign(_chai.assert, assertions);