diff --git a/.vscode/settings.json b/.vscode/settings.json index e499a11be..dd6a1330b 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,5 +1,4 @@ { - "eslint.workingDirectories": ["./client", "./"], "xml.fileAssociations": [ { "pattern": "**/Test.xml", diff --git a/bodyshop_translations.babel b/bodyshop_translations.babel index 34fb89708..23707d6e7 100644 --- a/bodyshop_translations.babel +++ b/bodyshop_translations.babel @@ -3665,6 +3665,27 @@ + + addpartsrule + false + + + + + + en-US + false + + + es-MX + false + + + fr-CA + false + + + addspeedprint false @@ -4572,6 +4593,27 @@ + + enforce_conversion_category + false + + + + + + en-US + false + + + es-MX + false + + + fr-CA + false + + + enforce_conversion_csr false @@ -5411,6 +5453,27 @@ + + md_lost_sale_reasons + false + + + + + + en-US + false + + + es-MX + false + + + fr-CA + false + + + md_parts_order_comment false @@ -5432,6 +5495,53 @@ + + md_parts_scan + + + expression + false + + + + + + en-US + false + + + es-MX + false + + + fr-CA + false + + + + + flags + false + + + + + + en-US + false + + + es-MX + false + + + fr-CA + false + + + + + md_payment_types false @@ -9609,6 +9719,27 @@ + + partsscan + false + + + + + + en-US + false + + + es-MX + false + + + fr-CA + false + + + printlater false @@ -20758,6 +20889,27 @@ + + sendpartspricechange + false + + + + + + en-US + false + + + es-MX + false + + + fr-CA + false + + + sendtodms false @@ -21204,6 +21356,27 @@ + + partspricechange + false + + + + + + en-US + false + + + es-MX + false + + + fr-CA + false + + + saving false @@ -24153,6 +24326,27 @@ + + lost_sale_reason + false + + + + + + en-US + false + + + es-MX + false + + + fr-CA + false + + + ma2s false @@ -40775,6 +40969,27 @@ + + customer_list + false + + + + + + en-US + false + + + es-MX + false + + + fr-CA + false + + + cycle_time_analysis false @@ -42780,6 +42995,27 @@ + + ins_co_nm_filter + false + + + + + + en-US + false + + + es-MX + false + + + fr-CA + false + + + intake false diff --git a/client/src/components/job-at-change/schedule-event.component.jsx b/client/src/components/job-at-change/schedule-event.component.jsx index e0c0ccc4d..612f03421 100644 --- a/client/src/components/job-at-change/schedule-event.component.jsx +++ b/client/src/components/job-at-change/schedule-event.component.jsx @@ -3,9 +3,11 @@ import { Button, Divider, Dropdown, + Form, Menu, notification, Popover, + Select, Space, } from "antd"; import parsePhoneNumber from "libphonenumber-js"; @@ -59,7 +61,10 @@ export function ScheduleEventComponent({ const blockContent = ( - handleCancel(event.id)} disabled={event.arrived}> + handleCancel({ id: event.id })} + disabled={event.arrived} + > {t("appointments.actions.cancel")} @@ -203,10 +208,46 @@ export function ScheduleEventComponent({ {t("appointments.actions.sendreminder")} ) : null} - - handleCancel(event.id)} disabled={event.arrived}> - {t("appointments.actions.cancel")} - + { + handleCancel({ id: event.id, lost_sale_reason }); + }} + > + + ({ + label: lsr, + value: lsr, + }))} + /> + + + {t("appointments.actions.cancel")} + + + } + > + handleCancel(event.id)} + disabled={event.arrived} + > + {t("appointments.actions.cancel")} + + {event.isintake ? ( { + const handleCancel = async ({ id, lost_sale_reason }) => { logImEXEvent("schedule_cancel_appt"); const cancelAppt = await cancelAppointment({ @@ -38,7 +38,8 @@ export default function ScheduleEventContainer({ bodyshop, event, refetch }) { job: { date_scheduled: null, scheduled_in: null, - scheduled_completion:null, + scheduled_completion: null, + lost_sale_reason, status: bodyshop.md_ro_statuses.default_imported, }, }, diff --git a/client/src/components/job-detail-lines/job-lines.component.jsx b/client/src/components/job-detail-lines/job-lines.component.jsx index 5097f668c..89debdf45 100644 --- a/client/src/components/job-detail-lines/job-lines.component.jsx +++ b/client/src/components/job-detail-lines/job-lines.component.jsx @@ -103,7 +103,12 @@ export function JobLinesComponent({ fixed: "left", key: "line_desc", sorter: (a, b) => alphaSort(a.line_desc, b.line_desc), - onCell: (record) => ({ className: record.manual_line && "job-line-manual" }), + onCell: (record) => ({ + className: record.manual_line && "job-line-manual", + style: { + ...(record.critical ? { boxShadow: " -.5em 0 0 #FFC107" } : {}), + }, + }), sortOrder: state.sortedInfo.columnKey === "line_desc" && state.sortedInfo.order, ellipsis: true, @@ -343,7 +348,7 @@ export function JobLinesComponent({ onClick={() => { setJobLineEditContext({ actions: { refetch: refetch, submit: form && form.submit }, - context: record, + context: { ...record, jobid: job.id }, }); }} > diff --git a/client/src/components/job-lines-upsert-modal/job-lines-upsert-modal.container.jsx b/client/src/components/job-lines-upsert-modal/job-lines-upsert-modal.container.jsx index f4c7d87a4..7c55046b9 100644 --- a/client/src/components/job-lines-upsert-modal/job-lines-upsert-modal.container.jsx +++ b/client/src/components/job-lines-upsert-modal/job-lines-upsert-modal.container.jsx @@ -14,8 +14,12 @@ import UndefinedToNull from "../../utils/undefinedtonull"; import JobLinesUpdsertModal from "./job-lines-upsert-modal.component"; import Axios from "axios"; import Dinero from "dinero.js"; +import CriticalPartsScan from "../../utils/criticalPartsScan"; +import { selectBodyshop } from "../../redux/user/user.selectors"; +import { useTreatments } from "@splitsoftware/splitio-react"; const mapStateToProps = createStructuredSelector({ jobLineEditModal: selectJobLineEditModal, + bodyshop: selectBodyshop, }); const mapDispatchToProps = (dispatch) => ({ toggleModalVisible: () => dispatch(toggleModalVisible("jobLineEdit")), @@ -24,7 +28,13 @@ const mapDispatchToProps = (dispatch) => ({ function JobLinesUpsertModalContainer({ jobLineEditModal, toggleModalVisible, + bodyshop, }) { + const { CriticalPartsScanning } = useTreatments( + ["CriticalPartsScanning"], + {}, + bodyshop.imexshopid + ); const { t } = useTranslation(); const [insertJobLine] = useMutation(INSERT_NEW_JOB_LINE); const [updateJobLine] = useMutation(UPDATE_JOB_LINE); @@ -109,6 +119,9 @@ function JobLinesUpsertModalContainer({ } toggleModalVisible(); } + if (CriticalPartsScanning.treatment === "on") { + CriticalPartsScan(jobLineEditModal.context.jobid); + } setLoading(false); }; diff --git a/client/src/components/jobs-available-table/jobs-available-table.container.jsx b/client/src/components/jobs-available-table/jobs-available-table.container.jsx index 1aba56a47..d632324b5 100644 --- a/client/src/components/jobs-available-table/jobs-available-table.container.jsx +++ b/client/src/components/jobs-available-table/jobs-available-table.container.jsx @@ -3,8 +3,9 @@ import { useApolloClient, useLazyQuery, useMutation, - useQuery, + useQuery } from "@apollo/client"; +import { useTreatments } from "@splitsoftware/splitio-react"; import { Col, notification, Row } from "antd"; import Axios from "axios"; import Dinero from "dinero.js"; @@ -19,7 +20,7 @@ import { logImEXEvent } from "../../firebase/firebase.utils"; import { DELETE_AVAILABLE_JOB, QUERY_AVAILABLE_JOBS, - QUERY_AVAILABLE_NEW_JOBS_EST_DATA_BY_PK, + QUERY_AVAILABLE_NEW_JOBS_EST_DATA_BY_PK } from "../../graphql/available-jobs.queries"; import { INSERT_NEW_JOB, UPDATE_JOB } from "../../graphql/jobs.queries"; import { INSERT_NEW_NOTE } from "../../graphql/notes.queries"; @@ -27,10 +28,11 @@ import { SEARCH_VEHICLE_BY_VIN } from "../../graphql/vehicles.queries"; import { insertAuditTrail } from "../../redux/application/application.actions"; import { selectBodyshop, - selectCurrentUser, + selectCurrentUser } from "../../redux/user/user.selectors"; import confirmDialog from "../../utils/asyncConfirm"; import AuditTrailMapping from "../../utils/AuditTrailMappings"; +import CriticalPartsScan from "../../utils/criticalPartsScan"; import AlertComponent from "../alert/alert.component"; import JobsAvailableScan from "../jobs-available-scan/jobs-available-scan.component"; import JobsFindModalContainer from "../jobs-find-modal/jobs-find-modal.container"; @@ -53,6 +55,11 @@ export function JobsAvailableContainer({ currentUser, insertAuditTrail, }) { + const { CriticalPartsScanning } = useTreatments( + ["CriticalPartsScanning"], + {}, + bodyshop.imexshopid + ); const { loading, error, data, refetch } = useQuery(QUERY_AVAILABLE_JOBS, { fetchPolicy: "network-only", nextFetchPolicy: "network-only", @@ -155,6 +162,9 @@ export function JobsAvailableContainer({ }, }) .then((r) => { + if (CriticalPartsScanning.treatment === "on") { + CriticalPartsScan(r.data.insert_jobs.returning[0].id); + } notification["success"]({ message: t("jobs.successes.created"), onClick: () => { @@ -241,7 +251,9 @@ export function JobsAvailableContainer({ }, }, }); - + if (CriticalPartsScanning.treatment === "on") { + CriticalPartsScan(updateResult.data.update_jobs.returning[0].id); + } if (updateResult.errors) { //error while inserting notification["error"]({ diff --git a/client/src/components/jobs-convert-button/jobs-convert-button.component.jsx b/client/src/components/jobs-convert-button/jobs-convert-button.component.jsx index 71069e3b2..d588d50e4 100644 --- a/client/src/components/jobs-convert-button/jobs-convert-button.component.jsx +++ b/client/src/components/jobs-convert-button/jobs-convert-button.component.jsx @@ -43,7 +43,7 @@ export function JobsConvertButton({ const { t } = useTranslation(); const [form] = Form.useForm(); - const handleConvert = async ({ employee_csr, ...values }) => { + const handleConvert = async ({ employee_csr, category, ...values }) => { if (parentFormIsFieldsTouched()) { alert(t("jobs.labels.savebeforeconversion")); return; @@ -55,6 +55,7 @@ export function JobsConvertButton({ job: { converted: true, ...(bodyshop.enforce_conversion_csr ? { employee_csr } : {}), + ...(bodyshop.enforce_conversion_category ? { category } : {}), ...values, }, }, @@ -94,6 +95,7 @@ export function JobsConvertButton({ driveable: true, towin: false, employee_csr: job.employee_csr, + category: job.category, }} > )} + {bodyshop.enforce_conversion_category && ( + + + {bodyshop.md_categories.map((s) => ( + + {s} + + ))} + + + )} + + + ); diff --git a/client/src/components/jobs-detail-header-actions/jobs-detail-header-actions.component.jsx b/client/src/components/jobs-detail-header-actions/jobs-detail-header-actions.component.jsx index 5002a0e5d..879fb7426 100644 --- a/client/src/components/jobs-detail-header-actions/jobs-detail-header-actions.component.jsx +++ b/client/src/components/jobs-detail-header-actions/jobs-detail-header-actions.component.jsx @@ -1,6 +1,15 @@ import { DownCircleFilled } from "@ant-design/icons"; import { useApolloClient, useMutation } from "@apollo/client"; -import { Button, Dropdown, Menu, notification, Popconfirm } from "antd"; +import { + Button, + Dropdown, + Form, + Menu, + notification, + Popconfirm, + Popover, + Select, +} from "antd"; import React, { useMemo } from "react"; import { useTranslation } from "react-i18next"; import { connect } from "react-redux"; @@ -127,35 +136,63 @@ export function JobsDetailHeaderActions({ - e.stopPropagation()} + { - const jobUpdate = await cancelAllAppointments({ - variables: { - jobid: job.id, - job: { - date_scheduled: null, - scheduled_in: null, - scheduled_completion: null, - status: bodyshop.md_ro_statuses.default_imported, - }, - }, - }); - if (!jobUpdate.errors) { - notification["success"]({ - message: t("appointments.successes.canceled"), - }); - return; - } - }} - getPopupContainer={(trigger) => trigger.parentNode} + content={ + { + const jobUpdate = await cancelAllAppointments({ + variables: { + jobid: job.id, + job: { + date_scheduled: null, + scheduled_in: null, + scheduled_completion: null, + lost_sale_reason, + status: bodyshop.md_ro_statuses.default_imported, + }, + }, + }); + if (!jobUpdate.errors) { + notification["success"]({ + message: t("appointments.successes.canceled"), + }); + return; + } + }} + > + + ({ + label: lsr, + value: lsr, + }))} + /> + + + {t("appointments.actions.cancel")} + + + } > {t("menus.jobsactions.cancelallappointments")} - + j.ins_co_nm) + .filter(onlyUnique) + .map((s) => { + return { + text: s, + value: [s], + }; + })) || + [], + onFilter: (value, record) => value.includes(record.ins_co_nm), responsive: ["md"], }, { diff --git a/client/src/components/jobs-ready-list/jobs-ready-list.component.jsx b/client/src/components/jobs-ready-list/jobs-ready-list.component.jsx index 4370a30f8..e3ce7a3cf 100644 --- a/client/src/components/jobs-ready-list/jobs-ready-list.component.jsx +++ b/client/src/components/jobs-ready-list/jobs-ready-list.component.jsx @@ -272,6 +272,19 @@ export function JobsReadyList({ bodyshop }) { dataIndex: "ins_co_nm", key: "ins_co_nm", ellipsis: true, + filters: + (jobs && + jobs + .map((j) => j.ins_co_nm) + .filter(onlyUnique) + .map((s) => { + return { + text: s, + value: [s], + }; + })) || + [], + onFilter: (value, record) => value.includes(record.ins_co_nm), responsive: ["md"], }, { diff --git a/client/src/components/owner-detail-form/owner-detail-form.container.jsx b/client/src/components/owner-detail-form/owner-detail-form.container.jsx index 95f14ec00..fc1ae6bd1 100644 --- a/client/src/components/owner-detail-form/owner-detail-form.container.jsx +++ b/client/src/components/owner-detail-form/owner-detail-form.container.jsx @@ -1,15 +1,40 @@ -import { Button, Form, notification, PageHeader } from "antd"; +import { Button, Form, notification, PageHeader, Popconfirm } from "antd"; import React, { useState } from "react"; +import { useHistory } from "react-router-dom"; import { useMutation } from "@apollo/client"; import { useTranslation } from "react-i18next"; -import { UPDATE_OWNER } from "../../graphql/owners.queries"; +import { DELETE_OWNER, UPDATE_OWNER } from "../../graphql/owners.queries"; import OwnerDetailFormComponent from "./owner-detail-form.component"; function OwnerDetailFormContainer({ owner, refetch }) { const { t } = useTranslation(); const [form] = Form.useForm(); + const history = useHistory(); const [loading, setLoading] = useState(false); const [updateOwner] = useMutation(UPDATE_OWNER); + const [deleteOwner] = useMutation(DELETE_OWNER); + + const handleDelete = async () => { + setLoading(true); + const result = await deleteOwner({ + variables: { id: owner.id }, + }); + console.log(result); + if (result.errors) { + notification["error"]({ + message: t("owners.errors.deleting", { + error: JSON.stringify(result.errors), + }), + }); + setLoading(false); + } else { + notification["success"]({ + message: t("owners.successes.delete"), + }); + setLoading(false); + history.push(`/manage/owners`); + } + }; const handleFinish = async (values) => { setLoading(true); @@ -41,15 +66,29 @@ function OwnerDetailFormContainer({ owner, refetch }) { <> + + {t("general.actions.delete")} + + , form.submit()} > {t("general.actions.save")} - - } + , + ]} /> ({ + //setUserLanguage: language => dispatch(setUserLanguage(language)) +}); +export default connect( + mapStateToProps, + mapDispatchToProps +)(ScheduleCalendarComponent); -export default function ScheduleCalendarComponent({ data, refetch }) { +export function ScheduleCalendarComponent({ data, refetch, bodyshop }) { const [filter, setFilter] = useLocalStorage("filter_events", { intake: true, manual: true, employeevacation: true, + ins_co_nm: null, }); const filteredData = useMemo(() => { return data.filter( (d) => - d.block || - (filter.intake && d.isintake) || - (filter.manual && !d.isintake && d.block === false) || - (d.__typename === "employee_vacation" && - filter.employeevacation && - !!d.employee) + (d.block || + (filter.intake && d.isintake) || + (filter.manual && !d.isintake && d.block === false) || + (d.__typename === "employee_vacation" && + filter.employeevacation && + !!d.employee)) && + (filter.ins_co_nm && filter.ins_co_nm.length > 0 + ? filter.ins_co_nm.includes(d.job.ins_co_nm) + : true) ); }, [data, filter]); @@ -37,6 +63,21 @@ export default function ScheduleCalendarComponent({ data, refetch }) { extra={ + setFilter({ ...filter, ins_co_nm: [] })} + value={filter?.ins_co_nm} + onChange={(e) => { + setFilter({ ...filter, ins_co_nm: e }); + }} + options={bodyshop.md_ins_cos.map((i) => ({ + label: i.name, + value: i.name, + }))} + /> { diff --git a/client/src/components/schedule-job-modal/schedule-job-modal.container.jsx b/client/src/components/schedule-job-modal/schedule-job-modal.container.jsx index 08bb4747e..ed3eace05 100644 --- a/client/src/components/schedule-job-modal/schedule-job-modal.container.jsx +++ b/client/src/components/schedule-job-modal/schedule-job-modal.container.jsx @@ -148,6 +148,7 @@ export function ScheduleJobModalContainer({ date_scheduled: new Date(), scheduled_in: values.start, scheduled_completion: values.scheduled_completion, + lost_sale_reason: null, }, }, }); diff --git a/client/src/components/shop-info/shop-info.component.jsx b/client/src/components/shop-info/shop-info.component.jsx index df6410e6c..9baeb2c58 100644 --- a/client/src/components/shop-info/shop-info.component.jsx +++ b/client/src/components/shop-info/shop-info.component.jsx @@ -1,3 +1,4 @@ +import { useTreatments } from "@splitsoftware/splitio-react"; import { Button, Card, Tabs } from "antd"; import React from "react"; import { useTranslation } from "react-i18next"; @@ -8,6 +9,7 @@ import ShopInfoGeneral from "./shop-info.general.component"; import ShopInfoIntakeChecklistComponent from "./shop-info.intake.component"; import ShopInfoLaborRates from "./shop-info.laborrates.component"; import ShopInfoOrderStatusComponent from "./shop-info.orderstatus.component"; +import ShopInfoPartsScan from "./shop-info.parts-scan"; import ShopInfoRbacComponent from "./shop-info.rbac.component"; import ShopInfoResponsibilityCenterComponent from "./shop-info.responsibilitycenters.component"; import ShopInfoROStatusComponent from "./shop-info.rostatus.component"; @@ -23,6 +25,11 @@ const mapDispatchToProps = (dispatch) => ({ export default connect(mapStateToProps, mapDispatchToProps)(ShopInfoComponent); export function ShopInfoComponent({ bodyshop, form, saveLoading }) { + const { CriticalPartsScanning } = useTreatments( + ["CriticalPartsScanning"], + {}, + bodyshop.imexshopid + ); const { t } = useTranslation(); return ( + {CriticalPartsScanning.treatment === "on" && ( + + + + )} ); diff --git a/client/src/components/shop-info/shop-info.general.component.jsx b/client/src/components/shop-info/shop-info.general.component.jsx index f01e10aba..3e9b1ed2c 100644 --- a/client/src/components/shop-info/shop-info.general.component.jsx +++ b/client/src/components/shop-info/shop-info.general.component.jsx @@ -473,6 +473,13 @@ export default function ShopInfoGeneral({ form }) { > + + + + + + {(fields, { add, remove, move }) => { + return ( + + {fields.map((field, index) => ( + + + + + + + + + + + { + remove(field.name); + }} + /> + + + + + ))} + + { + add(); + }} + style={{ width: "100%" }} + > + {t("bodyshop.actions.addpartsrule")} + + + + ); + }} + + + + ); +} diff --git a/client/src/components/shop-info/shop-info.scheduling.component.jsx b/client/src/components/shop-info/shop-info.scheduling.component.jsx index 85e64c555..d1d50bac4 100644 --- a/client/src/components/shop-info/shop-info.scheduling.component.jsx +++ b/client/src/components/shop-info/shop-info.scheduling.component.jsx @@ -76,6 +76,19 @@ export default function ShopInfoSchedulingComponent({ form }) { > + + + {t("bodyshop.labels.workingdays")} diff --git a/client/src/components/time-ticket-modal/time-ticket-modal.component.jsx b/client/src/components/time-ticket-modal/time-ticket-modal.component.jsx index e5cbd67ee..6f61fccf0 100644 --- a/client/src/components/time-ticket-modal/time-ticket-modal.component.jsx +++ b/client/src/components/time-ticket-modal/time-ticket-modal.component.jsx @@ -82,9 +82,10 @@ export function TimeTicketModalComponent({ label={t("timetickets.fields.ro_number")} rules={[ { - required: - !form.getFieldValue("cost_center") === - "timetickets.labels.shift", + required: !( + form.getFieldValue("cost_center") === + "timetickets.labels.shift" + ), //message: t("general.validation.required"), }, ]} diff --git a/client/src/components/vehicle-detail-form/vehicle-detail-form.container.jsx b/client/src/components/vehicle-detail-form/vehicle-detail-form.container.jsx index 3438d2f28..9fbe45ed7 100644 --- a/client/src/components/vehicle-detail-form/vehicle-detail-form.container.jsx +++ b/client/src/components/vehicle-detail-form/vehicle-detail-form.container.jsx @@ -1,16 +1,41 @@ import React, { useState } from "react"; -import { Button, Form, notification, PageHeader } from "antd"; +import { Button, Form, notification, PageHeader, Popconfirm } from "antd"; import { useMutation } from "@apollo/client"; import VehicleDetailFormComponent from "./vehicle-detail-form.component"; import { useTranslation } from "react-i18next"; import moment from "moment"; -import { UPDATE_VEHICLE } from "../../graphql/vehicles.queries"; +import { DELETE_VEHICLE, UPDATE_VEHICLE } from "../../graphql/vehicles.queries"; +import { useHistory } from "react-router-dom"; function VehicleDetailFormContainer({ vehicle, refetch }) { const { t } = useTranslation(); const [updateVehicle] = useMutation(UPDATE_VEHICLE); + const [deleteVehicle] = useMutation(DELETE_VEHICLE); const [form] = Form.useForm(); const [loading, setLoading] = useState(false); + const history = useHistory(); + + const handleDelete = async () => { + setLoading(true); + const result = await deleteVehicle({ + variables: { id: vehicle.id }, + }); + console.log(result); + if (result.errors) { + notification["error"]({ + message: t("vehicles.errors.deleting", { + error: JSON.stringify(result.errors), + }), + }); + setLoading(false); + } else { + notification["success"]({ + message: t("vehicles.successes.delete"), + }); + setLoading(false); + history.push(`/manage/vehicles`); + } + }; const handleFinish = async (values) => { setLoading(true); @@ -40,15 +65,29 @@ function VehicleDetailFormContainer({ vehicle, refetch }) { <> + + {t("general.actions.delete")} + + , form.submit()} > {t("general.actions.save")} - - } + , + ]} /> { }, group: "jobs", }, + customer_list: { + title: i18n.t("reportcenter.templates.customer_list"), + subject: i18n.t( + "reportcenter.templates.customer_list" + ), + key: "customer_list", + //idtype: "vendor", + disabled: false, + rangeFilter: { + object: i18n.t("reportcenter.labels.objects.jobs"), + field: i18n.t("jobs.fields.date_invoiced"), + }, + group: "customers", + }, } : {}), ...(!type || type === "courtesycarcontract" diff --git a/client/src/utils/criticalPartsScan.js b/client/src/utils/criticalPartsScan.js new file mode 100644 index 000000000..11e96b69b --- /dev/null +++ b/client/src/utils/criticalPartsScan.js @@ -0,0 +1,12 @@ +import axios from "axios"; +import { notification } from "antd"; + +async function CriticalPartsScan(jobid) { + try { + await axios.post("/job/partsscan", { jobid }); + } catch (error) { + notification.open({ type: "error", message: JSON.stringify(error) }); + } +} + +export default CriticalPartsScan; diff --git a/hasura/metadata/tables.yaml b/hasura/metadata/tables.yaml index 41628f56e..a576c160e 100644 --- a/hasura/metadata/tables.yaml +++ b/hasura/metadata/tables.yaml @@ -796,6 +796,13 @@ table: name: owners schema: public + - name: payment_responses + using: + foreign_key_constraint_on: + column: bodyshopid + table: + name: payment_response + schema: public - name: phonebooks using: foreign_key_constraint_on: @@ -853,6 +860,7 @@ - deliverchecklist - email - enforce_class + - enforce_conversion_category - enforce_conversion_csr - enforce_referral - entegral_configuration @@ -883,11 +891,13 @@ - md_ins_cos - md_jobline_presets - md_labor_rates + - md_lost_sale_reasons - md_messaging_presets - md_notes_presets - md_order_statuses - md_parts_locations - md_parts_order_comment + - md_parts_scan - md_payment_types - md_rbac - md_referral_sources @@ -950,6 +960,7 @@ - deliverchecklist - email - enforce_class + - enforce_conversion_category - enforce_conversion_csr - enforce_referral - federal_tax_id @@ -975,11 +986,13 @@ - md_ins_cos - md_jobline_presets - md_labor_rates + - md_lost_sale_reasons - md_messaging_presets - md_notes_presets - md_order_statuses - md_parts_locations - md_parts_order_comment + - md_parts_scan - md_payment_types - md_rbac - md_referral_sources @@ -2560,6 +2573,7 @@ - convertedtolbr - convertedtolbr_data - created_at + - critical - db_hrs - db_price - db_ref @@ -2637,6 +2651,7 @@ - convertedtolbr - convertedtolbr_data - created_at + - critical - db_hrs - db_price - db_ref @@ -2901,6 +2916,13 @@ table: name: parts_orders schema: public + - name: payment_responses + using: + foreign_key_constraint_on: + column: jobid + table: + name: payment_response + schema: public - name: payments using: foreign_key_constraint_on: @@ -3380,6 +3402,7 @@ - loss_desc - loss_of_use - loss_type + - lost_sale_reason - materials - other_amount_payable - owner_owing @@ -3654,6 +3677,7 @@ - loss_desc - loss_of_use - loss_type + - lost_sale_reason - materials - other_amount_payable - owner_owing @@ -4556,6 +4580,7 @@ _eq: X-Hasura-User-Id - active: _eq: true + allow_aggregations: true - table: name: payments schema: public @@ -4571,6 +4596,13 @@ table: name: exportlog schema: public + - name: payment_responses + using: + foreign_key_constraint_on: + column: paymentid + table: + name: payment_response + schema: public insert_permissions: - role: user permission: diff --git a/hasura/migrations/1678731115287_alter_table_public_bodyshops_add_column_md_lost_sale_reasons/down.sql b/hasura/migrations/1678731115287_alter_table_public_bodyshops_add_column_md_lost_sale_reasons/down.sql new file mode 100644 index 000000000..8d0eee74b --- /dev/null +++ b/hasura/migrations/1678731115287_alter_table_public_bodyshops_add_column_md_lost_sale_reasons/down.sql @@ -0,0 +1,4 @@ +-- Could not auto-generate a down migration. +-- Please write an appropriate down migration for the SQL below: +-- alter table "public"."bodyshops" add column "md_lost_sale_reasons" jsonb +-- not null default jsonb_build_array(); diff --git a/hasura/migrations/1678731115287_alter_table_public_bodyshops_add_column_md_lost_sale_reasons/up.sql b/hasura/migrations/1678731115287_alter_table_public_bodyshops_add_column_md_lost_sale_reasons/up.sql new file mode 100644 index 000000000..fedc66d1a --- /dev/null +++ b/hasura/migrations/1678731115287_alter_table_public_bodyshops_add_column_md_lost_sale_reasons/up.sql @@ -0,0 +1,2 @@ +alter table "public"."bodyshops" add column "md_lost_sale_reasons" jsonb + not null default jsonb_build_array(); diff --git a/hasura/migrations/1678732942514_alter_table_public_jobs_add_column_lost_sale_reason/down.sql b/hasura/migrations/1678732942514_alter_table_public_jobs_add_column_lost_sale_reason/down.sql new file mode 100644 index 000000000..c9540eb66 --- /dev/null +++ b/hasura/migrations/1678732942514_alter_table_public_jobs_add_column_lost_sale_reason/down.sql @@ -0,0 +1,4 @@ +-- Could not auto-generate a down migration. +-- Please write an appropriate down migration for the SQL below: +-- alter table "public"."jobs" add column "lost_sale_reason" text +-- null; diff --git a/hasura/migrations/1678732942514_alter_table_public_jobs_add_column_lost_sale_reason/up.sql b/hasura/migrations/1678732942514_alter_table_public_jobs_add_column_lost_sale_reason/up.sql new file mode 100644 index 000000000..a15363298 --- /dev/null +++ b/hasura/migrations/1678732942514_alter_table_public_jobs_add_column_lost_sale_reason/up.sql @@ -0,0 +1,2 @@ +alter table "public"."jobs" add column "lost_sale_reason" text + null; diff --git a/hasura/migrations/1678743865758_alter_table_public_bodyshops_add_column_md_parts_scan/down.sql b/hasura/migrations/1678743865758_alter_table_public_bodyshops_add_column_md_parts_scan/down.sql new file mode 100644 index 000000000..67066918f --- /dev/null +++ b/hasura/migrations/1678743865758_alter_table_public_bodyshops_add_column_md_parts_scan/down.sql @@ -0,0 +1,4 @@ +-- Could not auto-generate a down migration. +-- Please write an appropriate down migration for the SQL below: +-- alter table "public"."bodyshops" add column "md_parts_scan" jsonb +-- not null default jsonb_build_array(); diff --git a/hasura/migrations/1678743865758_alter_table_public_bodyshops_add_column_md_parts_scan/up.sql b/hasura/migrations/1678743865758_alter_table_public_bodyshops_add_column_md_parts_scan/up.sql new file mode 100644 index 000000000..3a6527e62 --- /dev/null +++ b/hasura/migrations/1678743865758_alter_table_public_bodyshops_add_column_md_parts_scan/up.sql @@ -0,0 +1,2 @@ +alter table "public"."bodyshops" add column "md_parts_scan" jsonb + not null default jsonb_build_array(); diff --git a/hasura/migrations/1678744973891_alter_table_public_joblines_add_column_critical/down.sql b/hasura/migrations/1678744973891_alter_table_public_joblines_add_column_critical/down.sql new file mode 100644 index 000000000..5d1159047 --- /dev/null +++ b/hasura/migrations/1678744973891_alter_table_public_joblines_add_column_critical/down.sql @@ -0,0 +1,4 @@ +-- Could not auto-generate a down migration. +-- Please write an appropriate down migration for the SQL below: +-- alter table "public"."joblines" add column "critical" boolean +-- not null default 'false'; diff --git a/hasura/migrations/1678744973891_alter_table_public_joblines_add_column_critical/up.sql b/hasura/migrations/1678744973891_alter_table_public_joblines_add_column_critical/up.sql new file mode 100644 index 000000000..0e7b53284 --- /dev/null +++ b/hasura/migrations/1678744973891_alter_table_public_joblines_add_column_critical/up.sql @@ -0,0 +1,2 @@ +alter table "public"."joblines" add column "critical" boolean + not null default 'false'; diff --git a/hasura/migrations/1679000353261_alter_table_public_bodyshops_add_column_enforce_conversion_category/down.sql b/hasura/migrations/1679000353261_alter_table_public_bodyshops_add_column_enforce_conversion_category/down.sql new file mode 100644 index 000000000..ea70e4ef9 --- /dev/null +++ b/hasura/migrations/1679000353261_alter_table_public_bodyshops_add_column_enforce_conversion_category/down.sql @@ -0,0 +1,4 @@ +-- Could not auto-generate a down migration. +-- Please write an appropriate down migration for the SQL below: +-- alter table "public"."bodyshops" add column "enforce_conversion_category" boolean +-- not null default 'false'; diff --git a/hasura/migrations/1679000353261_alter_table_public_bodyshops_add_column_enforce_conversion_category/up.sql b/hasura/migrations/1679000353261_alter_table_public_bodyshops_add_column_enforce_conversion_category/up.sql new file mode 100644 index 000000000..e6b5fb6b5 --- /dev/null +++ b/hasura/migrations/1679000353261_alter_table_public_bodyshops_add_column_enforce_conversion_category/up.sql @@ -0,0 +1,2 @@ +alter table "public"."bodyshops" add column "enforce_conversion_category" boolean + not null default 'false'; diff --git a/hasura/migrations/1679075878072_alter_table_public_bodyshops_alter_column_md_lost_sale_reasons/down.sql b/hasura/migrations/1679075878072_alter_table_public_bodyshops_alter_column_md_lost_sale_reasons/down.sql new file mode 100644 index 000000000..be8e5b28d --- /dev/null +++ b/hasura/migrations/1679075878072_alter_table_public_bodyshops_alter_column_md_lost_sale_reasons/down.sql @@ -0,0 +1 @@ +alter table "public"."bodyshops" alter column "md_lost_sale_reasons" set default jsonb_build_array(); diff --git a/hasura/migrations/1679075878072_alter_table_public_bodyshops_alter_column_md_lost_sale_reasons/up.sql b/hasura/migrations/1679075878072_alter_table_public_bodyshops_alter_column_md_lost_sale_reasons/up.sql new file mode 100644 index 000000000..40df2de24 --- /dev/null +++ b/hasura/migrations/1679075878072_alter_table_public_bodyshops_alter_column_md_lost_sale_reasons/up.sql @@ -0,0 +1 @@ +alter table "public"."bodyshops" alter column "md_lost_sale_reasons" set default '["Scheduling Delay", "Backordered Parts", "Price", "Unknown"]'; diff --git a/server.js b/server.js index 90d3da90f..0a36f00b9 100644 --- a/server.js +++ b/server.js @@ -135,7 +135,8 @@ app.post( app.post("/job/totalsssu", fb.validateFirebaseIdToken, job.totalsSsu); app.post("/job/costing", fb.validateFirebaseIdToken, job.costing); app.post("/job/costingmulti", fb.validateFirebaseIdToken, job.costingmulti); - +var partsScan = require("./server/parts-scan/parts-scan"); +app.post("/job/partsscan", fb.validateFirebaseIdToken, partsScan.partsScan); //Scheduling var scheduling = require("./server/scheduling/scheduling-job"); app.post("/scheduling/job", fb.validateFirebaseIdToken, scheduling.job); diff --git a/server/graphql-client/queries.js b/server/graphql-client/queries.js index de12f518e..e71bf2e4a 100644 --- a/server/graphql-client/queries.js +++ b/server/graphql-client/queries.js @@ -906,7 +906,7 @@ exports.UPDATE_JOB = ` } `; -exports.GET_JOB_BY_PK = ` query GET_JOB_BY_PK($id: uuid!) { +exports.GET_JOB_BY_PK = `query GET_JOB_BY_PK($id: uuid!) { jobs_by_pk(id: $id) { updated_at alt_transport @@ -1719,3 +1719,27 @@ query GET_PBS_AP_ALLOCATIONS($billids: [uuid!]) { } } `; + +exports.QUERY_PARTS_SCAN = `query QUERY_PARTS_SCAN ($id: uuid!) { + jobs_by_pk(id: $id) { + bodyshop { + id + md_parts_scan + } + joblines(where: {removed: {_eq: false}}) { + id + line_desc + critical + } + } +} +`; + +exports.UPDATE_PARTS_CRITICAL = `mutation UPDATE_PARTS_CRITICAL ($IdsToMarkCritical:[uuid!]!, $jobid: uuid!){ + critical: update_joblines(where:{id:{_in:$IdsToMarkCritical}}, _set:{critical: true}){ + affected_rows + } + notcritical: update_joblines(where:{id:{_nin:$IdsToMarkCritical}, jobid: {_eq: $jobid}}, _set:{critical: false}){ + affected_rows + } +}`; diff --git a/server/parts-scan/parts-scan.js b/server/parts-scan/parts-scan.js new file mode 100644 index 000000000..c5b619303 --- /dev/null +++ b/server/parts-scan/parts-scan.js @@ -0,0 +1,58 @@ +const Dinero = require("dinero.js"); +const queries = require("../graphql-client/queries"); +const { job } = require("../scheduling/scheduling-job"); +const GraphQLClient = require("graphql-request").GraphQLClient; +const logger = require("../utils/logger"); +const _ = require("lodash"); +// Dinero.defaultCurrency = "USD"; +// Dinero.globalLocale = "en-CA"; + +exports.partsScan = async function (req, res) { + const BearerToken = req.headers.authorization; + const { jobid } = req.body; + logger.log("job-parts-scan", "DEBUG", req.user?.email, jobid, null); + const client = new GraphQLClient(process.env.GRAPHQL_ENDPOINT, { + headers: { + Authorization: BearerToken, + }, + }); + + try { + //Query all jobline data using the user's authorization. + const data = await client + .setHeaders({ Authorization: BearerToken }) + .request(queries.QUERY_PARTS_SCAN, { + id: jobid, + }); + + //Create RegExps once for better performance. + const IdsToMarkCritical = []; + const RegExpressions = data.jobs_by_pk.bodyshop.md_parts_scan.map( + (r) => new RegExp(r.expression, r.flags) + ); + + //Check each line against each regex rule. + data.jobs_by_pk.joblines.forEach((jobline) => { + RegExpressions.forEach((rExp) => { + if (jobline.line_desc.match(rExp)) { + IdsToMarkCritical.push(jobline); + } + }); + }); + + const result = await client + .setHeaders({ Authorization: BearerToken }) + .request(queries.UPDATE_PARTS_CRITICAL, { + IdsToMarkCritical: _.uniqBy(IdsToMarkCritical, "id").map((i) => i.id), + jobid: jobid, + }); + + res.status(200).json(result); + } catch (error) { + logger.log("job-parts-scan-error", "ERROR", req.user.email, jobid, { + jobid, + error, + }); + res.status(400).json(JSON.stringify(error)); + } +}; diff --git a/yarn.lock b/yarn.lock index f6684bc69..feca9c296 100644 --- a/yarn.lock +++ b/yarn.lock @@ -58,7 +58,7 @@ "@firebase/util" "1.9.2" tslib "^2.1.0" -"@firebase/database-types@^0.10.0", "@firebase/database-types@0.10.3": +"@firebase/database-types@0.10.3", "@firebase/database-types@^0.10.0": version "0.10.3" resolved "https://registry.npmjs.org/@firebase/database-types/-/database-types-0.10.3.tgz" integrity sha512-Hu34CDhHYZsd2eielr0jeaWrTJk8Hz0nd7WsnYDnXtQX4i49ppgPesUzPdXVBdIBLJmT0ZZRvT7qWHknkOT+zg== @@ -356,7 +356,7 @@ resolved "https://registry.npmjs.org/@types/long/-/long-4.0.2.tgz" integrity sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA== -"@types/markdown-it@*", "@types/markdown-it@^12.2.3": +"@types/markdown-it@^12.2.3": version "12.2.3" resolved "https://registry.npmjs.org/@types/markdown-it/-/markdown-it-12.2.3.tgz" integrity sha512-GKMHFfv3458yYy+v/N8gjufHO6MSZKCOXpZc5GXIWWy8uldwfmPn98vp81gZ5f9SVw8YYBctgfJ22a2d7AOMeQ== @@ -450,11 +450,6 @@ acorn-walk@^8.2.0: resolved "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz" integrity sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA== -"acorn@^6.0.0 || ^7.0.0 || ^8.0.0": - version "7.4.1" - resolved "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz" - integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== - acorn@^8.7.0: version "8.7.1" resolved "https://registry.npmjs.org/acorn/-/acorn-8.7.1.tgz" @@ -465,7 +460,7 @@ acorn@^8.8.0: resolved "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz" integrity sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw== -agent-base@^6.0.0, agent-base@^6.0.2, agent-base@6: +agent-base@6, agent-base@^6.0.0, agent-base@^6.0.2: version "6.0.2" resolved "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz" integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== @@ -533,7 +528,7 @@ asn1@^0.2.4, asn1@~0.2.3: dependencies: safer-buffer "~2.1.0" -assert-plus@^1.0.0, assert-plus@1.0.0: +assert-plus@1.0.0, assert-plus@^1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz" integrity sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw== @@ -638,7 +633,7 @@ base64-js@^1.0.2, base64-js@^1.3.0: resolved "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz" integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== -base64id@~2.0.0, base64id@2.0.0: +base64id@2.0.0, base64id@~2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz" integrity sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog== @@ -660,33 +655,15 @@ bignumber.js@^9.0.0: resolved "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.0.2.tgz" integrity sha512-GAcQvbpsM0pUb0zw1EI0KhQEZ+lRwR5fYaAp3vPOYuP7aDvGy6cVN6XHLauvF8SOga2y0dcLcjt3iQDTSEliyw== -bluebird@^3.7.2: - version "3.7.2" - resolved "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz" - integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== - bluebird@3.3.4: version "3.3.4" resolved "https://registry.npmjs.org/bluebird/-/bluebird-3.3.4.tgz" integrity sha512-sCXkOlWh201V9KAs6lXtzbPQHmVhys/wC0I1vaCjZzZtiskEeNJljIRqirGJ+M+WOf/KL7P7KSpUaqaR6BCq7w== -body-parser@^1.20.2: - version "1.20.2" - resolved "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz" - integrity sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA== - dependencies: - bytes "3.1.2" - content-type "~1.0.5" - debug "2.6.9" - depd "2.0.0" - destroy "1.2.0" - http-errors "2.0.0" - iconv-lite "0.4.24" - on-finished "2.4.1" - qs "6.11.0" - raw-body "2.5.2" - type-is "~1.6.18" - unpipe "1.0.0" +bluebird@^3.7.2: + version "3.7.2" + resolved "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz" + integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== body-parser@1.20.1: version "1.20.1" @@ -706,6 +683,24 @@ body-parser@1.20.1: type-is "~1.6.18" unpipe "1.0.0" +body-parser@^1.20.2: + version "1.20.2" + resolved "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz" + integrity sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA== + dependencies: + bytes "3.1.2" + content-type "~1.0.5" + debug "2.6.9" + depd "2.0.0" + destroy "1.2.0" + http-errors "2.0.0" + iconv-lite "0.4.24" + on-finished "2.4.1" + qs "6.11.0" + raw-body "2.5.2" + type-is "~1.6.18" + unpipe "1.0.0" + boolbase@^1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz" @@ -750,6 +745,11 @@ buffer@4.9.2: ieee754 "^1.1.4" isarray "^1.0.0" +buildcheck@0.0.3: + version "0.0.3" + resolved "https://registry.yarnpkg.com/buildcheck/-/buildcheck-0.0.3.tgz#70451897a95d80f7807e68fc412eb2e7e35ff4d5" + integrity sha512-pziaA+p/wdVImfcbsZLNF32EiWyujlQLwolMqUQE8xpKNOH7KmZQaY8sXN7DGOEzPAElo9QTaeNRfGnf3iOJbA== + busboy@^1.0.0: version "1.6.0" resolved "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz" @@ -807,7 +807,7 @@ cheerio-select@^2.1.0: domhandler "^5.0.3" domutils "^3.0.1" -cheerio@^1.0.0-rc.12, cheerio@1.0.0-rc.12: +cheerio@1.0.0-rc.12, cheerio@^1.0.0-rc.12: version "1.0.0-rc.12" resolved "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.12.tgz" integrity sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q== @@ -869,16 +869,16 @@ color-convert@^2.0.1: dependencies: color-name "~1.1.4" -color-name@^1.0.0, color-name@~1.1.4: - version "1.1.4" - resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz" - integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== - color-name@1.1.3: version "1.1.3" resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz" integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== +color-name@^1.0.0, color-name@~1.1.4: + version "1.1.4" + resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== + color-string@^1.6.0: version "1.9.1" resolved "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz" @@ -1007,7 +1007,7 @@ cookie-signature@1.0.6: resolved "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz" integrity sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ== -cookie@~0.4.1, cookie@0.4.1: +cookie@0.4.1, cookie@~0.4.1: version "0.4.1" resolved "https://registry.npmjs.org/cookie/-/cookie-0.4.1.tgz" integrity sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA== @@ -1027,17 +1027,17 @@ core-js@^3.6.5: resolved "https://registry.npmjs.org/core-js/-/core-js-3.6.5.tgz" integrity sha512-vZVEEwZoIsI+vPEuoF9Iqf5H7/M3eeQqWlQnYa8FSKKePuYTf5MWnxb5SDAzCa60b3JBRS5g9b+Dq7b1y/RCrA== -core-util-is@~1.0.0: - version "1.0.3" - resolved "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz" - integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== - core-util-is@1.0.2: version "1.0.2" resolved "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz" integrity sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ== -cors@~2.8.5, cors@2.8.5: +core-util-is@~1.0.0: + version "1.0.3" + resolved "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz" + integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== + +cors@2.8.5, cors@~2.8.5: version "2.8.5" resolved "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz" integrity sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g== @@ -1045,6 +1045,14 @@ cors@~2.8.5, cors@2.8.5: object-assign "^4" vary "^1" +cpu-features@~0.0.4: + version "0.0.4" + resolved "https://registry.yarnpkg.com/cpu-features/-/cpu-features-0.0.4.tgz#0023475bb4f4c525869c162e4108099e35bf19d8" + integrity sha512-fKiZ/zp1mUwQbnzb9IghXtHtDoTMtNeb8oYGx6kX2SYfhnG0HNdBEBIzB9b5KlXu5DQPhfy3mInbBxFcgwAr3A== + dependencies: + buildcheck "0.0.3" + nan "^2.15.0" + cross-fetch@^3.1.5: version "3.1.5" resolved "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.5.tgz" @@ -1111,13 +1119,6 @@ dayjs@^1.8.29: resolved "https://registry.npmjs.org/dayjs/-/dayjs-1.11.3.tgz" integrity sha512-xxwlswWOlGhzgQ4TKzASQkUhqERI3egRNqgV4ScR8wlANA/A9tZ7miXa44vTTKEq5l7vWoL5G57bG3zA+Kow0A== -debug@^4.1.1, debug@^4.3.2, debug@^4.3.4, debug@~4.3.1, debug@~4.3.2, debug@4: - version "4.3.4" - resolved "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz" - integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== - dependencies: - ms "2.1.2" - debug@2.6.9: version "2.6.9" resolved "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz" @@ -1125,6 +1126,13 @@ debug@2.6.9: dependencies: ms "2.0.0" +debug@4, debug@^4.1.1, debug@^4.3.2, debug@^4.3.4, debug@~4.3.1, debug@~4.3.2: + version "4.3.4" + resolved "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz" + integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== + dependencies: + ms "2.1.2" + decode-uri-component@^0.2.0: version "0.2.0" resolved "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz" @@ -1170,14 +1178,6 @@ dev-null@^0.1.1: resolved "https://registry.npmjs.org/dev-null/-/dev-null-0.1.1.tgz" integrity sha512-nMNZG0zfMgmdv8S5O0TM5cpwNbGKRGPCxVsr0SmA3NZZy9CYBbuNLL0PD3Acx9e5LIUgwONXtM9kM6RlawPxEQ== -dezalgo@^1.0.4: - version "1.0.4" - resolved "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.4.tgz" - integrity sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig== - dependencies: - asap "^2.0.0" - wrappy "1" - dezalgo@1.0.3: version "1.0.3" resolved "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.3.tgz" @@ -1186,6 +1186,14 @@ dezalgo@1.0.3: asap "^2.0.0" wrappy "1" +dezalgo@^1.0.4: + version "1.0.4" + resolved "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.4.tgz" + integrity sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig== + dependencies: + asap "^2.0.0" + wrappy "1" + dinero.js@^1.9.1: version "1.9.1" resolved "https://registry.npmjs.org/dinero.js/-/dinero.js-1.9.1.tgz" @@ -1254,7 +1262,7 @@ ecc-jsbn@~0.1.1: jsbn "~0.1.0" safer-buffer "^2.1.0" -ecdsa-sig-formatter@^1.0.11, ecdsa-sig-formatter@1.0.11: +ecdsa-sig-formatter@1.0.11, ecdsa-sig-formatter@^1.0.11: version "1.0.11" resolved "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz" integrity sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ== @@ -1469,16 +1477,16 @@ extract-files@^9.0.0: resolved "https://registry.npmjs.org/extract-files/-/extract-files-9.0.0.tgz" integrity sha512-CvdFfHkC95B4bBBk36hcEmvdR2awOdhhVUYH6S/zrVj3477zven/fJMYg7121h4T1xHZC+tetUpubpAhxwI7hQ== -extsprintf@^1.2.0: - version "1.4.1" - resolved "https://registry.npmjs.org/extsprintf/-/extsprintf-1.4.1.tgz" - integrity sha512-Wrk35e8ydCKDj/ArClo1VrPVmN8zph5V4AtHwIuHhvMXsKf73UT3BOD+azBIW+3wOJ4FhEH7zyaJCFvChjYvMA== - extsprintf@1.3.0: version "1.3.0" resolved "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz" integrity sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g== +extsprintf@^1.2.0: + version "1.4.1" + resolved "https://registry.npmjs.org/extsprintf/-/extsprintf-1.4.1.tgz" + integrity sha512-Wrk35e8ydCKDj/ArClo1VrPVmN8zph5V4AtHwIuHhvMXsKf73UT3BOD+azBIW+3wOJ4FhEH7zyaJCFvChjYvMA== + fast-deep-equal@^3.1.1: version "3.1.3" resolved "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz" @@ -1830,7 +1838,7 @@ graphql-request@^4.2.0: extract-files "^9.0.0" form-data "^3.0.0" -graphql@^16.6.0, "graphql@14 - 16": +graphql@^16.6.0: version "16.6.0" resolved "https://registry.npmjs.org/graphql/-/graphql-16.6.0.tgz" integrity sha512-KPIBPDlW7NxrbT/eh4qPXz5FiFdL5UbaA0XUNz2Rp3Z3hqBSkbj0GVjwFDztsWVauZUWsbKHgMg++sk8UX0bkw== @@ -1893,7 +1901,7 @@ has@^1.0.3: dependencies: function-bind "^1.1.1" -hexoid@^1.0.0, hexoid@1.0.0: +hexoid@1.0.0, hexoid@^1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/hexoid/-/hexoid-1.0.0.tgz" integrity sha512-QFLV0taWQOZtvIRIAdBChesmogZrtuXvVWsFHZTk2SU+anspqZ2vMnoLg7IE1+Uk16N19APic1BuF8bC8c2m5g== @@ -1958,7 +1966,7 @@ http-signature@~1.2.0: jsprim "^1.2.2" sshpk "^1.7.0" -https-proxy-agent@^5.0.0, https-proxy-agent@5: +https-proxy-agent@5, https-proxy-agent@^5.0.0: version "5.0.1" resolved "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz" integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA== @@ -1973,16 +1981,16 @@ iconv-lite@0.4.24: dependencies: safer-buffer ">= 2.1.2 < 3" -ieee754@^1.1.4: - version "1.2.1" - resolved "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz" - integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== - ieee754@1.1.13: version "1.1.13" resolved "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz" integrity sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg== +ieee754@^1.1.4: + version "1.2.1" + resolved "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz" + integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== + inflight@^1.0.4: version "1.0.6" resolved "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz" @@ -1991,7 +1999,7 @@ inflight@^1.0.4: once "^1.3.0" wrappy "1" -inherits@^2.0.3, inherits@~2.0.1, inherits@~2.0.3, inherits@2, inherits@2.0.4: +inherits@2, inherits@2.0.4, inherits@^2.0.3, inherits@~2.0.1, inherits@~2.0.3: version "2.0.4" resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== @@ -2105,16 +2113,16 @@ is-wsl@^2.1.1: dependencies: is-docker "^2.0.0" -isarray@^1.0.0, isarray@~1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz" - integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== - isarray@0.0.1: version "0.0.1" resolved "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz" integrity sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ== +isarray@^1.0.0, isarray@~1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz" + integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== + isstream@~0.1.2: version "0.1.2" resolved "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz" @@ -2392,7 +2400,7 @@ lodash.once@^4.0.0: resolved "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz" integrity sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg== -lodash@^4.17.15, lodash@^4.17.20, lodash@^4.17.21, lodash@>=4.0: +lodash@^4.17.15, lodash@^4.17.20, lodash@^4.17.21: version "4.17.21" resolved "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== @@ -2465,7 +2473,7 @@ markdown-it-anchor@^8.4.1: resolved "https://registry.npmjs.org/markdown-it-anchor/-/markdown-it-anchor-8.6.7.tgz" integrity sha512-FlCHFwNnutLgVTflOYHPW2pPcl2AACqVzExlkGQNsi4CJgqOHN7YTgDd4LuhgN1BFO3TS0vLAruV1Td6dwWPJA== -markdown-it@*, markdown-it@^12.3.2: +markdown-it@^12.3.2: version "12.3.2" resolved "https://registry.npmjs.org/markdown-it/-/markdown-it-12.3.2.tgz" integrity sha512-TchMembfxfNVpHkbtriWltGWc+m3xszaRD0CZup7GFFhzIgQqxIfn3eGj1yZpfuflzPvfkt611B2Q/Bsk1YnGg== @@ -2508,7 +2516,7 @@ methods@^1.1.2, methods@~1.1.2: resolved "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz" integrity sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w== -"mime-db@>= 1.43.0 < 2", mime-db@1.52.0: +mime-db@1.52.0, "mime-db@>= 1.43.0 < 2": version "1.52.0" resolved "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz" integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== @@ -2520,11 +2528,6 @@ mime-types@^2.0.8, mime-types@^2.1.12, mime-types@~2.1.19, mime-types@~2.1.24, m dependencies: mime-db "1.52.0" -mime@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/mime/-/mime-3.0.0.tgz" - integrity sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A== - mime@1.6.0: version "1.6.0" resolved "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz" @@ -2535,6 +2538,11 @@ mime@2.6.0: resolved "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz" integrity sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg== +mime@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/mime/-/mime-3.0.0.tgz" + integrity sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A== + minimatch@^3.0.4, minimatch@^3.1.1: version "3.1.2" resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz" @@ -2578,11 +2586,6 @@ moment@^2.29.4: resolved "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz" integrity sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w== -ms@^2.1.1, ms@2.1.3: - version "2.1.3" - resolved "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz" - integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== - ms@2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz" @@ -2593,6 +2596,11 @@ ms@2.1.2: resolved "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz" integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== +ms@2.1.3, ms@^2.1.1: + version "2.1.3" + resolved "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz" + integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== + multer@^1.4.5-lts.1: version "1.4.5-lts.1" resolved "https://registry.npmjs.org/multer/-/multer-1.4.5-lts.1.tgz" @@ -2606,6 +2614,11 @@ multer@^1.4.5-lts.1: type-is "^1.6.4" xtend "^4.0.0" +nan@^2.15.0: + version "2.17.0" + resolved "https://registry.yarnpkg.com/nan/-/nan-2.17.0.tgz#c0150a2368a182f033e9aa5195ec76ea41a199cb" + integrity sha512-2ZTgtl0nJsO0KQCjEpxcIr5D+Yv90plTitZt9JBfQvVJDS5seMl3FOvsh3+9CoYWXf/1l5OaZzzF6nDm4cagaQ== + nan@^2.16.0: version "2.16.0" resolved "https://registry.npmjs.org/nan/-/nan-2.16.0.tgz" @@ -2621,7 +2634,7 @@ netmask@^2.0.2: resolved "https://registry.npmjs.org/netmask/-/netmask-2.0.2.tgz" integrity sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg== -node-fetch@^2.6.1, node-fetch@^2.6.7, node-fetch@2.6.7: +node-fetch@2.6.7, node-fetch@^2.6.1, node-fetch@^2.6.7: version "2.6.7" resolved "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz" integrity sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ== @@ -2706,7 +2719,7 @@ on-headers@~1.0.2: resolved "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz" integrity sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA== -once@^1.3.0, once@^1.4.0, once@1.4.0: +once@1.4.0, once@^1.3.0, once@^1.4.0: version "1.4.0" resolved "https://registry.npmjs.org/once/-/once-1.4.0.tgz" integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== @@ -2873,7 +2886,7 @@ protobufjs-cli@1.1.1: tmp "^0.2.1" uglify-js "^3.7.7" -protobufjs@^7.0.0, protobufjs@7.2.2: +protobufjs@7.2.2, protobufjs@^7.0.0: version "7.2.2" resolved "https://registry.npmjs.org/protobufjs/-/protobufjs-7.2.2.tgz" integrity sha512-++PrQIjrom+bFDPpfmqXfAGSQs40116JRrqqyf53dymUMvvb5d/LMRyicRoF1AUKoXVS1/IgJXlEgcpr4gTF3Q== @@ -2928,6 +2941,11 @@ psl@^1.1.24, psl@^1.1.28: resolved "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz" integrity sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ== +punycode@1.3.2: + version "1.3.2" + resolved "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz" + integrity sha512-RofWgt/7fL5wP1Y7fxE7/EmTLzQVnB0ycyibJ0OOHIlJqTNzglYFxVwETOcIoJqJmpDXJ9xImDv+Fq34F/d4Dw== + punycode@^1.4.1: version "1.4.1" resolved "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz" @@ -2938,17 +2956,12 @@ punycode@^2.1.0, punycode@^2.1.1: resolved "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz" integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== -punycode@1.3.2: - version "1.3.2" - resolved "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz" - integrity sha512-RofWgt/7fL5wP1Y7fxE7/EmTLzQVnB0ycyibJ0OOHIlJqTNzglYFxVwETOcIoJqJmpDXJ9xImDv+Fq34F/d4Dw== - q@^1.5.1: version "1.5.1" resolved "https://registry.npmjs.org/q/-/q-1.5.1.tgz" integrity sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw== -qs@^6.10.3, qs@^6.11.0, qs@^6.9.4, qs@6.11.0: +qs@6.11.0, qs@^6.10.3, qs@^6.11.0, qs@^6.9.4: version "6.11.0" resolved "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz" integrity sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q== @@ -3000,16 +3013,6 @@ range-parser@~1.2.1: resolved "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz" integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== -raw-body@^2.2.0, raw-body@2.5.2: - version "2.5.2" - resolved "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz" - integrity sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA== - dependencies: - bytes "3.1.2" - http-errors "2.0.0" - iconv-lite "0.4.24" - unpipe "1.0.0" - raw-body@2.5.1: version "2.5.1" resolved "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz" @@ -3020,6 +3023,26 @@ raw-body@2.5.1: iconv-lite "0.4.24" unpipe "1.0.0" +raw-body@2.5.2, raw-body@^2.2.0: + version "2.5.2" + resolved "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz" + integrity sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA== + dependencies: + bytes "3.1.2" + http-errors "2.0.0" + iconv-lite "0.4.24" + unpipe "1.0.0" + +readable-stream@1.1.x: + version "1.1.14" + resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz" + integrity sha512-+MeVjFf4L44XUkhM1eYbD8fyEsxcV81pqMSR5gblfcLCHfZvbrqy4/qYHE+/R5HoBUT11WV5O08Cr1n3YXkWVQ== + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.1" + isarray "0.0.1" + string_decoder "~0.10.x" + readable-stream@^2.2.2: version "2.3.7" resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz" @@ -3042,16 +3065,6 @@ readable-stream@^3.0.2, readable-stream@^3.1.1, readable-stream@^3.4.0, readable string_decoder "^1.1.1" util-deprecate "^1.0.1" -readable-stream@1.1.x: - version "1.1.14" - resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz" - integrity sha512-+MeVjFf4L44XUkhM1eYbD8fyEsxcV81pqMSR5gblfcLCHfZvbrqy4/qYHE+/R5HoBUT11WV5O08Cr1n3YXkWVQ== - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.1" - isarray "0.0.1" - string_decoder "~0.10.x" - remote-content@^3.0.1: version "3.0.1" resolved "https://registry.npmjs.org/remote-content/-/remote-content-3.0.1.tgz" @@ -3119,16 +3132,16 @@ retry-request@^5.0.0: debug "^4.1.1" extend "^3.0.2" -retry@^0.12.0: - version "0.12.0" - resolved "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz" - integrity sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow== - retry@0.13.1: version "0.13.1" resolved "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz" integrity sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg== +retry@^0.12.0: + version "0.12.0" + resolved "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz" + integrity sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow== + rimraf@^3.0.0: version "3.0.2" resolved "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz" @@ -3160,41 +3173,36 @@ rxjs@^7.0.0: dependencies: tslib "^2.1.0" -safe-buffer@^5.0.1, safe-buffer@^5.1.2, safe-buffer@>=5.1.0, safe-buffer@~5.2.0, safe-buffer@5.2.1: +safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: + version "5.1.2" + resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz" + integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== + +safe-buffer@5.2.1, safe-buffer@>=5.1.0, safe-buffer@^5.0.1, safe-buffer@^5.1.2, safe-buffer@~5.2.0: version "5.2.1" resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz" integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== -safe-buffer@~5.1.0, safe-buffer@~5.1.1: - version "5.1.2" - resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz" - integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== - -safe-buffer@5.1.2: - version "5.1.2" - resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz" - integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== - safe-stable-stringify@^2.3.1: version "2.3.1" resolved "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.3.1.tgz" integrity sha512-kYBSfT+troD9cDA85VDnHZ1rpHC50O0g1e6WlGHVCz/g+JS+9WKLj+XwFYyR8UbrZN8ll9HUpDAAddY58MGisg== -safer-buffer@^2.0.2, safer-buffer@^2.1.0, "safer-buffer@>= 2.1.2 < 3", safer-buffer@~2.1.0: +"safer-buffer@>= 2.1.2 < 3", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: version "2.1.2" resolved "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== -sax@>=0.6, sax@>=0.6.0: - version "1.2.4" - resolved "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz" - integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== - sax@1.2.1: version "1.2.1" resolved "https://registry.npmjs.org/sax/-/sax-1.2.1.tgz" integrity sha512-8I2a3LovHTOpm7NV5yOyO8IHqgVsfK4+UuySrXU8YXkSRX7k6hCV9b3HrkKCr3nMpgj+0bmocaJJWpvp1oc7ZA== +sax@>=0.6, sax@>=0.6.0: + version "1.2.4" + resolved "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz" + integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== + scmp@^2.1.0: version "2.1.0" resolved "https://registry.npmjs.org/scmp/-/scmp-2.1.0.tgz" @@ -3320,7 +3328,7 @@ socket.io@^4.6.1: socket.io-adapter "~2.5.2" socket.io-parser "~4.2.1" -socks-proxy-agent@^5.0.0, socks-proxy-agent@5: +socks-proxy-agent@5, socks-proxy-agent@^5.0.0: version "5.0.1" resolved "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-5.0.1.tgz" integrity sha512-vZdmnjb9a2Tz6WEQVIurybSwElwPxMZaIc7PzqbJTrezcKNznv6giT7J7tZDZ1BojVaa1jvO/UiUdhDVB0ACoQ== @@ -3452,6 +3460,15 @@ strict-uri-encode@^2.0.0: resolved "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-2.0.0.tgz" integrity sha512-QwiXZgpRcKkhTj2Scnn++4PKtWsH0kpzZ62L2R6c/LUVYv7hVnZqcg2+sMuT6R7Jusu1vviK/MFsu6kNJfWlEQ== +string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: + version "4.2.3" + resolved "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz" + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.1" + string_decoder@^1.1.1: version "1.3.0" resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz" @@ -3471,15 +3488,6 @@ string_decoder@~1.1.1: dependencies: safe-buffer "~5.1.0" -string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: - version "4.2.3" - resolved "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz" - integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== - dependencies: - emoji-regex "^8.0.0" - is-fullwidth-code-point "^3.0.0" - strip-ansi "^6.0.1" - stringify-clone@^1.0.0: version "1.1.1" resolved "https://registry.npmjs.org/stringify-clone/-/stringify-clone-1.1.1.tgz" @@ -3532,7 +3540,7 @@ superagent-proxy@^3.0.0: debug "^4.3.2" proxy-agent "^5.0.0" -superagent@^8.0.9, "superagent@>= 0.15.4 || 1 || 2 || 3": +superagent@^8.0.9: version "8.0.9" resolved "https://registry.npmjs.org/superagent/-/superagent-8.0.9.tgz" integrity sha512-4C7Bh5pyHTvU33KpZgwrNKh/VQnvgtCSqPRfJAUdmrtSYePVzVg4E4OzsrbkhJj9O7SO6Bnv75K/F8XVZT8YHA== @@ -3707,22 +3715,22 @@ uid-safe@2.1.5: dependencies: random-bytes "~1.0.0" -underscore@~1.13.2: - version "1.13.6" - resolved "https://registry.npmjs.org/underscore/-/underscore-1.13.6.tgz" - integrity sha512-+A5Sja4HP1M08MaXya7p5LvjuM7K6q/2EaC0+iovj/wOcMsTzMvDFbasi/oSapiwOlt252IqsKqPjCl7huKS0A== - underscore@1.12.1: version "1.12.1" resolved "https://registry.npmjs.org/underscore/-/underscore-1.12.1.tgz" integrity sha512-hEQt0+ZLDVUMhebKxL4x1BTtDY7bavVofhZ9KZ4aI26X9SRaE+Y3m83XUL1UP2jn8ynjndwCCpEHdUG+9pP1Tw== +underscore@~1.13.2: + version "1.13.6" + resolved "https://registry.npmjs.org/underscore/-/underscore-1.13.6.tgz" + integrity sha512-+A5Sja4HP1M08MaXya7p5LvjuM7K6q/2EaC0+iovj/wOcMsTzMvDFbasi/oSapiwOlt252IqsKqPjCl7huKS0A== + universalify@^0.1.0: version "0.1.2" resolved "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz" integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== -unpipe@~1.0.0, unpipe@1.0.0: +unpipe@1.0.0, unpipe@~1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz" integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== @@ -3760,6 +3768,13 @@ util-deprecate@^1.0.1, util-deprecate@~1.0.1: resolved "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz" integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== +util@0.10.3: + version "0.10.3" + resolved "https://registry.npmjs.org/util/-/util-0.10.3.tgz" + integrity sha512-5KiHfsmkqacuKjkRkdV7SsfDJ2EGiPsK92s2MhNSY0craxjTdKTtqKsJaCWp4LW33ZZ0OPUv1WO/TFvNQRiQxQ== + dependencies: + inherits "2.0.1" + util@^0.12.4: version "0.12.5" resolved "https://registry.npmjs.org/util/-/util-0.12.5.tgz" @@ -3771,34 +3786,22 @@ util@^0.12.4: is-typed-array "^1.1.3" which-typed-array "^1.1.2" -util@0.10.3: - version "0.10.3" - resolved "https://registry.npmjs.org/util/-/util-0.10.3.tgz" - integrity sha512-5KiHfsmkqacuKjkRkdV7SsfDJ2EGiPsK92s2MhNSY0craxjTdKTtqKsJaCWp4LW33ZZ0OPUv1WO/TFvNQRiQxQ== - dependencies: - inherits "2.0.1" - utils-merge@1.0.1: version "1.0.1" resolved "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz" integrity sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA== -uuid@^3.1.0: +uuid@8.0.0: + version "8.0.0" + resolved "https://registry.npmjs.org/uuid/-/uuid-8.0.0.tgz" + integrity sha512-jOXGuXZAWdsTH7eZLtyXMqUb9EcWMGZNbL9YcGBJl4MH4nrxHmZJhEHvyLFrkxo+28uLb/NYRcStH48fnD0Vzw== + +uuid@^3.1.0, uuid@^3.3.2: version "3.4.0" resolved "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz" integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== -uuid@^3.3.2: - version "3.4.0" - resolved "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz" - integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== - -uuid@^8.0.0: - version "8.3.2" - resolved "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz" - integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== - -uuid@^8.3.2: +uuid@^8.0.0, uuid@^8.3.2: version "8.3.2" resolved "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz" integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== @@ -3808,11 +3811,6 @@ uuid@^9.0.0: resolved "https://registry.npmjs.org/uuid/-/uuid-9.0.0.tgz" integrity sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg== -uuid@8.0.0: - version "8.0.0" - resolved "https://registry.npmjs.org/uuid/-/uuid-8.0.0.tgz" - integrity sha512-jOXGuXZAWdsTH7eZLtyXMqUb9EcWMGZNbL9YcGBJl4MH4nrxHmZJhEHvyLFrkxo+28uLb/NYRcStH48fnD0Vzw== - vary@^1, vary@~1.1.2: version "1.1.2" resolved "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz" @@ -3936,6 +3934,14 @@ xml-crypto@^3.0.0: "@xmldom/xmldom" "^0.8.5" xpath "0.0.32" +xml2js@0.4.19: + version "0.4.19" + resolved "https://registry.npmjs.org/xml2js/-/xml2js-0.4.19.tgz" + integrity sha512-esZnJZJOiJR9wWKMyuvSE1y6Dq5LCuJanqhxslH2bxM6duahNZ+HMpCLhBQGZkbX6xRf8x1Y2eJlgt2q3qo49Q== + dependencies: + sax ">=0.6.0" + xmlbuilder "~9.0.1" + xml2js@^0.4.23: version "0.4.23" resolved "https://registry.npmjs.org/xml2js/-/xml2js-0.4.23.tgz" @@ -3944,13 +3950,16 @@ xml2js@^0.4.23: sax ">=0.6.0" xmlbuilder "~11.0.0" -xml2js@0.4.19: - version "0.4.19" - resolved "https://registry.npmjs.org/xml2js/-/xml2js-0.4.19.tgz" - integrity sha512-esZnJZJOiJR9wWKMyuvSE1y6Dq5LCuJanqhxslH2bxM6duahNZ+HMpCLhBQGZkbX6xRf8x1Y2eJlgt2q3qo49Q== +xmlbuilder2@^3.0.2: + version "3.0.2" + resolved "https://registry.npmjs.org/xmlbuilder2/-/xmlbuilder2-3.0.2.tgz" + integrity sha512-h4MUawGY21CTdhV4xm3DG9dgsqyhDkZvVJBx88beqX8wJs3VgyGQgAn5VreHuae6unTQxh115aMK5InCVmOIKw== dependencies: - sax ">=0.6.0" - xmlbuilder "~9.0.1" + "@oozcitak/dom" "1.15.10" + "@oozcitak/infra" "1.0.8" + "@oozcitak/util" "8.3.8" + "@types/node" "*" + js-yaml "3.14.0" xmlbuilder@^13.0.2: version "13.0.2" @@ -3967,17 +3976,6 @@ xmlbuilder@~9.0.1: resolved "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.7.tgz" integrity sha512-7YXTQc3P2l9+0rjaUbLwMKRhtmwg1M1eDf6nag7urC7pIPYLD9W/jmzQ4ptRSUbodw5S0jfoGTflLemQibSpeQ== -xmlbuilder2@^3.0.2: - version "3.0.2" - resolved "https://registry.npmjs.org/xmlbuilder2/-/xmlbuilder2-3.0.2.tgz" - integrity sha512-h4MUawGY21CTdhV4xm3DG9dgsqyhDkZvVJBx88beqX8wJs3VgyGQgAn5VreHuae6unTQxh115aMK5InCVmOIKw== - dependencies: - "@oozcitak/dom" "1.15.10" - "@oozcitak/infra" "1.0.8" - "@oozcitak/util" "8.3.8" - "@types/node" "*" - js-yaml "3.14.0" - xmlcreate@^2.0.4: version "2.0.4" resolved "https://registry.npmjs.org/xmlcreate/-/xmlcreate-2.0.4.tgz"