element", () => {
- // https://on.cypress.io/select
-
- // at first, no option should be selected
- cy.get(".action-select").should("have.value", "--Select a fruit--");
-
- // Select option(s) with matching text content
- cy.get(".action-select").select("apples");
- // confirm the apples were selected
- // note that each value starts with "fr-" in our HTML
- cy.get(".action-select").should("have.value", "fr-apples");
-
- cy.get(".action-select-multiple")
- .select(["apples", "oranges", "bananas"])
- // when getting multiple values, invoke "val" method first
- .invoke("val")
- .should("deep.equal", ["fr-apples", "fr-oranges", "fr-bananas"]);
-
- // Select option(s) with matching value
- cy.get(".action-select")
- .select("fr-bananas")
- // can attach an assertion right away to the element
- .should("have.value", "fr-bananas");
-
- cy.get(".action-select-multiple")
- .select(["fr-apples", "fr-oranges", "fr-bananas"])
- .invoke("val")
- .should("deep.equal", ["fr-apples", "fr-oranges", "fr-bananas"]);
-
- // assert the selected values include oranges
- cy.get(".action-select-multiple").invoke("val").should("include", "fr-oranges");
- });
-
- it(".scrollIntoView() - scroll an element into view", () => {
- // https://on.cypress.io/scrollintoview
-
- // normally all of these buttons are hidden,
- // because they're not within
- // the viewable area of their parent
- // (we need to scroll to see them)
- cy.get("#scroll-horizontal button").should("not.be.visible");
-
- // scroll the button into view, as if the user had scrolled
- cy.get("#scroll-horizontal button").scrollIntoView().should("be.visible");
-
- cy.get("#scroll-vertical button").should("not.be.visible");
-
- // Cypress handles the scroll direction needed
- cy.get("#scroll-vertical button").scrollIntoView().should("be.visible");
-
- cy.get("#scroll-both button").should("not.be.visible");
-
- // Cypress knows to scroll to the right and down
- cy.get("#scroll-both button").scrollIntoView().should("be.visible");
- });
-
- it(".trigger() - trigger an event on a DOM element", () => {
- // https://on.cypress.io/trigger
-
- // To interact with a range input (slider)
- // we need to set its value & trigger the
- // event to signal it changed
-
- // Here, we invoke jQuery's val() method to set
- // the value and trigger the 'change' event
- cy.get(".trigger-input-range")
- .invoke("val", 25)
- .trigger("change")
- .get("input[type=range]")
- .siblings("p")
- .should("have.text", "25");
- });
-
- it("cy.scrollTo() - scroll the window or element to a position", () => {
- // https://on.cypress.io/scrollto
-
- // You can scroll to 9 specific positions of an element:
- // -----------------------------------
- // | topLeft top topRight |
- // | |
- // | |
- // | |
- // | left center right |
- // | |
- // | |
- // | |
- // | bottomLeft bottom bottomRight |
- // -----------------------------------
-
- // if you chain .scrollTo() off of cy, we will
- // scroll the entire window
- cy.scrollTo("bottom");
-
- cy.get("#scrollable-horizontal").scrollTo("right");
-
- // or you can scroll to a specific coordinate:
- // (x axis, y axis) in pixels
- cy.get("#scrollable-vertical").scrollTo(250, 250);
-
- // or you can scroll to a specific percentage
- // of the (width, height) of the element
- cy.get("#scrollable-both").scrollTo("75%", "25%");
-
- // control the easing of the scroll (default is 'swing')
- cy.get("#scrollable-vertical").scrollTo("center", { easing: "linear" });
-
- // control the duration of the scroll (in ms)
- cy.get("#scrollable-both").scrollTo("center", { duration: 2000 });
- });
-});
diff --git a/client/cypress/e2e/2-advanced-examples/aliasing.cy.js b/client/cypress/e2e/2-advanced-examples/aliasing.cy.js
deleted file mode 100644
index 152b8ece9..000000000
--- a/client/cypress/e2e/2-advanced-examples/aliasing.cy.js
+++ /dev/null
@@ -1,35 +0,0 @@
-///
-
-context("Aliasing", () => {
- beforeEach(() => {
- cy.visit("https://example.cypress.io/commands/aliasing");
- });
-
- it(".as() - alias a DOM element for later use", () => {
- // https://on.cypress.io/as
-
- // Alias a DOM element for use later
- // We don't have to traverse to the element
- // later in our code, we reference it with @
-
- cy.get(".as-table").find("tbody>tr").first().find("td").first().find("button").as("firstBtn");
-
- // when we reference the alias, we place an
- // @ in front of its name
- cy.get("@firstBtn").click();
-
- cy.get("@firstBtn").should("have.class", "btn-success").and("contain", "Changed");
- });
-
- it(".as() - alias a route for later use", () => {
- // Alias the route to wait for its response
- cy.intercept("GET", "**/comments/*").as("getComment");
-
- // we have code that gets a comment when
- // the button is clicked in scripts.js
- cy.get(".network-btn").click();
-
- // https://on.cypress.io/wait
- cy.wait("@getComment").its("response.statusCode").should("eq", 200);
- });
-});
diff --git a/client/cypress/e2e/2-advanced-examples/assertions.cy.js b/client/cypress/e2e/2-advanced-examples/assertions.cy.js
deleted file mode 100644
index 2bde3a9a0..000000000
--- a/client/cypress/e2e/2-advanced-examples/assertions.cy.js
+++ /dev/null
@@ -1,173 +0,0 @@
-///
-
-context("Assertions", () => {
- beforeEach(() => {
- cy.visit("https://example.cypress.io/commands/assertions");
- });
-
- describe("Implicit Assertions", () => {
- it(".should() - make an assertion about the current subject", () => {
- // https://on.cypress.io/should
- cy.get(".assertion-table")
- .find("tbody tr:last")
- .should("have.class", "success")
- .find("td")
- .first()
- // checking the text of the element in various ways
- .should("have.text", "Column content")
- .should("contain", "Column content")
- .should("have.html", "Column content")
- // chai-jquery uses "is()" to check if element matches selector
- .should("match", "td")
- // to match text content against a regular expression
- // first need to invoke jQuery method text()
- // and then match using regular expression
- .invoke("text")
- .should("match", /column content/i);
-
- // a better way to check element's text content against a regular expression
- // is to use "cy.contains"
- // https://on.cypress.io/contains
- cy.get(".assertion-table")
- .find("tbody tr:last")
- // finds first element with text content matching regular expression
- .contains("td", /column content/i)
- .should("be.visible");
-
- // for more information about asserting element's text
- // see https://on.cypress.io/using-cypress-faq#How-do-I-get-an-element’s-text-contents
- });
-
- it(".and() - chain multiple assertions together", () => {
- // https://on.cypress.io/and
- cy.get(".assertions-link").should("have.class", "active").and("have.attr", "href").and("include", "cypress.io");
- });
- });
-
- describe("Explicit Assertions", () => {
- // https://on.cypress.io/assertions
- it("expect - make an assertion about a specified subject", () => {
- // We can use Chai's BDD style assertions
- expect(true).to.be.true;
- const o = { foo: "bar" };
-
- expect(o).to.equal(o);
- expect(o).to.deep.equal({ foo: "bar" });
- // matching text using regular expression
- expect("FooBar").to.match(/bar$/i);
- });
-
- it("pass your own callback function to should()", () => {
- // Pass a function to should that can have any number
- // of explicit assertions within it.
- // The ".should(cb)" function will be retried
- // automatically until it passes all your explicit assertions or times out.
- cy.get(".assertions-p")
- .find("p")
- .should(($p) => {
- // https://on.cypress.io/$
- // return an array of texts from all of the p's
- // @ts-ignore TS6133 unused variable
- const texts = $p.map((i, el) => Cypress.$(el).text());
-
- // jquery map returns jquery object
- // and .get() convert this to simple array
- const paragraphs = texts.get();
-
- // array should have length of 3
- expect(paragraphs, "has 3 paragraphs").to.have.length(3);
-
- // use second argument to expect(...) to provide clear
- // message with each assertion
- expect(paragraphs, "has expected text in each paragraph").to.deep.eq([
- "Some text from first p",
- "More text from second p",
- "And even more text from third p"
- ]);
- });
- });
-
- it("finds element by class name regex", () => {
- cy.get(".docs-header")
- .find("div")
- // .should(cb) callback function will be retried
- .should(($div) => {
- expect($div).to.have.length(1);
-
- const className = $div[0].className;
-
- expect(className).to.match(/heading-/);
- })
- // .then(cb) callback is not retried,
- // it either passes or fails
- .then(($div) => {
- expect($div, "text content").to.have.text("Introduction");
- });
- });
-
- it("can throw any error", () => {
- cy.get(".docs-header")
- .find("div")
- .should(($div) => {
- if ($div.length !== 1) {
- // you can throw your own errors
- throw new Error("Did not find 1 element");
- }
-
- const className = $div[0].className;
-
- if (!className.match(/heading-/)) {
- throw new Error(`Could not find class "heading-" in ${className}`);
- }
- });
- });
-
- it("matches unknown text between two elements", () => {
- /**
- * Text from the first element.
- * @type {string}
- */
- let text;
-
- /**
- * Normalizes passed text,
- * useful before comparing text with spaces and different capitalization.
- * @param {string} s Text to normalize
- */
- const normalizeText = (s) => s.replace(/\s/g, "").toLowerCase();
-
- cy.get(".two-elements")
- .find(".first")
- .then(($first) => {
- // save text from the first element
- text = normalizeText($first.text());
- });
-
- cy.get(".two-elements")
- .find(".second")
- .should(($div) => {
- // we can massage text before comparing
- const secondText = normalizeText($div.text());
-
- expect(secondText, "second text").to.equal(text);
- });
- });
-
- it("assert - assert shape of an object", () => {
- const person = {
- name: "Joe",
- age: 20
- };
-
- assert.isObject(person, "value is object");
- });
-
- it("retries the should callback until assertions pass", () => {
- cy.get("#random-number").should(($div) => {
- const n = parseFloat($div.text());
-
- expect(n).to.be.gte(1).and.be.lte(10);
- });
- });
- });
-});
diff --git a/client/cypress/e2e/2-advanced-examples/connectors.cy.js b/client/cypress/e2e/2-advanced-examples/connectors.cy.js
deleted file mode 100644
index 3cd60d308..000000000
--- a/client/cypress/e2e/2-advanced-examples/connectors.cy.js
+++ /dev/null
@@ -1,96 +0,0 @@
-///
-
-context("Connectors", () => {
- beforeEach(() => {
- cy.visit("https://example.cypress.io/commands/connectors");
- });
-
- it(".each() - iterate over an array of elements", () => {
- // https://on.cypress.io/each
- cy.get(".connectors-each-ul>li").each(($el, index, $list) => {
- console.log($el, index, $list);
- });
- });
-
- it(".its() - get properties on the current subject", () => {
- // https://on.cypress.io/its
- cy.get(".connectors-its-ul>li")
- // calls the 'length' property yielding that value
- .its("length")
- .should("be.gt", 2);
- });
-
- it(".invoke() - invoke a function on the current subject", () => {
- // our div is hidden in our script.js
- // $('.connectors-div').hide()
-
- // https://on.cypress.io/invoke
- cy.get(".connectors-div")
- .should("be.hidden")
- // call the jquery method 'show' on the 'div.container'
- .invoke("show")
- .should("be.visible");
- });
-
- it(".spread() - spread an array as individual args to callback function", () => {
- // https://on.cypress.io/spread
- const arr = ["foo", "bar", "baz"];
-
- cy.wrap(arr).spread((foo, bar, baz) => {
- expect(foo).to.eq("foo");
- expect(bar).to.eq("bar");
- expect(baz).to.eq("baz");
- });
- });
-
- describe(".then()", () => {
- it("invokes a callback function with the current subject", () => {
- // https://on.cypress.io/then
- cy.get(".connectors-list > li").then(($lis) => {
- expect($lis, "3 items").to.have.length(3);
- expect($lis.eq(0), "first item").to.contain("Walk the dog");
- expect($lis.eq(1), "second item").to.contain("Feed the cat");
- expect($lis.eq(2), "third item").to.contain("Write JavaScript");
- });
- });
-
- it("yields the returned value to the next command", () => {
- cy.wrap(1)
- .then((num) => {
- expect(num).to.equal(1);
-
- return 2;
- })
- .then((num) => {
- expect(num).to.equal(2);
- });
- });
-
- it("yields the original subject without return", () => {
- cy.wrap(1)
- .then((num) => {
- expect(num).to.equal(1);
- // note that nothing is returned from this callback
- })
- .then((num) => {
- // this callback receives the original unchanged value 1
- expect(num).to.equal(1);
- });
- });
-
- it("yields the value yielded by the last Cypress command inside", () => {
- cy.wrap(1)
- .then((num) => {
- expect(num).to.equal(1);
- // note how we run a Cypress command
- // the result yielded by this Cypress command
- // will be passed to the second ".then"
- cy.wrap(2);
- })
- .then((num) => {
- // this callback receives the value yielded by "cy.wrap(2)"
- expect(num).to.equal(2);
- });
- });
- });
-});
diff --git a/client/cypress/e2e/2-advanced-examples/cookies.cy.js b/client/cypress/e2e/2-advanced-examples/cookies.cy.js
deleted file mode 100644
index 390ee76e2..000000000
--- a/client/cypress/e2e/2-advanced-examples/cookies.cy.js
+++ /dev/null
@@ -1,79 +0,0 @@
-///
-
-context("Cookies", () => {
- beforeEach(() => {
- Cypress.Cookies.debug(true);
-
- cy.visit("https://example.cypress.io/commands/cookies");
-
- // clear cookies again after visiting to remove
- // any 3rd party cookies picked up such as cloudflare
- cy.clearCookies();
- });
-
- it("cy.getCookie() - get a browser cookie", () => {
- // https://on.cypress.io/getcookie
- cy.get("#getCookie .set-a-cookie").click();
-
- // cy.getCookie() yields a cookie object
- cy.getCookie("token").should("have.property", "value", "123ABC");
- });
-
- it("cy.getCookies() - get browser cookies", () => {
- // https://on.cypress.io/getcookies
- cy.getCookies().should("be.empty");
-
- cy.get("#getCookies .set-a-cookie").click();
-
- // cy.getCookies() yields an array of cookies
- cy.getCookies()
- .should("have.length", 1)
- .should((cookies) => {
- // each cookie has these properties
- expect(cookies[0]).to.have.property("name", "token");
- expect(cookies[0]).to.have.property("value", "123ABC");
- expect(cookies[0]).to.have.property("httpOnly", false);
- expect(cookies[0]).to.have.property("secure", false);
- expect(cookies[0]).to.have.property("domain");
- expect(cookies[0]).to.have.property("path");
- });
- });
-
- it("cy.setCookie() - set a browser cookie", () => {
- // https://on.cypress.io/setcookie
- cy.getCookies().should("be.empty");
-
- cy.setCookie("foo", "bar");
-
- // cy.getCookie() yields a cookie object
- cy.getCookie("foo").should("have.property", "value", "bar");
- });
-
- it("cy.clearCookie() - clear a browser cookie", () => {
- // https://on.cypress.io/clearcookie
- cy.getCookie("token").should("be.null");
-
- cy.get("#clearCookie .set-a-cookie").click();
-
- cy.getCookie("token").should("have.property", "value", "123ABC");
-
- // cy.clearCookies() yields null
- cy.clearCookie("token").should("be.null");
-
- cy.getCookie("token").should("be.null");
- });
-
- it("cy.clearCookies() - clear browser cookies", () => {
- // https://on.cypress.io/clearcookies
- cy.getCookies().should("be.empty");
-
- cy.get("#clearCookies .set-a-cookie").click();
-
- cy.getCookies().should("have.length", 1);
-
- // cy.clearCookies() yields null
- cy.clearCookies();
-
- cy.getCookies().should("be.empty");
- });
-});
diff --git a/client/cypress/e2e/2-advanced-examples/cypress_api.cy.js b/client/cypress/e2e/2-advanced-examples/cypress_api.cy.js
deleted file mode 100644
index 1cd9f975e..000000000
--- a/client/cypress/e2e/2-advanced-examples/cypress_api.cy.js
+++ /dev/null
@@ -1,208 +0,0 @@
-///
-
-context("Cypress.Commands", () => {
- beforeEach(() => {
- cy.visit("https://example.cypress.io/cypress-api");
- });
-
- // https://on.cypress.io/custom-commands
-
- it(".add() - create a custom command", () => {
- Cypress.Commands.add(
- "console",
- {
- prevSubject: true
- },
- (subject, method) => {
- // the previous subject is automatically received
- // and the commands arguments are shifted
-
- // allow us to change the console method used
- method = method || "log";
-
- // log the subject to the console
- // @ts-ignore TS7017
- console[method]("The subject is", subject);
-
- // whatever we return becomes the new subject
- // we don't want to change the subject so
- // we return whatever was passed in
- return subject;
- }
- );
-
- // @ts-ignore TS2339
- cy.get("button")
- .console("info")
- .then(($button) => {
- // subject is still $button
- });
- });
-});
-
-context("Cypress.Cookies", () => {
- beforeEach(() => {
- cy.visit("https://example.cypress.io/cypress-api");
- });
-
- // https://on.cypress.io/cookies
- it(".debug() - enable or disable debugging", () => {
- Cypress.Cookies.debug(true);
-
- // Cypress will now log in the console when
- // cookies are set or cleared
- cy.setCookie("fakeCookie", "123ABC");
- cy.clearCookie("fakeCookie");
- cy.setCookie("fakeCookie", "123ABC");
- cy.clearCookie("fakeCookie");
- cy.setCookie("fakeCookie", "123ABC");
- });
-
- it(".preserveOnce() - preserve cookies by key", () => {
- // normally cookies are reset after each test
- cy.getCookie("fakeCookie").should("not.be.ok");
-
- // preserving a cookie will not clear it when
- // the next test starts
- cy.setCookie("lastCookie", "789XYZ");
- Cypress.Cookies.preserveOnce("lastCookie");
- });
-
- it(".defaults() - set defaults for all cookies", () => {
- // now any cookie with the name 'session_id' will
- // not be cleared before each new test runs
- Cypress.Cookies.defaults({
- preserve: "session_id"
- });
- });
-});
-
-context("Cypress.arch", () => {
- beforeEach(() => {
- cy.visit("https://example.cypress.io/cypress-api");
- });
-
- it("Get CPU architecture name of underlying OS", () => {
- // https://on.cypress.io/arch
- expect(Cypress.arch).to.exist;
- });
-});
-
-context("Cypress.config()", () => {
- beforeEach(() => {
- cy.visit("https://example.cypress.io/cypress-api");
- });
-
- it("Get and set configuration options", () => {
- // https://on.cypress.io/config
- let myConfig = Cypress.config();
-
- expect(myConfig).to.have.property("animationDistanceThreshold", 5);
- expect(myConfig).to.have.property("baseUrl", null);
- expect(myConfig).to.have.property("defaultCommandTimeout", 4000);
- expect(myConfig).to.have.property("requestTimeout", 5000);
- expect(myConfig).to.have.property("responseTimeout", 30000);
- expect(myConfig).to.have.property("viewportHeight", 660);
- expect(myConfig).to.have.property("viewportWidth", 1000);
- expect(myConfig).to.have.property("pageLoadTimeout", 60000);
- expect(myConfig).to.have.property("waitForAnimations", true);
-
- expect(Cypress.config("pageLoadTimeout")).to.eq(60000);
-
- // this will change the config for the rest of your tests!
- Cypress.config("pageLoadTimeout", 20000);
-
- expect(Cypress.config("pageLoadTimeout")).to.eq(20000);
-
- Cypress.config("pageLoadTimeout", 60000);
- });
-});
-
-context("Cypress.dom", () => {
- beforeEach(() => {
- cy.visit("https://example.cypress.io/cypress-api");
- });
-
- // https://on.cypress.io/dom
- it(".isHidden() - determine if a DOM element is hidden", () => {
- let hiddenP = Cypress.$(".dom-p p.hidden").get(0);
- let visibleP = Cypress.$(".dom-p p.visible").get(0);
-
- // our first paragraph has css class 'hidden'
- expect(Cypress.dom.isHidden(hiddenP)).to.be.true;
- expect(Cypress.dom.isHidden(visibleP)).to.be.false;
- });
-});
-
-context("Cypress.env()", () => {
- beforeEach(() => {
- cy.visit("https://example.cypress.io/cypress-api");
- });
-
- // We can set environment variables for highly dynamic values
-
- // https://on.cypress.io/environment-variables
- it("Get environment variables", () => {
- // https://on.cypress.io/env
- // set multiple environment variables
- Cypress.env({
- host: "veronica.dev.local",
- api_server: "http://localhost:8888/v1/"
- });
-
- // get environment variable
- expect(Cypress.env("host")).to.eq("veronica.dev.local");
-
- // set environment variable
- Cypress.env("api_server", "http://localhost:8888/v2/");
- expect(Cypress.env("api_server")).to.eq("http://localhost:8888/v2/");
-
- // get all environment variable
- expect(Cypress.env()).to.have.property("host", "veronica.dev.local");
- expect(Cypress.env()).to.have.property("api_server", "http://localhost:8888/v2/");
- });
-});
-
-context("Cypress.log", () => {
- beforeEach(() => {
- cy.visit("https://example.cypress.io/cypress-api");
- });
-
- it("Control what is printed to the Command Log", () => {
- // https://on.cypress.io/cypress-log
- });
-});
-
-context("Cypress.platform", () => {
- beforeEach(() => {
- cy.visit("https://example.cypress.io/cypress-api");
- });
-
- it("Get underlying OS name", () => {
- // https://on.cypress.io/platform
- expect(Cypress.platform).to.be.exist;
- });
-});
-
-context("Cypress.version", () => {
- beforeEach(() => {
- cy.visit("https://example.cypress.io/cypress-api");
- });
-
- it("Get current version of Cypress being run", () => {
- // https://on.cypress.io/version
- expect(Cypress.version).to.be.exist;
- });
-});
-
-context("Cypress.spec", () => {
- beforeEach(() => {
- cy.visit("https://example.cypress.io/cypress-api");
- });
-
- it("Get current spec information", () => {
- // https://on.cypress.io/spec
- // wrap the object so we can inspect it easily by clicking in the command log
- cy.wrap(Cypress.spec).should("include.keys", ["name", "relative", "absolute"]);
- });
-});
diff --git a/client/cypress/e2e/2-advanced-examples/files.cy.js b/client/cypress/e2e/2-advanced-examples/files.cy.js
deleted file mode 100644
index ad1bef656..000000000
--- a/client/cypress/e2e/2-advanced-examples/files.cy.js
+++ /dev/null
@@ -1,86 +0,0 @@
-///
-
-/// JSON fixture file can be loaded directly using
-// the built-in JavaScript bundler
-// @ts-ignore
-const requiredExample = require("../../fixtures/example");
-
-context("Files", () => {
- beforeEach(() => {
- cy.visit("https://example.cypress.io/commands/files");
- });
-
- beforeEach(() => {
- // load example.json fixture file and store
- // in the test context object
- cy.fixture("example.json").as("example");
- });
-
- it("cy.fixture() - load a fixture", () => {
- // https://on.cypress.io/fixture
-
- // Instead of writing a response inline you can
- // use a fixture file's content.
-
- // when application makes an Ajax request matching "GET **/comments/*"
- // Cypress will intercept it and reply with the object in `example.json` fixture
- cy.intercept("GET", "**/comments/*", { fixture: "example.json" }).as("getComment");
-
- // we have code that gets a comment when
- // the button is clicked in scripts.js
- cy.get(".fixture-btn").click();
-
- cy.wait("@getComment")
- .its("response.body")
- .should("have.property", "name")
- .and("include", "Using fixtures to represent data");
- });
-
- it("cy.fixture() or require - load a fixture", function () {
- // we are inside the "function () { ... }"
- // callback and can use test context object "this"
- // "this.example" was loaded in "beforeEach" function callback
- expect(this.example, "fixture in the test context").to.deep.equal(requiredExample);
-
- // or use "cy.wrap" and "should('deep.equal', ...)" assertion
- cy.wrap(this.example).should("deep.equal", requiredExample);
- });
-
- it("cy.readFile() - read file contents", () => {
- // https://on.cypress.io/readfile
-
- // You can read a file and yield its contents
- // The filePath is relative to your project's root.
- cy.readFile("cypress.json").then((json) => {
- expect(json).to.be.an("object");
- });
- });
-
- it("cy.writeFile() - write to a file", () => {
- // https://on.cypress.io/writefile
-
- // You can write to a file
-
- // Use a response from a request to automatically
- // generate a fixture file for use later
- cy.request("https://jsonplaceholder.cypress.io/users").then((response) => {
- cy.writeFile("cypress/fixtures/users.json", response.body);
- });
-
- cy.fixture("users").should((users) => {
- expect(users[0].name).to.exist;
- });
-
- // JavaScript arrays and objects are stringified
- // and formatted into text.
- cy.writeFile("cypress/fixtures/profile.json", {
- id: 8739,
- name: "Jane",
- email: "jane@example.com"
- });
-
- cy.fixture("profile").should((profile) => {
- expect(profile.name).to.eq("Jane");
- });
- });
-});
diff --git a/client/cypress/e2e/2-advanced-examples/local_storage.cy.js b/client/cypress/e2e/2-advanced-examples/local_storage.cy.js
deleted file mode 100644
index 7007d02bf..000000000
--- a/client/cypress/e2e/2-advanced-examples/local_storage.cy.js
+++ /dev/null
@@ -1,58 +0,0 @@
-///
-
-context("Local Storage", () => {
- beforeEach(() => {
- cy.visit("https://example.cypress.io/commands/local-storage");
- });
- // Although local storage is automatically cleared
- // in between tests to maintain a clean state
- // sometimes we need to clear the local storage manually
-
- it("cy.clearLocalStorage() - clear all data in local storage", () => {
- // https://on.cypress.io/clearlocalstorage
- cy.get(".ls-btn")
- .click()
- .should(() => {
- expect(localStorage.getItem("prop1")).to.eq("red");
- expect(localStorage.getItem("prop2")).to.eq("blue");
- expect(localStorage.getItem("prop3")).to.eq("magenta");
- });
-
- // clearLocalStorage() yields the localStorage object
- cy.clearLocalStorage().should((ls) => {
- expect(ls.getItem("prop1")).to.be.null;
- expect(ls.getItem("prop2")).to.be.null;
- expect(ls.getItem("prop3")).to.be.null;
- });
-
- cy.get(".ls-btn")
- .click()
- .should(() => {
- expect(localStorage.getItem("prop1")).to.eq("red");
- expect(localStorage.getItem("prop2")).to.eq("blue");
- expect(localStorage.getItem("prop3")).to.eq("magenta");
- });
-
- // Clear key matching string in Local Storage
- cy.clearLocalStorage("prop1").should((ls) => {
- expect(ls.getItem("prop1")).to.be.null;
- expect(ls.getItem("prop2")).to.eq("blue");
- expect(ls.getItem("prop3")).to.eq("magenta");
- });
-
- cy.get(".ls-btn")
- .click()
- .should(() => {
- expect(localStorage.getItem("prop1")).to.eq("red");
- expect(localStorage.getItem("prop2")).to.eq("blue");
- expect(localStorage.getItem("prop3")).to.eq("magenta");
- });
-
- // Clear keys matching regex in Local Storage
- cy.clearLocalStorage(/prop1|2/).should((ls) => {
- expect(ls.getItem("prop1")).to.be.null;
- expect(ls.getItem("prop2")).to.be.null;
- expect(ls.getItem("prop3")).to.eq("magenta");
- });
- });
-});
diff --git a/client/cypress/e2e/2-advanced-examples/location.cy.js b/client/cypress/e2e/2-advanced-examples/location.cy.js
deleted file mode 100644
index f5e6230d6..000000000
--- a/client/cypress/e2e/2-advanced-examples/location.cy.js
+++ /dev/null
@@ -1,32 +0,0 @@
-///
-
-context("Location", () => {
- beforeEach(() => {
- cy.visit("https://example.cypress.io/commands/location");
- });
-
- it("cy.hash() - get the current URL hash", () => {
- // https://on.cypress.io/hash
- cy.hash().should("be.empty");
- });
-
- it("cy.location() - get window.location", () => {
- // https://on.cypress.io/location
- cy.location().should((location) => {
- expect(location.hash).to.be.empty;
- expect(location.href).to.eq("https://example.cypress.io/commands/location");
- expect(location.host).to.eq("example.cypress.io");
- expect(location.hostname).to.eq("example.cypress.io");
- expect(location.origin).to.eq("https://example.cypress.io");
- expect(location.pathname).to.eq("/commands/location");
- expect(location.port).to.eq("");
- expect(location.protocol).to.eq("https:");
- expect(location.search).to.be.empty;
- });
- });
-
- it("cy.url() - get the current URL", () => {
- // https://on.cypress.io/url
- cy.url().should("eq", "https://example.cypress.io/commands/location");
- });
-});
diff --git a/client/cypress/e2e/2-advanced-examples/misc.cy.js b/client/cypress/e2e/2-advanced-examples/misc.cy.js
deleted file mode 100644
index 9ef98ae41..000000000
--- a/client/cypress/e2e/2-advanced-examples/misc.cy.js
+++ /dev/null
@@ -1,98 +0,0 @@
-///
-
-context("Misc", () => {
- beforeEach(() => {
- cy.visit("https://example.cypress.io/commands/misc");
- });
-
- it(".end() - end the command chain", () => {
- // https://on.cypress.io/end
-
- // cy.end is useful when you want to end a chain of commands
- // and force Cypress to re-query from the root element
- cy.get(".misc-table").within(() => {
- // ends the current chain and yields null
- cy.contains("Cheryl").click().end();
-
- // queries the entire table again
- cy.contains("Charles").click();
- });
- });
-
- it("cy.exec() - execute a system command", () => {
- // execute a system command.
- // so you can take actions necessary for
- // your test outside the scope of Cypress.
- // https://on.cypress.io/exec
-
- // we can use Cypress.platform string to
- // select appropriate command
- // https://on.cypress/io/platform
- cy.log(`Platform ${Cypress.platform} architecture ${Cypress.arch}`);
-
- // on CircleCI Windows build machines we have a failure to run bash shell
- // https://github.com/cypress-io/cypress/issues/5169
- // so skip some of the tests by passing flag "--env circle=true"
- const isCircleOnWindows = Cypress.platform === "win32" && Cypress.env("circle");
-
- if (isCircleOnWindows) {
- cy.log("Skipping test on CircleCI");
-
- return;
- }
-
- // cy.exec problem on Shippable CI
- // https://github.com/cypress-io/cypress/issues/6718
- const isShippable = Cypress.platform === "linux" && Cypress.env("shippable");
-
- if (isShippable) {
- cy.log("Skipping test on ShippableCI");
-
- return;
- }
-
- cy.exec("echo Jane Lane").its("stdout").should("contain", "Jane Lane");
-
- if (Cypress.platform === "win32") {
- cy.exec("print cypress.json").its("stderr").should("be.empty");
- } else {
- cy.exec("cat cypress.json").its("stderr").should("be.empty");
-
- cy.exec("pwd").its("code").should("eq", 0);
- }
- });
-
- it("cy.focused() - get the DOM element that has focus", () => {
- // https://on.cypress.io/focused
- cy.get(".misc-form").find("#name").click();
- cy.focused().should("have.id", "name");
-
- cy.get(".misc-form").find("#description").click();
- cy.focused().should("have.id", "description");
- });
-
- context("Cypress.Screenshot", function () {
- it("cy.screenshot() - take a screenshot", () => {
- // https://on.cypress.io/screenshot
- cy.screenshot("my-image");
- });
-
- it("Cypress.Screenshot.defaults() - change default config of screenshots", function () {
- Cypress.Screenshot.defaults({
- blackout: [".foo"],
- capture: "viewport",
- clip: { x: 0, y: 0, width: 200, height: 200 },
- scale: false,
- disableTimersAndAnimations: true,
- screenshotOnRunFailure: true,
- onBeforeScreenshot() {},
- onAfterScreenshot() {}
- });
- });
- });
-
- it("cy.wrap() - wrap an object", () => {
- // https://on.cypress.io/wrap
- cy.wrap({ foo: "bar" }).should("have.property", "foo").and("include", "bar");
- });
-});
diff --git a/client/cypress/e2e/2-advanced-examples/navigation.cy.js b/client/cypress/e2e/2-advanced-examples/navigation.cy.js
deleted file mode 100644
index a1993ee36..000000000
--- a/client/cypress/e2e/2-advanced-examples/navigation.cy.js
+++ /dev/null
@@ -1,56 +0,0 @@
-///
-
-context("Navigation", () => {
- beforeEach(() => {
- cy.visit("https://example.cypress.io");
- cy.get(".navbar-nav").contains("Commands").click();
- cy.get(".dropdown-menu").contains("Navigation").click();
- });
-
- it("cy.go() - go back or forward in the browser's history", () => {
- // https://on.cypress.io/go
-
- cy.location("pathname").should("include", "navigation");
-
- cy.go("back");
- cy.location("pathname").should("not.include", "navigation");
-
- cy.go("forward");
- cy.location("pathname").should("include", "navigation");
-
- // clicking back
- cy.go(-1);
- cy.location("pathname").should("not.include", "navigation");
-
- // clicking forward
- cy.go(1);
- cy.location("pathname").should("include", "navigation");
- });
-
- it("cy.reload() - reload the page", () => {
- // https://on.cypress.io/reload
- cy.reload();
-
- // reload the page without using the cache
- cy.reload(true);
- });
-
- it("cy.visit() - visit a remote url", () => {
- // https://on.cypress.io/visit
-
- // Visit any sub-domain of your current domain
-
- // Pass options to the visit
- cy.visit("https://example.cypress.io/commands/navigation", {
- timeout: 50000, // increase total time for the visit to resolve
- onBeforeLoad(contentWindow) {
- // contentWindow is the remote page's window object
- expect(typeof contentWindow === "object").to.be.true;
- },
- onLoad(contentWindow) {
- // contentWindow is the remote page's window object
- expect(typeof contentWindow === "object").to.be.true;
- }
- });
- });
-});
diff --git a/client/cypress/e2e/2-advanced-examples/network_requests.cy.js b/client/cypress/e2e/2-advanced-examples/network_requests.cy.js
deleted file mode 100644
index 693e5395d..000000000
--- a/client/cypress/e2e/2-advanced-examples/network_requests.cy.js
+++ /dev/null
@@ -1,165 +0,0 @@
-///
-
-context("Network Requests", () => {
- beforeEach(() => {
- cy.visit("https://example.cypress.io/commands/network-requests");
- });
-
- // Manage HTTP requests in your app
-
- it("cy.request() - make an XHR request", () => {
- // https://on.cypress.io/request
- cy.request("https://jsonplaceholder.cypress.io/comments").should((response) => {
- expect(response.status).to.eq(200);
- // the server sometimes gets an extra comment posted from another machine
- // which gets returned as 1 extra object
- expect(response.body).to.have.property("length").and.be.oneOf([500, 501]);
- expect(response).to.have.property("headers");
- expect(response).to.have.property("duration");
- });
- });
-
- it("cy.request() - verify response using BDD syntax", () => {
- cy.request("https://jsonplaceholder.cypress.io/comments").then((response) => {
- // https://on.cypress.io/assertions
- expect(response).property("status").to.equal(200);
- expect(response).property("body").to.have.property("length").and.be.oneOf([500, 501]);
- expect(response).to.include.keys("headers", "duration");
- });
- });
-
- it("cy.request() with query parameters", () => {
- // will execute request
- // https://jsonplaceholder.cypress.io/comments?postId=1&id=3
- cy.request({
- url: "https://jsonplaceholder.cypress.io/comments",
- qs: {
- postId: 1,
- id: 3
- }
- })
- .its("body")
- .should("be.an", "array")
- .and("have.length", 1)
- .its("0") // yields first element of the array
- .should("contain", {
- postId: 1,
- id: 3
- });
- });
-
- it("cy.request() - pass result to the second request", () => {
- // first, let's find out the userId of the first user we have
- cy.request("https://jsonplaceholder.cypress.io/users?_limit=1")
- .its("body") // yields the response object
- .its("0") // yields the first element of the returned list
- // the above two commands its('body').its('0')
- // can be written as its('body.0')
- // if you do not care about TypeScript checks
- .then((user) => {
- expect(user).property("id").to.be.a("number");
- // make a new post on behalf of the user
- cy.request("POST", "https://jsonplaceholder.cypress.io/posts", {
- userId: user.id,
- title: "Cypress Test Runner",
- body: "Fast, easy and reliable testing for anything that runs in a browser."
- });
- })
- // note that the value here is the returned value of the 2nd request
- // which is the new post object
- .then((response) => {
- expect(response).property("status").to.equal(201); // new entity created
- expect(response).property("body").to.contain({
- title: "Cypress Test Runner"
- });
-
- // we don't know the exact post id - only that it will be > 100
- // since JSONPlaceholder has built-in 100 posts
- expect(response.body).property("id").to.be.a("number").and.to.be.gt(100);
-
- // we don't know the user id here - since it was in above closure
- // so in this test just confirm that the property is there
- expect(response.body).property("userId").to.be.a("number");
- });
- });
-
- it("cy.request() - save response in the shared test context", () => {
- // https://on.cypress.io/variables-and-aliases
- cy.request("https://jsonplaceholder.cypress.io/users?_limit=1")
- .its("body")
- .its("0") // yields the first element of the returned list
- .as("user") // saves the object in the test context
- .then(function () {
- // NOTE đŸ‘€
- // By the time this callback runs the "as('user')" command
- // has saved the user object in the test context.
- // To access the test context we need to use
- // the "function () { ... }" callback form,
- // otherwise "this" points at a wrong or undefined object!
- cy.request("POST", "https://jsonplaceholder.cypress.io/posts", {
- userId: this.user.id,
- title: "Cypress Test Runner",
- body: "Fast, easy and reliable testing for anything that runs in a browser."
- })
- .its("body")
- .as("post"); // save the new post from the response
- })
- .then(function () {
- // When this callback runs, both "cy.request" API commands have finished
- // and the test context has "user" and "post" objects set.
- // Let's verify them.
- expect(this.post, "post has the right user id").property("userId").to.equal(this.user.id);
- });
- });
-
- it("cy.intercept() - route responses to matching requests", () => {
- // https://on.cypress.io/intercept
-
- let message = "whoa, this comment does not exist";
-
- // Listen to GET to comments/1
- cy.intercept("GET", "**/comments/*").as("getComment");
-
- // we have code that gets a comment when
- // the button is clicked in scripts.js
- cy.get(".network-btn").click();
-
- // https://on.cypress.io/wait
- cy.wait("@getComment").its("response.statusCode").should("be.oneOf", [200, 304]);
-
- // Listen to POST to comments
- cy.intercept("POST", "**/comments").as("postComment");
-
- // we have code that posts a comment when
- // the button is clicked in scripts.js
- cy.get(".network-post").click();
- cy.wait("@postComment").should(({ request, response }) => {
- expect(request.body).to.include("email");
- expect(request.headers).to.have.property("content-type");
- expect(response && response.body).to.have.property("name", "Using POST in cy.intercept()");
- });
-
- // Stub a response to PUT comments/ ****
- cy.intercept(
- {
- method: "PUT",
- url: "**/comments/*"
- },
- {
- statusCode: 404,
- body: { error: message },
- headers: { "access-control-allow-origin": "*" },
- delayMs: 500
- }
- ).as("putComment");
-
- // we have code that puts a comment when
- // the button is clicked in scripts.js
- cy.get(".network-put").click();
-
- cy.wait("@putComment");
-
- // our 404 statusCode logic in scripts.js executed
- cy.get(".network-put-comment").should("contain", message);
- });
-});
diff --git a/client/cypress/e2e/2-advanced-examples/querying.cy.js b/client/cypress/e2e/2-advanced-examples/querying.cy.js
deleted file mode 100644
index 35cf7c24a..000000000
--- a/client/cypress/e2e/2-advanced-examples/querying.cy.js
+++ /dev/null
@@ -1,100 +0,0 @@
-///
-
-context("Querying", () => {
- beforeEach(() => {
- cy.visit("https://example.cypress.io/commands/querying");
- });
-
- // The most commonly used query is 'cy.get()', you can
- // think of this like the '$' in jQuery
-
- it("cy.get() - query DOM elements", () => {
- // https://on.cypress.io/get
-
- cy.get("#query-btn").should("contain", "Button");
-
- cy.get(".query-btn").should("contain", "Button");
-
- cy.get("#querying .well>button:first").should("contain", "Button");
- // ↲
- // Use CSS selectors just like jQuery
-
- cy.get('[data-test-id="test-example"]').should("have.class", "example");
-
- // 'cy.get()' yields jQuery object, you can get its attribute
- // by invoking `.attr()` method
- cy.get('[data-test-id="test-example"]').invoke("attr", "data-test-id").should("equal", "test-example");
-
- // or you can get element's CSS property
- cy.get('[data-test-id="test-example"]').invoke("css", "position").should("equal", "static");
-
- // or use assertions directly during 'cy.get()'
- // https://on.cypress.io/assertions
- cy.get('[data-test-id="test-example"]')
- .should("have.attr", "data-test-id", "test-example")
- .and("have.css", "position", "static");
- });
-
- it("cy.contains() - query DOM elements with matching content", () => {
- // https://on.cypress.io/contains
- cy.get(".query-list").contains("bananas").should("have.class", "third");
-
- // we can pass a regexp to `.contains()`
- cy.get(".query-list").contains(/^b\w+/).should("have.class", "third");
-
- cy.get(".query-list").contains("apples").should("have.class", "first");
-
- // passing a selector to contains will
- // yield the selector containing the text
- cy.get("#querying").contains("ul", "oranges").should("have.class", "query-list");
-
- cy.get(".query-button").contains("Save Form").should("have.class", "btn");
- });
-
- it(".within() - query DOM elements within a specific element", () => {
- // https://on.cypress.io/within
- cy.get(".query-form").within(() => {
- cy.get("input:first").should("have.attr", "placeholder", "Email");
- cy.get("input:last").should("have.attr", "placeholder", "Password");
- });
- });
-
- it("cy.root() - query the root DOM element", () => {
- // https://on.cypress.io/root
-
- // By default, root is the document
- cy.root().should("match", "html");
-
- cy.get(".query-ul").within(() => {
- // In this within, the root is now the ul DOM element
- cy.root().should("have.class", "query-ul");
- });
- });
-
- it("best practices - selecting elements", () => {
- // https://on.cypress.io/best-practices#Selecting-Elements
- cy.get("[data-cy=best-practices-selecting-elements]").within(() => {
- // Worst - too generic, no context
- cy.get("button").click();
-
- // Bad. Coupled to styling. Highly subject to change.
- cy.get(".btn.btn-large").click();
-
- // Average. Coupled to the `name` attribute which has HTML semantics.
- cy.get("[name=submission]").click();
-
- // Better. But still coupled to styling or JS event listeners.
- cy.get("#main").click();
-
- // Slightly better. Uses an ID but also ensures the element
- // has an ARIA role attribute
- cy.get("#main[role=button]").click();
-
- // Much better. But still coupled to text content that may change.
- cy.contains("Submit").click();
-
- // Best. Insulated from all changes.
- cy.get("[data-cy=submit]").click();
- });
- });
-});
diff --git a/client/cypress/e2e/2-advanced-examples/spies_stubs_clocks.cy.js b/client/cypress/e2e/2-advanced-examples/spies_stubs_clocks.cy.js
deleted file mode 100644
index 7c86af8fa..000000000
--- a/client/cypress/e2e/2-advanced-examples/spies_stubs_clocks.cy.js
+++ /dev/null
@@ -1,203 +0,0 @@
-///
-// remove no check once Cypress.sinon is typed
-// https://github.com/cypress-io/cypress/issues/6720
-
-context("Spies, Stubs, and Clock", () => {
- it("cy.spy() - wrap a method in a spy", () => {
- // https://on.cypress.io/spy
- cy.visit("https://example.cypress.io/commands/spies-stubs-clocks");
-
- const obj = {
- foo() {}
- };
-
- const spy = cy.spy(obj, "foo").as("anyArgs");
-
- obj.foo();
-
- expect(spy).to.be.called;
- });
-
- it("cy.spy() retries until assertions pass", () => {
- cy.visit("https://example.cypress.io/commands/spies-stubs-clocks");
-
- const obj = {
- /**
- * Prints the argument passed
- * @param x {any}
- */
- foo(x) {
- console.log("obj.foo called with", x);
- }
- };
-
- cy.spy(obj, "foo").as("foo");
-
- setTimeout(() => {
- obj.foo("first");
- }, 500);
-
- setTimeout(() => {
- obj.foo("second");
- }, 2500);
-
- cy.get("@foo").should("have.been.calledTwice");
- });
-
- it("cy.stub() - create a stub and/or replace a function with stub", () => {
- // https://on.cypress.io/stub
- cy.visit("https://example.cypress.io/commands/spies-stubs-clocks");
-
- const obj = {
- /**
- * prints both arguments to the console
- * @param a {string}
- * @param b {string}
- */
- foo(a, b) {
- console.log("a", a, "b", b);
- }
- };
-
- const stub = cy.stub(obj, "foo").as("foo");
-
- obj.foo("foo", "bar");
-
- expect(stub).to.be.called;
- });
-
- it("cy.clock() - control time in the browser", () => {
- // https://on.cypress.io/clock
-
- // create the date in UTC so its always the same
- // no matter what local timezone the browser is running in
- const now = new Date(Date.UTC(2017, 2, 14)).getTime();
-
- cy.clock(now);
- cy.visit("https://example.cypress.io/commands/spies-stubs-clocks");
- cy.get("#clock-div").click().should("have.text", "1489449600");
- });
-
- it("cy.tick() - move time in the browser", () => {
- // https://on.cypress.io/tick
-
- // create the date in UTC so its always the same
- // no matter what local timezone the browser is running in
- const now = new Date(Date.UTC(2017, 2, 14)).getTime();
-
- cy.clock(now);
- cy.visit("https://example.cypress.io/commands/spies-stubs-clocks");
- cy.get("#tick-div").click().should("have.text", "1489449600");
-
- cy.tick(10000); // 10 seconds passed
- cy.get("#tick-div").click().should("have.text", "1489449610");
- });
-
- it("cy.stub() matches depending on arguments", () => {
- // see all possible matchers at
- // https://sinonjs.org/releases/latest/matchers/
- const greeter = {
- /**
- * Greets a person
- * @param {string} name
- */
- greet(name) {
- return `Hello, ${name}!`;
- }
- };
-
- cy.stub(greeter, "greet")
- .callThrough() // if you want non-matched calls to call the real method
- .withArgs(Cypress.sinon.match.string)
- .returns("Hi")
- .withArgs(Cypress.sinon.match.number)
- .throws(new Error("Invalid name"));
-
- expect(greeter.greet("World")).to.equal("Hi");
- // @ts-ignore
- expect(() => greeter.greet(42)).to.throw("Invalid name");
- expect(greeter.greet).to.have.been.calledTwice;
-
- // non-matched calls goes the actual method
- // @ts-ignore
- expect(greeter.greet()).to.equal("Hello, undefined!");
- });
-
- it("matches call arguments using Sinon matchers", () => {
- // see all possible matchers at
- // https://sinonjs.org/releases/latest/matchers/
- const calculator = {
- /**
- * returns the sum of two arguments
- * @param a {number}
- * @param b {number}
- */
- add(a, b) {
- return a + b;
- }
- };
-
- const spy = cy.spy(calculator, "add").as("add");
-
- expect(calculator.add(2, 3)).to.equal(5);
-
- // if we want to assert the exact values used during the call
- expect(spy).to.be.calledWith(2, 3);
-
- // let's confirm "add" method was called with two numbers
- expect(spy).to.be.calledWith(Cypress.sinon.match.number, Cypress.sinon.match.number);
-
- // alternatively, provide the value to match
- expect(spy).to.be.calledWith(Cypress.sinon.match(2), Cypress.sinon.match(3));
-
- // match any value
- expect(spy).to.be.calledWith(Cypress.sinon.match.any, 3);
-
- // match any value from a list
- expect(spy).to.be.calledWith(Cypress.sinon.match.in([1, 2, 3]), 3);
-
- /**
- * Returns true if the given number is event
- * @param {number} x
- */
- const isEven = (x) => x % 2 === 0;
-
- // expect the value to pass a custom predicate function
- // the second argument to "sinon.match(predicate, message)" is
- // shown if the predicate does not pass and assertion fails
- expect(spy).to.be.calledWith(Cypress.sinon.match(isEven, "isEven"), 3);
-
- /**
- * Returns a function that checks if a given number is larger than the limit
- * @param {number} limit
- * @returns {(x: number) => boolean}
- */
- const isGreaterThan = (limit) => (x) => x > limit;
-
- /**
- * Returns a function that checks if a given number is less than the limit
- * @param {number} limit
- * @returns {(x: number) => boolean}
- */
- const isLessThan = (limit) => (x) => x < limit;
-
- // you can combine several matchers using "and", "or"
- expect(spy).to.be.calledWith(
- Cypress.sinon.match.number,
- Cypress.sinon.match(isGreaterThan(2), "> 2").and(Cypress.sinon.match(isLessThan(4), "< 4"))
- );
-
- expect(spy).to.be.calledWith(
- Cypress.sinon.match.number,
- Cypress.sinon.match(isGreaterThan(200), "> 200").or(Cypress.sinon.match(3))
- );
-
- // matchers can be used from BDD assertions
- cy.get("@add").should("have.been.calledWith", Cypress.sinon.match.number, Cypress.sinon.match(3));
-
- // you can alias matchers for shorter test code
- const { match: M } = Cypress.sinon;
-
- cy.get("@add").should("have.been.calledWith", M.number, M(3));
- });
-});
diff --git a/client/cypress/e2e/2-advanced-examples/traversal.cy.js b/client/cypress/e2e/2-advanced-examples/traversal.cy.js
deleted file mode 100644
index e6b56fde1..000000000
--- a/client/cypress/e2e/2-advanced-examples/traversal.cy.js
+++ /dev/null
@@ -1,97 +0,0 @@
-///
-
-context("Traversal", () => {
- beforeEach(() => {
- cy.visit("https://example.cypress.io/commands/traversal");
- });
-
- it(".children() - get child DOM elements", () => {
- // https://on.cypress.io/children
- cy.get(".traversal-breadcrumb").children(".active").should("contain", "Data");
- });
-
- it(".closest() - get closest ancestor DOM element", () => {
- // https://on.cypress.io/closest
- cy.get(".traversal-badge").closest("ul").should("have.class", "list-group");
- });
-
- it(".eq() - get a DOM element at a specific index", () => {
- // https://on.cypress.io/eq
- cy.get(".traversal-list>li").eq(1).should("contain", "siamese");
- });
-
- it(".filter() - get DOM elements that match the selector", () => {
- // https://on.cypress.io/filter
- cy.get(".traversal-nav>li").filter(".active").should("contain", "About");
- });
-
- it(".find() - get descendant DOM elements of the selector", () => {
- // https://on.cypress.io/find
- cy.get(".traversal-pagination").find("li").find("a").should("have.length", 7);
- });
-
- it(".first() - get first DOM element", () => {
- // https://on.cypress.io/first
- cy.get(".traversal-table td").first().should("contain", "1");
- });
-
- it(".last() - get last DOM element", () => {
- // https://on.cypress.io/last
- cy.get(".traversal-buttons .btn").last().should("contain", "Submit");
- });
-
- it(".next() - get next sibling DOM element", () => {
- // https://on.cypress.io/next
- cy.get(".traversal-ul").contains("apples").next().should("contain", "oranges");
- });
-
- it(".nextAll() - get all next sibling DOM elements", () => {
- // https://on.cypress.io/nextall
- cy.get(".traversal-next-all").contains("oranges").nextAll().should("have.length", 3);
- });
-
- it(".nextUntil() - get next sibling DOM elements until next el", () => {
- // https://on.cypress.io/nextuntil
- cy.get("#veggies").nextUntil("#nuts").should("have.length", 3);
- });
-
- it(".not() - remove DOM elements from set of DOM elements", () => {
- // https://on.cypress.io/not
- cy.get(".traversal-disabled .btn").not("[disabled]").should("not.contain", "Disabled");
- });
-
- it(".parent() - get parent DOM element from DOM elements", () => {
- // https://on.cypress.io/parent
- cy.get(".traversal-mark").parent().should("contain", "Morbi leo risus");
- });
-
- it(".parents() - get parent DOM elements from DOM elements", () => {
- // https://on.cypress.io/parents
- cy.get(".traversal-cite").parents().should("match", "blockquote");
- });
-
- it(".parentsUntil() - get parent DOM elements from DOM elements until el", () => {
- // https://on.cypress.io/parentsuntil
- cy.get(".clothes-nav").find(".active").parentsUntil(".clothes-nav").should("have.length", 2);
- });
-
- it(".prev() - get previous sibling DOM element", () => {
- // https://on.cypress.io/prev
- cy.get(".birds").find(".active").prev().should("contain", "Lorikeets");
- });
-
- it(".prevAll() - get all previous sibling DOM elements", () => {
- // https://on.cypress.io/prevall
- cy.get(".fruits-list").find(".third").prevAll().should("have.length", 2);
- });
-
- it(".prevUntil() - get all previous sibling DOM elements until el", () => {
- // https://on.cypress.io/prevuntil
- cy.get(".foods-list").find("#nuts").prevUntil("#veggies").should("have.length", 3);
- });
-
- it(".siblings() - get all sibling DOM elements", () => {
- // https://on.cypress.io/siblings
- cy.get(".traversal-pills .active").siblings().should("have.length", 2);
- });
-});
diff --git a/client/cypress/e2e/2-advanced-examples/utilities.cy.js b/client/cypress/e2e/2-advanced-examples/utilities.cy.js
deleted file mode 100644
index c0c9e8196..000000000
--- a/client/cypress/e2e/2-advanced-examples/utilities.cy.js
+++ /dev/null
@@ -1,108 +0,0 @@
-///
-
-context("Utilities", () => {
- beforeEach(() => {
- cy.visit("https://example.cypress.io/utilities");
- });
-
- it("Cypress._ - call a lodash method", () => {
- // https://on.cypress.io/_
- cy.request("https://jsonplaceholder.cypress.io/users").then((response) => {
- let ids = Cypress._.chain(response.body).map("id").take(3).value();
-
- expect(ids).to.deep.eq([1, 2, 3]);
- });
- });
-
- it("Cypress.$ - call a jQuery method", () => {
- // https://on.cypress.io/$
- let $li = Cypress.$(".utility-jquery li:first");
-
- cy.wrap($li).should("not.have.class", "active").click().should("have.class", "active");
- });
-
- it("Cypress.Blob - blob utilities and base64 string conversion", () => {
- // https://on.cypress.io/blob
- cy.get(".utility-blob").then(($div) => {
- // https://github.com/nolanlawson/blob-util#imgSrcToDataURL
- // get the dataUrl string for the javascript-logo
- return Cypress.Blob.imgSrcToDataURL(
- "https://example.cypress.io/assets/img/javascript-logo.png",
- undefined,
- "anonymous"
- ).then((dataUrl) => {
- // create an element and set its src to the dataUrl
- let img = Cypress.$(" ", { src: dataUrl });
-
- // need to explicitly return cy here since we are initially returning
- // the Cypress.Blob.imgSrcToDataURL promise to our test
- // append the image
- $div.append(img);
-
- cy.get(".utility-blob img").click().should("have.attr", "src", dataUrl);
- });
- });
- });
-
- it("Cypress.minimatch - test out glob patterns against strings", () => {
- // https://on.cypress.io/minimatch
- let matching = Cypress.minimatch("/users/1/comments", "/users/*/comments", {
- matchBase: true
- });
-
- expect(matching, "matching wildcard").to.be.true;
-
- matching = Cypress.minimatch("/users/1/comments/2", "/users/*/comments", {
- matchBase: true
- });
-
- expect(matching, "comments").to.be.false;
-
- // ** matches against all downstream path segments
- matching = Cypress.minimatch("/foo/bar/baz/123/quux?a=b&c=2", "/foo/**", {
- matchBase: true
- });
-
- expect(matching, "comments").to.be.true;
-
- // whereas * matches only the next path segment
-
- matching = Cypress.minimatch("/foo/bar/baz/123/quux?a=b&c=2", "/foo/*", {
- matchBase: false
- });
-
- expect(matching, "comments").to.be.false;
- });
-
- it("Cypress.Promise - instantiate a bluebird promise", () => {
- // https://on.cypress.io/promise
- let waited = false;
-
- /**
- * @return Bluebird
- */
- function waitOneSecond() {
- // return a promise that resolves after 1 second
- // @ts-ignore TS2351 (new Cypress.Promise)
- return new Cypress.Promise((resolve, reject) => {
- setTimeout(() => {
- // set waited to true
- waited = true;
-
- // resolve with 'foo' string
- resolve("foo");
- }, 1000);
- });
- }
-
- cy.then(() => {
- // return a promise to cy.then() that
- // is awaited until it resolves
- // @ts-ignore TS7006
- return waitOneSecond().then((str) => {
- expect(str).to.eq("foo");
- expect(waited).to.be.true;
- });
- });
- });
-});
diff --git a/client/cypress/e2e/2-advanced-examples/viewport.cy.js b/client/cypress/e2e/2-advanced-examples/viewport.cy.js
deleted file mode 100644
index 1d73b915d..000000000
--- a/client/cypress/e2e/2-advanced-examples/viewport.cy.js
+++ /dev/null
@@ -1,59 +0,0 @@
-///
-
-context("Viewport", () => {
- beforeEach(() => {
- cy.visit("https://example.cypress.io/commands/viewport");
- });
-
- it("cy.viewport() - set the viewport size and dimension", () => {
- // https://on.cypress.io/viewport
-
- cy.get("#navbar").should("be.visible");
- cy.viewport(320, 480);
-
- // the navbar should have collapse since our screen is smaller
- cy.get("#navbar").should("not.be.visible");
- cy.get(".navbar-toggle").should("be.visible").click();
- cy.get(".nav").find("a").should("be.visible");
-
- // lets see what our app looks like on a super large screen
- cy.viewport(2999, 2999);
-
- // cy.viewport() accepts a set of preset sizes
- // to easily set the screen to a device's width and height
-
- // We added a cy.wait() between each viewport change so you can see
- // the change otherwise it is a little too fast to see :)
-
- cy.viewport("macbook-15");
- cy.wait(200);
- cy.viewport("macbook-13");
- cy.wait(200);
- cy.viewport("macbook-11");
- cy.wait(200);
- cy.viewport("ipad-2");
- cy.wait(200);
- cy.viewport("ipad-mini");
- cy.wait(200);
- cy.viewport("iphone-6+");
- cy.wait(200);
- cy.viewport("iphone-6");
- cy.wait(200);
- cy.viewport("iphone-5");
- cy.wait(200);
- cy.viewport("iphone-4");
- cy.wait(200);
- cy.viewport("iphone-3");
- cy.wait(200);
-
- // cy.viewport() accepts an orientation for all presets
- // the default orientation is 'portrait'
- cy.viewport("ipad-2", "portrait");
- cy.wait(200);
- cy.viewport("iphone-4", "landscape");
- cy.wait(200);
-
- // The viewport will be reset back to the default dimensions
- // in between tests (the default can be set in cypress.json)
- });
-});
diff --git a/client/cypress/e2e/2-advanced-examples/waiting.cy.js b/client/cypress/e2e/2-advanced-examples/waiting.cy.js
deleted file mode 100644
index 49915ae75..000000000
--- a/client/cypress/e2e/2-advanced-examples/waiting.cy.js
+++ /dev/null
@@ -1,31 +0,0 @@
-///
-
-context("Waiting", () => {
- beforeEach(() => {
- cy.visit("https://example.cypress.io/commands/waiting");
- });
- // BE CAREFUL of adding unnecessary wait times.
- // https://on.cypress.io/best-practices#Unnecessary-Waiting
-
- // https://on.cypress.io/wait
- it("cy.wait() - wait for a specific amount of time", () => {
- cy.get(".wait-input1").type("Wait 1000ms after typing");
- cy.wait(1000);
- cy.get(".wait-input2").type("Wait 1000ms after typing");
- cy.wait(1000);
- cy.get(".wait-input3").type("Wait 1000ms after typing");
- cy.wait(1000);
- });
-
- it("cy.wait() - wait for a specific route", () => {
- // Listen to GET to comments/1
- cy.intercept("GET", "**/comments/*").as("getComment");
-
- // we have code that gets a comment when
- // the button is clicked in scripts.js
- cy.get(".network-btn").click();
-
- // wait for GET comments/1
- cy.wait("@getComment").its("response.statusCode").should("be.oneOf", [200, 304]);
- });
-});
diff --git a/client/cypress/e2e/2-advanced-examples/window.cy.js b/client/cypress/e2e/2-advanced-examples/window.cy.js
deleted file mode 100644
index 9740ba049..000000000
--- a/client/cypress/e2e/2-advanced-examples/window.cy.js
+++ /dev/null
@@ -1,22 +0,0 @@
-///
-
-context("Window", () => {
- beforeEach(() => {
- cy.visit("https://example.cypress.io/commands/window");
- });
-
- it("cy.window() - get the global window object", () => {
- // https://on.cypress.io/window
- cy.window().should("have.property", "top");
- });
-
- it("cy.document() - get the document object", () => {
- // https://on.cypress.io/document
- cy.document().should("have.property", "charset").and("eq", "UTF-8");
- });
-
- it("cy.title() - get the title", () => {
- // https://on.cypress.io/title
- cy.title().should("include", "Kitchen Sink");
- });
-});
diff --git a/client/cypress/fixtures/example.json b/client/cypress/fixtures/example.json
deleted file mode 100644
index 02e425437..000000000
--- a/client/cypress/fixtures/example.json
+++ /dev/null
@@ -1,5 +0,0 @@
-{
- "name": "Using fixtures to represent data",
- "email": "hello@cypress.io",
- "body": "Fixtures are a great way to mock data for responses to routes"
-}
diff --git a/client/cypress/fixtures/profile.json b/client/cypress/fixtures/profile.json
deleted file mode 100644
index a95e88f9c..000000000
--- a/client/cypress/fixtures/profile.json
+++ /dev/null
@@ -1,5 +0,0 @@
-{
- "id": 8739,
- "name": "Jane",
- "email": "jane@example.com"
-}
diff --git a/client/cypress/fixtures/users.json b/client/cypress/fixtures/users.json
deleted file mode 100644
index fe51488c7..000000000
--- a/client/cypress/fixtures/users.json
+++ /dev/null
@@ -1 +0,0 @@
-[]
diff --git a/client/cypress/plugins/index.js b/client/cypress/plugins/index.js
deleted file mode 100644
index e03c48d6e..000000000
--- a/client/cypress/plugins/index.js
+++ /dev/null
@@ -1,22 +0,0 @@
-///
-// ***********************************************************
-// This example plugins/index.jsx can be used to load plugins
-//
-// You can change the location of this file or turn off loading
-// the plugins file with the 'pluginsFile' configuration option.
-//
-// You can read more here:
-// https://on.cypress.io/plugins-guide
-// ***********************************************************
-
-// This function is called when a project is opened or re-opened (e.g. due to
-// the project's config changing)
-
-/**
- * @type {Cypress.PluginConfig}
- */
-// eslint-disable-next-line no-unused-vars
-module.exports = (on, config) => {
- // `on` is used to hook into various events Cypress emits
- // `config` is the resolved Cypress config
-};
diff --git a/client/cypress/support/commands.js b/client/cypress/support/commands.js
deleted file mode 100644
index 81f195804..000000000
--- a/client/cypress/support/commands.js
+++ /dev/null
@@ -1,27 +0,0 @@
-// ***********************************************
-// This example commands.js shows you how to
-// create various custom commands and overwrite
-// existing commands.
-//
-// For more comprehensive examples of custom
-// commands please read more here:
-// https://on.cypress.io/custom-commands
-// ***********************************************
-//
-//
-// -- This is a parent command --
-// Cypress.Commands.add('login', (email, password) => { ... })
-//
-//
-// -- This is a child command --
-// Cypress.Commands.add('drag', { prevSubject: 'element'}, (subject, options) => { ... })
-//
-//
-// -- This is a dual command --
-// Cypress.Commands.add('dismiss', { prevSubject: 'optional'}, (subject, options) => { ... })
-//
-//
-// -- This will overwrite an existing command --
-// Cypress.Commands.overwrite('visit', (originalFn, url, options) => { ... })
-
-import "@testing-library/cypress/add-commands";
diff --git a/client/cypress/support/e2e.js b/client/cypress/support/e2e.js
deleted file mode 100644
index e328a179b..000000000
--- a/client/cypress/support/e2e.js
+++ /dev/null
@@ -1,20 +0,0 @@
-// ***********************************************************
-// This example support/index.jsx is processed and
-// loaded automatically before your test files.
-//
-// This is a great place to put global configuration and
-// behavior that modifies Cypress.
-//
-// You can change the location of this file or turn off
-// automatically serving support files with the
-// 'supportFile' configuration option.
-//
-// You can read more here:
-// https://on.cypress.io/configuration
-// ***********************************************************
-
-// Import commands.js using ES2015 syntax:
-import "./commands";
-
-// Alternatively you can use CommonJS syntax:
-// require('./commands')
diff --git a/client/cypress/tsconfig.json b/client/cypress/tsconfig.json
deleted file mode 100644
index 36de33dee..000000000
--- a/client/cypress/tsconfig.json
+++ /dev/null
@@ -1,8 +0,0 @@
-{
- "compilerOptions": {
- "allowJs": true,
- "baseUrl": "../node_modules",
- "types": ["cypress"]
- },
- "include": ["**/*.*"]
-}
diff --git a/client/package-lock.json b/client/package-lock.json
index fbd87949f..66e922267 100644
--- a/client/package-lock.json
+++ b/client/package-lock.json
@@ -10,22 +10,27 @@
"hasInstallScript": true,
"dependencies": {
"@ant-design/pro-layout": "^7.22.3",
- "@apollo/client": "^3.13.1",
+ "@apollo/client": "^3.13.5",
"@emotion/is-prop-valid": "^1.3.1",
"@fingerprintjs/fingerprintjs": "^4.6.1",
+ "@firebase/analytics": "^0.10.12",
+ "@firebase/app": "^0.11.3",
+ "@firebase/auth": "^1.9.1",
+ "@firebase/firestore": "^4.7.10",
+ "@firebase/messaging": "^0.12.17",
"@jsreport/browser-client": "^3.1.0",
- "@reduxjs/toolkit": "^2.6.0",
- "@sentry/cli": "^2.42.2",
- "@sentry/react": "^9.3.0",
+ "@reduxjs/toolkit": "^2.6.1",
+ "@sentry/cli": "^2.42.4",
+ "@sentry/react": "^9.9.0",
"@sentry/vite-plugin": "^3.2.2",
- "@splitsoftware/splitio-react": "^1.13.0",
+ "@splitsoftware/splitio-react": "^2.0.1",
"@tanem/react-nprogress": "^5.0.53",
"@vitejs/plugin-react": "^4.3.4",
- "antd": "^5.24.2",
+ "antd": "^5.24.5",
"apollo-link-logger": "^2.0.1",
- "apollo-link-sentry": "^4.1.0",
+ "apollo-link-sentry": "^4.2.0",
"autosize": "^6.0.1",
- "axios": "^1.8.1",
+ "axios": "^1.8.4",
"classnames": "^2.5.1",
"css-box-model": "^1.2.1",
"dayjs": "^1.11.13",
@@ -34,14 +39,13 @@
"dotenv": "^16.4.7",
"env-cmd": "^10.1.0",
"exifr": "^7.1.3",
- "firebase": "^10.13.2",
"graphql": "^16.10.0",
- "i18next": "^23.15.1",
+ "i18next": "^24.2.3",
"i18next-browser-languagedetector": "^8.0.4",
"immutability-helper": "^3.1.1",
- "libphonenumber-js": "^1.12.4",
- "logrocket": "^8.1.2",
- "markerjs2": "^2.32.3",
+ "libphonenumber-js": "^1.12.6",
+ "logrocket": "^9.0.2",
+ "markerjs2": "^2.32.4",
"memoize-one": "^6.0.0",
"normalize-url": "^8.0.1",
"object-hash": "^3.0.0",
@@ -51,15 +55,15 @@
"react": "^18.3.1",
"react-big-calendar": "^1.18.0",
"react-color": "^2.19.3",
- "react-cookie": "^7.2.2",
+ "react-cookie": "^8.0.1",
"react-dom": "^18.3.1",
"react-drag-listview": "^2.0.0",
"react-grid-gallery": "^1.0.1",
"react-grid-layout": "1.3.4",
- "react-i18next": "^14.1.3",
+ "react-i18next": "^15.4.1",
"react-icons": "^5.5.0",
"react-image-lightbox": "^5.1.4",
- "react-markdown": "^9.0.3",
+ "react-markdown": "^10.1.0",
"react-number-format": "^5.4.3",
"react-popopo": "^2.1.9",
"react-product-fruits": "^2.2.61",
@@ -75,33 +79,28 @@
"redux-saga": "^1.3.0",
"redux-state-sync": "^3.1.4",
"reselect": "^5.1.1",
- "sass": "^1.85.1",
+ "sass": "^1.86.0",
"socket.io-client": "^4.8.1",
- "styled-components": "^6.1.15",
+ "styled-components": "^6.1.16",
"subscriptions-transport-ws": "^0.11.0",
"use-memo-one": "^1.1.3",
- "userpilot": "^1.3.8",
"vite-plugin-ejs": "^1.7.0",
"web-vitals": "^3.5.2"
},
"devDependencies": {
- "@ant-design/icons": "^5.6.1",
+ "@ant-design/icons": "^6.0.0",
"@babel/plugin-proposal-private-property-in-object": "^7.21.11",
"@babel/preset-react": "^7.26.3",
- "@dotenvx/dotenvx": "^1.38.3",
+ "@dotenvx/dotenvx": "^1.39.0",
"@emotion/babel-plugin": "^11.13.5",
"@emotion/react": "^11.14.0",
- "@eslint/js": "^9.21.0",
+ "@eslint/js": "^9.23.0",
"@sentry/webpack-plugin": "^3.2.2",
- "@testing-library/cypress": "^10.0.2",
"browserslist": "^4.24.4",
"browserslist-to-esbuild": "^2.1.1",
"chalk": "^5.4.1",
- "cross-env": "^7.0.3",
- "cypress": "^13.17.0",
"eslint": "^8.57.1",
"eslint-config-react-app": "^7.0.1",
- "eslint-plugin-cypress": "^2.15.1",
"eslint-plugin-react": "^7.37.4",
"globals": "^15.15.0",
"memfs": "^4.17.0",
@@ -109,16 +108,16 @@
"react-error-overlay": "^6.1.0",
"redux-logger": "^3.0.6",
"source-map-explorer": "^2.5.3",
- "vite": "^6.2.0",
+ "vite": "^6.2.3",
"vite-plugin-babel": "^1.3.0",
"vite-plugin-eslint": "^1.8.1",
"vite-plugin-node-polyfills": "^0.23.0",
- "vite-plugin-pwa": "^0.21.1",
+ "vite-plugin-pwa": "^0.21.2",
"vite-plugin-style-import": "^2.0.0",
"workbox-window": "^7.3.0"
},
"engines": {
- "node": ">=18.18.2"
+ "node": ">=22.0.0"
},
"optionalDependencies": {
"@rollup/rollup-linux-x64-gnu": "4.6.1"
@@ -193,16 +192,16 @@
}
},
"node_modules/@ant-design/icons": {
- "version": "5.6.1",
- "resolved": "https://registry.npmjs.org/@ant-design/icons/-/icons-5.6.1.tgz",
- "integrity": "sha512-0/xS39c91WjPAZOWsvi1//zjx6kAp4kxWwctR6kuU6p133w8RU0D2dSCvZC19uQyharg/sAvYxGYWl01BbZZfg==",
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/@ant-design/icons/-/icons-6.0.0.tgz",
+ "integrity": "sha512-o0aCCAlHc1o4CQcapAwWzHeaW2x9F49g7P3IDtvtNXgHowtRWYb7kiubt8sQPFvfVIVU/jLw2hzeSlNt0FU+Uw==",
+ "dev": true,
"license": "MIT",
"dependencies": {
- "@ant-design/colors": "^7.0.0",
+ "@ant-design/colors": "^8.0.0",
"@ant-design/icons-svg": "^4.4.0",
- "@babel/runtime": "^7.24.8",
- "classnames": "^2.2.6",
- "rc-util": "^5.31.1"
+ "@rc-component/util": "^1.2.1",
+ "classnames": "^2.2.6"
},
"engines": {
"node": ">=8"
@@ -218,6 +217,26 @@
"integrity": "sha512-vHbT+zJEVzllwP+CM+ul7reTEfBR0vgxFe7+lREAsAA7YGsYpboiq2sQNeQeRvh09GfQgs/GyFEvZpJ9cLXpXA==",
"license": "MIT"
},
+ "node_modules/@ant-design/icons/node_modules/@ant-design/colors": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/@ant-design/colors/-/colors-8.0.0.tgz",
+ "integrity": "sha512-6YzkKCw30EI/E9kHOIXsQDHmMvTllT8STzjMb4K2qzit33RW2pqCJP0sk+hidBntXxE+Vz4n1+RvCTfBw6OErw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@ant-design/fast-color": "^3.0.0"
+ }
+ },
+ "node_modules/@ant-design/icons/node_modules/@ant-design/fast-color": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/@ant-design/fast-color/-/fast-color-3.0.0.tgz",
+ "integrity": "sha512-eqvpP7xEDm2S7dUzl5srEQCBTXZMmY3ekf97zI+M2DHOYyKdJGH0qua0JACHTqbkRnD/KHFQP9J1uMJ/XWVzzA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8.x"
+ }
+ },
"node_modules/@ant-design/pro-layout": {
"version": "7.22.3",
"resolved": "https://registry.npmjs.org/@ant-design/pro-layout/-/pro-layout-7.22.3.tgz",
@@ -246,6 +265,26 @@
"react-dom": ">=17.0.0"
}
},
+ "node_modules/@ant-design/pro-layout/node_modules/@ant-design/icons": {
+ "version": "5.6.1",
+ "resolved": "https://registry.npmjs.org/@ant-design/icons/-/icons-5.6.1.tgz",
+ "integrity": "sha512-0/xS39c91WjPAZOWsvi1//zjx6kAp4kxWwctR6kuU6p133w8RU0D2dSCvZC19uQyharg/sAvYxGYWl01BbZZfg==",
+ "license": "MIT",
+ "dependencies": {
+ "@ant-design/colors": "^7.0.0",
+ "@ant-design/icons-svg": "^4.4.0",
+ "@babel/runtime": "^7.24.8",
+ "classnames": "^2.2.6",
+ "rc-util": "^5.31.1"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "peerDependencies": {
+ "react": ">=16.0.0",
+ "react-dom": ">=16.0.0"
+ }
+ },
"node_modules/@ant-design/pro-provider": {
"version": "2.15.3",
"resolved": "https://registry.npmjs.org/@ant-design/pro-provider/-/pro-provider-2.15.3.tgz",
@@ -288,6 +327,26 @@
"react-dom": ">=17.0.0"
}
},
+ "node_modules/@ant-design/pro-utils/node_modules/@ant-design/icons": {
+ "version": "5.6.1",
+ "resolved": "https://registry.npmjs.org/@ant-design/icons/-/icons-5.6.1.tgz",
+ "integrity": "sha512-0/xS39c91WjPAZOWsvi1//zjx6kAp4kxWwctR6kuU6p133w8RU0D2dSCvZC19uQyharg/sAvYxGYWl01BbZZfg==",
+ "license": "MIT",
+ "dependencies": {
+ "@ant-design/colors": "^7.0.0",
+ "@ant-design/icons-svg": "^4.4.0",
+ "@babel/runtime": "^7.24.8",
+ "classnames": "^2.2.6",
+ "rc-util": "^5.31.1"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "peerDependencies": {
+ "react": ">=16.0.0",
+ "react-dom": ">=16.0.0"
+ }
+ },
"node_modules/@ant-design/react-slick": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/@ant-design/react-slick/-/react-slick-1.1.2.tgz",
@@ -323,9 +382,9 @@
}
},
"node_modules/@apollo/client": {
- "version": "3.13.1",
- "resolved": "https://registry.npmjs.org/@apollo/client/-/client-3.13.1.tgz",
- "integrity": "sha512-HaAt62h3jNUXpJ1v5HNgUiCzPP1c5zc2Q/FeTb2cTk/v09YlhoqKKHQFJI7St50VCJ5q8JVIc03I5bRcBrQxsg==",
+ "version": "3.13.5",
+ "resolved": "https://registry.npmjs.org/@apollo/client/-/client-3.13.5.tgz",
+ "integrity": "sha512-ceHa1lApLAiGmUur4V+G/CrjwVwHYujfB7U5HM++poCgHpfGn6eet8YGM93fgeWjYX85SaqwdZbQk18IVwhRHg==",
"license": "MIT",
"dependencies": {
"@graphql-typed-document-node/core": "^3.1.1",
@@ -2279,9 +2338,9 @@
}
},
"node_modules/@babel/runtime": {
- "version": "7.26.7",
- "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.26.7.tgz",
- "integrity": "sha512-AOPI3D+a8dXnja+iwsUqGRjr1BbZIe771sXdapOtYI531gSqpi92vXivKcq2asu/DFpdl1ceFAKZyRzK2PCVcQ==",
+ "version": "7.27.0",
+ "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.27.0.tgz",
+ "integrity": "sha512-VtPOkrdPHZsKc/clNqyi9WUA8TINkZ4cGk63UUE3u4pmB2k+ZMQRDuIOagv8UVd6j7k0T3+RRIb7beKTebNbcw==",
"license": "MIT",
"dependencies": {
"regenerator-runtime": "^0.14.0"
@@ -2344,17 +2403,6 @@
"node": ">=6.9.0"
}
},
- "node_modules/@colors/colors": {
- "version": "1.5.0",
- "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz",
- "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==",
- "dev": true,
- "license": "MIT",
- "optional": true,
- "engines": {
- "node": ">=0.1.90"
- }
- },
"node_modules/@ctrl/tinycolor": {
"version": "3.6.1",
"resolved": "https://registry.npmjs.org/@ctrl/tinycolor/-/tinycolor-3.6.1.tgz",
@@ -2364,71 +2412,10 @@
"node": ">=10"
}
},
- "node_modules/@cypress/request": {
- "version": "3.0.7",
- "resolved": "https://registry.npmjs.org/@cypress/request/-/request-3.0.7.tgz",
- "integrity": "sha512-LzxlLEMbBOPYB85uXrDqvD4MgcenjRBLIns3zyhx7vTPj/0u2eQhzXvPiGcaJrV38Q9dbkExWp6cOHPJ+EtFYg==",
- "dev": true,
- "license": "Apache-2.0",
- "dependencies": {
- "aws-sign2": "~0.7.0",
- "aws4": "^1.8.0",
- "caseless": "~0.12.0",
- "combined-stream": "~1.0.6",
- "extend": "~3.0.2",
- "forever-agent": "~0.6.1",
- "form-data": "~4.0.0",
- "http-signature": "~1.4.0",
- "is-typedarray": "~1.0.0",
- "isstream": "~0.1.2",
- "json-stringify-safe": "~5.0.1",
- "mime-types": "~2.1.19",
- "performance-now": "^2.1.0",
- "qs": "6.13.1",
- "safe-buffer": "^5.1.2",
- "tough-cookie": "^5.0.0",
- "tunnel-agent": "^0.6.0",
- "uuid": "^8.3.2"
- },
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/@cypress/request/node_modules/uuid": {
- "version": "8.3.2",
- "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz",
- "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==",
- "dev": true,
- "license": "MIT",
- "bin": {
- "uuid": "dist/bin/uuid"
- }
- },
- "node_modules/@cypress/xvfb": {
- "version": "1.2.4",
- "resolved": "https://registry.npmjs.org/@cypress/xvfb/-/xvfb-1.2.4.tgz",
- "integrity": "sha512-skbBzPggOVYCbnGgV+0dmBdW/s77ZkAOXIC1knS8NagwDjBrNC1LuXtQJeiN6l+m7lzmHtaoUw/ctJKdqkG57Q==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "debug": "^3.1.0",
- "lodash.once": "^4.1.1"
- }
- },
- "node_modules/@cypress/xvfb/node_modules/debug": {
- "version": "3.2.7",
- "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
- "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "ms": "^2.1.1"
- }
- },
"node_modules/@dotenvx/dotenvx": {
- "version": "1.38.3",
- "resolved": "https://registry.npmjs.org/@dotenvx/dotenvx/-/dotenvx-1.38.3.tgz",
- "integrity": "sha512-6tquYDfAiJbgQbYwWfL0jJHiUumY5EiFXVswk9sTwn5lWICMwOPmMOrM9TEVLzesfNMYwDyUiMp5WAA6yXs+SQ==",
+ "version": "1.39.0",
+ "resolved": "https://registry.npmjs.org/@dotenvx/dotenvx/-/dotenvx-1.39.0.tgz",
+ "integrity": "sha512-qGfDpL/3S17MQYXpR3HkBS5xNQ7wiFlqLdpr+iIQzv17aMRcSlgL4EjMIsYFZ540Dq17J+y5FVElA1AkVoXiUA==",
"dev": true,
"license": "BSD-3-Clause",
"dependencies": {
@@ -3159,9 +3146,9 @@
}
},
"node_modules/@eslint/js": {
- "version": "9.21.0",
- "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.21.0.tgz",
- "integrity": "sha512-BqStZ3HX8Yz6LvsF5ByXYrtigrV5AXADWLAGc7PH/1SxOb7/FIYYMszZZWiUou/GB9P2lXWk2SV4d+Z8h0nknw==",
+ "version": "9.23.0",
+ "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.23.0.tgz",
+ "integrity": "sha512-35MJ8vCPU0ZMxo7zfev2pypqTwWTofFZO6m4KAtdoFhRpLJUpHTZZ+KB3C7Hb1d7bULYwO4lJXGCi5Se+8OMbw==",
"dev": true,
"license": "MIT",
"engines": {
@@ -3178,130 +3165,50 @@
}
},
"node_modules/@firebase/analytics": {
- "version": "0.10.8",
- "resolved": "https://registry.npmjs.org/@firebase/analytics/-/analytics-0.10.8.tgz",
- "integrity": "sha512-CVnHcS4iRJPqtIDc411+UmFldk0ShSK3OB+D0bKD8Ck5Vro6dbK5+APZpkuWpbfdL359DIQUnAaMLE+zs/PVyA==",
+ "version": "0.10.12",
+ "resolved": "https://registry.npmjs.org/@firebase/analytics/-/analytics-0.10.12.tgz",
+ "integrity": "sha512-iDCGnw6qdFqwI5ywkgece99WADJNoymu+nLIQI4fZM/vCZ3bEo4wlpEetW71s1HqGpI0hQStiPhqVjFxDb2yyw==",
"license": "Apache-2.0",
"dependencies": {
- "@firebase/component": "0.6.9",
- "@firebase/installations": "0.6.9",
- "@firebase/logger": "0.4.2",
- "@firebase/util": "1.10.0",
+ "@firebase/component": "0.6.13",
+ "@firebase/installations": "0.6.13",
+ "@firebase/logger": "0.4.4",
+ "@firebase/util": "1.11.0",
"tslib": "^2.1.0"
},
"peerDependencies": {
"@firebase/app": "0.x"
}
},
- "node_modules/@firebase/analytics-compat": {
- "version": "0.2.14",
- "resolved": "https://registry.npmjs.org/@firebase/analytics-compat/-/analytics-compat-0.2.14.tgz",
- "integrity": "sha512-unRVY6SvRqfNFIAA/kwl4vK+lvQAL2HVcgu9zTrUtTyYDmtIt/lOuHJynBMYEgLnKm39YKBDhtqdapP2e++ASw==",
- "license": "Apache-2.0",
- "dependencies": {
- "@firebase/analytics": "0.10.8",
- "@firebase/analytics-types": "0.8.2",
- "@firebase/component": "0.6.9",
- "@firebase/util": "1.10.0",
- "tslib": "^2.1.0"
- },
- "peerDependencies": {
- "@firebase/app-compat": "0.x"
- }
- },
- "node_modules/@firebase/analytics-types": {
- "version": "0.8.2",
- "resolved": "https://registry.npmjs.org/@firebase/analytics-types/-/analytics-types-0.8.2.tgz",
- "integrity": "sha512-EnzNNLh+9/sJsimsA/FGqzakmrAUKLeJvjRHlg8df1f97NLUlFidk9600y0ZgWOp3CAxn6Hjtk+08tixlUOWyw==",
- "license": "Apache-2.0"
- },
"node_modules/@firebase/app": {
- "version": "0.10.13",
- "resolved": "https://registry.npmjs.org/@firebase/app/-/app-0.10.13.tgz",
- "integrity": "sha512-OZiDAEK/lDB6xy/XzYAyJJkaDqmQ+BCtOEPLqFvxWKUz5JbBmej7IiiRHdtiIOD/twW7O5AxVsfaaGA/V1bNsA==",
+ "version": "0.11.3",
+ "resolved": "https://registry.npmjs.org/@firebase/app/-/app-0.11.3.tgz",
+ "integrity": "sha512-QlTZl/RcqPSonYxB87n8KgAUW2L6ZZz0W4D91PVmQ1tJPsKsKPrWAFHL0ii2cQW6FxTxfNjbZ7kucuIcKXk3tw==",
"license": "Apache-2.0",
"dependencies": {
- "@firebase/component": "0.6.9",
- "@firebase/logger": "0.4.2",
- "@firebase/util": "1.10.0",
+ "@firebase/component": "0.6.13",
+ "@firebase/logger": "0.4.4",
+ "@firebase/util": "1.11.0",
"idb": "7.1.1",
"tslib": "^2.1.0"
- }
- },
- "node_modules/@firebase/app-check": {
- "version": "0.8.8",
- "resolved": "https://registry.npmjs.org/@firebase/app-check/-/app-check-0.8.8.tgz",
- "integrity": "sha512-O49RGF1xj7k6BuhxGpHmqOW5hqBIAEbt2q6POW0lIywx7emYtzPDeQI+ryQpC4zbKX646SoVZ711TN1DBLNSOQ==",
- "license": "Apache-2.0",
- "dependencies": {
- "@firebase/component": "0.6.9",
- "@firebase/logger": "0.4.2",
- "@firebase/util": "1.10.0",
- "tslib": "^2.1.0"
},
- "peerDependencies": {
- "@firebase/app": "0.x"
+ "engines": {
+ "node": ">=18.0.0"
}
},
- "node_modules/@firebase/app-check-compat": {
- "version": "0.3.15",
- "resolved": "https://registry.npmjs.org/@firebase/app-check-compat/-/app-check-compat-0.3.15.tgz",
- "integrity": "sha512-zFIvIFFNqDXpOT2huorz9cwf56VT3oJYRFjSFYdSbGYEJYEaXjLJbfC79lx/zjx4Fh+yuN8pry3TtvwaevrGbg==",
- "license": "Apache-2.0",
- "dependencies": {
- "@firebase/app-check": "0.8.8",
- "@firebase/app-check-types": "0.5.2",
- "@firebase/component": "0.6.9",
- "@firebase/logger": "0.4.2",
- "@firebase/util": "1.10.0",
- "tslib": "^2.1.0"
- },
- "peerDependencies": {
- "@firebase/app-compat": "0.x"
- }
- },
- "node_modules/@firebase/app-check-interop-types": {
- "version": "0.3.2",
- "resolved": "https://registry.npmjs.org/@firebase/app-check-interop-types/-/app-check-interop-types-0.3.2.tgz",
- "integrity": "sha512-LMs47Vinv2HBMZi49C09dJxp0QT5LwDzFaVGf/+ITHe3BlIhUiLNttkATSXplc89A2lAaeTqjgqVkiRfUGyQiQ==",
- "license": "Apache-2.0"
- },
- "node_modules/@firebase/app-check-types": {
- "version": "0.5.2",
- "resolved": "https://registry.npmjs.org/@firebase/app-check-types/-/app-check-types-0.5.2.tgz",
- "integrity": "sha512-FSOEzTzL5bLUbD2co3Zut46iyPWML6xc4x+78TeaXMSuJap5QObfb+rVvZJtla3asN4RwU7elaQaduP+HFizDA==",
- "license": "Apache-2.0"
- },
- "node_modules/@firebase/app-compat": {
- "version": "0.2.43",
- "resolved": "https://registry.npmjs.org/@firebase/app-compat/-/app-compat-0.2.43.tgz",
- "integrity": "sha512-HM96ZyIblXjAC7TzE8wIk2QhHlSvksYkQ4Ukh1GmEenzkucSNUmUX4QvoKrqeWsLEQ8hdcojABeCV8ybVyZmeg==",
- "license": "Apache-2.0",
- "dependencies": {
- "@firebase/app": "0.10.13",
- "@firebase/component": "0.6.9",
- "@firebase/logger": "0.4.2",
- "@firebase/util": "1.10.0",
- "tslib": "^2.1.0"
- }
- },
- "node_modules/@firebase/app-types": {
- "version": "0.9.2",
- "resolved": "https://registry.npmjs.org/@firebase/app-types/-/app-types-0.9.2.tgz",
- "integrity": "sha512-oMEZ1TDlBz479lmABwWsWjzHwheQKiAgnuKxE0pz0IXCVx7/rtlkx1fQ6GfgK24WCrxDKMplZrT50Kh04iMbXQ==",
- "license": "Apache-2.0"
- },
"node_modules/@firebase/auth": {
- "version": "1.7.9",
- "resolved": "https://registry.npmjs.org/@firebase/auth/-/auth-1.7.9.tgz",
- "integrity": "sha512-yLD5095kVgDw965jepMyUrIgDklD6qH/BZNHeKOgvu7pchOKNjVM+zQoOVYJIKWMWOWBq8IRNVU6NXzBbozaJg==",
+ "version": "1.9.1",
+ "resolved": "https://registry.npmjs.org/@firebase/auth/-/auth-1.9.1.tgz",
+ "integrity": "sha512-9KKo5SNVkyJzftsW+daS+PGDbeJ+MFJWXQFHDqqPPH3acWHtiNnGHH5HGpIJErEELrsm9xMPie5zfZ0XpGU8+w==",
"license": "Apache-2.0",
"dependencies": {
- "@firebase/component": "0.6.9",
- "@firebase/logger": "0.4.2",
- "@firebase/util": "1.10.0",
- "tslib": "^2.1.0",
- "undici": "6.19.7"
+ "@firebase/component": "0.6.13",
+ "@firebase/logger": "0.4.4",
+ "@firebase/util": "1.11.0",
+ "tslib": "^2.1.0"
+ },
+ "engines": {
+ "node": ">=18.0.0"
},
"peerDependencies": {
"@firebase/app": "0.x",
@@ -3313,431 +3220,107 @@
}
}
},
- "node_modules/@firebase/auth-compat": {
- "version": "0.5.14",
- "resolved": "https://registry.npmjs.org/@firebase/auth-compat/-/auth-compat-0.5.14.tgz",
- "integrity": "sha512-2eczCSqBl1KUPJacZlFpQayvpilg3dxXLy9cSMTKtQMTQSmondUtPI47P3ikH3bQAXhzKLOE+qVxJ3/IRtu9pw==",
- "license": "Apache-2.0",
- "dependencies": {
- "@firebase/auth": "1.7.9",
- "@firebase/auth-types": "0.12.2",
- "@firebase/component": "0.6.9",
- "@firebase/util": "1.10.0",
- "tslib": "^2.1.0",
- "undici": "6.19.7"
- },
- "peerDependencies": {
- "@firebase/app-compat": "0.x"
- }
- },
- "node_modules/@firebase/auth-interop-types": {
- "version": "0.2.3",
- "resolved": "https://registry.npmjs.org/@firebase/auth-interop-types/-/auth-interop-types-0.2.3.tgz",
- "integrity": "sha512-Fc9wuJGgxoxQeavybiuwgyi+0rssr76b+nHpj+eGhXFYAdudMWyfBHvFL/I5fEHniUM/UQdFzi9VXJK2iZF7FQ==",
- "license": "Apache-2.0"
- },
- "node_modules/@firebase/auth-types": {
- "version": "0.12.2",
- "resolved": "https://registry.npmjs.org/@firebase/auth-types/-/auth-types-0.12.2.tgz",
- "integrity": "sha512-qsEBaRMoGvHO10unlDJhaKSuPn4pyoTtlQuP1ghZfzB6rNQPuhp/N/DcFZxm9i4v0SogjCbf9reWupwIvfmH6w==",
- "license": "Apache-2.0",
- "peerDependencies": {
- "@firebase/app-types": "0.x",
- "@firebase/util": "1.x"
- }
- },
"node_modules/@firebase/component": {
- "version": "0.6.9",
- "resolved": "https://registry.npmjs.org/@firebase/component/-/component-0.6.9.tgz",
- "integrity": "sha512-gm8EUEJE/fEac86AvHn8Z/QW8BvR56TBw3hMW0O838J/1mThYQXAIQBgUv75EqlCZfdawpWLrKt1uXvp9ciK3Q==",
+ "version": "0.6.13",
+ "resolved": "https://registry.npmjs.org/@firebase/component/-/component-0.6.13.tgz",
+ "integrity": "sha512-I/Eg1NpAtZ8AAfq8mpdfXnuUpcLxIDdCDtTzWSh+FXnp/9eCKJ3SNbOCKrUCyhLzNa2SiPJYruei0sxVjaOTeg==",
"license": "Apache-2.0",
"dependencies": {
- "@firebase/util": "1.10.0",
- "tslib": "^2.1.0"
- }
- },
- "node_modules/@firebase/data-connect": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/@firebase/data-connect/-/data-connect-0.1.0.tgz",
- "integrity": "sha512-vSe5s8dY13ilhLnfY0eYRmQsdTbH7PUFZtBbqU6JVX/j8Qp9A6G5gG6//ulbX9/1JFOF1IWNOne9c8S/DOCJaQ==",
- "license": "Apache-2.0",
- "dependencies": {
- "@firebase/auth-interop-types": "0.2.3",
- "@firebase/component": "0.6.9",
- "@firebase/logger": "0.4.2",
- "@firebase/util": "1.10.0",
+ "@firebase/util": "1.11.0",
"tslib": "^2.1.0"
},
- "peerDependencies": {
- "@firebase/app": "0.x"
- }
- },
- "node_modules/@firebase/database": {
- "version": "1.0.8",
- "resolved": "https://registry.npmjs.org/@firebase/database/-/database-1.0.8.tgz",
- "integrity": "sha512-dzXALZeBI1U5TXt6619cv0+tgEhJiwlUtQ55WNZY7vGAjv7Q1QioV969iYwt1AQQ0ovHnEW0YW9TiBfefLvErg==",
- "license": "Apache-2.0",
- "dependencies": {
- "@firebase/app-check-interop-types": "0.3.2",
- "@firebase/auth-interop-types": "0.2.3",
- "@firebase/component": "0.6.9",
- "@firebase/logger": "0.4.2",
- "@firebase/util": "1.10.0",
- "faye-websocket": "0.11.4",
- "tslib": "^2.1.0"
- }
- },
- "node_modules/@firebase/database-compat": {
- "version": "1.0.8",
- "resolved": "https://registry.npmjs.org/@firebase/database-compat/-/database-compat-1.0.8.tgz",
- "integrity": "sha512-OpeWZoPE3sGIRPBKYnW9wLad25RaWbGyk7fFQe4xnJQKRzlynWeFBSRRAoLE2Old01WXwskUiucNqUUVlFsceg==",
- "license": "Apache-2.0",
- "dependencies": {
- "@firebase/component": "0.6.9",
- "@firebase/database": "1.0.8",
- "@firebase/database-types": "1.0.5",
- "@firebase/logger": "0.4.2",
- "@firebase/util": "1.10.0",
- "tslib": "^2.1.0"
- }
- },
- "node_modules/@firebase/database-types": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/@firebase/database-types/-/database-types-1.0.5.tgz",
- "integrity": "sha512-fTlqCNwFYyq/C6W7AJ5OCuq5CeZuBEsEwptnVxlNPkWCo5cTTyukzAHRSO/jaQcItz33FfYrrFk1SJofcu2AaQ==",
- "license": "Apache-2.0",
- "dependencies": {
- "@firebase/app-types": "0.9.2",
- "@firebase/util": "1.10.0"
+ "engines": {
+ "node": ">=18.0.0"
}
},
"node_modules/@firebase/firestore": {
- "version": "4.7.3",
- "resolved": "https://registry.npmjs.org/@firebase/firestore/-/firestore-4.7.3.tgz",
- "integrity": "sha512-NwVU+JPZ/3bhvNSJMCSzfcBZZg8SUGyzZ2T0EW3/bkUeefCyzMISSt/TTIfEHc8cdyXGlMqfGe3/62u9s74UEg==",
+ "version": "4.7.10",
+ "resolved": "https://registry.npmjs.org/@firebase/firestore/-/firestore-4.7.10.tgz",
+ "integrity": "sha512-6nKsyo2U+jYSCcSE5sjMdDNA23DMUvYPUvsYGg09CNvcTO8GGKsPs7SpOhspsB91mbacq+u627CDAx3FUhPSSQ==",
"license": "Apache-2.0",
"dependencies": {
- "@firebase/component": "0.6.9",
- "@firebase/logger": "0.4.2",
- "@firebase/util": "1.10.0",
- "@firebase/webchannel-wrapper": "1.0.1",
+ "@firebase/component": "0.6.13",
+ "@firebase/logger": "0.4.4",
+ "@firebase/util": "1.11.0",
+ "@firebase/webchannel-wrapper": "1.0.3",
"@grpc/grpc-js": "~1.9.0",
"@grpc/proto-loader": "^0.7.8",
- "tslib": "^2.1.0",
- "undici": "6.19.7"
- },
- "engines": {
- "node": ">=10.10.0"
- },
- "peerDependencies": {
- "@firebase/app": "0.x"
- }
- },
- "node_modules/@firebase/firestore-compat": {
- "version": "0.3.38",
- "resolved": "https://registry.npmjs.org/@firebase/firestore-compat/-/firestore-compat-0.3.38.tgz",
- "integrity": "sha512-GoS0bIMMkjpLni6StSwRJarpu2+S5m346Na7gr9YZ/BZ/W3/8iHGNr9PxC+f0rNZXqS4fGRn88pICjrZEgbkqQ==",
- "license": "Apache-2.0",
- "dependencies": {
- "@firebase/component": "0.6.9",
- "@firebase/firestore": "4.7.3",
- "@firebase/firestore-types": "3.0.2",
- "@firebase/util": "1.10.0",
- "tslib": "^2.1.0"
- },
- "peerDependencies": {
- "@firebase/app-compat": "0.x"
- }
- },
- "node_modules/@firebase/firestore-types": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/@firebase/firestore-types/-/firestore-types-3.0.2.tgz",
- "integrity": "sha512-wp1A+t5rI2Qc/2q7r2ZpjUXkRVPtGMd6zCLsiWurjsQpqPgFin3AhNibKcIzoF2rnToNa/XYtyWXuifjOOwDgg==",
- "license": "Apache-2.0",
- "peerDependencies": {
- "@firebase/app-types": "0.x",
- "@firebase/util": "1.x"
- }
- },
- "node_modules/@firebase/functions": {
- "version": "0.11.8",
- "resolved": "https://registry.npmjs.org/@firebase/functions/-/functions-0.11.8.tgz",
- "integrity": "sha512-Lo2rTPDn96naFIlSZKVd1yvRRqqqwiJk7cf9TZhUerwnPKgBzXy+aHE22ry+6EjCaQusUoNai6mU6p+G8QZT1g==",
- "license": "Apache-2.0",
- "dependencies": {
- "@firebase/app-check-interop-types": "0.3.2",
- "@firebase/auth-interop-types": "0.2.3",
- "@firebase/component": "0.6.9",
- "@firebase/messaging-interop-types": "0.2.2",
- "@firebase/util": "1.10.0",
- "tslib": "^2.1.0",
- "undici": "6.19.7"
- },
- "peerDependencies": {
- "@firebase/app": "0.x"
- }
- },
- "node_modules/@firebase/functions-compat": {
- "version": "0.3.14",
- "resolved": "https://registry.npmjs.org/@firebase/functions-compat/-/functions-compat-0.3.14.tgz",
- "integrity": "sha512-dZ0PKOKQFnOlMfcim39XzaXonSuPPAVuzpqA4ONTIdyaJK/OnBaIEVs/+BH4faa1a2tLeR+Jy15PKqDRQoNIJw==",
- "license": "Apache-2.0",
- "dependencies": {
- "@firebase/component": "0.6.9",
- "@firebase/functions": "0.11.8",
- "@firebase/functions-types": "0.6.2",
- "@firebase/util": "1.10.0",
- "tslib": "^2.1.0"
- },
- "peerDependencies": {
- "@firebase/app-compat": "0.x"
- }
- },
- "node_modules/@firebase/functions-types": {
- "version": "0.6.2",
- "resolved": "https://registry.npmjs.org/@firebase/functions-types/-/functions-types-0.6.2.tgz",
- "integrity": "sha512-0KiJ9lZ28nS2iJJvimpY4nNccV21rkQyor5Iheu/nq8aKXJqtJdeSlZDspjPSBBiHRzo7/GMUttegnsEITqR+w==",
- "license": "Apache-2.0"
- },
- "node_modules/@firebase/installations": {
- "version": "0.6.9",
- "resolved": "https://registry.npmjs.org/@firebase/installations/-/installations-0.6.9.tgz",
- "integrity": "sha512-hlT7AwCiKghOX3XizLxXOsTFiFCQnp/oj86zp1UxwDGmyzsyoxtX+UIZyVyH/oBF5+XtblFG9KZzZQ/h+dpy+Q==",
- "license": "Apache-2.0",
- "dependencies": {
- "@firebase/component": "0.6.9",
- "@firebase/util": "1.10.0",
- "idb": "7.1.1",
- "tslib": "^2.1.0"
- },
- "peerDependencies": {
- "@firebase/app": "0.x"
- }
- },
- "node_modules/@firebase/installations-compat": {
- "version": "0.2.9",
- "resolved": "https://registry.npmjs.org/@firebase/installations-compat/-/installations-compat-0.2.9.tgz",
- "integrity": "sha512-2lfdc6kPXR7WaL4FCQSQUhXcPbI7ol3wF+vkgtU25r77OxPf8F/VmswQ7sgIkBBWtymn5ZF20TIKtnOj9rjb6w==",
- "license": "Apache-2.0",
- "dependencies": {
- "@firebase/component": "0.6.9",
- "@firebase/installations": "0.6.9",
- "@firebase/installations-types": "0.5.2",
- "@firebase/util": "1.10.0",
- "tslib": "^2.1.0"
- },
- "peerDependencies": {
- "@firebase/app-compat": "0.x"
- }
- },
- "node_modules/@firebase/installations-types": {
- "version": "0.5.2",
- "resolved": "https://registry.npmjs.org/@firebase/installations-types/-/installations-types-0.5.2.tgz",
- "integrity": "sha512-que84TqGRZJpJKHBlF2pkvc1YcXrtEDOVGiDjovP/a3s6W4nlbohGXEsBJo0JCeeg/UG9A+DEZVDUV9GpklUzA==",
- "license": "Apache-2.0",
- "peerDependencies": {
- "@firebase/app-types": "0.x"
- }
- },
- "node_modules/@firebase/logger": {
- "version": "0.4.2",
- "resolved": "https://registry.npmjs.org/@firebase/logger/-/logger-0.4.2.tgz",
- "integrity": "sha512-Q1VuA5M1Gjqrwom6I6NUU4lQXdo9IAQieXlujeHZWvRt1b7qQ0KwBaNAjgxG27jgF9/mUwsNmO8ptBCGVYhB0A==",
- "license": "Apache-2.0",
- "dependencies": {
- "tslib": "^2.1.0"
- }
- },
- "node_modules/@firebase/messaging": {
- "version": "0.12.12",
- "resolved": "https://registry.npmjs.org/@firebase/messaging/-/messaging-0.12.12.tgz",
- "integrity": "sha512-6q0pbzYBJhZEtUoQx7hnPhZvAbuMNuBXKQXOx2YlWhSrlv9N1m0ZzlNpBbu/ItTzrwNKTibdYzUyaaxdWLg+4w==",
- "license": "Apache-2.0",
- "dependencies": {
- "@firebase/component": "0.6.9",
- "@firebase/installations": "0.6.9",
- "@firebase/messaging-interop-types": "0.2.2",
- "@firebase/util": "1.10.0",
- "idb": "7.1.1",
- "tslib": "^2.1.0"
- },
- "peerDependencies": {
- "@firebase/app": "0.x"
- }
- },
- "node_modules/@firebase/messaging-compat": {
- "version": "0.2.12",
- "resolved": "https://registry.npmjs.org/@firebase/messaging-compat/-/messaging-compat-0.2.12.tgz",
- "integrity": "sha512-pKsiUVZrbmRgdImYqhBNZlkKJbqjlPkVdQRZGRbkTyX4OSGKR0F/oJeCt1a8jEg5UnBp4fdVwSWSp4DuCovvEQ==",
- "license": "Apache-2.0",
- "dependencies": {
- "@firebase/component": "0.6.9",
- "@firebase/messaging": "0.12.12",
- "@firebase/util": "1.10.0",
- "tslib": "^2.1.0"
- },
- "peerDependencies": {
- "@firebase/app-compat": "0.x"
- }
- },
- "node_modules/@firebase/messaging-interop-types": {
- "version": "0.2.2",
- "resolved": "https://registry.npmjs.org/@firebase/messaging-interop-types/-/messaging-interop-types-0.2.2.tgz",
- "integrity": "sha512-l68HXbuD2PPzDUOFb3aG+nZj5KA3INcPwlocwLZOzPp9rFM9yeuI9YLl6DQfguTX5eAGxO0doTR+rDLDvQb5tA==",
- "license": "Apache-2.0"
- },
- "node_modules/@firebase/performance": {
- "version": "0.6.9",
- "resolved": "https://registry.npmjs.org/@firebase/performance/-/performance-0.6.9.tgz",
- "integrity": "sha512-PnVaak5sqfz5ivhua+HserxTJHtCar/7zM0flCX6NkzBNzJzyzlH4Hs94h2Il0LQB99roBqoE5QT1JqWqcLJHQ==",
- "license": "Apache-2.0",
- "dependencies": {
- "@firebase/component": "0.6.9",
- "@firebase/installations": "0.6.9",
- "@firebase/logger": "0.4.2",
- "@firebase/util": "1.10.0",
- "tslib": "^2.1.0"
- },
- "peerDependencies": {
- "@firebase/app": "0.x"
- }
- },
- "node_modules/@firebase/performance-compat": {
- "version": "0.2.9",
- "resolved": "https://registry.npmjs.org/@firebase/performance-compat/-/performance-compat-0.2.9.tgz",
- "integrity": "sha512-dNl95IUnpsu3fAfYBZDCVhXNkASE0uo4HYaEPd2/PKscfTvsgqFAOxfAXzBEDOnynDWiaGUnb5M1O00JQ+3FXA==",
- "license": "Apache-2.0",
- "dependencies": {
- "@firebase/component": "0.6.9",
- "@firebase/logger": "0.4.2",
- "@firebase/performance": "0.6.9",
- "@firebase/performance-types": "0.2.2",
- "@firebase/util": "1.10.0",
- "tslib": "^2.1.0"
- },
- "peerDependencies": {
- "@firebase/app-compat": "0.x"
- }
- },
- "node_modules/@firebase/performance-types": {
- "version": "0.2.2",
- "resolved": "https://registry.npmjs.org/@firebase/performance-types/-/performance-types-0.2.2.tgz",
- "integrity": "sha512-gVq0/lAClVH5STrIdKnHnCo2UcPLjJlDUoEB/tB4KM+hAeHUxWKnpT0nemUPvxZ5nbdY/pybeyMe8Cs29gEcHA==",
- "license": "Apache-2.0"
- },
- "node_modules/@firebase/remote-config": {
- "version": "0.4.9",
- "resolved": "https://registry.npmjs.org/@firebase/remote-config/-/remote-config-0.4.9.tgz",
- "integrity": "sha512-EO1NLCWSPMHdDSRGwZ73kxEEcTopAxX1naqLJFNApp4hO8WfKfmEpmjxmP5TrrnypjIf2tUkYaKsfbEA7+AMmA==",
- "license": "Apache-2.0",
- "dependencies": {
- "@firebase/component": "0.6.9",
- "@firebase/installations": "0.6.9",
- "@firebase/logger": "0.4.2",
- "@firebase/util": "1.10.0",
- "tslib": "^2.1.0"
- },
- "peerDependencies": {
- "@firebase/app": "0.x"
- }
- },
- "node_modules/@firebase/remote-config-compat": {
- "version": "0.2.9",
- "resolved": "https://registry.npmjs.org/@firebase/remote-config-compat/-/remote-config-compat-0.2.9.tgz",
- "integrity": "sha512-AxzGpWfWFYejH2twxfdOJt5Cfh/ATHONegTd/a0p5flEzsD5JsxXgfkFToop+mypEL3gNwawxrxlZddmDoNxyA==",
- "license": "Apache-2.0",
- "dependencies": {
- "@firebase/component": "0.6.9",
- "@firebase/logger": "0.4.2",
- "@firebase/remote-config": "0.4.9",
- "@firebase/remote-config-types": "0.3.2",
- "@firebase/util": "1.10.0",
- "tslib": "^2.1.0"
- },
- "peerDependencies": {
- "@firebase/app-compat": "0.x"
- }
- },
- "node_modules/@firebase/remote-config-types": {
- "version": "0.3.2",
- "resolved": "https://registry.npmjs.org/@firebase/remote-config-types/-/remote-config-types-0.3.2.tgz",
- "integrity": "sha512-0BC4+Ud7y2aPTyhXJTMTFfrGGLqdYXrUB9sJVAB8NiqJswDTc4/2qrE/yfUbnQJhbSi6ZaTTBKyG3n1nplssaA==",
- "license": "Apache-2.0"
- },
- "node_modules/@firebase/storage": {
- "version": "0.13.2",
- "resolved": "https://registry.npmjs.org/@firebase/storage/-/storage-0.13.2.tgz",
- "integrity": "sha512-fxuJnHshbhVwuJ4FuISLu+/76Aby2sh+44ztjF2ppoe0TELIDxPW6/r1KGlWYt//AD0IodDYYA8ZTN89q8YqUw==",
- "license": "Apache-2.0",
- "dependencies": {
- "@firebase/component": "0.6.9",
- "@firebase/util": "1.10.0",
- "tslib": "^2.1.0",
- "undici": "6.19.7"
- },
- "peerDependencies": {
- "@firebase/app": "0.x"
- }
- },
- "node_modules/@firebase/storage-compat": {
- "version": "0.3.12",
- "resolved": "https://registry.npmjs.org/@firebase/storage-compat/-/storage-compat-0.3.12.tgz",
- "integrity": "sha512-hA4VWKyGU5bWOll+uwzzhEMMYGu9PlKQc1w4DWxB3aIErWYzonrZjF0icqNQZbwKNIdh8SHjZlFeB2w6OSsjfg==",
- "license": "Apache-2.0",
- "dependencies": {
- "@firebase/component": "0.6.9",
- "@firebase/storage": "0.13.2",
- "@firebase/storage-types": "0.8.2",
- "@firebase/util": "1.10.0",
- "tslib": "^2.1.0"
- },
- "peerDependencies": {
- "@firebase/app-compat": "0.x"
- }
- },
- "node_modules/@firebase/storage-types": {
- "version": "0.8.2",
- "resolved": "https://registry.npmjs.org/@firebase/storage-types/-/storage-types-0.8.2.tgz",
- "integrity": "sha512-0vWu99rdey0g53lA7IShoA2Lol1jfnPovzLDUBuon65K7uKG9G+L5uO05brD9pMw+l4HRFw23ah3GwTGpEav6g==",
- "license": "Apache-2.0",
- "peerDependencies": {
- "@firebase/app-types": "0.x",
- "@firebase/util": "1.x"
- }
- },
- "node_modules/@firebase/util": {
- "version": "1.10.0",
- "resolved": "https://registry.npmjs.org/@firebase/util/-/util-1.10.0.tgz",
- "integrity": "sha512-xKtx4A668icQqoANRxyDLBLz51TAbDP9KRfpbKGxiCAW346d0BeJe5vN6/hKxxmWwnZ0mautyv39JxviwwQMOQ==",
- "license": "Apache-2.0",
- "dependencies": {
- "tslib": "^2.1.0"
- }
- },
- "node_modules/@firebase/vertexai-preview": {
- "version": "0.0.4",
- "resolved": "https://registry.npmjs.org/@firebase/vertexai-preview/-/vertexai-preview-0.0.4.tgz",
- "integrity": "sha512-EBSqyu9eg8frQlVU9/HjKtHN7odqbh9MtAcVz3WwHj4gLCLOoN9F/o+oxlq3CxvFrd3CNTZwu6d2mZtVlEInng==",
- "license": "Apache-2.0",
- "dependencies": {
- "@firebase/app-check-interop-types": "0.3.2",
- "@firebase/component": "0.6.9",
- "@firebase/logger": "0.4.2",
- "@firebase/util": "1.10.0",
"tslib": "^2.1.0"
},
"engines": {
"node": ">=18.0.0"
},
"peerDependencies": {
- "@firebase/app": "0.x",
- "@firebase/app-types": "0.x"
+ "@firebase/app": "0.x"
+ }
+ },
+ "node_modules/@firebase/installations": {
+ "version": "0.6.13",
+ "resolved": "https://registry.npmjs.org/@firebase/installations/-/installations-0.6.13.tgz",
+ "integrity": "sha512-6ZpkUiaygPFwgVneYxuuOuHnSPnTA4KefLEaw/sKk/rNYgC7X6twaGfYb0sYLpbi9xV4i5jXsqZ3WO+yaguNgg==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@firebase/component": "0.6.13",
+ "@firebase/util": "1.11.0",
+ "idb": "7.1.1",
+ "tslib": "^2.1.0"
+ },
+ "peerDependencies": {
+ "@firebase/app": "0.x"
+ }
+ },
+ "node_modules/@firebase/logger": {
+ "version": "0.4.4",
+ "resolved": "https://registry.npmjs.org/@firebase/logger/-/logger-0.4.4.tgz",
+ "integrity": "sha512-mH0PEh1zoXGnaR8gD1DeGeNZtWFKbnz9hDO91dIml3iou1gpOnLqXQ2dJfB71dj6dpmUjcQ6phY3ZZJbjErr9g==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "tslib": "^2.1.0"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@firebase/messaging": {
+ "version": "0.12.17",
+ "resolved": "https://registry.npmjs.org/@firebase/messaging/-/messaging-0.12.17.tgz",
+ "integrity": "sha512-W3CnGhTm6Nx8XGb6E5/+jZTuxX/EK8Vur4QXvO1DwZta/t0xqWMRgO9vNsZFMYBqFV4o3j4F9qK/iddGYwWS6g==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@firebase/component": "0.6.13",
+ "@firebase/installations": "0.6.13",
+ "@firebase/messaging-interop-types": "0.2.3",
+ "@firebase/util": "1.11.0",
+ "idb": "7.1.1",
+ "tslib": "^2.1.0"
+ },
+ "peerDependencies": {
+ "@firebase/app": "0.x"
+ }
+ },
+ "node_modules/@firebase/messaging-interop-types": {
+ "version": "0.2.3",
+ "resolved": "https://registry.npmjs.org/@firebase/messaging-interop-types/-/messaging-interop-types-0.2.3.tgz",
+ "integrity": "sha512-xfzFaJpzcmtDjycpDeCUj0Ge10ATFi/VHVIvEEjDNc3hodVBQADZ7BWQU7CuFpjSHE+eLuBI13z5F/9xOoGX8Q==",
+ "license": "Apache-2.0"
+ },
+ "node_modules/@firebase/util": {
+ "version": "1.11.0",
+ "resolved": "https://registry.npmjs.org/@firebase/util/-/util-1.11.0.tgz",
+ "integrity": "sha512-PzSrhIr++KI6y4P6C/IdgBNMkEx0Ex6554/cYd0Hm+ovyFSJtJXqb/3OSIdnBoa2cpwZT1/GW56EmRc5qEc5fQ==",
+ "hasInstallScript": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "tslib": "^2.1.0"
+ },
+ "engines": {
+ "node": ">=18.0.0"
}
},
"node_modules/@firebase/webchannel-wrapper": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/@firebase/webchannel-wrapper/-/webchannel-wrapper-1.0.1.tgz",
- "integrity": "sha512-jmEnr/pk0yVkA7mIlHNnxCi+wWzOFUg0WyIotgkKAb2u1J7fAeDBcVNSTjTihbAYNusCLQdW5s9IJ5qwnEufcQ==",
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/@firebase/webchannel-wrapper/-/webchannel-wrapper-1.0.3.tgz",
+ "integrity": "sha512-2xCRM9q9FlzGZCdgDMJwc0gyUkWFtkosy7Xxr6sFgQwn+wMNIWd7xIvYNauU1r64B5L5rsGKy/n9TKJ0aAFeqQ==",
"license": "Apache-2.0"
},
"node_modules/@graphql-typed-document-node/core": {
@@ -3827,6 +3410,12 @@
"react": "*"
}
},
+ "node_modules/@ioredis/commands": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/@ioredis/commands/-/commands-1.2.0.tgz",
+ "integrity": "sha512-Sx1pU8EM64o2BrqNpEO1CNLtKQwyhuXuqyfH7oGKCk+1a33d2r5saW8zNwm3j6BTExtjrv2BxTgzzkMwts6vGg==",
+ "license": "MIT"
+ },
"node_modules/@jridgewell/gen-mapping": {
"version": "0.3.8",
"resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz",
@@ -3949,36 +3538,6 @@
"integrity": "sha512-AAeTkqyVJGdWLCA60aHDrh3s8h9z8TokyoR1tCpNtYatfe2cdocVdB0AaNquWTmddRWgAklmOBrowsMFQFY8hg==",
"license": "MIT"
},
- "node_modules/@ndhoule/each": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/@ndhoule/each/-/each-2.0.1.tgz",
- "integrity": "sha512-wHuJw6x+rF6Q9Skgra++KccjBozCr9ymtna0FhxmV/8xT/hZ2ExGYR8SV8prg8x4AH/7mzDYErNGIVHuzHeybw==",
- "license": "MIT",
- "dependencies": {
- "@ndhoule/keys": "^2.0.0"
- }
- },
- "node_modules/@ndhoule/includes": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/@ndhoule/includes/-/includes-2.0.1.tgz",
- "integrity": "sha512-Q8zN6f3yIhxgBwZ5ldLozHqJlc/fRQ5+hFFsPMFeC9SJvz0nq8vG9hoRXL1c1iaNFQd7yAZIy2igQpERoFqxqg==",
- "license": "MIT",
- "dependencies": {
- "@ndhoule/each": "^2.0.1"
- }
- },
- "node_modules/@ndhoule/keys": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/@ndhoule/keys/-/keys-2.0.0.tgz",
- "integrity": "sha512-vtCqKBC1Av6dsBA8xpAO+cgk051nfaI+PnmTZep2Px0vYrDvpUmLxv7z40COlWH5yCpu3gzNhepk+02yiQiZNw==",
- "license": "MIT"
- },
- "node_modules/@ndhoule/pick": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/@ndhoule/pick/-/pick-2.0.0.tgz",
- "integrity": "sha512-xkYtpf1pRd8egwvl5tJcdGu+GBd6ZZH3S/zoIQ9txEI+pHF9oTIlxMC9G4CB3sRugAeLgu8qYJGl3tnxWq74Qw==",
- "license": "MIT"
- },
"node_modules/@nicolo-ribaudo/eslint-scope-5-internals": {
"version": "5.1.1-v1",
"resolved": "https://registry.npmjs.org/@nicolo-ribaudo/eslint-scope-5-internals/-/eslint-scope-5-internals-5.1.1-v1.tgz",
@@ -4612,6 +4171,27 @@
"react-dom": ">=16.9.0"
}
},
+ "node_modules/@rc-component/util": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/@rc-component/util/-/util-1.2.1.tgz",
+ "integrity": "sha512-AUVu6jO+lWjQnUOOECwu8iR0EdElQgWW5NBv5vP/Uf9dWbAX3udhMutRlkVXjuac2E40ghkFy+ve00mc/3Fymg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "react-is": "^18.2.0"
+ },
+ "peerDependencies": {
+ "react": ">=18.0.0",
+ "react-dom": ">=18.0.0"
+ }
+ },
+ "node_modules/@rc-component/util/node_modules/react-is": {
+ "version": "18.3.1",
+ "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz",
+ "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/@redux-saga/core": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/@redux-saga/core/-/core-1.3.0.tgz",
@@ -4669,9 +4249,9 @@
"license": "MIT"
},
"node_modules/@reduxjs/toolkit": {
- "version": "2.6.0",
- "resolved": "https://registry.npmjs.org/@reduxjs/toolkit/-/toolkit-2.6.0.tgz",
- "integrity": "sha512-mWJCYpewLRyTuuzRSEC/IwIBBkYg2dKtQas8mty5MaV2iXzcmicS3gW554FDeOvLnY3x13NIk8MB1e8wHO7rqQ==",
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/@reduxjs/toolkit/-/toolkit-2.6.1.tgz",
+ "integrity": "sha512-SSlIqZNYhqm/oMkXbtofwZSt9lrncblzo6YcZ9zoX+zLngRBrCOjK4lNLdkNucJF58RHOWrD9txT3bT3piH7Zw==",
"license": "MIT",
"dependencies": {
"immer": "^10.0.3",
@@ -5261,50 +4841,50 @@
"license": "MIT"
},
"node_modules/@sentry-internal/browser-utils": {
- "version": "9.3.0",
- "resolved": "https://registry.npmjs.org/@sentry-internal/browser-utils/-/browser-utils-9.3.0.tgz",
- "integrity": "sha512-G3z4HCUyb5nJe03EPUhWjnaHqMDt4mOTFJDNha3DGoB51lMYojpQI1Qo1u6bY4qkWVSO1c+HqOU0RVsXoAchtQ==",
+ "version": "9.9.0",
+ "resolved": "https://registry.npmjs.org/@sentry-internal/browser-utils/-/browser-utils-9.9.0.tgz",
+ "integrity": "sha512-V/YhKLis98JFkqBGZaEBlDNFpJHJjoCvNb05raAYXdITfDIl37Kxqj0zX+IzyRhqnswkQ+DBTyoEoci09IR2bQ==",
"license": "MIT",
"dependencies": {
- "@sentry/core": "9.3.0"
+ "@sentry/core": "9.9.0"
},
"engines": {
"node": ">=18"
}
},
"node_modules/@sentry-internal/feedback": {
- "version": "9.3.0",
- "resolved": "https://registry.npmjs.org/@sentry-internal/feedback/-/feedback-9.3.0.tgz",
- "integrity": "sha512-LQmIbQaATlN5QEwCD2Xt+7VKfwfR5W3dbn0jdF1x4hQFE/srdnOj60xMz/mj3tP5BxV552xJniGsyZ8lXHDb2A==",
+ "version": "9.9.0",
+ "resolved": "https://registry.npmjs.org/@sentry-internal/feedback/-/feedback-9.9.0.tgz",
+ "integrity": "sha512-hrxuOLm0Xsnx75hTNt3eLgNNjER3egrHZShdRzlMiakfKpA9f2X10z75vlZmT5ZUygDQnp9UVUnu28cDuVb9Zw==",
"license": "MIT",
"dependencies": {
- "@sentry/core": "9.3.0"
+ "@sentry/core": "9.9.0"
},
"engines": {
"node": ">=18"
}
},
"node_modules/@sentry-internal/replay": {
- "version": "9.3.0",
- "resolved": "https://registry.npmjs.org/@sentry-internal/replay/-/replay-9.3.0.tgz",
- "integrity": "sha512-ZkH+Gahn89JygpuiFn26ZgAqJXHtnr+HjfQ2ONOFoWQHNH6X5wk75UTma55aYk1d8VcBPFoU6WjFhZoQ55SV1g==",
+ "version": "9.9.0",
+ "resolved": "https://registry.npmjs.org/@sentry-internal/replay/-/replay-9.9.0.tgz",
+ "integrity": "sha512-EWczKMu3qiZ0SUUWU3zkGod+AWD/VQCLiQw+tw+PEpdHbRZIdYKsEptengZCFKthrwe2QmYpVCTSRxGvujJ/6g==",
"license": "MIT",
"dependencies": {
- "@sentry-internal/browser-utils": "9.3.0",
- "@sentry/core": "9.3.0"
+ "@sentry-internal/browser-utils": "9.9.0",
+ "@sentry/core": "9.9.0"
},
"engines": {
"node": ">=18"
}
},
"node_modules/@sentry-internal/replay-canvas": {
- "version": "9.3.0",
- "resolved": "https://registry.npmjs.org/@sentry-internal/replay-canvas/-/replay-canvas-9.3.0.tgz",
- "integrity": "sha512-MhDMJeRGa55a0D541+OzTFMWwbabthhDGbAL90/NpappfyeBbAiktmCNl0BFTZuRbCGrC2m1LLCqHegCVKW4fQ==",
+ "version": "9.9.0",
+ "resolved": "https://registry.npmjs.org/@sentry-internal/replay-canvas/-/replay-canvas-9.9.0.tgz",
+ "integrity": "sha512-YK0ixGjquahGpNsQskCEVwycdHlwNBLCx9XJr1BmGnlOw6fUCmpyVetaGg/ZyhkzKGNXAGoTa4s7FUFnAG4bKg==",
"license": "MIT",
"dependencies": {
- "@sentry-internal/replay": "9.3.0",
- "@sentry/core": "9.3.0"
+ "@sentry-internal/replay": "9.9.0",
+ "@sentry/core": "9.9.0"
},
"engines": {
"node": ">=18"
@@ -5320,16 +4900,16 @@
}
},
"node_modules/@sentry/browser": {
- "version": "9.3.0",
- "resolved": "https://registry.npmjs.org/@sentry/browser/-/browser-9.3.0.tgz",
- "integrity": "sha512-yPwWWQo/hpN63p0NGmk/Dd1Fx5CQRWNMfuV7dtfPBtg3vRjDecA9OLyK29AqK5h3Fl8FuJOyOqB87CvtXUqh5g==",
+ "version": "9.9.0",
+ "resolved": "https://registry.npmjs.org/@sentry/browser/-/browser-9.9.0.tgz",
+ "integrity": "sha512-pIMdkOC+iggZefBs6ck5fL1mBhbLzjdw/8K99iqSeDh+lLvmlHVZajAhPlmw50xfH8CyQ1s22dhcL+zXbg3NKw==",
"license": "MIT",
"dependencies": {
- "@sentry-internal/browser-utils": "9.3.0",
- "@sentry-internal/feedback": "9.3.0",
- "@sentry-internal/replay": "9.3.0",
- "@sentry-internal/replay-canvas": "9.3.0",
- "@sentry/core": "9.3.0"
+ "@sentry-internal/browser-utils": "9.9.0",
+ "@sentry-internal/feedback": "9.9.0",
+ "@sentry-internal/replay": "9.9.0",
+ "@sentry-internal/replay-canvas": "9.9.0",
+ "@sentry/core": "9.9.0"
},
"engines": {
"node": ">=18"
@@ -5354,7 +4934,7 @@
"node": ">= 14"
}
},
- "node_modules/@sentry/cli": {
+ "node_modules/@sentry/bundler-plugin-core/node_modules/@sentry/cli": {
"version": "2.42.2",
"resolved": "https://registry.npmjs.org/@sentry/cli/-/cli-2.42.2.tgz",
"integrity": "sha512-spb7S/RUumCGyiSTg8DlrCX4bivCNmU/A1hcfkwuciTFGu8l5CDc2I6jJWWZw8/0enDGxuj5XujgXvU5tr4bxg==",
@@ -5383,7 +4963,7 @@
"@sentry/cli-win32-x64": "2.42.2"
}
},
- "node_modules/@sentry/cli-darwin": {
+ "node_modules/@sentry/bundler-plugin-core/node_modules/@sentry/cli-darwin": {
"version": "2.42.2",
"resolved": "https://registry.npmjs.org/@sentry/cli-darwin/-/cli-darwin-2.42.2.tgz",
"integrity": "sha512-GtJSuxER7Vrp1IpxdUyRZzcckzMnb4N5KTW7sbTwUiwqARRo+wxS+gczYrS8tdgtmXs5XYhzhs+t4d52ITHMIg==",
@@ -5396,7 +4976,7 @@
"node": ">=10"
}
},
- "node_modules/@sentry/cli-linux-arm": {
+ "node_modules/@sentry/bundler-plugin-core/node_modules/@sentry/cli-linux-arm": {
"version": "2.42.2",
"resolved": "https://registry.npmjs.org/@sentry/cli-linux-arm/-/cli-linux-arm-2.42.2.tgz",
"integrity": "sha512-7udCw+YL9lwq+9eL3WLspvnuG+k5Icg92YE7zsteTzWLwgPVzaxeZD2f8hwhsu+wmL+jNqbpCRmktPteh3i2mg==",
@@ -5413,7 +4993,7 @@
"node": ">=10"
}
},
- "node_modules/@sentry/cli-linux-arm64": {
+ "node_modules/@sentry/bundler-plugin-core/node_modules/@sentry/cli-linux-arm64": {
"version": "2.42.2",
"resolved": "https://registry.npmjs.org/@sentry/cli-linux-arm64/-/cli-linux-arm64-2.42.2.tgz",
"integrity": "sha512-BOxzI7sgEU5Dhq3o4SblFXdE9zScpz6EXc5Zwr1UDZvzgXZGosUtKVc7d1LmkrHP8Q2o18HcDWtF3WvJRb5Zpw==",
@@ -5430,7 +5010,7 @@
"node": ">=10"
}
},
- "node_modules/@sentry/cli-linux-i686": {
+ "node_modules/@sentry/bundler-plugin-core/node_modules/@sentry/cli-linux-i686": {
"version": "2.42.2",
"resolved": "https://registry.npmjs.org/@sentry/cli-linux-i686/-/cli-linux-i686-2.42.2.tgz",
"integrity": "sha512-Sw/dQp5ZPvKnq3/y7wIJyxTUJYPGoTX/YeMbDs8BzDlu9to2LWV3K3r7hE7W1Lpbaw4tSquUHiQjP5QHCOS7aQ==",
@@ -5448,7 +5028,7 @@
"node": ">=10"
}
},
- "node_modules/@sentry/cli-linux-x64": {
+ "node_modules/@sentry/bundler-plugin-core/node_modules/@sentry/cli-linux-x64": {
"version": "2.42.2",
"resolved": "https://registry.npmjs.org/@sentry/cli-linux-x64/-/cli-linux-x64-2.42.2.tgz",
"integrity": "sha512-mU4zUspAal6TIwlNLBV5oq6yYqiENnCWSxtSQVzWs0Jyq97wtqGNG9U+QrnwjJZ+ta/hvye9fvL2X25D/RxHQw==",
@@ -5465,7 +5045,7 @@
"node": ">=10"
}
},
- "node_modules/@sentry/cli-win32-i686": {
+ "node_modules/@sentry/bundler-plugin-core/node_modules/@sentry/cli-win32-i686": {
"version": "2.42.2",
"resolved": "https://registry.npmjs.org/@sentry/cli-win32-i686/-/cli-win32-i686-2.42.2.tgz",
"integrity": "sha512-iHvFHPGqgJMNqXJoQpqttfsv2GI3cGodeTq4aoVLU/BT3+hXzbV0x1VpvvEhncJkDgDicJpFLM8sEPHb3b8abw==",
@@ -5482,7 +5062,7 @@
"node": ">=10"
}
},
- "node_modules/@sentry/cli-win32-x64": {
+ "node_modules/@sentry/bundler-plugin-core/node_modules/@sentry/cli-win32-x64": {
"version": "2.42.2",
"resolved": "https://registry.npmjs.org/@sentry/cli-win32-x64/-/cli-win32-x64-2.42.2.tgz",
"integrity": "sha512-vPPGHjYoaGmfrU7xhfFxG7qlTBacroz5NdT+0FmDn6692D8IvpNXl1K+eV3Kag44ipJBBeR8g1HRJyx/F/9ACw==",
@@ -5498,6 +5078,171 @@
"node": ">=10"
}
},
+ "node_modules/@sentry/bundler-plugin-core/node_modules/isexe": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
+ "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==",
+ "license": "ISC"
+ },
+ "node_modules/@sentry/bundler-plugin-core/node_modules/which": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
+ "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
+ "license": "ISC",
+ "dependencies": {
+ "isexe": "^2.0.0"
+ },
+ "bin": {
+ "node-which": "bin/node-which"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/@sentry/cli": {
+ "version": "2.42.4",
+ "resolved": "https://registry.npmjs.org/@sentry/cli/-/cli-2.42.4.tgz",
+ "integrity": "sha512-BoSZDAWJiz/40tu6LuMDkSgwk4xTsq6zwqYoUqLU3vKBR/VsaaQGvu6EWxZXORthfZU2/5Agz0+t220cge6VQw==",
+ "hasInstallScript": true,
+ "license": "BSD-3-Clause",
+ "dependencies": {
+ "https-proxy-agent": "^5.0.0",
+ "node-fetch": "^2.6.7",
+ "progress": "^2.0.3",
+ "proxy-from-env": "^1.1.0",
+ "which": "^2.0.2"
+ },
+ "bin": {
+ "sentry-cli": "bin/sentry-cli"
+ },
+ "engines": {
+ "node": ">= 10"
+ },
+ "optionalDependencies": {
+ "@sentry/cli-darwin": "2.42.4",
+ "@sentry/cli-linux-arm": "2.42.4",
+ "@sentry/cli-linux-arm64": "2.42.4",
+ "@sentry/cli-linux-i686": "2.42.4",
+ "@sentry/cli-linux-x64": "2.42.4",
+ "@sentry/cli-win32-i686": "2.42.4",
+ "@sentry/cli-win32-x64": "2.42.4"
+ }
+ },
+ "node_modules/@sentry/cli-darwin": {
+ "version": "2.42.4",
+ "resolved": "https://registry.npmjs.org/@sentry/cli-darwin/-/cli-darwin-2.42.4.tgz",
+ "integrity": "sha512-PZV4Y97VDWBR4rIt0HkJfXaBXlebIN2s/FDzC3iHINZE5OG62CDFsnC4/lbGlf2/UZLDaGGIK7mYwSHhTvN+HQ==",
+ "license": "BSD-3-Clause",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/@sentry/cli-linux-arm": {
+ "version": "2.42.4",
+ "resolved": "https://registry.npmjs.org/@sentry/cli-linux-arm/-/cli-linux-arm-2.42.4.tgz",
+ "integrity": "sha512-lBn0oeeg62h68/4Eo6zbPq99Idz5t0VRV48rEU/WKeM4MtQCvG/iGGQ3lBFW2yNiUBzXZIK9poXLEcgbwmcRVw==",
+ "cpu": [
+ "arm"
+ ],
+ "license": "BSD-3-Clause",
+ "optional": true,
+ "os": [
+ "linux",
+ "freebsd"
+ ],
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/@sentry/cli-linux-arm64": {
+ "version": "2.42.4",
+ "resolved": "https://registry.npmjs.org/@sentry/cli-linux-arm64/-/cli-linux-arm64-2.42.4.tgz",
+ "integrity": "sha512-Ex8vRnryyzC/9e43daEmEqPS+9uirY/l6Hw2lAvhBblFaL7PTWNx52H+8GnYGd9Zy2H3rWNyBDYfHwnErg38zA==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "BSD-3-Clause",
+ "optional": true,
+ "os": [
+ "linux",
+ "freebsd"
+ ],
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/@sentry/cli-linux-i686": {
+ "version": "2.42.4",
+ "resolved": "https://registry.npmjs.org/@sentry/cli-linux-i686/-/cli-linux-i686-2.42.4.tgz",
+ "integrity": "sha512-IBJg0aHjsLCL4LvcFa3cXIjA+4t5kPqBT9y+PoDu4goIFxYD8zl7mbUdGJutvJafTk8Akf4ss4JJXQBjg019zA==",
+ "cpu": [
+ "x86",
+ "ia32"
+ ],
+ "license": "BSD-3-Clause",
+ "optional": true,
+ "os": [
+ "linux",
+ "freebsd"
+ ],
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/@sentry/cli-linux-x64": {
+ "version": "2.42.4",
+ "resolved": "https://registry.npmjs.org/@sentry/cli-linux-x64/-/cli-linux-x64-2.42.4.tgz",
+ "integrity": "sha512-gXI5OEiOSNiAEz7VCE6AZcAgHJ47mlgal3+NmbE8XcHmFOnyDws9FNie6PJAy8KZjXi3nqoBP9JVAbnmOix3uA==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "BSD-3-Clause",
+ "optional": true,
+ "os": [
+ "linux",
+ "freebsd"
+ ],
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/@sentry/cli-win32-i686": {
+ "version": "2.42.4",
+ "resolved": "https://registry.npmjs.org/@sentry/cli-win32-i686/-/cli-win32-i686-2.42.4.tgz",
+ "integrity": "sha512-vZuR3UPHKqOMniyrijrrsNwn9usaRysXq78F6WV0cL0ZyPLAmY+KBnTDSFk1Oig2pURnzaTm+RtcZu2fc8mlzg==",
+ "cpu": [
+ "x86",
+ "ia32"
+ ],
+ "license": "BSD-3-Clause",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/@sentry/cli-win32-x64": {
+ "version": "2.42.4",
+ "resolved": "https://registry.npmjs.org/@sentry/cli-win32-x64/-/cli-win32-x64-2.42.4.tgz",
+ "integrity": "sha512-OIBj3uaQ6nAERSm5Dcf8UIhyElEEwMNsZEEppQpN4IKl0mrwb/57AznM23Dvpu6GR8WGbVQUSolt879YZR5E9g==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "BSD-3-Clause",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=10"
+ }
+ },
"node_modules/@sentry/cli/node_modules/isexe": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
@@ -5520,22 +5265,22 @@
}
},
"node_modules/@sentry/core": {
- "version": "9.3.0",
- "resolved": "https://registry.npmjs.org/@sentry/core/-/core-9.3.0.tgz",
- "integrity": "sha512-SxQ4z7wTkfguvYb2ctNEMU9kVAbhl9ymfjhLnrvtygTwL5soLqAKdco/lX/4P9K9Osgb2Dl6urQWRl+AhzKVbQ==",
+ "version": "9.9.0",
+ "resolved": "https://registry.npmjs.org/@sentry/core/-/core-9.9.0.tgz",
+ "integrity": "sha512-GxKvx8PSgoWhLLS+/WBGIXy7rsFcnJBPDqFXIfcAGy89k2j06d9IP0kiIc63qBGStSUkh5FFJLPTakZ5RXiFXA==",
"license": "MIT",
"engines": {
"node": ">=18"
}
},
"node_modules/@sentry/react": {
- "version": "9.3.0",
- "resolved": "https://registry.npmjs.org/@sentry/react/-/react-9.3.0.tgz",
- "integrity": "sha512-/ruDHBHLDXmZoEHNCSjdekZr9+0pbOC5+BY1oABGoDXRISGyoenOBtAsX8TsaC9oJYhr16yKDFlYxzzQRhxDyg==",
+ "version": "9.9.0",
+ "resolved": "https://registry.npmjs.org/@sentry/react/-/react-9.9.0.tgz",
+ "integrity": "sha512-7BE2Lx5CNtHtlNSS7Z9HxKquohC0xhdFceO3NlMXlx+dZuVCMoQmLISB8SQEcHw+2VO24MvtP3LPEzdeNbkIfg==",
"license": "MIT",
"dependencies": {
- "@sentry/browser": "9.3.0",
- "@sentry/core": "9.3.0",
+ "@sentry/browser": "9.9.0",
+ "@sentry/core": "9.9.0",
"hoist-non-react-statics": "^3.3.2"
},
"engines": {
@@ -5583,15 +5328,13 @@
"license": "MIT"
},
"node_modules/@splitsoftware/splitio": {
- "version": "10.28.0",
- "resolved": "https://registry.npmjs.org/@splitsoftware/splitio/-/splitio-10.28.0.tgz",
- "integrity": "sha512-hzBnBZHmUTXvyMBbVTDUYtspLHjyjb/YqKtetNh7pAvkmj37vOXyXfF50Of5jr3Qmvdo0YFbKvMIOEXlXSGWaQ==",
+ "version": "11.0.3",
+ "resolved": "https://registry.npmjs.org/@splitsoftware/splitio/-/splitio-11.0.3.tgz",
+ "integrity": "sha512-UtoixGfICCj52FfaVdI186Czw0qCvvEyCw/OtJVTsgM4Zq0k2mY8yKzQ7tSB/HJtzbUVnuPoxkwEcj0479stmg==",
"license": "Apache-2.0",
"dependencies": {
- "@splitsoftware/splitio-commons": "1.17.0",
- "@types/google.analytics": "0.0.40",
- "@types/ioredis": "^4.28.0",
- "bloom-filters": "^3.0.0",
+ "@splitsoftware/splitio-commons": "2.0.2",
+ "bloom-filters": "^3.0.4",
"ioredis": "^4.28.0",
"js-yaml": "^3.13.1",
"node-fetch": "^2.7.0",
@@ -5599,16 +5342,16 @@
"unfetch": "^4.2.0"
},
"engines": {
- "node": ">=6",
- "npm": ">=3"
+ "node": ">=14.0.0"
}
},
"node_modules/@splitsoftware/splitio-commons": {
- "version": "1.17.0",
- "resolved": "https://registry.npmjs.org/@splitsoftware/splitio-commons/-/splitio-commons-1.17.0.tgz",
- "integrity": "sha512-rvP+0LGUN92bcTytiqyVxq9UzBG5kTkIYjU7b7AU2awBUYgM0bqT3xhQ9/MJ/2fsBbqC6QIsxoKDOz9pMgbAQw==",
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/@splitsoftware/splitio-commons/-/splitio-commons-2.0.2.tgz",
+ "integrity": "sha512-r2m3kwWnSuROT+7zTzhWBrM0DMRBGJNQcTyvXw8zLPPmBs/PnmAnxCy7uRpfMHOGbP9Q3Iju0bU/H5dG8svyiw==",
"license": "Apache-2.0",
"dependencies": {
+ "@types/ioredis": "^4.28.0",
"tslib": "^2.3.1"
},
"peerDependencies": {
@@ -5621,18 +5364,18 @@
}
},
"node_modules/@splitsoftware/splitio-react": {
- "version": "1.13.0",
- "resolved": "https://registry.npmjs.org/@splitsoftware/splitio-react/-/splitio-react-1.13.0.tgz",
- "integrity": "sha512-P6TZyffkm2/g0QOxmZqAh5NG3mTOfrrfzjLkMl1FSFkRxP/fw3z43seWIQShPGEWWs0y/lRX9NqM93OgcGdS7A==",
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/@splitsoftware/splitio-react/-/splitio-react-2.0.1.tgz",
+ "integrity": "sha512-Jky3o46w+CO2+x6TN3kzQ4CoASKX4PqtDqSTHY6n5JXBC2CqhlXuvODoMYXKzolOsndku+aL7+Mlavbn7b+2lw==",
"license": "Apache-2.0",
"dependencies": {
- "@splitsoftware/splitio": "10.28.0",
+ "@splitsoftware/splitio": "11.0.3",
"memoize-one": "^5.1.1",
"shallowequal": "^1.1.0",
"tslib": "^2.3.1"
},
"peerDependencies": {
- "react": ">=16.3.0"
+ "react": ">=16.8.0"
}
},
"node_modules/@splitsoftware/splitio-react/node_modules/memoize-one": {
@@ -5678,97 +5421,6 @@
"react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0"
}
},
- "node_modules/@testing-library/cypress": {
- "version": "10.0.3",
- "resolved": "https://registry.npmjs.org/@testing-library/cypress/-/cypress-10.0.3.tgz",
- "integrity": "sha512-TeZJMCNtiS59cPWalra7LgADuufO5FtbqQBYxuAgdX6ZFAR2D9CtQwAG8VbgvFcchW3K414va/+7P4OkQ80UVg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/runtime": "^7.14.6",
- "@testing-library/dom": "^10.1.0"
- },
- "engines": {
- "node": ">=12",
- "npm": ">=6"
- },
- "peerDependencies": {
- "cypress": "^12.0.0 || ^13.0.0 || ^14.0.0"
- }
- },
- "node_modules/@testing-library/dom": {
- "version": "10.4.0",
- "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-10.4.0.tgz",
- "integrity": "sha512-pemlzrSESWbdAloYml3bAJMEfNh1Z7EduzqPKprCH5S341frlpYnUEW0H72dLxa6IsYr+mPno20GiSm+h9dEdQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/code-frame": "^7.10.4",
- "@babel/runtime": "^7.12.5",
- "@types/aria-query": "^5.0.1",
- "aria-query": "5.3.0",
- "chalk": "^4.1.0",
- "dom-accessibility-api": "^0.5.9",
- "lz-string": "^1.5.0",
- "pretty-format": "^27.0.2"
- },
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@testing-library/dom/node_modules/ansi-styles": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "color-convert": "^2.0.1"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/chalk/ansi-styles?sponsor=1"
- }
- },
- "node_modules/@testing-library/dom/node_modules/chalk": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
- "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/chalk/chalk?sponsor=1"
- }
- },
- "node_modules/@testing-library/dom/node_modules/supports-color": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
- "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "has-flag": "^4.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/@types/aria-query": {
- "version": "5.0.4",
- "resolved": "https://registry.npmjs.org/@types/aria-query/-/aria-query-5.0.4.tgz",
- "integrity": "sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==",
- "dev": true,
- "license": "MIT"
- },
"node_modules/@types/babel__core": {
"version": "7.20.5",
"resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz",
@@ -5810,12 +5462,6 @@
"@babel/types": "^7.20.7"
}
},
- "node_modules/@types/cookie": {
- "version": "0.6.0",
- "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.6.0.tgz",
- "integrity": "sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==",
- "license": "MIT"
- },
"node_modules/@types/d3-array": {
"version": "3.2.1",
"resolved": "https://registry.npmjs.org/@types/d3-array/-/d3-array-3.2.1.tgz",
@@ -5914,12 +5560,6 @@
"@types/estree": "*"
}
},
- "node_modules/@types/google.analytics": {
- "version": "0.0.40",
- "resolved": "https://registry.npmjs.org/@types/google.analytics/-/google.analytics-0.0.40.tgz",
- "integrity": "sha512-R3HpnLkqmKxhUAf8kIVvDVGJqPtaaZlW4yowNwjOZUTmYUQEgHh8Nh5wkSXKMroNAuQM8gbXJHmNbbgA8tdb7Q==",
- "license": "MIT"
- },
"node_modules/@types/hast": {
"version": "3.0.4",
"resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.4.tgz",
@@ -6022,20 +5662,6 @@
"dev": true,
"license": "MIT"
},
- "node_modules/@types/sinonjs__fake-timers": {
- "version": "8.1.1",
- "resolved": "https://registry.npmjs.org/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-8.1.1.tgz",
- "integrity": "sha512-0kSuKjAS0TrGLJ0M/+8MaFkGsQhZpB6pxOmvS3K8FYI72K//YmdfoW9X2qPsAKh1mkwxGD5zib9s1FIFed6E8g==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/@types/sizzle": {
- "version": "2.3.9",
- "resolved": "https://registry.npmjs.org/@types/sizzle/-/sizzle-2.3.9.tgz",
- "integrity": "sha512-xzLEyKB50yqCUPUJkIsrVvoWNfFUbIZI+RspLWt8u+tIW/BetMBZtgV2LY/2o+tYH8dRvQ+eoPf3NdhQCcLE2w==",
- "dev": true,
- "license": "MIT"
- },
"node_modules/@types/stylis": {
"version": "4.2.5",
"resolved": "https://registry.npmjs.org/@types/stylis/-/stylis-4.2.5.tgz",
@@ -6067,17 +5693,6 @@
"integrity": "sha512-D1XC7WK8K+zZEveUPY+cf4+kgauk8N4eHr/XIHXGlGYkHLud6hK9lYfZk1ry1TNh798cZUCgb6MqGEG8DkJt6Q==",
"license": "MIT"
},
- "node_modules/@types/yauzl": {
- "version": "2.10.3",
- "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.3.tgz",
- "integrity": "sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==",
- "dev": true,
- "license": "MIT",
- "optional": true,
- "dependencies": {
- "@types/node": "*"
- }
- },
"node_modules/@typescript-eslint/eslint-plugin": {
"version": "5.62.0",
"resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.62.0.tgz",
@@ -6479,20 +6094,6 @@
"node": ">= 6.0.0"
}
},
- "node_modules/aggregate-error": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz",
- "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "clean-stack": "^2.0.0",
- "indent-string": "^4.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
"node_modules/ajv": {
"version": "6.12.6",
"resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
@@ -6510,32 +6111,6 @@
"url": "https://github.com/sponsors/epoberezkin"
}
},
- "node_modules/ansi-colors": {
- "version": "4.1.3",
- "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz",
- "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/ansi-escapes": {
- "version": "4.3.2",
- "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz",
- "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "type-fest": "^0.21.3"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
"node_modules/ansi-regex": {
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
@@ -6545,23 +6120,10 @@
"node": ">=8"
}
},
- "node_modules/ansi-styles": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz",
- "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/chalk/ansi-styles?sponsor=1"
- }
- },
"node_modules/antd": {
- "version": "5.24.2",
- "resolved": "https://registry.npmjs.org/antd/-/antd-5.24.2.tgz",
- "integrity": "sha512-7Z9HsE3ZIK3sE/WuUqii3w7Gl1IJuRL21sDUTtkN95JS5KhRYP8ISv7m/HxsJ3Mn/yxgojBCgLPJ212+Dn+aPw==",
+ "version": "5.24.5",
+ "resolved": "https://registry.npmjs.org/antd/-/antd-5.24.5.tgz",
+ "integrity": "sha512-1lAv/G+9ewQanyoAo3JumQmIlVxwo5QwWGb6QCHYc40Cq0NxC/EzITcjsgq1PSaTUpLkKq8A2l7Fjtu47vqQBg==",
"license": "MIT",
"dependencies": {
"@ant-design/colors": "^7.2.0",
@@ -6579,22 +6141,22 @@
"classnames": "^2.5.1",
"copy-to-clipboard": "^3.3.3",
"dayjs": "^1.11.11",
- "rc-cascader": "~3.33.0",
+ "rc-cascader": "~3.33.1",
"rc-checkbox": "~3.5.0",
"rc-collapse": "~3.9.0",
"rc-dialog": "~9.6.0",
"rc-drawer": "~7.2.0",
"rc-dropdown": "~4.2.1",
"rc-field-form": "~2.7.0",
- "rc-image": "~7.11.0",
- "rc-input": "~1.7.2",
+ "rc-image": "~7.11.1",
+ "rc-input": "~1.7.3",
"rc-input-number": "~9.4.0",
"rc-mentions": "~2.19.1",
"rc-menu": "~9.16.1",
"rc-motion": "^2.9.5",
"rc-notification": "~5.6.3",
"rc-pagination": "~5.1.0",
- "rc-picker": "~4.11.2",
+ "rc-picker": "~4.11.3",
"rc-progress": "~4.0.0",
"rc-rate": "~2.13.1",
"rc-resize-observer": "^1.4.3",
@@ -6603,11 +6165,11 @@
"rc-slider": "~11.1.8",
"rc-steps": "~6.0.1",
"rc-switch": "~4.1.0",
- "rc-table": "~7.50.3",
+ "rc-table": "~7.50.4",
"rc-tabs": "~15.5.1",
"rc-textarea": "~1.9.0",
"rc-tooltip": "~6.4.0",
- "rc-tree": "~5.13.0",
+ "rc-tree": "~5.13.1",
"rc-tree-select": "~5.27.0",
"rc-upload": "~4.8.1",
"rc-util": "^5.44.4",
@@ -6623,6 +6185,26 @@
"react-dom": ">=16.9.0"
}
},
+ "node_modules/antd/node_modules/@ant-design/icons": {
+ "version": "5.6.1",
+ "resolved": "https://registry.npmjs.org/@ant-design/icons/-/icons-5.6.1.tgz",
+ "integrity": "sha512-0/xS39c91WjPAZOWsvi1//zjx6kAp4kxWwctR6kuU6p133w8RU0D2dSCvZC19uQyharg/sAvYxGYWl01BbZZfg==",
+ "license": "MIT",
+ "dependencies": {
+ "@ant-design/colors": "^7.0.0",
+ "@ant-design/icons-svg": "^4.4.0",
+ "@babel/runtime": "^7.24.8",
+ "classnames": "^2.2.6",
+ "rc-util": "^5.31.1"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "peerDependencies": {
+ "react": ">=16.0.0",
+ "react-dom": ">=16.0.0"
+ }
+ },
"node_modules/anymatch": {
"version": "3.1.3",
"resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz",
@@ -6662,43 +6244,22 @@
}
},
"node_modules/apollo-link-sentry": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/apollo-link-sentry/-/apollo-link-sentry-4.1.0.tgz",
- "integrity": "sha512-wHiJXZ9OzmRbV3famykszz0E0SZyCBpa3Rt0EVrdOKDN9qQQaE63xQB2lFa3mUkZb95GMc+6ugPt8bVIkwsRPQ==",
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/apollo-link-sentry/-/apollo-link-sentry-4.2.0.tgz",
+ "integrity": "sha512-w8EUM4aEw1/VxIB3KOP11T8qz44oWRcbXRd2vJq/qHnfRMKS5HkMerSIYwKN2e8k9H8ubfkwBvStH51CVf4wwg==",
"license": "MIT",
"dependencies": {
"deepmerge": "^4.2.2",
- "dot-prop": "^6.0.0",
+ "dot-prop": "^6",
"tslib": "^2.0.3",
"zen-observable-ts": "^1.2.5"
},
"peerDependencies": {
"@apollo/client": "^3.2.3",
- "@sentry/core": "^8.33.0",
- "graphql": "15 - 16"
+ "@sentry/core": "^8.33 || ^9",
+ "graphql": "^15 || ^16"
}
},
- "node_modules/arch": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/arch/-/arch-2.2.0.tgz",
- "integrity": "sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
- }
- ],
- "license": "MIT"
- },
"node_modules/argparse": {
"version": "1.0.10",
"resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
@@ -6708,16 +6269,6 @@
"sprintf-js": "~1.0.2"
}
},
- "node_modules/aria-query": {
- "version": "5.3.0",
- "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz",
- "integrity": "sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==",
- "dev": true,
- "license": "Apache-2.0",
- "dependencies": {
- "dequal": "^2.0.3"
- }
- },
"node_modules/array-buffer-byte-length": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.2.tgz",
@@ -6885,16 +6436,6 @@
"url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/asn1": {
- "version": "0.2.6",
- "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz",
- "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "safer-buffer": "~2.1.0"
- }
- },
"node_modules/asn1.js": {
"version": "4.10.1",
"resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz",
@@ -6928,16 +6469,6 @@
"util": "^0.12.5"
}
},
- "node_modules/assert-plus": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
- "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=0.8"
- }
- },
"node_modules/ast-types-flow": {
"version": "0.0.8",
"resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.8.tgz",
@@ -6945,16 +6476,6 @@
"dev": true,
"license": "MIT"
},
- "node_modules/astral-regex": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz",
- "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=8"
- }
- },
"node_modules/async": {
"version": "3.2.6",
"resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz",
@@ -7009,23 +6530,6 @@
"url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/aws-sign2": {
- "version": "0.7.0",
- "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz",
- "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==",
- "dev": true,
- "license": "Apache-2.0",
- "engines": {
- "node": "*"
- }
- },
- "node_modules/aws4": {
- "version": "1.13.2",
- "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.13.2.tgz",
- "integrity": "sha512-lHe62zvbTB5eEABUVi/AwVh0ZKY9rMMDhmm+eeyuuUQbQ3+J+fONVQOZyj+DdrvD4BY33uYniyRJ4UJIaSKAfw==",
- "dev": true,
- "license": "MIT"
- },
"node_modules/axe-core": {
"version": "4.10.2",
"resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.10.2.tgz",
@@ -7037,9 +6541,9 @@
}
},
"node_modules/axios": {
- "version": "1.8.1",
- "resolved": "https://registry.npmjs.org/axios/-/axios-1.8.1.tgz",
- "integrity": "sha512-NN+fvwH/kV01dYUQ3PTOZns4LWtWhOFCAhQ/pHb88WQ1hNe5V/dvFwc4VJcDL11LT9xSX0QtsR8sWUuyOuOq7g==",
+ "version": "1.8.4",
+ "resolved": "https://registry.npmjs.org/axios/-/axios-1.8.4.tgz",
+ "integrity": "sha512-eBSYY4Y68NNlHbHBMdeDmKNtDgXWhQsJcGqzO3iLUM0GraQFSS9cVgPX5I9b3lbdFKyYoAEGAZF1DwhTaljNAw==",
"license": "MIT",
"dependencies": {
"follow-redirects": "^1.15.6",
@@ -7215,16 +6719,6 @@
],
"license": "MIT"
},
- "node_modules/bcrypt-pbkdf": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz",
- "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==",
- "dev": true,
- "license": "BSD-3-Clause",
- "dependencies": {
- "tweetnacl": "^0.14.3"
- }
- },
"node_modules/big-integer": {
"version": "1.6.52",
"resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.52.tgz",
@@ -7246,13 +6740,6 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/blob-util": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/blob-util/-/blob-util-2.0.2.tgz",
- "integrity": "sha512-T7JQa+zsXXEa6/8ZhHcQEW1UFfVM49Ts65uBkFL6fz2QmrElqmbajIDJvuA0tEhRe5eIjpV9ZF+0RfZR9voJFQ==",
- "dev": true,
- "license": "Apache-2.0"
- },
"node_modules/bloom-filters": {
"version": "3.0.4",
"resolved": "https://registry.npmjs.org/bloom-filters/-/bloom-filters-3.0.4.tgz",
@@ -7272,13 +6759,6 @@
"node": ">=12"
}
},
- "node_modules/bluebird": {
- "version": "3.7.2",
- "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz",
- "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==",
- "dev": true,
- "license": "MIT"
- },
"node_modules/bn.js": {
"version": "5.2.1",
"resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz",
@@ -7564,16 +7044,6 @@
"ieee754": "^1.1.13"
}
},
- "node_modules/buffer-crc32": {
- "version": "0.2.13",
- "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz",
- "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": "*"
- }
- },
"node_modules/buffer-from": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz",
@@ -7595,16 +7065,6 @@
"dev": true,
"license": "MIT"
},
- "node_modules/cachedir": {
- "version": "2.4.0",
- "resolved": "https://registry.npmjs.org/cachedir/-/cachedir-2.4.0.tgz",
- "integrity": "sha512-9EtFOZR8g22CL7BWjJ9BUx1+A/djkofnyW3aOXZORNW2kxoUpx2h+uN2cOqwPmFhnpVmxg+KW2OjOSgChTEvsQ==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=6"
- }
- },
"node_modules/call-bind": {
"version": "1.0.8",
"resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz",
@@ -7717,13 +7177,6 @@
"upper-case-first": "^2.0.2"
}
},
- "node_modules/caseless": {
- "version": "0.12.0",
- "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
- "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==",
- "dev": true,
- "license": "Apache-2.0"
- },
"node_modules/ccount": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/ccount/-/ccount-2.0.1.tgz",
@@ -7808,16 +7261,6 @@
"url": "https://github.com/sponsors/wooorm"
}
},
- "node_modules/check-more-types": {
- "version": "2.24.0",
- "resolved": "https://registry.npmjs.org/check-more-types/-/check-more-types-2.24.0.tgz",
- "integrity": "sha512-Pj779qHxV2tuapviy1bSZNEL1maXr13bPYpsvSDB68HlYcYuhlDrmGd63i0JHMCLKzc7rUSNIrpdJlhVlNwrxA==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 0.8.0"
- }
- },
"node_modules/chokidar": {
"version": "4.0.3",
"resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz",
@@ -7833,22 +7276,6 @@
"url": "https://paulmillr.com/funding/"
}
},
- "node_modules/ci-info": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.1.0.tgz",
- "integrity": "sha512-HutrvTNsF48wnxkzERIXOe5/mlcfFcbfCmwcg6CJnizbSue78AbDt+1cgl26zwn61WFxhcPykPfZrbqjGmBb4A==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/sibiraj-s"
- }
- ],
- "license": "MIT",
- "engines": {
- "node": ">=8"
- }
- },
"node_modules/cipher-base": {
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.6.tgz",
@@ -7869,62 +7296,6 @@
"integrity": "sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow==",
"license": "MIT"
},
- "node_modules/clean-stack": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz",
- "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/cli-cursor": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz",
- "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "restore-cursor": "^3.1.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/cli-table3": {
- "version": "0.6.5",
- "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.5.tgz",
- "integrity": "sha512-+W/5efTR7y5HRD7gACw9yQjqMVvEMLBHmboM/kPWam+H+Hmyrgjh6YncVKK122YZkXrLudzTuAukUw9FnMf7IQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "string-width": "^4.2.0"
- },
- "engines": {
- "node": "10.* || >= 12.*"
- },
- "optionalDependencies": {
- "@colors/colors": "1.5.0"
- }
- },
- "node_modules/cli-truncate": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz",
- "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "slice-ansi": "^3.0.0",
- "string-width": "^4.2.0"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
"node_modules/cliui": {
"version": "8.0.1",
"resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz",
@@ -7975,13 +7346,6 @@
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
"license": "MIT"
},
- "node_modules/colorette": {
- "version": "2.0.20",
- "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz",
- "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==",
- "dev": true,
- "license": "MIT"
- },
"node_modules/combined-stream": {
"version": "1.0.8",
"resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
@@ -8024,11 +7388,6 @@
"node": ">=4.0.0"
}
},
- "node_modules/component-indexof": {
- "version": "0.0.3",
- "resolved": "https://registry.npmjs.org/component-indexof/-/component-indexof-0.0.3.tgz",
- "integrity": "sha512-puDQKvx/64HZXb4hBwIcvQLaLgux8o1CbWl39s41hrIIZDl1lJiD5jc22gj3RBeGK0ovxALDYpIbyjqDUUl0rw=="
- },
"node_modules/compute-scroll-into-view": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/compute-scroll-into-view/-/compute-scroll-into-view-3.1.1.tgz",
@@ -8088,12 +7447,12 @@
"license": "MIT"
},
"node_modules/cookie": {
- "version": "0.7.2",
- "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz",
- "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==",
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/cookie/-/cookie-1.0.2.tgz",
+ "integrity": "sha512-9Kr/j4O16ISv8zBBhJoi4bXOYNTkFLOqSL3UDB0njXxCXNezjeyVrJyGOWtgfs/q2km1gwBcfH8q1yEGoMYunA==",
"license": "MIT",
"engines": {
- "node": ">= 0.6"
+ "node": ">=18"
}
},
"node_modules/copy-to-clipboard": {
@@ -8205,25 +7564,6 @@
"dev": true,
"license": "MIT"
},
- "node_modules/cross-env": {
- "version": "7.0.3",
- "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-7.0.3.tgz",
- "integrity": "sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "cross-spawn": "^7.0.1"
- },
- "bin": {
- "cross-env": "src/bin/cross-env.js",
- "cross-env-shell": "src/bin/cross-env-shell.js"
- },
- "engines": {
- "node": ">=10.14",
- "npm": ">=6",
- "yarn": ">=1"
- }
- },
"node_modules/cross-spawn": {
"version": "7.0.6",
"resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz",
@@ -8337,191 +7677,6 @@
"integrity": "sha512-d4ZVpCW31eWwCMe1YT3ur7mUDnTXbgwyzaL320DrcRT45rfjYxkt5QWLrmOJ+/UEAI2+fQgKe/fCjR8l4TpRgw==",
"license": "MIT"
},
- "node_modules/cypress": {
- "version": "13.17.0",
- "resolved": "https://registry.npmjs.org/cypress/-/cypress-13.17.0.tgz",
- "integrity": "sha512-5xWkaPurwkIljojFidhw8lFScyxhtiFHl/i/3zov+1Z5CmY4t9tjIdvSXfu82Y3w7wt0uR9KkucbhkVvJZLQSA==",
- "dev": true,
- "hasInstallScript": true,
- "license": "MIT",
- "dependencies": {
- "@cypress/request": "^3.0.6",
- "@cypress/xvfb": "^1.2.4",
- "@types/sinonjs__fake-timers": "8.1.1",
- "@types/sizzle": "^2.3.2",
- "arch": "^2.2.0",
- "blob-util": "^2.0.2",
- "bluebird": "^3.7.2",
- "buffer": "^5.7.1",
- "cachedir": "^2.3.0",
- "chalk": "^4.1.0",
- "check-more-types": "^2.24.0",
- "ci-info": "^4.0.0",
- "cli-cursor": "^3.1.0",
- "cli-table3": "~0.6.1",
- "commander": "^6.2.1",
- "common-tags": "^1.8.0",
- "dayjs": "^1.10.4",
- "debug": "^4.3.4",
- "enquirer": "^2.3.6",
- "eventemitter2": "6.4.7",
- "execa": "4.1.0",
- "executable": "^4.1.1",
- "extract-zip": "2.0.1",
- "figures": "^3.2.0",
- "fs-extra": "^9.1.0",
- "getos": "^3.2.1",
- "is-installed-globally": "~0.4.0",
- "lazy-ass": "^1.6.0",
- "listr2": "^3.8.3",
- "lodash": "^4.17.21",
- "log-symbols": "^4.0.0",
- "minimist": "^1.2.8",
- "ospath": "^1.2.2",
- "pretty-bytes": "^5.6.0",
- "process": "^0.11.10",
- "proxy-from-env": "1.0.0",
- "request-progress": "^3.0.0",
- "semver": "^7.5.3",
- "supports-color": "^8.1.1",
- "tmp": "~0.2.3",
- "tree-kill": "1.2.2",
- "untildify": "^4.0.0",
- "yauzl": "^2.10.0"
- },
- "bin": {
- "cypress": "bin/cypress"
- },
- "engines": {
- "node": "^16.0.0 || ^18.0.0 || >=20.0.0"
- }
- },
- "node_modules/cypress/node_modules/ansi-styles": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "color-convert": "^2.0.1"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/chalk/ansi-styles?sponsor=1"
- }
- },
- "node_modules/cypress/node_modules/chalk": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
- "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/chalk/chalk?sponsor=1"
- }
- },
- "node_modules/cypress/node_modules/chalk/node_modules/supports-color": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
- "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "has-flag": "^4.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/cypress/node_modules/commander": {
- "version": "6.2.1",
- "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz",
- "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/cypress/node_modules/execa": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz",
- "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "cross-spawn": "^7.0.0",
- "get-stream": "^5.0.0",
- "human-signals": "^1.1.1",
- "is-stream": "^2.0.0",
- "merge-stream": "^2.0.0",
- "npm-run-path": "^4.0.0",
- "onetime": "^5.1.0",
- "signal-exit": "^3.0.2",
- "strip-final-newline": "^2.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sindresorhus/execa?sponsor=1"
- }
- },
- "node_modules/cypress/node_modules/get-stream": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz",
- "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "pump": "^3.0.0"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/cypress/node_modules/human-signals": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz",
- "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==",
- "dev": true,
- "license": "Apache-2.0",
- "engines": {
- "node": ">=8.12.0"
- }
- },
- "node_modules/cypress/node_modules/proxy-from-env": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.0.0.tgz",
- "integrity": "sha512-F2JHgJQ1iqwnHDcQjVBsq3n/uoaFL+iPW/eAeL7kVxy/2RrWaN4WroKjjvbsoRtv0ftelNyC01bjRhn/bhcf4A==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/cypress/node_modules/semver": {
- "version": "7.7.0",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.0.tgz",
- "integrity": "sha512-DrfFnPzblFmNrIZzg5RzHegbiRWg7KMR7btwi2yjHwx06zsUbO5g613sVwEV7FTwmzJu+Io0lJe2GJ3LxqpvBQ==",
- "dev": true,
- "license": "ISC",
- "bin": {
- "semver": "bin/semver.js"
- },
- "engines": {
- "node": ">=10"
- }
- },
"node_modules/d3-array": {
"version": "3.2.4",
"resolved": "https://registry.npmjs.org/d3-array/-/d3-array-3.2.4.tgz",
@@ -8650,19 +7805,6 @@
"dev": true,
"license": "BSD-2-Clause"
},
- "node_modules/dashdash": {
- "version": "1.14.1",
- "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
- "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "assert-plus": "^1.0.0"
- },
- "engines": {
- "node": ">=0.10"
- }
- },
"node_modules/data-view-buffer": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.2.tgz",
@@ -8966,13 +8108,6 @@
"node": ">=6.0.0"
}
},
- "node_modules/dom-accessibility-api": {
- "version": "0.5.16",
- "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.5.16.tgz",
- "integrity": "sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==",
- "dev": true,
- "license": "MIT"
- },
"node_modules/dom-helpers": {
"version": "5.2.1",
"resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.2.1.tgz",
@@ -9056,17 +8191,6 @@
"dev": true,
"license": "MIT"
},
- "node_modules/ecc-jsbn": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz",
- "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "jsbn": "~0.1.0",
- "safer-buffer": "^2.1.0"
- }
- },
"node_modules/eciesjs": {
"version": "0.4.13",
"resolved": "https://registry.npmjs.org/eciesjs/-/eciesjs-0.4.13.tgz",
@@ -9136,16 +8260,6 @@
"dev": true,
"license": "MIT"
},
- "node_modules/end-of-stream": {
- "version": "1.4.4",
- "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz",
- "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "once": "^1.4.0"
- }
- },
"node_modules/engine.io-client": {
"version": "6.6.3",
"resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-6.6.3.tgz",
@@ -9185,20 +8299,6 @@
"node": ">=10.0.0"
}
},
- "node_modules/enquirer": {
- "version": "2.4.1",
- "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.4.1.tgz",
- "integrity": "sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "ansi-colors": "^4.1.1",
- "strip-ansi": "^6.0.1"
- },
- "engines": {
- "node": ">=8.6"
- }
- },
"node_modules/env-cmd": {
"version": "10.1.0",
"resolved": "https://registry.npmjs.org/env-cmd/-/env-cmd-10.1.0.tgz",
@@ -9618,48 +8718,6 @@
"ms": "^2.1.1"
}
},
- "node_modules/eslint-plugin-cypress": {
- "version": "2.15.2",
- "resolved": "https://registry.npmjs.org/eslint-plugin-cypress/-/eslint-plugin-cypress-2.15.2.tgz",
- "integrity": "sha512-CtcFEQTDKyftpI22FVGpx8bkpKyYXBlNge6zSo0pl5/qJvBAnzaD76Vu2AsP16d6mTj478Ldn2mhgrWV+Xr0vQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "globals": "^13.20.0"
- },
- "peerDependencies": {
- "eslint": ">= 3.2.1"
- }
- },
- "node_modules/eslint-plugin-cypress/node_modules/globals": {
- "version": "13.24.0",
- "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz",
- "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "type-fest": "^0.20.2"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/eslint-plugin-cypress/node_modules/type-fest": {
- "version": "0.20.2",
- "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz",
- "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==",
- "dev": true,
- "license": "(MIT OR CC0-1.0)",
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
"node_modules/eslint-plugin-flowtype": {
"version": "8.0.3",
"resolved": "https://registry.npmjs.org/eslint-plugin-flowtype/-/eslint-plugin-flowtype-8.0.3.tgz",
@@ -10124,13 +9182,6 @@
"node": ">=0.10.0"
}
},
- "node_modules/eventemitter2": {
- "version": "6.4.7",
- "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-6.4.7.tgz",
- "integrity": "sha512-tYUSVOGeQPKt/eC1ABfhHy5Xd96N3oIijJvN3O9+TsC28T5V9yX9oEfEK5faP0EFSNVOG97qtAS68GBrQB2hDg==",
- "dev": true,
- "license": "MIT"
- },
"node_modules/eventemitter3": {
"version": "4.0.7",
"resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz",
@@ -10182,19 +9233,6 @@
"url": "https://github.com/sindresorhus/execa?sponsor=1"
}
},
- "node_modules/executable": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/executable/-/executable-4.1.1.tgz",
- "integrity": "sha512-8iA79xD3uAch729dUG8xaaBBFGaEa0wdD2VkYLFHwlqosEj/jT66AzcreRDSgV7ehnNLBW2WR5jIXwGKjVdTLg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "pify": "^2.2.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
"node_modules/exenv": {
"version": "1.2.2",
"resolved": "https://registry.npmjs.org/exenv/-/exenv-1.2.2.tgz",
@@ -10213,53 +9251,6 @@
"integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==",
"license": "MIT"
},
- "node_modules/extract-zip": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz",
- "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==",
- "dev": true,
- "license": "BSD-2-Clause",
- "dependencies": {
- "debug": "^4.1.1",
- "get-stream": "^5.1.0",
- "yauzl": "^2.10.0"
- },
- "bin": {
- "extract-zip": "cli.js"
- },
- "engines": {
- "node": ">= 10.17.0"
- },
- "optionalDependencies": {
- "@types/yauzl": "^2.9.1"
- }
- },
- "node_modules/extract-zip/node_modules/get-stream": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz",
- "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "pump": "^3.0.0"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/extsprintf": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz",
- "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==",
- "dev": true,
- "engines": [
- "node >=0.6.0"
- ],
- "license": "MIT"
- },
"node_modules/fast-deep-equal": {
"version": "3.1.3",
"resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
@@ -10347,28 +9338,6 @@
"reusify": "^1.0.4"
}
},
- "node_modules/faye-websocket": {
- "version": "0.11.4",
- "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz",
- "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==",
- "license": "Apache-2.0",
- "dependencies": {
- "websocket-driver": ">=0.5.1"
- },
- "engines": {
- "node": ">=0.8.0"
- }
- },
- "node_modules/fd-slicer": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz",
- "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "pend": "~1.2.0"
- }
- },
"node_modules/fdir": {
"version": "6.4.3",
"resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.3.tgz",
@@ -10384,32 +9353,6 @@
}
}
},
- "node_modules/figures": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz",
- "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "escape-string-regexp": "^1.0.5"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/figures/node_modules/escape-string-regexp": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
- "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=0.8.0"
- }
- },
"node_modules/file-entry-cache": {
"version": "6.0.1",
"resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz",
@@ -10500,42 +9443,6 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/firebase": {
- "version": "10.14.1",
- "resolved": "https://registry.npmjs.org/firebase/-/firebase-10.14.1.tgz",
- "integrity": "sha512-0KZxU+Ela9rUCULqFsUUOYYkjh7OM1EWdIfG6///MtXd0t2/uUIf0iNV5i0KariMhRQ5jve/OY985nrAXFaZeQ==",
- "license": "Apache-2.0",
- "dependencies": {
- "@firebase/analytics": "0.10.8",
- "@firebase/analytics-compat": "0.2.14",
- "@firebase/app": "0.10.13",
- "@firebase/app-check": "0.8.8",
- "@firebase/app-check-compat": "0.3.15",
- "@firebase/app-compat": "0.2.43",
- "@firebase/app-types": "0.9.2",
- "@firebase/auth": "1.7.9",
- "@firebase/auth-compat": "0.5.14",
- "@firebase/data-connect": "0.1.0",
- "@firebase/database": "1.0.8",
- "@firebase/database-compat": "1.0.8",
- "@firebase/firestore": "4.7.3",
- "@firebase/firestore-compat": "0.3.38",
- "@firebase/functions": "0.11.8",
- "@firebase/functions-compat": "0.3.14",
- "@firebase/installations": "0.6.9",
- "@firebase/installations-compat": "0.2.9",
- "@firebase/messaging": "0.12.12",
- "@firebase/messaging-compat": "0.2.12",
- "@firebase/performance": "0.6.9",
- "@firebase/performance-compat": "0.2.9",
- "@firebase/remote-config": "0.4.9",
- "@firebase/remote-config-compat": "0.2.9",
- "@firebase/storage": "0.13.2",
- "@firebase/storage-compat": "0.3.12",
- "@firebase/util": "1.10.0",
- "@firebase/vertexai-preview": "0.0.4"
- }
- },
"node_modules/flat-cache": {
"version": "3.2.0",
"resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz",
@@ -10594,16 +9501,6 @@
"url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/forever-agent": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
- "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==",
- "dev": true,
- "license": "Apache-2.0",
- "engines": {
- "node": "*"
- }
- },
"node_modules/form-data": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.1.tgz",
@@ -10790,26 +9687,6 @@
"url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/getos": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/getos/-/getos-3.2.1.tgz",
- "integrity": "sha512-U56CfOK17OKgTVqozZjUKNdkfEv6jk5WISBJ8SHoagjE6L69zOwl3Z+O8myjY9MEW3i2HPWQBt/LTbCgcC973Q==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "async": "^3.2.0"
- }
- },
- "node_modules/getpass": {
- "version": "0.1.7",
- "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz",
- "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "assert-plus": "^1.0.0"
- }
- },
"node_modules/glob": {
"version": "9.3.5",
"resolved": "https://registry.npmjs.org/glob/-/glob-9.3.5.tgz",
@@ -10865,22 +9742,6 @@
"url": "https://github.com/sponsors/isaacs"
}
},
- "node_modules/global-dirs": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.1.tgz",
- "integrity": "sha512-NBcGGFbBA9s1VzD41QXDG+3++t9Mn5t1FpLdhESY6oKY4gYTFpX4wO3sqGUa0Srjtbfj3szX0RnemmrVRUdULA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "ini": "2.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
"node_modules/globalize": {
"version": "0.1.1",
"resolved": "https://registry.npmjs.org/globalize/-/globalize-0.1.1.tgz",
@@ -11213,27 +10074,6 @@
"url": "https://opencollective.com/unified"
}
},
- "node_modules/http-parser-js": {
- "version": "0.5.9",
- "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.9.tgz",
- "integrity": "sha512-n1XsPy3rXVxlqxVioEWdC+0+M+SQw0DpJynwtOPo1X+ZlvdzTLtDBIJJlDQTnwZIFJrZSzSGmIOUdP8tu+SgLw==",
- "license": "MIT"
- },
- "node_modules/http-signature": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.4.0.tgz",
- "integrity": "sha512-G5akfn7eKbpDN+8nPS/cb57YeA1jLTVxjpCj7tmm3QKPdyDy7T+qSC40e9ptydSWvkwjSXw1VbkpyEm39ukeAg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "assert-plus": "^1.0.0",
- "jsprim": "^2.0.2",
- "sshpk": "^1.18.0"
- },
- "engines": {
- "node": ">=0.10"
- }
- },
"node_modules/https-browserify": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz",
@@ -11275,9 +10115,9 @@
}
},
"node_modules/i18next": {
- "version": "23.16.8",
- "resolved": "https://registry.npmjs.org/i18next/-/i18next-23.16.8.tgz",
- "integrity": "sha512-06r/TitrM88Mg5FdUXAKL96dJMzgqLE5dv3ryBAra4KCwD9mJ4ndOTS95ZuymIGoE+2hzfdaMak2X11/es7ZWg==",
+ "version": "24.2.3",
+ "resolved": "https://registry.npmjs.org/i18next/-/i18next-24.2.3.tgz",
+ "integrity": "sha512-lfbf80OzkocvX7nmZtu7nSTNbrTYR52sLWxPtlXX1zAhVw8WEnFk4puUkCR4B1dNQwbSpEHHHemcZu//7EcB7A==",
"funding": [
{
"type": "individual",
@@ -11294,7 +10134,15 @@
],
"license": "MIT",
"dependencies": {
- "@babel/runtime": "^7.23.2"
+ "@babel/runtime": "^7.26.10"
+ },
+ "peerDependencies": {
+ "typescript": "^5"
+ },
+ "peerDependenciesMeta": {
+ "typescript": {
+ "optional": true
+ }
}
},
"node_modules/i18next-browser-languagedetector": {
@@ -11392,16 +10240,6 @@
"node": ">=0.8.19"
}
},
- "node_modules/indent-string": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz",
- "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=8"
- }
- },
"node_modules/inflight": {
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
@@ -11419,16 +10257,6 @@
"integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
"license": "ISC"
},
- "node_modules/ini": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz",
- "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==",
- "dev": true,
- "license": "ISC",
- "engines": {
- "node": ">=10"
- }
- },
"node_modules/inline-style-parser": {
"version": "0.2.4",
"resolved": "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.2.4.tgz",
@@ -11469,11 +10297,12 @@
}
},
"node_modules/ioredis": {
- "version": "4.28.5",
- "resolved": "https://registry.npmjs.org/ioredis/-/ioredis-4.28.5.tgz",
- "integrity": "sha512-3GYo0GJtLqgNXj4YhrisLaNNvWSNwSS2wS4OELGfGxH8I69+XfNdnmV1AyN+ZqMh0i7eX+SWjrwFKDBDgfBC1A==",
+ "version": "4.29.1",
+ "resolved": "https://registry.npmjs.org/ioredis/-/ioredis-4.29.1.tgz",
+ "integrity": "sha512-iq4u3AC9h9/P/gBXH1cUR7Ln0exKexqMaYDwUaoZJzkvvgJs9W5+CLQFS0APyG8uyvJJjn6q6Vx7LwmZQu3h5A==",
"license": "MIT",
"dependencies": {
+ "@ioredis/commands": "^1.0.2",
"cluster-key-slot": "^1.1.0",
"debug": "^4.3.1",
"denque": "^1.1.0",
@@ -11481,7 +10310,6 @@
"lodash.flatten": "^4.4.0",
"lodash.isarguments": "^3.1.0",
"p-map": "^2.1.0",
- "redis-commands": "1.7.0",
"redis-errors": "^1.2.0",
"redis-parser": "^3.0.0",
"standard-as-callback": "^2.1.0"
@@ -11494,15 +10322,6 @@
"url": "https://opencollective.com/ioredis"
}
},
- "node_modules/is": {
- "version": "3.3.0",
- "resolved": "https://registry.npmjs.org/is/-/is-3.3.0.tgz",
- "integrity": "sha512-nW24QBoPcFGGHJGUwnfpI7Yc5CdqWNdsyHQszVE/z2pKHXzh7FZ5GWhJqSyaQ9wMkQnsTx+kAI8bHlCX4tKdbg==",
- "license": "MIT",
- "engines": {
- "node": "*"
- }
- },
"node_modules/is-alphabetical": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-2.0.1.tgz",
@@ -11822,23 +10641,6 @@
"url": "https://github.com/sponsors/wooorm"
}
},
- "node_modules/is-installed-globally": {
- "version": "0.4.0",
- "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.4.0.tgz",
- "integrity": "sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "global-dirs": "^3.0.0",
- "is-path-inside": "^3.0.2"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
"node_modules/is-map": {
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz",
@@ -12055,26 +10857,6 @@
"url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/is-typedarray": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
- "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/is-unicode-supported": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz",
- "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
"node_modules/is-weakmap": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz",
@@ -12161,13 +10943,6 @@
"node": ">=10"
}
},
- "node_modules/isstream": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
- "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==",
- "dev": true,
- "license": "MIT"
- },
"node_modules/iterall": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/iterall/-/iterall-1.3.0.tgz",
@@ -12278,13 +11053,6 @@
"js-yaml": "bin/js-yaml.js"
}
},
- "node_modules/jsbn": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
- "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==",
- "dev": true,
- "license": "MIT"
- },
"node_modules/jsesc": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz",
@@ -12332,13 +11100,6 @@
"dev": true,
"license": "MIT"
},
- "node_modules/json-stringify-safe": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
- "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==",
- "dev": true,
- "license": "ISC"
- },
"node_modules/json2mq": {
"version": "0.2.0",
"resolved": "https://registry.npmjs.org/json2mq/-/json2mq-0.2.0.tgz",
@@ -12383,22 +11144,6 @@
"node": ">=0.10.0"
}
},
- "node_modules/jsprim": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-2.0.2.tgz",
- "integrity": "sha512-gqXddjPqQ6G40VdnI6T6yObEC+pDNvyP95wdQhkWkg7crHH3km5qP1FsOXEkzEQwnz6gz5qGTn1c2Y52wP3OyQ==",
- "dev": true,
- "engines": [
- "node >=0.6.0"
- ],
- "license": "MIT",
- "dependencies": {
- "assert-plus": "1.0.0",
- "extsprintf": "1.3.0",
- "json-schema": "0.4.0",
- "verror": "1.10.0"
- }
- },
"node_modules/jsx-ast-utils": {
"version": "3.3.5",
"resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz",
@@ -12451,16 +11196,6 @@
"node": ">=0.10"
}
},
- "node_modules/lazy-ass": {
- "version": "1.6.0",
- "resolved": "https://registry.npmjs.org/lazy-ass/-/lazy-ass-1.6.0.tgz",
- "integrity": "sha512-cc8oEVoctTvsFZ/Oje/kGnHbpWHYBe8IAJe4C0QNc3t8uM/0Y8+erSz/7Y1ALuXTEZTMvxXwO6YbX1ey3ujiZw==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": "> 0.8"
- }
- },
"node_modules/leven": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz",
@@ -12486,9 +11221,9 @@
}
},
"node_modules/libphonenumber-js": {
- "version": "1.12.4",
- "resolved": "https://registry.npmjs.org/libphonenumber-js/-/libphonenumber-js-1.12.4.tgz",
- "integrity": "sha512-vLmhg7Gan7idyAKfc6pvCtNzvar4/eIzrVVk3hjNFH5+fGqyjD0gQRovdTrDl20wsmZhBtmZpcsR0tOfquwb8g==",
+ "version": "1.12.6",
+ "resolved": "https://registry.npmjs.org/libphonenumber-js/-/libphonenumber-js-1.12.6.tgz",
+ "integrity": "sha512-PJiS4ETaUfCOFLpmtKzAbqZQjCCKVu2OhTV4SVNNE7c2nu/dACvtCqj4L0i/KWNnIgRv7yrILvBj5Lonv5Ncxw==",
"license": "MIT"
},
"node_modules/lines-and-columns": {
@@ -12498,50 +11233,6 @@
"dev": true,
"license": "MIT"
},
- "node_modules/listr2": {
- "version": "3.14.0",
- "resolved": "https://registry.npmjs.org/listr2/-/listr2-3.14.0.tgz",
- "integrity": "sha512-TyWI8G99GX9GjE54cJ+RrNMcIFBfwMPxc3XTFiAYGN4s10hWROGtOg7+O6u6LE3mNkyld7RSLE6nrKBvTfcs3g==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "cli-truncate": "^2.1.0",
- "colorette": "^2.0.16",
- "log-update": "^4.0.0",
- "p-map": "^4.0.0",
- "rfdc": "^1.3.0",
- "rxjs": "^7.5.1",
- "through": "^2.3.8",
- "wrap-ansi": "^7.0.0"
- },
- "engines": {
- "node": ">=10.0.0"
- },
- "peerDependencies": {
- "enquirer": ">= 2.3.0 < 3"
- },
- "peerDependenciesMeta": {
- "enquirer": {
- "optional": true
- }
- }
- },
- "node_modules/listr2/node_modules/p-map": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz",
- "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "aggregate-error": "^3.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
"node_modules/locate-path": {
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
@@ -12614,13 +11305,6 @@
"dev": true,
"license": "MIT"
},
- "node_modules/lodash.once": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz",
- "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==",
- "dev": true,
- "license": "MIT"
- },
"node_modules/lodash.sortby": {
"version": "4.7.0",
"resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz",
@@ -12628,141 +11312,10 @@
"dev": true,
"license": "MIT"
},
- "node_modules/log-symbols": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz",
- "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "chalk": "^4.1.0",
- "is-unicode-supported": "^0.1.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/log-symbols/node_modules/ansi-styles": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "color-convert": "^2.0.1"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/chalk/ansi-styles?sponsor=1"
- }
- },
- "node_modules/log-symbols/node_modules/chalk": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
- "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/chalk/chalk?sponsor=1"
- }
- },
- "node_modules/log-symbols/node_modules/supports-color": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
- "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "has-flag": "^4.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/log-update": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/log-update/-/log-update-4.0.0.tgz",
- "integrity": "sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "ansi-escapes": "^4.3.0",
- "cli-cursor": "^3.1.0",
- "slice-ansi": "^4.0.0",
- "wrap-ansi": "^6.2.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/log-update/node_modules/ansi-styles": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "color-convert": "^2.0.1"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/chalk/ansi-styles?sponsor=1"
- }
- },
- "node_modules/log-update/node_modules/slice-ansi": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz",
- "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "ansi-styles": "^4.0.0",
- "astral-regex": "^2.0.0",
- "is-fullwidth-code-point": "^3.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/chalk/slice-ansi?sponsor=1"
- }
- },
- "node_modules/log-update/node_modules/wrap-ansi": {
- "version": "6.2.0",
- "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz",
- "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "ansi-styles": "^4.0.0",
- "string-width": "^4.1.0",
- "strip-ansi": "^6.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
"node_modules/logrocket": {
- "version": "8.1.3",
- "resolved": "https://registry.npmjs.org/logrocket/-/logrocket-8.1.3.tgz",
- "integrity": "sha512-lWuFhkWYMtARJ2BZUrxP54Dtn3TskpLZ0kDhp14BkrapFQihcN0GB8pvy2vP1OdRFFVh3pAG7AWo/BUbQ9SIbg==",
+ "version": "9.0.2",
+ "resolved": "https://registry.npmjs.org/logrocket/-/logrocket-9.0.2.tgz",
+ "integrity": "sha512-DscsCEi9PLEEXPXWOsf+BGsmwZGIFzn9Ixo+lTezFpR2o3xzZxD7Qz3FWecYYuci6SKvalVciy6msVvMjD16PA==",
"license": "MIT"
},
"node_modules/long": {
@@ -12821,16 +11374,6 @@
"node": ">=12"
}
},
- "node_modules/lz-string": {
- "version": "1.5.0",
- "resolved": "https://registry.npmjs.org/lz-string/-/lz-string-1.5.0.tgz",
- "integrity": "sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==",
- "dev": true,
- "license": "MIT",
- "bin": {
- "lz-string": "bin/bin.js"
- }
- },
"node_modules/magic-string": {
"version": "0.30.8",
"resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.8.tgz",
@@ -12844,9 +11387,9 @@
}
},
"node_modules/markerjs2": {
- "version": "2.32.3",
- "resolved": "https://registry.npmjs.org/markerjs2/-/markerjs2-2.32.3.tgz",
- "integrity": "sha512-D7oD4BT5NOsQbugdcO2TFmcw9ZMHp96Ih09A5f0UndxiQNWuz+j5zymtkTHs0WU+oOR8K6dyTufv4KtfJ6diBg==",
+ "version": "2.32.4",
+ "resolved": "https://registry.npmjs.org/markerjs2/-/markerjs2-2.32.4.tgz",
+ "integrity": "sha512-pk8gZMqSw0iDwSuH4Rt3jsYwA2J0EYUngIFIUvkHFVTiZPK+djuwrv4wfdK81I81FqnQ5iYp9buv/Sjg3Td0Tw==",
"license": "SEE LICENSE IN LICENSE"
},
"node_modules/material-colors": {
@@ -13863,12 +12406,6 @@
"node": ">=8"
}
},
- "node_modules/obj-case": {
- "version": "0.2.1",
- "resolved": "https://registry.npmjs.org/obj-case/-/obj-case-0.2.1.tgz",
- "integrity": "sha512-PquYBBTy+Y6Ob/O2574XHhDtHJlV1cJHMCgW+rDRc9J5hhmRelJB3k5dTK/3cVmFVtzvAKuENeuLpoyTzMzkOg==",
- "license": "MIT"
- },
"node_modules/object-assign": {
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
@@ -14111,13 +12648,6 @@
"dev": true,
"license": "MIT"
},
- "node_modules/ospath": {
- "version": "1.2.2",
- "resolved": "https://registry.npmjs.org/ospath/-/ospath-1.2.2.tgz",
- "integrity": "sha512-o6E5qJV5zkAbIDNhGSIlyOhScKXgQrSRMilfph0clDfM0nEnBOlKlH4sWDmG95BW/CvwNz0vmm7dJVtU2KlMiA==",
- "dev": true,
- "license": "MIT"
- },
"node_modules/own-keys": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/own-keys/-/own-keys-1.0.1.tgz",
@@ -14405,13 +12935,6 @@
"node": ">=0.12"
}
},
- "node_modules/pend": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz",
- "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==",
- "dev": true,
- "license": "MIT"
- },
"node_modules/performance-now": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",
@@ -14437,16 +12960,6 @@
"url": "https://github.com/sponsors/jonschlinkert"
}
},
- "node_modules/pify": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
- "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=0.10.0"
- }
- },
"node_modules/pkg-dir": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-5.0.0.tgz",
@@ -14527,28 +13040,6 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/pretty-format": {
- "version": "27.5.1",
- "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz",
- "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "ansi-regex": "^5.0.1",
- "ansi-styles": "^5.0.0",
- "react-is": "^17.0.1"
- },
- "engines": {
- "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
- }
- },
- "node_modules/pretty-format/node_modules/react-is": {
- "version": "17.0.2",
- "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz",
- "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==",
- "dev": true,
- "license": "MIT"
- },
"node_modules/process": {
"version": "0.11.10",
"resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz",
@@ -14654,17 +13145,6 @@
"dev": true,
"license": "MIT"
},
- "node_modules/pump": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.2.tgz",
- "integrity": "sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "end-of-stream": "^1.1.0",
- "once": "^1.3.1"
- }
- },
"node_modules/punycode": {
"version": "2.3.1",
"resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz",
@@ -14775,9 +13255,9 @@
}
},
"node_modules/rc-cascader": {
- "version": "3.33.0",
- "resolved": "https://registry.npmjs.org/rc-cascader/-/rc-cascader-3.33.0.tgz",
- "integrity": "sha512-JvZrMbKBXIbEDmpIORxqvedY/bck6hGbs3hxdWT8eS9wSQ1P7//lGxbyKjOSyQiVBbgzNWriSe6HoMcZO/+0rQ==",
+ "version": "3.33.1",
+ "resolved": "https://registry.npmjs.org/rc-cascader/-/rc-cascader-3.33.1.tgz",
+ "integrity": "sha512-Kyl4EJ7ZfCBuidmZVieegcbFw0RcU5bHHSbtEdmuLYd0fYHCAiYKZ6zon7fWAVyC6rWWOOib0XKdTSf7ElC9rg==",
"license": "MIT",
"dependencies": {
"@babel/runtime": "^7.25.7",
@@ -14891,9 +13371,9 @@
}
},
"node_modules/rc-image": {
- "version": "7.11.0",
- "resolved": "https://registry.npmjs.org/rc-image/-/rc-image-7.11.0.tgz",
- "integrity": "sha512-aZkTEZXqeqfPZtnSdNUnKQA0N/3MbgR7nUnZ+/4MfSFWPFHZau4p5r5ShaI0KPEMnNjv4kijSCFq/9wtJpwykw==",
+ "version": "7.11.1",
+ "resolved": "https://registry.npmjs.org/rc-image/-/rc-image-7.11.1.tgz",
+ "integrity": "sha512-XuoWx4KUXg7hNy5mRTy1i8c8p3K8boWg6UajbHpDXS5AlRVucNfTi5YxTtPBTBzegxAZpvuLfh3emXFt6ybUdA==",
"license": "MIT",
"dependencies": {
"@babel/runtime": "^7.11.2",
@@ -14909,9 +13389,9 @@
}
},
"node_modules/rc-input": {
- "version": "1.7.2",
- "resolved": "https://registry.npmjs.org/rc-input/-/rc-input-1.7.2.tgz",
- "integrity": "sha512-g3nYONnl4edWj2FfVoxsU3Ec4XTE+Hb39Kfh2MFxMZjp/0gGyPUgy/v7ZhS27ZxUFNkuIDYXm9PJsLyJbtg86A==",
+ "version": "1.7.3",
+ "resolved": "https://registry.npmjs.org/rc-input/-/rc-input-1.7.3.tgz",
+ "integrity": "sha512-A5w4egJq8+4JzlQ55FfQjDnPvOaAbzwC3VLOAdOytyek3TboSOP9qxN+Gifup+shVXfvecBLBbWBpWxmk02SWQ==",
"license": "MIT",
"dependencies": {
"@babel/runtime": "^7.11.1",
@@ -15220,9 +13700,9 @@
}
},
"node_modules/rc-table": {
- "version": "7.50.3",
- "resolved": "https://registry.npmjs.org/rc-table/-/rc-table-7.50.3.tgz",
- "integrity": "sha512-Z4/zNCzjv7f/XzPRecb+vJU0DJKdsYt4YRkDzNl4G05m7JmxrKGYC2KqN1Ew6jw2zJq7cxVv3z39qyZOHMuf7A==",
+ "version": "7.50.4",
+ "resolved": "https://registry.npmjs.org/rc-table/-/rc-table-7.50.4.tgz",
+ "integrity": "sha512-Y+YuncnQqoS5e7yHvfvlv8BmCvwDYDX/2VixTBEhkMDk9itS9aBINp4nhzXFKiBP/frG4w0pS9d9Rgisl0T1Bw==",
"license": "MIT",
"dependencies": {
"@babel/runtime": "^7.10.1",
@@ -15296,9 +13776,9 @@
}
},
"node_modules/rc-tree": {
- "version": "5.13.0",
- "resolved": "https://registry.npmjs.org/rc-tree/-/rc-tree-5.13.0.tgz",
- "integrity": "sha512-2+lFvoVRnvHQ1trlpXMOWtF8BUgF+3TiipG72uOfhpL5CUdXCk931kvDdUkTL/IZVtNEDQKwEEmJbAYJSA5NnA==",
+ "version": "5.13.1",
+ "resolved": "https://registry.npmjs.org/rc-tree/-/rc-tree-5.13.1.tgz",
+ "integrity": "sha512-FNhIefhftobCdUJshO7M8uZTA9F4OPGVXqGfZkkD/5soDeOhwO06T/aKTrg0WD8gRg/pyfq+ql3aMymLHCTC4A==",
"license": "MIT",
"dependencies": {
"@babel/runtime": "^7.10.1",
@@ -15445,14 +13925,14 @@
}
},
"node_modules/react-cookie": {
- "version": "7.2.2",
- "resolved": "https://registry.npmjs.org/react-cookie/-/react-cookie-7.2.2.tgz",
- "integrity": "sha512-e+hi6axHcw9VODoeVu8WyMWyoosa1pzpyjfvrLdF7CexfU+WSGZdDuRfHa4RJgTpfv3ZjdIpHE14HpYBieHFhg==",
+ "version": "8.0.1",
+ "resolved": "https://registry.npmjs.org/react-cookie/-/react-cookie-8.0.1.tgz",
+ "integrity": "sha512-QNdAd0MLuAiDiLcDU/2s/eyKmmfMHtjPUKJ2dZ/5CcQ9QKUium4B3o61/haq6PQl/YWFqC5PO8GvxeHKhy3GFA==",
"license": "MIT",
"dependencies": {
- "@types/hoist-non-react-statics": "^3.3.5",
+ "@types/hoist-non-react-statics": "^3.3.6",
"hoist-non-react-statics": "^3.3.2",
- "universal-cookie": "^7.0.0"
+ "universal-cookie": "^8.0.0"
},
"peerDependencies": {
"react": ">= 16.3.0"
@@ -15529,12 +14009,12 @@
}
},
"node_modules/react-i18next": {
- "version": "14.1.3",
- "resolved": "https://registry.npmjs.org/react-i18next/-/react-i18next-14.1.3.tgz",
- "integrity": "sha512-wZnpfunU6UIAiJ+bxwOiTmBOAaB14ha97MjOEnLGac2RJ+h/maIYXZuTHlmyqQVX1UVHmU1YDTQ5vxLmwfXTjw==",
+ "version": "15.4.1",
+ "resolved": "https://registry.npmjs.org/react-i18next/-/react-i18next-15.4.1.tgz",
+ "integrity": "sha512-ahGab+IaSgZmNPYXdV1n+OYky95TGpFwnKRflX/16dY04DsYYKHtVLjeny7sBSCREEcoMbAgSkFiGLF5g5Oofw==",
"license": "MIT",
"dependencies": {
- "@babel/runtime": "^7.23.9",
+ "@babel/runtime": "^7.25.0",
"html-parse-stringify": "^3.0.1"
},
"peerDependencies": {
@@ -15587,12 +14067,13 @@
"license": "MIT"
},
"node_modules/react-markdown": {
- "version": "9.0.3",
- "resolved": "https://registry.npmjs.org/react-markdown/-/react-markdown-9.0.3.tgz",
- "integrity": "sha512-Yk7Z94dbgYTOrdk41Z74GoKA7rThnsbbqBTRYuxoe08qvfQ9tJVhmAKw6BJS/ZORG7kTy/s1QvYzSuaoBA1qfw==",
+ "version": "10.1.0",
+ "resolved": "https://registry.npmjs.org/react-markdown/-/react-markdown-10.1.0.tgz",
+ "integrity": "sha512-qKxVopLT/TyA6BX3Ue5NwabOsAzm0Q7kAPwq6L+wWDwisYs7R8vZ0nRXqq6rkueboxpkjvLGU9fWifiX/ZZFxQ==",
"license": "MIT",
"dependencies": {
"@types/hast": "^3.0.0",
+ "@types/mdast": "^4.0.0",
"devlop": "^1.0.0",
"hast-util-to-jsx-runtime": "^2.0.0",
"html-url-attributes": "^3.0.0",
@@ -15905,12 +14386,6 @@
"integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==",
"license": "MIT"
},
- "node_modules/redis-commands": {
- "version": "1.7.0",
- "resolved": "https://registry.npmjs.org/redis-commands/-/redis-commands-1.7.0.tgz",
- "integrity": "sha512-nJWqw3bTFy21hX/CPKHth6sfhZbdiHP6bTawSgQBlKOVRG7EZkfHbbHwQJnrE4vsQf0CMNE+3gJ4Fmm16vdVlQ==",
- "license": "MIT"
- },
"node_modules/redis-errors": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/redis-errors/-/redis-errors-1.2.0.tgz",
@@ -16188,16 +14663,6 @@
"url": "https://opencollective.com/unified"
}
},
- "node_modules/request-progress": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/request-progress/-/request-progress-3.0.0.tgz",
- "integrity": "sha512-MnWzEHHaxHO2iWiQuHrUPBi/1WeBf5PkxQqNyNvLl9VAYSdXkP8tQ3pBSeCPD+yw0v0Aq1zosWLz0BdeXpWwZg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "throttleit": "^1.0.0"
- }
- },
"node_modules/require-directory": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
@@ -16260,20 +14725,6 @@
"node": ">=4"
}
},
- "node_modules/restore-cursor": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz",
- "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "onetime": "^5.1.0",
- "signal-exit": "^3.0.2"
- },
- "engines": {
- "node": ">=8"
- }
- },
"node_modules/reusify": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
@@ -16285,13 +14736,6 @@
"node": ">=0.10.0"
}
},
- "node_modules/rfdc": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.4.1.tgz",
- "integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==",
- "dev": true,
- "license": "MIT"
- },
"node_modules/rimraf": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
@@ -16431,16 +14875,6 @@
"queue-microtask": "^1.2.2"
}
},
- "node_modules/rxjs": {
- "version": "7.8.1",
- "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz",
- "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==",
- "dev": true,
- "license": "Apache-2.0",
- "dependencies": {
- "tslib": "^2.1.0"
- }
- },
"node_modules/safe-array-concat": {
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.3.tgz",
@@ -16465,6 +14899,7 @@
"version": "5.2.1",
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
"integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
+ "dev": true,
"funding": [
{
"type": "github",
@@ -16525,17 +14960,10 @@
"node": ">=10"
}
},
- "node_modules/safer-buffer": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
- "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
- "dev": true,
- "license": "MIT"
- },
"node_modules/sass": {
- "version": "1.85.1",
- "resolved": "https://registry.npmjs.org/sass/-/sass-1.85.1.tgz",
- "integrity": "sha512-Uk8WpxM5v+0cMR0XjX9KfRIacmSG86RH4DCCZjLU2rFh5tyutt9siAXJ7G+YfxQ99Q6wrRMbMlVl6KqUms71ag==",
+ "version": "1.86.0",
+ "resolved": "https://registry.npmjs.org/sass/-/sass-1.86.0.tgz",
+ "integrity": "sha512-zV8vGUld/+mP4KbMLJMX7TyGCuUp7hnkOScgCMsWuHtns8CWBoz+vmEhoGMXsaJrbUP8gj+F1dLvVe79sK8UdA==",
"license": "MIT",
"dependencies": {
"chokidar": "^4.0.0",
@@ -16797,37 +15225,6 @@
"node": ">=8"
}
},
- "node_modules/slice-ansi": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz",
- "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "ansi-styles": "^4.0.0",
- "astral-regex": "^2.0.0",
- "is-fullwidth-code-point": "^3.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/slice-ansi/node_modules/ansi-styles": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "color-convert": "^2.0.1"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/chalk/ansi-styles?sponsor=1"
- }
- },
"node_modules/smob": {
"version": "1.5.0",
"resolved": "https://registry.npmjs.org/smob/-/smob-1.5.0.tgz",
@@ -17131,32 +15528,6 @@
"integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==",
"license": "BSD-3-Clause"
},
- "node_modules/sshpk": {
- "version": "1.18.0",
- "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.18.0.tgz",
- "integrity": "sha512-2p2KJZTSqQ/I3+HX42EpYOa2l3f8Erv8MWKsy2I9uf4wA7yFIkXRffYdsx86y6z4vHtV8u7g+pPlr8/4ouAxsQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "asn1": "~0.2.3",
- "assert-plus": "^1.0.0",
- "bcrypt-pbkdf": "^1.0.0",
- "dashdash": "^1.12.0",
- "ecc-jsbn": "~0.1.1",
- "getpass": "^0.1.1",
- "jsbn": "~0.1.0",
- "safer-buffer": "^2.0.2",
- "tweetnacl": "~0.14.0"
- },
- "bin": {
- "sshpk-conv": "bin/sshpk-conv",
- "sshpk-sign": "bin/sshpk-sign",
- "sshpk-verify": "bin/sshpk-verify"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
"node_modules/standard-as-callback": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/standard-as-callback/-/standard-as-callback-2.1.0.tgz",
@@ -17447,9 +15818,9 @@
}
},
"node_modules/styled-components": {
- "version": "6.1.15",
- "resolved": "https://registry.npmjs.org/styled-components/-/styled-components-6.1.15.tgz",
- "integrity": "sha512-PpOTEztW87Ua2xbmLa7yssjNyUF9vE7wdldRfn1I2E6RTkqknkBYpj771OxM/xrvRGinLy2oysa7GOd7NcZZIA==",
+ "version": "6.1.16",
+ "resolved": "https://registry.npmjs.org/styled-components/-/styled-components-6.1.16.tgz",
+ "integrity": "sha512-KpWB6ORAWGmbWM10cDJfEV6sXc/uVkkkQV3SLwTNQ/E/PqWgNHIoMSLh1Lnk2FkB9+JHK7uuMq1i+9ArxDD7iQ==",
"license": "MIT",
"dependencies": {
"@emotion/is-prop-valid": "1.2.2",
@@ -17566,22 +15937,6 @@
}
}
},
- "node_modules/supports-color": {
- "version": "8.1.1",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz",
- "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "has-flag": "^4.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/chalk/supports-color?sponsor=1"
- }
- },
"node_modules/supports-preserve-symlinks-flag": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
@@ -17764,23 +16119,6 @@
"node": ">=12.22"
}
},
- "node_modules/throttleit": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/throttleit/-/throttleit-1.0.1.tgz",
- "integrity": "sha512-vDZpf9Chs9mAdfY046mcPt8fg5QSZr37hEH4TXYBnDF+izxgrbRGUAAaBvIk/fJm9aOFCGFd1EsNg5AZCbnQCQ==",
- "dev": true,
- "license": "MIT",
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/through": {
- "version": "2.3.8",
- "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
- "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==",
- "dev": true,
- "license": "MIT"
- },
"node_modules/timers-browserify": {
"version": "2.0.12",
"resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.12.tgz",
@@ -17820,36 +16158,6 @@
"node": ">=12.0.0"
}
},
- "node_modules/tldts": {
- "version": "6.1.75",
- "resolved": "https://registry.npmjs.org/tldts/-/tldts-6.1.75.tgz",
- "integrity": "sha512-+lFzEXhpl7JXgWYaXcB6DqTYXbUArvrWAE/5ioq/X3CdWLbDjpPP4XTrQBmEJ91y3xbe4Fkw7Lxv4P3GWeJaNg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "tldts-core": "^6.1.75"
- },
- "bin": {
- "tldts": "bin/cli.js"
- }
- },
- "node_modules/tldts-core": {
- "version": "6.1.75",
- "resolved": "https://registry.npmjs.org/tldts-core/-/tldts-core-6.1.75.tgz",
- "integrity": "sha512-AOvV5YYIAFFBfransBzSTyztkc3IMfz5Eq3YluaRiEu55nn43Fzaufx70UqEKYr8BoLCach4q8g/bg6e5+/aFw==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/tmp": {
- "version": "0.2.3",
- "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.3.tgz",
- "integrity": "sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=14.14"
- }
- },
"node_modules/to-regex-range": {
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
@@ -17868,19 +16176,6 @@
"integrity": "sha512-BiZS+C1OS8g/q2RRbJmy59xpyghNBqrr6k5L/uKBGRsTfxmu3ffiRnd8mlGPUVayg8pvfi5urfnu8TU7DVOkLQ==",
"license": "MIT"
},
- "node_modules/tough-cookie": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-5.1.0.tgz",
- "integrity": "sha512-rvZUv+7MoBYTiDmFPBrhL7Ujx9Sk+q9wwm22x8c8T5IJaR+Wsyc7TNxbVxo84kZoRJZZMazowFLqpankBEQrGg==",
- "dev": true,
- "license": "BSD-3-Clause",
- "dependencies": {
- "tldts": "^6.1.32"
- },
- "engines": {
- "node": ">=16"
- }
- },
"node_modules/tr46": {
"version": "0.0.3",
"resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz",
@@ -17904,16 +16199,6 @@
"tslib": "2"
}
},
- "node_modules/tree-kill": {
- "version": "1.2.2",
- "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz",
- "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==",
- "dev": true,
- "license": "MIT",
- "bin": {
- "tree-kill": "cli.js"
- }
- },
"node_modules/trim-lines": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/trim-lines/-/trim-lines-3.0.1.tgz",
@@ -18008,26 +16293,6 @@
"dev": true,
"license": "MIT"
},
- "node_modules/tunnel-agent": {
- "version": "0.6.0",
- "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
- "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==",
- "dev": true,
- "license": "Apache-2.0",
- "dependencies": {
- "safe-buffer": "^5.0.1"
- },
- "engines": {
- "node": "*"
- }
- },
- "node_modules/tweetnacl": {
- "version": "0.14.5",
- "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz",
- "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==",
- "dev": true,
- "license": "Unlicense"
- },
"node_modules/type-check": {
"version": "0.4.0",
"resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
@@ -18041,19 +16306,6 @@
"node": ">= 0.8.0"
}
},
- "node_modules/type-fest": {
- "version": "0.21.3",
- "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz",
- "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==",
- "dev": true,
- "license": "(MIT OR CC0-1.0)",
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
"node_modules/typed-array-buffer": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz",
@@ -18190,15 +16442,6 @@
"react": ">=15.0.0"
}
},
- "node_modules/undici": {
- "version": "6.19.7",
- "resolved": "https://registry.npmjs.org/undici/-/undici-6.19.7.tgz",
- "integrity": "sha512-HR3W/bMGPSr90i8AAp2C4DM3wChFdJPLrWYpIS++LxS8K+W535qftjt+4MyjNYHeWabMj1nvtmLIi7l++iq91A==",
- "license": "MIT",
- "engines": {
- "node": ">=18.17"
- }
- },
"node_modules/undici-types": {
"version": "6.20.0",
"resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.20.0.tgz",
@@ -18356,13 +16599,12 @@
}
},
"node_modules/universal-cookie": {
- "version": "7.2.2",
- "resolved": "https://registry.npmjs.org/universal-cookie/-/universal-cookie-7.2.2.tgz",
- "integrity": "sha512-fMiOcS3TmzP2x5QV26pIH3mvhexLIT0HmPa3V7Q7knRfT9HG6kTwq02HZGLPw0sAOXrAmotElGRvTLCMbJsvxQ==",
+ "version": "8.0.1",
+ "resolved": "https://registry.npmjs.org/universal-cookie/-/universal-cookie-8.0.1.tgz",
+ "integrity": "sha512-B6ks9FLLnP1UbPPcveOidfvB9pHjP+wekP2uRYB9YDfKVpvcjKgy1W5Zj+cEXJ9KTPnqOKGfVDQBmn8/YCQfRg==",
"license": "MIT",
"dependencies": {
- "@types/cookie": "^0.6.0",
- "cookie": "^0.7.2"
+ "cookie": "^1.0.2"
}
},
"node_modules/universalify": {
@@ -18457,16 +16699,6 @@
"node": ">=8.10.0"
}
},
- "node_modules/untildify": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/untildify/-/untildify-4.0.0.tgz",
- "integrity": "sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=8"
- }
- },
"node_modules/upath": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz",
@@ -18577,19 +16809,6 @@
"react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0"
}
},
- "node_modules/userpilot": {
- "version": "1.3.8",
- "resolved": "https://registry.npmjs.org/userpilot/-/userpilot-1.3.8.tgz",
- "integrity": "sha512-Hoym2S7j5IvGzb3n/eOwX3FE5PgzMjk5148uU1WTNM5iw784u6+LZiu3DC7NuovVrwYzI99qy5Ossqmft9c74A==",
- "license": "MIT",
- "dependencies": {
- "@ndhoule/includes": "^2.0.1",
- "@ndhoule/pick": "^2.0.0",
- "component-indexof": "0.0.3",
- "is": "^3.1.0",
- "obj-case": "^0.2.0"
- }
- },
"node_modules/util": {
"version": "0.12.5",
"resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz",
@@ -18625,21 +16844,6 @@
"uuid": "dist/bin/uuid"
}
},
- "node_modules/verror": {
- "version": "1.10.0",
- "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz",
- "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==",
- "dev": true,
- "engines": [
- "node >=0.6.0"
- ],
- "license": "MIT",
- "dependencies": {
- "assert-plus": "^1.0.0",
- "core-util-is": "1.0.2",
- "extsprintf": "^1.2.0"
- }
- },
"node_modules/vfile": {
"version": "6.0.3",
"resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.3.tgz",
@@ -18691,9 +16895,9 @@
}
},
"node_modules/vite": {
- "version": "6.2.0",
- "resolved": "https://registry.npmjs.org/vite/-/vite-6.2.0.tgz",
- "integrity": "sha512-7dPxoo+WsT/64rDcwoOjk76XHj+TqNTIvHKcuMQ1k4/SeHDaQt5GFAeLYzrimZrMpn/O6DtdI03WUjdxuPM0oQ==",
+ "version": "6.2.3",
+ "resolved": "https://registry.npmjs.org/vite/-/vite-6.2.3.tgz",
+ "integrity": "sha512-IzwM54g4y9JA/xAeBPNaDXiBF8Jsgl3VBQ2YQ/wOY6fyW3xMdSoltIV3Bo59DErdqdE6RxUfv8W69DvUorE4Eg==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -18835,9 +17039,9 @@
}
},
"node_modules/vite-plugin-pwa": {
- "version": "0.21.1",
- "resolved": "https://registry.npmjs.org/vite-plugin-pwa/-/vite-plugin-pwa-0.21.1.tgz",
- "integrity": "sha512-rkTbKFbd232WdiRJ9R3u+hZmf5SfQljX1b45NF6oLA6DSktEKpYllgTo1l2lkiZWMWV78pABJtFjNXfBef3/3Q==",
+ "version": "0.21.2",
+ "resolved": "https://registry.npmjs.org/vite-plugin-pwa/-/vite-plugin-pwa-0.21.2.tgz",
+ "integrity": "sha512-vFhH6Waw8itNu37hWUJxL50q+CBbNcMVzsKaYHQVrfxTt3ihk3PeLO22SbiP1UNWzcEPaTQv+YVxe4G0KOjAkg==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -19003,29 +17207,6 @@
"integrity": "sha512-kyDivFZ7ZM0BVOUteVbDFhlRt7Ah/CSPwJdi8hBpkK7QLumUqdLtVfm/PX/hkcnrvr0i77fO5+TjZ94Pe+C9iw==",
"license": "MIT"
},
- "node_modules/websocket-driver": {
- "version": "0.7.4",
- "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz",
- "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==",
- "license": "Apache-2.0",
- "dependencies": {
- "http-parser-js": ">=0.5.1",
- "safe-buffer": ">=5.1.0",
- "websocket-extensions": ">=0.1.1"
- },
- "engines": {
- "node": ">=0.8.0"
- }
- },
- "node_modules/websocket-extensions": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz",
- "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==",
- "license": "Apache-2.0",
- "engines": {
- "node": ">=0.8.0"
- }
- },
"node_modules/whatwg-url": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz",
@@ -19599,17 +17780,6 @@
"node": ">=12"
}
},
- "node_modules/yauzl": {
- "version": "2.10.0",
- "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz",
- "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "buffer-crc32": "~0.2.3",
- "fd-slicer": "~1.1.0"
- }
- },
"node_modules/yocto-queue": {
"version": "0.1.0",
"resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
diff --git a/client/package.json b/client/package.json
index e54a6a098..f7e354160 100644
--- a/client/package.json
+++ b/client/package.json
@@ -2,29 +2,34 @@
"name": "bodyshop",
"version": "0.2.1",
"engines": {
- "node": ">=18.18.2"
+ "node": ">=22.0.0"
},
"type": "module",
"private": true,
"proxy": "http://localhost:4000",
"dependencies": {
"@ant-design/pro-layout": "^7.22.3",
- "@apollo/client": "^3.13.1",
+ "@apollo/client": "^3.13.5",
"@emotion/is-prop-valid": "^1.3.1",
"@fingerprintjs/fingerprintjs": "^4.6.1",
+ "@firebase/analytics": "^0.10.12",
+ "@firebase/app": "^0.11.3",
+ "@firebase/auth": "^1.9.1",
+ "@firebase/firestore": "^4.7.10",
+ "@firebase/messaging": "^0.12.17",
"@jsreport/browser-client": "^3.1.0",
- "@reduxjs/toolkit": "^2.6.0",
- "@sentry/cli": "^2.42.2",
- "@sentry/react": "^9.3.0",
+ "@reduxjs/toolkit": "^2.6.1",
+ "@sentry/cli": "^2.42.4",
+ "@sentry/react": "^9.9.0",
"@sentry/vite-plugin": "^3.2.2",
- "@splitsoftware/splitio-react": "^1.13.0",
+ "@splitsoftware/splitio-react": "^2.0.1",
"@tanem/react-nprogress": "^5.0.53",
"@vitejs/plugin-react": "^4.3.4",
- "antd": "^5.24.2",
+ "antd": "^5.24.5",
"apollo-link-logger": "^2.0.1",
- "apollo-link-sentry": "^4.1.0",
+ "apollo-link-sentry": "^4.2.0",
"autosize": "^6.0.1",
- "axios": "^1.8.1",
+ "axios": "^1.8.4",
"classnames": "^2.5.1",
"css-box-model": "^1.2.1",
"dayjs": "^1.11.13",
@@ -33,14 +38,13 @@
"dotenv": "^16.4.7",
"env-cmd": "^10.1.0",
"exifr": "^7.1.3",
- "firebase": "^10.13.2",
"graphql": "^16.10.0",
- "i18next": "^23.15.1",
+ "i18next": "^24.2.3",
"i18next-browser-languagedetector": "^8.0.4",
"immutability-helper": "^3.1.1",
- "libphonenumber-js": "^1.12.4",
- "logrocket": "^8.1.2",
- "markerjs2": "^2.32.3",
+ "libphonenumber-js": "^1.12.6",
+ "logrocket": "^9.0.2",
+ "markerjs2": "^2.32.4",
"memoize-one": "^6.0.0",
"normalize-url": "^8.0.1",
"object-hash": "^3.0.0",
@@ -50,15 +54,15 @@
"react": "^18.3.1",
"react-big-calendar": "^1.18.0",
"react-color": "^2.19.3",
- "react-cookie": "^7.2.2",
+ "react-cookie": "^8.0.1",
"react-dom": "^18.3.1",
"react-drag-listview": "^2.0.0",
"react-grid-gallery": "^1.0.1",
"react-grid-layout": "1.3.4",
- "react-i18next": "^14.1.3",
+ "react-i18next": "^15.4.1",
"react-icons": "^5.5.0",
"react-image-lightbox": "^5.1.4",
- "react-markdown": "^9.0.3",
+ "react-markdown": "^10.1.0",
"react-number-format": "^5.4.3",
"react-popopo": "^2.1.9",
"react-product-fruits": "^2.2.61",
@@ -74,12 +78,11 @@
"redux-saga": "^1.3.0",
"redux-state-sync": "^3.1.4",
"reselect": "^5.1.1",
- "sass": "^1.85.1",
+ "sass": "^1.86.0",
"socket.io-client": "^4.8.1",
- "styled-components": "^6.1.15",
+ "styled-components": "^6.1.16",
"subscriptions-transport-ws": "^0.11.0",
"use-memo-one": "^1.1.3",
- "userpilot": "^1.3.8",
"vite-plugin-ejs": "^1.7.0",
"web-vitals": "^3.5.2"
},
@@ -96,8 +99,6 @@
"build:test:rome": "env-cmd -f .env.test.rome npm run build",
"build:production:imex": "env-cmd -f .env.production.imex npm run build",
"build:production:rome": "env-cmd -f .env.production.rome npm run build",
- "test": "cypress open",
- "eject": "react-scripts eject",
"madge": "madge --image ./madge-graph.svg --extensions js,jsx,ts,tsx --circular .",
"eulaize": "node src/utils/eulaize.js"
},
@@ -120,23 +121,19 @@
"@rollup/rollup-linux-x64-gnu": "4.6.1"
},
"devDependencies": {
- "@ant-design/icons": "^5.6.1",
+ "@ant-design/icons": "^6.0.0",
"@babel/plugin-proposal-private-property-in-object": "^7.21.11",
"@babel/preset-react": "^7.26.3",
- "@dotenvx/dotenvx": "^1.38.3",
+ "@dotenvx/dotenvx": "^1.39.0",
"@emotion/babel-plugin": "^11.13.5",
"@emotion/react": "^11.14.0",
- "@eslint/js": "^9.21.0",
+ "@eslint/js": "^9.23.0",
"@sentry/webpack-plugin": "^3.2.2",
- "@testing-library/cypress": "^10.0.2",
"browserslist": "^4.24.4",
"browserslist-to-esbuild": "^2.1.1",
"chalk": "^5.4.1",
- "cross-env": "^7.0.3",
- "cypress": "^13.17.0",
"eslint": "^8.57.1",
"eslint-config-react-app": "^7.0.1",
- "eslint-plugin-cypress": "^2.15.1",
"eslint-plugin-react": "^7.37.4",
"globals": "^15.15.0",
"memfs": "^4.17.0",
@@ -144,11 +141,11 @@
"react-error-overlay": "^6.1.0",
"redux-logger": "^3.0.6",
"source-map-explorer": "^2.5.3",
- "vite": "^6.2.0",
+ "vite": "^6.2.3",
"vite-plugin-babel": "^1.3.0",
"vite-plugin-eslint": "^1.8.1",
"vite-plugin-node-polyfills": "^0.23.0",
- "vite-plugin-pwa": "^0.21.1",
+ "vite-plugin-pwa": "^0.21.2",
"vite-plugin-style-import": "^2.0.0",
"workbox-window": "^7.3.0"
}
diff --git a/client/src/App/App.container.jsx b/client/src/App/App.container.jsx
index d6f3a53fd..67fd0f444 100644
--- a/client/src/App/App.container.jsx
+++ b/client/src/App/App.container.jsx
@@ -1,29 +1,38 @@
import { ApolloProvider } from "@apollo/client";
-import { SplitFactoryProvider, SplitSdk } from "@splitsoftware/splitio-react";
+import { SplitFactoryProvider, useSplitClient } from "@splitsoftware/splitio-react";
import { ConfigProvider } from "antd";
import enLocale from "antd/es/locale/en_US";
-import React from "react";
+import { useEffect } from "react";
import { useTranslation } from "react-i18next";
+import { useSelector } from "react-redux";
import GlobalLoadingBar from "../components/global-loading-bar/global-loading-bar.component";
import client from "../utils/GraphQLClient";
import App from "./App";
import * as Sentry from "@sentry/react";
-
import themeProvider from "./themeProvider";
-import { Userpilot } from "userpilot";
-
-// Initialize Userpilot
-if (import.meta.env.DEV) {
- Userpilot.initialize("NX-69145f08");
-}
+// Base Split configuration
const config = {
core: {
authorizationKey: import.meta.env.VITE_APP_SPLIT_API,
- key: "anon"
+ key: "anon" // Default key, overridden dynamically by SplitClientProvider
}
};
-export const factory = SplitSdk(config);
+
+// Custom provider to manage the Split client key based on imexshopid from Redux
+function SplitClientProvider({ children }) {
+ const imexshopid = useSelector((state) => state.user.imexshopid); // Access imexshopid from Redux store
+ const splitClient = useSplitClient({ key: imexshopid || "anon" }); // Use imexshopid or fallback to "anon"
+
+ useEffect(() => {
+ if (splitClient && imexshopid) {
+ // Log readiness for debugging; no need for ready() since isReady is available
+ console.log(`Split client initialized with key: ${imexshopid}, isReady: ${splitClient.isReady}`);
+ }
+ }, [splitClient, imexshopid]);
+
+ return children;
+}
function AppContainer() {
const { t } = useTranslation();
@@ -31,7 +40,6 @@ function AppContainer() {
return (
-
-
+
+
+
+
diff --git a/client/src/components/chat-media-selector/chat-media-selector.component.jsx b/client/src/components/chat-media-selector/chat-media-selector.component.jsx
index 0526fde43..b7e7d64a3 100644
--- a/client/src/components/chat-media-selector/chat-media-selector.component.jsx
+++ b/client/src/components/chat-media-selector/chat-media-selector.component.jsx
@@ -1,7 +1,8 @@
import { PictureFilled } from "@ant-design/icons";
import { useQuery } from "@apollo/client";
+import { useSplitTreatments } from "@splitsoftware/splitio-react";
import { Badge, Popover } from "antd";
-import React, { useEffect, useState } from "react";
+import { useEffect, useState } from "react";
import { useTranslation } from "react-i18next";
import { connect } from "react-redux";
import { createStructuredSelector } from "reselect";
@@ -9,6 +10,7 @@ import { GET_DOCUMENTS_BY_JOB } from "../../graphql/documents.queries";
import { selectBodyshop } from "../../redux/user/user.selectors";
import AlertComponent from "../alert/alert.component";
import JobDocumentsGalleryExternal from "../jobs-documents-gallery/jobs-documents-gallery.external.component";
+import JobsDocumentImgproxyGalleryExternal from "../jobs-documents-imgproxy-gallery/jobs-documents-imgproxy-gallery.external.component";
import JobDocumentsLocalGalleryExternal from "../jobs-documents-local-gallery/jobs-documents-local-gallery.external.component";
import LoadingSpinner from "../loading-spinner/loading-spinner.component";
@@ -23,6 +25,13 @@ export default connect(mapStateToProps, mapDispatchToProps)(ChatMediaSelector);
export function ChatMediaSelector({ bodyshop, selectedMedia, setSelectedMedia, conversation }) {
const { t } = useTranslation();
const [open, setOpen] = useState(false);
+ const {
+ treatments: { Imgproxy }
+ } = useSplitTreatments({
+ attributes: {},
+ names: ["Imgproxy"],
+ splitKey: bodyshop && bodyshop.imexshopid
+ });
const { loading, error, data } = useQuery(GET_DOCUMENTS_BY_JOB, {
fetchPolicy: "network-only",
@@ -42,6 +51,10 @@ export function ChatMediaSelector({ bodyshop, selectedMedia, setSelectedMedia, c
setSelectedMedia([]);
}, [setSelectedMedia, conversation]);
+ //Knowingly taking on the technical debt of poor implementation below. Done this way to avoid an edge case where no component may be displayed.
+ //Cloudinary will be removed once the migration is completed.
+ //If Imageproxy is on, rely only on the LMS selector
+ //If not on, use the old methods.
const content = (
{loading &&
}
@@ -49,17 +62,37 @@ export function ChatMediaSelector({ bodyshop, selectedMedia, setSelectedMedia, c
{selectedMedia.filter((s) => s.isSelected).length >= 10 ? (
{t("messaging.labels.maxtenimages")}
) : null}
- {!bodyshop.uselocalmediaserver && data && (
-
- )}
- {bodyshop.uselocalmediaserver && open && (
-
+
+ {Imgproxy.treatment === "on" ? (
+ <>
+ {!bodyshop.uselocalmediaserver && (
+
+ )}
+ {bodyshop.uselocalmediaserver && open && (
+
+ )}
+ >
+ ) : (
+ <>
+ {!bodyshop.uselocalmediaserver && data && (
+
+ )}
+ {bodyshop.uselocalmediaserver && open && (
+
+ )}
+ >
)}
);
diff --git a/client/src/components/dashboard-grid/componentList.js b/client/src/components/dashboard-grid/componentList.js
new file mode 100644
index 000000000..015d3509e
--- /dev/null
+++ b/client/src/components/dashboard-grid/componentList.js
@@ -0,0 +1,132 @@
+import i18next from "i18next";
+import DashboardTotalProductionDollars from "../dashboard-components/total-production-dollars/total-production-dollars.component.jsx";
+import {
+ DashboardTotalProductionHours,
+ DashboardTotalProductionHoursGql
+} from "../dashboard-components/total-production-hours/total-production-hours.component.jsx";
+import DashboardProjectedMonthlySales, {
+ DashboardProjectedMonthlySalesGql
+} from "../dashboard-components/pojected-monthly-sales/projected-monthly-sales.component.jsx";
+import DashboardMonthlyRevenueGraph, {
+ DashboardMonthlyRevenueGraphGql
+} from "../dashboard-components/monthly-revenue-graph/monthly-revenue-graph.component.jsx";
+import DashboardMonthlyJobCosting from "../dashboard-components/monthly-job-costing/monthly-job-costing.component.jsx";
+import DashboardMonthlyPartsSales from "../dashboard-components/monthly-parts-sales/monthly-parts-sales.component.jsx";
+import DashboardMonthlyLaborSales from "../dashboard-components/monthly-labor-sales/monthly-labor-sales.component.jsx";
+import DashboardMonthlyEmployeeEfficiency, {
+ DashboardMonthlyEmployeeEfficiencyGql
+} from "../dashboard-components/monthly-employee-efficiency/monthly-employee-efficiency.component.jsx";
+import DashboardScheduledInToday, {
+ DashboardScheduledInTodayGql
+} from "../dashboard-components/scheduled-in-today/scheduled-in-today.component.jsx";
+import DashboardScheduledOutToday, {
+ DashboardScheduledOutTodayGql
+} from "../dashboard-components/scheduled-out-today/scheduled-out-today.component.jsx";
+import JobLifecycleDashboardComponent, {
+ JobLifecycleDashboardGQL
+} from "../dashboard-components/job-lifecycle/job-lifecycle-dashboard.component.jsx";
+
+const componentList = {
+ ProductionDollars: {
+ label: i18next.t("dashboard.titles.productiondollars"),
+ component: DashboardTotalProductionDollars,
+ gqlFragment: null,
+ w: 1,
+ h: 1,
+ minW: 2,
+ minH: 1
+ },
+ ProductionHours: {
+ label: i18next.t("dashboard.titles.productionhours"),
+ component: DashboardTotalProductionHours,
+ gqlFragment: DashboardTotalProductionHoursGql,
+ w: 3,
+ h: 1,
+ minW: 3,
+ minH: 1
+ },
+ ProjectedMonthlySales: {
+ label: i18next.t("dashboard.titles.projectedmonthlysales"),
+ component: DashboardProjectedMonthlySales,
+ gqlFragment: DashboardProjectedMonthlySalesGql,
+ w: 2,
+ h: 1,
+ minW: 2,
+ minH: 1
+ },
+ MonthlyRevenueGraph: {
+ label: i18next.t("dashboard.titles.monthlyrevenuegraph"),
+ component: DashboardMonthlyRevenueGraph,
+ gqlFragment: DashboardMonthlyRevenueGraphGql,
+ w: 4,
+ h: 2,
+ minW: 4,
+ minH: 2
+ },
+ MonthlyJobCosting: {
+ label: i18next.t("dashboard.titles.monthlyjobcosting"),
+ component: DashboardMonthlyJobCosting,
+ gqlFragment: null,
+ minW: 6,
+ minH: 3,
+ w: 6,
+ h: 3
+ },
+ MonthlyPartsSales: {
+ label: i18next.t("dashboard.titles.monthlypartssales"),
+ component: DashboardMonthlyPartsSales,
+ gqlFragment: null,
+ minW: 2,
+ minH: 2,
+ w: 2,
+ h: 2
+ },
+ MonthlyLaborSales: {
+ label: i18next.t("dashboard.titles.monthlylaborsales"),
+ component: DashboardMonthlyLaborSales,
+ gqlFragment: null,
+ minW: 2,
+ minH: 2,
+ w: 2,
+ h: 2
+ },
+ // Typo in Efficency should be Efficiency, but changing it would reset users dashboard settings
+ MonthlyEmployeeEfficency: {
+ label: i18next.t("dashboard.titles.monthlyemployeeefficiency"),
+ component: DashboardMonthlyEmployeeEfficiency,
+ gqlFragment: DashboardMonthlyEmployeeEfficiencyGql,
+ minW: 2,
+ minH: 2,
+ w: 2,
+ h: 2
+ },
+ ScheduleInToday: {
+ label: i18next.t("dashboard.titles.scheduledintoday"),
+ component: DashboardScheduledInToday,
+ gqlFragment: DashboardScheduledInTodayGql,
+ minW: 6,
+ minH: 2,
+ w: 10,
+ h: 3
+ },
+ ScheduleOutToday: {
+ label: i18next.t("dashboard.titles.scheduledouttoday"),
+ component: DashboardScheduledOutToday,
+ gqlFragment: DashboardScheduledOutTodayGql,
+ minW: 6,
+ minH: 2,
+ w: 10,
+ h: 3
+ },
+ JobLifecycle: {
+ label: i18next.t("dashboard.titles.joblifecycle"),
+ component: JobLifecycleDashboardComponent,
+ gqlFragment: JobLifecycleDashboardGQL,
+ minW: 6,
+ minH: 3,
+ w: 6,
+ h: 3
+ }
+};
+
+export default componentList;
diff --git a/client/src/components/dashboard-grid/createDashboardQuery.js b/client/src/components/dashboard-grid/createDashboardQuery.js
new file mode 100644
index 000000000..a37f4aa4a
--- /dev/null
+++ b/client/src/components/dashboard-grid/createDashboardQuery.js
@@ -0,0 +1,85 @@
+import { gql } from "@apollo/client";
+import dayjs from "../../utils/day.js";
+import componentList from "./componentList.js";
+
+const createDashboardQuery = (state) => {
+ const componentBasedAdditions =
+ state &&
+ Array.isArray(state.layout) &&
+ state.layout.map((item, index) => componentList[item.i].gqlFragment || "").join("");
+ return gql`
+ query QUERY_DASHBOARD_DETAILS { ${componentBasedAdditions || ""}
+ monthly_sales: jobs(where: {_and: [
+ { voided: {_eq: false}},
+ {date_invoiced: {_gte: "${dayjs()
+ .startOf("month")
+ .startOf("day")
+ .toISOString()}"}}, {date_invoiced: {_lte: "${dayjs().endOf("month").endOf("day").toISOString()}"}}]}) {
+ id
+ ro_number
+ date_invoiced
+ job_totals
+ rate_la1
+ rate_la2
+ rate_la3
+ rate_la4
+ rate_laa
+ rate_lab
+ rate_lad
+ rate_lae
+ rate_laf
+ rate_lag
+ rate_lam
+ rate_lar
+ rate_las
+ rate_lau
+ rate_ma2s
+ rate_ma2t
+ rate_ma3s
+ rate_mabl
+ rate_macs
+ rate_mahw
+ rate_mapa
+ rate_mash
+ rate_matd
+ joblines(where: { removed: { _eq: false } }) {
+ id
+ mod_lbr_ty
+ mod_lb_hrs
+ act_price
+ part_qty
+ part_type
+ }
+ }
+ production_jobs: jobs(where: { inproduction: { _eq: true } }) {
+ id
+ ro_number
+ ins_co_nm
+ job_totals
+ joblines(where: { removed: { _eq: false } }) {
+ id
+ mod_lbr_ty
+ mod_lb_hrs
+ act_price
+ part_qty
+ part_type
+ }
+ labhrs: joblines_aggregate(where: { mod_lbr_ty: { _neq: "LAR" }, removed: { _eq: false } }) {
+ aggregate {
+ sum {
+ mod_lb_hrs
+ }
+ }
+ }
+ larhrs: joblines_aggregate(where: { mod_lbr_ty: { _eq: "LAR" }, removed: { _eq: false } }) {
+ aggregate {
+ sum {
+ mod_lb_hrs
+ }
+ }
+ }
+ }
+ }`;
+};
+
+export default createDashboardQuery;
diff --git a/client/src/components/dashboard-grid/dashboard-grid.component.jsx b/client/src/components/dashboard-grid/dashboard-grid.component.jsx
index 6c3412a3d..082e404ac 100644
--- a/client/src/components/dashboard-grid/dashboard-grid.component.jsx
+++ b/client/src/components/dashboard-grid/dashboard-grid.component.jsx
@@ -1,11 +1,9 @@
import Icon, { SyncOutlined } from "@ant-design/icons";
-import { gql, useMutation, useQuery } from "@apollo/client";
+import { isEmpty, cloneDeep } from "lodash";
+import { useMutation, useQuery } from "@apollo/client";
import { Button, Dropdown, Space } from "antd";
import { PageHeader } from "@ant-design/pro-layout";
-import i18next from "i18next";
-import _ from "lodash";
-import dayjs from "../../utils/day";
-import React, { useState } from "react";
+import { useMemo, useState } from "react";
import { Responsive, WidthProvider } from "react-grid-layout";
import { useTranslation } from "react-i18next";
import { MdClose } from "react-icons/md";
@@ -15,38 +13,13 @@ import { logImEXEvent } from "../../firebase/firebase.utils";
import { UPDATE_DASHBOARD_LAYOUT } from "../../graphql/user.queries";
import { selectBodyshop, selectCurrentUser } from "../../redux/user/user.selectors";
import AlertComponent from "../alert/alert.component";
-import DashboardMonthlyEmployeeEfficiency, {
- DashboardMonthlyEmployeeEfficiencyGql
-} from "../dashboard-components/monthly-employee-efficiency/monthly-employee-efficiency.component";
-import DashboardMonthlyJobCosting from "../dashboard-components/monthly-job-costing/monthly-job-costing.component";
-import DashboardMonthlyLaborSales from "../dashboard-components/monthly-labor-sales/monthly-labor-sales.component";
-import DashboardMonthlyPartsSales from "../dashboard-components/monthly-parts-sales/monthly-parts-sales.component";
-import DashboardMonthlyRevenueGraph, {
- DashboardMonthlyRevenueGraphGql
-} from "../dashboard-components/monthly-revenue-graph/monthly-revenue-graph.component";
-import DashboardProjectedMonthlySales, {
- DashboardProjectedMonthlySalesGql
-} from "../dashboard-components/pojected-monthly-sales/projected-monthly-sales.component";
-import DashboardTotalProductionDollars from "../dashboard-components/total-production-dollars/total-production-dollars.component";
-import DashboardTotalProductionHours, {
- DashboardTotalProductionHoursGql
-} from "../dashboard-components/total-production-hours/total-production-hours.component";
import LoadingSkeleton from "../loading-skeleton/loading-skeleton.component";
-//Combination of the following:
-// /node_modules/react-grid-layout/css/styles.css
-// /node_modules/react-resizable/css/styles.css
-import DashboardScheduledInToday, {
- DashboardScheduledInTodayGql
-} from "../dashboard-components/scheduled-in-today/scheduled-in-today.component";
-import DashboardScheduledOutToday, {
- DashboardScheduledOutTodayGql
-} from "../dashboard-components/scheduled-out-today/scheduled-out-today.component";
-import JobLifecycleDashboardComponent, {
- JobLifecycleDashboardGQL
-} from "../dashboard-components/job-lifecycle/job-lifecycle-dashboard.component";
-import "./dashboard-grid.styles.scss";
import { GenerateDashboardData } from "./dashboard-grid.utils";
import { useNotification } from "../../contexts/Notifications/notificationContext.jsx";
+import componentList from "./componentList.js";
+import createDashboardQuery from "./createDashboardQuery.js";
+
+import "./dashboard-grid.styles.scss";
const ResponsiveReactGridLayout = WidthProvider(Responsive);
@@ -54,6 +27,7 @@ const mapStateToProps = createStructuredSelector({
currentUser: selectCurrentUser,
bodyshop: selectBodyshop
});
+
const mapDispatchToProps = (dispatch) => ({
//setUserLanguage: language => dispatch(setUserLanguage(language))
});
@@ -85,19 +59,21 @@ export function DashboardGridComponent({ currentUser, bodyshop }) {
layout: { ...state, layout, layouts }
}
});
- if (!!result.errors) {
- notification["error"]({
+
+ if (!isEmpty(result?.errors)) {
+ notification.error({
message: t("dashboard.errors.updatinglayout", {
message: JSON.stringify(result.errors)
})
});
}
};
+
const handleRemoveComponent = (key) => {
logImEXEvent("dashboard_remove_component", { name: key });
const idxToRemove = state.items.findIndex((i) => i.i === key);
- const items = _.cloneDeep(state.items);
+ const items = cloneDeep(state.items);
items.splice(idxToRemove, 1);
setState({ ...state, items });
@@ -120,7 +96,8 @@ export function DashboardGridComponent({ currentUser, bodyshop }) {
});
};
- const dashboarddata = React.useMemo(() => GenerateDashboardData(data), [data]);
+ const dashboardData = useMemo(() => GenerateDashboardData(data), [data]);
+
const existingLayoutKeys = state.items.map((i) => i.i);
const menuItems = Object.keys(componentList).map((key) => ({
@@ -156,7 +133,6 @@ export function DashboardGridComponent({ currentUser, bodyshop }) {
width="100%"
layouts={state.layouts}
onLayoutChange={handleLayoutChange}
- // onBreakpointChange={onBreakpointChange}
>
{state.items.map((item, index) => {
const TheComponent = componentList[item.i].component;
@@ -182,7 +158,7 @@ export function DashboardGridComponent({ currentUser, bodyshop }) {
}}
onClick={() => handleRemoveComponent(item.i)}
/>
-
+
);
@@ -193,189 +169,3 @@ export function DashboardGridComponent({ currentUser, bodyshop }) {
}
export default connect(mapStateToProps, mapDispatchToProps)(DashboardGridComponent);
-
-const componentList = {
- ProductionDollars: {
- label: i18next.t("dashboard.titles.productiondollars"),
- component: DashboardTotalProductionDollars,
- gqlFragment: null,
- w: 1,
- h: 1,
- minW: 2,
- minH: 1
- },
- ProductionHours: {
- label: i18next.t("dashboard.titles.productionhours"),
- component: DashboardTotalProductionHours,
- gqlFragment: DashboardTotalProductionHoursGql,
- w: 3,
- h: 1,
- minW: 3,
- minH: 1
- },
- ProjectedMonthlySales: {
- label: i18next.t("dashboard.titles.projectedmonthlysales"),
- component: DashboardProjectedMonthlySales,
- gqlFragment: DashboardProjectedMonthlySalesGql,
- w: 2,
- h: 1,
- minW: 2,
- minH: 1
- },
- MonthlyRevenueGraph: {
- label: i18next.t("dashboard.titles.monthlyrevenuegraph"),
- component: DashboardMonthlyRevenueGraph,
- gqlFragment: DashboardMonthlyRevenueGraphGql,
- w: 4,
- h: 2,
- minW: 4,
- minH: 2
- },
- MonthlyJobCosting: {
- label: i18next.t("dashboard.titles.monthlyjobcosting"),
- component: DashboardMonthlyJobCosting,
- gqlFragment: null,
- minW: 6,
- minH: 3,
- w: 6,
- h: 3
- },
- MonthlyPartsSales: {
- label: i18next.t("dashboard.titles.monthlypartssales"),
- component: DashboardMonthlyPartsSales,
- gqlFragment: null,
- minW: 2,
- minH: 2,
- w: 2,
- h: 2
- },
- MonthlyLaborSales: {
- label: i18next.t("dashboard.titles.monthlylaborsales"),
- component: DashboardMonthlyLaborSales,
- gqlFragment: null,
- minW: 2,
- minH: 2,
- w: 2,
- h: 2
- },
- // Typo in Efficency should be Efficiency, but changing it would reset users dashboard settings
- MonthlyEmployeeEfficency: {
- label: i18next.t("dashboard.titles.monthlyemployeeefficiency"),
- component: DashboardMonthlyEmployeeEfficiency,
- gqlFragment: DashboardMonthlyEmployeeEfficiencyGql,
- minW: 2,
- minH: 2,
- w: 2,
- h: 2
- },
- ScheduleInToday: {
- label: i18next.t("dashboard.titles.scheduledintoday"),
- component: DashboardScheduledInToday,
- gqlFragment: DashboardScheduledInTodayGql,
- minW: 6,
- minH: 2,
- w: 10,
- h: 3
- },
- ScheduleOutToday: {
- label: i18next.t("dashboard.titles.scheduledouttoday"),
- component: DashboardScheduledOutToday,
- gqlFragment: DashboardScheduledOutTodayGql,
- minW: 6,
- minH: 2,
- w: 10,
- h: 3
- },
- JobLifecycle: {
- label: i18next.t("dashboard.titles.joblifecycle"),
- component: JobLifecycleDashboardComponent,
- gqlFragment: JobLifecycleDashboardGQL,
- minW: 6,
- minH: 3,
- w: 6,
- h: 3
- }
-};
-
-const createDashboardQuery = (state) => {
- const componentBasedAdditions =
- state &&
- Array.isArray(state.layout) &&
- state.layout.map((item, index) => componentList[item.i].gqlFragment || "").join("");
- return gql`
- query QUERY_DASHBOARD_DETAILS { ${componentBasedAdditions || ""}
- monthly_sales: jobs(where: {_and: [
- { voided: {_eq: false}},
- {date_invoiced: {_gte: "${dayjs()
- .startOf("month")
- .startOf("day")
- .toISOString()}"}}, {date_invoiced: {_lte: "${dayjs()
- .endOf("month")
- .endOf("day")
- .toISOString()}"}}]}) {
- id
- ro_number
- date_invoiced
- job_totals
- rate_la1
- rate_la2
- rate_la3
- rate_la4
- rate_laa
- rate_lab
- rate_lad
- rate_lae
- rate_laf
- rate_lag
- rate_lam
- rate_lar
- rate_las
- rate_lau
- rate_ma2s
- rate_ma2t
- rate_ma3s
- rate_mabl
- rate_macs
- rate_mahw
- rate_mapa
- rate_mash
- rate_matd
- joblines(where: { removed: { _eq: false } }) {
- id
- mod_lbr_ty
- mod_lb_hrs
- act_price
- part_qty
- part_type
- }
- }
- production_jobs: jobs(where: { inproduction: { _eq: true } }) {
- id
- ro_number
- ins_co_nm
- job_totals
- joblines(where: { removed: { _eq: false } }) {
- id
- mod_lbr_ty
- mod_lb_hrs
- act_price
- part_qty
- part_type
- }
- labhrs: joblines_aggregate(where: { mod_lbr_ty: { _neq: "LAR" }, removed: { _eq: false } }) {
- aggregate {
- sum {
- mod_lb_hrs
- }
- }
- }
- larhrs: joblines_aggregate(where: { mod_lbr_ty: { _eq: "LAR" }, removed: { _eq: false } }) {
- aggregate {
- sum {
- mod_lb_hrs
- }
- }
- }
- }
- }`;
-};
diff --git a/client/src/components/documents-upload-imgproxy/documents-upload-imgproxy.component.jsx b/client/src/components/documents-upload-imgproxy/documents-upload-imgproxy.component.jsx
new file mode 100644
index 000000000..f71760e3b
--- /dev/null
+++ b/client/src/components/documents-upload-imgproxy/documents-upload-imgproxy.component.jsx
@@ -0,0 +1,122 @@
+import { UploadOutlined } from "@ant-design/icons";
+import { Progress, Result, Space, Upload } from "antd";
+import { useMemo, useState } from "react";
+import { useTranslation } from "react-i18next";
+import { connect } from "react-redux";
+import { createStructuredSelector } from "reselect";
+import { useNotification } from "../../contexts/Notifications/notificationContext.jsx";
+import { selectBodyshop, selectCurrentUser } from "../../redux/user/user.selectors";
+import formatBytes from "../../utils/formatbytes";
+import { HasFeatureAccess } from "../feature-wrapper/feature-wrapper.component";
+import LockWrapperComponent from "../lock-wrapper/lock-wrapper.component";
+import { handleUpload } from "./documents-upload-imgproxy.utility.js";
+
+const mapStateToProps = createStructuredSelector({
+ currentUser: selectCurrentUser,
+ bodyshop: selectBodyshop
+});
+
+export function DocumentsUploadImgproxyComponent({
+ children,
+ currentUser,
+ bodyshop,
+ jobId,
+ tagsArray,
+ billId,
+ callbackAfterUpload,
+ totalSize,
+ ignoreSizeLimit = false
+}) {
+ const { t } = useTranslation();
+ const [fileList, setFileList] = useState([]);
+ const notification = useNotification();
+
+ const pct = useMemo(() => {
+ return parseInt((totalSize / ((bodyshop && bodyshop.jobsizelimit) || 1)) * 100);
+ }, [bodyshop, totalSize]);
+
+ if (pct > 100 && !ignoreSizeLimit)
+ return (
+
+ );
+
+ const handleDone = (uid) => {
+ setTimeout(() => {
+ setFileList((fileList) => fileList.filter((x) => x.uid !== uid));
+ }, 2000);
+ };
+ const hasMediaAccess = HasFeatureAccess({ bodyshop, featureName: "media" });
+
+ return (
+ {
+ if (f.event && f.event.percent === 100) handleDone(f.file.uid);
+ setFileList(f.fileList);
+ }}
+ beforeUpload={(file, fileList) => {
+ if (ignoreSizeLimit) return true;
+ const newFiles = fileList.reduce((acc, val) => acc + val.size, 0);
+ const shouldStopUpload = (totalSize + newFiles) / ((bodyshop && bodyshop.jobsizelimit) || 1) >= 1;
+
+ //Check to see if old files plus newly uploaded ones will be too much.
+ if (shouldStopUpload) {
+ notification.error({
+ key: "cannotuploaddocuments",
+ message: t("documents.labels.upload_limitexceeded_title"),
+ description: t("documents.labels.upload_limitexceeded")
+ });
+ return Upload.LIST_IGNORE;
+ }
+ return true;
+ }}
+ customRequest={(ev) =>
+ handleUpload(
+ ev,
+ {
+ bodyshop: bodyshop,
+ uploaded_by: currentUser.email,
+ jobId: jobId,
+ billId: billId,
+ tagsArray: tagsArray,
+ callback: callbackAfterUpload
+ },
+ notification
+ )
+ }
+ accept="audio/*, video/*, image/*, .pdf, .doc, .docx, .xls, .xlsx"
+ // showUploadList={false}
+ >
+ {children || (
+ <>
+
+
+
+
+ {t("documents.labels.dragtoupload")}
+
+ {!ignoreSizeLimit && (
+
+
+
+ {t("documents.labels.usage", {
+ percent: pct,
+ used: formatBytes(totalSize),
+ total: formatBytes(bodyshop && bodyshop.jobsizelimit)
+ })}
+
+
+ )}
+ >
+ )}
+
+ );
+}
+
+export default connect(mapStateToProps, null)(DocumentsUploadImgproxyComponent);
diff --git a/client/src/components/documents-upload-imgproxy/documents-upload-imgproxy.utility.js b/client/src/components/documents-upload-imgproxy/documents-upload-imgproxy.utility.js
new file mode 100644
index 000000000..7ecbd50bb
--- /dev/null
+++ b/client/src/components/documents-upload-imgproxy/documents-upload-imgproxy.utility.js
@@ -0,0 +1,172 @@
+import axios from "axios";
+import exifr from "exifr";
+import i18n from "i18next";
+import { logImEXEvent } from "../../firebase/firebase.utils";
+import { INSERT_NEW_DOCUMENT } from "../../graphql/documents.queries";
+import { axiosAuthInterceptorId } from "../../utils/CleanAxios";
+import client from "../../utils/GraphQLClient";
+
+//Context: currentUserEmail, bodyshop, jobid, invoiceid
+
+//Required to prevent headers from getting set and rejected from Cloudinary.
+var cleanAxios = axios.create();
+cleanAxios.interceptors.request.eject(axiosAuthInterceptorId);
+
+export const handleUpload = (ev, context, notification) => {
+ logImEXEvent("document_upload", { filetype: ev.file?.type });
+
+ const { onError, onSuccess, onProgress } = ev;
+ const { bodyshop, jobId } = context;
+
+ const fileName = ev.file?.name || ev.filename;
+
+ let extension = fileName.split(".").pop();
+ let key = `${bodyshop.id}/${jobId}/${replaceAccents(fileName).replace(/[^A-Z0-9]+/gi, "_")}-${new Date().getTime()}.${extension}`;
+
+ uploadToS3(key, extension, ev.file.type, ev.file, onError, onSuccess, onProgress, context, notification).catch(
+ (error) => {
+ console.error("Error uploading file to S3", error);
+ notification.error({
+ message: i18n.t("documents.errors.insert", {
+ message: error.message
+ })
+ });
+ }
+ );
+};
+
+//Handles only 1 file at a time.
+export const uploadToS3 = async (
+ key,
+ extension,
+ fileType,
+ file,
+ onError,
+ onSuccess,
+ onProgress,
+ context,
+ notification
+) => {
+ const { bodyshop, jobId, billId, uploaded_by, callback } = context;
+
+ //Get the signed url allowing us to PUT to S3.
+ const signedURLResponse = await axios.post("/media/imgproxy/sign", {
+ filenames: [key],
+ bodyshopid: bodyshop.id,
+ jobid: jobId
+ });
+
+ if (signedURLResponse.status !== 200) {
+ if (onError) onError(signedURLResponse.statusText);
+ notification.error({
+ message: i18n.t("documents.errors.getpresignurl", {
+ message: signedURLResponse.statusText
+ })
+ });
+ return;
+ }
+
+ //Key should be same as we provided to maintain backwards compatibility.
+ const { presignedUrl: preSignedUploadUrlToS3, key: s3Key } = signedURLResponse.data.signedUrls[0];
+
+ const options = {
+ onUploadProgress: (e) => {
+ if (onProgress) onProgress({ percent: (e.loaded / e.total) * 100 });
+ }
+ };
+
+ try {
+ const s3UploadResponse = await cleanAxios.put(preSignedUploadUrlToS3, file, options);
+ //Insert the document with the matching key.
+ let takenat;
+ if (fileType.includes("image")) {
+ try {
+ const exif = await exifr.parse(file);
+ takenat = exif && exif.DateTimeOriginal;
+ } catch (error) {
+ console.log("Unable to parse image file for EXIF Data", error.message);
+ }
+ }
+
+ const documentInsert = await client.mutate({
+ mutation: INSERT_NEW_DOCUMENT,
+ variables: {
+ docInput: [
+ {
+ ...(jobId ? { jobid: jobId } : {}),
+ ...(billId ? { billid: billId } : {}),
+ uploaded_by: uploaded_by,
+ key: s3Key,
+ type: fileType,
+ extension: s3UploadResponse.data.format || extension,
+ bodyshopid: bodyshop.id,
+ size: s3UploadResponse.data.bytes || file.size, //Leftover from Cloudinary. We don't do any optimization on upload, so it will always be file.size.
+ takenat
+ }
+ ]
+ }
+ });
+
+ if (!documentInsert.errors) {
+ if (onSuccess)
+ onSuccess({
+ uid: documentInsert.data.insert_documents.returning[0].id,
+ name: documentInsert.data.insert_documents.returning[0].name,
+ status: "done",
+ key: documentInsert.data.insert_documents.returning[0].key
+ });
+ notification.success({
+ key: "docuploadsuccess",
+ message: i18n.t("documents.successes.insert")
+ });
+ if (callback) {
+ callback();
+ }
+ } else {
+ if (onError) onError(JSON.stringify(documentInsert.errors));
+ notification.error({
+ message: i18n.t("documents.errors.insert", {
+ message: JSON.stringify(documentInsert.errors)
+ })
+ });
+ return;
+ }
+ } catch (error) {
+ console.log("Error uploading file to S3", error.message, error.stack);
+ notification.error({
+ message: i18n.t("documents.errors.insert", {
+ message: error.message
+ })
+ });
+ if (onError) onError(JSON.stringify(error.message));
+ }
+};
+
+function replaceAccents(str) {
+ // Verifies if the String has accents and replace them
+ if (str.search(/[\xC0-\xFF]/g) > -1) {
+ str = str
+ .replace(/[\xC0-\xC5]/g, "A")
+ .replace(/[\xC6]/g, "AE")
+ .replace(/[\xC7]/g, "C")
+ .replace(/[\xC8-\xCB]/g, "E")
+ .replace(/[\xCC-\xCF]/g, "I")
+ .replace(/[\xD0]/g, "D")
+ .replace(/[\xD1]/g, "N")
+ .replace(/[\xD2-\xD6\xD8]/g, "O")
+ .replace(/[\xD9-\xDC]/g, "U")
+ .replace(/[\xDD]/g, "Y")
+ .replace(/[\xDE]/g, "P")
+ .replace(/[\xE0-\xE5]/g, "a")
+ .replace(/[\xE6]/g, "ae")
+ .replace(/[\xE7]/g, "c")
+ .replace(/[\xE8-\xEB]/g, "e")
+ .replace(/[\xEC-\xEF]/g, "i")
+ .replace(/[\xF1]/g, "n")
+ .replace(/[\xF2-\xF6\xF8]/g, "o")
+ .replace(/[\xF9-\xFC]/g, "u")
+ .replace(/[\xFE]/g, "p")
+ .replace(/[\xFD\xFF]/g, "y");
+ }
+ return str;
+}
diff --git a/client/src/components/email-documents/email-documents.component.jsx b/client/src/components/email-documents/email-documents.component.jsx
index d3c6b20da..7e17d5565 100644
--- a/client/src/components/email-documents/email-documents.component.jsx
+++ b/client/src/components/email-documents/email-documents.component.jsx
@@ -10,6 +10,8 @@ import AlertComponent from "../alert/alert.component";
import JobDocumentsGalleryExternal from "../jobs-documents-gallery/jobs-documents-gallery.external.component";
import JobsDocumentsLocalGalleryExternalComponent from "../jobs-documents-local-gallery/jobs-documents-local-gallery.external.component";
import LoadingSpinner from "../loading-spinner/loading-spinner.component";
+import { useSplitTreatments } from "@splitsoftware/splitio-react";
+import JobsDocumentImgproxyGalleryExternal from "../jobs-documents-imgproxy-gallery/jobs-documents-imgproxy-gallery.external.component";
const mapStateToProps = createStructuredSelector({
//currentUser: selectCurrentUser
@@ -23,6 +25,13 @@ export default connect(mapStateToProps, mapDispatchToProps)(EmailDocumentsCompon
export function EmailDocumentsComponent({ emailConfig, form, selectedMediaState, bodyshop }) {
const { t } = useTranslation();
+ const {
+ treatments: { Imgproxy }
+ } = useSplitTreatments({
+ attributes: {},
+ names: ["Imgproxy"],
+ splitKey: bodyshop && bodyshop.imexshopid
+ });
const [selectedMedia, setSelectedMedia] = selectedMediaState;
const { loading, error, data } = useQuery(GET_DOCUMENTS_BY_JOB, {
@@ -46,17 +55,37 @@ export function EmailDocumentsComponent({ emailConfig, form, selectedMediaState,
10485760 - new Blob([form.getFieldValue("html")]).size ? (
{t("general.errors.sizelimit")}
) : null}
- {!bodyshop.uselocalmediaserver && data && (
-
- )}
- {bodyshop.uselocalmediaserver && (
-
+
+ {Imgproxy.treatment === "on" ? (
+ <>
+ {!bodyshop.uselocalmediaserver && data && (
+
+ )}
+ {bodyshop.uselocalmediaserver && (
+
+ )}
+ >
+ ) : (
+ <>
+ {!bodyshop.uselocalmediaserver && data && (
+
+ )}
+ {bodyshop.uselocalmediaserver && (
+
+ )}
+ >
)}
);
diff --git a/client/src/components/job-detail-cards/job-detail-cards.component.jsx b/client/src/components/job-detail-cards/job-detail-cards.component.jsx
index ea66c9112..5e5df5b58 100644
--- a/client/src/components/job-detail-cards/job-detail-cards.component.jsx
+++ b/client/src/components/job-detail-cards/job-detail-cards.component.jsx
@@ -1,17 +1,21 @@
-import { PrinterFilled } from "@ant-design/icons";
-import { useQuery } from "@apollo/client";
+import { PauseCircleOutlined, PlayCircleOutlined, PrinterFilled } from "@ant-design/icons";
+import { useMutation, useQuery } from "@apollo/client";
import { Button, Card, Col, Divider, Drawer, Grid, Row, Space } from "antd";
import queryString from "query-string";
-import React from "react";
import { useTranslation } from "react-i18next";
import { connect } from "react-redux";
import { Link, useLocation, useNavigate } from "react-router-dom";
import { createStructuredSelector } from "reselect";
-import { QUERY_JOB_CARD_DETAILS } from "../../graphql/jobs.queries";
+import { useSocket } from "../../contexts/SocketIO/useSocket.jsx";
+import { logImEXEvent } from "../../firebase/firebase.utils";
+import { QUERY_JOB_CARD_DETAILS, UPDATE_JOB } from "../../graphql/jobs.queries";
+import { insertAuditTrail } from "../../redux/application/application.actions.js";
import { setModalContext } from "../../redux/modals/modals.actions";
import { selectBodyshop } from "../../redux/user/user.selectors";
+import AuditTrailMapping from "../../utils/AuditTrailMappings.js";
import AlertComponent from "../alert/alert.component";
import JobSyncButton from "../job-sync-button/job-sync-button.component";
+import JobWatcherToggleContainer from "../job-watcher-toggle/job-watcher-toggle.container.jsx";
import JobsDetailHeader from "../jobs-detail-header/jobs-detail-header.component";
import LoadingSpinner from "../loading-spinner/loading-spinner.component";
import JobDetailCardsDamageComponent from "./job-detail-cards.damage.component";
@@ -21,15 +25,21 @@ import JobDetailCardsInsuranceComponent from "./job-detail-cards.insurance.compo
import JobDetailCardsNotesComponent from "./job-detail-cards.notes.component";
import JobDetailCardsPartsComponent from "./job-detail-cards.parts.component";
import JobDetailCardsTotalsComponent from "./job-detail-cards.totals.component";
-import JobWatcherToggleContainer from "../job-watcher-toggle/job-watcher-toggle.container.jsx";
-import { useSocket } from "../../contexts/SocketIO/useSocket.jsx";
const mapStateToProps = createStructuredSelector({
bodyshop: selectBodyshop
});
const mapDispatchToProps = (dispatch) => ({
- setPrintCenterContext: (context) => dispatch(setModalContext({ context: context, modal: "printCenter" }))
+ setPrintCenterContext: (context) => dispatch(setModalContext({ context: context, modal: "printCenter" })),
+ insertAuditTrail: ({ jobid, operation, type }) =>
+ dispatch(
+ insertAuditTrail({
+ jobid,
+ operation,
+ type
+ })
+ )
});
const span = {
@@ -38,8 +48,9 @@ const span = {
xxl: { span: 8 }
};
-export function JobDetailCards({ bodyshop, setPrintCenterContext }) {
+export function JobDetailCards({ bodyshop, setPrintCenterContext, insertAuditTrail }) {
const { scenarioNotificationsOn } = useSocket();
+ const [updateJob] = useMutation(UPDATE_JOB);
const selectedBreakpoint = Object.entries(Grid.useBreakpoint())
.filter((screen) => !!screen[1])
.slice(-1)[0];
@@ -91,7 +102,29 @@ export function JobDetailCards({ bodyshop, setPrintCenterContext }) {
extra={
-
+ {
+ logImEXEvent("production_toggle_alert");
+ updateJob({
+ variables: {
+ jobId: data.jobs_by_pk.id,
+ job: {
+ suspended: !data.jobs_by_pk.suspended
+ }
+ }
+ });
+ insertAuditTrail({
+ jobid: data.jobs_by_pk.id,
+ operation: AuditTrailMapping.jobsuspend(
+ data.jobs_by_pk.suspended ? !data.jobs_by_pk.suspended : true
+ ),
+ type: "jobsuspend"
+ });
+ }}
+ icon={data.jobs_by_pk.suspended ? : }
+ >
+ {data.jobs_by_pk.suspended ? t("production.actions.unsuspend") : t("production.actions.suspend")}
+
{
setPrintCenterContext({
@@ -103,8 +136,8 @@ export function JobDetailCards({ bodyshop, setPrintCenterContext }) {
}
});
}}
+ icon={ }
>
-
{t("jobs.actions.printCenter")}
diff --git a/client/src/components/jobs-detail-rates/jobs-detail-rates.component.jsx b/client/src/components/jobs-detail-rates/jobs-detail-rates.component.jsx
index 98a76f7b5..300f45f5a 100644
--- a/client/src/components/jobs-detail-rates/jobs-detail-rates.component.jsx
+++ b/client/src/components/jobs-detail-rates/jobs-detail-rates.component.jsx
@@ -5,6 +5,7 @@ import { connect } from "react-redux";
import { createStructuredSelector } from "reselect";
import { selectJobReadOnly } from "../../redux/application/application.selectors";
import { selectBodyshop } from "../../redux/user/user.selectors";
+import InstanceRenderManager from "../../utils/instanceRenderMgr";
import CABCpvrtCalculator from "../ca-bc-pvrt-calculator/ca-bc-pvrt-calculator.component";
import CurrencyInput from "../form-items-formatted/currency-form-item.component";
import JobsDetailRatesChangeButton from "../jobs-detail-rates-change-button/jobs-detail-rates-change-button.component";
@@ -14,9 +15,8 @@ import JobsDetailRatesLabor from "./jobs-detail-rates.labor.component";
import JobsDetailRatesMaterials from "./jobs-detail-rates.materials.component";
import JobsDetailRatesOther from "./jobs-detail-rates.other.component";
import JobsDetailRatesParts from "./jobs-detail-rates.parts.component";
-import JobsDetailRatesTaxes from "./jobs-detail-rates.taxes.component";
import JobsDetailRatesProfileOVerride from "./jobs-detail-rates.profile-override.component";
-import InstanceRenderManager from "../../utils/instanceRenderMgr";
+import JobsDetailRatesTaxes from "./jobs-detail-rates.taxes.component";
const mapStateToProps = createStructuredSelector({
jobRO: selectJobReadOnly,
@@ -66,14 +66,48 @@ export function JobsDetailRates({ jobRO, form, job, bodyshop }) {
)}
-
+ {
+ if (checked) {
+ form.setFieldsValue({ flat_rate_ats: false });
+ form.setFieldsValue({ rate_ats: form.getFieldValue('rate_ats') || bodyshop.shoprates.rate_ats });
+ }
+ }}
+ />
-
prev.auto_add_ats !== cur.auto_add_ats}>
{() => {
if (form.getFieldValue("auto_add_ats"))
return (
-
+
+
+
+ );
+
+ return null;
+ }}
+
+
+ {
+ if (checked) {
+ form.setFieldsValue({ auto_add_ats: false });
+ form.setFieldsValue({ rate_ats_flat: form.getFieldValue('rate_ats_flat') || bodyshop.shoprates.rate_ats_flat });
+
+ }
+ }}
+ />
+
+ prev.flat_rate_ats !== cur.flat_rate_ats}>
+ {() => {
+ if (form.getFieldValue("flat_rate_ats"))
+ return (
+
);
diff --git a/client/src/components/jobs-documents-gallery/jobs-document-gallery.download.component.jsx b/client/src/components/jobs-documents-gallery/jobs-document-gallery.download.component.jsx
index f85db7c8c..cbc89ab38 100644
--- a/client/src/components/jobs-documents-gallery/jobs-document-gallery.download.component.jsx
+++ b/client/src/components/jobs-documents-gallery/jobs-document-gallery.download.component.jsx
@@ -19,7 +19,13 @@ const mapDispatchToProps = (dispatch) => ({
//setUserLanguage: language => dispatch(setUserLanguage(language))
});
export default connect(mapStateToProps, mapDispatchToProps)(JobsDocumentsDownloadButton);
-
+/*
+################################################################################################
+ Developer Note:
+ Known Technical Debt Item
+ Modifications to this code requires complementary changes to the Imgproxy code. This code will be removed once the imgproxy migration is completed.
+################################################################################################
+*/
export function JobsDocumentsDownloadButton({ bodyshop, galleryImages, identifier }) {
const { t } = useTranslation();
const [download, setDownload] = useState(null);
diff --git a/client/src/components/jobs-documents-gallery/jobs-document-gallery.reassign.component.jsx b/client/src/components/jobs-documents-gallery/jobs-document-gallery.reassign.component.jsx
index 33f2e964a..51c889729 100644
--- a/client/src/components/jobs-documents-gallery/jobs-document-gallery.reassign.component.jsx
+++ b/client/src/components/jobs-documents-gallery/jobs-document-gallery.reassign.component.jsx
@@ -17,7 +17,13 @@ const mapDispatchToProps = (dispatch) => ({
//setUserLanguage: language => dispatch(setUserLanguage(language))
});
export default connect(mapStateToProps, mapDispatchToProps)(JobsDocumentsGalleryReassign);
-
+/*
+################################################################################################
+ Developer Note:
+ Known Technical Debt Item
+ Modifications to this code requires complementary changes to the Imgproxy code. This code will be removed once the imgproxy migration is completed.
+################################################################################################
+*/
export function JobsDocumentsGalleryReassign({ bodyshop, galleryImages, callback }) {
const { t } = useTranslation();
const [form] = Form.useForm();
diff --git a/client/src/components/jobs-documents-gallery/jobs-documents-gallery.component.jsx b/client/src/components/jobs-documents-gallery/jobs-documents-gallery.component.jsx
index 0dcc18855..58adaccad 100644
--- a/client/src/components/jobs-documents-gallery/jobs-documents-gallery.component.jsx
+++ b/client/src/components/jobs-documents-gallery/jobs-documents-gallery.component.jsx
@@ -1,29 +1,34 @@
import { EditFilled, FileExcelFilled, SyncOutlined } from "@ant-design/icons";
import { Button, Card, Col, Row, Space } from "antd";
-import React, { useEffect, useState } from "react";
+import { useEffect, useState } from "react";
import { Gallery } from "react-grid-gallery";
import { useTranslation } from "react-i18next";
+import Lightbox from "react-image-lightbox";
+import "react-image-lightbox/style.css";
+import { connect } from "react-redux";
+import { createStructuredSelector } from "reselect";
+import { selectBodyshop } from "../../redux/user/user.selectors";
import DocumentsUploadComponent from "../documents-upload/documents-upload.component";
import { DetermineFileType } from "../documents-upload/documents-upload.utility";
+import { HasFeatureAccess } from "../feature-wrapper/feature-wrapper.component";
+import UpsellComponent, { upsellEnum } from "../upsell/upsell.component";
import { GenerateSrcUrl, GenerateThumbUrl } from "./job-documents.utility";
import JobsDocumentsDownloadButton from "./jobs-document-gallery.download.component";
import JobsDocumentsGalleryReassign from "./jobs-document-gallery.reassign.component";
import JobsDocumentsDeleteButton from "./jobs-documents-gallery.delete.component";
import JobsDocumentsGallerySelectAllComponent from "./jobs-documents-gallery.selectall.component";
-import Lightbox from "react-image-lightbox";
-import "react-image-lightbox/style.css";
-import { HasFeatureAccess } from "../feature-wrapper/feature-wrapper.component";
-
-import { connect } from "react-redux";
-import { createStructuredSelector } from "reselect";
-import { selectBodyshop } from "../../redux/user/user.selectors";
-import UpsellComponent, { upsellEnum } from "../upsell/upsell.component";
const mapStateToProps = createStructuredSelector({
bodyshop: selectBodyshop
});
const mapDispatchToProps = (dispatch) => ({});
-
+/*
+################################################################################################
+ Developer Note:
+ Known Technical Debt Item
+ Modifications to this code requires complementary changes to the Imgproxy code. This code will be removed once the imgproxy migration is completed.
+################################################################################################
+*/
function JobsDocumentsComponent({
bodyshop,
data,
@@ -114,6 +119,7 @@ function JobsDocumentsComponent({
);
setgalleryImages(documents);
}, [data, setgalleryImages, t]);
+
const hasMediaAccess = HasFeatureAccess({ bodyshop, featureName: "media" });
const hasMobileAccess = HasFeatureAccess({ bodyshop, featureName: "mobile" });
return (
@@ -137,7 +143,6 @@ function JobsDocumentsComponent({
)}
-
({});
+export default connect(mapStateToProps, mapDispatchToProps)(JobsDocumentsContainer);
+/*
+################################################################################################
+ Developer Note:
+ Known Technical Debt Item
+ Modifications to this code requires complementary changes to the Imgproxy code. This code will be removed once the imgproxy migration is completed.
+################################################################################################
+*/
+export function JobsDocumentsContainer({
+ jobId,
+ billId,
+ documentsList,
+ billsCallback,
+ refetchOverride,
+ ignoreSizeLimit,
+ bodyshop
+}) {
+ const {
+ treatments: { Imgproxy }
+ } = useSplitTreatments({
+ attributes: {},
+ names: ["Imgproxy"],
+ splitKey: bodyshop && bodyshop.imexshopid
+ });
-export default function JobsDocumentsContainer({ jobId, billId, documentsList, billsCallback }) {
const { loading, error, data, refetch } = useQuery(GET_DOCUMENTS_BY_JOB, {
variables: { jobId: jobId },
fetchPolicy: "network-only",
nextFetchPolicy: "network-only",
- skip: !!billId
+ skip: Imgproxy.treatment === "on" || !!billId
});
if (loading) return ;
if (error) return ;
- return (
-
- );
+ if (Imgproxy.treatment === "on") {
+ return (
+
+ );
+ } else {
+ return (
+
+ );
+ }
}
diff --git a/client/src/components/jobs-documents-gallery/jobs-documents-gallery.delete.component.jsx b/client/src/components/jobs-documents-gallery/jobs-documents-gallery.delete.component.jsx
index 5cd1fcb06..4b92e4c99 100644
--- a/client/src/components/jobs-documents-gallery/jobs-documents-gallery.delete.component.jsx
+++ b/client/src/components/jobs-documents-gallery/jobs-documents-gallery.delete.component.jsx
@@ -5,8 +5,13 @@ import React, { useState } from "react";
import { useTranslation } from "react-i18next";
import { logImEXEvent } from "../../firebase/firebase.utils";
import { useNotification } from "../../contexts/Notifications/notificationContext.jsx";
-//Context: currentUserEmail, bodyshop, jobid, invoiceid
-
+/*
+################################################################################################
+ Developer Note:
+ Known Technical Debt Item
+ Modifications to this code requires complementary changes to the Imgproxy code. This code will be removed once the imgproxy migration is completed.
+################################################################################################
+*/
export default function JobsDocumentsDeleteButton({ galleryImages, deletionCallback }) {
const { t } = useTranslation();
const notification = useNotification();
diff --git a/client/src/components/jobs-documents-gallery/jobs-documents-gallery.external.component.jsx b/client/src/components/jobs-documents-gallery/jobs-documents-gallery.external.component.jsx
index 940598052..d4340bb98 100644
--- a/client/src/components/jobs-documents-gallery/jobs-documents-gallery.external.component.jsx
+++ b/client/src/components/jobs-documents-gallery/jobs-documents-gallery.external.component.jsx
@@ -3,6 +3,13 @@ import { Gallery } from "react-grid-gallery";
import { useTranslation } from "react-i18next";
import { GenerateSrcUrl, GenerateThumbUrl } from "./job-documents.utility";
+/*
+################################################################################################
+ Developer Note:
+ Known Technical Debt Item
+ Modifications to this code requires complementary changes to the Imgproxy code. This code will be removed once the imgproxy migration is completed.
+################################################################################################
+*/
function JobsDocumentGalleryExternal({
data,
diff --git a/client/src/components/jobs-documents-gallery/jobs-documents-gallery.selectall.component.jsx b/client/src/components/jobs-documents-gallery/jobs-documents-gallery.selectall.component.jsx
index 122ce6236..157e04dca 100644
--- a/client/src/components/jobs-documents-gallery/jobs-documents-gallery.selectall.component.jsx
+++ b/client/src/components/jobs-documents-gallery/jobs-documents-gallery.selectall.component.jsx
@@ -2,6 +2,14 @@ import { Button, Space } from "antd";
import React from "react";
import { useTranslation } from "react-i18next";
+/*
+################################################################################################
+ Developer Note:
+ Known Technical Debt Item
+ Modifications to this code requires complementary changes to the Imgproxy code. This code will be removed once the imgproxy migration is completed.
+################################################################################################
+*/
+
export default function JobsDocumentsGallerySelectAllComponent({ galleryImages, setGalleryImages }) {
const { t } = useTranslation();
diff --git a/client/src/components/jobs-documents-imgproxy-gallery/jobs-document-imgproxy-gallery.download.component.jsx b/client/src/components/jobs-documents-imgproxy-gallery/jobs-document-imgproxy-gallery.download.component.jsx
new file mode 100644
index 000000000..6c08936dc
--- /dev/null
+++ b/client/src/components/jobs-documents-imgproxy-gallery/jobs-document-imgproxy-gallery.download.component.jsx
@@ -0,0 +1,87 @@
+import { Button, Space } from "antd";
+import axios from "axios";
+import React, { useState } from "react";
+import { useTranslation } from "react-i18next";
+import { logImEXEvent } from "../../firebase/firebase.utils";
+import cleanAxios from "../../utils/CleanAxios";
+import formatBytes from "../../utils/formatbytes";
+//import yauzl from "yauzl";
+
+import { connect } from "react-redux";
+import { createStructuredSelector } from "reselect";
+import { selectBodyshop } from "../../redux/user/user.selectors";
+
+const mapStateToProps = createStructuredSelector({
+ bodyshop: selectBodyshop
+});
+const mapDispatchToProps = (dispatch) => ({
+ //setUserLanguage: language => dispatch(setUserLanguage(language))
+});
+
+/*
+################################################################################################
+ Developer Note:
+ Known Technical Debt Item
+ Modifications to this code requires complementary changes to the Cloudinary code. Cloudinary code will be removed upon completed migration.
+################################################################################################
+*/
+
+export default connect(mapStateToProps, mapDispatchToProps)(JobsDocumentsImgproxyDownloadButton);
+
+export function JobsDocumentsImgproxyDownloadButton({ bodyshop, galleryImages, identifier }) {
+ const { t } = useTranslation();
+ const [download, setDownload] = useState(null);
+ const [loading, setLoading] = useState(false);
+
+ const imagesToDownload = [
+ ...galleryImages.images.filter((image) => image.isSelected),
+ ...galleryImages.other.filter((image) => image.isSelected)
+ ];
+
+ function downloadProgress(progressEvent) {
+ setDownload((currentDownloadState) => {
+ return {
+ downloaded: progressEvent.loaded || 0,
+ speed: (progressEvent.loaded || 0) - ((currentDownloadState && currentDownloadState.downloaded) || 0)
+ };
+ });
+ }
+ function standardMediaDownload(bufferData) {
+ const a = document.createElement("a");
+ const url = window.URL.createObjectURL(new Blob([bufferData]));
+ a.href = url;
+ a.download = `${identifier || "documents"}.zip`;
+ a.click();
+ }
+ const handleDownload = async () => {
+ logImEXEvent("jobs_documents_download");
+ setLoading(true);
+ const zipUrl = await axios({
+ url: "/media/imgproxy/download",
+ method: "POST",
+ data: { documentids: imagesToDownload.map((_) => _.id) }
+ });
+
+ const theDownloadedZip = await cleanAxios({
+ url: zipUrl.data.url,
+ method: "GET",
+ responseType: "arraybuffer",
+ onDownloadProgress: downloadProgress
+ });
+ setLoading(false);
+ setDownload(null);
+
+ standardMediaDownload(theDownloadedZip.data);
+ };
+
+ return (
+ <>
+
+
+ {t("documents.actions.download")}
+ {download && {`(${formatBytes(download.downloaded)} @ ${formatBytes(download.speed)} / second)`} }
+
+
+ >
+ );
+}
diff --git a/client/src/components/jobs-documents-imgproxy-gallery/jobs-document-imgproxy-gallery.reassign.component.jsx b/client/src/components/jobs-documents-imgproxy-gallery/jobs-document-imgproxy-gallery.reassign.component.jsx
new file mode 100644
index 000000000..2fcd55a9f
--- /dev/null
+++ b/client/src/components/jobs-documents-imgproxy-gallery/jobs-document-imgproxy-gallery.reassign.component.jsx
@@ -0,0 +1,134 @@
+import { useApolloClient } from "@apollo/client";
+import { Button, Form, Popover, Space } from "antd";
+import axios from "axios";
+import { useMemo, useState } from "react";
+import { useTranslation } from "react-i18next";
+import { connect } from "react-redux";
+import { createStructuredSelector } from "reselect";
+import { useNotification } from "../../contexts/Notifications/notificationContext.jsx";
+import { GET_DOC_SIZE_BY_JOB } from "../../graphql/documents.queries.js";
+import { selectBodyshop } from "../../redux/user/user.selectors.js";
+import JobSearchSelect from "../job-search-select/job-search-select.component.jsx";
+import { isFunction } from "lodash";
+const mapStateToProps = createStructuredSelector({
+ bodyshop: selectBodyshop
+});
+const mapDispatchToProps = (dispatch) => ({
+ //setUserLanguage: language => dispatch(setUserLanguage(language))
+});
+export default connect(mapStateToProps, mapDispatchToProps)(JobsDocumentsImgproxyGalleryReassign);
+/*
+################################################################################################
+ Developer Note:
+ Known Technical Debt Item
+ Modifications to this code requires complementary changes to the Cloudinary code. Cloudinary code will be removed upon completed migration.
+################################################################################################
+*/
+export function JobsDocumentsImgproxyGalleryReassign({ bodyshop, galleryImages, callback }) {
+ const { t } = useTranslation();
+ const [form] = Form.useForm();
+ const notification = useNotification();
+
+ const selectedImages = useMemo(() => {
+ return [
+ ...galleryImages.images.filter((image) => image.isSelected),
+ ...galleryImages.other.filter((image) => image.isSelected)
+ ];
+ }, [galleryImages]);
+ const client = useApolloClient();
+ const [open, setOpen] = useState(false);
+ const [loading, setLoading] = useState(false);
+
+ const handleFinish = async ({ jobid }) => {
+ setLoading(true);
+
+ //Check to see if the space remaining on the new job is sufficient. If it isn't cancel this.
+ const newJobData = await client.query({
+ query: GET_DOC_SIZE_BY_JOB,
+ variables: { jobId: jobid }
+ });
+
+ const transferedDocSizeTotal = selectedImages.reduce((acc, val) => acc + val.size, 0);
+
+ const shouldPreventTransfer =
+ bodyshop.jobsizelimit - newJobData.data.documents_aggregate.aggregate.sum.size < transferedDocSizeTotal;
+
+ if (shouldPreventTransfer) {
+ notification.error({
+ key: "cannotuploaddocuments",
+ message: t("documents.labels.reassign_limitexceeded_title"),
+ description: t("documents.labels.reassign_limitexceeded")
+ });
+ setLoading(false);
+ return;
+ }
+
+ const res = await axios.post("/media/imgproxy/rename", {
+ tojobid: jobid,
+ documents: selectedImages.map((i) => {
+ //Need to check if the current key folder is null, or another job.
+ const currentKeys = i.key.split("/");
+ currentKeys[1] = jobid;
+ currentKeys.join("/");
+ return {
+ id: i.id,
+ from: i.key,
+ to: currentKeys.join("/"),
+ extension: i.extension,
+ type: i.type
+ };
+ })
+ });
+ //Add in confirmation & errors.
+ if (isFunction(callback)) callback();
+
+ if (res.errors) {
+ notification.error({
+ message: t("documents.errors.updating", {
+ message: JSON.stringify(res.errors)
+ })
+ });
+ }
+ if (!res.mutationResult?.errors) {
+ notification.success({
+ message: t("documents.successes.updated")
+ });
+ }
+ setOpen(false);
+ setLoading(false);
+ };
+
+ const popContent = (
+
+
+
+
+
+
+ form.submit()}>
+ {t("general.actions.submit")}
+
+ setOpen(false)}>{t("general.actions.cancel")}
+
+
+ );
+
+ return (
+
+ setOpen(true)} loading={loading}>
+ {t("documents.actions.reassign")}
+
+
+ );
+}
diff --git a/client/src/components/jobs-documents-imgproxy-gallery/jobs-documents-imgproxy-gallery.component.jsx b/client/src/components/jobs-documents-imgproxy-gallery/jobs-documents-imgproxy-gallery.component.jsx
new file mode 100644
index 000000000..a07ed0bf1
--- /dev/null
+++ b/client/src/components/jobs-documents-imgproxy-gallery/jobs-documents-imgproxy-gallery.component.jsx
@@ -0,0 +1,266 @@
+import { EditFilled, FileExcelFilled, SyncOutlined } from "@ant-design/icons";
+import { Button, Card, Col, Row, Space } from "antd";
+import axios from "axios";
+import i18n from "i18next";
+import { isFunction } from "lodash";
+import { useCallback, useEffect, useState } from "react";
+import { Gallery } from "react-grid-gallery";
+import { useTranslation } from "react-i18next";
+import Lightbox from "react-image-lightbox";
+import "react-image-lightbox/style.css";
+import { connect } from "react-redux";
+import { createStructuredSelector } from "reselect";
+import { selectBodyshop } from "../../redux/user/user.selectors";
+import DocumentsUploadImgproxyComponent from "../documents-upload-imgproxy/documents-upload-imgproxy.component";
+import { HasFeatureAccess } from "../feature-wrapper/feature-wrapper.component";
+import UpsellComponent, { upsellEnum } from "../upsell/upsell.component";
+import JobsDocumentsDownloadButton from "./jobs-document-imgproxy-gallery.download.component";
+import JobsDocumentsGalleryReassign from "./jobs-document-imgproxy-gallery.reassign.component";
+import JobsDocumentsDeleteButton from "./jobs-documents-imgproxy-gallery.delete.component";
+import JobsDocumentsGallerySelectAllComponent from "./jobs-documents-imgproxy-gallery.selectall.component";
+
+const mapStateToProps = createStructuredSelector({
+ bodyshop: selectBodyshop
+});
+const mapDispatchToProps = (dispatch) => ({});
+/*
+################################################################################################
+ Developer Note:
+ Known Technical Debt Item
+ Modifications to this code requires complementary changes to the Cloudinary code. Cloudinary code will be removed upon completed migration.
+################################################################################################
+*/
+function JobsDocumentsImgproxyComponent({
+ bodyshop,
+ data,
+ jobId,
+ refetch,
+ billId,
+ billsCallback,
+ totalSize,
+ downloadIdentifier,
+ ignoreSizeLimit
+}) {
+ const [galleryImages, setGalleryImages] = useState({ images: [], other: [] });
+ const { t } = useTranslation();
+ const [modalState, setModalState] = useState({ open: false, index: 0 });
+
+ const fetchThumbnails = useCallback(() => {
+ fetchImgproxyThumbnails({ setStateCallback: setGalleryImages, jobId });
+ }, [jobId, setGalleryImages]);
+
+ useEffect(() => {
+ if (data) {
+ fetchThumbnails();
+ }
+ }, [data, fetchThumbnails]);
+
+ const hasMediaAccess = HasFeatureAccess({ bodyshop, featureName: "media" });
+ const hasMobileAccess = HasFeatureAccess({ bodyshop, featureName: "mobile" });
+ return (
+
+
+
+
+ {
+ //Handle any doc refresh.
+
+ isFunction(refetch) && refetch();
+
+ //Do the imgproxy refresh too
+ fetchThumbnails();
+ }}
+ >
+
+
+
+
+
+ {!billId && (
+
+ )}
+
+
+ {!hasMediaAccess && (
+
+
+
+
+
+ )}
+
+
+
+
+
+ {hasMediaAccess && !hasMobileAccess && (
+
+
+
+
+
+ )}
+
+
+ {
+ setModalState({ open: true, index: index });
+ // window.open(
+ // item.fullsize,
+ // "_blank",
+ // "toolbar=0,location=0,menubar=0"
+ // );
+ }}
+ onSelect={(index, image) => {
+ setGalleryImages({
+ ...galleryImages,
+ images: galleryImages.images.map((g, idx) =>
+ index === idx ? { ...g, isSelected: !g.isSelected } : g
+ )
+ });
+ }}
+ />
+
+
+
+
+ {
+ return {
+ backgroundImage: ,
+ height: "100%",
+ width: "100%",
+ cursor: "pointer"
+ };
+ }}
+ onClick={(index) => {
+ window.open(galleryImages.other[index].source, "_blank", "toolbar=0,location=0,menubar=0");
+ }}
+ onSelect={(index) => {
+ setGalleryImages({
+ ...galleryImages,
+ other: galleryImages.other.map((g, idx) => (index === idx ? { ...g, isSelected: !g.isSelected } : g))
+ });
+ }}
+ />
+
+
+ {modalState.open && (
+ {
+ const newWindow = window.open(
+ `${window.location.protocol}//${window.location.host}/edit?documentId=${
+ galleryImages.images[modalState.index].id
+ }`,
+ "_blank",
+ "noopener,noreferrer"
+ );
+ if (newWindow) newWindow.opener = null;
+ }}
+ />
+ ]}
+ mainSrc={galleryImages.images[modalState.index].fullsize}
+ nextSrc={galleryImages.images[(modalState.index + 1) % galleryImages.images.length].fullsize}
+ prevSrc={
+ galleryImages.images[(modalState.index + galleryImages.images.length - 1) % galleryImages.images.length]
+ .fullsize
+ }
+ onCloseRequest={() => setModalState({ open: false, index: 0 })}
+ onMovePrevRequest={() =>
+ setModalState({
+ ...modalState,
+ index: (modalState.index + galleryImages.images.length - 1) % galleryImages.images.length
+ })
+ }
+ onMoveNextRequest={() =>
+ setModalState({
+ ...modalState,
+ index: (modalState.index + 1) % galleryImages.images.length
+ })
+ }
+ />
+ )}
+
+
+ );
+}
+
+export default connect(mapStateToProps, mapDispatchToProps)(JobsDocumentsImgproxyComponent);
+
+export const fetchImgproxyThumbnails = async ({ setStateCallback, jobId, imagesOnly }) => {
+ const result = await axios.post("/media/imgproxy/thumbnails", { jobid: jobId });
+ const documents = result.data.reduce(
+ (acc, value) => {
+ if (value.type.startsWith("image")) {
+ acc.images.push({
+ src: value.thumbnailUrl,
+ fullsize: value.originalUrl,
+ height: 225,
+ width: 225,
+ isSelected: false,
+ key: value.key,
+ extension: value.extension,
+ id: value.id,
+ type: value.type,
+ size: value.size,
+ tags: [{ value: value.type, title: value.type }]
+ });
+ } else {
+ const fileName = value.key.split("/").pop();
+ acc.other.push({
+ source: value.originalUrlViaProxyPath,
+ src: value.thumbnailUrl,
+ fullsize: value.presignedGetUrl,
+ tags: [
+ {
+ value: fileName,
+ title: fileName
+ },
+
+ { value: value.type, title: value.type },
+ ...(value.bill
+ ? [
+ {
+ value: value.bill.vendor.name,
+ title: i18n.t("vendors.fields.name")
+ },
+ { value: value.bill.date, title: i18n.t("bills.fields.date") },
+ {
+ value: value.bill.invoice_number,
+ title: i18n.t("bills.fields.invoice_number")
+ }
+ ]
+ : [])
+ ],
+ height: 225,
+ width: 225,
+ isSelected: false,
+ extension: value.extension,
+ key: value.key,
+ id: value.id,
+ type: value.type,
+ size: value.size
+ });
+ }
+ return acc;
+ },
+ { images: [], other: [] }
+ );
+
+ setStateCallback(imagesOnly ? documents.images : documents);
+};
diff --git a/client/src/components/jobs-documents-imgproxy-gallery/jobs-documents-imgproxy-gallery.container.jsx b/client/src/components/jobs-documents-imgproxy-gallery/jobs-documents-imgproxy-gallery.container.jsx
new file mode 100644
index 000000000..9191b262c
--- /dev/null
+++ b/client/src/components/jobs-documents-imgproxy-gallery/jobs-documents-imgproxy-gallery.container.jsx
@@ -0,0 +1,37 @@
+import { useQuery } from "@apollo/client";
+import { GET_DOCUMENTS_BY_JOB } from "../../graphql/documents.queries";
+import AlertComponent from "../alert/alert.component";
+import LoadingSpinner from "../loading-spinner/loading-spinner.component";
+import JobDocuments from "./jobs-documents-imgproxy-gallery.component";
+
+/*
+################################################################################################
+ Developer Note:
+ Known Technical Debt Item
+ Modifications to this code requires complementary changes to the Cloudinary code. Cloudinary code will be removed upon completed migration.
+################################################################################################
+*/
+
+export default function JobsDocumentsImgproxyContainer({ jobId, billId, documentsList, billsCallback }) {
+ const { loading, error, data, refetch } = useQuery(GET_DOCUMENTS_BY_JOB, {
+ variables: { jobId: jobId },
+ fetchPolicy: "network-only",
+ nextFetchPolicy: "network-only",
+ skip: !!billId
+ });
+
+ if (loading) return ;
+ if (error) return ;
+
+ return (
+
+ );
+}
diff --git a/client/src/components/jobs-documents-imgproxy-gallery/jobs-documents-imgproxy-gallery.delete.component.jsx b/client/src/components/jobs-documents-imgproxy-gallery/jobs-documents-imgproxy-gallery.delete.component.jsx
new file mode 100644
index 000000000..4701bca67
--- /dev/null
+++ b/client/src/components/jobs-documents-imgproxy-gallery/jobs-documents-imgproxy-gallery.delete.component.jsx
@@ -0,0 +1,75 @@
+import { QuestionCircleOutlined } from "@ant-design/icons";
+import { Button, Popconfirm } from "antd";
+import axios from "axios";
+import { useState } from "react";
+import { useTranslation } from "react-i18next";
+import { logImEXEvent } from "../../firebase/firebase.utils.js";
+import { useNotification } from "../../contexts/Notifications/notificationContext.jsx";
+import { isFunction } from "lodash";
+
+/*
+################################################################################################
+ Developer Note:
+ Known Technical Debt Item
+ Modifications to this code requires complementary changes to the Cloudinary code. Cloudinary code will be removed upon completed migration.
+################################################################################################
+*/
+
+export default function JobsDocumentsImgproxyDeleteButton({ galleryImages, deletionCallback }) {
+ const { t } = useTranslation();
+ const notification = useNotification();
+
+ const imagesToDelete = [
+ ...galleryImages.images.filter((image) => image.isSelected),
+ ...galleryImages.other.filter((image) => image.isSelected)
+ ];
+ const [loading, setLoading] = useState(false);
+
+ const handleDelete = async () => {
+ logImEXEvent("job_documents_delete", { count: imagesToDelete.length });
+ try {
+ setLoading(true);
+ const res = await axios.post("/media/imgproxy/delete", {
+ ids: imagesToDelete.map((d) => d.id)
+ });
+
+ if (res.data.error) {
+ notification.error({
+ message: t("documents.errors.deleting", {
+ error: JSON.stringify(res.data.error.response.errors)
+ })
+ });
+ } else {
+ notification.success({
+ key: "docdeletedsuccesfully",
+ message: t("documents.successes.delete")
+ });
+
+ if (isFunction(deletionCallback)) deletionCallback();
+ }
+ } catch (error) {
+ notification.error({
+ message: t("documents.errors.deleting", {
+ error: error.message
+ })
+ });
+ }
+ setLoading(false);
+ };
+
+ return (
+ }
+ onConfirm={handleDelete}
+ title={t("documents.labels.confirmdelete")}
+ okText={t("general.actions.delete")}
+ okButtonProps={{ danger: true }}
+ cancelText={t("general.actions.cancel")}
+ >
+
+ {t("documents.actions.delete")}
+
+
+ );
+}
diff --git a/client/src/components/jobs-documents-imgproxy-gallery/jobs-documents-imgproxy-gallery.external.component.jsx b/client/src/components/jobs-documents-imgproxy-gallery/jobs-documents-imgproxy-gallery.external.component.jsx
new file mode 100644
index 000000000..a970b01b7
--- /dev/null
+++ b/client/src/components/jobs-documents-imgproxy-gallery/jobs-documents-imgproxy-gallery.external.component.jsx
@@ -0,0 +1,33 @@
+import { useEffect } from "react";
+import { Gallery } from "react-grid-gallery";
+import { fetchImgproxyThumbnails } from "./jobs-documents-imgproxy-gallery.component";
+
+/*
+################################################################################################
+ Developer Note:
+ Known Technical Debt Item
+ Modifications to this code requires complementary changes to the Cloudinary code. Cloudinary code will be removed upon completed migration.
+################################################################################################
+*/
+
+function JobsDocumentImgproxyGalleryExternal({ jobId, externalMediaState }) {
+ const [galleryImages, setgalleryImages] = externalMediaState;
+
+ useEffect(() => {
+ if (jobId) fetchImgproxyThumbnails({ setStateCallback: setgalleryImages, jobId, imagesOnly: true });
+ }, [jobId, setgalleryImages]);
+
+ return (
+
+ {
+ setgalleryImages(galleryImages.map((g, idx) => (index === idx ? { ...g, isSelected: !g.isSelected } : g)));
+ }}
+ />
+
+ );
+}
+
+export default JobsDocumentImgproxyGalleryExternal;
diff --git a/client/src/components/jobs-documents-imgproxy-gallery/jobs-documents-imgproxy-gallery.selectall.component.jsx b/client/src/components/jobs-documents-imgproxy-gallery/jobs-documents-imgproxy-gallery.selectall.component.jsx
new file mode 100644
index 000000000..4d4b0b32e
--- /dev/null
+++ b/client/src/components/jobs-documents-imgproxy-gallery/jobs-documents-imgproxy-gallery.selectall.component.jsx
@@ -0,0 +1,63 @@
+import { Button, Space } from "antd";
+import { useTranslation } from "react-i18next";
+
+/*
+################################################################################################
+ Developer Note:
+ Known Technical Debt Item
+ Modifications to this code requires complementary changes to the Cloudinary code. Cloudinary code will be removed upon completed migration.
+################################################################################################
+*/
+
+export default function JobsDocumentsImgproxyGallerySelectAllComponent({ galleryImages, setGalleryImages }) {
+ const { t } = useTranslation();
+
+ const handleSelectAll = () => {
+ setGalleryImages({
+ ...galleryImages,
+ other: galleryImages.other.map((i) => {
+ return { ...i, isSelected: true };
+ }),
+ images: galleryImages.images.map((i) => {
+ return { ...i, isSelected: true };
+ })
+ });
+ };
+ const handleSelectAllImages = () => {
+ setGalleryImages({
+ ...galleryImages,
+
+ images: galleryImages.images.map((i) => {
+ return { ...i, isSelected: true };
+ })
+ });
+ };
+ const handleSelectAllDocuments = () => {
+ setGalleryImages({
+ ...galleryImages,
+ other: galleryImages.other.map((i) => {
+ return { ...i, isSelected: true };
+ })
+ });
+ };
+ const handleDeselectAll = () => {
+ setGalleryImages({
+ ...galleryImages,
+ other: galleryImages.other.map((i) => {
+ return { ...i, isSelected: false };
+ }),
+ images: galleryImages.images.map((i) => {
+ return { ...i, isSelected: false };
+ })
+ });
+ };
+
+ return (
+
+ {t("general.actions.selectall")}
+ {t("documents.actions.selectallimages")}
+ {t("documents.actions.selectallotherdocuments")}
+ {t("general.actions.deselectall")}
+
+ );
+}
diff --git a/client/src/components/jobs-documents-imgproxy-gallery/jobs-documents-imgproxy-gallery.styles.scss b/client/src/components/jobs-documents-imgproxy-gallery/jobs-documents-imgproxy-gallery.styles.scss
new file mode 100644
index 000000000..6df357ffc
--- /dev/null
+++ b/client/src/components/jobs-documents-imgproxy-gallery/jobs-documents-imgproxy-gallery.styles.scss
@@ -0,0 +1,10 @@
+/* you can make up upload button and sample style by using stylesheets */
+.ant-upload-select-picture-card i {
+ font-size: 32px;
+ color: #999;
+}
+
+.ant-upload-select-picture-card .ant-upload-text {
+ margin-top: 8px;
+ color: #666;
+}
diff --git a/client/src/components/parts-order-modal/parts-order-modal.component.jsx b/client/src/components/parts-order-modal/parts-order-modal.component.jsx
index 4fc3a5789..c3ade9187 100644
--- a/client/src/components/parts-order-modal/parts-order-modal.component.jsx
+++ b/client/src/components/parts-order-modal/parts-order-modal.component.jsx
@@ -1,16 +1,17 @@
import { DeleteFilled, DownOutlined, WarningFilled } from "@ant-design/icons";
import { useSplitTreatments } from "@splitsoftware/splitio-react";
import { Checkbox, Divider, Dropdown, Form, Input, InputNumber, Radio, Select, Space, Tag } from "antd";
+import React from "react";
import { useTranslation } from "react-i18next";
import { connect } from "react-redux";
import { createStructuredSelector } from "reselect";
import { selectBodyshop } from "../../redux/user/user.selectors";
-import DateTimePicker from "../form-date-time-picker/form-date-time-picker.component.jsx";
import CurrencyInput from "../form-items-formatted/currency-form-item.component";
import FormListMoveArrows from "../form-list-move-arrows/form-list-move-arrows.component";
import LayoutFormRow from "../layout-form-row/layout-form-row.component";
import VendorSearchSelect from "../vendor-search-select/vendor-search-select.component";
import PartsOrderModalPriceChange from "./parts-order-modal-price-change.component";
+import DateTimePicker from "../form-date-time-picker/form-date-time-picker.component.jsx";
const mapStateToProps = createStructuredSelector({
bodyshop: selectBodyshop
@@ -32,7 +33,7 @@ export function PartsOrderModalComponent({ bodyshop, vendorList, sendTypeState,
});
const { t } = useTranslation();
- const handleClick = ({ item }) => {
+ const handleClick = ({ item, key, keyPath }) => {
form.setFieldsValue({ comments: item.props.value });
};
@@ -97,18 +98,17 @@ export function PartsOrderModalComponent({ bodyshop, vendorList, sendTypeState,
)}
- {!isReturn && (
-
-
- {t("parts_orders.labels.parts_order")}
- {t("parts_orders.labels.sublet_order")}
-
-
- )}
+
+
+
+ {t("parts_orders.labels.parts_order")}
+ {t("parts_orders.labels.sublet_order")}
+
+
{t("parts_orders.labels.inthisorder")}
- {(fields, { remove, move }) => {
+ {(fields, { add, remove, move }) => {
return (
{fields.map((field, index) => (
diff --git a/client/src/components/production-list-detail/production-list-detail.component.jsx b/client/src/components/production-list-detail/production-list-detail.component.jsx
index ea2d6ef67..7db55bd07 100644
--- a/client/src/components/production-list-detail/production-list-detail.component.jsx
+++ b/client/src/components/production-list-detail/production-list-detail.component.jsx
@@ -1,17 +1,20 @@
-import { PrinterFilled } from "@ant-design/icons";
-import { useQuery } from "@apollo/client";
-import { Button, Descriptions, Drawer, Space } from "antd";
+import { PauseCircleOutlined, PlayCircleOutlined, PrinterFilled } from "@ant-design/icons";
import { PageHeader } from "@ant-design/pro-layout";
+import { useMutation, useQuery } from "@apollo/client";
+import { Button, Descriptions, Drawer, Space } from "antd";
import queryString from "query-string";
-import React from "react";
import { useTranslation } from "react-i18next";
import { connect } from "react-redux";
import { useLocation, useNavigate } from "react-router-dom";
import { createStructuredSelector } from "reselect";
-import { QUERY_JOB_CARD_DETAILS } from "../../graphql/jobs.queries";
+import { useSocket } from "../../contexts/SocketIO/useSocket.jsx";
+import { logImEXEvent } from "../../firebase/firebase.utils.js";
+import { QUERY_JOB_CARD_DETAILS, UPDATE_JOB } from "../../graphql/jobs.queries";
+import { insertAuditTrail } from "../../redux/application/application.actions.js";
import { setModalContext } from "../../redux/modals/modals.actions";
import { selectTechnician } from "../../redux/tech/tech.selectors";
import { selectBodyshop } from "../../redux/user/user.selectors";
+import AuditTrailMapping from "../../utils/AuditTrailMappings.js";
import CurrencyFormatter from "../../utils/CurrencyFormatter";
import { DateFormatter } from "../../utils/DateFormatter";
import PhoneNumberFormatter from "../../utils/PhoneFormatter";
@@ -24,22 +27,29 @@ import JobDetailCardsPartsComponent from "../job-detail-cards/job-detail-cards.p
import CardTemplate from "../job-detail-cards/job-detail-cards.template.component";
import JobEmployeeAssignments from "../job-employee-assignments/job-employee-assignments.container";
import ScoreboardAddButton from "../job-scoreboard-add-button/job-scoreboard-add-button.component";
+import JobWatcherToggleContainer from "../job-watcher-toggle/job-watcher-toggle.container.jsx";
import LoadingSkeleton from "../loading-skeleton/loading-skeleton.component";
import OwnerNameDisplay from "../owner-name-display/owner-name-display.component";
import ProductionRemoveButton from "../production-remove-button/production-remove-button.component";
-import JobWatcherToggleContainer from "../job-watcher-toggle/job-watcher-toggle.container.jsx";
-import { useSocket } from "../../contexts/SocketIO/useSocket.jsx";
const mapStateToProps = createStructuredSelector({
bodyshop: selectBodyshop,
technician: selectTechnician
});
const mapDispatchToProps = (dispatch) => ({
- setPrintCenterContext: (context) => dispatch(setModalContext({ context: context, modal: "printCenter" }))
+ setPrintCenterContext: (context) => dispatch(setModalContext({ context: context, modal: "printCenter" })),
+ insertAuditTrail: ({ jobid, operation, type }) =>
+ dispatch(
+ insertAuditTrail({
+ jobid,
+ operation,
+ type
+ })
+ )
});
export default connect(mapStateToProps, mapDispatchToProps)(ProductionListDetail);
-export function ProductionListDetail({ bodyshop, jobs, setPrintCenterContext, technician }) {
+export function ProductionListDetail({ bodyshop, jobs, setPrintCenterContext, technician, insertAuditTrail }) {
const search = queryString.parse(useLocation().search);
const history = useNavigate();
const { selected } = search;
@@ -58,6 +68,7 @@ export function ProductionListDetail({ bodyshop, jobs, setPrintCenterContext, te
fetchPolicy: "network-only",
nextFetchPolicy: "network-only"
});
+ const [updateJob] = useMutation(UPDATE_JOB);
return (
{!technician ? : null}
+ {!technician && (
+ {
+ logImEXEvent("production_toggle_alert");
+ updateJob({
+ variables: {
+ jobId: theJob.id,
+ job: {
+ suspended: !theJob.suspended
+ }
+ }
+ });
+ insertAuditTrail({
+ jobid: theJob.id,
+ operation: AuditTrailMapping.jobsuspend(theJob.suspended ? !theJob.suspended : true),
+ type: "jobsuspend"
+ });
+ }}
+ icon={theJob.suspended ? : }
+ >
+ {theJob.suspended ? t("production.actions.unsuspend") : t("production.actions.suspend")}
+
+ )}
{
setPrintCenterContext({
@@ -83,8 +117,8 @@ export function ProductionListDetail({ bodyshop, jobs, setPrintCenterContext, te
}
});
}}
+ icon={ }
>
-
{t("jobs.actions.printCenter")}
{!technician ? : null}
diff --git a/client/src/components/profile-shops/profile-shops.container.jsx b/client/src/components/profile-shops/profile-shops.container.jsx
index 4c5150913..007c0ddc7 100644
--- a/client/src/components/profile-shops/profile-shops.container.jsx
+++ b/client/src/components/profile-shops/profile-shops.container.jsx
@@ -5,7 +5,7 @@ import { QUERY_ALL_ASSOCIATIONS, UPDATE_ACTIVE_ASSOCIATION } from "../../graphql
import AlertComponent from "../alert/alert.component";
import ProfileShopsComponent from "./profile-shops.component";
import axios from "axios";
-import { getToken } from "firebase/messaging";
+import { getToken } from "@firebase/messaging";
import { connect } from "react-redux";
import { createStructuredSelector } from "reselect";
diff --git a/client/src/components/shop-info/shop-info.laborrates.component.jsx b/client/src/components/shop-info/shop-info.laborrates.component.jsx
index 0c7c9b556..af8df9b34 100644
--- a/client/src/components/shop-info/shop-info.laborrates.component.jsx
+++ b/client/src/components/shop-info/shop-info.laborrates.component.jsx
@@ -1,6 +1,5 @@
import { DeleteFilled } from "@ant-design/icons";
-import { Button, Form, Input } from "antd";
-import React from "react";
+import { Button, Form, Input, Space } from "antd";
import { useTranslation } from "react-i18next";
import CurrencyInput from "../form-items-formatted/currency-form-item.component";
import FormListMoveArrows from "../form-list-move-arrows/form-list-move-arrows.component";
@@ -10,326 +9,338 @@ export default function ShopInfoLaborRates({ form }) {
const { t } = useTranslation();
return (
-
-
- {(fields, { add, remove, move }) => {
- return (
-
+
+ );
+ }}
+
+
+ >
);
}
diff --git a/client/src/firebase/firebase.utils.js b/client/src/firebase/firebase.utils.js
index 9a7225b6d..9a09c8c73 100644
--- a/client/src/firebase/firebase.utils.js
+++ b/client/src/firebase/firebase.utils.js
@@ -1,8 +1,8 @@
-import { getAnalytics, logEvent } from "firebase/analytics";
-import { initializeApp } from "firebase/app";
-import { getAuth, updatePassword, updateProfile } from "firebase/auth";
-import { getFirestore } from "firebase/firestore";
-import { getMessaging, getToken, onMessage } from "firebase/messaging";
+import { getAnalytics, logEvent } from "@firebase/analytics";
+import { initializeApp } from "@firebase/app";
+import { getAuth, updatePassword, updateProfile } from "@firebase/auth";
+import { getFirestore } from "@firebase/firestore";
+import { getMessaging, getToken, onMessage } from "@firebase/messaging";
import { store } from "../redux/store";
const config = JSON.parse(import.meta.env.VITE_APP_FIREBASE_CONFIG);
diff --git a/client/src/graphql/jobs.queries.js b/client/src/graphql/jobs.queries.js
index ddfd26a2f..a9f16c111 100644
--- a/client/src/graphql/jobs.queries.js
+++ b/client/src/graphql/jobs.queries.js
@@ -509,6 +509,7 @@ export const GET_JOB_BY_PK = gql`
est_ct_ln
est_ea
est_ph1
+ flat_rate_ats
federal_tax_rate
id
inproduction
@@ -649,6 +650,7 @@ export const GET_JOB_BY_PK = gql`
policy_no
production_vars
rate_ats
+ rate_ats_flat
rate_la1
rate_la2
rate_la3
diff --git a/client/src/pages/landing/landing.page.jsx b/client/src/pages/landing/landing.page.jsx
index 081418fdf..eccc9f6aa 100644
--- a/client/src/pages/landing/landing.page.jsx
+++ b/client/src/pages/landing/landing.page.jsx
@@ -13,7 +13,6 @@ export default connect(mapStateToProps, null)(LandingPage);
export function LandingPage({ currentUser }) {
const navigate = useNavigate();
- console.log("Main");
useEffect(() => {
navigate("/manage/jobs");
}, [currentUser, navigate]);
diff --git a/client/src/pages/temporary-docs/temporary-docs.component.jsx b/client/src/pages/temporary-docs/temporary-docs.component.jsx
index 092011e65..26948d7a4 100644
--- a/client/src/pages/temporary-docs/temporary-docs.component.jsx
+++ b/client/src/pages/temporary-docs/temporary-docs.component.jsx
@@ -1,14 +1,15 @@
import { useQuery } from "@apollo/client";
import React from "react";
import AlertComponent from "../../components/alert/alert.component";
-import JobsDocumentsComponent from "../../components/jobs-documents-gallery/jobs-documents-gallery.component";
+import JobsDocumentsContainer from "../../components/jobs-documents-gallery/jobs-documents-gallery.container";
import LoadingSpinner from "../../components/loading-spinner/loading-spinner.component";
import { QUERY_TEMPORARY_DOCS } from "../../graphql/documents.queries";
+import { useSplitTreatments } from "@splitsoftware/splitio-react";
import { connect } from "react-redux";
import { createStructuredSelector } from "reselect";
-import { selectBodyshop } from "../../redux/user/user.selectors";
import JobsDocumentsLocalGallery from "../../components/jobs-documents-local-gallery/jobs-documents-local-gallery.container";
+import { selectBodyshop } from "../../redux/user/user.selectors";
const mapStateToProps = createStructuredSelector({
bodyshop: selectBodyshop
@@ -19,10 +20,18 @@ const mapDispatchToProps = (dispatch) => ({
export default connect(mapStateToProps, mapDispatchToProps)(TemporaryDocsComponent);
export function TemporaryDocsComponent({ bodyshop }) {
+ const {
+ treatments: { Imgproxy }
+ } = useSplitTreatments({
+ attributes: {},
+ names: ["Imgproxy"],
+ splitKey: bodyshop && bodyshop.imexshopid
+ });
+
const { loading, error, data, refetch } = useQuery(QUERY_TEMPORARY_DOCS, {
fetchPolicy: "network-only",
nextFetchPolicy: "network-only",
- skip: bodyshop.uselocalmediaserver
+ skip: Imgproxy.treatment === "on"
});
if (loading) return ;
@@ -32,12 +41,14 @@ export function TemporaryDocsComponent({ bodyshop }) {
return ;
}
return (
-
+ <>
+
+ >
);
}
diff --git a/client/src/redux/user/user.actions.js b/client/src/redux/user/user.actions.js
index f5393b6e9..01ba22534 100644
--- a/client/src/redux/user/user.actions.js
+++ b/client/src/redux/user/user.actions.js
@@ -118,3 +118,8 @@ export const setCurrentEula = (eula) => ({
export const acceptEula = () => ({
type: UserActionTypes.EULA_ACCEPTED
});
+
+export const setImexShopId = (imexshopid) => ({
+ type: UserActionTypes.SET_IMEX_SHOP_ID,
+ payload: imexshopid
+});
diff --git a/client/src/redux/user/user.reducer.js b/client/src/redux/user/user.reducer.js
index c117bd1c9..0042115ff 100644
--- a/client/src/redux/user/user.reducer.js
+++ b/client/src/redux/user/user.reducer.js
@@ -121,6 +121,11 @@ const userReducer = (state = INITIAL_STATE, action) => {
};
case UserActionTypes.SET_AUTH_LEVEL:
return { ...state, authLevel: action.payload };
+ case UserActionTypes.SET_IMEX_SHOP_ID:
+ return {
+ ...state,
+ imexshopid: action.payload
+ };
default:
return state;
}
diff --git a/client/src/redux/user/user.sagas.js b/client/src/redux/user/user.sagas.js
index a8c0ffd0b..3b3a07c91 100644
--- a/client/src/redux/user/user.sagas.js
+++ b/client/src/redux/user/user.sagas.js
@@ -2,20 +2,19 @@ import FingerprintJS from "@fingerprintjs/fingerprintjs";
import * as Sentry from "@sentry/browser";
import { notification } from "antd";
import axios from "axios";
-import { setUserId, setUserProperties } from "firebase/analytics";
+import { setUserId, setUserProperties } from "@firebase/analytics";
import {
checkActionCode,
confirmPasswordReset,
sendPasswordResetEmail,
signInWithEmailAndPassword,
signOut
-} from "firebase/auth";
-import { arrayUnion, doc, getDoc, setDoc, updateDoc } from "firebase/firestore";
-import { getToken } from "firebase/messaging";
+} from "@firebase/auth";
+import { arrayUnion, doc, getDoc, setDoc, updateDoc } from "@firebase/firestore";
+import { getToken } from "@firebase/messaging";
import i18next from "i18next";
import LogRocket from "logrocket";
import { all, call, delay, put, select, takeLatest } from "redux-saga/effects";
-import { factory } from "../../App/App.container";
import {
analytics,
auth,
@@ -35,6 +34,7 @@ import {
sendPasswordResetFailure,
sendPasswordResetSuccess,
setAuthlevel,
+ setImexShopId,
setInstanceConflict,
setInstanceId,
setLocalFingerprint,
@@ -318,7 +318,8 @@ export function* SetAuthLevelFromShopDetails({ payload }) {
console.log(error);
}
- factory.client(payload.imexshopid);
+ // Dispatch the imexshopid to Redux store
+ yield put(setImexShopId(payload.imexshopid));
const authRecord = payload.associations.filter((a) => a.useremail.toLowerCase() === userEmail.toLowerCase());
diff --git a/client/src/redux/user/user.types.js b/client/src/redux/user/user.types.js
index 59a290ee5..d9cd6fe62 100644
--- a/client/src/redux/user/user.types.js
+++ b/client/src/redux/user/user.types.js
@@ -32,6 +32,7 @@ const UserActionTypes = {
CHECK_ACTION_CODE_SUCCESS: "CHECK_ACTION_CODE_SUCCESS",
CHECK_ACTION_CODE_FAILURE: "CHECK_ACTION_CODE_FAILURE",
SET_CURRENT_EULA: "SET_CURRENT_EULA",
- EULA_ACCEPTED: "EULA_ACCEPTED"
+ EULA_ACCEPTED: "EULA_ACCEPTED",
+ SET_IMEX_SHOP_ID: "SET_IMEX_SHOP_ID"
};
export default UserActionTypes;
diff --git a/client/src/translations/en_us/common.json b/client/src/translations/en_us/common.json
index 5e062169a..ccf90fc10 100644
--- a/client/src/translations/en_us/common.json
+++ b/client/src/translations/en_us/common.json
@@ -722,6 +722,7 @@
"scoreboardsetup": "Scoreboard Setup",
"shop_enabled_features": "Shop Enabled Features",
"shopinfo": "Shop Information",
+ "shoprates": "Shop Rates",
"speedprint": "Speed Print Configuration",
"ssbuckets": "Job Size Definitions",
"systemsettings": "System Settings",
@@ -1658,7 +1659,7 @@
"08": "Left Rear Side",
"09": "Left Side"
},
- "auto_add_ats": "Automatically Add/Update ATS",
+ "auto_add_ats": "Automatically Add/Update ATS?",
"ca_bc_pvrt": "PVRT",
"ca_customer_gst": "Customer Portion of GST",
"ca_gst_registrant": "GST Registrant",
@@ -1757,6 +1758,7 @@
"est_ct_ln": "Estimator Last Name",
"est_ea": "Estimator Email",
"est_ph1": "Estimator Phone #",
+ "flat_rate_ats": "Flat Rate ATS?",
"federal_tax_payable": "Federal Tax Payable",
"federal_tax_rate": "Federal Tax Rate",
"ins_addr1": "Insurance Co. Address",
@@ -1868,6 +1870,7 @@
},
"queued_for_parts": "Queued for Parts",
"rate_ats": "ATS Rate",
+ "rate_ats_flat": "ATS Flat Rate",
"rate_la1": "LA1",
"rate_la2": "LA2",
"rate_la3": "LA3",
diff --git a/client/src/translations/es/common.json b/client/src/translations/es/common.json
index 6aa64961a..2f9fa9a2b 100644
--- a/client/src/translations/es/common.json
+++ b/client/src/translations/es/common.json
@@ -722,6 +722,7 @@
"scoreboardsetup": "",
"shop_enabled_features": "",
"shopinfo": "",
+ "shoprates": "",
"speedprint": "",
"ssbuckets": "",
"systemsettings": "",
@@ -1757,6 +1758,7 @@
"est_ct_ln": "Apellido del tasador",
"est_ea": "Correo electrĂ³nico del tasador",
"est_ph1": "NĂºmero de telĂ©fono del tasador",
+ "flat_rate_ats": "",
"federal_tax_payable": "Impuesto federal por pagar",
"federal_tax_rate": "",
"ins_addr1": "DirecciĂ³n de Insurance Co.",
@@ -1868,6 +1870,7 @@
},
"queued_for_parts": "",
"rate_ats": "",
+ "rate_ats_flat": "",
"rate_la1": "Tarifa LA1",
"rate_la2": "Tarifa LA2",
"rate_la3": "Tarifa LA3",
diff --git a/client/src/translations/fr/common.json b/client/src/translations/fr/common.json
index 6e9713285..888162de9 100644
--- a/client/src/translations/fr/common.json
+++ b/client/src/translations/fr/common.json
@@ -722,6 +722,7 @@
"scoreboardsetup": "",
"shop_enabled_features": "",
"shopinfo": "",
+ "shoprates": "",
"speedprint": "",
"ssbuckets": "",
"systemsettings": "",
@@ -1757,6 +1758,7 @@
"est_ct_ln": "Nom de l'évaluateur",
"est_ea": "Courriel de l'évaluateur",
"est_ph1": "Numéro de téléphone de l'évaluateur",
+ "flat_rate_ats": "",
"federal_tax_payable": "Impôt fédéral à payer",
"federal_tax_rate": "",
"ins_addr1": "Adresse Insurance Co.",
@@ -1868,6 +1870,7 @@
},
"queued_for_parts": "",
"rate_ats": "",
+ "rate_ats_flat": "",
"rate_la1": "Taux LA1",
"rate_la2": "Taux LA2",
"rate_la3": "Taux LA3",
diff --git a/client/vite.config.js b/client/vite.config.js
index 6b13da6bf..6aed665ef 100644
--- a/client/vite.config.js
+++ b/client/vite.config.js
@@ -191,24 +191,11 @@ export default defineConfig({
"@sentry/react": ["@sentry/react"],
"@splitsoftware/splitio-react": ["@splitsoftware/splitio-react"],
logrocket: ["logrocket"],
- "firebase/app": ["firebase/app"],
- "firebase/firestore": ["firebase/firestore"],
- "firebase/firestore/lite": ["firebase/firestore/lite"],
- "firebase/auth": ["firebase/auth"],
- "firebase/functions": ["firebase/functions"],
- "firebase/storage": ["firebase/storage"],
- "firebase/database": ["firebase/database"],
- "firebase/remote-config": ["firebase/remote-config"],
- "firebase/performance": ["firebase/performance"],
+ "@firebase/analytics": ["@firebase/analytics"],
"@firebase/app": ["@firebase/app"],
"@firebase/firestore": ["@firebase/firestore"],
- "@firebase/firestore/lite": ["@firebase/firestore/lite"],
"@firebase/auth": ["@firebase/auth"],
- "@firebase/functions": ["@firebase/functions"],
- "@firebase/storage": ["@firebase/storage"],
- "@firebase/database": ["@firebase/database"],
- "@firebase/remote-config": ["@firebase/remote-config"],
- "@firebase/performance": ["@firebase/performance"],
+ "@firebase/messaging": ["@firebase/messaging"],
markerjs2: ["markerjs2"],
"@apollo/client": ["@apollo/client"],
"libphonenumber-js": ["libphonenumber-js"]
diff --git a/hasura/metadata/tables.yaml b/hasura/metadata/tables.yaml
index 6cdb4c008..4d1f5192e 100644
--- a/hasura/metadata/tables.yaml
+++ b/hasura/metadata/tables.yaml
@@ -3695,6 +3695,7 @@
- est_st
- est_zip
- federal_tax_rate
+ - flat_rate_ats
- g_bett_amt
- id
- inproduction
@@ -3789,6 +3790,7 @@
- qb_multiple_payers
- queued_for_parts
- rate_ats
+ - rate_ats_flat
- rate_la1
- rate_la2
- rate_la3
@@ -3965,6 +3967,7 @@
- est_st
- est_zip
- federal_tax_rate
+ - flat_rate_ats
- g_bett_amt
- id
- inproduction
@@ -4060,6 +4063,7 @@
- qb_multiple_payers
- queued_for_parts
- rate_ats
+ - rate_ats_flat
- rate_la1
- rate_la2
- rate_la3
@@ -4247,6 +4251,7 @@
- est_st
- est_zip
- federal_tax_rate
+ - flat_rate_ats
- g_bett_amt
- id
- inproduction
@@ -4342,6 +4347,7 @@
- qb_multiple_payers
- queued_for_parts
- rate_ats
+ - rate_ats_flat
- rate_la1
- rate_la2
- rate_la3
diff --git a/hasura/migrations/1742583400542_alter_table_public_jobs_add_column_flat_rate_ats/down.sql b/hasura/migrations/1742583400542_alter_table_public_jobs_add_column_flat_rate_ats/down.sql
new file mode 100644
index 000000000..5478f998b
--- /dev/null
+++ b/hasura/migrations/1742583400542_alter_table_public_jobs_add_column_flat_rate_ats/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 "flat_rate_ats" boolean
+-- null default 'false';
diff --git a/hasura/migrations/1742583400542_alter_table_public_jobs_add_column_flat_rate_ats/up.sql b/hasura/migrations/1742583400542_alter_table_public_jobs_add_column_flat_rate_ats/up.sql
new file mode 100644
index 000000000..73fa874ae
--- /dev/null
+++ b/hasura/migrations/1742583400542_alter_table_public_jobs_add_column_flat_rate_ats/up.sql
@@ -0,0 +1,2 @@
+alter table "public"."jobs" add column "flat_rate_ats" boolean
+ null default 'false';
diff --git a/hasura/migrations/1742583433746_alter_table_public_jobs_add_column_rate_ats_flat/down.sql b/hasura/migrations/1742583433746_alter_table_public_jobs_add_column_rate_ats_flat/down.sql
new file mode 100644
index 000000000..3f82e9770
--- /dev/null
+++ b/hasura/migrations/1742583433746_alter_table_public_jobs_add_column_rate_ats_flat/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 "rate_ats_flat" numeric
+-- null;
diff --git a/hasura/migrations/1742583433746_alter_table_public_jobs_add_column_rate_ats_flat/up.sql b/hasura/migrations/1742583433746_alter_table_public_jobs_add_column_rate_ats_flat/up.sql
new file mode 100644
index 000000000..e0157edd2
--- /dev/null
+++ b/hasura/migrations/1742583433746_alter_table_public_jobs_add_column_rate_ats_flat/up.sql
@@ -0,0 +1,2 @@
+alter table "public"."jobs" add column "rate_ats_flat" numeric
+ null;
diff --git a/package-lock.json b/package-lock.json
index ee26aab5c..806ee2a13 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -9,46 +9,49 @@
"version": "0.2.0",
"license": "UNLICENSED",
"dependencies": {
- "@aws-sdk/client-cloudwatch-logs": "^3.758.0",
- "@aws-sdk/client-elasticache": "^3.758.0",
- "@aws-sdk/client-s3": "^3.758.0",
- "@aws-sdk/client-secrets-manager": "^3.758.0",
- "@aws-sdk/client-ses": "^3.758.0",
- "@aws-sdk/credential-provider-node": "^3.758.0",
+ "@aws-sdk/client-cloudwatch-logs": "^3.772.0",
+ "@aws-sdk/client-elasticache": "^3.772.0",
+ "@aws-sdk/client-s3": "^3.772.0",
+ "@aws-sdk/client-secrets-manager": "^3.772.0",
+ "@aws-sdk/client-ses": "^3.772.0",
+ "@aws-sdk/credential-provider-node": "^3.772.0",
+ "@aws-sdk/lib-storage": "^3.774.0",
+ "@aws-sdk/s3-request-presigner": "^3.774.0",
"@opensearch-project/opensearch": "^2.13.0",
"@socket.io/admin-ui": "^0.5.1",
"@socket.io/redis-adapter": "^8.3.0",
+ "archiver": "^7.0.1",
"aws4": "^1.13.2",
- "axios": "^1.8.1",
+ "axios": "^1.8.4",
"bee-queue": "^1.7.1",
"better-queue": "^3.8.12",
"bluebird": "^3.7.2",
"body-parser": "^1.20.3",
- "bullmq": "^5.41.7",
+ "bullmq": "^5.44.4",
"chart.js": "^4.4.8",
- "cloudinary": "^2.5.1",
+ "cloudinary": "^2.6.0",
"compression": "^1.8.0",
"cookie-parser": "^1.4.7",
"cors": "2.8.5",
"crisp-status-reporter": "^1.2.2",
"csrf": "^3.1.0",
- "dd-trace": "^5.40.0",
+ "dd-trace": "^5.43.0",
"dinero.js": "^1.9.1",
"dotenv": "^16.4.5",
"express": "^4.21.1",
- "firebase-admin": "^13.1.0",
+ "firebase-admin": "^13.2.0",
"graphql": "^16.10.0",
"graphql-request": "^6.1.0",
"inline-css": "^4.0.3",
"intuit-oauth": "^4.2.0",
- "ioredis": "^5.5.0",
- "json-2-csv": "^5.5.8",
+ "ioredis": "^5.6.0",
+ "json-2-csv": "^5.5.9",
"juice": "^11.0.1",
"lodash": "^4.17.21",
"moment": "^2.30.1",
- "moment-timezone": "^0.5.47",
+ "moment-timezone": "^0.5.48",
"multer": "^1.4.5-lts.1",
- "node-mailjet": "^6.0.6",
+ "node-mailjet": "^6.0.8",
"node-persist": "^4.0.4",
"nodemailer": "^6.10.0",
"phone": "^3.1.58",
@@ -56,22 +59,21 @@
"redis": "^4.7.0",
"rimraf": "^6.0.1",
"skia-canvas": "^2.0.2",
- "soap": "^1.1.9",
+ "soap": "^1.1.10",
"socket.io": "^4.8.1",
"socket.io-adapter": "^2.5.5",
"ssh2-sftp-client": "^11.0.0",
- "twilio": "^4.23.0",
- "uuid": "^10.0.0",
+ "twilio": "^5.5.1",
+ "uuid": "^11.1.0",
"winston": "^3.17.0",
"winston-cloudwatch": "^6.3.0",
"xml2js": "^0.6.2",
"xmlbuilder2": "^3.1.1"
},
"devDependencies": {
- "@eslint/js": "^9.21.0",
+ "@eslint/js": "^9.23.0",
"@trivago/prettier-plugin-sort-imports": "^5.2.2",
- "concurrently": "^8.2.2",
- "eslint": "^9.21.0",
+ "eslint": "^9.23.0",
"eslint-plugin-react": "^7.37.4",
"globals": "^15.15.0",
"p-limit": "^3.1.0",
@@ -286,24 +288,24 @@
}
},
"node_modules/@aws-sdk/client-cloudwatch-logs": {
- "version": "3.758.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/client-cloudwatch-logs/-/client-cloudwatch-logs-3.758.0.tgz",
- "integrity": "sha512-IlEIm5h4vfeoZyY8Op4W6lX1lqcEYE3DRKl+fMKRTFttvJ+AJfuZlAgFlMh9OPFQ0ZMLe8etoxHwKN50YCLivw==",
+ "version": "3.774.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/client-cloudwatch-logs/-/client-cloudwatch-logs-3.774.0.tgz",
+ "integrity": "sha512-P+qEZJMd4kZVbTs2YRvBHOYlRd0U7bgpbEhRoYRS6vOWymRinQaxj/KCaw1cmdBILj502CUieFGj6DEYAbiNzQ==",
"license": "Apache-2.0",
"dependencies": {
"@aws-crypto/sha256-browser": "5.2.0",
"@aws-crypto/sha256-js": "5.2.0",
- "@aws-sdk/core": "3.758.0",
- "@aws-sdk/credential-provider-node": "3.758.0",
- "@aws-sdk/middleware-host-header": "3.734.0",
+ "@aws-sdk/core": "3.774.0",
+ "@aws-sdk/credential-provider-node": "3.774.0",
+ "@aws-sdk/middleware-host-header": "3.774.0",
"@aws-sdk/middleware-logger": "3.734.0",
- "@aws-sdk/middleware-recursion-detection": "3.734.0",
- "@aws-sdk/middleware-user-agent": "3.758.0",
+ "@aws-sdk/middleware-recursion-detection": "3.772.0",
+ "@aws-sdk/middleware-user-agent": "3.774.0",
"@aws-sdk/region-config-resolver": "3.734.0",
"@aws-sdk/types": "3.734.0",
"@aws-sdk/util-endpoints": "3.743.0",
"@aws-sdk/util-user-agent-browser": "3.734.0",
- "@aws-sdk/util-user-agent-node": "3.758.0",
+ "@aws-sdk/util-user-agent-node": "3.774.0",
"@smithy/config-resolver": "^4.0.1",
"@smithy/core": "^3.1.5",
"@smithy/eventstream-serde-browser": "^4.0.1",
@@ -354,24 +356,24 @@
}
},
"node_modules/@aws-sdk/client-elasticache": {
- "version": "3.758.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/client-elasticache/-/client-elasticache-3.758.0.tgz",
- "integrity": "sha512-qmDOTHhB0hUm/Ifypi6+zjUR4dl7H576oM4/p2RUgkjyz2RgJaLJhyX32TDDzcX2maevNHJ3TijXOkGxoGDeog==",
+ "version": "3.774.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/client-elasticache/-/client-elasticache-3.774.0.tgz",
+ "integrity": "sha512-uBWSLt6p5tSZCdoizuNyytGiZBFgtUAnXH7GnYH1tVzPeQoQb5GI5of5cDw9lFIIR6DWpYjA7JZ7EEmNvvD7rw==",
"license": "Apache-2.0",
"dependencies": {
"@aws-crypto/sha256-browser": "5.2.0",
"@aws-crypto/sha256-js": "5.2.0",
- "@aws-sdk/core": "3.758.0",
- "@aws-sdk/credential-provider-node": "3.758.0",
- "@aws-sdk/middleware-host-header": "3.734.0",
+ "@aws-sdk/core": "3.774.0",
+ "@aws-sdk/credential-provider-node": "3.774.0",
+ "@aws-sdk/middleware-host-header": "3.774.0",
"@aws-sdk/middleware-logger": "3.734.0",
- "@aws-sdk/middleware-recursion-detection": "3.734.0",
- "@aws-sdk/middleware-user-agent": "3.758.0",
+ "@aws-sdk/middleware-recursion-detection": "3.772.0",
+ "@aws-sdk/middleware-user-agent": "3.774.0",
"@aws-sdk/region-config-resolver": "3.734.0",
"@aws-sdk/types": "3.734.0",
"@aws-sdk/util-endpoints": "3.743.0",
"@aws-sdk/util-user-agent-browser": "3.734.0",
- "@aws-sdk/util-user-agent-node": "3.758.0",
+ "@aws-sdk/util-user-agent-node": "3.774.0",
"@smithy/config-resolver": "^4.0.1",
"@smithy/core": "^3.1.5",
"@smithy/fetch-http-handler": "^5.0.1",
@@ -405,32 +407,32 @@
}
},
"node_modules/@aws-sdk/client-s3": {
- "version": "3.758.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/client-s3/-/client-s3-3.758.0.tgz",
- "integrity": "sha512-f8SlhU9/93OC/WEI6xVJf/x/GoQFj9a/xXK6QCtr5fvCjfSLgMVFmKTiIl/tgtDRzxUDc8YS6EGtbHjJ3Y/atg==",
+ "version": "3.774.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/client-s3/-/client-s3-3.774.0.tgz",
+ "integrity": "sha512-HQ5Xi01r/Pv2IpzPTf5acrN0g/yJQalheDCYbBSA8VU31zoYiT/w5kLFWYJHQDB2hRozh2DB/VC/VDmntkWXxA==",
"license": "Apache-2.0",
"dependencies": {
"@aws-crypto/sha1-browser": "5.2.0",
"@aws-crypto/sha256-browser": "5.2.0",
"@aws-crypto/sha256-js": "5.2.0",
- "@aws-sdk/core": "3.758.0",
- "@aws-sdk/credential-provider-node": "3.758.0",
+ "@aws-sdk/core": "3.774.0",
+ "@aws-sdk/credential-provider-node": "3.774.0",
"@aws-sdk/middleware-bucket-endpoint": "3.734.0",
"@aws-sdk/middleware-expect-continue": "3.734.0",
- "@aws-sdk/middleware-flexible-checksums": "3.758.0",
- "@aws-sdk/middleware-host-header": "3.734.0",
+ "@aws-sdk/middleware-flexible-checksums": "3.774.0",
+ "@aws-sdk/middleware-host-header": "3.774.0",
"@aws-sdk/middleware-location-constraint": "3.734.0",
"@aws-sdk/middleware-logger": "3.734.0",
- "@aws-sdk/middleware-recursion-detection": "3.734.0",
- "@aws-sdk/middleware-sdk-s3": "3.758.0",
+ "@aws-sdk/middleware-recursion-detection": "3.772.0",
+ "@aws-sdk/middleware-sdk-s3": "3.774.0",
"@aws-sdk/middleware-ssec": "3.734.0",
- "@aws-sdk/middleware-user-agent": "3.758.0",
+ "@aws-sdk/middleware-user-agent": "3.774.0",
"@aws-sdk/region-config-resolver": "3.734.0",
- "@aws-sdk/signature-v4-multi-region": "3.758.0",
+ "@aws-sdk/signature-v4-multi-region": "3.774.0",
"@aws-sdk/types": "3.734.0",
"@aws-sdk/util-endpoints": "3.743.0",
"@aws-sdk/util-user-agent-browser": "3.734.0",
- "@aws-sdk/util-user-agent-node": "3.758.0",
+ "@aws-sdk/util-user-agent-node": "3.774.0",
"@aws-sdk/xml-builder": "3.734.0",
"@smithy/config-resolver": "^4.0.1",
"@smithy/core": "^3.1.5",
@@ -472,24 +474,24 @@
}
},
"node_modules/@aws-sdk/client-secrets-manager": {
- "version": "3.758.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/client-secrets-manager/-/client-secrets-manager-3.758.0.tgz",
- "integrity": "sha512-Vi4cdCim0jQx3rrU5R1W4v3czoWL0ajBtoI15oSSt7cwLjzNA0xq4nXSa6rahjTgtZWlLeBprbquvxNzY3qg5Q==",
+ "version": "3.774.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/client-secrets-manager/-/client-secrets-manager-3.774.0.tgz",
+ "integrity": "sha512-AoVpmzLY/PW/0H6hcc/Rn/uisDTFE7WX/oWZ8qU2gYMuH3z2VUAIhHQZq3mNpXH4ZlWPH+sDA8cG1tCc8dgVqA==",
"license": "Apache-2.0",
"dependencies": {
"@aws-crypto/sha256-browser": "5.2.0",
"@aws-crypto/sha256-js": "5.2.0",
- "@aws-sdk/core": "3.758.0",
- "@aws-sdk/credential-provider-node": "3.758.0",
- "@aws-sdk/middleware-host-header": "3.734.0",
+ "@aws-sdk/core": "3.774.0",
+ "@aws-sdk/credential-provider-node": "3.774.0",
+ "@aws-sdk/middleware-host-header": "3.774.0",
"@aws-sdk/middleware-logger": "3.734.0",
- "@aws-sdk/middleware-recursion-detection": "3.734.0",
- "@aws-sdk/middleware-user-agent": "3.758.0",
+ "@aws-sdk/middleware-recursion-detection": "3.772.0",
+ "@aws-sdk/middleware-user-agent": "3.774.0",
"@aws-sdk/region-config-resolver": "3.734.0",
"@aws-sdk/types": "3.734.0",
"@aws-sdk/util-endpoints": "3.743.0",
"@aws-sdk/util-user-agent-browser": "3.734.0",
- "@aws-sdk/util-user-agent-node": "3.758.0",
+ "@aws-sdk/util-user-agent-node": "3.774.0",
"@smithy/config-resolver": "^4.0.1",
"@smithy/core": "^3.1.5",
"@smithy/fetch-http-handler": "^5.0.1",
@@ -537,24 +539,24 @@
}
},
"node_modules/@aws-sdk/client-ses": {
- "version": "3.758.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/client-ses/-/client-ses-3.758.0.tgz",
- "integrity": "sha512-cWBjZqY7SsFdTTSw3726DEPy3d7FfQ8qrw21RCukM/p3Ty42NWauHkqgxOmRygeiSY3ygHmWexc32B+4RXXqTw==",
+ "version": "3.774.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/client-ses/-/client-ses-3.774.0.tgz",
+ "integrity": "sha512-EWZRm9nV7xFQYjFmk259gf1Mp40MuJ1KWHbY5y6EYt3dkuYFJnqAdBETB3tzbC0EmIkVSR1Uzxc72jRS8klvHg==",
"license": "Apache-2.0",
"dependencies": {
"@aws-crypto/sha256-browser": "5.2.0",
"@aws-crypto/sha256-js": "5.2.0",
- "@aws-sdk/core": "3.758.0",
- "@aws-sdk/credential-provider-node": "3.758.0",
- "@aws-sdk/middleware-host-header": "3.734.0",
+ "@aws-sdk/core": "3.774.0",
+ "@aws-sdk/credential-provider-node": "3.774.0",
+ "@aws-sdk/middleware-host-header": "3.774.0",
"@aws-sdk/middleware-logger": "3.734.0",
- "@aws-sdk/middleware-recursion-detection": "3.734.0",
- "@aws-sdk/middleware-user-agent": "3.758.0",
+ "@aws-sdk/middleware-recursion-detection": "3.772.0",
+ "@aws-sdk/middleware-user-agent": "3.774.0",
"@aws-sdk/region-config-resolver": "3.734.0",
"@aws-sdk/types": "3.734.0",
"@aws-sdk/util-endpoints": "3.743.0",
"@aws-sdk/util-user-agent-browser": "3.734.0",
- "@aws-sdk/util-user-agent-node": "3.758.0",
+ "@aws-sdk/util-user-agent-node": "3.774.0",
"@smithy/config-resolver": "^4.0.1",
"@smithy/core": "^3.1.5",
"@smithy/fetch-http-handler": "^5.0.1",
@@ -588,23 +590,23 @@
}
},
"node_modules/@aws-sdk/client-sso": {
- "version": "3.758.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.758.0.tgz",
- "integrity": "sha512-BoGO6IIWrLyLxQG6txJw6RT2urmbtlwfggapNCrNPyYjlXpzTSJhBYjndg7TpDATFd0SXL0zm8y/tXsUXNkdYQ==",
+ "version": "3.774.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.774.0.tgz",
+ "integrity": "sha512-bN+wd2gpTq+DNJ/fZdam/mX6K3TcVdZBIvxaVtg+imep6xAuRukdFhsoG0cDzk96+WHPCOhkyi+6lFljCof43Q==",
"license": "Apache-2.0",
"dependencies": {
"@aws-crypto/sha256-browser": "5.2.0",
"@aws-crypto/sha256-js": "5.2.0",
- "@aws-sdk/core": "3.758.0",
- "@aws-sdk/middleware-host-header": "3.734.0",
+ "@aws-sdk/core": "3.774.0",
+ "@aws-sdk/middleware-host-header": "3.774.0",
"@aws-sdk/middleware-logger": "3.734.0",
- "@aws-sdk/middleware-recursion-detection": "3.734.0",
- "@aws-sdk/middleware-user-agent": "3.758.0",
+ "@aws-sdk/middleware-recursion-detection": "3.772.0",
+ "@aws-sdk/middleware-user-agent": "3.774.0",
"@aws-sdk/region-config-resolver": "3.734.0",
"@aws-sdk/types": "3.734.0",
"@aws-sdk/util-endpoints": "3.743.0",
"@aws-sdk/util-user-agent-browser": "3.734.0",
- "@aws-sdk/util-user-agent-node": "3.758.0",
+ "@aws-sdk/util-user-agent-node": "3.774.0",
"@smithy/config-resolver": "^4.0.1",
"@smithy/core": "^3.1.5",
"@smithy/fetch-http-handler": "^5.0.1",
@@ -637,9 +639,9 @@
}
},
"node_modules/@aws-sdk/core": {
- "version": "3.758.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.758.0.tgz",
- "integrity": "sha512-0RswbdR9jt/XKemaLNuxi2gGr4xGlHyGxkTdhSQzCyUe9A9OPCoLl3rIESRguQEech+oJnbHk/wuiwHqTuP9sg==",
+ "version": "3.774.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.774.0.tgz",
+ "integrity": "sha512-JDkAAlPyGWMX42L4Cv8mxybwHTOoFweNbNrOc5oQJhFxZAe1zkW4uLTEfr79vYhnXCFbThCyPpBotmo3U2vULA==",
"license": "Apache-2.0",
"dependencies": {
"@aws-sdk/types": "3.734.0",
@@ -659,12 +661,12 @@
}
},
"node_modules/@aws-sdk/credential-provider-env": {
- "version": "3.758.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.758.0.tgz",
- "integrity": "sha512-N27eFoRrO6MeUNumtNHDW9WOiwfd59LPXPqDrIa3kWL/s+fOKFHb9xIcF++bAwtcZnAxKkgpDCUP+INNZskE+w==",
+ "version": "3.774.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.774.0.tgz",
+ "integrity": "sha512-FkSDBi9Ly0bmzyrMDeqQq1lGsFMrrd/bIB3c9VD4Llh0sPLxB/DU31+VTPTuQ0pBPz4sX5Vay6tLy43DStzcFQ==",
"license": "Apache-2.0",
"dependencies": {
- "@aws-sdk/core": "3.758.0",
+ "@aws-sdk/core": "3.774.0",
"@aws-sdk/types": "3.734.0",
"@smithy/property-provider": "^4.0.1",
"@smithy/types": "^4.1.0",
@@ -675,12 +677,12 @@
}
},
"node_modules/@aws-sdk/credential-provider-http": {
- "version": "3.758.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.758.0.tgz",
- "integrity": "sha512-Xt9/U8qUCiw1hihztWkNeIR+arg6P+yda10OuCHX6kFVx3auTlU7+hCqs3UxqniGU4dguHuftf3mRpi5/GJ33Q==",
+ "version": "3.774.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.774.0.tgz",
+ "integrity": "sha512-iurWGQColf52HpHeHCQs/LnSjZ0Ufq3VtSQx/6QdZwIhmgbbqvGMAaBJg41SQjWhpqdufE96HzcaCJw/lnCefQ==",
"license": "Apache-2.0",
"dependencies": {
- "@aws-sdk/core": "3.758.0",
+ "@aws-sdk/core": "3.774.0",
"@aws-sdk/types": "3.734.0",
"@smithy/fetch-http-handler": "^5.0.1",
"@smithy/node-http-handler": "^4.0.3",
@@ -696,18 +698,18 @@
}
},
"node_modules/@aws-sdk/credential-provider-ini": {
- "version": "3.758.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.758.0.tgz",
- "integrity": "sha512-cymSKMcP5d+OsgetoIZ5QCe1wnp2Q/tq+uIxVdh9MbfdBBEnl9Ecq6dH6VlYS89sp4QKuxHxkWXVnbXU3Q19Aw==",
+ "version": "3.774.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.774.0.tgz",
+ "integrity": "sha512-+AsJOX9pGsnGPAC8wQw7LAO8ZfXzjXTjJxSP1fvg04PX7OBk4zwhVaryH6pu5raan+9cVbfEO1Z7EEMdkweGQA==",
"license": "Apache-2.0",
"dependencies": {
- "@aws-sdk/core": "3.758.0",
- "@aws-sdk/credential-provider-env": "3.758.0",
- "@aws-sdk/credential-provider-http": "3.758.0",
- "@aws-sdk/credential-provider-process": "3.758.0",
- "@aws-sdk/credential-provider-sso": "3.758.0",
- "@aws-sdk/credential-provider-web-identity": "3.758.0",
- "@aws-sdk/nested-clients": "3.758.0",
+ "@aws-sdk/core": "3.774.0",
+ "@aws-sdk/credential-provider-env": "3.774.0",
+ "@aws-sdk/credential-provider-http": "3.774.0",
+ "@aws-sdk/credential-provider-process": "3.774.0",
+ "@aws-sdk/credential-provider-sso": "3.774.0",
+ "@aws-sdk/credential-provider-web-identity": "3.774.0",
+ "@aws-sdk/nested-clients": "3.774.0",
"@aws-sdk/types": "3.734.0",
"@smithy/credential-provider-imds": "^4.0.1",
"@smithy/property-provider": "^4.0.1",
@@ -720,17 +722,17 @@
}
},
"node_modules/@aws-sdk/credential-provider-node": {
- "version": "3.758.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.758.0.tgz",
- "integrity": "sha512-+DaMv63wiq7pJrhIQzZYMn4hSarKiizDoJRvyR7WGhnn0oQ/getX9Z0VNCV3i7lIFoLNTb7WMmQ9k7+z/uD5EQ==",
+ "version": "3.774.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.774.0.tgz",
+ "integrity": "sha512-/t+TNhHNW6BNyf7Lgv6I0NUfFk6/dz4+6dUjopRxpDVJtp1YvNza0Zhl25ffRkqX4CKmuXyJYusDbbObcsncUA==",
"license": "Apache-2.0",
"dependencies": {
- "@aws-sdk/credential-provider-env": "3.758.0",
- "@aws-sdk/credential-provider-http": "3.758.0",
- "@aws-sdk/credential-provider-ini": "3.758.0",
- "@aws-sdk/credential-provider-process": "3.758.0",
- "@aws-sdk/credential-provider-sso": "3.758.0",
- "@aws-sdk/credential-provider-web-identity": "3.758.0",
+ "@aws-sdk/credential-provider-env": "3.774.0",
+ "@aws-sdk/credential-provider-http": "3.774.0",
+ "@aws-sdk/credential-provider-ini": "3.774.0",
+ "@aws-sdk/credential-provider-process": "3.774.0",
+ "@aws-sdk/credential-provider-sso": "3.774.0",
+ "@aws-sdk/credential-provider-web-identity": "3.774.0",
"@aws-sdk/types": "3.734.0",
"@smithy/credential-provider-imds": "^4.0.1",
"@smithy/property-provider": "^4.0.1",
@@ -743,12 +745,12 @@
}
},
"node_modules/@aws-sdk/credential-provider-process": {
- "version": "3.758.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.758.0.tgz",
- "integrity": "sha512-AzcY74QTPqcbXWVgjpPZ3HOmxQZYPROIBz2YINF0OQk0MhezDWV/O7Xec+K1+MPGQO3qS6EDrUUlnPLjsqieHA==",
+ "version": "3.774.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.774.0.tgz",
+ "integrity": "sha512-lycBRY1NeWa46LefN258m1MRVUPQgvf6TPA6ZYajyq6/dCr6BPeuUoUAyrzePTPlxV/M25YXNiyORHjjwlK0ug==",
"license": "Apache-2.0",
"dependencies": {
- "@aws-sdk/core": "3.758.0",
+ "@aws-sdk/core": "3.774.0",
"@aws-sdk/types": "3.734.0",
"@smithy/property-provider": "^4.0.1",
"@smithy/shared-ini-file-loader": "^4.0.1",
@@ -760,14 +762,14 @@
}
},
"node_modules/@aws-sdk/credential-provider-sso": {
- "version": "3.758.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.758.0.tgz",
- "integrity": "sha512-x0FYJqcOLUCv8GLLFDYMXRAQKGjoM+L0BG4BiHYZRDf24yQWFCAZsCQAYKo6XZYh2qznbsW6f//qpyJ5b0QVKQ==",
+ "version": "3.774.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.774.0.tgz",
+ "integrity": "sha512-j7vbGCWF6dVpd9qiT0PQGzY4NKf8KUa86sSoosGGbtu0dV9T/Y0s/fvPZ0F8ZyuPIKUMJaBpIJYZ/ECZRfT2mg==",
"license": "Apache-2.0",
"dependencies": {
- "@aws-sdk/client-sso": "3.758.0",
- "@aws-sdk/core": "3.758.0",
- "@aws-sdk/token-providers": "3.758.0",
+ "@aws-sdk/client-sso": "3.774.0",
+ "@aws-sdk/core": "3.774.0",
+ "@aws-sdk/token-providers": "3.774.0",
"@aws-sdk/types": "3.734.0",
"@smithy/property-provider": "^4.0.1",
"@smithy/shared-ini-file-loader": "^4.0.1",
@@ -779,13 +781,13 @@
}
},
"node_modules/@aws-sdk/credential-provider-web-identity": {
- "version": "3.758.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.758.0.tgz",
- "integrity": "sha512-XGguXhBqiCXMXRxcfCAVPlMbm3VyJTou79r/3mxWddHWF0XbhaQiBIbUz6vobVTD25YQRbWSmSch7VA8kI5Lrw==",
+ "version": "3.774.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.774.0.tgz",
+ "integrity": "sha512-kuE5Hdqm9xXdrYBWCU6l2aM3W3HBtZrIBgyf0y41LulJHwld1nvIySus/lILdzbipmUAv9FI07B8TF5y7p/aFA==",
"license": "Apache-2.0",
"dependencies": {
- "@aws-sdk/core": "3.758.0",
- "@aws-sdk/nested-clients": "3.758.0",
+ "@aws-sdk/core": "3.774.0",
+ "@aws-sdk/nested-clients": "3.774.0",
"@aws-sdk/types": "3.734.0",
"@smithy/property-provider": "^4.0.1",
"@smithy/types": "^4.1.0",
@@ -795,6 +797,37 @@
"node": ">=18.0.0"
}
},
+ "node_modules/@aws-sdk/lib-storage": {
+ "version": "3.774.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/lib-storage/-/lib-storage-3.774.0.tgz",
+ "integrity": "sha512-xB3rD+F5pt+JLJaUt5eakCJ3+CUa8PXk9nxgN2VozfpuvuR6A/l3lnxmP5wYLhw1I9hxJLV9AD1/QYcibdBjtQ==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/abort-controller": "^4.0.1",
+ "@smithy/middleware-endpoint": "^4.0.6",
+ "@smithy/smithy-client": "^4.1.6",
+ "buffer": "5.6.0",
+ "events": "3.3.0",
+ "stream-browserify": "3.0.0",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ },
+ "peerDependencies": {
+ "@aws-sdk/client-s3": "^3.774.0"
+ }
+ },
+ "node_modules/@aws-sdk/lib-storage/node_modules/buffer": {
+ "version": "5.6.0",
+ "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.6.0.tgz",
+ "integrity": "sha512-/gDYp/UtU0eA1ys8bOs9J6a+E/KWIY+DZ+Q2WESNUA0jFRsJOc0SNUO6xJ5SGA1xueg3NL65W6s+NY5l9cunuw==",
+ "license": "MIT",
+ "dependencies": {
+ "base64-js": "^1.0.2",
+ "ieee754": "^1.1.4"
+ }
+ },
"node_modules/@aws-sdk/middleware-bucket-endpoint": {
"version": "3.734.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/middleware-bucket-endpoint/-/middleware-bucket-endpoint-3.734.0.tgz",
@@ -829,15 +862,15 @@
}
},
"node_modules/@aws-sdk/middleware-flexible-checksums": {
- "version": "3.758.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.758.0.tgz",
- "integrity": "sha512-o8Rk71S08YTKLoSobucjnbj97OCGaXgpEDNKXpXaavUM5xLNoHCLSUPRCiEN86Ivqxg1n17Y2nSRhfbsveOXXA==",
+ "version": "3.774.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.774.0.tgz",
+ "integrity": "sha512-S0vs+U7sEZkRRnjf05KCbEHDduyxGgNPq+ZeaiyWbs5yTZ8wzSYrSzMAKcbCqAseNVYQbpGMXDh8tnzx6H/ihw==",
"license": "Apache-2.0",
"dependencies": {
"@aws-crypto/crc32": "5.2.0",
"@aws-crypto/crc32c": "5.2.0",
"@aws-crypto/util": "5.2.0",
- "@aws-sdk/core": "3.758.0",
+ "@aws-sdk/core": "3.774.0",
"@aws-sdk/types": "3.734.0",
"@smithy/is-array-buffer": "^4.0.0",
"@smithy/node-config-provider": "^4.0.1",
@@ -853,9 +886,9 @@
}
},
"node_modules/@aws-sdk/middleware-host-header": {
- "version": "3.734.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.734.0.tgz",
- "integrity": "sha512-LW7RRgSOHHBzWZnigNsDIzu3AiwtjeI2X66v+Wn1P1u+eXssy1+up4ZY/h+t2sU4LU36UvEf+jrZti9c6vRnFw==",
+ "version": "3.774.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.774.0.tgz",
+ "integrity": "sha512-7QHA0ZyEBVfyJqmIc0FW4MUtPdrWhDsHQudsvBCHFS+mqP5fhpU/o4e5RQ+0M7tQqDE65+8MrZRniRa+Txz3xA==",
"license": "Apache-2.0",
"dependencies": {
"@aws-sdk/types": "3.734.0",
@@ -896,9 +929,9 @@
}
},
"node_modules/@aws-sdk/middleware-recursion-detection": {
- "version": "3.734.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.734.0.tgz",
- "integrity": "sha512-CUat2d9ITsFc2XsmeiRQO96iWpxSKYFjxvj27Hc7vo87YUHRnfMfnc8jw1EpxEwMcvBD7LsRa6vDNky6AjcrFA==",
+ "version": "3.772.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.772.0.tgz",
+ "integrity": "sha512-zg0LjJa4v7fcLzn5QzZvtVS+qyvmsnu7oQnb86l6ckduZpWDCDC9+A0ZzcXTrxblPCJd3JqkoG1+Gzi4S4Ny/Q==",
"license": "Apache-2.0",
"dependencies": {
"@aws-sdk/types": "3.734.0",
@@ -911,12 +944,12 @@
}
},
"node_modules/@aws-sdk/middleware-sdk-s3": {
- "version": "3.758.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.758.0.tgz",
- "integrity": "sha512-6mJ2zyyHPYSV6bAcaFpsdoXZJeQlR1QgBnZZ6juY/+dcYiuyWCdyLUbGzSZSE7GTfx6i+9+QWFeoIMlWKgU63A==",
+ "version": "3.774.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.774.0.tgz",
+ "integrity": "sha512-iMEaOj+S8LZfg7fZaSfXQ8YDtEfOSBiQUllyxzaVhSYlM7IeNDbpBdCWnRi34VrI1J1AuryMdX/foU9JNSTLXg==",
"license": "Apache-2.0",
"dependencies": {
- "@aws-sdk/core": "3.758.0",
+ "@aws-sdk/core": "3.774.0",
"@aws-sdk/types": "3.734.0",
"@aws-sdk/util-arn-parser": "3.723.0",
"@smithy/core": "^3.1.5",
@@ -950,12 +983,12 @@
}
},
"node_modules/@aws-sdk/middleware-user-agent": {
- "version": "3.758.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.758.0.tgz",
- "integrity": "sha512-iNyehQXtQlj69JCgfaOssgZD4HeYGOwxcaKeG6F+40cwBjTAi0+Ph1yfDwqk2qiBPIRWJ/9l2LodZbxiBqgrwg==",
+ "version": "3.774.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.774.0.tgz",
+ "integrity": "sha512-SVDeBV6DESgc9zex1Wk5XYbUqRI1tmJYQor47uKqD18r6UaCpvzVOBP4x8l/6hteAYxsWER6ZZmsjBQkenEuFQ==",
"license": "Apache-2.0",
"dependencies": {
- "@aws-sdk/core": "3.758.0",
+ "@aws-sdk/core": "3.774.0",
"@aws-sdk/types": "3.734.0",
"@aws-sdk/util-endpoints": "3.743.0",
"@smithy/core": "^3.1.5",
@@ -968,23 +1001,23 @@
}
},
"node_modules/@aws-sdk/nested-clients": {
- "version": "3.758.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/nested-clients/-/nested-clients-3.758.0.tgz",
- "integrity": "sha512-YZ5s7PSvyF3Mt2h1EQulCG93uybprNGbBkPmVuy/HMMfbFTt4iL3SbKjxqvOZelm86epFfj7pvK7FliI2WOEcg==",
+ "version": "3.774.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/nested-clients/-/nested-clients-3.774.0.tgz",
+ "integrity": "sha512-00+UiYvxiZaDFVzn87kPpiZ/GiEWNaTNzC82C+bIyXt1M9AnAR6PAnnvMErTFwyG+Un6n2ai/I81wvJ1ftFmeQ==",
"license": "Apache-2.0",
"dependencies": {
"@aws-crypto/sha256-browser": "5.2.0",
"@aws-crypto/sha256-js": "5.2.0",
- "@aws-sdk/core": "3.758.0",
- "@aws-sdk/middleware-host-header": "3.734.0",
+ "@aws-sdk/core": "3.774.0",
+ "@aws-sdk/middleware-host-header": "3.774.0",
"@aws-sdk/middleware-logger": "3.734.0",
- "@aws-sdk/middleware-recursion-detection": "3.734.0",
- "@aws-sdk/middleware-user-agent": "3.758.0",
+ "@aws-sdk/middleware-recursion-detection": "3.772.0",
+ "@aws-sdk/middleware-user-agent": "3.774.0",
"@aws-sdk/region-config-resolver": "3.734.0",
"@aws-sdk/types": "3.734.0",
"@aws-sdk/util-endpoints": "3.743.0",
"@aws-sdk/util-user-agent-browser": "3.734.0",
- "@aws-sdk/util-user-agent-node": "3.758.0",
+ "@aws-sdk/util-user-agent-node": "3.774.0",
"@smithy/config-resolver": "^4.0.1",
"@smithy/core": "^3.1.5",
"@smithy/fetch-http-handler": "^5.0.1",
@@ -1033,13 +1066,32 @@
"node": ">=18.0.0"
}
},
- "node_modules/@aws-sdk/signature-v4-multi-region": {
- "version": "3.758.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.758.0.tgz",
- "integrity": "sha512-0RPCo8fYJcrenJ6bRtiUbFOSgQ1CX/GpvwtLU2Fam1tS9h2klKK8d74caeV6A1mIUvBU7bhyQ0wMGlwMtn3EYw==",
+ "node_modules/@aws-sdk/s3-request-presigner": {
+ "version": "3.774.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/s3-request-presigner/-/s3-request-presigner-3.774.0.tgz",
+ "integrity": "sha512-vD37Nq7+ChUkXSoDqkNMXu37R8kRDUo13pOfYgesSI4HA970fjXP1T4Mf2131Ms/NuYbBHNn330+3MAkbbYKxg==",
"license": "Apache-2.0",
"dependencies": {
- "@aws-sdk/middleware-sdk-s3": "3.758.0",
+ "@aws-sdk/signature-v4-multi-region": "3.774.0",
+ "@aws-sdk/types": "3.734.0",
+ "@aws-sdk/util-format-url": "3.734.0",
+ "@smithy/middleware-endpoint": "^4.0.6",
+ "@smithy/protocol-http": "^5.0.1",
+ "@smithy/smithy-client": "^4.1.6",
+ "@smithy/types": "^4.1.0",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/signature-v4-multi-region": {
+ "version": "3.774.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.774.0.tgz",
+ "integrity": "sha512-vQwATjZfl5vxfO+BDUH7nUnhfKoIJMnBmOxmUh4N10PWlz3WWwkT/YtH79nVpr+y1eM6GQUSGuNa4Reda6SaFA==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@aws-sdk/middleware-sdk-s3": "3.774.0",
"@aws-sdk/types": "3.734.0",
"@smithy/protocol-http": "^5.0.1",
"@smithy/signature-v4": "^5.0.1",
@@ -1051,12 +1103,12 @@
}
},
"node_modules/@aws-sdk/token-providers": {
- "version": "3.758.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.758.0.tgz",
- "integrity": "sha512-ckptN1tNrIfQUaGWm/ayW1ddG+imbKN7HHhjFdS4VfItsP0QQOB0+Ov+tpgb4MoNR4JaUghMIVStjIeHN2ks1w==",
+ "version": "3.774.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.774.0.tgz",
+ "integrity": "sha512-DDERwCduWFFXj7gx3qvnaB8GlnCUpQ8ZA03qI4QFokWu3EyHNK+hjp3nN5Dg81fI0Z82LRe30Q2uDsLBwNCZDg==",
"license": "Apache-2.0",
"dependencies": {
- "@aws-sdk/nested-clients": "3.758.0",
+ "@aws-sdk/nested-clients": "3.774.0",
"@aws-sdk/types": "3.734.0",
"@smithy/property-provider": "^4.0.1",
"@smithy/shared-ini-file-loader": "^4.0.1",
@@ -1107,6 +1159,21 @@
"node": ">=18.0.0"
}
},
+ "node_modules/@aws-sdk/util-format-url": {
+ "version": "3.734.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/util-format-url/-/util-format-url-3.734.0.tgz",
+ "integrity": "sha512-TxZMVm8V4aR/QkW9/NhujvYpPZjUYqzLwSge5imKZbWFR806NP7RMwc5ilVuHF/bMOln/cVHkl42kATElWBvNw==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@aws-sdk/types": "3.734.0",
+ "@smithy/querystring-builder": "^4.0.1",
+ "@smithy/types": "^4.1.0",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
"node_modules/@aws-sdk/util-locate-window": {
"version": "3.693.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/util-locate-window/-/util-locate-window-3.693.0.tgz",
@@ -1132,12 +1199,12 @@
}
},
"node_modules/@aws-sdk/util-user-agent-node": {
- "version": "3.758.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.758.0.tgz",
- "integrity": "sha512-A5EZw85V6WhoKMV2hbuFRvb9NPlxEErb4HPO6/SPXYY4QrjprIzScHxikqcWv1w4J3apB1wto9LPU3IMsYtfrw==",
+ "version": "3.774.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.774.0.tgz",
+ "integrity": "sha512-kFmnK4sf5Wco8mkzO2PszqDXEwtQ5H896tUxqWDQhk67NtOLsHYfg98ymOBWWudth2POaldiIx6KFXtg0DvLLQ==",
"license": "Apache-2.0",
"dependencies": {
- "@aws-sdk/middleware-user-agent": "3.758.0",
+ "@aws-sdk/middleware-user-agent": "3.774.0",
"@aws-sdk/types": "3.734.0",
"@smithy/node-config-provider": "^4.0.1",
"@smithy/types": "^4.1.0",
@@ -1184,14 +1251,14 @@
}
},
"node_modules/@babel/generator": {
- "version": "7.26.8",
- "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.26.8.tgz",
- "integrity": "sha512-ef383X5++iZHWAXX0SXQR6ZyQhw/0KtTkrTz61WXRhFM6dhpHulO/RJz79L8S6ugZHJkOOkUrUdxgdF2YiPFnA==",
+ "version": "7.27.0",
+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.27.0.tgz",
+ "integrity": "sha512-VybsKvpiN1gU1sdMZIp7FcqphVVKEwcuj02x73uvcHE0PTihx1nlBcowYWhDwjpoAXRv43+gDzyggGnn1XZhVw==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/parser": "^7.26.8",
- "@babel/types": "^7.26.8",
+ "@babel/parser": "^7.27.0",
+ "@babel/types": "^7.27.0",
"@jridgewell/gen-mapping": "^0.3.5",
"@jridgewell/trace-mapping": "^0.3.25",
"jsesc": "^3.0.2"
@@ -1221,13 +1288,13 @@
}
},
"node_modules/@babel/parser": {
- "version": "7.26.8",
- "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.8.tgz",
- "integrity": "sha512-TZIQ25pkSoaKEYYaHbbxkfL36GNsQ6iFiBbeuzAkLnXayKR1yP1zFe+NxuZWWsUyvt8icPU9CCq0sgWGXR1GEw==",
+ "version": "7.27.0",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.27.0.tgz",
+ "integrity": "sha512-iaepho73/2Pz7w2eMS0Q5f83+0RKI7i4xmiYeBmDzfRVbQtTOG7Ts0S4HzJVsTMGI9keU8rNfuZr8DKfSt7Yyg==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/types": "^7.26.8"
+ "@babel/types": "^7.27.0"
},
"bin": {
"parser": "bin/babel-parser.js"
@@ -1249,32 +1316,32 @@
}
},
"node_modules/@babel/template": {
- "version": "7.26.8",
- "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.26.8.tgz",
- "integrity": "sha512-iNKaX3ZebKIsCvJ+0jd6embf+Aulaa3vNBqZ41kM7iTWjx5qzWKXGHiJUW3+nTpQ18SG11hdF8OAzKrpXkb96Q==",
+ "version": "7.27.0",
+ "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.0.tgz",
+ "integrity": "sha512-2ncevenBqXI6qRMukPlXwHKHchC7RyMuu4xv5JBXRfOGVcTy1mXCD12qrp7Jsoxll1EV3+9sE4GugBVRjT2jFA==",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/code-frame": "^7.26.2",
- "@babel/parser": "^7.26.8",
- "@babel/types": "^7.26.8"
+ "@babel/parser": "^7.27.0",
+ "@babel/types": "^7.27.0"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/traverse": {
- "version": "7.26.8",
- "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.26.8.tgz",
- "integrity": "sha512-nic9tRkjYH0oB2dzr/JoGIm+4Q6SuYeLEiIiZDwBscRMYFJ+tMAz98fuel9ZnbXViA2I0HVSSRRK8DW5fjXStA==",
+ "version": "7.27.0",
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.27.0.tgz",
+ "integrity": "sha512-19lYZFzYVQkkHkl4Cy4WrAVcqBkgvV2YM2TU3xG6DIwO7O3ecbDPfW3yM3bjAGcqcQHi+CCtjMR3dIEHxsd6bA==",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/code-frame": "^7.26.2",
- "@babel/generator": "^7.26.8",
- "@babel/parser": "^7.26.8",
- "@babel/template": "^7.26.8",
- "@babel/types": "^7.26.8",
+ "@babel/generator": "^7.27.0",
+ "@babel/parser": "^7.27.0",
+ "@babel/template": "^7.27.0",
+ "@babel/types": "^7.27.0",
"debug": "^4.3.1",
"globals": "^11.1.0"
},
@@ -1293,9 +1360,9 @@
}
},
"node_modules/@babel/types": {
- "version": "7.26.8",
- "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.8.tgz",
- "integrity": "sha512-eUuWapzEGWFEpHFxgEaBG8e3n6S8L3MSu0oda755rOfabWPnh0Our1AozNFVUxGFIhbKgd1ksprsoDGMinTOTA==",
+ "version": "7.27.0",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.27.0.tgz",
+ "integrity": "sha512-H45s8fVLYjbhFH62dIJ3WtmJ6RSPt/3DRO0ZcT2SUiYiQyz3BLVb9ADEnLl91m74aQPS3AzzeajZHYOalWe3bg==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -1327,15 +1394,15 @@
}
},
"node_modules/@datadog/libdatadog": {
- "version": "0.4.0",
- "resolved": "https://registry.npmjs.org/@datadog/libdatadog/-/libdatadog-0.4.0.tgz",
- "integrity": "sha512-kGZfFVmQInzt6J4FFGrqMbrDvOxqwk3WqhAreS6n9b/De+iMVy/NMu3V7uKsY5zAvz+uQw0liDJm3ZDVH/MVVw==",
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/@datadog/libdatadog/-/libdatadog-0.5.0.tgz",
+ "integrity": "sha512-YvLUVOhYVjJssm0f22/RnDQMc7ZZt/w1bA0nty1vvjyaDz5EWaHfWaaV4GYpCt5MRvnGjCBxIwwbRivmGseKeQ==",
"license": "Apache-2.0"
},
"node_modules/@datadog/native-appsec": {
- "version": "8.4.0",
- "resolved": "https://registry.npmjs.org/@datadog/native-appsec/-/native-appsec-8.4.0.tgz",
- "integrity": "sha512-LC47AnpVLpQFEUOP/nIIs+i0wLb8XYO+et3ACaJlHa2YJM3asR4KZTqQjDQNy08PTAUbVvYWKwfSR1qVsU/BeA==",
+ "version": "8.5.0",
+ "resolved": "https://registry.npmjs.org/@datadog/native-appsec/-/native-appsec-8.5.0.tgz",
+ "integrity": "sha512-95y+fm7jd+3iknzuu57pWEPw9fcK9uSBCPiB4kSPHszHu3bESlZM553tc4ANsz+X3gMkYGVg2pgSydG77nSDJw==",
"hasInstallScript": true,
"license": "Apache-2.0",
"dependencies": {
@@ -1394,9 +1461,9 @@
}
},
"node_modules/@datadog/pprof": {
- "version": "5.5.1",
- "resolved": "https://registry.npmjs.org/@datadog/pprof/-/pprof-5.5.1.tgz",
- "integrity": "sha512-3pZVYqc5YkZJOj9Rc8kQ/wG4qlygcnnwFU/w0QKX6dEdJh+1+dWniuUu+GSEjy/H0jc14yhdT2eJJf/F2AnHNw==",
+ "version": "5.6.0",
+ "resolved": "https://registry.npmjs.org/@datadog/pprof/-/pprof-5.6.0.tgz",
+ "integrity": "sha512-x7yN0s4wMnRqv3PWQ6eXKH5XE5qvCOwWbOsXqpT2Irbsc7Wcl5w5JrJUcbPCdSJGihpIh6kAeIrS6w/ZCcHy2Q==",
"hasInstallScript": true,
"license": "Apache-2.0",
"dependencies": {
@@ -1410,15 +1477,6 @@
"node": ">=16"
}
},
- "node_modules/@datadog/pprof/node_modules/source-map": {
- "version": "0.7.4",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz",
- "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==",
- "license": "BSD-3-Clause",
- "engines": {
- "node": ">= 8"
- }
- },
"node_modules/@datadog/sketches-js": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/@datadog/sketches-js/-/sketches-js-2.1.1.tgz",
@@ -1482,6 +1540,16 @@
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
}
},
+ "node_modules/@eslint/config-helpers": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.2.0.tgz",
+ "integrity": "sha512-yJLLmLexii32mGrhW29qvU3QBVTu0GUmEf/J4XsBtVhp4JkIUFN/BjWqTF63yRvGApIDpZm5fa97LtYtINmfeQ==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ }
+ },
"node_modules/@eslint/core": {
"version": "0.12.0",
"resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.12.0.tgz",
@@ -1496,9 +1564,9 @@
}
},
"node_modules/@eslint/eslintrc": {
- "version": "3.3.0",
- "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.0.tgz",
- "integrity": "sha512-yaVPAiNAalnCZedKLdR21GOGILMLKPyqSLWaAjQFvYA2i/ciDi8ArYVr69Anohb6cH2Ukhqti4aFnYyPm8wdwQ==",
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.1.tgz",
+ "integrity": "sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -1533,9 +1601,9 @@
}
},
"node_modules/@eslint/js": {
- "version": "9.21.0",
- "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.21.0.tgz",
- "integrity": "sha512-BqStZ3HX8Yz6LvsF5ByXYrtigrV5AXADWLAGc7PH/1SxOb7/FIYYMszZZWiUou/GB9P2lXWk2SV4d+Z8h0nknw==",
+ "version": "9.23.0",
+ "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.23.0.tgz",
+ "integrity": "sha512-35MJ8vCPU0ZMxo7zfev2pypqTwWTofFZO6m4KAtdoFhRpLJUpHTZZ+KB3C7Hb1d7bULYwO4lJXGCi5Se+8OMbw==",
"dev": true,
"license": "MIT",
"engines": {
@@ -2260,6 +2328,16 @@
"node": ">=14"
}
},
+ "node_modules/@pkgjs/parseargs": {
+ "version": "0.11.0",
+ "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz",
+ "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==",
+ "license": "MIT",
+ "optional": true,
+ "engines": {
+ "node": ">=14"
+ }
+ },
"node_modules/@protobufjs/aspromise": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz",
@@ -2384,12 +2462,12 @@
}
},
"node_modules/@smithy/abort-controller": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-4.0.1.tgz",
- "integrity": "sha512-fiUIYgIgRjMWznk6iLJz35K2YxSLHzLBA/RC6lBrKfQ8fHbPfvk7Pk9UvpKoHgJjI18MnbPuEju53zcVy6KF1g==",
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-4.0.2.tgz",
+ "integrity": "sha512-Sl/78VDtgqKxN2+1qduaVE140XF+Xg+TafkncspwM4jFP/LHr76ZHmIY/y3V1M0mMLNk+Je6IGbzxy23RSToMw==",
"license": "Apache-2.0",
"dependencies": {
- "@smithy/types": "^4.1.0",
+ "@smithy/types": "^4.2.0",
"tslib": "^2.6.2"
},
"engines": {
@@ -2422,15 +2500,15 @@
}
},
"node_modules/@smithy/config-resolver": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-4.0.1.tgz",
- "integrity": "sha512-Igfg8lKu3dRVkTSEm98QpZUvKEOa71jDX4vKRcvJVyRc3UgN3j7vFMf0s7xLQhYmKa8kyJGQgUJDOV5V3neVlQ==",
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-4.1.0.tgz",
+ "integrity": "sha512-8smPlwhga22pwl23fM5ew4T9vfLUCeFXlcqNOCD5M5h8VmNPNUE9j6bQSuRXpDSV11L/E/SwEBQuW8hr6+nS1A==",
"license": "Apache-2.0",
"dependencies": {
- "@smithy/node-config-provider": "^4.0.1",
- "@smithy/types": "^4.1.0",
+ "@smithy/node-config-provider": "^4.0.2",
+ "@smithy/types": "^4.2.0",
"@smithy/util-config-provider": "^4.0.0",
- "@smithy/util-middleware": "^4.0.1",
+ "@smithy/util-middleware": "^4.0.2",
"tslib": "^2.6.2"
},
"engines": {
@@ -2438,17 +2516,17 @@
}
},
"node_modules/@smithy/core": {
- "version": "3.1.5",
- "resolved": "https://registry.npmjs.org/@smithy/core/-/core-3.1.5.tgz",
- "integrity": "sha512-HLclGWPkCsekQgsyzxLhCQLa8THWXtB5PxyYN+2O6nkyLt550KQKTlbV2D1/j5dNIQapAZM1+qFnpBFxZQkgCA==",
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/@smithy/core/-/core-3.2.0.tgz",
+ "integrity": "sha512-k17bgQhVZ7YmUvA8at4af1TDpl0NDMBuBKJl8Yg0nrefwmValU+CnA5l/AriVdQNthU/33H3nK71HrLgqOPr1Q==",
"license": "Apache-2.0",
"dependencies": {
- "@smithy/middleware-serde": "^4.0.2",
- "@smithy/protocol-http": "^5.0.1",
- "@smithy/types": "^4.1.0",
+ "@smithy/middleware-serde": "^4.0.3",
+ "@smithy/protocol-http": "^5.1.0",
+ "@smithy/types": "^4.2.0",
"@smithy/util-body-length-browser": "^4.0.0",
- "@smithy/util-middleware": "^4.0.1",
- "@smithy/util-stream": "^4.1.2",
+ "@smithy/util-middleware": "^4.0.2",
+ "@smithy/util-stream": "^4.2.0",
"@smithy/util-utf8": "^4.0.0",
"tslib": "^2.6.2"
},
@@ -2457,15 +2535,15 @@
}
},
"node_modules/@smithy/credential-provider-imds": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-4.0.1.tgz",
- "integrity": "sha512-l/qdInaDq1Zpznpmev/+52QomsJNZ3JkTl5yrTl02V6NBgJOQ4LY0SFw/8zsMwj3tLe8vqiIuwF6nxaEwgf6mg==",
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-4.0.2.tgz",
+ "integrity": "sha512-32lVig6jCaWBHnY+OEQ6e6Vnt5vDHaLiydGrwYMW9tPqO688hPGTYRamYJ1EptxEC2rAwJrHWmPoKRBl4iTa8w==",
"license": "Apache-2.0",
"dependencies": {
- "@smithy/node-config-provider": "^4.0.1",
- "@smithy/property-provider": "^4.0.1",
- "@smithy/types": "^4.1.0",
- "@smithy/url-parser": "^4.0.1",
+ "@smithy/node-config-provider": "^4.0.2",
+ "@smithy/property-provider": "^4.0.2",
+ "@smithy/types": "^4.2.0",
+ "@smithy/url-parser": "^4.0.2",
"tslib": "^2.6.2"
},
"engines": {
@@ -2543,14 +2621,14 @@
}
},
"node_modules/@smithy/fetch-http-handler": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-5.0.1.tgz",
- "integrity": "sha512-3aS+fP28urrMW2KTjb6z9iFow6jO8n3MFfineGbndvzGZit3taZhKWtTorf+Gp5RpFDDafeHlhfsGlDCXvUnJA==",
+ "version": "5.0.2",
+ "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-5.0.2.tgz",
+ "integrity": "sha512-+9Dz8sakS9pe7f2cBocpJXdeVjMopUDLgZs1yWeu7h++WqSbjUYv/JAJwKwXw1HV6gq1jyWjxuyn24E2GhoEcQ==",
"license": "Apache-2.0",
"dependencies": {
- "@smithy/protocol-http": "^5.0.1",
- "@smithy/querystring-builder": "^4.0.1",
- "@smithy/types": "^4.1.0",
+ "@smithy/protocol-http": "^5.1.0",
+ "@smithy/querystring-builder": "^4.0.2",
+ "@smithy/types": "^4.2.0",
"@smithy/util-base64": "^4.0.0",
"tslib": "^2.6.2"
},
@@ -2656,18 +2734,18 @@
}
},
"node_modules/@smithy/middleware-endpoint": {
- "version": "4.0.6",
- "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-4.0.6.tgz",
- "integrity": "sha512-ftpmkTHIFqgaFugcjzLZv3kzPEFsBFSnq1JsIkr2mwFzCraZVhQk2gqN51OOeRxqhbPTkRFj39Qd2V91E/mQxg==",
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-4.1.0.tgz",
+ "integrity": "sha512-xhLimgNCbCzsUppRTGXWkZywksuTThxaIB0HwbpsVLY5sceac4e1TZ/WKYqufQLaUy+gUSJGNdwD2jo3cXL0iA==",
"license": "Apache-2.0",
"dependencies": {
- "@smithy/core": "^3.1.5",
- "@smithy/middleware-serde": "^4.0.2",
- "@smithy/node-config-provider": "^4.0.1",
- "@smithy/shared-ini-file-loader": "^4.0.1",
- "@smithy/types": "^4.1.0",
- "@smithy/url-parser": "^4.0.1",
- "@smithy/util-middleware": "^4.0.1",
+ "@smithy/core": "^3.2.0",
+ "@smithy/middleware-serde": "^4.0.3",
+ "@smithy/node-config-provider": "^4.0.2",
+ "@smithy/shared-ini-file-loader": "^4.0.2",
+ "@smithy/types": "^4.2.0",
+ "@smithy/url-parser": "^4.0.2",
+ "@smithy/util-middleware": "^4.0.2",
"tslib": "^2.6.2"
},
"engines": {
@@ -2675,18 +2753,18 @@
}
},
"node_modules/@smithy/middleware-retry": {
- "version": "4.0.7",
- "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-4.0.7.tgz",
- "integrity": "sha512-58j9XbUPLkqAcV1kHzVX/kAR16GT+j7DUZJqwzsxh1jtz7G82caZiGyyFgUvogVfNTg3TeAOIJepGc8TXF4AVQ==",
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-4.1.0.tgz",
+ "integrity": "sha512-2zAagd1s6hAaI/ap6SXi5T3dDwBOczOMCSkkYzktqN1+tzbk1GAsHNAdo/1uzxz3Ky02jvZQwbi/vmDA6z4Oyg==",
"license": "Apache-2.0",
"dependencies": {
- "@smithy/node-config-provider": "^4.0.1",
- "@smithy/protocol-http": "^5.0.1",
- "@smithy/service-error-classification": "^4.0.1",
- "@smithy/smithy-client": "^4.1.6",
- "@smithy/types": "^4.1.0",
- "@smithy/util-middleware": "^4.0.1",
- "@smithy/util-retry": "^4.0.1",
+ "@smithy/node-config-provider": "^4.0.2",
+ "@smithy/protocol-http": "^5.1.0",
+ "@smithy/service-error-classification": "^4.0.2",
+ "@smithy/smithy-client": "^4.2.0",
+ "@smithy/types": "^4.2.0",
+ "@smithy/util-middleware": "^4.0.2",
+ "@smithy/util-retry": "^4.0.2",
"tslib": "^2.6.2",
"uuid": "^9.0.1"
},
@@ -2708,12 +2786,12 @@
}
},
"node_modules/@smithy/middleware-serde": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-4.0.2.tgz",
- "integrity": "sha512-Sdr5lOagCn5tt+zKsaW+U2/iwr6bI9p08wOkCp6/eL6iMbgdtc2R5Ety66rf87PeohR0ExI84Txz9GYv5ou3iQ==",
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-4.0.3.tgz",
+ "integrity": "sha512-rfgDVrgLEVMmMn0BI8O+8OVr6vXzjV7HZj57l0QxslhzbvVfikZbVfBVthjLHqib4BW44QhcIgJpvebHlRaC9A==",
"license": "Apache-2.0",
"dependencies": {
- "@smithy/types": "^4.1.0",
+ "@smithy/types": "^4.2.0",
"tslib": "^2.6.2"
},
"engines": {
@@ -2721,12 +2799,12 @@
}
},
"node_modules/@smithy/middleware-stack": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-4.0.1.tgz",
- "integrity": "sha512-dHwDmrtR/ln8UTHpaIavRSzeIk5+YZTBtLnKwDW3G2t6nAupCiQUvNzNoHBpik63fwUaJPtlnMzXbQrNFWssIA==",
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-4.0.2.tgz",
+ "integrity": "sha512-eSPVcuJJGVYrFYu2hEq8g8WWdJav3sdrI4o2c6z/rjnYDd3xH9j9E7deZQCzFn4QvGPouLngH3dQ+QVTxv5bOQ==",
"license": "Apache-2.0",
"dependencies": {
- "@smithy/types": "^4.1.0",
+ "@smithy/types": "^4.2.0",
"tslib": "^2.6.2"
},
"engines": {
@@ -2734,14 +2812,14 @@
}
},
"node_modules/@smithy/node-config-provider": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-4.0.1.tgz",
- "integrity": "sha512-8mRTjvCtVET8+rxvmzRNRR0hH2JjV0DFOmwXPrISmTIJEfnCBugpYYGAsCj8t41qd+RB5gbheSQ/6aKZCQvFLQ==",
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-4.0.2.tgz",
+ "integrity": "sha512-WgCkILRZfJwJ4Da92a6t3ozN/zcvYyJGUTmfGbgS/FkCcoCjl7G4FJaCDN1ySdvLvemnQeo25FdkyMSTSwulsw==",
"license": "Apache-2.0",
"dependencies": {
- "@smithy/property-provider": "^4.0.1",
- "@smithy/shared-ini-file-loader": "^4.0.1",
- "@smithy/types": "^4.1.0",
+ "@smithy/property-provider": "^4.0.2",
+ "@smithy/shared-ini-file-loader": "^4.0.2",
+ "@smithy/types": "^4.2.0",
"tslib": "^2.6.2"
},
"engines": {
@@ -2749,15 +2827,15 @@
}
},
"node_modules/@smithy/node-http-handler": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-4.0.3.tgz",
- "integrity": "sha512-dYCLeINNbYdvmMLtW0VdhW1biXt+PPCGazzT5ZjKw46mOtdgToQEwjqZSS9/EN8+tNs/RO0cEWG044+YZs97aA==",
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-4.0.4.tgz",
+ "integrity": "sha512-/mdqabuAT3o/ihBGjL94PUbTSPSRJ0eeVTdgADzow0wRJ0rN4A27EOrtlK56MYiO1fDvlO3jVTCxQtQmK9dZ1g==",
"license": "Apache-2.0",
"dependencies": {
- "@smithy/abort-controller": "^4.0.1",
- "@smithy/protocol-http": "^5.0.1",
- "@smithy/querystring-builder": "^4.0.1",
- "@smithy/types": "^4.1.0",
+ "@smithy/abort-controller": "^4.0.2",
+ "@smithy/protocol-http": "^5.1.0",
+ "@smithy/querystring-builder": "^4.0.2",
+ "@smithy/types": "^4.2.0",
"tslib": "^2.6.2"
},
"engines": {
@@ -2765,12 +2843,12 @@
}
},
"node_modules/@smithy/property-provider": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-4.0.1.tgz",
- "integrity": "sha512-o+VRiwC2cgmk/WFV0jaETGOtX16VNPp2bSQEzu0whbReqE1BMqsP2ami2Vi3cbGVdKu1kq9gQkDAGKbt0WOHAQ==",
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-4.0.2.tgz",
+ "integrity": "sha512-wNRoQC1uISOuNc2s4hkOYwYllmiyrvVXWMtq+TysNRVQaHm4yoafYQyjN/goYZS+QbYlPIbb/QRjaUZMuzwQ7A==",
"license": "Apache-2.0",
"dependencies": {
- "@smithy/types": "^4.1.0",
+ "@smithy/types": "^4.2.0",
"tslib": "^2.6.2"
},
"engines": {
@@ -2778,12 +2856,12 @@
}
},
"node_modules/@smithy/protocol-http": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-5.0.1.tgz",
- "integrity": "sha512-TE4cpj49jJNB/oHyh/cRVEgNZaoPaxd4vteJNB0yGidOCVR0jCw/hjPVsT8Q8FRmj8Bd3bFZt8Dh7xGCT+xMBQ==",
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-5.1.0.tgz",
+ "integrity": "sha512-KxAOL1nUNw2JTYrtviRRjEnykIDhxc84qMBzxvu1MUfQfHTuBlCG7PA6EdVwqpJjH7glw7FqQoFxUJSyBQgu7g==",
"license": "Apache-2.0",
"dependencies": {
- "@smithy/types": "^4.1.0",
+ "@smithy/types": "^4.2.0",
"tslib": "^2.6.2"
},
"engines": {
@@ -2791,12 +2869,12 @@
}
},
"node_modules/@smithy/querystring-builder": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-4.0.1.tgz",
- "integrity": "sha512-wU87iWZoCbcqrwszsOewEIuq+SU2mSoBE2CcsLwE0I19m0B2gOJr1MVjxWcDQYOzHbR1xCk7AcOBbGFUYOKvdg==",
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-4.0.2.tgz",
+ "integrity": "sha512-NTOs0FwHw1vimmQM4ebh+wFQvOwkEf/kQL6bSM1Lock+Bv4I89B3hGYoUEPkmvYPkDKyp5UdXJYu+PoTQ3T31Q==",
"license": "Apache-2.0",
"dependencies": {
- "@smithy/types": "^4.1.0",
+ "@smithy/types": "^4.2.0",
"@smithy/util-uri-escape": "^4.0.0",
"tslib": "^2.6.2"
},
@@ -2805,12 +2883,12 @@
}
},
"node_modules/@smithy/querystring-parser": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-4.0.1.tgz",
- "integrity": "sha512-Ma2XC7VS9aV77+clSFylVUnPZRindhB7BbmYiNOdr+CHt/kZNJoPP0cd3QxCnCFyPXC4eybmyE98phEHkqZ5Jw==",
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-4.0.2.tgz",
+ "integrity": "sha512-v6w8wnmZcVXjfVLjxw8qF7OwESD9wnpjp0Dqry/Pod0/5vcEA3qxCr+BhbOHlxS8O+29eLpT3aagxXGwIoEk7Q==",
"license": "Apache-2.0",
"dependencies": {
- "@smithy/types": "^4.1.0",
+ "@smithy/types": "^4.2.0",
"tslib": "^2.6.2"
},
"engines": {
@@ -2818,24 +2896,24 @@
}
},
"node_modules/@smithy/service-error-classification": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-4.0.1.tgz",
- "integrity": "sha512-3JNjBfOWpj/mYfjXJHB4Txc/7E4LVq32bwzE7m28GN79+M1f76XHflUaSUkhOriprPDzev9cX/M+dEB80DNDKA==",
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-4.0.2.tgz",
+ "integrity": "sha512-LA86xeFpTKn270Hbkixqs5n73S+LVM0/VZco8dqd+JT75Dyx3Lcw/MraL7ybjmz786+160K8rPOmhsq0SocoJQ==",
"license": "Apache-2.0",
"dependencies": {
- "@smithy/types": "^4.1.0"
+ "@smithy/types": "^4.2.0"
},
"engines": {
"node": ">=18.0.0"
}
},
"node_modules/@smithy/shared-ini-file-loader": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-4.0.1.tgz",
- "integrity": "sha512-hC8F6qTBbuHRI/uqDgqqi6J0R4GtEZcgrZPhFQnMhfJs3MnUTGSnR1NSJCJs5VWlMydu0kJz15M640fJlRsIOw==",
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-4.0.2.tgz",
+ "integrity": "sha512-J9/gTWBGVuFZ01oVA6vdb4DAjf1XbDhK6sLsu3OS9qmLrS6KB5ygpeHiM3miIbj1qgSJ96GYszXFWv6ErJ8QEw==",
"license": "Apache-2.0",
"dependencies": {
- "@smithy/types": "^4.1.0",
+ "@smithy/types": "^4.2.0",
"tslib": "^2.6.2"
},
"engines": {
@@ -2862,17 +2940,17 @@
}
},
"node_modules/@smithy/smithy-client": {
- "version": "4.1.6",
- "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-4.1.6.tgz",
- "integrity": "sha512-UYDolNg6h2O0L+cJjtgSyKKvEKCOa/8FHYJnBobyeoeWDmNpXjwOAtw16ezyeu1ETuuLEOZbrynK0ZY1Lx9Jbw==",
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-4.2.0.tgz",
+ "integrity": "sha512-Qs65/w30pWV7LSFAez9DKy0Koaoh3iHhpcpCCJ4waj/iqwsuSzJna2+vYwq46yBaqO5ZbP9TjUsATUNxrKeBdw==",
"license": "Apache-2.0",
"dependencies": {
- "@smithy/core": "^3.1.5",
- "@smithy/middleware-endpoint": "^4.0.6",
- "@smithy/middleware-stack": "^4.0.1",
- "@smithy/protocol-http": "^5.0.1",
- "@smithy/types": "^4.1.0",
- "@smithy/util-stream": "^4.1.2",
+ "@smithy/core": "^3.2.0",
+ "@smithy/middleware-endpoint": "^4.1.0",
+ "@smithy/middleware-stack": "^4.0.2",
+ "@smithy/protocol-http": "^5.1.0",
+ "@smithy/types": "^4.2.0",
+ "@smithy/util-stream": "^4.2.0",
"tslib": "^2.6.2"
},
"engines": {
@@ -2880,9 +2958,9 @@
}
},
"node_modules/@smithy/types": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.1.0.tgz",
- "integrity": "sha512-enhjdwp4D7CXmwLtD6zbcDMbo6/T6WtuuKCY49Xxc6OMOmUWlBEBDREsxxgV2LIdeQPW756+f97GzcgAwp3iLw==",
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.2.0.tgz",
+ "integrity": "sha512-7eMk09zQKCO+E/ivsjQv+fDlOupcFUCSC/L2YUPgwhvowVGWbPQHjEFcmjt7QQ4ra5lyowS92SV53Zc6XD4+fg==",
"license": "Apache-2.0",
"dependencies": {
"tslib": "^2.6.2"
@@ -2892,13 +2970,13 @@
}
},
"node_modules/@smithy/url-parser": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-4.0.1.tgz",
- "integrity": "sha512-gPXcIEUtw7VlK8f/QcruNXm7q+T5hhvGu9tl63LsJPZ27exB6dtNwvh2HIi0v7JcXJ5emBxB+CJxwaLEdJfA+g==",
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-4.0.2.tgz",
+ "integrity": "sha512-Bm8n3j2ScqnT+kJaClSVCMeiSenK6jVAzZCNewsYWuZtnBehEz4r2qP0riZySZVfzB+03XZHJeqfmJDkeeSLiQ==",
"license": "Apache-2.0",
"dependencies": {
- "@smithy/querystring-parser": "^4.0.1",
- "@smithy/types": "^4.1.0",
+ "@smithy/querystring-parser": "^4.0.2",
+ "@smithy/types": "^4.2.0",
"tslib": "^2.6.2"
},
"engines": {
@@ -2969,14 +3047,14 @@
}
},
"node_modules/@smithy/util-defaults-mode-browser": {
- "version": "4.0.7",
- "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-4.0.7.tgz",
- "integrity": "sha512-CZgDDrYHLv0RUElOsmZtAnp1pIjwDVCSuZWOPhIOBvG36RDfX1Q9+6lS61xBf+qqvHoqRjHxgINeQz47cYFC2Q==",
+ "version": "4.0.8",
+ "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-4.0.8.tgz",
+ "integrity": "sha512-ZTypzBra+lI/LfTYZeop9UjoJhhGRTg3pxrNpfSTQLd3AJ37r2z4AXTKpq1rFXiiUIJsYyFgNJdjWRGP/cbBaQ==",
"license": "Apache-2.0",
"dependencies": {
- "@smithy/property-provider": "^4.0.1",
- "@smithy/smithy-client": "^4.1.6",
- "@smithy/types": "^4.1.0",
+ "@smithy/property-provider": "^4.0.2",
+ "@smithy/smithy-client": "^4.2.0",
+ "@smithy/types": "^4.2.0",
"bowser": "^2.11.0",
"tslib": "^2.6.2"
},
@@ -2985,17 +3063,17 @@
}
},
"node_modules/@smithy/util-defaults-mode-node": {
- "version": "4.0.7",
- "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-4.0.7.tgz",
- "integrity": "sha512-79fQW3hnfCdrfIi1soPbK3zmooRFnLpSx3Vxi6nUlqaaQeC5dm8plt4OTNDNqEEEDkvKghZSaoti684dQFVrGQ==",
+ "version": "4.0.8",
+ "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-4.0.8.tgz",
+ "integrity": "sha512-Rgk0Jc/UDfRTzVthye/k2dDsz5Xxs9LZaKCNPgJTRyoyBoeiNCnHsYGOyu1PKN+sDyPnJzMOz22JbwxzBp9NNA==",
"license": "Apache-2.0",
"dependencies": {
- "@smithy/config-resolver": "^4.0.1",
- "@smithy/credential-provider-imds": "^4.0.1",
- "@smithy/node-config-provider": "^4.0.1",
- "@smithy/property-provider": "^4.0.1",
- "@smithy/smithy-client": "^4.1.6",
- "@smithy/types": "^4.1.0",
+ "@smithy/config-resolver": "^4.1.0",
+ "@smithy/credential-provider-imds": "^4.0.2",
+ "@smithy/node-config-provider": "^4.0.2",
+ "@smithy/property-provider": "^4.0.2",
+ "@smithy/smithy-client": "^4.2.0",
+ "@smithy/types": "^4.2.0",
"tslib": "^2.6.2"
},
"engines": {
@@ -3029,12 +3107,12 @@
}
},
"node_modules/@smithy/util-middleware": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-4.0.1.tgz",
- "integrity": "sha512-HiLAvlcqhbzhuiOa0Lyct5IIlyIz0PQO5dnMlmQ/ubYM46dPInB+3yQGkfxsk6Q24Y0n3/JmcA1v5iEhmOF5mA==",
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-4.0.2.tgz",
+ "integrity": "sha512-6GDamTGLuBQVAEuQ4yDQ+ti/YINf/MEmIegrEeg7DdB/sld8BX1lqt9RRuIcABOhAGTA50bRbPzErez7SlDtDQ==",
"license": "Apache-2.0",
"dependencies": {
- "@smithy/types": "^4.1.0",
+ "@smithy/types": "^4.2.0",
"tslib": "^2.6.2"
},
"engines": {
@@ -3042,13 +3120,13 @@
}
},
"node_modules/@smithy/util-retry": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-4.0.1.tgz",
- "integrity": "sha512-WmRHqNVwn3kI3rKk1LsKcVgPBG6iLTBGC1iYOV3GQegwJ3E8yjzHytPt26VNzOWr1qu0xE03nK0Ug8S7T7oufw==",
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-4.0.2.tgz",
+ "integrity": "sha512-Qryc+QG+7BCpvjloFLQrmlSd0RsVRHejRXd78jNO3+oREueCjwG1CCEH1vduw/ZkM1U9TztwIKVIi3+8MJScGg==",
"license": "Apache-2.0",
"dependencies": {
- "@smithy/service-error-classification": "^4.0.1",
- "@smithy/types": "^4.1.0",
+ "@smithy/service-error-classification": "^4.0.2",
+ "@smithy/types": "^4.2.0",
"tslib": "^2.6.2"
},
"engines": {
@@ -3056,14 +3134,14 @@
}
},
"node_modules/@smithy/util-stream": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-4.1.2.tgz",
- "integrity": "sha512-44PKEqQ303d3rlQuiDpcCcu//hV8sn+u2JBo84dWCE0rvgeiVl0IlLMagbU++o0jCWhYCsHaAt9wZuZqNe05Hw==",
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-4.2.0.tgz",
+ "integrity": "sha512-Vj1TtwWnuWqdgQI6YTUF5hQ/0jmFiOYsc51CSMgj7QfyO+RF4EnT2HNjoviNlOOmgzgvf3f5yno+EiC4vrnaWQ==",
"license": "Apache-2.0",
"dependencies": {
- "@smithy/fetch-http-handler": "^5.0.1",
- "@smithy/node-http-handler": "^4.0.3",
- "@smithy/types": "^4.1.0",
+ "@smithy/fetch-http-handler": "^5.0.2",
+ "@smithy/node-http-handler": "^4.0.4",
+ "@smithy/types": "^4.2.0",
"@smithy/util-base64": "^4.0.0",
"@smithy/util-buffer-from": "^4.0.0",
"@smithy/util-hex-encoding": "^4.0.0",
@@ -3461,7 +3539,6 @@
"resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz",
"integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==",
"license": "MIT",
- "optional": true,
"dependencies": {
"event-target-shim": "^5.0.0"
},
@@ -3492,9 +3569,9 @@
}
},
"node_modules/acorn": {
- "version": "8.14.0",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz",
- "integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==",
+ "version": "8.14.1",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.1.tgz",
+ "integrity": "sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==",
"license": "MIT",
"bin": {
"acorn": "bin/acorn"
@@ -3596,6 +3673,155 @@
"integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==",
"license": "ISC"
},
+ "node_modules/archiver": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/archiver/-/archiver-7.0.1.tgz",
+ "integrity": "sha512-ZcbTaIqJOfCc03QwD468Unz/5Ir8ATtvAHsK+FdXbDIbGfihqh9mrvdcYunQzqn4HrvWWaFyaxJhGZagaJJpPQ==",
+ "license": "MIT",
+ "dependencies": {
+ "archiver-utils": "^5.0.2",
+ "async": "^3.2.4",
+ "buffer-crc32": "^1.0.0",
+ "readable-stream": "^4.0.0",
+ "readdir-glob": "^1.1.2",
+ "tar-stream": "^3.0.0",
+ "zip-stream": "^6.0.1"
+ },
+ "engines": {
+ "node": ">= 14"
+ }
+ },
+ "node_modules/archiver-utils": {
+ "version": "5.0.2",
+ "resolved": "https://registry.npmjs.org/archiver-utils/-/archiver-utils-5.0.2.tgz",
+ "integrity": "sha512-wuLJMmIBQYCsGZgYLTy5FIB2pF6Lfb6cXMSF8Qywwk3t20zWnAi7zLcQFdKQmIB8wyZpY5ER38x08GbwtR2cLA==",
+ "license": "MIT",
+ "dependencies": {
+ "glob": "^10.0.0",
+ "graceful-fs": "^4.2.0",
+ "is-stream": "^2.0.1",
+ "lazystream": "^1.0.0",
+ "lodash": "^4.17.15",
+ "normalize-path": "^3.0.0",
+ "readable-stream": "^4.0.0"
+ },
+ "engines": {
+ "node": ">= 14"
+ }
+ },
+ "node_modules/archiver-utils/node_modules/brace-expansion": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
+ "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
+ "license": "MIT",
+ "dependencies": {
+ "balanced-match": "^1.0.0"
+ }
+ },
+ "node_modules/archiver-utils/node_modules/glob": {
+ "version": "10.4.5",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz",
+ "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==",
+ "license": "ISC",
+ "dependencies": {
+ "foreground-child": "^3.1.0",
+ "jackspeak": "^3.1.2",
+ "minimatch": "^9.0.4",
+ "minipass": "^7.1.2",
+ "package-json-from-dist": "^1.0.0",
+ "path-scurry": "^1.11.1"
+ },
+ "bin": {
+ "glob": "dist/esm/bin.mjs"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/archiver-utils/node_modules/jackspeak": {
+ "version": "3.4.3",
+ "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz",
+ "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==",
+ "license": "BlueOak-1.0.0",
+ "dependencies": {
+ "@isaacs/cliui": "^8.0.2"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ },
+ "optionalDependencies": {
+ "@pkgjs/parseargs": "^0.11.0"
+ }
+ },
+ "node_modules/archiver-utils/node_modules/lru-cache": {
+ "version": "10.4.3",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz",
+ "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==",
+ "license": "ISC"
+ },
+ "node_modules/archiver-utils/node_modules/minimatch": {
+ "version": "9.0.5",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz",
+ "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==",
+ "license": "ISC",
+ "dependencies": {
+ "brace-expansion": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=16 || 14 >=14.17"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/archiver-utils/node_modules/path-scurry": {
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz",
+ "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==",
+ "license": "BlueOak-1.0.0",
+ "dependencies": {
+ "lru-cache": "^10.2.0",
+ "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0"
+ },
+ "engines": {
+ "node": ">=16 || 14 >=14.18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/archiver-utils/node_modules/readable-stream": {
+ "version": "4.7.0",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.7.0.tgz",
+ "integrity": "sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==",
+ "license": "MIT",
+ "dependencies": {
+ "abort-controller": "^3.0.0",
+ "buffer": "^6.0.3",
+ "events": "^3.3.0",
+ "process": "^0.11.10",
+ "string_decoder": "^1.3.0"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ }
+ },
+ "node_modules/archiver/node_modules/readable-stream": {
+ "version": "4.7.0",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.7.0.tgz",
+ "integrity": "sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==",
+ "license": "MIT",
+ "dependencies": {
+ "abort-controller": "^3.0.0",
+ "buffer": "^6.0.3",
+ "events": "^3.3.0",
+ "process": "^0.11.10",
+ "string_decoder": "^1.3.0"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ }
+ },
"node_modules/are-we-there-yet": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz",
@@ -3788,6 +4014,15 @@
"integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==",
"license": "MIT"
},
+ "node_modules/async-function": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/async-function/-/async-function-1.0.0.tgz",
+ "integrity": "sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
"node_modules/async-retry": {
"version": "1.3.3",
"resolved": "https://registry.npmjs.org/async-retry/-/async-retry-1.3.3.tgz",
@@ -3838,9 +4073,9 @@
"license": "MIT"
},
"node_modules/axios": {
- "version": "1.8.1",
- "resolved": "https://registry.npmjs.org/axios/-/axios-1.8.1.tgz",
- "integrity": "sha512-NN+fvwH/kV01dYUQ3PTOZns4LWtWhOFCAhQ/pHb88WQ1hNe5V/dvFwc4VJcDL11LT9xSX0QtsR8sWUuyOuOq7g==",
+ "version": "1.8.4",
+ "resolved": "https://registry.npmjs.org/axios/-/axios-1.8.4.tgz",
+ "integrity": "sha512-eBSYY4Y68NNlHbHBMdeDmKNtDgXWhQsJcGqzO3iLUM0GraQFSS9cVgPX5I9b3lbdFKyYoAEGAZF1DwhTaljNAw==",
"license": "MIT",
"dependencies": {
"follow-redirects": "^1.15.6",
@@ -3849,23 +4084,36 @@
}
},
"node_modules/axios-ntlm": {
- "version": "1.4.2",
- "resolved": "https://registry.npmjs.org/axios-ntlm/-/axios-ntlm-1.4.2.tgz",
- "integrity": "sha512-8mS/uhmSWiRBiFKQvysPbX1eDBp6e+eXskmasuAXRHrn1Zjgji3O/oGXzXLw7tOhyD9nho1vGjZ2OYOD3cCvHg==",
+ "version": "1.4.4",
+ "resolved": "https://registry.npmjs.org/axios-ntlm/-/axios-ntlm-1.4.4.tgz",
+ "integrity": "sha512-kpCRdzMfL8gi0Z0o96P3QPAK4XuC8iciGgxGXe+PeQ4oyjI2LZN8WSOKbu0Y9Jo3T/A7pB81n6jYVPIpglEuRA==",
"license": "MIT",
"dependencies": {
- "axios": "^1.6.1",
+ "axios": "^1.8.4",
"des.js": "^1.1.0",
"dev-null": "^0.1.1",
"js-md4": "^0.3.2"
}
},
+ "node_modules/b4a": {
+ "version": "1.6.7",
+ "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.6.7.tgz",
+ "integrity": "sha512-OnAYlL5b7LEkALw87fUVafQw5rVR9RjwGd4KUwNQ6DrrNmaVaUCgLipfVlzrPQ4tWOR9P0IXGNOx50jYCCdSJg==",
+ "license": "Apache-2.0"
+ },
"node_modules/balanced-match": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
"integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
"license": "MIT"
},
+ "node_modules/bare-events": {
+ "version": "2.5.4",
+ "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.5.4.tgz",
+ "integrity": "sha512-+gFfDkR8pj4/TrWCGUGWmJIkBwuxPS5F+a5yWjOHQt2hHvNZd5YLzadjmDUtFmMM4y429bnKLa8bYBMHcYdnQA==",
+ "license": "Apache-2.0",
+ "optional": true
+ },
"node_modules/base64-js": {
"version": "1.5.1",
"resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz",
@@ -4071,6 +4319,39 @@
"node": ">= 0.4.0"
}
},
+ "node_modules/buffer": {
+ "version": "6.0.3",
+ "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz",
+ "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "base64-js": "^1.3.1",
+ "ieee754": "^1.2.1"
+ }
+ },
+ "node_modules/buffer-crc32": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-1.0.0.tgz",
+ "integrity": "sha512-Db1SbgBS/fg/392AblrMJk97KggmvYhr4pB5ZIMTWtaivCPMWLkmb7m21cJvpvgK+J3nsU2CmmixNBZx4vFj/w==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=8.0.0"
+ }
+ },
"node_modules/buffer-equal-constant-time": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz",
@@ -4093,9 +4374,9 @@
}
},
"node_modules/bullmq": {
- "version": "5.41.7",
- "resolved": "https://registry.npmjs.org/bullmq/-/bullmq-5.41.7.tgz",
- "integrity": "sha512-eZbKJSx15bflfzKRiR+dKeLTr/M/YKb4cIp73OdU79PEMHQ6aEFUtbG6R+f0KvLLznI/O01G581U2Eqli6S2ew==",
+ "version": "5.44.4",
+ "resolved": "https://registry.npmjs.org/bullmq/-/bullmq-5.44.4.tgz",
+ "integrity": "sha512-0BjgABM/7U85Fxatj586ftsoWiGdjmg7fR7PwRYNOOGfvGpiUX9nQoUmx+9VZW/OtHO/4um/BVh2Y2S9BEhKFg==",
"license": "MIT",
"dependencies": {
"cron-parser": "^4.9.0",
@@ -4298,17 +4579,17 @@
}
},
"node_modules/cjs-module-lexer": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.4.1.tgz",
- "integrity": "sha512-cuSVIHi9/9E/+821Qjdvngor+xpnlwnuwIyZOaLmHBVdXL+gP+I6QQB9VkO7RI77YIcTV+S1W9AreJ5eN63JBA==",
+ "version": "1.4.3",
+ "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.4.3.tgz",
+ "integrity": "sha512-9z8TZaGM1pfswYeXrUpzPrkx8UnWYdhJclsiYMm6x/w5+nN+8Tf/LnAgfLGQCm59qAOxU8WwHEq2vNwF6i4j+Q==",
"license": "MIT"
},
"node_modules/cliui": {
"version": "8.0.1",
"resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz",
"integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==",
- "devOptional": true,
"license": "ISC",
+ "optional": true,
"dependencies": {
"string-width": "^4.2.0",
"strip-ansi": "^6.0.1",
@@ -4322,8 +4603,8 @@
"version": "7.0.0",
"resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
"integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
- "devOptional": true,
"license": "MIT",
+ "optional": true,
"dependencies": {
"ansi-styles": "^4.0.0",
"string-width": "^4.1.0",
@@ -4337,9 +4618,9 @@
}
},
"node_modules/cloudinary": {
- "version": "2.5.1",
- "resolved": "https://registry.npmjs.org/cloudinary/-/cloudinary-2.5.1.tgz",
- "integrity": "sha512-CNg6uU53Hl4FEVynkTGpt5bQEAQWDHi3H+Sm62FzKf5uQHipSN2v7qVqS8GRVqeb0T1WNV+22+75DOJeRXYeSQ==",
+ "version": "2.6.0",
+ "resolved": "https://registry.npmjs.org/cloudinary/-/cloudinary-2.6.0.tgz",
+ "integrity": "sha512-FIlny9RR5LPgkMioG4V7yUpC6ASyIFQMWfx4TgOi/xBeLxJTegbyQc3itiXL0b0lDlSaL0KyT2THEw6osrKqpQ==",
"license": "MIT",
"dependencies": {
"lodash": "^4.17.21",
@@ -4451,6 +4732,38 @@
"node": ">=18"
}
},
+ "node_modules/compress-commons": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-6.0.2.tgz",
+ "integrity": "sha512-6FqVXeETqWPoGcfzrXb37E50NP0LXT8kAMu5ooZayhWWdgEY4lBEEcbQNXtkuKQsGduxiIcI4gOTsxTmuq/bSg==",
+ "license": "MIT",
+ "dependencies": {
+ "crc-32": "^1.2.0",
+ "crc32-stream": "^6.0.0",
+ "is-stream": "^2.0.1",
+ "normalize-path": "^3.0.0",
+ "readable-stream": "^4.0.0"
+ },
+ "engines": {
+ "node": ">= 14"
+ }
+ },
+ "node_modules/compress-commons/node_modules/readable-stream": {
+ "version": "4.7.0",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.7.0.tgz",
+ "integrity": "sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==",
+ "license": "MIT",
+ "dependencies": {
+ "abort-controller": "^3.0.0",
+ "buffer": "^6.0.3",
+ "events": "^3.3.0",
+ "process": "^0.11.10",
+ "string_decoder": "^1.3.0"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ }
+ },
"node_modules/compressible": {
"version": "2.0.18",
"resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz",
@@ -4547,34 +4860,6 @@
"safe-buffer": "~5.1.0"
}
},
- "node_modules/concurrently": {
- "version": "8.2.2",
- "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-8.2.2.tgz",
- "integrity": "sha512-1dP4gpXFhei8IOtlXRE/T/4H88ElHgTiUzh71YUmtjTEHMSRS2Z/fgOxHSxxusGHogsRfxNq1vyAwxSC+EVyDg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "chalk": "^4.1.2",
- "date-fns": "^2.30.0",
- "lodash": "^4.17.21",
- "rxjs": "^7.8.1",
- "shell-quote": "^1.8.1",
- "spawn-command": "0.0.2",
- "supports-color": "^8.1.1",
- "tree-kill": "^1.2.2",
- "yargs": "^17.7.2"
- },
- "bin": {
- "conc": "dist/bin/concurrently.js",
- "concurrently": "dist/bin/concurrently.js"
- },
- "engines": {
- "node": "^14.13.0 || >=16.0.0"
- },
- "funding": {
- "url": "https://github.com/open-cli-tools/concurrently?sponsor=1"
- }
- },
"node_modules/console-control-strings": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz",
@@ -4670,6 +4955,47 @@
"node": ">=10.0.0"
}
},
+ "node_modules/crc-32": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.2.tgz",
+ "integrity": "sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==",
+ "license": "Apache-2.0",
+ "bin": {
+ "crc32": "bin/crc32.njs"
+ },
+ "engines": {
+ "node": ">=0.8"
+ }
+ },
+ "node_modules/crc32-stream": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/crc32-stream/-/crc32-stream-6.0.0.tgz",
+ "integrity": "sha512-piICUB6ei4IlTv1+653yq5+KoqfBYmj9bw6LqXoOneTMDXk5nM1qt12mFW1caG3LlJXEKW1Bp0WggEmIfQB34g==",
+ "license": "MIT",
+ "dependencies": {
+ "crc-32": "^1.2.0",
+ "readable-stream": "^4.0.0"
+ },
+ "engines": {
+ "node": ">= 14"
+ }
+ },
+ "node_modules/crc32-stream/node_modules/readable-stream": {
+ "version": "4.7.0",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.7.0.tgz",
+ "integrity": "sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==",
+ "license": "MIT",
+ "dependencies": {
+ "abort-controller": "^3.0.0",
+ "buffer": "^6.0.3",
+ "events": "^3.3.0",
+ "process": "^0.11.10",
+ "string_decoder": "^1.3.0"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ }
+ },
"node_modules/crisp-status-reporter": {
"version": "1.2.2",
"resolved": "https://registry.npmjs.org/crisp-status-reporter/-/crisp-status-reporter-1.2.2.tgz",
@@ -4828,23 +5154,6 @@
"url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/date-fns": {
- "version": "2.30.0",
- "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.30.0.tgz",
- "integrity": "sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/runtime": "^7.21.0"
- },
- "engines": {
- "node": ">=0.11"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/date-fns"
- }
- },
"node_modules/dayjs": {
"version": "1.11.13",
"resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.13.tgz",
@@ -4861,18 +5170,18 @@
}
},
"node_modules/dd-trace": {
- "version": "5.40.0",
- "resolved": "https://registry.npmjs.org/dd-trace/-/dd-trace-5.40.0.tgz",
- "integrity": "sha512-/UYVCcgpZ9LnnUvIJcNfd1Hj51i8HhqLOn9PCj5gK3wJUn6MY/ie/5da2ZaFtoK2DKQ9OZmFBITLV3+KDl4pjA==",
+ "version": "5.43.0",
+ "resolved": "https://registry.npmjs.org/dd-trace/-/dd-trace-5.43.0.tgz",
+ "integrity": "sha512-WtPUSZfEosSHYVBFR48FqfYBFor8QchKwAKo+LYtbgTPtFzYKyBV/FJUqYE6sDF15Raf4sJVt/LOscywgj2zEw==",
"hasInstallScript": true,
"license": "(Apache-2.0 OR BSD-3-Clause)",
"dependencies": {
- "@datadog/libdatadog": "^0.4.0",
- "@datadog/native-appsec": "8.4.0",
+ "@datadog/libdatadog": "^0.5.0",
+ "@datadog/native-appsec": "8.5.0",
"@datadog/native-iast-rewriter": "2.8.0",
"@datadog/native-iast-taint-tracking": "3.3.0",
"@datadog/native-metrics": "^3.1.0",
- "@datadog/pprof": "5.5.1",
+ "@datadog/pprof": "5.6.0",
"@datadog/sketches-js": "^2.1.0",
"@isaacs/ttlcache": "^1.4.1",
"@opentelemetry/api": ">=1.0.0 <1.9.0",
@@ -4880,7 +5189,7 @@
"crypto-randomuuid": "^1.0.0",
"dc-polyfill": "^0.1.4",
"ignore": "^5.2.4",
- "import-in-the-middle": "1.11.2",
+ "import-in-the-middle": "1.13.1",
"istanbul-lib-coverage": "3.2.0",
"jest-docblock": "^29.7.0",
"koalas": "^1.0.2",
@@ -4904,15 +5213,6 @@
"node": ">=18"
}
},
- "node_modules/dd-trace/node_modules/source-map": {
- "version": "0.7.4",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz",
- "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==",
- "license": "BSD-3-Clause",
- "engines": {
- "node": ">= 8"
- }
- },
"node_modules/debug": {
"version": "4.4.0",
"resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz",
@@ -5585,18 +5885,19 @@
}
},
"node_modules/eslint": {
- "version": "9.21.0",
- "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.21.0.tgz",
- "integrity": "sha512-KjeihdFqTPhOMXTt7StsDxriV4n66ueuF/jfPNC3j/lduHwr/ijDwJMsF+wyMJethgiKi5wniIE243vi07d3pg==",
+ "version": "9.23.0",
+ "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.23.0.tgz",
+ "integrity": "sha512-jV7AbNoFPAY1EkFYpLq5bslU9NLNO8xnEeQXwErNibVryjk67wHVmddTBilc5srIttJDBrB0eMHKZBFbSIABCw==",
"dev": true,
"license": "MIT",
"dependencies": {
"@eslint-community/eslint-utils": "^4.2.0",
"@eslint-community/regexpp": "^4.12.1",
"@eslint/config-array": "^0.19.2",
+ "@eslint/config-helpers": "^0.2.0",
"@eslint/core": "^0.12.0",
- "@eslint/eslintrc": "^3.3.0",
- "@eslint/js": "9.21.0",
+ "@eslint/eslintrc": "^3.3.1",
+ "@eslint/js": "9.23.0",
"@eslint/plugin-kit": "^0.2.7",
"@humanfs/node": "^0.16.6",
"@humanwhocodes/module-importer": "^1.0.1",
@@ -5608,7 +5909,7 @@
"cross-spawn": "^7.0.6",
"debug": "^4.3.2",
"escape-string-regexp": "^4.0.0",
- "eslint-scope": "^8.2.0",
+ "eslint-scope": "^8.3.0",
"eslint-visitor-keys": "^4.2.0",
"espree": "^10.3.0",
"esquery": "^1.5.0",
@@ -5688,9 +5989,9 @@
}
},
"node_modules/eslint-scope": {
- "version": "8.2.0",
- "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.2.0.tgz",
- "integrity": "sha512-PHlWUfG6lvPc3yvP5A4PNyBL1W8fkDUccmI21JUu/+GKZBoH/W5u6usENXUrWFRsyoW5ACUjFGgAFQp5gUlb/A==",
+ "version": "8.3.0",
+ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.3.0.tgz",
+ "integrity": "sha512-pUNxi75F8MJ/GdeKtVLSbYg4ZI34J6C0C7sbL4YOp2exGwen7ZsuBqKzUhXd0qMQ362yET3z+uPwKeg/0C2XCQ==",
"dev": true,
"license": "BSD-2-Clause",
"dependencies": {
@@ -5808,11 +6109,19 @@
"resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz",
"integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==",
"license": "MIT",
- "optional": true,
"engines": {
"node": ">=6"
}
},
+ "node_modules/events": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz",
+ "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.8.x"
+ }
+ },
"node_modules/express": {
"version": "4.21.2",
"resolved": "https://registry.npmjs.org/express/-/express-4.21.2.tgz",
@@ -6089,9 +6398,9 @@
}
},
"node_modules/firebase-admin": {
- "version": "13.1.0",
- "resolved": "https://registry.npmjs.org/firebase-admin/-/firebase-admin-13.1.0.tgz",
- "integrity": "sha512-XPKiTyPyvUMZ22EPk4M1oSiZ8/4qFeYwjK88o/DYpGtNbOLKrM6Oc9jTaK+P6Vwn3Vr1+OCyLLJ93Bci382UqA==",
+ "version": "13.2.0",
+ "resolved": "https://registry.npmjs.org/firebase-admin/-/firebase-admin-13.2.0.tgz",
+ "integrity": "sha512-qQBTKo0QWCDaWwISry989pr8YfZSSk00rNCKaucjOgltEm3cCYzEe4rODqBd1uUwma+Iu5jtAzg89Nfsjr3fGg==",
"license": "Apache-2.0",
"dependencies": {
"@fastify/busboy": "^3.0.0",
@@ -6113,19 +6422,6 @@
"@google-cloud/storage": "^7.14.0"
}
},
- "node_modules/firebase-admin/node_modules/uuid": {
- "version": "11.0.3",
- "resolved": "https://registry.npmjs.org/uuid/-/uuid-11.0.3.tgz",
- "integrity": "sha512-d0z310fCWv5dJwnX1Y/MncBAqGMKEzlBb1AOf7z9K8ALnd0utBX/msg/fA0+sbyN1ihbMsLhrBlnl1ak7Wa0rg==",
- "funding": [
- "https://github.com/sponsors/broofa",
- "https://github.com/sponsors/ctavan"
- ],
- "license": "MIT",
- "bin": {
- "uuid": "dist/esm/bin/uuid"
- }
- },
"node_modules/flat-cache": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz",
@@ -6666,6 +6962,12 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/graceful-fs": {
+ "version": "4.2.11",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz",
+ "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==",
+ "license": "ISC"
+ },
"node_modules/graphql": {
"version": "16.10.0",
"resolved": "https://registry.npmjs.org/graphql/-/graphql-16.10.0.tgz",
@@ -6932,6 +7234,26 @@
"node": ">=0.10.0"
}
},
+ "node_modules/ieee754": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz",
+ "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ],
+ "license": "BSD-3-Clause"
+ },
"node_modules/ignore": {
"version": "5.3.2",
"resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz",
@@ -6959,12 +7281,12 @@
}
},
"node_modules/import-in-the-middle": {
- "version": "1.11.2",
- "resolved": "https://registry.npmjs.org/import-in-the-middle/-/import-in-the-middle-1.11.2.tgz",
- "integrity": "sha512-gK6Rr6EykBcc6cVWRSBR5TWf8nn6hZMYSRYqCcHa0l0d1fPK7JSYo6+Mlmck76jIX9aL/IZ71c06U2VpFwl1zA==",
+ "version": "1.13.1",
+ "resolved": "https://registry.npmjs.org/import-in-the-middle/-/import-in-the-middle-1.13.1.tgz",
+ "integrity": "sha512-k2V9wNm9B+ysuelDTHjI9d5KPc4l8zAZTGqj+pcynvWkypZd857ryzN8jNC7Pg2YZXNMJcHRPpaDyCBbNyVRpA==",
"license": "Apache-2.0",
"dependencies": {
- "acorn": "^8.8.2",
+ "acorn": "^8.14.0",
"acorn-import-attributes": "^1.9.5",
"cjs-module-lexer": "^1.2.2",
"module-details-from-path": "^1.0.3"
@@ -7051,9 +7373,9 @@
}
},
"node_modules/ioredis": {
- "version": "5.5.0",
- "resolved": "https://registry.npmjs.org/ioredis/-/ioredis-5.5.0.tgz",
- "integrity": "sha512-7CutT89g23FfSa8MDoIFs2GYYa0PaNiW/OrT+nRyjRXHDZd17HmIgy+reOQ/yhh72NznNjGuS8kbCAcA4Ro4mw==",
+ "version": "5.6.0",
+ "resolved": "https://registry.npmjs.org/ioredis/-/ioredis-5.6.0.tgz",
+ "integrity": "sha512-tBZlIIWbndeWBWCXWZiqtOF/yxf6yZX3tAlTJ7nfo5jhd6dctNxF7QnYlZLZ1a0o0pDoen7CgZqO+zjNaFbJAg==",
"license": "MIT",
"dependencies": {
"@ioredis/commands": "^1.1.1",
@@ -7107,11 +7429,12 @@
"license": "MIT"
},
"node_modules/is-async-function": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.1.0.tgz",
- "integrity": "sha512-GExz9MtyhlZyXYLxzlJRj5WUCE661zhDa1Yna52CN57AJsymh+DvXXjyveSioqSRdxvUrdKdvqB1b5cVKsNpWQ==",
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.1.1.tgz",
+ "integrity": "sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==",
"license": "MIT",
"dependencies": {
+ "async-function": "^1.0.0",
"call-bound": "^1.0.3",
"get-proto": "^1.0.1",
"has-tostringtag": "^1.0.2",
@@ -7443,12 +7766,12 @@
}
},
"node_modules/is-weakref": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.1.0.tgz",
- "integrity": "sha512-SXM8Nwyys6nT5WP6pltOwKytLV7FqQ4UiibxVmW+EIosHcmCqkkjViTb5SNssDlkCiEYRP1/pdWUKVvZBmsR2Q==",
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.1.1.tgz",
+ "integrity": "sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==",
"license": "MIT",
"dependencies": {
- "call-bound": "^1.0.2"
+ "call-bound": "^1.0.3"
},
"engines": {
"node": ">= 0.4"
@@ -7627,9 +7950,9 @@
}
},
"node_modules/json-2-csv": {
- "version": "5.5.8",
- "resolved": "https://registry.npmjs.org/json-2-csv/-/json-2-csv-5.5.8.tgz",
- "integrity": "sha512-eMQHOwV+av8Sgo+fkbEbQWOw/kwh89AZ5fNA8TYfcooG6TG1ZOL2WcPUrngIMIK8dBJitQ8QEU0zbncQ0CX4CQ==",
+ "version": "5.5.9",
+ "resolved": "https://registry.npmjs.org/json-2-csv/-/json-2-csv-5.5.9.tgz",
+ "integrity": "sha512-l4g6GZVHrsN+5SKkpOmGNSvho+saDZwXzj/xmcO0lJAgklzwsiqy70HS5tA9djcRvBEybZ9IF6R1MDFTEsaOGQ==",
"license": "MIT",
"dependencies": {
"deeks": "3.1.0",
@@ -7820,6 +8143,48 @@
"integrity": "sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A==",
"license": "MIT"
},
+ "node_modules/lazystream": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.1.tgz",
+ "integrity": "sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==",
+ "license": "MIT",
+ "dependencies": {
+ "readable-stream": "^2.0.5"
+ },
+ "engines": {
+ "node": ">= 0.6.3"
+ }
+ },
+ "node_modules/lazystream/node_modules/readable-stream": {
+ "version": "2.3.8",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz",
+ "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==",
+ "license": "MIT",
+ "dependencies": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "node_modules/lazystream/node_modules/safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+ "license": "MIT"
+ },
+ "node_modules/lazystream/node_modules/string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "license": "MIT",
+ "dependencies": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
"node_modules/levn": {
"version": "0.4.1",
"resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz",
@@ -8043,9 +8408,9 @@
}
},
"node_modules/luxon": {
- "version": "3.5.0",
- "resolved": "https://registry.npmjs.org/luxon/-/luxon-3.5.0.tgz",
- "integrity": "sha512-rh+Zjr6DNfUYR3bPwJEnuwDdqMbxZW7LOQfUN4B54+Cl+0o5zaU9RJ6bcidfDtC1cWCZXQ+nvX8bf6bAji37QQ==",
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/luxon/-/luxon-3.6.0.tgz",
+ "integrity": "sha512-WE7p0p7W1xji9qxkLYsvcIxZyfP48GuFrWIBQZIsbjCyf65dG1rv4n83HcOyEyhvzxJCrUoObCRNFgRNIQ5KNA==",
"license": "MIT",
"engines": {
"node": ">=12"
@@ -8258,9 +8623,9 @@
}
},
"node_modules/moment-timezone": {
- "version": "0.5.47",
- "resolved": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.47.tgz",
- "integrity": "sha512-UbNt/JAWS0m/NJOebR0QMRHBk0hu03r5dx9GK8Cs0AS3I81yDcOc9k+DytPItgVvBP7J6Mf6U2n3BPAacAV9oA==",
+ "version": "0.5.48",
+ "resolved": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.48.tgz",
+ "integrity": "sha512-f22b8LV1gbTO2ms2j2z13MuPogNoh5UzxL3nzNAYKGraILnbGc9NEE6dyiiiLv46DGRb8A4kg8UKWLjPthxBHw==",
"license": "MIT",
"dependencies": {
"moment": "^2.29.4"
@@ -8421,12 +8786,12 @@
}
},
"node_modules/node-mailjet": {
- "version": "6.0.6",
- "resolved": "https://registry.npmjs.org/node-mailjet/-/node-mailjet-6.0.6.tgz",
- "integrity": "sha512-cr8ciqtHuxyFd3+3bpDy+oKuNzctZfRQZtwRjurVAzE+DZLTfyxjgD+GTqQ1kr0ClAjDjSh3ERlZvd5MV0fKHg==",
+ "version": "6.0.8",
+ "resolved": "https://registry.npmjs.org/node-mailjet/-/node-mailjet-6.0.8.tgz",
+ "integrity": "sha512-VyB2+SeD1zuxpuJLePC4bk10UN0G294CsVlF8YBxb+1tlH0Tw4wECGlTYlQOaRMtPgckdObpcfEbhUWu3UuFIQ==",
"license": "MIT",
"dependencies": {
- "axios": "1.7.4",
+ "axios": "^1.8.1",
"json-bigint": "^1.0.0",
"url-join": "^4.0.0"
},
@@ -8435,17 +8800,6 @@
"npm": ">= 6.9.0"
}
},
- "node_modules/node-mailjet/node_modules/axios": {
- "version": "1.7.4",
- "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.4.tgz",
- "integrity": "sha512-DukmaFRnY6AzAALSH4J2M3k6PkaC+MfaAGdEERRWcC9q3/TWQwLpHR8ZRLKTdQ3aBDL64EdluRDjJqKw+BPZEw==",
- "license": "MIT",
- "dependencies": {
- "follow-redirects": "^1.15.6",
- "form-data": "^4.0.0",
- "proxy-from-env": "^1.1.0"
- }
- },
"node_modules/node-persist": {
"version": "4.0.4",
"resolved": "https://registry.npmjs.org/node-persist/-/node-persist-4.0.4.tgz",
@@ -8482,6 +8836,15 @@
"node": ">=6"
}
},
+ "node_modules/normalize-path": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
+ "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
"node_modules/notepack.io": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/notepack.io/-/notepack.io-3.0.1.tgz",
@@ -8991,6 +9354,15 @@
"url": "https://github.com/prettier/prettier?sponsor=1"
}
},
+ "node_modules/process": {
+ "version": "0.11.10",
+ "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz",
+ "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.6.0"
+ }
+ },
"node_modules/process-nextick-args": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
@@ -9154,12 +9526,6 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/querystringify": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz",
- "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==",
- "license": "MIT"
- },
"node_modules/random-bytes": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/random-bytes/-/random-bytes-1.0.0.tgz",
@@ -9214,6 +9580,36 @@
"node": ">= 6"
}
},
+ "node_modules/readdir-glob": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/readdir-glob/-/readdir-glob-1.1.3.tgz",
+ "integrity": "sha512-v05I2k7xN8zXvPD9N+z/uhXPaj0sUFCe2rcWZIpBsqxfP7xXFQ0tipAd/wjj1YxWyWtUS5IDJpOG82JKt2EAVA==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "minimatch": "^5.1.0"
+ }
+ },
+ "node_modules/readdir-glob/node_modules/brace-expansion": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
+ "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
+ "license": "MIT",
+ "dependencies": {
+ "balanced-match": "^1.0.0"
+ }
+ },
+ "node_modules/readdir-glob/node_modules/minimatch": {
+ "version": "5.1.6",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz",
+ "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==",
+ "license": "ISC",
+ "dependencies": {
+ "brace-expansion": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
"node_modules/recursive-diff": {
"version": "1.0.9",
"resolved": "https://registry.npmjs.org/recursive-diff/-/recursive-diff-1.0.9.tgz",
@@ -9330,12 +9726,6 @@
"node": ">=0.10.0"
}
},
- "node_modules/requires-port": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz",
- "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==",
- "license": "MIT"
- },
"node_modules/resolve": {
"version": "2.0.0-next.5",
"resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.5.tgz",
@@ -9425,16 +9815,6 @@
"integrity": "sha512-c5ouQkOvGHF1qomUUDJGFcXsomeSO2gbEs6hVhMAtlkE1CuaZase/WzoaKFG/EZQuNmq6pw/EMCeEnDvOgCJYQ==",
"license": "MIT"
},
- "node_modules/rxjs": {
- "version": "7.8.1",
- "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz",
- "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==",
- "dev": true,
- "license": "Apache-2.0",
- "dependencies": {
- "tslib": "^2.1.0"
- }
- },
"node_modules/safe-array-concat": {
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.3.tgz",
@@ -9920,13 +10300,13 @@
}
},
"node_modules/soap": {
- "version": "1.1.9",
- "resolved": "https://registry.npmjs.org/soap/-/soap-1.1.9.tgz",
- "integrity": "sha512-x6wMhwIwGFnMQiV0tLIygERELwpV/EkidUvzjcCPRx0D16YngNL8z7j5+nFad0Fl5irisXbfY2FKzvF9SEjMog==",
+ "version": "1.1.10",
+ "resolved": "https://registry.npmjs.org/soap/-/soap-1.1.10.tgz",
+ "integrity": "sha512-dqfX9qHhXup3ZLWsI5of6xJIJKeBCPnn3tTu9sKtASm2A53Zk6/u3drygLiUy+H1mmjRBptXfVkjY6pt8nhOjA==",
"license": "MIT",
"dependencies": {
- "axios": "^1.7.9",
- "axios-ntlm": "^1.4.2",
+ "axios": "^1.8.3",
+ "axios-ntlm": "^1.4.3",
"debug": "^4.4.0",
"formidable": "^3.5.2",
"get-stream": "^6.0.1",
@@ -9934,7 +10314,7 @@
"sax": "^1.4.1",
"strip-bom": "^3.0.0",
"whatwg-mimetype": "4.0.0",
- "xml-crypto": "^6.0.0"
+ "xml-crypto": "^6.0.1"
},
"engines": {
"node": ">=14.17.0"
@@ -10032,6 +10412,15 @@
}
}
},
+ "node_modules/source-map": {
+ "version": "0.7.4",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz",
+ "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==",
+ "license": "BSD-3-Clause",
+ "engines": {
+ "node": ">= 8"
+ }
+ },
"node_modules/source-map-explorer": {
"version": "2.5.3",
"resolved": "https://registry.npmjs.org/source-map-explorer/-/source-map-explorer-2.5.3.tgz",
@@ -10094,16 +10483,6 @@
"url": "https://github.com/sponsors/isaacs"
}
},
- "node_modules/source-map-explorer/node_modules/source-map": {
- "version": "0.7.4",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz",
- "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==",
- "dev": true,
- "license": "BSD-3-Clause",
- "engines": {
- "node": ">= 8"
- }
- },
"node_modules/source-map-explorer/node_modules/wrap-ansi": {
"version": "7.0.0",
"resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
@@ -10151,12 +10530,6 @@
"node": ">=10"
}
},
- "node_modules/spawn-command": {
- "version": "0.0.2",
- "resolved": "https://registry.npmjs.org/spawn-command/-/spawn-command-0.0.2.tgz",
- "integrity": "sha512-zC8zGoGkmc8J9ndvml8Xksr1Amk9qBujgbF0JAIWO7kXr43w0h/0GJNM/Vustixu+YE8N/MTrQ7N31FvHUACxQ==",
- "dev": true
- },
"node_modules/specificity": {
"version": "0.4.1",
"resolved": "https://registry.npmjs.org/specificity/-/specificity-0.4.1.tgz",
@@ -10255,6 +10628,16 @@
"node": ">= 0.8"
}
},
+ "node_modules/stream-browserify": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-3.0.0.tgz",
+ "integrity": "sha512-H73RAHsVBapbim0tU2JwwOiXUj+fikfiaoYAKHF3VJfA0pe2BCzkhAHBlLG6REzE+2WNZcxOXjK7lkso+9euLA==",
+ "license": "MIT",
+ "dependencies": {
+ "inherits": "~2.0.4",
+ "readable-stream": "^3.5.0"
+ }
+ },
"node_modules/stream-events": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/stream-events/-/stream-events-1.0.5.tgz",
@@ -10280,6 +10663,19 @@
"node": ">=10.0.0"
}
},
+ "node_modules/streamx": {
+ "version": "2.22.0",
+ "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.22.0.tgz",
+ "integrity": "sha512-sLh1evHOzBy/iWRiR6d1zRcLao4gGZr3C1kzNz4fopCOKJb6xD9ub8Mpi9Mr1R6id5o43S+d93fI48UC5uM9aw==",
+ "license": "MIT",
+ "dependencies": {
+ "fast-fifo": "^1.3.2",
+ "text-decoder": "^1.1.0"
+ },
+ "optionalDependencies": {
+ "bare-events": "^2.2.0"
+ }
+ },
"node_modules/strict-uri-encode": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-2.0.0.tgz",
@@ -10502,22 +10898,6 @@
"pick-util": "^1.1.5"
}
},
- "node_modules/supports-color": {
- "version": "8.1.1",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz",
- "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "has-flag": "^4.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/chalk/supports-color?sponsor=1"
- }
- },
"node_modules/supports-preserve-symlinks-flag": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
@@ -10548,6 +10928,17 @@
"node": ">=10"
}
},
+ "node_modules/tar-stream": {
+ "version": "3.1.7",
+ "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-3.1.7.tgz",
+ "integrity": "sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ==",
+ "license": "MIT",
+ "dependencies": {
+ "b4a": "^1.6.4",
+ "fast-fifo": "^1.2.0",
+ "streamx": "^2.15.0"
+ }
+ },
"node_modules/tar/node_modules/minipass": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz",
@@ -10650,6 +11041,15 @@
"rimraf": "bin.js"
}
},
+ "node_modules/text-decoder": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/text-decoder/-/text-decoder-1.2.3.tgz",
+ "integrity": "sha512-3/o9z3X0X0fTupwsYvR03pJ/DjWuqqrfwBgTQzdWDiQSm9KitAyz/9WqsT2JQW7KV2m+bC2ol/zqpW37NHxLaA==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "b4a": "^1.6.4"
+ }
+ },
"node_modules/text-hex": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/text-hex/-/text-hex-1.0.0.tgz",
@@ -10677,16 +11077,6 @@
"integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==",
"license": "MIT"
},
- "node_modules/tree-kill": {
- "version": "1.2.2",
- "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz",
- "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==",
- "dev": true,
- "license": "MIT",
- "bin": {
- "tree-kill": "cli.js"
- }
- },
"node_modules/triple-beam": {
"version": "1.4.1",
"resolved": "https://registry.npmjs.org/triple-beam/-/triple-beam-1.4.1.tgz",
@@ -10727,18 +11117,17 @@
"license": "Unlicense"
},
"node_modules/twilio": {
- "version": "4.23.0",
- "resolved": "https://registry.npmjs.org/twilio/-/twilio-4.23.0.tgz",
- "integrity": "sha512-LdNBQfOe0dY2oJH2sAsrxazpgfFQo5yXGxe96QA8UWB5uu+433PrUbkv8gQ5RmrRCqUTPQ0aOrIyAdBr1aB03Q==",
+ "version": "5.5.1",
+ "resolved": "https://registry.npmjs.org/twilio/-/twilio-5.5.1.tgz",
+ "integrity": "sha512-b1gLd2eMsCSCHRerp3GQUedVlz0nCTt5FbyPxDPmMvk5cm6eIPk4ZTp5JNpgucARZgpCB2uUACJbdcidEHAUBA==",
"license": "MIT",
"dependencies": {
- "axios": "^1.6.0",
+ "axios": "^1.7.8",
"dayjs": "^1.11.9",
"https-proxy-agent": "^5.0.0",
- "jsonwebtoken": "^9.0.0",
+ "jsonwebtoken": "^9.0.2",
"qs": "^6.9.4",
"scmp": "^2.1.0",
- "url-parse": "^1.5.9",
"xmlbuilder": "^13.0.2"
},
"engines": {
@@ -10930,16 +11319,6 @@
"integrity": "sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA==",
"license": "MIT"
},
- "node_modules/url-parse": {
- "version": "1.5.10",
- "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz",
- "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==",
- "license": "MIT",
- "dependencies": {
- "querystringify": "^2.1.1",
- "requires-port": "^1.0.0"
- }
- },
"node_modules/util-deprecate": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
@@ -10956,16 +11335,16 @@
}
},
"node_modules/uuid": {
- "version": "10.0.0",
- "resolved": "https://registry.npmjs.org/uuid/-/uuid-10.0.0.tgz",
- "integrity": "sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ==",
+ "version": "11.1.0",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-11.1.0.tgz",
+ "integrity": "sha512-0/A9rDy9P7cJ+8w1c9WD9V//9Wj15Ce2MPz8Ri6032usz+NfePxx5AcN3bN+r6ZL6jEo066/yNYB3tn4pQEx+A==",
"funding": [
"https://github.com/sponsors/broofa",
"https://github.com/sponsors/ctavan"
],
"license": "MIT",
"bin": {
- "uuid": "dist/bin/uuid"
+ "uuid": "dist/esm/bin/uuid"
}
},
"node_modules/valid-data-url": {
@@ -11487,9 +11866,9 @@
}
},
"node_modules/xml-crypto": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/xml-crypto/-/xml-crypto-6.0.0.tgz",
- "integrity": "sha512-L3RgnkaDrHaYcCnoENv4Idzt1ZRj5U1z1BDH98QdDTQfssScx8adgxhd9qwyYo+E3fXbQZjEQH7aiXHLVgxGvw==",
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/xml-crypto/-/xml-crypto-6.0.1.tgz",
+ "integrity": "sha512-v05aU7NS03z4jlZ0iZGRFeZsuKO1UfEbbYiaeRMiATBFs6Jq9+wqKquEMTn4UTrYZ9iGD8yz3KT4L9o2iF682w==",
"license": "MIT",
"dependencies": {
"@xmldom/is-dom-node": "^1.0.1",
@@ -11606,8 +11985,8 @@
"version": "17.7.2",
"resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz",
"integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==",
- "devOptional": true,
"license": "MIT",
+ "optional": true,
"dependencies": {
"cliui": "^8.0.1",
"escalade": "^3.1.1",
@@ -11625,8 +12004,8 @@
"version": "21.1.1",
"resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz",
"integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==",
- "devOptional": true,
"license": "ISC",
+ "optional": true,
"engines": {
"node": ">=12"
}
@@ -11642,6 +12021,36 @@
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
+ },
+ "node_modules/zip-stream": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/zip-stream/-/zip-stream-6.0.1.tgz",
+ "integrity": "sha512-zK7YHHz4ZXpW89AHXUPbQVGKI7uvkd3hzusTdotCg1UxyaVtg0zFJSTfW/Dq5f7OBBVnq6cZIaC8Ti4hb6dtCA==",
+ "license": "MIT",
+ "dependencies": {
+ "archiver-utils": "^5.0.0",
+ "compress-commons": "^6.0.2",
+ "readable-stream": "^4.0.0"
+ },
+ "engines": {
+ "node": ">= 14"
+ }
+ },
+ "node_modules/zip-stream/node_modules/readable-stream": {
+ "version": "4.7.0",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.7.0.tgz",
+ "integrity": "sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==",
+ "license": "MIT",
+ "dependencies": {
+ "abort-controller": "^3.0.0",
+ "buffer": "^6.0.3",
+ "events": "^3.3.0",
+ "process": "^0.11.10",
+ "string_decoder": "^1.3.0"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ }
}
}
}
diff --git a/package.json b/package.json
index 6f0426a26..9f2bf57f2 100644
--- a/package.json
+++ b/package.json
@@ -9,56 +9,53 @@
"scripts": {
"setup": "rm -rf node_modules && npm i && cd client && rm -rf node_modules && npm i",
"setup:win": "rimraf node_modules && npm i && cd client && rimraf node_modules && npm i",
- "admin": "cd admin && npm start",
- "client": "cd client && npm start",
- "server": "nodemon server.js",
- "build": "cd client && npm run build",
- "dev": "concurrently --kill-others-on-fail \"npm run server\" \"npm run client\"",
- "deva": "concurrently --kill-others-on-fail \"npm run server\" \"npm run client\" \"npm run admin\"",
"start": "node server.js",
"makeitpretty": "prettier --write \"**/*.{css,js,json,jsx,scss}\""
},
"dependencies": {
- "@aws-sdk/client-cloudwatch-logs": "^3.758.0",
- "@aws-sdk/client-elasticache": "^3.758.0",
- "@aws-sdk/client-s3": "^3.758.0",
- "@aws-sdk/client-secrets-manager": "^3.758.0",
- "@aws-sdk/client-ses": "^3.758.0",
- "@aws-sdk/credential-provider-node": "^3.758.0",
+ "@aws-sdk/client-cloudwatch-logs": "^3.772.0",
+ "@aws-sdk/client-elasticache": "^3.772.0",
+ "@aws-sdk/client-s3": "^3.772.0",
+ "@aws-sdk/client-secrets-manager": "^3.772.0",
+ "@aws-sdk/client-ses": "^3.772.0",
+ "@aws-sdk/credential-provider-node": "^3.772.0",
+ "@aws-sdk/lib-storage": "^3.774.0",
+ "@aws-sdk/s3-request-presigner": "^3.774.0",
"@opensearch-project/opensearch": "^2.13.0",
"@socket.io/admin-ui": "^0.5.1",
"@socket.io/redis-adapter": "^8.3.0",
+ "archiver": "^7.0.1",
"aws4": "^1.13.2",
- "axios": "^1.8.1",
+ "axios": "^1.8.4",
"bee-queue": "^1.7.1",
"better-queue": "^3.8.12",
"bluebird": "^3.7.2",
"body-parser": "^1.20.3",
- "bullmq": "^5.41.7",
+ "bullmq": "^5.44.4",
"chart.js": "^4.4.8",
- "cloudinary": "^2.5.1",
+ "cloudinary": "^2.6.0",
"compression": "^1.8.0",
"cookie-parser": "^1.4.7",
"cors": "2.8.5",
"crisp-status-reporter": "^1.2.2",
"csrf": "^3.1.0",
- "dd-trace": "^5.40.0",
+ "dd-trace": "^5.43.0",
"dinero.js": "^1.9.1",
"dotenv": "^16.4.5",
"express": "^4.21.1",
- "firebase-admin": "^13.1.0",
+ "firebase-admin": "^13.2.0",
"graphql": "^16.10.0",
"graphql-request": "^6.1.0",
"inline-css": "^4.0.3",
"intuit-oauth": "^4.2.0",
- "ioredis": "^5.5.0",
- "json-2-csv": "^5.5.8",
+ "ioredis": "^5.6.0",
+ "json-2-csv": "^5.5.9",
"juice": "^11.0.1",
"lodash": "^4.17.21",
"moment": "^2.30.1",
- "moment-timezone": "^0.5.47",
+ "moment-timezone": "^0.5.48",
"multer": "^1.4.5-lts.1",
- "node-mailjet": "^6.0.6",
+ "node-mailjet": "^6.0.8",
"node-persist": "^4.0.4",
"nodemailer": "^6.10.0",
"phone": "^3.1.58",
@@ -66,22 +63,21 @@
"redis": "^4.7.0",
"rimraf": "^6.0.1",
"skia-canvas": "^2.0.2",
- "soap": "^1.1.9",
+ "soap": "^1.1.10",
"socket.io": "^4.8.1",
"socket.io-adapter": "^2.5.5",
"ssh2-sftp-client": "^11.0.0",
- "twilio": "^4.23.0",
- "uuid": "^10.0.0",
+ "twilio": "^5.5.1",
+ "uuid": "^11.1.0",
"winston": "^3.17.0",
"winston-cloudwatch": "^6.3.0",
"xml2js": "^0.6.2",
"xmlbuilder2": "^3.1.1"
},
"devDependencies": {
- "@eslint/js": "^9.21.0",
+ "@eslint/js": "^9.23.0",
"@trivago/prettier-plugin-sort-imports": "^5.2.2",
- "concurrently": "^8.2.2",
- "eslint": "^9.21.0",
+ "eslint": "^9.23.0",
"eslint-plugin-react": "^7.37.4",
"globals": "^15.15.0",
"p-limit": "^3.1.0",
diff --git a/server.js b/server.js
index 9a9e65ceb..52f5c6e9e 100644
--- a/server.js
+++ b/server.js
@@ -370,7 +370,7 @@ const loadQueues = async ({ pubClient, logger, redisHelpers, ioRedis }) => {
*/
const main = async () => {
const app = express();
- const port = process.env.PORT || 5000;
+ const port = process.env.PORT || 4000;
const server = http.createServer(app);
diff --git a/server/accounting/pbs/pbs-ap-allocations.js b/server/accounting/pbs/pbs-ap-allocations.js
index a969e82c8..9574b166d 100644
--- a/server/accounting/pbs/pbs-ap-allocations.js
+++ b/server/accounting/pbs/pbs-ap-allocations.js
@@ -12,7 +12,7 @@ const AxiosLib = require("axios").default;
const axios = AxiosLib.create();
const { PBS_ENDPOINTS, PBS_CREDENTIALS } = require("./pbs-constants");
const { CheckForErrors } = require("./pbs-job-export");
-const uuid = require("uuid").v4;
+
axios.interceptors.request.use((x) => {
const socket = x.socket;
@@ -21,6 +21,7 @@ axios.interceptors.request.use((x) => {
...x.headers[x.method],
...x.headers
};
+
const printable = `${new Date()} | Request: ${x.method.toUpperCase()} | ${
x.url
} | ${JSON.stringify(x.data)} | ${JSON.stringify(headers)}`;
diff --git a/server/data/arms.js b/server/data/arms.js
index 70ad3be5e..6dadc9364 100644
--- a/server/data/arms.js
+++ b/server/data/arms.js
@@ -18,7 +18,7 @@ const entegralEndpoint =
: "https://uat-ws.armsbusinesssolutions.net/RepairOrderFolderService/RepairOrderFolderService.asmx?WSDL";
const client = require("../graphql-client/graphql-client").client;
-const uuid = require("uuid").v4;
+const { v4 } = require("uuid");
const momentFormat = "yyyy-MM-DDTHH:mm:ss.SSS";
@@ -79,7 +79,7 @@ exports.default = async (req, res) => {
}
try {
- const transId = uuid(); // Can this actually be the job id?
+ const transId = v4(); // Can this actually be the job id?
let obj = {
RqUID: transId,
DocumentInfo: {
diff --git a/server/graphql-client/queries.js b/server/graphql-client/queries.js
index cc50b3115..b0c72aa7d 100644
--- a/server/graphql-client/queries.js
+++ b/server/graphql-client/queries.js
@@ -1485,6 +1485,8 @@ exports.GET_JOB_BY_PK = `query GET_JOB_BY_PK($id: uuid!) {
materials
auto_add_ats
rate_ats
+ flat_rate_ats
+ rate_ats_flat
joblines(where: { removed: { _eq: false } }){
id
line_no
@@ -2769,3 +2771,61 @@ exports.GET_BODYSHOP_BY_ID = `
}
}
`;
+
+exports.GET_DOCUMENTS_BY_JOB = `
+ query GET_DOCUMENTS_BY_JOB($jobId: uuid!) {
+ jobs_by_pk(id: $jobId) {
+ id
+ ro_number
+ }
+ documents_aggregate(where: { jobid: { _eq: $jobId } }) {
+ aggregate {
+ sum {
+ size
+ }
+ }
+ }
+ documents(order_by: { takenat: desc }, where: { jobid: { _eq: $jobId } }) {
+ id
+ name
+ key
+ type
+ size
+ takenat
+ extension
+ bill {
+ id
+ invoice_number
+ date
+ vendor {
+ id
+ name
+ }
+ }
+ }
+ }`;
+
+exports.QUERY_TEMPORARY_DOCS = ` query QUERY_TEMPORARY_DOCS {
+ documents(where: { jobid: { _is_null: true } }, order_by: { takenat: desc }) {
+ id
+ name
+ key
+ type
+ extension
+ size
+ takenat
+ }
+ }`;
+
+exports.GET_DOCUMENTS_BY_IDS = `
+ query GET_DOCUMENTS_BY_IDS($documentIds: [uuid!]!) {
+ documents(where: {id: {_in: $documentIds}}, order_by: {takenat: desc}) {
+ id
+ name
+ key
+ type
+ extension
+ size
+ takenat
+ }
+}`;
diff --git a/server/job/job-totals-USA.js b/server/job/job-totals-USA.js
index 4e889a658..dd850dc9b 100644
--- a/server/job/job-totals-USA.js
+++ b/server/job/job-totals-USA.js
@@ -1,7 +1,7 @@
const Dinero = require("dinero.js");
const queries = require("../graphql-client/queries");
-const adminClient = require("../graphql-client/graphql-client").client;
-const _ = require("lodash");
+// const adminClient = require("../graphql-client/graphql-client").client;
+// const _ = require("lodash");
const logger = require("../utils/logger");
const InstanceMgr = require("../utils/instanceMgr").default;
@@ -45,7 +45,9 @@ exports.totalsSsu = async function (req, res) {
}
});
- res.status(200).send();
+ if (result) {
+ res.status(200).send();
+ }
} catch (error) {
logger.log("job-totals-ssu-USA-error", "ERROR", req?.user?.email, id, {
jobid: id,
@@ -59,7 +61,7 @@ exports.totalsSsu = async function (req, res) {
//IMPORTANT*** These two functions MUST be mirrrored.
async function TotalsServerSide(req, res) {
const { job, client } = req.body;
- await AutoAddAtsIfRequired({ job: job, client: client });
+ await AtsAdjustmentsIfRequired({ job: job, client: client, user: req?.user });
try {
let ret = {
@@ -138,10 +140,11 @@ async function Totals(req, res) {
const client = req.userGraphQLClient;
logger.log("job-totals-ssu-USA", "DEBUG", req.user.email, job.id, {
- jobid: job.id
+ jobid: job.id,
+ id: id
});
- await AutoAddAtsIfRequired({ job, client });
+ await AtsAdjustmentsIfRequired({ job, client, user: req.user });
try {
let ret = {
@@ -153,7 +156,7 @@ async function Totals(req, res) {
res.status(200).json(ret);
} catch (error) {
- logger.log("job-totals-USA-error", "ERROR", req.user.email, job.id, {
+ logger.log("job-totals-ssu-USA-error", "ERROR", req.user.email, job.id, {
jobid: job.id,
error: error.message,
stack: error.stack
@@ -162,40 +165,45 @@ async function Totals(req, res) {
}
}
-async function AutoAddAtsIfRequired({ job, client }) {
- //Check if ATS should be automatically added.
- if (job.auto_add_ats) {
- //Get the total sum of hours that should be the ATS amount.
- //Check to see if an ATS line exists.
+async function AtsAdjustmentsIfRequired({ job, client, user }) {
+ if (job.auto_add_ats || job.flat_rate_ats) {
+ let atsAmount = 0;
let atsLineIndex = null;
- const atsHours = job.joblines.reduce((acc, val, index) => {
- if (val.line_desc && val.line_desc.toLowerCase() === "ats amount") {
- atsLineIndex = index;
- }
- if (
- val.mod_lbr_ty !== "LA1" &&
- val.mod_lbr_ty !== "LA2" &&
- val.mod_lbr_ty !== "LA3" &&
- val.mod_lbr_ty !== "LA4" &&
- val.mod_lbr_ty !== "LAU" &&
- val.mod_lbr_ty !== "LAG" &&
- val.mod_lbr_ty !== "LAS" &&
- val.mod_lbr_ty !== "LAA"
- ) {
- acc = acc + val.mod_lb_hrs;
- }
+ //Check if ATS should be automatically added.
+ if (job.auto_add_ats) {
+ const excludedLaborTypes = new Set(["LAA", "LAG", "LAS", "LAU", "LA1", "LA2", "LA3", "LA4"]);
- return acc;
- }, 0);
+ //Get the total sum of hours that should be the ATS amount.
+ //Check to see if an ATS line exists.
+ const atsHours = job.joblines.reduce((acc, val, index) => {
+ if (val.line_desc?.toLowerCase() === "ats amount") {
+ atsLineIndex = index;
+ }
- const atsAmount = atsHours * (job.rate_ats || 0);
- //If it does, update it in place, and make sure it is updated for local calculations.
+ if (!excludedLaborTypes.has(val.mod_lbr_ty)) {
+ acc = acc + val.mod_lb_hrs;
+ }
+
+ return acc;
+ }, 0);
+
+ atsAmount = atsHours * (job.rate_ats || 0);
+ }
+
+ //Check if a Flat Rate ATS should be added.
+ if (job.flat_rate_ats) {
+ atsLineIndex = ((i) => (i === -1 ? null : i))(
+ job.joblines.findIndex((line) => line.line_desc?.toLowerCase() === "ats amount")
+ );
+ atsAmount = job.rate_ats_flat || 0;
+ }
+
+ //If it does not, create one for local calculations and insert it.
if (atsLineIndex === null) {
const newAtsLine = {
jobid: job.id,
alt_partm: null,
- line_no: 35,
unq_seq: 0,
line_ind: "E",
line_desc: "ATS Amount",
@@ -220,19 +228,42 @@ async function AutoAddAtsIfRequired({ job, client }) {
prt_dsmk_m: 0.0
};
- const result = await client.request(queries.INSERT_NEW_JOB_LINE, {
- lineInput: [newAtsLine]
- });
+ try {
+ const result = await client.request(queries.INSERT_NEW_JOB_LINE, {
+ lineInput: [newAtsLine]
+ });
- job.joblines.push(newAtsLine);
+ if (result) {
+ job.joblines.push(newAtsLine);
+ }
+ } catch (error) {
+ logger.log("job-totals-ssu-ats-error", "ERROR", user?.email, job.id, {
+ jobid: job.id,
+ error: error.message,
+ stack: error.stack
+ });
+ }
}
- //If it does not, create one for local calculations and insert it.
+ //If it does, update it in place, and make sure it is updated for local calculations.
else {
- const result = await client.request(queries.UPDATE_JOB_LINE, {
- line: { act_price: atsAmount },
- lineId: job.joblines[atsLineIndex].id
- });
- job.joblines[atsLineIndex].act_price = atsAmount;
+ try {
+ const result = await client.request(queries.UPDATE_JOB_LINE, {
+ line: { act_price: atsAmount },
+ lineId: job.joblines[atsLineIndex].id
+ });
+ if (result) {
+ job.joblines[atsLineIndex].act_price = atsAmount;
+ }
+ } catch (error) {
+ logger.log("job-totals-ssu-ats-error", "ERROR", user?.email, job.id, {
+ jobid: job.id,
+ atsLineIndex: atsLineIndex,
+ atsAmount: atsAmount,
+ jobline: job.joblines[atsLineIndex],
+ error: error.message,
+ stack: error.stack
+ });
+ }
}
}
}
@@ -314,7 +345,7 @@ async function CalculateRatesTotals({ job, client }) {
let hasMashLine = false;
let hasMahwLine = false;
let hasCustomMahwLine;
- let mapaOpCodes = ParseCalopCode(job.materials["MAPA"]?.cal_opcode);
+ // let mapaOpCodes = ParseCalopCode(job.materials["MAPA"]?.cal_opcode);
let mashOpCodes = ParseCalopCode(job.materials["MASH"]?.cal_opcode);
jobLines.forEach((item) => {
@@ -564,7 +595,7 @@ function CalculatePartsTotals(jobLines, parts_tax_rates, job) {
}
};
- default:
+ default: {
if (!value.part_type && value.db_ref !== "900510" && value.db_ref !== "900511") return acc;
const discountAmount =
@@ -631,6 +662,7 @@ function CalculatePartsTotals(jobLines, parts_tax_rates, job) {
)
}
};
+ }
}
},
{
@@ -652,7 +684,7 @@ function CalculatePartsTotals(jobLines, parts_tax_rates, job) {
let adjustments = {};
//Track all adjustments that need to be made.
- const linesToAdjustForDiscount = [];
+ //const linesToAdjustForDiscount = [];
Object.keys(parts_tax_rates).forEach((key) => {
//Check if there's a discount or a mark up.
let disc = Dinero(),
@@ -1019,7 +1051,9 @@ function CalculateTaxesTotals(job, otherTotals) {
}
} catch (error) {
logger.log("job-totals-USA Key with issue", "error", null, job.id, {
- key
+ key: key,
+ error: error.message,
+ stack: error.stack
});
}
});
@@ -1157,6 +1191,7 @@ function CalculateTaxesTotals(job, otherTotals) {
exports.default = Totals;
+//eslint-disable-next-line no-unused-vars
function DiscountNotAlreadyCounted(jobline, joblines) {
return false;
}
@@ -1172,27 +1207,35 @@ function IsTrueOrYes(value) {
return value === true || value === "Y" || value === "y";
}
-async function UpdateJobLines(joblinesToUpdate) {
- if (joblinesToUpdate.length === 0) return;
- const updateQueries = joblinesToUpdate.map((line, index) =>
- generateUpdateQuery(_.pick(line, ["id", "prt_dsmk_m", "prt_dsmk_p"]), index)
- );
- const query = `
- mutation UPDATE_EST_LINES{
- ${updateQueries}
- }
- `;
+// Function not in use from RO to IO Merger 02/05/2024
+// async function UpdateJobLines(joblinesToUpdate) {
+// if (joblinesToUpdate.length === 0) return;
+// const updateQueries = joblinesToUpdate.map((line, index) =>
+// generateUpdateQuery(_.pick(line, ["id", "prt_dsmk_m", "prt_dsmk_p"]), index)
+// );
+// const query = `
+// mutation UPDATE_EST_LINES{
+// ${updateQueries}
+// }
+// `;
+// try {
+// const result = await adminClient.request(query);
+// void result;
+// } catch (error) {
+// logger.log("update-job-lines", "error", null, null, {
+// error: error.message,
+// stack: error.stack
+// });
+// }
+// }
- const result = await adminClient.request(query);
-}
-
-const generateUpdateQuery = (lineToUpdate, index) => {
- return `
- update_joblines${index}: update_joblines(where: { id: { _eq: "${
- lineToUpdate.id
- }" } }, _set: ${JSON.stringify(lineToUpdate).replace(/"(\w+)"\s*:/g, "$1:")}) {
- returning {
- id
- }
- }`;
-};
+// const generateUpdateQuery = (lineToUpdate, index) => {
+// return `
+// update_joblines${index}: update_joblines(where: { id: { _eq: "${
+// lineToUpdate.id
+// }" } }, _set: ${JSON.stringify(lineToUpdate).replace(/"(\w+)"\s*:/g, "$1:")}) {
+// returning {
+// id
+// }
+// }`;
+// };
diff --git a/server/job/job-totals.js b/server/job/job-totals.js
index 4cd45e13c..6182f9ced 100644
--- a/server/job/job-totals.js
+++ b/server/job/job-totals.js
@@ -1,7 +1,5 @@
const Dinero = require("dinero.js");
const queries = require("../graphql-client/queries");
-const adminClient = require("../graphql-client/graphql-client").client;
-const _ = require("lodash");
const logger = require("../utils/logger");
//****************************************************** */
@@ -44,11 +42,16 @@ exports.totalsSsu = async function (req, res) {
}
});
+ if (!result) {
+ throw new Error("Failed to update job totals");
+ }
+
res.status(200).send();
} catch (error) {
logger.log("job-totals-ssu-error", "ERROR", req.user.email, id, {
jobid: id,
- error
+ error: error.message,
+ stack: error.stack
});
res.status(503).send();
}
@@ -57,7 +60,7 @@ exports.totalsSsu = async function (req, res) {
//IMPORTANT*** These two functions MUST be mirrrored.
async function TotalsServerSide(req, res) {
const { job, client } = req.body;
- await AutoAddAtsIfRequired({ job: job, client: client });
+ await AtsAdjustmentsIfRequired({ job: job, client: client, user: req?.user });
try {
let ret = {
@@ -71,7 +74,8 @@ async function TotalsServerSide(req, res) {
} catch (error) {
logger.log("job-totals-ssu-error", "ERROR", req?.user?.email, job.id, {
jobid: job.id,
- error
+ error: error.message,
+ stack: error.stack
});
res.status(400).send(JSON.stringify(error));
}
@@ -83,13 +87,12 @@ async function Totals(req, res) {
const logger = req.logger;
const client = req.userGraphQLClient;
- logger.log("job-totals", "DEBUG", req.user.email, job.id, {
- jobid: job.id
+ logger.log("job-totals-ssu", "DEBUG", req.user.email, job.id, {
+ jobid: job.id,
+ id: id
});
- logger.log("job-totals-ssu", "DEBUG", req.user.email, id, null);
-
- await AutoAddAtsIfRequired({ job, client });
+ await AtsAdjustmentsIfRequired({ job, client, user: req.user });
try {
let ret = {
@@ -101,48 +104,54 @@ async function Totals(req, res) {
res.status(200).json(ret);
} catch (error) {
- logger.log("job-totals-error", "ERROR", req.user.email, job.id, {
+ logger.log("job-totals-ssu-error", "ERROR", req.user.email, job.id, {
jobid: job.id,
- error
+ error: error.message,
+ stack: error.stack
});
res.status(400).send(JSON.stringify(error));
}
}
-async function AutoAddAtsIfRequired({ job, client }) {
- //Check if ATS should be automatically added.
- if (job.auto_add_ats) {
- //Get the total sum of hours that should be the ATS amount.
- //Check to see if an ATS line exists.
+async function AtsAdjustmentsIfRequired({ job, client, user }) {
+ if (job.auto_add_ats || job.flat_rate_ats) {
+ let atsAmount = 0;
let atsLineIndex = null;
- const atsHours = job.joblines.reduce((acc, val, index) => {
- if (val.line_desc && val.line_desc.toLowerCase() === "ats amount") {
- atsLineIndex = index;
- }
- if (
- val.mod_lbr_ty !== "LA1" &&
- val.mod_lbr_ty !== "LA2" &&
- val.mod_lbr_ty !== "LA3" &&
- val.mod_lbr_ty !== "LA4" &&
- val.mod_lbr_ty !== "LAU" &&
- val.mod_lbr_ty !== "LAG" &&
- val.mod_lbr_ty !== "LAS" &&
- val.mod_lbr_ty !== "LAA"
- ) {
- acc = acc + val.mod_lb_hrs;
- }
+ //Check if ATS should be automatically added.
+ if (job.auto_add_ats) {
+ const excludedLaborTypes = new Set(["LAA", "LAG", "LAS", "LAU", "LA1", "LA2", "LA3", "LA4"]);
- return acc;
- }, 0);
+ //Get the total sum of hours that should be the ATS amount.
+ //Check to see if an ATS line exists.
+ const atsHours = job.joblines.reduce((acc, val, index) => {
+ if (val.line_desc?.toLowerCase() === "ats amount") {
+ atsLineIndex = index;
+ }
- const atsAmount = atsHours * (job.rate_ats || 0);
- //If it does, update it in place, and make sure it is updated for local calculations.
+ if (!excludedLaborTypes.has(val.mod_lbr_ty)) {
+ acc = acc + val.mod_lb_hrs;
+ }
+
+ return acc;
+ }, 0);
+
+ atsAmount = atsHours * (job.rate_ats || 0);
+ }
+
+ //Check if a Flat Rate ATS should be added.
+ if (job.flat_rate_ats) {
+ atsLineIndex = ((i) => (i === -1 ? null : i))(
+ job.joblines.findIndex((line) => line.line_desc?.toLowerCase() === "ats amount")
+ );
+ atsAmount = job.rate_ats_flat || 0;
+ }
+
+ //If it does not, create one for local calculations and insert it.
if (atsLineIndex === null) {
const newAtsLine = {
jobid: job.id,
alt_partm: null,
- line_no: 35,
unq_seq: 0,
line_ind: "E",
line_desc: "ATS Amount",
@@ -167,22 +176,43 @@ async function AutoAddAtsIfRequired({ job, client }) {
prt_dsmk_m: 0.0
};
- const result = await client.request(queries.INSERT_NEW_JOB_LINE, {
- lineInput: [newAtsLine]
- });
+ try {
+ const result = await client.request(queries.INSERT_NEW_JOB_LINE, {
+ lineInput: [newAtsLine]
+ });
- job.joblines.push(newAtsLine);
+ if (result) {
+ job.joblines.push(newAtsLine);
+ }
+ } catch (error) {
+ logger.log("job-totals-ssu-ats-error", "ERROR", user?.email, job.id, {
+ jobid: job.id,
+ error: error.message,
+ stack: error.stack
+ });
+ }
}
- //If it does not, create one for local calculations and insert it.
+ //If it does, update it in place, and make sure it is updated for local calculations.
else {
- const result = await client.request(queries.UPDATE_JOB_LINE, {
- line: { act_price: atsAmount },
- lineId: job.joblines[atsLineIndex].id
- });
- job.joblines[atsLineIndex].act_price = atsAmount;
+ try {
+ const result = await client.request(queries.UPDATE_JOB_LINE, {
+ line: { act_price: atsAmount },
+ lineId: job.joblines[atsLineIndex].id
+ });
+ if (result) {
+ job.joblines[atsLineIndex].act_price = atsAmount;
+ }
+ } catch (error) {
+ logger.log("job-totals-ssu-ats-error", "ERROR", user?.email, job.id, {
+ jobid: job.id,
+ atsLineIndex: atsLineIndex,
+ atsAmount: atsAmount,
+ jobline: job.joblines[atsLineIndex],
+ error: error.message,
+ stack: error.stack
+ });
+ }
}
-
- //console.log(job.jobLines);
}
}
diff --git a/server/media/imgproxy-media.js b/server/media/imgproxy-media.js
new file mode 100644
index 000000000..fdb313984
--- /dev/null
+++ b/server/media/imgproxy-media.js
@@ -0,0 +1,348 @@
+const path = require("path");
+require("dotenv").config({
+ path: path.resolve(process.cwd(), `.env.${process.env.NODE_ENV || "development"}`)
+});
+const logger = require("../utils/logger");
+const {
+ S3Client,
+ PutObjectCommand,
+ GetObjectCommand,
+ CopyObjectCommand,
+ DeleteObjectCommand
+} = require("@aws-sdk/client-s3");
+const { Upload } = require("@aws-sdk/lib-storage");
+
+const { getSignedUrl } = require("@aws-sdk/s3-request-presigner");
+const crypto = require("crypto");
+const { InstanceRegion } = require("../utils/instanceMgr");
+const {
+ GET_DOCUMENTS_BY_JOB,
+ QUERY_TEMPORARY_DOCS,
+ GET_DOCUMENTS_BY_IDS,
+ DELETE_MEDIA_DOCUMENTS
+} = require("../graphql-client/queries");
+const archiver = require("archiver");
+const stream = require("node:stream");
+
+const imgproxyBaseUrl = process.env.IMGPROXY_BASE_URL; // `https://u4gzpp5wm437dnm75qa42tvza40fguqr.lambda-url.ca-central-1.on.aws` //Direct Lambda function access to bypass CDN.
+const imgproxyKey = process.env.IMGPROXY_KEY;
+const imgproxySalt = process.env.IMGPROXY_SALT;
+const imgproxyDestinationBucket = process.env.IMGPROXY_DESTINATION_BUCKET;
+
+//Generate a signed upload link for the S3 bucket.
+//All uploads must be going to the same shop and jobid.
+exports.generateSignedUploadUrls = async (req, res) => {
+ const { filenames, bodyshopid, jobid } = req.body;
+ try {
+ logger.log("imgproxy-upload-start", "DEBUG", req.user?.email, jobid, { filenames, bodyshopid, jobid });
+
+ const signedUrls = [];
+ for (const filename of filenames) {
+ const key = filename;
+ const client = new S3Client({ region: InstanceRegion() });
+ const command = new PutObjectCommand({
+ Bucket: imgproxyDestinationBucket,
+ Key: key,
+ StorageClass: "INTELLIGENT_TIERING"
+ });
+ const presignedUrl = await getSignedUrl(client, command, { expiresIn: 360 });
+ signedUrls.push({ filename, presignedUrl, key });
+ }
+
+ logger.log("imgproxy-upload-success", "DEBUG", req.user?.email, jobid, { signedUrls });
+ res.json({
+ success: true,
+ signedUrls
+ });
+ } catch (error) {
+ res.status(400).json({
+ success: false,
+ message: error.message,
+ stack: error.stack
+ });
+ logger.log("imgproxy-upload-error", "ERROR", req.user?.email, jobid, {
+ message: error.message,
+ stack: error.stack
+ });
+ }
+};
+
+exports.getThumbnailUrls = async (req, res) => {
+ const { jobid, billid } = req.body;
+
+ try {
+ logger.log("imgproxy-thumbnails", "DEBUG", req.user?.email, jobid, { billid, jobid });
+
+ //Delayed as the key structure may change slightly from what it is currently and will require evaluating mobile components.
+ const client = req.userGraphQLClient;
+ //If there's no jobid and no billid, we're in temporary documents.
+ const data = await (jobid
+ ? client.request(GET_DOCUMENTS_BY_JOB, { jobId: jobid })
+ : client.request(QUERY_TEMPORARY_DOCS));
+
+ const thumbResizeParams = `rs:fill:250:250:1/g:ce`;
+ const s3client = new S3Client({ region: InstanceRegion() });
+ const proxiedUrls = [];
+
+ for (const document of data.documents) {
+ //Format to follow:
+ /////< base 64 URL encoded to image path>
+
+ //When working with documents from Cloudinary, the URL does not include the extension.
+ let key;
+ if (/\.[^/.]+$/.test(document.key)) {
+ key = document.key;
+ } else {
+ key = `${document.key}.${document.extension.toLowerCase()}`;
+ }
+ // Build the S3 path to the object.
+ const fullS3Path = `s3://${imgproxyDestinationBucket}/${key}`;
+ const base64UrlEncodedKeyString = base64UrlEncode(fullS3Path);
+ //Thumbnail Generation Block
+ const thumbProxyPath = `${thumbResizeParams}/${base64UrlEncodedKeyString}`;
+ const thumbHmacSalt = createHmacSha256(`${imgproxySalt}/${thumbProxyPath}`);
+
+ //Full Size URL block
+
+ const fullSizeProxyPath = `${base64UrlEncodedKeyString}`;
+ const fullSizeHmacSalt = createHmacSha256(`${imgproxySalt}/${fullSizeProxyPath}`);
+
+ const s3Props = {};
+ if (!document.type.startsWith("image")) {
+ //If not a picture, we need to get a signed download link to the file using S3 (or cloudfront preferably)
+ const command = new GetObjectCommand({
+ Bucket: imgproxyDestinationBucket,
+ Key: key
+ });
+ const presignedGetUrl = await getSignedUrl(s3client, command, { expiresIn: 360 });
+ s3Props.presignedGetUrl = presignedGetUrl;
+
+ const originalProxyPath = `raw:1/${base64UrlEncodedKeyString}`;
+ const originalHmacSalt = createHmacSha256(`${imgproxySalt}/${originalProxyPath}`);
+ s3Props.originalUrlViaProxyPath = `${imgproxyBaseUrl}/${originalHmacSalt}/${originalProxyPath}`;
+ }
+
+ proxiedUrls.push({
+ originalUrl: `${imgproxyBaseUrl}/${fullSizeHmacSalt}/${fullSizeProxyPath}`,
+ thumbnailUrl: `${imgproxyBaseUrl}/${thumbHmacSalt}/${thumbProxyPath}`,
+ fullS3Path,
+ base64UrlEncodedKeyString,
+ thumbProxyPath,
+ ...s3Props,
+ ...document
+ });
+ }
+
+ res.json(proxiedUrls);
+ //Iterate over them, build the link based on the media type, and return the array.
+ } catch (error) {
+ logger.log("imgproxy-thumbnails-error", "ERROR", req.user?.email, jobid, {
+ jobid,
+ billid,
+ message: error.message,
+ stack: error.stack
+ });
+ res.status(400).json({ message: error.message, stack: error.stack });
+ }
+};
+
+exports.getBillFiles = async (req, res) => {
+ //Givena bill ID, get the documents associated to it.
+};
+
+exports.downloadFiles = async (req, res) => {
+ //Given a series of document IDs or keys, generate a file (or a link) to download all images in bulk
+ const { jobid, billid, documentids } = req.body;
+ try {
+ logger.log("imgproxy-download", "DEBUG", req.user?.email, jobid, { billid, jobid, documentids });
+
+ //Delayed as the key structure may change slightly from what it is currently and will require evaluating mobile components.
+ const client = req.userGraphQLClient;
+ //Query for the keys of the document IDs
+ const data = await client.request(GET_DOCUMENTS_BY_IDS, { documentIds: documentids });
+ //Using the Keys, get all of the S3 links, zip them, and send back to the client.
+ const s3client = new S3Client({ region: InstanceRegion() });
+ const archiveStream = archiver("zip");
+ archiveStream.on("error", (error) => {
+ console.error("Archival encountered an error:", error);
+ throw new Error(error);
+ });
+ const passthrough = new stream.PassThrough();
+
+ archiveStream.pipe(passthrough);
+ for (const key of data.documents.map((d) => d.key)) {
+ const response = await s3client.send(new GetObjectCommand({ Bucket: imgproxyDestinationBucket, Key: key }));
+ // :: `response.Body` is a Buffer
+ console.log(path.basename(key));
+ archiveStream.append(response.Body, { name: path.basename(key) });
+ }
+
+ archiveStream.finalize();
+
+ const archiveKey = `archives/${jobid}/archive-${new Date().toISOString()}.zip`;
+
+ const parallelUploads3 = new Upload({
+ client: s3client,
+ queueSize: 4, // optional concurrency configuration
+ leavePartsOnError: false, // optional manually handle dropped parts
+ params: { Bucket: imgproxyDestinationBucket, Key: archiveKey, Body: passthrough }
+ });
+
+ parallelUploads3.on("httpUploadProgress", (progress) => {
+ console.log(progress);
+ });
+
+ const uploadResult = await parallelUploads3.done();
+ //Generate the presigned URL to download it.
+ const presignedUrl = await getSignedUrl(
+ s3client,
+ new GetObjectCommand({ Bucket: imgproxyDestinationBucket, Key: archiveKey }),
+ { expiresIn: 360 }
+ );
+
+ res.json({ success: true, url: presignedUrl });
+ //Iterate over them, build the link based on the media type, and return the array.
+ } catch (error) {
+ logger.log("imgproxy-thumbnails-error", "ERROR", req.user?.email, jobid, {
+ jobid,
+ billid,
+ message: error.message,
+ stack: error.stack
+ });
+ res.status(400).json({ message: error.message, stack: error.stack });
+ }
+};
+
+exports.deleteFiles = async (req, res) => {
+ //Mark a file for deletion in s3. Lifecycle deletion will actually delete the copy in the future.
+ //Mark as deleted from the documents section of the database.
+ const { ids } = req.body;
+ try {
+ logger.log("imgproxy-delete-files", "DEBUG", req.user.email, null, { ids });
+ const client = req.userGraphQLClient;
+
+ //Do this to make sure that they are only deleting things that they have access to
+ const data = await client.request(GET_DOCUMENTS_BY_IDS, { documentIds: ids });
+
+ const s3client = new S3Client({ region: InstanceRegion() });
+
+ const deleteTransactions = [];
+ data.documents.forEach((document) => {
+ deleteTransactions.push(
+ (async () => {
+ try {
+ // Delete the original object
+ const deleteResult = await s3client.send(
+ new DeleteObjectCommand({
+ Bucket: imgproxyDestinationBucket,
+ Key: document.key
+ })
+ );
+
+ return document;
+ } catch (error) {
+ return { document, error: error, bucket: imgproxyDestinationBucket };
+ }
+ })()
+ );
+ });
+
+ const result = await Promise.all(deleteTransactions);
+ const errors = result.filter((d) => d.error);
+
+ //Delete only the succesful deletes.
+ const deleteMutationResult = await client.request(DELETE_MEDIA_DOCUMENTS, {
+ ids: result.filter((t) => !t.error).map((d) => d.id)
+ });
+
+ res.json({ errors, deleteMutationResult });
+ } catch (error) {
+ logger.log("imgproxy-delete-files-error", "ERROR", req.user.email, null, {
+ ids,
+ message: error.message,
+ stack: error.stack
+ });
+ res.status(400).json({ message: error.message, stack: error.stack });
+ }
+};
+
+exports.moveFiles = async (req, res) => {
+ const { documents, tojobid } = req.body;
+ try {
+ logger.log("imgproxy-move-files", "DEBUG", req.user.email, null, { documents, tojobid });
+ const s3client = new S3Client({ region: InstanceRegion() });
+
+ const moveTransactions = [];
+ documents.forEach((document) => {
+ moveTransactions.push(
+ (async () => {
+ try {
+ // Copy the object to the new key
+ const copyresult = await s3client.send(
+ new CopyObjectCommand({
+ Bucket: imgproxyDestinationBucket,
+ CopySource: `${imgproxyDestinationBucket}/${document.from}`,
+ Key: document.to,
+ StorageClass: "INTELLIGENT_TIERING"
+ })
+ );
+
+ // Delete the original object
+ const deleteResult = await s3client.send(
+ new DeleteObjectCommand({
+ Bucket: imgproxyDestinationBucket,
+ Key: document.from
+ })
+ );
+
+ return document;
+ } catch (error) {
+ return { id: document.id, from: document.from, error: error, bucket: imgproxyDestinationBucket };
+ }
+ })()
+ );
+ });
+
+ const result = await Promise.all(moveTransactions);
+ const errors = result.filter((d) => d.error);
+
+ let mutations = "";
+ result
+ .filter((d) => !d.error)
+ .forEach((d, idx) => {
+ //Create mutation text
+ mutations =
+ mutations +
+ `
+ update_doc${idx}:update_documents_by_pk(pk_columns: { id: "${d.id}" }, _set: {key: "${d.to}", jobid: "${tojobid}"}){
+ id
+ }
+ `;
+ });
+
+ const client = req.userGraphQLClient;
+ if (mutations !== "") {
+ const mutationResult = await client.request(`mutation {
+ ${mutations}
+ }`);
+ res.json({ errors, mutationResult });
+ } else {
+ res.json({ errors: "No images were succesfully moved on remote server. " });
+ }
+ } catch (error) {
+ logger.log("imgproxy-move-files-error", "ERROR", req.user.email, null, {
+ documents,
+ tojobid,
+ message: error.message,
+ stack: error.stack
+ });
+ res.status(400).json({ message: error.message, stack: error.stack });
+ }
+};
+
+function base64UrlEncode(str) {
+ return Buffer.from(str).toString("base64").replace(/\+/g, "-").replace(/\//g, "_").replace(/=+$/, "");
+}
+function createHmacSha256(data) {
+ return crypto.createHmac("sha256", imgproxyKey).update(data).digest("base64url");
+}
diff --git a/server/media/media.js b/server/media/media.js
index 6706d3392..06b1c9bb8 100644
--- a/server/media/media.js
+++ b/server/media/media.js
@@ -11,12 +11,14 @@ require("dotenv").config({
var cloudinary = require("cloudinary").v2;
cloudinary.config(process.env.CLOUDINARY_URL);
-exports.createSignedUploadURL = (req, res) => {
+const createSignedUploadURL = (req, res) => {
logger.log("media-signed-upload", "DEBUG", req.user.email, null, null);
res.send(cloudinary.utils.api_sign_request(req.body, process.env.CLOUDINARY_API_SECRET));
};
-exports.downloadFiles = (req, res) => {
+exports.createSignedUploadURL = createSignedUploadURL;
+
+const downloadFiles = (req, res) => {
const { ids } = req.body;
logger.log("media-bulk-download", "DEBUG", req.user.email, ids, null);
@@ -26,8 +28,9 @@ exports.downloadFiles = (req, res) => {
});
res.send(url);
};
+exports.downloadFiles = downloadFiles;
-exports.deleteFiles = async (req, res) => {
+const deleteFiles = async (req, res) => {
const { ids } = req.body;
const types = _.groupBy(ids, (x) => DetermineFileType(x.type));
@@ -88,7 +91,9 @@ exports.deleteFiles = async (req, res) => {
}
};
-exports.renameKeys = async (req, res) => {
+exports.deleteFiles = deleteFiles;
+
+const renameKeys = async (req, res) => {
const { documents, tojobid } = req.body;
logger.log("media-bulk-rename", "DEBUG", req.user.email, null, documents);
@@ -146,6 +151,7 @@ exports.renameKeys = async (req, res) => {
res.json({ errors: "No images were succesfully moved on remote server. " });
}
};
+exports.renameKeys = renameKeys;
//Also needs to be updated in upload utility and mobile app.
function DetermineFileType(filetype) {
diff --git a/server/opensearch/os-handler.js b/server/opensearch/os-handler.js
index 9fd500a46..48310c4f2 100644
--- a/server/opensearch/os-handler.js
+++ b/server/opensearch/os-handler.js
@@ -160,6 +160,11 @@ async function OpenSearchUpdateHandler(req, res) {
res.status(200).json(response.body);
}
} catch (error) {
+ // We don't want this spam message existing in development/test,
+ if (process.env?.NODE_ENV !== "production" && error?.message === "Invalid URL") {
+ return res.status(400).json(JSON.stringify(error));
+ }
+
logger.log("os-handler-error", "ERROR", null, null, {
id: req.body.event.data.new.id,
index: req.body.table.name,
@@ -167,6 +172,7 @@ async function OpenSearchUpdateHandler(req, res) {
stack: error.stack
// body: document
});
+
res.status(400).json(JSON.stringify(error));
}
}
diff --git a/server/routes/mediaRoutes.js b/server/routes/mediaRoutes.js
index 699579bb9..59ee836ec 100644
--- a/server/routes/mediaRoutes.js
+++ b/server/routes/mediaRoutes.js
@@ -1,13 +1,28 @@
const express = require("express");
const router = express.Router();
const { createSignedUploadURL, downloadFiles, renameKeys, deleteFiles } = require("../media/media");
+const {
+ generateSignedUploadUrls: createSignedUploadURLImgproxy,
+ getThumbnailUrls: getThumbnailUrlsImgproxy,
+ downloadFiles: downloadFilesImgproxy,
+ moveFiles: moveFilesImgproxy,
+ deleteFiles: deleteFilesImgproxy
+} = require("../media/imgproxy-media");
const validateFirebaseIdTokenMiddleware = require("../middleware/validateFirebaseIdTokenMiddleware");
+const withUserGraphQLClientMiddleware = require("../middleware/withUserGraphQLClientMiddleware");
router.use(validateFirebaseIdTokenMiddleware);
+router.use(withUserGraphQLClientMiddleware);
router.post("/sign", createSignedUploadURL);
router.post("/download", downloadFiles);
router.post("/rename", renameKeys);
router.post("/delete", deleteFiles);
+router.post("/imgproxy/sign", createSignedUploadURLImgproxy);
+router.post("/imgproxy/thumbnails", getThumbnailUrlsImgproxy);
+router.post("/imgproxy/download", downloadFilesImgproxy);
+router.post("/imgproxy/rename", moveFilesImgproxy);
+router.post("/imgproxy/delete", deleteFilesImgproxy);
+
module.exports = router;
diff --git a/server/routes/miscellaneousRoutes.js b/server/routes/miscellaneousRoutes.js
index a3f3ca281..aeb59af93 100644
--- a/server/routes/miscellaneousRoutes.js
+++ b/server/routes/miscellaneousRoutes.js
@@ -14,7 +14,7 @@ const { taskAssignedEmail, tasksRemindEmail } = require("../email/tasksEmails");
const { canvastest } = require("../render/canvas-handler");
const { alertCheck } = require("../alerts/alertcheck");
const updateBodyshopCache = require("../web-sockets/updateBodyshopCache");
-const uuid = require("uuid").v4;
+const { v4 } = require("uuid");
//Test route to ensure Express is responding.
router.get("/test", eventAuthorizationMiddleware, async function (req, res) {
@@ -83,7 +83,7 @@ router.get("/wstest", eventAuthorizationMiddleware, (req, res) => {
// image_path: [],
newMessage: {
conversation: {
- id: uuid(),
+ id: v4(),
archived: false,
bodyshop: {
id: "bfec8c8c-b7f1-49e0-be4c-524455f4e582",
diff --git a/server/routes/smsRoutes.js b/server/routes/smsRoutes.js
index bb23d24e8..1b169747d 100644
--- a/server/routes/smsRoutes.js
+++ b/server/routes/smsRoutes.js
@@ -7,6 +7,7 @@ const { status, markConversationRead } = require("../sms/status");
const validateFirebaseIdTokenMiddleware = require("../middleware/validateFirebaseIdTokenMiddleware");
// Twilio Webhook Middleware for production
+// TODO: Look into this because it technically is never validating anything
const twilioWebhookMiddleware = twilio.webhook({ validate: process.env.NODE_ENV === "PRODUCTION" });
router.post("/receive", twilioWebhookMiddleware, receive);