From 17a3fb12e18aef02217daaf397565b2b6f7b357a Mon Sep 17 00:00:00 2001 From: Siddharth Tiwari Date: Sat, 3 Feb 2024 22:07:15 +0530 Subject: [PATCH 01/12] feat(blink-map): initialising blink map rebase rebase --- .github/labeler.yml | 5 + .github/workflows/bats.yml | 2 +- .github/workflows/buck2-test.yaml | 4 +- .github/workflows/integration-test.yml | 2 +- BUCK | 1 + apps/blink-map/.eslintrc.json | 3 + apps/blink-map/.gitignore | 36 + apps/blink-map/BUCK | 84 + apps/blink-map/Dockerfile | 32 + apps/blink-map/README.md | 36 + apps/blink-map/app/favicon.ico | Bin 0 -> 36843 bytes apps/blink-map/app/globals.css | 3 + apps/blink-map/app/layout.tsx | 22 + apps/blink-map/app/page.tsx | 19 + apps/blink-map/codegen.yml | 61 + apps/blink-map/components/map/index.tsx | 194 ++ apps/blink-map/components/map/map-theme.ts | 80 + apps/blink-map/env.ts | 15 + apps/blink-map/instrumentation.node.ts | 35 + apps/blink-map/instrumentation.ts | 7 + apps/blink-map/next.config.js | 10 + apps/blink-map/package.json | 53 + apps/blink-map/postcss.config.js | 6 + apps/blink-map/prettier.config.js | 15 + apps/blink-map/prettierrc.js | 3 + apps/blink-map/public/logo.svg | 162 ++ .../services/galoy/graphql/client.ts | 23 + .../services/galoy/graphql/generated.ts | 2157 +++++++++++++++++ .../graphql/queries/business-map-marker.ts | 37 + apps/blink-map/tailwind.config.ts | 20 + apps/blink-map/tsconfig.json | 27 + apps/map/next-env.d.ts | 5 + ci/apps/app-template.lib.yml | 4 + ci/apps/pipeline.yml | 2 +- dev/Tiltfile | 37 + flake.nix | 1 + pnpm-lock.yaml | 583 ++++- pnpm-workspace.yaml | 1 + 38 files changed, 3746 insertions(+), 41 deletions(-) create mode 100644 apps/blink-map/.eslintrc.json create mode 100644 apps/blink-map/.gitignore create mode 100644 apps/blink-map/BUCK create mode 100644 apps/blink-map/Dockerfile create mode 100644 apps/blink-map/README.md create mode 100644 apps/blink-map/app/favicon.ico create mode 100644 apps/blink-map/app/globals.css create mode 100644 apps/blink-map/app/layout.tsx create mode 100644 apps/blink-map/app/page.tsx create mode 100644 apps/blink-map/codegen.yml create mode 100644 apps/blink-map/components/map/index.tsx create mode 100644 apps/blink-map/components/map/map-theme.ts create mode 100644 apps/blink-map/env.ts create mode 100644 apps/blink-map/instrumentation.node.ts create mode 100644 apps/blink-map/instrumentation.ts create mode 100644 apps/blink-map/next.config.js create mode 100644 apps/blink-map/package.json create mode 100644 apps/blink-map/postcss.config.js create mode 100644 apps/blink-map/prettier.config.js create mode 100644 apps/blink-map/prettierrc.js create mode 100644 apps/blink-map/public/logo.svg create mode 100644 apps/blink-map/services/galoy/graphql/client.ts create mode 100644 apps/blink-map/services/galoy/graphql/generated.ts create mode 100644 apps/blink-map/services/galoy/graphql/queries/business-map-marker.ts create mode 100644 apps/blink-map/tailwind.config.ts create mode 100644 apps/blink-map/tsconfig.json create mode 100644 apps/map/next-env.d.ts diff --git a/.github/labeler.yml b/.github/labeler.yml index 71e9482c99..797784738a 100644 --- a/.github/labeler.yml +++ b/.github/labeler.yml @@ -22,6 +22,11 @@ admin-panel: - flake.lock - pnpm-lock.yaml +blink-map: + - apps/blink-map/* + - flake.lock + - pnpm-lock.yaml + core: - core/api/* - core/api-cron/* diff --git a/.github/workflows/bats.yml b/.github/workflows/bats.yml index f050386d9f..55d40b67e8 100644 --- a/.github/workflows/bats.yml +++ b/.github/workflows/bats.yml @@ -23,7 +23,7 @@ jobs: - name: Buck2 build run: | nix develop -c buck2 build //core/api //core/api-ws-server \ - //core/api-keys //apps/dashboard //apps/consent //apps/pay //apps/admin-panel \ + //core/api-keys //apps/dashboard //apps/consent //apps/pay //apps/admin-panel //apps/blink-map \ //core/notifications - name: Run bats tests run: | diff --git a/.github/workflows/buck2-test.yaml b/.github/workflows/buck2-test.yaml index 445260ddad..77cf738a67 100644 --- a/.github/workflows/buck2-test.yaml +++ b/.github/workflows/buck2-test.yaml @@ -23,7 +23,7 @@ jobs: ${{ toJSON(github.event.pull_request.labels.*.name) }} EOF - DEFAULT_LABELS=("dashboard" "consent" "pay" "core" "api-keys" "notifications" "admin-panel") + DEFAULT_LABELS=("dashboard" "consent" "pay" "core" "api-keys" "notifications" "admin-panel" "blink-map") LABELS=($(jq -r '.[]' < labels.json)) if [ ${#LABELS[@]} -eq 0 ]; then LABELS=("${DEFAULT_LABELS[@]}") @@ -33,7 +33,7 @@ jobs: for LABEL in "${LABELS[@]}"; do case "$LABEL" in - dashboard|consent|pay|admin-panel) + dashboard|consent|pay|admin-panel|blink-map) ARGS+=" //apps/$LABEL:test" ;; core) diff --git a/.github/workflows/integration-test.yml b/.github/workflows/integration-test.yml index 0cf1b06d86..8d225f760d 100644 --- a/.github/workflows/integration-test.yml +++ b/.github/workflows/integration-test.yml @@ -27,7 +27,7 @@ jobs: ${{ toJSON(github.event.pull_request.labels.*.name) }} EOF - DEFAULT_LABELS=("dashboard" "consent" "pay" "core" "admin-panel") + DEFAULT_LABELS=("dashboard" "consent" "pay" "core" "admin-panel" "blink-map") LABELS=($(jq -r '.[]' < labels.json)) if [ ${#LABELS[@]} -eq 0 ]; then LABELS=("${DEFAULT_LABELS[@]}") diff --git a/BUCK b/BUCK index 79553ed659..e07e9a4b99 100644 --- a/BUCK +++ b/BUCK @@ -8,6 +8,7 @@ pnpm_workspace( "//apps/dashboard:package.json", "//apps/pay:package.json", "//apps/admin-panel:package.json", + "//apps/blink-map:package.json", "//lib/eslint-config:package.json", "//lib/galoy-components:package.json" ], diff --git a/apps/blink-map/.eslintrc.json b/apps/blink-map/.eslintrc.json new file mode 100644 index 0000000000..bffb357a71 --- /dev/null +++ b/apps/blink-map/.eslintrc.json @@ -0,0 +1,3 @@ +{ + "extends": "next/core-web-vitals" +} diff --git a/apps/blink-map/.gitignore b/apps/blink-map/.gitignore new file mode 100644 index 0000000000..fd3dbb571a --- /dev/null +++ b/apps/blink-map/.gitignore @@ -0,0 +1,36 @@ +# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. + +# dependencies +/node_modules +/.pnp +.pnp.js +.yarn/install-state.gz + +# testing +/coverage + +# next.js +/.next/ +/out/ + +# production +/build + +# misc +.DS_Store +*.pem + +# debug +npm-debug.log* +yarn-debug.log* +yarn-error.log* + +# local env files +.env*.local + +# vercel +.vercel + +# typescript +*.tsbuildinfo +next-env.d.ts diff --git a/apps/blink-map/BUCK b/apps/blink-map/BUCK new file mode 100644 index 0000000000..377b6a0714 --- /dev/null +++ b/apps/blink-map/BUCK @@ -0,0 +1,84 @@ +load( + "@toolchains//workspace-pnpm:macros.bzl", + "dev_pnpm_task_binary", + "dev_pnpm_task_test", + "build_node_modules", + "next_build", + "next_build_bin", + "eslint", + "audit", +) + +dev_pnpm_task_binary( + name = "dev", + command = "dev", +) + +dev_pnpm_task_binary( + name = "lint-fix", + command = "lint:fix", +) + +dev_pnpm_task_test( + name = "test-integration", + command = "test", +) + +export_file( + name = "package.json", + visibility = ["PUBLIC"], +) + +build_node_modules( + name = "node_modules", +) + +filegroup( + name = "src", + srcs = glob([ + "app/**", + "theme/**", + "services/**", + "components/**", + "tailwind.config.ts", + "postcss.config.js", + "next.config.js", + "tsconfig.json", + "*.ts", + "instrumentation.node.ts" + ]), +) + +next_build( + name = "build", + srcs = [":src"], +) + +next_build_bin( + name = "blink-map", +) + +dev_deps_srcs = { + "lib/eslint-config": "//lib/eslint-config:src", +} + +audit( + name = "audit", + level = "critical", +) + +eslint( + name = "lint", + srcs = [":src"] + glob([".eslint*"]), + extensions = [".ts", ".tsx"], + allow_warnings = True, + dev_deps_srcs = dev_deps_srcs, +) + +test_suite( + name = "test", + tests = [ + ":audit", + ":lint", + ], +) diff --git a/apps/blink-map/Dockerfile b/apps/blink-map/Dockerfile new file mode 100644 index 0000000000..aa01ee6742 --- /dev/null +++ b/apps/blink-map/Dockerfile @@ -0,0 +1,32 @@ +FROM nixos/nix:latest AS builder +ARG APP=blink-map + +COPY . /workdir +WORKDIR /workdir + +RUN set -eux; \ + nix \ + --extra-experimental-features "nix-command flakes impure-derivations ca-derivations" \ + --option filter-syscalls false \ + build \ + ".#$APP"; + +RUN mkdir -p /tmp/nix-store-closure /tmp/local-bin +RUN cp -R $(nix-store --query --requisites result/) /tmp/nix-store-closure +RUN ln -snf $(nix-store --query result/)/bin/* /tmp/local-bin/ + +FROM gcr.io/distroless/static-debian11 AS final +ARG APP=blink-map + +WORKDIR /app/$APP +COPY --from=builder /tmp/nix-store-closure /nix/store +COPY --from=builder /tmp/local-bin/* /usr/local/bin/ + +USER 1000 + +ARG COMMITHASH +ENV COMMITHASH ${COMMITHASH} + +CMD [ \ + "/usr/local/bin/run" \ +] diff --git a/apps/blink-map/README.md b/apps/blink-map/README.md new file mode 100644 index 0000000000..c4033664f8 --- /dev/null +++ b/apps/blink-map/README.md @@ -0,0 +1,36 @@ +This is a [Next.js](https://nextjs.org/) project bootstrapped with [`create-next-app`](https://github.com/vercel/next.js/tree/canary/packages/create-next-app). + +## Getting Started + +First, run the development server: + +```bash +npm run dev +# or +yarn dev +# or +pnpm dev +# or +bun dev +``` + +Open [http://localhost:3000](http://localhost:3000) with your browser to see the result. + +You can start editing the page by modifying `app/page.tsx`. The page auto-updates as you edit the file. + +This project uses [`next/font`](https://nextjs.org/docs/basic-features/font-optimization) to automatically optimize and load Inter, a custom Google Font. + +## Learn More + +To learn more about Next.js, take a look at the following resources: + +- [Next.js Documentation](https://nextjs.org/docs) - learn about Next.js features and API. +- [Learn Next.js](https://nextjs.org/learn) - an interactive Next.js tutorial. + +You can check out [the Next.js GitHub repository](https://github.com/vercel/next.js/) - your feedback and contributions are welcome! + +## Deploy on Vercel + +The easiest way to deploy your Next.js app is to use the [Vercel Platform](https://vercel.com/new?utm_medium=default-template&filter=next.js&utm_source=create-next-app&utm_campaign=create-next-app-readme) from the creators of Next.js. + +Check out our [Next.js deployment documentation](https://nextjs.org/docs/deployment) for more details. diff --git a/apps/blink-map/app/favicon.ico b/apps/blink-map/app/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..06739ff07e4ddf46f6feb82073c4c03b2762fae1 GIT binary patch literal 36843 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

%evM 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 vYJX?j_v>r0=Zm&I+bc3(-|) { + return ( + + {children} + + ) +} diff --git a/apps/blink-map/app/page.tsx b/apps/blink-map/app/page.tsx new file mode 100644 index 0000000000..0d819695f2 --- /dev/null +++ b/apps/blink-map/app/page.tsx @@ -0,0 +1,19 @@ +import MapComponent from "@/components/map" +import { businessMapMarkers } from "@/services/galoy/graphql/queries/business-map-marker" +import Image from "next/image" + +export default async function Home() { + const mapData = await businessMapMarkers() + if (mapData instanceof Error) { + return

{mapData.message}
+ } + + return ( +
+
+ Blink Logo +
+ +
+ ) +} diff --git a/apps/blink-map/codegen.yml b/apps/blink-map/codegen.yml new file mode 100644 index 0000000000..d80849439d --- /dev/null +++ b/apps/blink-map/codegen.yml @@ -0,0 +1,61 @@ +overwrite: true +schema: + - "http://localhost:4455/graphql" +documents: + - "app/**/*.{ts,tsx}" + - "services/**/*.{ts,tsx}" +generates: + services/galoy/graphql/generated.ts: + plugins: + - typescript + - typescript-operations + - typescript-react-apollo + - add: + content: "// this file is autogenerated by codegen" + - add: + content: "\/* eslint-disable *\/" + config: + # typesPrefix: GQL + enumsAsConst: true + immutableTypes: true + strictScalars: true + nonOptionalTypename: true + scalars: + AccountApiKeyLabel: "string" + AuthToken: "string" + CentAmount: "number" + ContactAlias: "string" + Hex32Bytes: "string" + Language: "string" + LnPaymentPreImage: "string" + LnPaymentRequest: "string" + LnPaymentSecret: "string" + Memo: "string" + OnChainAddress: "string" + OnChainTxHash: "string" + OneTimeAuthCode: "string" + PaymentHash: "string" + Phone: "string" + SafeInt: "number" + SatAmount: "number" + SignedAmount: "number" + TargetConfirmations: "number" + Timestamp: "number" + Username: "string" + WalletId: "string" + Seconds: "number" + DisplayCurrency: "string" + SignedDisplayMajorAmount: "string" + CountryCode: "string" + EmailRegistrationId: "string" + TotpRegistrationId: "string" + EmailAddress: "string" + TotpSecret: "string" + TotpCode: "string" + Feedback: "string" + Minutes: "string" + LnPubkey: "string" + EndpointId: "string" + EndpointUrl: "string" + Object: "string" + NotificationCategory: "string" diff --git a/apps/blink-map/components/map/index.tsx b/apps/blink-map/components/map/index.tsx new file mode 100644 index 0000000000..1117fc4250 --- /dev/null +++ b/apps/blink-map/components/map/index.tsx @@ -0,0 +1,194 @@ +"use client" +import React, { useState, useMemo, useEffect, useCallback, useRef } from "react" +import { GoogleMap, MarkerF, InfoWindow, useLoadScript } from "@react-google-maps/api" +import { BusinessMapMarkersQuery } from "@/services/galoy/graphql/generated" +import Link from "next/link" +import { theme } from "./map-theme" +import { env } from "@/env" + +type MapComponentProps = { + mapData: BusinessMapMarkersQuery["businessMapMarkers"] +} + +export default function MapComponent({ mapData }: MapComponentProps) { + const mapRef = useRef() + const [selectedMarker, setSelectedMarker] = useState< + BusinessMapMarkersQuery["businessMapMarkers"][number] | null + >(null) + const [currentLocation, setCurrentLocation] = useState({ + lat: 13.7942, + lng: -88.8965, + }) + const libraries = useMemo(() => ["places"], []) + const onMapLoad = useCallback((map: google.maps.Map) => { + mapRef.current = map + }, []) + + const mapOptions = useMemo( + () => ({ + disableDefaultUI: true, + clickableIcons: true, + zoomControl: true, + maxZoom: 38, + minZoom: 3, + styles: [...theme, ...unwantedMarkers], + restriction: { + latLngBounds: { + north: 85, + south: -85, + east: 180, + west: -180, + }, + strictBounds: true, + }, + }), + [], + ) + + useEffect(() => { + navigator.geolocation.getCurrentPosition( + (position) => { + setCurrentLocation({ + lat: position.coords.latitude, + lng: position.coords.longitude, + }) + }, + () => { + console.error("Could not fetch the location") + }, + ) + }, []) + + const { isLoaded } = useLoadScript({ + googleMapsApiKey: env.NEXT_PUBLIC_MAP_API_TOKEN, + libraries: libraries as any, + }) + + if (!isLoaded) { + return

Loading...

+ } + + const handleMarkerClick = ( + marker: BusinessMapMarkersQuery["businessMapMarkers"][number], + ) => { + setSelectedMarker(marker) + } + + const centerMapOnCurrentLocation = () => { + if (mapRef.current) { + mapRef.current.panTo(currentLocation) + mapRef.current.setZoom(14) + } + } + + return ( + <> + {/* TODO USE LOGO HERE */} + + + {mapData.map((marker) => ( + handleMarkerClick(marker)} + /> + ))} + + {selectedMarker && ( + setSelectedMarker(null)} + > +
+

+ {selectedMarker.username} +

+ + + +
+
+ )} +
+ + ) +} + +const unwantedMarkers = [ + { + featureType: "poi", + elementType: "labels", + stylers: [{ visibility: "off" }], + }, + { + featureType: "transit", + elementType: "all", + stylers: [{ visibility: "off" }], + }, + { + featureType: "poi.park", + elementType: "labels", + stylers: [{ visibility: "off" }], + }, + { + featureType: "poi.business", + stylers: [{ visibility: "off" }], + }, + { + featureType: "poi.business", + stylers: [{ visibility: "off" }], + }, + { + featureType: "landscape.man_made", + stylers: [{ visibility: "off" }], + }, + { + featureType: "road", + elementType: "labels.icon", + stylers: [{ visibility: "off" }], + }, +] diff --git a/apps/blink-map/components/map/map-theme.ts b/apps/blink-map/components/map/map-theme.ts new file mode 100644 index 0000000000..2e4a72f826 --- /dev/null +++ b/apps/blink-map/components/map/map-theme.ts @@ -0,0 +1,80 @@ +export const theme = [ + { elementType: "geometry", stylers: [{ color: "#242f3e" }] }, + { elementType: "labels.text.stroke", stylers: [{ color: "#242f3e" }] }, + { elementType: "labels.text.fill", stylers: [{ color: "#746855" }] }, + { + featureType: "administrative.locality", + elementType: "labels.text.fill", + stylers: [{ color: "#d59563" }], + }, + { + featureType: "poi", + elementType: "labels.text.fill", + stylers: [{ color: "#d59563" }], + }, + { + featureType: "poi.park", + elementType: "geometry", + stylers: [{ color: "#263c3f" }], + }, + { + featureType: "poi.park", + elementType: "labels.text.fill", + stylers: [{ color: "#6b9a76" }], + }, + { + featureType: "road", + elementType: "geometry", + stylers: [{ color: "#38414e" }], + }, + { + featureType: "road", + elementType: "geometry.stroke", + stylers: [{ color: "#212a37" }], + }, + { + featureType: "road", + elementType: "labels.text.fill", + stylers: [{ color: "#9ca5b3" }], + }, + { + featureType: "road.highway", + elementType: "geometry", + stylers: [{ color: "#746855" }], + }, + { + featureType: "road.highway", + elementType: "geometry.stroke", + stylers: [{ color: "#1f2835" }], + }, + { + featureType: "road.highway", + elementType: "labels.text.fill", + stylers: [{ color: "#f3d19c" }], + }, + { + featureType: "transit", + elementType: "geometry", + stylers: [{ color: "#2f3948" }], + }, + { + featureType: "transit.station", + elementType: "labels.text.fill", + stylers: [{ color: "#d59563" }], + }, + { + featureType: "water", + elementType: "geometry", + stylers: [{ color: "#17263c" }], + }, + { + featureType: "water", + elementType: "labels.text.fill", + stylers: [{ color: "#515c6d" }], + }, + { + featureType: "water", + elementType: "labels.text.stroke", + stylers: [{ color: "#17263c" }], + }, +] diff --git a/apps/blink-map/env.ts b/apps/blink-map/env.ts new file mode 100644 index 0000000000..434a7d20b7 --- /dev/null +++ b/apps/blink-map/env.ts @@ -0,0 +1,15 @@ +import { createEnv } from "@t3-oss/env-nextjs" +import { z } from "zod" + +export const env = createEnv({ + server: { + CORE_URL: z.string().default("http://localhost:4455/graphql"), + }, + client: { + NEXT_PUBLIC_MAP_API_TOKEN: z.string().default(""), + }, + runtimeEnv: { + CORE_URL: process.env.CORE_URL, + NEXT_PUBLIC_MAP_API_TOKEN: process.env.NEXT_PUBLIC_MAP_API_TOKEN, + }, +}) diff --git a/apps/blink-map/instrumentation.node.ts b/apps/blink-map/instrumentation.node.ts new file mode 100644 index 0000000000..540b206397 --- /dev/null +++ b/apps/blink-map/instrumentation.node.ts @@ -0,0 +1,35 @@ +import { NodeSDK } from "@opentelemetry/sdk-node" +import { OTLPTraceExporter } from "@opentelemetry/exporter-trace-otlp-http" +import { Resource } from "@opentelemetry/resources" +import { SemanticResourceAttributes } from "@opentelemetry/semantic-conventions" +import { SimpleSpanProcessor } from "@opentelemetry/sdk-trace-node" +import { NetInstrumentation } from "@opentelemetry/instrumentation-net" +import { HttpInstrumentation } from "@opentelemetry/instrumentation-http" +import { GraphQLInstrumentation } from "@opentelemetry/instrumentation-graphql" +import { W3CTraceContextPropagator } from "@opentelemetry/core" + +const sdk = new NodeSDK({ + textMapPropagator: new W3CTraceContextPropagator(), + resource: new Resource({ + [SemanticResourceAttributes.SERVICE_NAME]: + process.env.TRACING_SERVICE_NAME || "blink-map", + }), + spanProcessor: new SimpleSpanProcessor(new OTLPTraceExporter()), + instrumentations: [ + new NetInstrumentation(), + new HttpInstrumentation(), + new GraphQLInstrumentation({ + mergeItems: true, + allowValues: true, + }), + ], +}) +sdk.start() + +process.on("SIGTERM", () => { + sdk + .shutdown() + .then(() => console.log("Tracing terminated")) + .catch((error) => console.log("Error terminating tracing", error)) + .finally(() => process.exit(0)) +}) diff --git a/apps/blink-map/instrumentation.ts b/apps/blink-map/instrumentation.ts new file mode 100644 index 0000000000..e357de1a6d --- /dev/null +++ b/apps/blink-map/instrumentation.ts @@ -0,0 +1,7 @@ +export async function register() { + console.log("register", process.env.NEXT_RUNTIME) + + if (process.env.NEXT_RUNTIME === "nodejs") { + await import("./instrumentation.node") + } +} diff --git a/apps/blink-map/next.config.js b/apps/blink-map/next.config.js new file mode 100644 index 0000000000..cbd4faab40 --- /dev/null +++ b/apps/blink-map/next.config.js @@ -0,0 +1,10 @@ +/** @type {import('next').NextConfig} */ +const nextConfig = { + experimental: { + outputFileTracingRoot: require("path").join(__dirname, "../../"), + instrumentationHook: true, + }, + output: "standalone", +} + +module.exports = nextConfig diff --git a/apps/blink-map/package.json b/apps/blink-map/package.json new file mode 100644 index 0000000000..162183e1e8 --- /dev/null +++ b/apps/blink-map/package.json @@ -0,0 +1,53 @@ +{ + "name": "blink-map", + "private": true, + "scripts": { + "dev": "next dev -p 3005", + "build": "next build", + "start": "next start", + "lint": "next lint", + "lint:fix": "eslint --fix --ext .ts,.tsx .", + "codegen": "graphql-codegen --config codegen.yml", + "test": "echo 'Need to add test'" + }, + "dependencies": { + "@apollo/client": "^3.9.2", + "@opentelemetry/api": "^1.7.0", + "@opentelemetry/core": "1.18.1", + "@opentelemetry/exporter-trace-otlp-http": "^0.45.1", + "@opentelemetry/instrumentation-graphql": "^0.36.0", + "@opentelemetry/instrumentation-http": "^0.45.1", + "@opentelemetry/instrumentation-net": "^0.32.4", + "@opentelemetry/resources": "^1.18.1", + "@opentelemetry/sdk-node": "^0.45.1", + "@opentelemetry/sdk-trace-node": "^1.18.1", + "@opentelemetry/semantic-conventions": "^1.18.1", + "@react-google-maps/api": "^2.19.2", + "@t3-oss/env-nextjs": "^0.8.0", + "graphql": "^16.8.1", + "next": "14.1.0", + "react": "^18", + "react-dom": "^18", + "zod": "^3.22.4" + }, + "devDependencies": { + "@galoy/eslint-config": "workspace:^", + "@graphql-codegen/add": "^5.0.0", + "@graphql-codegen/cli": "^5.0.0", + "@graphql-codegen/client-preset": "^4.1.0", + "@graphql-codegen/typescript": "^4.0.1", + "@graphql-codegen/typescript-operations": "^4.0.1", + "@graphql-codegen/typescript-react-apollo": "^4.1.0", + "@graphql-codegen/typescript-resolvers": "^4.0.1", + "@graphql-inspector/cli": "^4.0.3", + "@types/node": "^20", + "@types/react": "^18", + "@types/react-dom": "^18", + "autoprefixer": "^10.0.1", + "eslint": "^8", + "eslint-config-next": "14.1.0", + "postcss": "^8", + "tailwindcss": "^3.3.0", + "typescript": "^5" + } +} diff --git a/apps/blink-map/postcss.config.js b/apps/blink-map/postcss.config.js new file mode 100644 index 0000000000..12a703d900 --- /dev/null +++ b/apps/blink-map/postcss.config.js @@ -0,0 +1,6 @@ +module.exports = { + plugins: { + tailwindcss: {}, + autoprefixer: {}, + }, +}; diff --git a/apps/blink-map/prettier.config.js b/apps/blink-map/prettier.config.js new file mode 100644 index 0000000000..e6236cf0be --- /dev/null +++ b/apps/blink-map/prettier.config.js @@ -0,0 +1,15 @@ +module.exports = { + // Custom: + semi: false, + trailingComma: "all", + printWidth: 90, + quoteProps: "consistent", + // Defaults: + singleQuote: false, + tabWidth: 2, + useTabs: false, + bracketSpacing: true, + arrowParens: "always", + proseWrap: "preserve", + endOfLine: "lf", +} diff --git a/apps/blink-map/prettierrc.js b/apps/blink-map/prettierrc.js new file mode 100644 index 0000000000..9c225f1883 --- /dev/null +++ b/apps/blink-map/prettierrc.js @@ -0,0 +1,3 @@ +const baseConfig = require("@galoy/eslint-config/prettier") + +module.exports = baseConfig diff --git a/apps/blink-map/public/logo.svg b/apps/blink-map/public/logo.svg new file mode 100644 index 0000000000..f48cc40169 --- /dev/null +++ b/apps/blink-map/public/logo.svg @@ -0,0 +1,162 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/apps/blink-map/services/galoy/graphql/client.ts b/apps/blink-map/services/galoy/graphql/client.ts new file mode 100644 index 0000000000..e7b202cca1 --- /dev/null +++ b/apps/blink-map/services/galoy/graphql/client.ts @@ -0,0 +1,23 @@ +import { ApolloClient, HttpLink, InMemoryCache } from "@apollo/client" +import { propagation, context } from "@opentelemetry/api" +import { env } from "@/env" + +export const apolloClient = { + UnAuthed: () => { + return new ApolloClient({ + cache: new InMemoryCache(), + link: new HttpLink({ + uri: env.CORE_URL, + fetchOptions: { cache: "no-store" }, + fetch: (uri, options) => { + const headersWithTrace = options?.headers || {} + propagation.inject(context.active(), headersWithTrace) + return fetch(uri, { + ...options, + headers: headersWithTrace, + }) + }, + }), + }) + }, +} diff --git a/apps/blink-map/services/galoy/graphql/generated.ts b/apps/blink-map/services/galoy/graphql/generated.ts new file mode 100644 index 0000000000..656487878e --- /dev/null +++ b/apps/blink-map/services/galoy/graphql/generated.ts @@ -0,0 +1,2157 @@ +// this file is autogenerated by codegen +/* eslint-disable */ +import { gql } from '@apollo/client'; +import * as Apollo from '@apollo/client'; +export type Maybe = T | null; +export type InputMaybe = Maybe; +export type Exact = { [K in keyof T]: T[K] }; +export type MakeOptional = Omit & { [SubKey in K]?: Maybe }; +export type MakeMaybe = Omit & { [SubKey in K]: Maybe }; +export type MakeEmpty = { [_ in K]?: never }; +export type Incremental = T | { [P in keyof T]?: P extends ' $fragmentName' | '__typename' ? T[P] : never }; +const defaultOptions = {} as const; +/** All built-in and custom scalars, mapped to their actual values */ +export type Scalars = { + ID: { input: string; output: string; } + String: { input: string; output: string; } + Boolean: { input: boolean; output: boolean; } + Int: { input: number; output: number; } + Float: { input: number; output: number; } + AuthToken: { input: string; output: string; } + CentAmount: { input: number; output: number; } + ContactAlias: { input: string; output: string; } + CountryCode: { input: string; output: string; } + DisplayCurrency: { input: string; output: string; } + EmailAddress: { input: string; output: string; } + EmailRegistrationId: { input: string; output: string; } + EndpointId: { input: string; output: string; } + EndpointUrl: { input: string; output: string; } + Feedback: { input: string; output: string; } + Hex32Bytes: { input: string; output: string; } + Language: { input: string; output: string; } + LnPaymentPreImage: { input: string; output: string; } + LnPaymentRequest: { input: string; output: string; } + LnPaymentSecret: { input: string; output: string; } + Memo: { input: string; output: string; } + Minutes: { input: string; output: string; } + NotificationCategory: { input: string; output: string; } + OnChainAddress: { input: string; output: string; } + OnChainTxHash: { input: string; output: string; } + OneTimeAuthCode: { input: string; output: string; } + PaymentHash: { input: string; output: string; } + Phone: { input: string; output: string; } + SafeInt: { input: number; output: number; } + SatAmount: { input: number; output: number; } + Seconds: { input: number; output: number; } + SignedAmount: { input: number; output: number; } + SignedDisplayMajorAmount: { input: string; output: string; } + Timestamp: { input: number; output: number; } + TotpCode: { input: string; output: string; } + TotpRegistrationId: { input: string; output: string; } + TotpSecret: { input: string; output: string; } + Username: { input: string; output: string; } + WalletId: { input: string; output: string; } +}; + +export type Account = { + readonly callbackEndpoints: ReadonlyArray; + readonly csvTransactions: Scalars['String']['output']; + readonly defaultWallet: PublicWallet; + /** @deprecated Shifting property to 'defaultWallet.id' */ + readonly defaultWalletId: Scalars['WalletId']['output']; + readonly displayCurrency: Scalars['DisplayCurrency']['output']; + readonly id: Scalars['ID']['output']; + readonly invoices?: Maybe; + readonly level: AccountLevel; + readonly limits: AccountLimits; + readonly notificationSettings: NotificationSettings; + readonly pendingIncomingTransactions: ReadonlyArray; + readonly realtimePrice: RealtimePrice; + readonly transactions?: Maybe; + readonly walletById: Wallet; + readonly wallets: ReadonlyArray; +}; + + +export type AccountCsvTransactionsArgs = { + walletIds: ReadonlyArray; +}; + + +export type AccountInvoicesArgs = { + after?: InputMaybe; + before?: InputMaybe; + first?: InputMaybe; + last?: InputMaybe; + walletIds?: InputMaybe>>; +}; + + +export type AccountPendingIncomingTransactionsArgs = { + walletIds?: InputMaybe>>; +}; + + +export type AccountTransactionsArgs = { + after?: InputMaybe; + before?: InputMaybe; + first?: InputMaybe; + last?: InputMaybe; + walletIds?: InputMaybe>>; +}; + + +export type AccountWalletByIdArgs = { + walletId: Scalars['WalletId']['input']; +}; + +export type AccountDeletePayload = { + readonly __typename: 'AccountDeletePayload'; + readonly errors: ReadonlyArray; + readonly success: Scalars['Boolean']['output']; +}; + +export type AccountDisableNotificationCategoryInput = { + readonly category: Scalars['NotificationCategory']['input']; + readonly channel?: InputMaybe; +}; + +export type AccountDisableNotificationChannelInput = { + readonly channel: NotificationChannel; +}; + +export type AccountEnableNotificationCategoryInput = { + readonly category: Scalars['NotificationCategory']['input']; + readonly channel?: InputMaybe; +}; + +export type AccountEnableNotificationChannelInput = { + readonly channel: NotificationChannel; +}; + +export const AccountLevel = { + One: 'ONE', + Two: 'TWO', + Zero: 'ZERO' +} as const; + +export type AccountLevel = typeof AccountLevel[keyof typeof AccountLevel]; +export type AccountLimit = { + /** The rolling time interval in seconds that the limits would apply for. */ + readonly interval?: Maybe; + /** The amount of cents remaining below the limit for the current 24 hour period. */ + readonly remainingLimit?: Maybe; + /** The current maximum limit for a given 24 hour period. */ + readonly totalLimit: Scalars['CentAmount']['output']; +}; + +export type AccountLimits = { + readonly __typename: 'AccountLimits'; + /** Limits for converting between currencies among a account's own wallets. */ + readonly convert: ReadonlyArray; + /** Limits for sending to other internal accounts. */ + readonly internalSend: ReadonlyArray; + /** Limits for withdrawing to external onchain or lightning destinations. */ + readonly withdrawal: ReadonlyArray; +}; + +export type AccountUpdateDefaultWalletIdInput = { + readonly walletId: Scalars['WalletId']['input']; +}; + +export type AccountUpdateDefaultWalletIdPayload = { + readonly __typename: 'AccountUpdateDefaultWalletIdPayload'; + readonly account?: Maybe; + readonly errors: ReadonlyArray; +}; + +export type AccountUpdateDisplayCurrencyInput = { + readonly currency: Scalars['DisplayCurrency']['input']; +}; + +export type AccountUpdateDisplayCurrencyPayload = { + readonly __typename: 'AccountUpdateDisplayCurrencyPayload'; + readonly account?: Maybe; + readonly errors: ReadonlyArray; +}; + +export type AccountUpdateNotificationSettingsPayload = { + readonly __typename: 'AccountUpdateNotificationSettingsPayload'; + readonly account?: Maybe; + readonly errors: ReadonlyArray; +}; + +export type ApiKey = { + readonly __typename: 'ApiKey'; + readonly createdAt: Scalars['Timestamp']['output']; + readonly expired: Scalars['Boolean']['output']; + readonly expiresAt?: Maybe; + readonly id: Scalars['ID']['output']; + readonly lastUsedAt?: Maybe; + readonly name: Scalars['String']['output']; + readonly readOnly: Scalars['Boolean']['output']; + readonly revoked: Scalars['Boolean']['output']; +}; + +export type ApiKeyCreateInput = { + readonly expireInDays?: InputMaybe; + readonly name: Scalars['String']['input']; + readonly readOnly?: Scalars['Boolean']['input']; +}; + +export type ApiKeyCreatePayload = { + readonly __typename: 'ApiKeyCreatePayload'; + readonly apiKey: ApiKey; + readonly apiKeySecret: Scalars['String']['output']; +}; + +export type ApiKeyRevokeInput = { + readonly id: Scalars['ID']['input']; +}; + +export type ApiKeyRevokePayload = { + readonly __typename: 'ApiKeyRevokePayload'; + readonly apiKey: ApiKey; +}; + +export type AuthTokenPayload = { + readonly __typename: 'AuthTokenPayload'; + readonly authToken?: Maybe; + readonly errors: ReadonlyArray; + readonly totpRequired?: Maybe; +}; + +/** A wallet belonging to an account which contains a BTC balance and a list of transactions. */ +export type BtcWallet = Wallet & { + readonly __typename: 'BTCWallet'; + readonly accountId: Scalars['ID']['output']; + /** A balance stored in BTC. */ + readonly balance: Scalars['SignedAmount']['output']; + readonly id: Scalars['ID']['output']; + readonly invoiceByPaymentHash: Invoice; + /** A list of all invoices associated with walletIds optionally passed. */ + readonly invoices?: Maybe; + /** An unconfirmed incoming onchain balance. */ + readonly pendingIncomingBalance: Scalars['SignedAmount']['output']; + readonly pendingIncomingTransactions: ReadonlyArray; + readonly pendingIncomingTransactionsByAddress: ReadonlyArray; + readonly transactionById: Transaction; + /** A list of BTC transactions associated with this wallet. */ + readonly transactions?: Maybe; + readonly transactionsByAddress?: Maybe; + readonly transactionsByPaymentHash: ReadonlyArray; + readonly walletCurrency: WalletCurrency; +}; + + +/** A wallet belonging to an account which contains a BTC balance and a list of transactions. */ +export type BtcWalletInvoiceByPaymentHashArgs = { + paymentHash: Scalars['PaymentHash']['input']; +}; + + +/** A wallet belonging to an account which contains a BTC balance and a list of transactions. */ +export type BtcWalletInvoicesArgs = { + after?: InputMaybe; + before?: InputMaybe; + first?: InputMaybe; + last?: InputMaybe; +}; + + +/** A wallet belonging to an account which contains a BTC balance and a list of transactions. */ +export type BtcWalletPendingIncomingTransactionsByAddressArgs = { + address: Scalars['OnChainAddress']['input']; +}; + + +/** A wallet belonging to an account which contains a BTC balance and a list of transactions. */ +export type BtcWalletTransactionByIdArgs = { + transactionId: Scalars['ID']['input']; +}; + + +/** A wallet belonging to an account which contains a BTC balance and a list of transactions. */ +export type BtcWalletTransactionsArgs = { + after?: InputMaybe; + before?: InputMaybe; + first?: InputMaybe; + last?: InputMaybe; +}; + + +/** A wallet belonging to an account which contains a BTC balance and a list of transactions. */ +export type BtcWalletTransactionsByAddressArgs = { + address: Scalars['OnChainAddress']['input']; + after?: InputMaybe; + before?: InputMaybe; + first?: InputMaybe; + last?: InputMaybe; +}; + + +/** A wallet belonging to an account which contains a BTC balance and a list of transactions. */ +export type BtcWalletTransactionsByPaymentHashArgs = { + paymentHash: Scalars['PaymentHash']['input']; +}; + +export type BuildInformation = { + readonly __typename: 'BuildInformation'; + readonly commitHash?: Maybe; + readonly helmRevision?: Maybe; +}; + +export type CallbackEndpoint = { + readonly __typename: 'CallbackEndpoint'; + readonly id: Scalars['EndpointId']['output']; + readonly url: Scalars['EndpointUrl']['output']; +}; + +export type CallbackEndpointAddInput = { + /** callback endpoint to be called */ + readonly url: Scalars['EndpointUrl']['input']; +}; + +export type CallbackEndpointAddPayload = { + readonly __typename: 'CallbackEndpointAddPayload'; + readonly errors: ReadonlyArray; + readonly id?: Maybe; +}; + +export type CallbackEndpointDeleteInput = { + readonly id: Scalars['EndpointId']['input']; +}; + +export type CaptchaCreateChallengePayload = { + readonly __typename: 'CaptchaCreateChallengePayload'; + readonly errors: ReadonlyArray; + readonly result?: Maybe; +}; + +export type CaptchaCreateChallengeResult = { + readonly __typename: 'CaptchaCreateChallengeResult'; + readonly challengeCode: Scalars['String']['output']; + readonly failbackMode: Scalars['Boolean']['output']; + readonly id: Scalars['String']['output']; + readonly newCaptcha: Scalars['Boolean']['output']; +}; + +export type CaptchaRequestAuthCodeInput = { + readonly challengeCode: Scalars['String']['input']; + readonly channel?: InputMaybe; + readonly phone: Scalars['Phone']['input']; + readonly secCode: Scalars['String']['input']; + readonly validationCode: Scalars['String']['input']; +}; + +export type CentAmountPayload = { + readonly __typename: 'CentAmountPayload'; + readonly amount?: Maybe; + readonly errors: ReadonlyArray; +}; + +export type ConsumerAccount = Account & { + readonly __typename: 'ConsumerAccount'; + readonly callbackEndpoints: ReadonlyArray; + /** return CSV stream, base64 encoded, of the list of transactions in the wallet */ + readonly csvTransactions: Scalars['String']['output']; + readonly defaultWallet: PublicWallet; + readonly defaultWalletId: Scalars['WalletId']['output']; + readonly displayCurrency: Scalars['DisplayCurrency']['output']; + readonly id: Scalars['ID']['output']; + /** A list of all invoices associated with walletIds optionally passed. */ + readonly invoices?: Maybe; + readonly level: AccountLevel; + readonly limits: AccountLimits; + readonly notificationSettings: NotificationSettings; + readonly pendingIncomingTransactions: ReadonlyArray; + /** List the quiz questions of the consumer account */ + readonly quiz: ReadonlyArray; + readonly realtimePrice: RealtimePrice; + /** A list of all transactions associated with walletIds optionally passed. */ + readonly transactions?: Maybe; + readonly walletById: Wallet; + readonly wallets: ReadonlyArray; +}; + + +export type ConsumerAccountCsvTransactionsArgs = { + walletIds: ReadonlyArray; +}; + + +export type ConsumerAccountInvoicesArgs = { + after?: InputMaybe; + before?: InputMaybe; + first?: InputMaybe; + last?: InputMaybe; + walletIds?: InputMaybe>>; +}; + + +export type ConsumerAccountPendingIncomingTransactionsArgs = { + walletIds?: InputMaybe>>; +}; + + +export type ConsumerAccountTransactionsArgs = { + after?: InputMaybe; + before?: InputMaybe; + first?: InputMaybe; + last?: InputMaybe; + walletIds?: InputMaybe>>; +}; + + +export type ConsumerAccountWalletByIdArgs = { + walletId: Scalars['WalletId']['input']; +}; + +export type Coordinates = { + readonly __typename: 'Coordinates'; + readonly latitude: Scalars['Float']['output']; + readonly longitude: Scalars['Float']['output']; +}; + +export type Country = { + readonly __typename: 'Country'; + readonly id: Scalars['CountryCode']['output']; + readonly supportedAuthChannels: ReadonlyArray; +}; + +export type Currency = { + readonly __typename: 'Currency'; + readonly flag: Scalars['String']['output']; + readonly fractionDigits: Scalars['Int']['output']; + readonly id: Scalars['ID']['output']; + readonly name: Scalars['String']['output']; + readonly symbol: Scalars['String']['output']; +}; + +export type DepositFeesInformation = { + readonly __typename: 'DepositFeesInformation'; + readonly minBankFee: Scalars['String']['output']; + /** below this amount minBankFee will be charged */ + readonly minBankFeeThreshold: Scalars['String']['output']; + /** ratio to charge as basis points above minBankFeeThreshold amount */ + readonly ratio: Scalars['String']['output']; +}; + +export type DeviceNotificationTokenCreateInput = { + readonly deviceToken: Scalars['String']['input']; +}; + +export type Email = { + readonly __typename: 'Email'; + readonly address?: Maybe; + readonly verified?: Maybe; +}; + +export type Error = { + readonly code?: Maybe; + readonly message: Scalars['String']['output']; + readonly path?: Maybe>>; +}; + +export const ExchangeCurrencyUnit = { + Btcsat: 'BTCSAT', + Usdcent: 'USDCENT' +} as const; + +export type ExchangeCurrencyUnit = typeof ExchangeCurrencyUnit[keyof typeof ExchangeCurrencyUnit]; +export type FeedbackSubmitInput = { + readonly feedback: Scalars['Feedback']['input']; +}; + +export type FeesInformation = { + readonly __typename: 'FeesInformation'; + readonly deposit: DepositFeesInformation; +}; + +/** Provides global settings for the application which might have an impact for the user. */ +export type Globals = { + readonly __typename: 'Globals'; + readonly buildInformation: BuildInformation; + readonly feesInformation: FeesInformation; + /** The domain name for lightning addresses accepted by this Galoy instance */ + readonly lightningAddressDomain: Scalars['String']['output']; + readonly lightningAddressDomainAliases: ReadonlyArray; + /** Which network (mainnet, testnet, regtest, signet) this instance is running on. */ + readonly network: Network; + /** + * A list of public keys for the running lightning nodes. + * This can be used to know if an invoice belongs to one of our nodes. + */ + readonly nodesIds: ReadonlyArray; + /** A list of countries and their supported auth channels */ + readonly supportedCountries: ReadonlyArray; +}; + +export type GraphQlApplicationError = Error & { + readonly __typename: 'GraphQLApplicationError'; + readonly code?: Maybe; + readonly message: Scalars['String']['output']; + readonly path?: Maybe>>; +}; + +export type InitiationVia = InitiationViaIntraLedger | InitiationViaLn | InitiationViaOnChain; + +export type InitiationViaIntraLedger = { + readonly __typename: 'InitiationViaIntraLedger'; + readonly counterPartyUsername?: Maybe; + readonly counterPartyWalletId?: Maybe; +}; + +export type InitiationViaLn = { + readonly __typename: 'InitiationViaLn'; + readonly paymentHash: Scalars['PaymentHash']['output']; + /** Bolt11 invoice */ + readonly paymentRequest: Scalars['LnPaymentRequest']['output']; +}; + +export type InitiationViaOnChain = { + readonly __typename: 'InitiationViaOnChain'; + readonly address: Scalars['OnChainAddress']['output']; +}; + +export type IntraLedgerPaymentSendInput = { + /** Amount in satoshis. */ + readonly amount: Scalars['SatAmount']['input']; + /** Optional memo to be attached to the payment. */ + readonly memo?: InputMaybe; + readonly recipientWalletId: Scalars['WalletId']['input']; + /** The wallet ID of the sender. */ + readonly walletId: Scalars['WalletId']['input']; +}; + +export type IntraLedgerUpdate = { + readonly __typename: 'IntraLedgerUpdate'; + /** @deprecated Deprecated in favor of transaction */ + readonly amount: Scalars['SatAmount']['output']; + /** @deprecated Deprecated in favor of transaction */ + readonly displayCurrencyPerSat: Scalars['Float']['output']; + readonly transaction: Transaction; + readonly txNotificationType: TxNotificationType; + /** @deprecated updated over displayCurrencyPerSat */ + readonly usdPerSat: Scalars['Float']['output']; + /** @deprecated Deprecated in favor of transaction */ + readonly walletId: Scalars['WalletId']['output']; +}; + +export type IntraLedgerUsdPaymentSendInput = { + /** Amount in cents. */ + readonly amount: Scalars['CentAmount']['input']; + /** Optional memo to be attached to the payment. */ + readonly memo?: InputMaybe; + readonly recipientWalletId: Scalars['WalletId']['input']; + /** The wallet ID of the sender. */ + readonly walletId: Scalars['WalletId']['input']; +}; + +/** A lightning invoice. */ +export type Invoice = { + readonly createdAt: Scalars['Timestamp']['output']; + /** The payment hash of the lightning invoice. */ + readonly paymentHash: Scalars['PaymentHash']['output']; + /** The bolt11 invoice to be paid. */ + readonly paymentRequest: Scalars['LnPaymentRequest']['output']; + /** The payment secret of the lightning invoice. This is not the preimage of the payment hash. */ + readonly paymentSecret: Scalars['LnPaymentSecret']['output']; + /** The payment status of the invoice. */ + readonly paymentStatus: InvoicePaymentStatus; +}; + +/** A connection to a list of items. */ +export type InvoiceConnection = { + readonly __typename: 'InvoiceConnection'; + /** A list of edges. */ + readonly edges?: Maybe>; + /** Information to aid in pagination. */ + readonly pageInfo: PageInfo; +}; + +/** An edge in a connection. */ +export type InvoiceEdge = { + readonly __typename: 'InvoiceEdge'; + /** A cursor for use in pagination */ + readonly cursor: Scalars['String']['output']; + /** The item at the end of the edge */ + readonly node: Invoice; +}; + +export const InvoicePaymentStatus = { + Expired: 'EXPIRED', + Paid: 'PAID', + Pending: 'PENDING' +} as const; + +export type InvoicePaymentStatus = typeof InvoicePaymentStatus[keyof typeof InvoicePaymentStatus]; +export type LnAddressPaymentSendInput = { + /** Amount in satoshis. */ + readonly amount: Scalars['SatAmount']['input']; + /** Lightning address to send to. */ + readonly lnAddress: Scalars['String']['input']; + /** Wallet ID to send bitcoin from. */ + readonly walletId: Scalars['WalletId']['input']; +}; + +export type LnInvoice = Invoice & { + readonly __typename: 'LnInvoice'; + readonly createdAt: Scalars['Timestamp']['output']; + readonly paymentHash: Scalars['PaymentHash']['output']; + readonly paymentRequest: Scalars['LnPaymentRequest']['output']; + readonly paymentSecret: Scalars['LnPaymentSecret']['output']; + readonly paymentStatus: InvoicePaymentStatus; + readonly satoshis: Scalars['SatAmount']['output']; +}; + +export type LnInvoiceCreateInput = { + /** Amount in satoshis. */ + readonly amount: Scalars['SatAmount']['input']; + /** Optional invoice expiration time in minutes. */ + readonly expiresIn?: InputMaybe; + /** Optional memo for the lightning invoice. */ + readonly memo?: InputMaybe; + /** Wallet ID for a BTC wallet belonging to the current account. */ + readonly walletId: Scalars['WalletId']['input']; +}; + +export type LnInvoiceCreateOnBehalfOfRecipientInput = { + /** Amount in satoshis. */ + readonly amount: Scalars['SatAmount']['input']; + readonly descriptionHash?: InputMaybe; + /** Optional invoice expiration time in minutes. */ + readonly expiresIn?: InputMaybe; + /** Optional memo for the lightning invoice. */ + readonly memo?: InputMaybe; + /** Wallet ID for a BTC wallet which belongs to any account. */ + readonly recipientWalletId: Scalars['WalletId']['input']; +}; + +export type LnInvoiceFeeProbeInput = { + readonly paymentRequest: Scalars['LnPaymentRequest']['input']; + readonly walletId: Scalars['WalletId']['input']; +}; + +export type LnInvoicePayload = { + readonly __typename: 'LnInvoicePayload'; + readonly errors: ReadonlyArray; + readonly invoice?: Maybe; +}; + +export type LnInvoicePaymentInput = { + /** Optional memo to associate with the lightning invoice. */ + readonly memo?: InputMaybe; + /** Payment request representing the invoice which is being paid. */ + readonly paymentRequest: Scalars['LnPaymentRequest']['input']; + /** Wallet ID with sufficient balance to cover amount of invoice. Must belong to the account of the current user. */ + readonly walletId: Scalars['WalletId']['input']; +}; + +export type LnInvoicePaymentStatusInput = { + readonly paymentRequest: Scalars['LnPaymentRequest']['input']; +}; + +export type LnInvoicePaymentStatusPayload = { + readonly __typename: 'LnInvoicePaymentStatusPayload'; + readonly errors: ReadonlyArray; + readonly status?: Maybe; +}; + +export type LnNoAmountInvoice = Invoice & { + readonly __typename: 'LnNoAmountInvoice'; + readonly createdAt: Scalars['Timestamp']['output']; + readonly paymentHash: Scalars['PaymentHash']['output']; + readonly paymentRequest: Scalars['LnPaymentRequest']['output']; + readonly paymentSecret: Scalars['LnPaymentSecret']['output']; + readonly paymentStatus: InvoicePaymentStatus; +}; + +export type LnNoAmountInvoiceCreateInput = { + /** Optional invoice expiration time in minutes. */ + readonly expiresIn?: InputMaybe; + /** Optional memo for the lightning invoice. */ + readonly memo?: InputMaybe; + /** ID for either a USD or BTC wallet belonging to the account of the current user. */ + readonly walletId: Scalars['WalletId']['input']; +}; + +export type LnNoAmountInvoiceCreateOnBehalfOfRecipientInput = { + /** Optional invoice expiration time in minutes. */ + readonly expiresIn?: InputMaybe; + /** Optional memo for the lightning invoice. */ + readonly memo?: InputMaybe; + /** ID for either a USD or BTC wallet which belongs to the account of any user. */ + readonly recipientWalletId: Scalars['WalletId']['input']; +}; + +export type LnNoAmountInvoiceFeeProbeInput = { + readonly amount: Scalars['SatAmount']['input']; + readonly paymentRequest: Scalars['LnPaymentRequest']['input']; + readonly walletId: Scalars['WalletId']['input']; +}; + +export type LnNoAmountInvoicePayload = { + readonly __typename: 'LnNoAmountInvoicePayload'; + readonly errors: ReadonlyArray; + readonly invoice?: Maybe; +}; + +export type LnNoAmountInvoicePaymentInput = { + /** Amount to pay in satoshis. */ + readonly amount: Scalars['SatAmount']['input']; + /** Optional memo to associate with the lightning invoice. */ + readonly memo?: InputMaybe; + /** Payment request representing the invoice which is being paid. */ + readonly paymentRequest: Scalars['LnPaymentRequest']['input']; + /** Wallet ID with sufficient balance to cover amount defined in mutation request. Must belong to the account of the current user. */ + readonly walletId: Scalars['WalletId']['input']; +}; + +export type LnNoAmountUsdInvoiceFeeProbeInput = { + readonly amount: Scalars['CentAmount']['input']; + readonly paymentRequest: Scalars['LnPaymentRequest']['input']; + readonly walletId: Scalars['WalletId']['input']; +}; + +export type LnNoAmountUsdInvoicePaymentInput = { + /** Amount to pay in USD cents. */ + readonly amount: Scalars['CentAmount']['input']; + /** Optional memo to associate with the lightning invoice. */ + readonly memo?: InputMaybe; + /** Payment request representing the invoice which is being paid. */ + readonly paymentRequest: Scalars['LnPaymentRequest']['input']; + /** Wallet ID with sufficient balance to cover amount defined in mutation request. Must belong to the account of the current user. */ + readonly walletId: Scalars['WalletId']['input']; +}; + +export type LnUpdate = { + readonly __typename: 'LnUpdate'; + /** @deprecated Deprecated in favor of transaction */ + readonly paymentHash: Scalars['PaymentHash']['output']; + readonly status: InvoicePaymentStatus; + readonly transaction: Transaction; + /** @deprecated Deprecated in favor of transaction */ + readonly walletId: Scalars['WalletId']['output']; +}; + +export type LnUsdInvoiceBtcDenominatedCreateOnBehalfOfRecipientInput = { + /** Amount in satoshis. */ + readonly amount: Scalars['SatAmount']['input']; + readonly descriptionHash?: InputMaybe; + /** Optional invoice expiration time in minutes. */ + readonly expiresIn?: InputMaybe; + /** Optional memo for the lightning invoice. Acts as a note to the recipient. */ + readonly memo?: InputMaybe; + /** Wallet ID for a USD wallet which belongs to the account of any user. */ + readonly recipientWalletId: Scalars['WalletId']['input']; +}; + +export type LnUsdInvoiceCreateInput = { + /** Amount in USD cents. */ + readonly amount: Scalars['CentAmount']['input']; + /** Optional invoice expiration time in minutes. */ + readonly expiresIn?: InputMaybe; + /** Optional memo for the lightning invoice. */ + readonly memo?: InputMaybe; + /** Wallet ID for a USD wallet belonging to the current user. */ + readonly walletId: Scalars['WalletId']['input']; +}; + +export type LnUsdInvoiceCreateOnBehalfOfRecipientInput = { + /** Amount in USD cents. */ + readonly amount: Scalars['CentAmount']['input']; + readonly descriptionHash?: InputMaybe; + /** Optional invoice expiration time in minutes. */ + readonly expiresIn?: InputMaybe; + /** Optional memo for the lightning invoice. Acts as a note to the recipient. */ + readonly memo?: InputMaybe; + /** Wallet ID for a USD wallet which belongs to the account of any user. */ + readonly recipientWalletId: Scalars['WalletId']['input']; +}; + +export type LnUsdInvoiceFeeProbeInput = { + readonly paymentRequest: Scalars['LnPaymentRequest']['input']; + readonly walletId: Scalars['WalletId']['input']; +}; + +export type LnurlPaymentSendInput = { + /** Amount in satoshis. */ + readonly amount: Scalars['SatAmount']['input']; + /** Lnurl string to send to. */ + readonly lnurl: Scalars['String']['input']; + /** Wallet ID to send bitcoin from. */ + readonly walletId: Scalars['WalletId']['input']; +}; + +export type MapInfo = { + readonly __typename: 'MapInfo'; + readonly coordinates: Coordinates; + readonly title: Scalars['String']['output']; +}; + +export type MapMarker = { + readonly __typename: 'MapMarker'; + readonly mapInfo: MapInfo; + readonly username: Scalars['Username']['output']; +}; + +export type MobileVersions = { + readonly __typename: 'MobileVersions'; + readonly currentSupported: Scalars['Int']['output']; + readonly minSupported: Scalars['Int']['output']; + readonly platform: Scalars['String']['output']; +}; + +export type Mutation = { + readonly __typename: 'Mutation'; + readonly accountDelete: AccountDeletePayload; + readonly accountDisableNotificationCategory: AccountUpdateNotificationSettingsPayload; + readonly accountDisableNotificationChannel: AccountUpdateNotificationSettingsPayload; + readonly accountEnableNotificationCategory: AccountUpdateNotificationSettingsPayload; + readonly accountEnableNotificationChannel: AccountUpdateNotificationSettingsPayload; + readonly accountUpdateDefaultWalletId: AccountUpdateDefaultWalletIdPayload; + readonly accountUpdateDisplayCurrency: AccountUpdateDisplayCurrencyPayload; + readonly apiKeyCreate: ApiKeyCreatePayload; + readonly apiKeyRevoke: ApiKeyRevokePayload; + readonly callbackEndpointAdd: CallbackEndpointAddPayload; + readonly callbackEndpointDelete: SuccessPayload; + readonly captchaCreateChallenge: CaptchaCreateChallengePayload; + readonly captchaRequestAuthCode: SuccessPayload; + readonly deviceNotificationTokenCreate: SuccessPayload; + readonly feedbackSubmit: SuccessPayload; + /** + * Actions a payment which is internal to the ledger e.g. it does + * not use onchain/lightning. Returns payment status (success, + * failed, pending, already_paid). + */ + readonly intraLedgerPaymentSend: PaymentSendPayload; + /** + * Actions a payment which is internal to the ledger e.g. it does + * not use onchain/lightning. Returns payment status (success, + * failed, pending, already_paid). + */ + readonly intraLedgerUsdPaymentSend: PaymentSendPayload; + /** Sends a payment to a lightning address. */ + readonly lnAddressPaymentSend: PaymentSendPayload; + /** + * Returns a lightning invoice for an associated wallet. + * When invoice is paid the value will be credited to a BTC wallet. + * Expires after 'expiresIn' or 24 hours. + */ + readonly lnInvoiceCreate: LnInvoicePayload; + /** + * Returns a lightning invoice for an associated wallet. + * When invoice is paid the value will be credited to a BTC wallet. + * Expires after 'expiresIn' or 24 hours. + */ + readonly lnInvoiceCreateOnBehalfOfRecipient: LnInvoicePayload; + readonly lnInvoiceFeeProbe: SatAmountPayload; + /** + * Pay a lightning invoice using a balance from a wallet which is owned by the account of the current user. + * Provided wallet can be USD or BTC and must have sufficient balance to cover amount in lightning invoice. + * Returns payment status (success, failed, pending, already_paid). + */ + readonly lnInvoicePaymentSend: PaymentSendPayload; + /** + * Returns a lightning invoice for an associated wallet. + * Can be used to receive any supported currency value (currently USD or BTC). + * Expires after 'expiresIn' or 24 hours for BTC invoices or 5 minutes for USD invoices. + */ + readonly lnNoAmountInvoiceCreate: LnNoAmountInvoicePayload; + /** + * Returns a lightning invoice for an associated wallet. + * Can be used to receive any supported currency value (currently USD or BTC). + * Expires after 'expiresIn' or 24 hours for BTC invoices or 5 minutes for USD invoices. + */ + readonly lnNoAmountInvoiceCreateOnBehalfOfRecipient: LnNoAmountInvoicePayload; + readonly lnNoAmountInvoiceFeeProbe: SatAmountPayload; + /** + * Pay a lightning invoice using a balance from a wallet which is owned by the account of the current user. + * Provided wallet must be BTC and must have sufficient balance to cover amount specified in mutation request. + * Returns payment status (success, failed, pending, already_paid). + */ + readonly lnNoAmountInvoicePaymentSend: PaymentSendPayload; + readonly lnNoAmountUsdInvoiceFeeProbe: CentAmountPayload; + /** + * Pay a lightning invoice using a balance from a wallet which is owned by the account of the current user. + * Provided wallet must be USD and have sufficient balance to cover amount specified in mutation request. + * Returns payment status (success, failed, pending, already_paid). + */ + readonly lnNoAmountUsdInvoicePaymentSend: PaymentSendPayload; + /** + * Returns a lightning invoice denominated in satoshis for an associated wallet. + * When invoice is paid the equivalent value at invoice creation will be credited to a USD wallet. + * Expires after 'expiresIn' or 5 minutes (short expiry time because there is a USD/BTC exchange rate + * associated with the amount). + */ + readonly lnUsdInvoiceBtcDenominatedCreateOnBehalfOfRecipient: LnInvoicePayload; + /** + * Returns a lightning invoice denominated in satoshis for an associated wallet. + * When invoice is paid the equivalent value at invoice creation will be credited to a USD wallet. + * Expires after 'expiresIn' or 5 minutes (short expiry time because there is a USD/BTC exchange rate + * associated with the amount). + */ + readonly lnUsdInvoiceCreate: LnInvoicePayload; + /** + * Returns a lightning invoice denominated in satoshis for an associated wallet. + * When invoice is paid the equivalent value at invoice creation will be credited to a USD wallet. + * Expires after 'expiresIn' or 5 minutes (short expiry time because there is a USD/BTC exchange rate + * associated with the amount). + */ + readonly lnUsdInvoiceCreateOnBehalfOfRecipient: LnInvoicePayload; + readonly lnUsdInvoiceFeeProbe: SatAmountPayload; + /** Sends a payment to a lightning address. */ + readonly lnurlPaymentSend: PaymentSendPayload; + readonly onChainAddressCreate: OnChainAddressPayload; + readonly onChainAddressCurrent: OnChainAddressPayload; + readonly onChainPaymentSend: PaymentSendPayload; + readonly onChainPaymentSendAll: PaymentSendPayload; + readonly onChainUsdPaymentSend: PaymentSendPayload; + readonly onChainUsdPaymentSendAsBtcDenominated: PaymentSendPayload; + readonly quizClaim: QuizClaimPayload; + /** @deprecated Use quizClaim instead */ + readonly quizCompleted: QuizCompletedPayload; + /** @deprecated will be moved to AccountContact */ + readonly userContactUpdateAlias: UserContactUpdateAliasPayload; + readonly userDisableNotificationCategory: UserUpdateNotificationSettingsPayload; + readonly userDisableNotificationChannel: UserUpdateNotificationSettingsPayload; + readonly userEmailDelete: UserEmailDeletePayload; + readonly userEmailRegistrationInitiate: UserEmailRegistrationInitiatePayload; + readonly userEmailRegistrationValidate: UserEmailRegistrationValidatePayload; + readonly userEnableNotificationCategory: UserUpdateNotificationSettingsPayload; + readonly userEnableNotificationChannel: UserUpdateNotificationSettingsPayload; + readonly userLogin: AuthTokenPayload; + readonly userLoginUpgrade: UpgradePayload; + readonly userLogout: SuccessPayload; + readonly userPhoneDelete: UserPhoneDeletePayload; + readonly userPhoneRegistrationInitiate: SuccessPayload; + readonly userPhoneRegistrationValidate: UserPhoneRegistrationValidatePayload; + readonly userTotpDelete: UserTotpDeletePayload; + readonly userTotpRegistrationInitiate: UserTotpRegistrationInitiatePayload; + readonly userTotpRegistrationValidate: UserTotpRegistrationValidatePayload; + readonly userUpdateLanguage: UserUpdateLanguagePayload; + /** @deprecated Username will be moved to @Handle in Accounts. Also SetUsername naming should be used instead of UpdateUsername to reflect the idempotency of Handles */ + readonly userUpdateUsername: UserUpdateUsernamePayload; +}; + + +export type MutationAccountDisableNotificationCategoryArgs = { + input: AccountDisableNotificationCategoryInput; +}; + + +export type MutationAccountDisableNotificationChannelArgs = { + input: AccountDisableNotificationChannelInput; +}; + + +export type MutationAccountEnableNotificationCategoryArgs = { + input: AccountEnableNotificationCategoryInput; +}; + + +export type MutationAccountEnableNotificationChannelArgs = { + input: AccountEnableNotificationChannelInput; +}; + + +export type MutationAccountUpdateDefaultWalletIdArgs = { + input: AccountUpdateDefaultWalletIdInput; +}; + + +export type MutationAccountUpdateDisplayCurrencyArgs = { + input: AccountUpdateDisplayCurrencyInput; +}; + + +export type MutationApiKeyCreateArgs = { + input: ApiKeyCreateInput; +}; + + +export type MutationApiKeyRevokeArgs = { + input: ApiKeyRevokeInput; +}; + + +export type MutationCallbackEndpointAddArgs = { + input: CallbackEndpointAddInput; +}; + + +export type MutationCallbackEndpointDeleteArgs = { + input: CallbackEndpointDeleteInput; +}; + + +export type MutationCaptchaRequestAuthCodeArgs = { + input: CaptchaRequestAuthCodeInput; +}; + + +export type MutationDeviceNotificationTokenCreateArgs = { + input: DeviceNotificationTokenCreateInput; +}; + + +export type MutationFeedbackSubmitArgs = { + input: FeedbackSubmitInput; +}; + + +export type MutationIntraLedgerPaymentSendArgs = { + input: IntraLedgerPaymentSendInput; +}; + + +export type MutationIntraLedgerUsdPaymentSendArgs = { + input: IntraLedgerUsdPaymentSendInput; +}; + + +export type MutationLnAddressPaymentSendArgs = { + input: LnAddressPaymentSendInput; +}; + + +export type MutationLnInvoiceCreateArgs = { + input: LnInvoiceCreateInput; +}; + + +export type MutationLnInvoiceCreateOnBehalfOfRecipientArgs = { + input: LnInvoiceCreateOnBehalfOfRecipientInput; +}; + + +export type MutationLnInvoiceFeeProbeArgs = { + input: LnInvoiceFeeProbeInput; +}; + + +export type MutationLnInvoicePaymentSendArgs = { + input: LnInvoicePaymentInput; +}; + + +export type MutationLnNoAmountInvoiceCreateArgs = { + input: LnNoAmountInvoiceCreateInput; +}; + + +export type MutationLnNoAmountInvoiceCreateOnBehalfOfRecipientArgs = { + input: LnNoAmountInvoiceCreateOnBehalfOfRecipientInput; +}; + + +export type MutationLnNoAmountInvoiceFeeProbeArgs = { + input: LnNoAmountInvoiceFeeProbeInput; +}; + + +export type MutationLnNoAmountInvoicePaymentSendArgs = { + input: LnNoAmountInvoicePaymentInput; +}; + + +export type MutationLnNoAmountUsdInvoiceFeeProbeArgs = { + input: LnNoAmountUsdInvoiceFeeProbeInput; +}; + + +export type MutationLnNoAmountUsdInvoicePaymentSendArgs = { + input: LnNoAmountUsdInvoicePaymentInput; +}; + + +export type MutationLnUsdInvoiceBtcDenominatedCreateOnBehalfOfRecipientArgs = { + input: LnUsdInvoiceBtcDenominatedCreateOnBehalfOfRecipientInput; +}; + + +export type MutationLnUsdInvoiceCreateArgs = { + input: LnUsdInvoiceCreateInput; +}; + + +export type MutationLnUsdInvoiceCreateOnBehalfOfRecipientArgs = { + input: LnUsdInvoiceCreateOnBehalfOfRecipientInput; +}; + + +export type MutationLnUsdInvoiceFeeProbeArgs = { + input: LnUsdInvoiceFeeProbeInput; +}; + + +export type MutationLnurlPaymentSendArgs = { + input: LnurlPaymentSendInput; +}; + + +export type MutationOnChainAddressCreateArgs = { + input: OnChainAddressCreateInput; +}; + + +export type MutationOnChainAddressCurrentArgs = { + input: OnChainAddressCurrentInput; +}; + + +export type MutationOnChainPaymentSendArgs = { + input: OnChainPaymentSendInput; +}; + + +export type MutationOnChainPaymentSendAllArgs = { + input: OnChainPaymentSendAllInput; +}; + + +export type MutationOnChainUsdPaymentSendArgs = { + input: OnChainUsdPaymentSendInput; +}; + + +export type MutationOnChainUsdPaymentSendAsBtcDenominatedArgs = { + input: OnChainUsdPaymentSendAsBtcDenominatedInput; +}; + + +export type MutationQuizClaimArgs = { + input: QuizClaimInput; +}; + + +export type MutationQuizCompletedArgs = { + input: QuizCompletedInput; +}; + + +export type MutationUserContactUpdateAliasArgs = { + input: UserContactUpdateAliasInput; +}; + + +export type MutationUserDisableNotificationCategoryArgs = { + input: UserDisableNotificationCategoryInput; +}; + + +export type MutationUserDisableNotificationChannelArgs = { + input: UserDisableNotificationChannelInput; +}; + + +export type MutationUserEmailRegistrationInitiateArgs = { + input: UserEmailRegistrationInitiateInput; +}; + + +export type MutationUserEmailRegistrationValidateArgs = { + input: UserEmailRegistrationValidateInput; +}; + + +export type MutationUserEnableNotificationCategoryArgs = { + input: UserEnableNotificationCategoryInput; +}; + + +export type MutationUserEnableNotificationChannelArgs = { + input: UserEnableNotificationChannelInput; +}; + + +export type MutationUserLoginArgs = { + input: UserLoginInput; +}; + + +export type MutationUserLoginUpgradeArgs = { + input: UserLoginUpgradeInput; +}; + + +export type MutationUserLogoutArgs = { + input?: InputMaybe; +}; + + +export type MutationUserPhoneRegistrationInitiateArgs = { + input: UserPhoneRegistrationInitiateInput; +}; + + +export type MutationUserPhoneRegistrationValidateArgs = { + input: UserPhoneRegistrationValidateInput; +}; + + +export type MutationUserTotpRegistrationValidateArgs = { + input: UserTotpRegistrationValidateInput; +}; + + +export type MutationUserUpdateLanguageArgs = { + input: UserUpdateLanguageInput; +}; + + +export type MutationUserUpdateUsernameArgs = { + input: UserUpdateUsernameInput; +}; + +export type MyUpdatesPayload = { + readonly __typename: 'MyUpdatesPayload'; + readonly errors: ReadonlyArray; + readonly me?: Maybe; + readonly update?: Maybe; +}; + +export const Network = { + Mainnet: 'mainnet', + Regtest: 'regtest', + Signet: 'signet', + Testnet: 'testnet' +} as const; + +export type Network = typeof Network[keyof typeof Network]; +export const NotificationChannel = { + Push: 'PUSH' +} as const; + +export type NotificationChannel = typeof NotificationChannel[keyof typeof NotificationChannel]; +export type NotificationChannelSettings = { + readonly __typename: 'NotificationChannelSettings'; + readonly disabledCategories: ReadonlyArray; + readonly enabled: Scalars['Boolean']['output']; +}; + +export type NotificationSettings = { + readonly __typename: 'NotificationSettings'; + readonly push: NotificationChannelSettings; +}; + +export type OnChainAddressCreateInput = { + readonly walletId: Scalars['WalletId']['input']; +}; + +export type OnChainAddressCurrentInput = { + readonly walletId: Scalars['WalletId']['input']; +}; + +export type OnChainAddressPayload = { + readonly __typename: 'OnChainAddressPayload'; + readonly address?: Maybe; + readonly errors: ReadonlyArray; +}; + +export type OnChainPaymentSendAllInput = { + readonly address: Scalars['OnChainAddress']['input']; + readonly memo?: InputMaybe; + readonly speed?: PayoutSpeed; + readonly walletId: Scalars['WalletId']['input']; +}; + +export type OnChainPaymentSendInput = { + readonly address: Scalars['OnChainAddress']['input']; + readonly amount: Scalars['SatAmount']['input']; + readonly memo?: InputMaybe; + readonly speed?: PayoutSpeed; + readonly walletId: Scalars['WalletId']['input']; +}; + +export type OnChainTxFee = { + readonly __typename: 'OnChainTxFee'; + readonly amount: Scalars['SatAmount']['output']; +}; + +export type OnChainUpdate = { + readonly __typename: 'OnChainUpdate'; + /** @deprecated Deprecated in favor of transaction */ + readonly amount: Scalars['SatAmount']['output']; + /** @deprecated Deprecated in favor of transaction */ + readonly displayCurrencyPerSat: Scalars['Float']['output']; + readonly transaction: Transaction; + /** @deprecated Deprecated in favor of transaction */ + readonly txHash: Scalars['OnChainTxHash']['output']; + readonly txNotificationType: TxNotificationType; + /** @deprecated updated over displayCurrencyPerSat */ + readonly usdPerSat: Scalars['Float']['output']; + /** @deprecated Deprecated in favor of transaction */ + readonly walletId: Scalars['WalletId']['output']; +}; + +export type OnChainUsdPaymentSendAsBtcDenominatedInput = { + readonly address: Scalars['OnChainAddress']['input']; + readonly amount: Scalars['SatAmount']['input']; + readonly memo?: InputMaybe; + readonly speed?: PayoutSpeed; + readonly walletId: Scalars['WalletId']['input']; +}; + +export type OnChainUsdPaymentSendInput = { + readonly address: Scalars['OnChainAddress']['input']; + readonly amount: Scalars['CentAmount']['input']; + readonly memo?: InputMaybe; + readonly speed?: PayoutSpeed; + readonly walletId: Scalars['WalletId']['input']; +}; + +export type OnChainUsdTxFee = { + readonly __typename: 'OnChainUsdTxFee'; + readonly amount: Scalars['CentAmount']['output']; +}; + +export type OneDayAccountLimit = AccountLimit & { + readonly __typename: 'OneDayAccountLimit'; + /** The rolling time interval value in seconds for the current 24 hour period. */ + readonly interval?: Maybe; + /** The amount of cents remaining below the limit for the current 24 hour period. */ + readonly remainingLimit?: Maybe; + /** The current maximum limit for a given 24 hour period. */ + readonly totalLimit: Scalars['CentAmount']['output']; +}; + +/** Information about pagination in a connection. */ +export type PageInfo = { + readonly __typename: 'PageInfo'; + /** When paginating forwards, the cursor to continue. */ + readonly endCursor?: Maybe; + /** When paginating forwards, are there more items? */ + readonly hasNextPage: Scalars['Boolean']['output']; + /** When paginating backwards, are there more items? */ + readonly hasPreviousPage: Scalars['Boolean']['output']; + /** When paginating backwards, the cursor to continue. */ + readonly startCursor?: Maybe; +}; + +export type PaymentSendPayload = { + readonly __typename: 'PaymentSendPayload'; + readonly errors: ReadonlyArray; + readonly status?: Maybe; + readonly transaction?: Maybe; +}; + +export const PaymentSendResult = { + AlreadyPaid: 'ALREADY_PAID', + Failure: 'FAILURE', + Pending: 'PENDING', + Success: 'SUCCESS' +} as const; + +export type PaymentSendResult = typeof PaymentSendResult[keyof typeof PaymentSendResult]; +export const PayoutSpeed = { + Fast: 'FAST' +} as const; + +export type PayoutSpeed = typeof PayoutSpeed[keyof typeof PayoutSpeed]; +export const PhoneCodeChannelType = { + Sms: 'SMS', + Whatsapp: 'WHATSAPP' +} as const; + +export type PhoneCodeChannelType = typeof PhoneCodeChannelType[keyof typeof PhoneCodeChannelType]; +/** Price amount expressed in base/offset. To calculate, use: `base / 10^offset` */ +export type Price = { + readonly __typename: 'Price'; + readonly base: Scalars['SafeInt']['output']; + readonly currencyUnit: Scalars['String']['output']; + readonly formattedAmount: Scalars['String']['output']; + readonly offset: Scalars['Int']['output']; +}; + +/** The range for the X axis in the BTC price graph */ +export const PriceGraphRange = { + FiveYears: 'FIVE_YEARS', + OneDay: 'ONE_DAY', + OneMonth: 'ONE_MONTH', + OneWeek: 'ONE_WEEK', + OneYear: 'ONE_YEAR' +} as const; + +export type PriceGraphRange = typeof PriceGraphRange[keyof typeof PriceGraphRange]; +export type PriceInput = { + readonly amount: Scalars['SatAmount']['input']; + readonly amountCurrencyUnit: ExchangeCurrencyUnit; + readonly priceCurrencyUnit: ExchangeCurrencyUnit; +}; + +export type PriceInterface = { + readonly base: Scalars['SafeInt']['output']; + /** @deprecated Deprecated due to type renaming */ + readonly currencyUnit: Scalars['String']['output']; + readonly offset: Scalars['Int']['output']; +}; + +/** Price of 1 sat in base/offset. To calculate, use: `base / 10^offset` */ +export type PriceOfOneSatInMinorUnit = PriceInterface & { + readonly __typename: 'PriceOfOneSatInMinorUnit'; + readonly base: Scalars['SafeInt']['output']; + /** @deprecated Deprecated due to type renaming */ + readonly currencyUnit: Scalars['String']['output']; + readonly offset: Scalars['Int']['output']; +}; + +/** Price of 1 sat or 1 usd cent in base/offset. To calculate, use: `base / 10^offset` */ +export type PriceOfOneSettlementMinorUnitInDisplayMinorUnit = PriceInterface & { + readonly __typename: 'PriceOfOneSettlementMinorUnitInDisplayMinorUnit'; + readonly base: Scalars['SafeInt']['output']; + /** @deprecated Deprecated due to type renaming */ + readonly currencyUnit: Scalars['String']['output']; + /** @deprecated Deprecated please use `base / 10^offset` */ + readonly formattedAmount: Scalars['String']['output']; + readonly offset: Scalars['Int']['output']; +}; + +/** Price of 1 usd cent in base/offset. To calculate, use: `base / 10^offset` */ +export type PriceOfOneUsdCentInMinorUnit = PriceInterface & { + readonly __typename: 'PriceOfOneUsdCentInMinorUnit'; + readonly base: Scalars['SafeInt']['output']; + /** @deprecated Deprecated due to type renaming */ + readonly currencyUnit: Scalars['String']['output']; + readonly offset: Scalars['Int']['output']; +}; + +export type PricePayload = { + readonly __typename: 'PricePayload'; + readonly errors: ReadonlyArray; + readonly price?: Maybe; +}; + +export type PricePoint = { + readonly __typename: 'PricePoint'; + readonly price: Price; + /** Unix timestamp (number of seconds elapsed since January 1, 1970 00:00:00 UTC) */ + readonly timestamp: Scalars['Timestamp']['output']; +}; + +/** A public view of a generic wallet which stores value in one of our supported currencies. */ +export type PublicWallet = { + readonly __typename: 'PublicWallet'; + readonly currency: WalletCurrency; + readonly id: Scalars['ID']['output']; + /** @deprecated Shifting property to 'currency' */ + readonly walletCurrency: WalletCurrency; +}; + +export type Query = { + readonly __typename: 'Query'; + readonly accountDefaultWallet: PublicWallet; + readonly btcPriceList?: Maybe>>; + readonly businessMapMarkers: ReadonlyArray; + readonly currencyList: ReadonlyArray; + readonly globals?: Maybe; + readonly lnInvoicePaymentStatus: LnInvoicePaymentStatusPayload; + readonly me?: Maybe; + readonly mobileVersions?: Maybe>>; + readonly onChainTxFee: OnChainTxFee; + readonly onChainUsdTxFee: OnChainUsdTxFee; + readonly onChainUsdTxFeeAsBtcDenominated: OnChainUsdTxFee; + /** Returns 1 Sat and 1 Usd Cent price for the given currency */ + readonly realtimePrice: RealtimePrice; + /** @deprecated will be migrated to AccountDefaultWalletId */ + readonly userDefaultWalletId: Scalars['WalletId']['output']; + readonly usernameAvailable?: Maybe; +}; + + +export type QueryAccountDefaultWalletArgs = { + username: Scalars['Username']['input']; + walletCurrency?: InputMaybe; +}; + + +export type QueryBtcPriceListArgs = { + range: PriceGraphRange; +}; + + +export type QueryLnInvoicePaymentStatusArgs = { + input: LnInvoicePaymentStatusInput; +}; + + +export type QueryOnChainTxFeeArgs = { + address: Scalars['OnChainAddress']['input']; + amount: Scalars['SatAmount']['input']; + speed?: PayoutSpeed; + walletId: Scalars['WalletId']['input']; +}; + + +export type QueryOnChainUsdTxFeeArgs = { + address: Scalars['OnChainAddress']['input']; + amount: Scalars['CentAmount']['input']; + speed?: PayoutSpeed; + walletId: Scalars['WalletId']['input']; +}; + + +export type QueryOnChainUsdTxFeeAsBtcDenominatedArgs = { + address: Scalars['OnChainAddress']['input']; + amount: Scalars['SatAmount']['input']; + speed?: PayoutSpeed; + walletId: Scalars['WalletId']['input']; +}; + + +export type QueryRealtimePriceArgs = { + currency?: InputMaybe; +}; + + +export type QueryUserDefaultWalletIdArgs = { + username: Scalars['Username']['input']; +}; + + +export type QueryUsernameAvailableArgs = { + username: Scalars['Username']['input']; +}; + +export type Quiz = { + readonly __typename: 'Quiz'; + /** The reward in Satoshis for the quiz question */ + readonly amount: Scalars['SatAmount']['output']; + readonly completed: Scalars['Boolean']['output']; + readonly id: Scalars['ID']['output']; + readonly notBefore?: Maybe; +}; + +export type QuizClaimInput = { + readonly id: Scalars['ID']['input']; +}; + +export type QuizClaimPayload = { + readonly __typename: 'QuizClaimPayload'; + readonly errors: ReadonlyArray; + readonly quizzes: ReadonlyArray; +}; + +export type QuizCompletedInput = { + readonly id: Scalars['ID']['input']; +}; + +export type QuizCompletedPayload = { + readonly __typename: 'QuizCompletedPayload'; + readonly errors: ReadonlyArray; + readonly quiz?: Maybe; +}; + +export type RealtimePrice = { + readonly __typename: 'RealtimePrice'; + readonly btcSatPrice: PriceOfOneSatInMinorUnit; + readonly denominatorCurrency: Scalars['DisplayCurrency']['output']; + readonly id: Scalars['ID']['output']; + /** Unix timestamp (number of seconds elapsed since January 1, 1970 00:00:00 UTC) */ + readonly timestamp: Scalars['Timestamp']['output']; + readonly usdCentPrice: PriceOfOneUsdCentInMinorUnit; +}; + +export type RealtimePriceInput = { + readonly currency?: InputMaybe; +}; + +export type RealtimePricePayload = { + readonly __typename: 'RealtimePricePayload'; + readonly errors: ReadonlyArray; + readonly realtimePrice?: Maybe; +}; + +export type SatAmountPayload = { + readonly __typename: 'SatAmountPayload'; + readonly amount?: Maybe; + readonly errors: ReadonlyArray; +}; + +export type SettlementVia = SettlementViaIntraLedger | SettlementViaLn | SettlementViaOnChain; + +export type SettlementViaIntraLedger = { + readonly __typename: 'SettlementViaIntraLedger'; + /** Settlement destination: Could be null if the payee does not have a username */ + readonly counterPartyUsername?: Maybe; + readonly counterPartyWalletId?: Maybe; + readonly preImage?: Maybe; +}; + +export type SettlementViaLn = { + readonly __typename: 'SettlementViaLn'; + /** @deprecated Shifting property to 'preImage' to improve granularity of the LnPaymentSecret type */ + readonly paymentSecret?: Maybe; + readonly preImage?: Maybe; +}; + +export type SettlementViaOnChain = { + readonly __typename: 'SettlementViaOnChain'; + readonly arrivalInMempoolEstimatedAt?: Maybe; + readonly transactionHash?: Maybe; + readonly vout?: Maybe; +}; + +export type Subscription = { + readonly __typename: 'Subscription'; + readonly lnInvoicePaymentStatus: LnInvoicePaymentStatusPayload; + readonly myUpdates: MyUpdatesPayload; + readonly price: PricePayload; + /** Returns the price of 1 satoshi */ + readonly realtimePrice: RealtimePricePayload; +}; + + +export type SubscriptionLnInvoicePaymentStatusArgs = { + input: LnInvoicePaymentStatusInput; +}; + + +export type SubscriptionPriceArgs = { + input: PriceInput; +}; + + +export type SubscriptionRealtimePriceArgs = { + input: RealtimePriceInput; +}; + +export type SuccessPayload = { + readonly __typename: 'SuccessPayload'; + readonly errors: ReadonlyArray; + readonly success?: Maybe; +}; + +/** + * Give details about an individual transaction. + * Galoy have a smart routing system which is automatically + * settling intraledger when both the payer and payee use the same wallet + * therefore it's possible the transactions is being initiated onchain + * or with lightning but settled intraledger. + */ +export type Transaction = { + readonly __typename: 'Transaction'; + readonly createdAt: Scalars['Timestamp']['output']; + readonly direction: TxDirection; + readonly id: Scalars['ID']['output']; + /** From which protocol the payment has been initiated. */ + readonly initiationVia: InitiationVia; + readonly memo?: Maybe; + /** Amount of the settlement currency sent or received. */ + readonly settlementAmount: Scalars['SignedAmount']['output']; + /** Wallet currency for transaction. */ + readonly settlementCurrency: WalletCurrency; + readonly settlementDisplayAmount: Scalars['SignedDisplayMajorAmount']['output']; + readonly settlementDisplayCurrency: Scalars['DisplayCurrency']['output']; + readonly settlementDisplayFee: Scalars['SignedDisplayMajorAmount']['output']; + readonly settlementFee: Scalars['SignedAmount']['output']; + /** Price in WALLETCURRENCY/SETTLEMENTUNIT at time of settlement. */ + readonly settlementPrice: PriceOfOneSettlementMinorUnitInDisplayMinorUnit; + /** To which protocol the payment has settled on. */ + readonly settlementVia: SettlementVia; + readonly status: TxStatus; +}; + +/** A connection to a list of items. */ +export type TransactionConnection = { + readonly __typename: 'TransactionConnection'; + /** A list of edges. */ + readonly edges?: Maybe>; + /** Information to aid in pagination. */ + readonly pageInfo: PageInfo; +}; + +/** An edge in a connection. */ +export type TransactionEdge = { + readonly __typename: 'TransactionEdge'; + /** A cursor for use in pagination */ + readonly cursor: Scalars['String']['output']; + /** The item at the end of the edge */ + readonly node: Transaction; +}; + +export const TxDirection = { + Receive: 'RECEIVE', + Send: 'SEND' +} as const; + +export type TxDirection = typeof TxDirection[keyof typeof TxDirection]; +export const TxNotificationType = { + IntraLedgerPayment: 'IntraLedgerPayment', + IntraLedgerReceipt: 'IntraLedgerReceipt', + LigtningReceipt: 'LigtningReceipt', + OnchainPayment: 'OnchainPayment', + OnchainReceipt: 'OnchainReceipt', + OnchainReceiptPending: 'OnchainReceiptPending' +} as const; + +export type TxNotificationType = typeof TxNotificationType[keyof typeof TxNotificationType]; +export const TxStatus = { + Failure: 'FAILURE', + Pending: 'PENDING', + Success: 'SUCCESS' +} as const; + +export type TxStatus = typeof TxStatus[keyof typeof TxStatus]; +export type UpgradePayload = { + readonly __typename: 'UpgradePayload'; + readonly authToken?: Maybe; + readonly errors: ReadonlyArray; + readonly success: Scalars['Boolean']['output']; +}; + +/** A wallet belonging to an account which contains a USD balance and a list of transactions. */ +export type UsdWallet = Wallet & { + readonly __typename: 'UsdWallet'; + readonly accountId: Scalars['ID']['output']; + readonly balance: Scalars['SignedAmount']['output']; + readonly id: Scalars['ID']['output']; + readonly invoiceByPaymentHash: Invoice; + /** A list of all invoices associated with walletIds optionally passed. */ + readonly invoices?: Maybe; + /** An unconfirmed incoming onchain balance. */ + readonly pendingIncomingBalance: Scalars['SignedAmount']['output']; + readonly pendingIncomingTransactions: ReadonlyArray; + readonly pendingIncomingTransactionsByAddress: ReadonlyArray; + readonly transactionById: Transaction; + readonly transactions?: Maybe; + readonly transactionsByAddress?: Maybe; + readonly transactionsByPaymentHash: ReadonlyArray; + readonly walletCurrency: WalletCurrency; +}; + + +/** A wallet belonging to an account which contains a USD balance and a list of transactions. */ +export type UsdWalletInvoiceByPaymentHashArgs = { + paymentHash: Scalars['PaymentHash']['input']; +}; + + +/** A wallet belonging to an account which contains a USD balance and a list of transactions. */ +export type UsdWalletInvoicesArgs = { + after?: InputMaybe; + before?: InputMaybe; + first?: InputMaybe; + last?: InputMaybe; +}; + + +/** A wallet belonging to an account which contains a USD balance and a list of transactions. */ +export type UsdWalletPendingIncomingTransactionsByAddressArgs = { + address: Scalars['OnChainAddress']['input']; +}; + + +/** A wallet belonging to an account which contains a USD balance and a list of transactions. */ +export type UsdWalletTransactionByIdArgs = { + transactionId: Scalars['ID']['input']; +}; + + +/** A wallet belonging to an account which contains a USD balance and a list of transactions. */ +export type UsdWalletTransactionsArgs = { + after?: InputMaybe; + before?: InputMaybe; + first?: InputMaybe; + last?: InputMaybe; +}; + + +/** A wallet belonging to an account which contains a USD balance and a list of transactions. */ +export type UsdWalletTransactionsByAddressArgs = { + address: Scalars['OnChainAddress']['input']; + after?: InputMaybe; + before?: InputMaybe; + first?: InputMaybe; + last?: InputMaybe; +}; + + +/** A wallet belonging to an account which contains a USD balance and a list of transactions. */ +export type UsdWalletTransactionsByPaymentHashArgs = { + paymentHash: Scalars['PaymentHash']['input']; +}; + +export type User = { + readonly __typename: 'User'; + readonly apiKeys: ReadonlyArray; + /** + * Get single contact details. + * Can include the transactions associated with the contact. + * @deprecated will be moved to Accounts + */ + readonly contactByUsername: UserContact; + /** + * Get full list of contacts. + * Can include the transactions associated with each contact. + * @deprecated will be moved to account + */ + readonly contacts: ReadonlyArray; + readonly createdAt: Scalars['Timestamp']['output']; + readonly defaultAccount: Account; + /** Email address */ + readonly email?: Maybe; + readonly id: Scalars['ID']['output']; + /** + * Preferred language for user. + * When value is 'default' the intent is to use preferred language from OS settings. + */ + readonly language: Scalars['Language']['output']; + readonly notificationSettings: UserNotificationSettings; + /** Phone number with international calling code. */ + readonly phone?: Maybe; + /** Whether TOTP is enabled for this user. */ + readonly totpEnabled: Scalars['Boolean']['output']; + /** + * Optional immutable user friendly identifier. + * @deprecated will be moved to @Handle in Account and Wallet + */ + readonly username?: Maybe; +}; + + +export type UserContactByUsernameArgs = { + username: Scalars['Username']['input']; +}; + +export type UserContact = { + readonly __typename: 'UserContact'; + /** + * Alias the user can set for this contact. + * Only the user can see the alias attached to their contact. + */ + readonly alias?: Maybe; + readonly id: Scalars['Username']['output']; + /** Paginated list of transactions sent to/from this contact. */ + readonly transactions?: Maybe; + readonly transactionsCount: Scalars['Int']['output']; + /** Actual identifier of the contact. */ + readonly username: Scalars['Username']['output']; +}; + + +export type UserContactTransactionsArgs = { + after?: InputMaybe; + before?: InputMaybe; + first?: InputMaybe; + last?: InputMaybe; +}; + +export type UserContactUpdateAliasInput = { + readonly alias: Scalars['ContactAlias']['input']; + readonly username: Scalars['Username']['input']; +}; + +export type UserContactUpdateAliasPayload = { + readonly __typename: 'UserContactUpdateAliasPayload'; + readonly contact?: Maybe; + readonly errors: ReadonlyArray; +}; + +export type UserDisableNotificationCategoryInput = { + readonly category: UserNotificationCategory; + readonly channel: UserNotificationChannel; +}; + +export type UserDisableNotificationChannelInput = { + readonly channel: UserNotificationChannel; +}; + +export type UserEmailDeletePayload = { + readonly __typename: 'UserEmailDeletePayload'; + readonly errors: ReadonlyArray; + readonly me?: Maybe; +}; + +export type UserEmailRegistrationInitiateInput = { + readonly email: Scalars['EmailAddress']['input']; +}; + +export type UserEmailRegistrationInitiatePayload = { + readonly __typename: 'UserEmailRegistrationInitiatePayload'; + readonly emailRegistrationId?: Maybe; + readonly errors: ReadonlyArray; + readonly me?: Maybe; +}; + +export type UserEmailRegistrationValidateInput = { + readonly code: Scalars['OneTimeAuthCode']['input']; + readonly emailRegistrationId: Scalars['EmailRegistrationId']['input']; +}; + +export type UserEmailRegistrationValidatePayload = { + readonly __typename: 'UserEmailRegistrationValidatePayload'; + readonly errors: ReadonlyArray; + readonly me?: Maybe; +}; + +export type UserEnableNotificationCategoryInput = { + readonly category: UserNotificationCategory; + readonly channel: UserNotificationChannel; +}; + +export type UserEnableNotificationChannelInput = { + readonly channel: UserNotificationChannel; +}; + +export type UserLoginInput = { + readonly code: Scalars['OneTimeAuthCode']['input']; + readonly phone: Scalars['Phone']['input']; +}; + +export type UserLoginUpgradeInput = { + readonly code: Scalars['OneTimeAuthCode']['input']; + readonly phone: Scalars['Phone']['input']; +}; + +export type UserLogoutInput = { + readonly deviceToken: Scalars['String']['input']; +}; + +export const UserNotificationCategory = { + AdminNotification: 'ADMIN_NOTIFICATION', + Balance: 'BALANCE', + Circles: 'CIRCLES', + Payments: 'PAYMENTS' +} as const; + +export type UserNotificationCategory = typeof UserNotificationCategory[keyof typeof UserNotificationCategory]; +export const UserNotificationChannel = { + Push: 'PUSH' +} as const; + +export type UserNotificationChannel = typeof UserNotificationChannel[keyof typeof UserNotificationChannel]; +export type UserNotificationChannelSettings = { + readonly __typename: 'UserNotificationChannelSettings'; + readonly disabledCategories: ReadonlyArray; + readonly enabled: Scalars['Boolean']['output']; +}; + +export type UserNotificationSettings = { + readonly __typename: 'UserNotificationSettings'; + readonly push: UserNotificationChannelSettings; +}; + +export type UserPhoneDeletePayload = { + readonly __typename: 'UserPhoneDeletePayload'; + readonly errors: ReadonlyArray; + readonly me?: Maybe; +}; + +export type UserPhoneRegistrationInitiateInput = { + readonly channel?: InputMaybe; + readonly phone: Scalars['Phone']['input']; +}; + +export type UserPhoneRegistrationValidateInput = { + readonly code: Scalars['OneTimeAuthCode']['input']; + readonly phone: Scalars['Phone']['input']; +}; + +export type UserPhoneRegistrationValidatePayload = { + readonly __typename: 'UserPhoneRegistrationValidatePayload'; + readonly errors: ReadonlyArray; + readonly me?: Maybe; +}; + +export type UserTotpDeletePayload = { + readonly __typename: 'UserTotpDeletePayload'; + readonly errors: ReadonlyArray; + readonly me?: Maybe; +}; + +export type UserTotpRegistrationInitiatePayload = { + readonly __typename: 'UserTotpRegistrationInitiatePayload'; + readonly errors: ReadonlyArray; + readonly totpRegistrationId?: Maybe; + readonly totpSecret?: Maybe; +}; + +export type UserTotpRegistrationValidateInput = { + readonly authToken?: InputMaybe; + readonly totpCode: Scalars['TotpCode']['input']; + readonly totpRegistrationId: Scalars['TotpRegistrationId']['input']; +}; + +export type UserTotpRegistrationValidatePayload = { + readonly __typename: 'UserTotpRegistrationValidatePayload'; + readonly errors: ReadonlyArray; + readonly me?: Maybe; +}; + +export type UserUpdate = IntraLedgerUpdate | LnUpdate | OnChainUpdate | Price | RealtimePrice; + +export type UserUpdateLanguageInput = { + readonly language: Scalars['Language']['input']; +}; + +export type UserUpdateLanguagePayload = { + readonly __typename: 'UserUpdateLanguagePayload'; + readonly errors: ReadonlyArray; + readonly user?: Maybe; +}; + +export type UserUpdateNotificationSettingsPayload = { + readonly __typename: 'UserUpdateNotificationSettingsPayload'; + readonly notificationSettings: UserNotificationSettings; +}; + +export type UserUpdateUsernameInput = { + readonly username: Scalars['Username']['input']; +}; + +export type UserUpdateUsernamePayload = { + readonly __typename: 'UserUpdateUsernamePayload'; + readonly errors: ReadonlyArray; + readonly user?: Maybe; +}; + +/** A generic wallet which stores value in one of our supported currencies. */ +export type Wallet = { + readonly accountId: Scalars['ID']['output']; + readonly balance: Scalars['SignedAmount']['output']; + readonly id: Scalars['ID']['output']; + readonly invoiceByPaymentHash: Invoice; + readonly invoices?: Maybe; + readonly pendingIncomingBalance: Scalars['SignedAmount']['output']; + /** + * Pending incoming OnChain transactions. When transactions + * are confirmed they will receive a new id and be found in the transactions + * list. Transactions are ordered anti-chronologically, + * ie: the newest transaction will be first + */ + readonly pendingIncomingTransactions: ReadonlyArray; + /** + * Pending incoming OnChain transactions. When transactions + * are confirmed they will receive a new id and be found in the transactions + * list. Transactions are ordered anti-chronologically, + * ie: the newest transaction will be first + */ + readonly pendingIncomingTransactionsByAddress: ReadonlyArray; + readonly transactionById: Transaction; + /** + * Transactions are ordered anti-chronologically, + * ie: the newest transaction will be first + */ + readonly transactions?: Maybe; + /** + * Transactions are ordered anti-chronologically, + * ie: the newest transaction will be first + */ + readonly transactionsByAddress?: Maybe; + /** Returns the transactions that include this paymentHash. This should be a list of size one for a received lightning payment. This can be more that one transaction for a sent lightning payment. */ + readonly transactionsByPaymentHash: ReadonlyArray; + readonly walletCurrency: WalletCurrency; +}; + + +/** A generic wallet which stores value in one of our supported currencies. */ +export type WalletInvoiceByPaymentHashArgs = { + paymentHash: Scalars['PaymentHash']['input']; +}; + + +/** A generic wallet which stores value in one of our supported currencies. */ +export type WalletInvoicesArgs = { + after?: InputMaybe; + before?: InputMaybe; + first?: InputMaybe; + last?: InputMaybe; +}; + + +/** A generic wallet which stores value in one of our supported currencies. */ +export type WalletPendingIncomingTransactionsByAddressArgs = { + address: Scalars['OnChainAddress']['input']; +}; + + +/** A generic wallet which stores value in one of our supported currencies. */ +export type WalletTransactionByIdArgs = { + transactionId: Scalars['ID']['input']; +}; + + +/** A generic wallet which stores value in one of our supported currencies. */ +export type WalletTransactionsArgs = { + after?: InputMaybe; + before?: InputMaybe; + first?: InputMaybe; + last?: InputMaybe; +}; + + +/** A generic wallet which stores value in one of our supported currencies. */ +export type WalletTransactionsByAddressArgs = { + address: Scalars['OnChainAddress']['input']; + after?: InputMaybe; + before?: InputMaybe; + first?: InputMaybe; + last?: InputMaybe; +}; + + +/** A generic wallet which stores value in one of our supported currencies. */ +export type WalletTransactionsByPaymentHashArgs = { + paymentHash: Scalars['PaymentHash']['input']; +}; + +export const WalletCurrency = { + Btc: 'BTC', + Usd: 'USD' +} as const; + +export type WalletCurrency = typeof WalletCurrency[keyof typeof WalletCurrency]; +export type BusinessMapMarkersQueryVariables = Exact<{ [key: string]: never; }>; + + +export type BusinessMapMarkersQuery = { readonly __typename: 'Query', readonly businessMapMarkers: ReadonlyArray<{ readonly __typename: 'MapMarker', readonly username: string, readonly mapInfo: { readonly __typename: 'MapInfo', readonly title: string, readonly coordinates: { readonly __typename: 'Coordinates', readonly latitude: number, readonly longitude: number } } }> }; + + +export const BusinessMapMarkersDocument = gql` + query BusinessMapMarkers { + businessMapMarkers { + username + mapInfo { + title + coordinates { + latitude + longitude + } + } + } +} + `; + +/** + * __useBusinessMapMarkersQuery__ + * + * To run a query within a React component, call `useBusinessMapMarkersQuery` and pass it any options that fit your needs. + * When your component renders, `useBusinessMapMarkersQuery` returns an object from Apollo Client that contains loading, error, and data properties + * you can use to render your UI. + * + * @param baseOptions options that will be passed into the query, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options; + * + * @example + * const { data, loading, error } = useBusinessMapMarkersQuery({ + * variables: { + * }, + * }); + */ +export function useBusinessMapMarkersQuery(baseOptions?: Apollo.QueryHookOptions) { + const options = {...defaultOptions, ...baseOptions} + return Apollo.useQuery(BusinessMapMarkersDocument, options); + } +export function useBusinessMapMarkersLazyQuery(baseOptions?: Apollo.LazyQueryHookOptions) { + const options = {...defaultOptions, ...baseOptions} + return Apollo.useLazyQuery(BusinessMapMarkersDocument, options); + } +export function useBusinessMapMarkersSuspenseQuery(baseOptions?: Apollo.SuspenseQueryHookOptions) { + const options = {...defaultOptions, ...baseOptions} + return Apollo.useSuspenseQuery(BusinessMapMarkersDocument, options); + } +export type BusinessMapMarkersQueryHookResult = ReturnType; +export type BusinessMapMarkersLazyQueryHookResult = ReturnType; +export type BusinessMapMarkersSuspenseQueryHookResult = ReturnType; +export type BusinessMapMarkersQueryResult = Apollo.QueryResult; \ No newline at end of file diff --git a/apps/blink-map/services/galoy/graphql/queries/business-map-marker.ts b/apps/blink-map/services/galoy/graphql/queries/business-map-marker.ts new file mode 100644 index 0000000000..c5fef4a21c --- /dev/null +++ b/apps/blink-map/services/galoy/graphql/queries/business-map-marker.ts @@ -0,0 +1,37 @@ +import { gql } from "@apollo/client" +import { apolloClient } from "../client" +import { BusinessMapMarkersDocument, BusinessMapMarkersQuery } from "../generated" + +gql` + query BusinessMapMarkers { + businessMapMarkers { + username + mapInfo { + title + coordinates { + latitude + longitude + } + } + } + } +` + +export async function businessMapMarkers(): Promise< + BusinessMapMarkersQuery["businessMapMarkers"] | Error +> { + const client = apolloClient.UnAuthed() + try { + const response = await client.query({ + query: BusinessMapMarkersDocument, + }) + return response.data.businessMapMarkers || [] + } catch (err) { + console.error("error while fetching businessMapMarkers", err) + if (err instanceof Error) { + return Error(err.message) + } else { + return Error("Unknown error") + } + } +} diff --git a/apps/blink-map/tailwind.config.ts b/apps/blink-map/tailwind.config.ts new file mode 100644 index 0000000000..7e4bd91a03 --- /dev/null +++ b/apps/blink-map/tailwind.config.ts @@ -0,0 +1,20 @@ +import type { Config } from "tailwindcss"; + +const config: Config = { + content: [ + "./pages/**/*.{js,ts,jsx,tsx,mdx}", + "./components/**/*.{js,ts,jsx,tsx,mdx}", + "./app/**/*.{js,ts,jsx,tsx,mdx}", + ], + theme: { + extend: { + backgroundImage: { + "gradient-radial": "radial-gradient(var(--tw-gradient-stops))", + "gradient-conic": + "conic-gradient(from 180deg at 50% 50%, var(--tw-gradient-stops))", + }, + }, + }, + plugins: [], +}; +export default config; diff --git a/apps/blink-map/tsconfig.json b/apps/blink-map/tsconfig.json new file mode 100644 index 0000000000..1acc22260a --- /dev/null +++ b/apps/blink-map/tsconfig.json @@ -0,0 +1,27 @@ +{ + "compilerOptions": { + "target": "es5", + "lib": ["dom", "dom.iterable", "esnext"], + "allowJs": true, + "skipLibCheck": true, + "strict": true, + "noEmit": true, + "esModuleInterop": true, + "module": "esnext", + "moduleResolution": "node", + "resolveJsonModule": true, + "isolatedModules": true, + "jsx": "preserve", + "incremental": true, + "plugins": [ + { + "name": "next" + } + ], + "paths": { + "@/*": ["./*"] + } + }, + "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"], + "exclude": ["node_modules"] +} diff --git a/apps/map/next-env.d.ts b/apps/map/next-env.d.ts new file mode 100644 index 0000000000..4f11a03dc6 --- /dev/null +++ b/apps/map/next-env.d.ts @@ -0,0 +1,5 @@ +/// +/// + +// NOTE: This file should not be edited +// see https://nextjs.org/docs/basic-features/typescript for more information. diff --git a/ci/apps/app-template.lib.yml b/ci/apps/app-template.lib.yml index a0fb11c501..e5fdfc0154 100644 --- a/ci/apps/app-template.lib.yml +++ b/ci/apps/app-template.lib.yml @@ -196,6 +196,10 @@ plan: #@ "YAML_PATH": ".image.digest", #@ "CHART": "admin-panel" #@ } +#@ "blink-map": { +#@ "YAML_PATH": ".image.digest", +#@ "CHART": "blink-map" +#@ } #@ } name: #@ bump_image_in_chart_name(app) serial: true diff --git a/ci/apps/pipeline.yml b/ci/apps/pipeline.yml index 0e724e0f69..093493d2de 100644 --- a/ci/apps/pipeline.yml +++ b/ci/apps/pipeline.yml @@ -12,7 +12,7 @@ #@ "bump_image_in_chart_name", #@ "bump_image_in_chart") -#@ apps = ["consent", "dashboard", "pay", "admin-panel"] +#@ apps = ["consent", "dashboard", "pay", "admin-panel", "blink-map"] groups: - name: all diff --git a/dev/Tiltfile b/dev/Tiltfile index 2637b4c7f4..be582562f0 100644 --- a/dev/Tiltfile +++ b/dev/Tiltfile @@ -7,6 +7,7 @@ CONSENT_TEST_LABEL = "consent" DASHBOARD_TEST_LABEL = "dashboard" PAY_TEST_LABEL = "pay" ADMIN_PANEL_TEST_LABEL = "admin-panel" +BLINK_MAP_TEST_LABEL = "blink-map" TEST_RESOURCES = { CORE_TEST_LABEL: "test-api", @@ -126,6 +127,31 @@ local_resource( ], ) +blink_map_target = "//apps/blink-map:dev" +if is_ci: + blink_map_target = '//apps/blink-map:blink-map' +blink_map_env = { + "PORT": "3005", + "CORE_URL" : "http://localhost:4455/graphql", +} +local_resource( + "blink-map", + labels = ["apps"], + cmd = "buck2 build {}".format(blink_map_target), + serve_cmd = "buck2 run {}".format(blink_map_target), + env = blink_map_env, + serve_env = blink_map_env, + deps = _buck2_dep_inputs(blink_map_target), + allow_parallel = True, + resource_deps = [ + "api", + "apollo-router", + ], + links = [ + link("http://localhost:3005", "blink-map"), + ], +) + local_resource( name='hydra-dashboard', labels = ['apps'], @@ -196,6 +222,17 @@ local_resource( ], ) +blink_map_test_target = "//apps/blink-map:test-integration" +local_resource( + "blink-map-test", + labels = ["test"], + auto_init = is_ci and BLINK_MAP_TEST_LABEL in cfg.get("test", []), + cmd = "buck2 test {}".format(blink_map_test_target), + resource_deps = [ + "blink-map", + ], +) + local_resource( name='init-test-user', labels = ['test'], diff --git a/flake.nix b/flake.nix index 7211bd9ebb..6b5f59c44f 100644 --- a/flake.nix +++ b/flake.nix @@ -229,6 +229,7 @@ dashboard = nextDerivation {pkgName = "dashboard";}; pay = nextDerivation {pkgName = "pay";}; admin-panel = nextDerivation {pkgName = "admin-panel";}; + blink-map = nextDerivation {pkgName = "blink-map";}; api-keys = rustDerivation {pkgName = "api-keys";}; notifications = rustDerivation {pkgName = "notifications";}; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 1c59d1e80d..2bd8094c1e 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -149,6 +149,118 @@ importers: specifier: ^29.1.1 version: 29.1.2(@babel/core@7.23.9)(jest@29.7.0)(typescript@5.2.2) + apps/blink-map: + dependencies: + '@apollo/client': + specifier: ^3.9.2 + version: 3.9.2(@types/react@18.2.48)(graphql@16.8.1)(react-dom@18.2.0)(react@18.2.0) + '@opentelemetry/api': + specifier: ^1.7.0 + version: 1.7.0 + '@opentelemetry/core': + specifier: 1.18.1 + version: 1.18.1(@opentelemetry/api@1.7.0) + '@opentelemetry/exporter-trace-otlp-http': + specifier: ^0.45.1 + version: 0.45.1(@opentelemetry/api@1.7.0) + '@opentelemetry/instrumentation-graphql': + specifier: ^0.36.0 + version: 0.36.1(@opentelemetry/api@1.7.0) + '@opentelemetry/instrumentation-http': + specifier: ^0.45.1 + version: 0.45.1(@opentelemetry/api@1.7.0) + '@opentelemetry/instrumentation-net': + specifier: ^0.32.4 + version: 0.32.5(@opentelemetry/api@1.7.0) + '@opentelemetry/resources': + specifier: ^1.18.1 + version: 1.21.0(@opentelemetry/api@1.7.0) + '@opentelemetry/sdk-node': + specifier: ^0.45.1 + version: 0.45.1(@opentelemetry/api@1.7.0) + '@opentelemetry/sdk-trace-node': + specifier: ^1.18.1 + version: 1.21.0(@opentelemetry/api@1.7.0) + '@opentelemetry/semantic-conventions': + specifier: ^1.18.1 + version: 1.21.0 + '@react-google-maps/api': + specifier: ^2.19.2 + version: 2.19.2(react-dom@18.2.0)(react@18.2.0) + '@t3-oss/env-nextjs': + specifier: ^0.8.0 + version: 0.8.0(typescript@5.3.3)(zod@3.22.4) + graphql: + specifier: ^16.8.1 + version: 16.8.1 + next: + specifier: 14.1.0 + version: 14.1.0(@babel/core@7.23.9)(@opentelemetry/api@1.7.0)(react-dom@18.2.0)(react@18.2.0) + react: + specifier: ^18 + version: 18.2.0 + react-dom: + specifier: ^18 + version: 18.2.0(react@18.2.0) + zod: + specifier: ^3.22.4 + version: 3.22.4 + devDependencies: + '@galoy/eslint-config': + specifier: workspace:^ + version: link:../../lib/eslint-config + '@graphql-codegen/add': + specifier: ^5.0.0 + version: 5.0.0(graphql@16.8.1) + '@graphql-codegen/cli': + specifier: ^5.0.0 + version: 5.0.0(@types/node@20.11.5)(graphql@16.8.1)(typescript@5.3.3) + '@graphql-codegen/client-preset': + specifier: ^4.1.0 + version: 4.1.0(graphql@16.8.1) + '@graphql-codegen/typescript': + specifier: ^4.0.1 + version: 4.0.1(graphql@16.8.1) + '@graphql-codegen/typescript-operations': + specifier: ^4.0.1 + version: 4.0.1(graphql@16.8.1) + '@graphql-codegen/typescript-react-apollo': + specifier: ^4.1.0 + version: 4.1.0(graphql-tag@2.12.6)(graphql@16.8.1) + '@graphql-codegen/typescript-resolvers': + specifier: ^4.0.1 + version: 4.0.1(graphql@16.8.1) + '@graphql-inspector/cli': + specifier: ^4.0.3 + version: 4.0.3(@types/node@20.11.5)(graphql@16.8.1) + '@types/node': + specifier: ^20 + version: 20.11.5 + '@types/react': + specifier: ^18 + version: 18.2.48 + '@types/react-dom': + specifier: ^18 + version: 18.2.18 + autoprefixer: + specifier: ^10.0.1 + version: 10.4.16(postcss@8.4.32) + eslint: + specifier: ^8 + version: 8.56.0 + eslint-config-next: + specifier: 14.1.0 + version: 14.1.0(eslint@8.56.0)(typescript@5.3.3) + postcss: + specifier: ^8 + version: 8.4.32 + tailwindcss: + specifier: ^3.3.0 + version: 3.4.1 + typescript: + specifier: ^5 + version: 5.3.3 + apps/consent: dependencies: '@apollo/client': @@ -1383,6 +1495,45 @@ packages: zen-observable-ts: 1.2.5 dev: false + /@apollo/client@3.9.2(@types/react@18.2.48)(graphql@16.8.1)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-Zw9WvXjqhpbgkvAvnj52vstOWwM0iedKWtn1hSq1cODQyoe1CF2uFwMYFI7l56BrAY9CzLi6MQA0AhxpgJgvxw==} + peerDependencies: + graphql: ^15.0.0 || ^16.0.0 + graphql-ws: ^5.5.5 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 + subscriptions-transport-ws: ^0.9.0 || ^0.11.0 + peerDependenciesMeta: + graphql-ws: + optional: true + react: + optional: true + react-dom: + optional: true + subscriptions-transport-ws: + optional: true + dependencies: + '@graphql-typed-document-node/core': 3.2.0(graphql@16.8.1) + '@wry/caches': 1.0.1 + '@wry/equality': 0.5.7 + '@wry/trie': 0.5.0 + graphql: 16.8.1 + graphql-tag: 2.12.6(graphql@16.8.1) + hoist-non-react-statics: 3.3.2 + optimism: 0.18.0 + prop-types: 15.8.1 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + rehackt: 0.0.3(@types/react@18.2.48)(react@18.2.0) + response-iterator: 0.2.6 + symbol-observable: 4.0.0 + ts-invariant: 0.10.3 + tslib: 2.6.2 + zen-observable-ts: 1.2.5 + transitivePeerDependencies: + - '@types/react' + dev: false + /@apollo/experimental-nextjs-app-support@0.5.2(@apollo/client@3.8.8)(next@14.0.4)(react@18.2.0): resolution: {integrity: sha512-qUopCHDocCBfL+XDhuPNwiWrJHf7rc75bdDBF2TxZyYwW32wo3vPPac6bGWrYy8lgkJ8K8Z5O56655WQOynFTg==} peerDependencies: @@ -2382,16 +2533,6 @@ packages: semver: 6.3.1 dev: true - /@babel/generator@7.23.0: - resolution: {integrity: sha512-lN85QRR+5IbYrMWM6Y4pE/noaQtg4pNiqeNGX60eqOfo6gtEj6uw/JagelB8vVztSd7R6M5n1+PQkDbHbBRU4g==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.23.0 - '@jridgewell/gen-mapping': 0.3.3 - '@jridgewell/trace-mapping': 0.3.19 - jsesc: 2.5.2 - dev: true - /@babel/generator@7.23.5: resolution: {integrity: sha512-BPssCHrBD+0YrxviOa3QzpqwhNIXKEtOa2jQrm4FlmkC2apYgRnQcmPWiGZDlGxiNtltnUFolMe8497Esry+jA==} engines: {node: '>=6.9.0'} @@ -5913,6 +6054,19 @@ packages: - supports-color dev: false + /@googlemaps/js-api-loader@1.16.2: + resolution: {integrity: sha512-psGw5u0QM6humao48Hn4lrChOM2/rA43ZCm3tKK9qQsEj1/VzqkCqnvGfEOshDbBQflydfaRovbKwZMF4AyqbA==} + dependencies: + fast-deep-equal: 3.1.3 + dev: false + + /@googlemaps/markerclusterer@2.3.2: + resolution: {integrity: sha512-zb9OQP8XscZp2Npt1uQUYnGKu1miuq4DPP28JyDuFd6HV17HCEcjV9MtBi4muG/iVRXXvuHW9bRCnHbao9ITfw==} + dependencies: + fast-deep-equal: 3.1.3 + supercluster: 8.0.1 + dev: false + /@graphql-codegen/add@4.0.1(graphql@16.8.1): resolution: {integrity: sha512-A7k+9eRfrKyyNfhWEN/0eKz09R5cp4XXxUuNLQAVm/aohmVI2xdMV4lM02rTlM6Pyou3cU/v0iZnhgo6IRpqeg==} peerDependencies: @@ -5996,9 +6150,9 @@ packages: '@parcel/watcher': optional: true dependencies: - '@babel/generator': 7.23.0 + '@babel/generator': 7.23.6 '@babel/template': 7.22.15 - '@babel/types': 7.23.0 + '@babel/types': 7.23.6 '@graphql-codegen/core': 4.0.0(graphql@16.8.1) '@graphql-codegen/plugin-helpers': 5.0.1(graphql@16.8.1) '@graphql-tools/apollo-engine-loader': 8.0.0(graphql@16.8.1) @@ -6010,7 +6164,7 @@ packages: '@graphql-tools/load': 8.0.0(graphql@16.8.1) '@graphql-tools/prisma-loader': 8.0.1(@types/node@20.10.4)(graphql@16.8.1) '@graphql-tools/url-loader': 8.0.0(@types/node@20.10.4)(graphql@16.8.1) - '@graphql-tools/utils': 10.0.6(graphql@16.8.1) + '@graphql-tools/utils': 10.0.11(graphql@16.8.1) '@whatwg-node/fetch': 0.8.8 chalk: 4.1.2 cosmiconfig: 8.3.6(typescript@5.3.3) @@ -6029,7 +6183,63 @@ packages: string-env-interpolation: 1.0.1 ts-log: 2.2.5 tslib: 2.6.2 - yaml: 2.3.2 + yaml: 2.3.4 + yargs: 17.7.2 + transitivePeerDependencies: + - '@types/node' + - bufferutil + - cosmiconfig-toml-loader + - encoding + - enquirer + - supports-color + - typescript + - utf-8-validate + dev: true + + /@graphql-codegen/cli@5.0.0(@types/node@20.11.5)(graphql@16.8.1)(typescript@5.3.3): + resolution: {integrity: sha512-A7J7+be/a6e+/ul2KI5sfJlpoqeqwX8EzktaKCeduyVKgOLA6W5t+NUGf6QumBDXU8PEOqXk3o3F+RAwCWOiqA==} + hasBin: true + peerDependencies: + '@parcel/watcher': ^2.1.0 + graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 + peerDependenciesMeta: + '@parcel/watcher': + optional: true + dependencies: + '@babel/generator': 7.23.6 + '@babel/template': 7.22.15 + '@babel/types': 7.23.6 + '@graphql-codegen/core': 4.0.0(graphql@16.8.1) + '@graphql-codegen/plugin-helpers': 5.0.1(graphql@16.8.1) + '@graphql-tools/apollo-engine-loader': 8.0.0(graphql@16.8.1) + '@graphql-tools/code-file-loader': 8.0.2(graphql@16.8.1) + '@graphql-tools/git-loader': 8.0.2(graphql@16.8.1) + '@graphql-tools/github-loader': 8.0.0(@types/node@20.11.5)(graphql@16.8.1) + '@graphql-tools/graphql-file-loader': 8.0.0(graphql@16.8.1) + '@graphql-tools/json-file-loader': 8.0.0(graphql@16.8.1) + '@graphql-tools/load': 8.0.0(graphql@16.8.1) + '@graphql-tools/prisma-loader': 8.0.1(@types/node@20.11.5)(graphql@16.8.1) + '@graphql-tools/url-loader': 8.0.0(@types/node@20.11.5)(graphql@16.8.1) + '@graphql-tools/utils': 10.0.11(graphql@16.8.1) + '@whatwg-node/fetch': 0.8.8 + chalk: 4.1.2 + cosmiconfig: 8.3.6(typescript@5.3.3) + debounce: 1.2.1 + detect-indent: 6.1.0 + graphql: 16.8.1 + graphql-config: 5.0.3(@types/node@20.11.5)(graphql@16.8.1)(typescript@5.3.3) + inquirer: 8.2.6 + is-glob: 4.0.3 + jiti: 1.20.0 + json-to-pretty-yaml: 1.2.2 + listr2: 4.0.5 + log-symbols: 4.1.0 + micromatch: 4.0.5 + shell-quote: 1.8.1 + string-env-interpolation: 1.0.1 + ts-log: 2.2.5 + tslib: 2.6.2 + yaml: 2.3.4 yargs: 17.7.2 transitivePeerDependencies: - '@types/node' @@ -6492,6 +6702,42 @@ packages: - utf-8-validate dev: true + /@graphql-inspector/cli@4.0.3(@types/node@20.11.5)(graphql@16.8.1): + resolution: {integrity: sha512-54pJ/SkFGz/qKEP2sjiCqxTG6QkWSzG4NdfKqhlinQstlyCgtbmgwgh90fUPoG6yOgZZhcsiSJXHkz255kRu4w==} + engines: {node: '>=16.0.0'} + hasBin: true + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 + dependencies: + '@babel/core': 7.22.9 + '@graphql-inspector/audit-command': 4.0.3(@graphql-inspector/config@4.0.2)(@graphql-inspector/loaders@4.0.3)(graphql@16.8.1)(yargs@17.7.2) + '@graphql-inspector/code-loader': 4.0.2(@babel/core@7.22.9)(graphql@16.8.1) + '@graphql-inspector/commands': 4.0.3(@graphql-inspector/config@4.0.2)(@graphql-inspector/loaders@4.0.3)(graphql@16.8.1)(yargs@17.7.2) + '@graphql-inspector/config': 4.0.2(graphql@16.8.1) + '@graphql-inspector/coverage-command': 5.0.3(@graphql-inspector/config@4.0.2)(@graphql-inspector/loaders@4.0.3)(graphql@16.8.1)(yargs@17.7.2) + '@graphql-inspector/diff-command': 4.0.3(@graphql-inspector/config@4.0.2)(@graphql-inspector/loaders@4.0.3)(graphql@16.8.1)(yargs@17.7.2) + '@graphql-inspector/docs-command': 4.0.3(@graphql-inspector/config@4.0.2)(@graphql-inspector/loaders@4.0.3)(graphql@16.8.1)(yargs@17.7.2) + '@graphql-inspector/git-loader': 4.0.2(@babel/core@7.22.9)(graphql@16.8.1) + '@graphql-inspector/github-loader': 4.0.2(@types/node@20.11.5)(graphql@16.8.1) + '@graphql-inspector/graphql-loader': 4.0.2(graphql@16.8.1) + '@graphql-inspector/introspect-command': 4.0.3(@graphql-inspector/config@4.0.2)(@graphql-inspector/loaders@4.0.3)(graphql@16.8.1)(yargs@17.7.2) + '@graphql-inspector/json-loader': 4.0.2(graphql@16.8.1) + '@graphql-inspector/loaders': 4.0.3(@babel/core@7.23.9)(@graphql-inspector/config@4.0.2)(graphql@16.8.1) + '@graphql-inspector/serve-command': 4.0.3(@graphql-inspector/config@4.0.2)(@graphql-inspector/loaders@4.0.3)(graphql@16.8.1)(yargs@17.7.2) + '@graphql-inspector/similar-command': 4.0.3(@graphql-inspector/config@4.0.2)(@graphql-inspector/loaders@4.0.3)(graphql@16.8.1)(yargs@17.7.2) + '@graphql-inspector/url-loader': 4.0.2(@types/node@20.11.5)(graphql@16.8.1) + '@graphql-inspector/validate-command': 4.0.3(@graphql-inspector/config@4.0.2)(@graphql-inspector/loaders@4.0.3)(graphql@16.8.1)(yargs@17.7.2) + graphql: 16.8.1 + tslib: 2.6.2 + yargs: 17.7.2 + transitivePeerDependencies: + - '@types/node' + - bufferutil + - encoding + - supports-color + - utf-8-validate + dev: true + /@graphql-inspector/cli@4.0.3(@types/node@20.8.10)(graphql@16.8.1): resolution: {integrity: sha512-54pJ/SkFGz/qKEP2sjiCqxTG6QkWSzG4NdfKqhlinQstlyCgtbmgwgh90fUPoG6yOgZZhcsiSJXHkz255kRu4w==} engines: {node: '>=16.0.0'} @@ -6660,6 +6906,21 @@ packages: - supports-color dev: true + /@graphql-inspector/github-loader@4.0.2(@types/node@20.11.5)(graphql@16.8.1): + resolution: {integrity: sha512-SrOUjz1RppK5Vxj8fMoCN+i+yvzIj1ZnP+mNdLZIsms9ou6u0+h8NuE/KfANR5Z1VJIQGIifMONIv2eTx4SjCQ==} + engines: {node: '>=16.0.0'} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 + dependencies: + '@graphql-tools/github-loader': 8.0.0(@types/node@20.11.5)(graphql@16.8.1) + graphql: 16.8.1 + tslib: 2.6.2 + transitivePeerDependencies: + - '@types/node' + - encoding + - supports-color + dev: true + /@graphql-inspector/github-loader@4.0.2(@types/node@20.8.10)(graphql@16.8.1): resolution: {integrity: sha512-SrOUjz1RppK5Vxj8fMoCN+i+yvzIj1ZnP+mNdLZIsms9ou6u0+h8NuE/KfANR5Z1VJIQGIifMONIv2eTx4SjCQ==} engines: {node: '>=16.0.0'} @@ -6794,6 +7055,22 @@ packages: - utf-8-validate dev: true + /@graphql-inspector/url-loader@4.0.2(@types/node@20.11.5)(graphql@16.8.1): + resolution: {integrity: sha512-bor9yZ6PIW8Fc5swo8t5TeexiQS8nRySF3oF4iG8d/aYPh0e7/DYM3lGF4M7VY3lH760r3caIRXXNOnn79tBrw==} + engines: {node: '>=16.0.0'} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 + dependencies: + '@graphql-tools/url-loader': 8.0.0(@types/node@20.11.5)(graphql@16.8.1) + graphql: 16.8.1 + tslib: 2.6.2 + transitivePeerDependencies: + - '@types/node' + - bufferutil + - encoding + - utf-8-validate + dev: true + /@graphql-inspector/url-loader@4.0.2(@types/node@20.8.10)(graphql@16.8.1): resolution: {integrity: sha512-bor9yZ6PIW8Fc5swo8t5TeexiQS8nRySF3oF4iG8d/aYPh0e7/DYM3lGF4M7VY3lH760r3caIRXXNOnn79tBrw==} engines: {node: '>=16.0.0'} @@ -7087,6 +7364,24 @@ packages: - '@types/node' dev: true + /@graphql-tools/executor-http@1.0.3(@types/node@20.11.5)(graphql@16.8.1): + resolution: {integrity: sha512-5WZIMBevRaxMabZ8U2Ty0dTUPy/PpeYSlMNEmC/YJjKKykgSfc/AwSejx2sE4FFKZ0I2kxRKRenyoWMHRAV49Q==} + engines: {node: '>=16.0.0'} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + dependencies: + '@graphql-tools/utils': 10.0.6(graphql@16.8.1) + '@repeaterjs/repeater': 3.0.4 + '@whatwg-node/fetch': 0.9.13 + extract-files: 11.0.0 + graphql: 16.8.1 + meros: 1.3.0(@types/node@20.11.5) + tslib: 2.6.2 + value-or-promise: 1.0.12 + transitivePeerDependencies: + - '@types/node' + dev: true + /@graphql-tools/executor-http@1.0.3(@types/node@20.8.10)(graphql@16.8.1): resolution: {integrity: sha512-5WZIMBevRaxMabZ8U2Ty0dTUPy/PpeYSlMNEmC/YJjKKykgSfc/AwSejx2sE4FFKZ0I2kxRKRenyoWMHRAV49Q==} engines: {node: '>=16.0.0'} @@ -7257,6 +7552,26 @@ packages: - supports-color dev: true + /@graphql-tools/github-loader@8.0.0(@types/node@20.11.5)(graphql@16.8.1): + resolution: {integrity: sha512-VuroArWKcG4yaOWzV0r19ElVIV6iH6UKDQn1MXemND0xu5TzrFme0kf3U9o0YwNo0kUYEk9CyFM0BYg4he17FA==} + engines: {node: '>=16.0.0'} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + dependencies: + '@ardatan/sync-fetch': 0.0.1 + '@graphql-tools/executor-http': 1.0.3(@types/node@20.11.5)(graphql@16.8.1) + '@graphql-tools/graphql-tag-pluck': 8.0.2(graphql@16.8.1) + '@graphql-tools/utils': 10.0.6(graphql@16.8.1) + '@whatwg-node/fetch': 0.9.13 + graphql: 16.8.1 + tslib: 2.6.2 + value-or-promise: 1.0.12 + transitivePeerDependencies: + - '@types/node' + - encoding + - supports-color + dev: true + /@graphql-tools/github-loader@8.0.0(@types/node@20.8.10)(graphql@16.8.1): resolution: {integrity: sha512-VuroArWKcG4yaOWzV0r19ElVIV6iH6UKDQn1MXemND0xu5TzrFme0kf3U9o0YwNo0kUYEk9CyFM0BYg4he17FA==} engines: {node: '>=16.0.0'} @@ -7599,6 +7914,39 @@ packages: - utf-8-validate dev: true + /@graphql-tools/prisma-loader@8.0.1(@types/node@20.11.5)(graphql@16.8.1): + resolution: {integrity: sha512-bl6e5sAYe35Z6fEbgKXNrqRhXlCJYeWKBkarohgYA338/SD9eEhXtg3Cedj7fut3WyRLoQFpHzfiwxKs7XrgXg==} + engines: {node: '>=16.0.0'} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + dependencies: + '@graphql-tools/url-loader': 8.0.0(@types/node@20.11.5)(graphql@16.8.1) + '@graphql-tools/utils': 10.0.6(graphql@16.8.1) + '@types/js-yaml': 4.0.9 + '@types/json-stable-stringify': 1.0.34 + '@whatwg-node/fetch': 0.9.13 + chalk: 4.1.2 + debug: 4.3.4(supports-color@5.5.0) + dotenv: 16.3.1 + graphql: 16.8.1 + graphql-request: 6.1.0(graphql@16.8.1) + http-proxy-agent: 7.0.0 + https-proxy-agent: 7.0.2 + jose: 4.15.2 + js-yaml: 4.1.0 + json-stable-stringify: 1.0.2 + lodash: 4.17.21 + scuid: 1.1.0 + tslib: 2.6.2 + yaml-ast-parser: 0.0.43 + transitivePeerDependencies: + - '@types/node' + - bufferutil + - encoding + - supports-color + - utf-8-validate + dev: true + /@graphql-tools/prisma-loader@8.0.1(@types/node@20.8.10)(graphql@16.8.1): resolution: {integrity: sha512-bl6e5sAYe35Z6fEbgKXNrqRhXlCJYeWKBkarohgYA338/SD9eEhXtg3Cedj7fut3WyRLoQFpHzfiwxKs7XrgXg==} engines: {node: '>=16.0.0'} @@ -7763,6 +8111,33 @@ packages: - utf-8-validate dev: true + /@graphql-tools/url-loader@8.0.0(@types/node@20.11.5)(graphql@16.8.1): + resolution: {integrity: sha512-rPc9oDzMnycvz+X+wrN3PLrhMBQkG4+sd8EzaFN6dypcssiefgWKToXtRKI8HHK68n2xEq1PyrOpkjHFJB+GwA==} + engines: {node: '>=16.0.0'} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + dependencies: + '@ardatan/sync-fetch': 0.0.1 + '@graphql-tools/delegate': 10.0.3(graphql@16.8.1) + '@graphql-tools/executor-graphql-ws': 1.1.0(graphql@16.8.1) + '@graphql-tools/executor-http': 1.0.3(@types/node@20.11.5)(graphql@16.8.1) + '@graphql-tools/executor-legacy-ws': 1.0.4(graphql@16.8.1) + '@graphql-tools/utils': 10.0.11(graphql@16.8.1) + '@graphql-tools/wrap': 10.0.1(graphql@16.8.1) + '@types/ws': 8.5.10 + '@whatwg-node/fetch': 0.9.13 + graphql: 16.8.1 + isomorphic-ws: 5.0.0(ws@8.16.0) + tslib: 2.6.2 + value-or-promise: 1.0.12 + ws: 8.16.0 + transitivePeerDependencies: + - '@types/node' + - bufferutil + - encoding + - utf-8-validate + dev: true + /@graphql-tools/url-loader@8.0.0(@types/node@20.8.10)(graphql@16.8.1): resolution: {integrity: sha512-rPc9oDzMnycvz+X+wrN3PLrhMBQkG4+sd8EzaFN6dypcssiefgWKToXtRKI8HHK68n2xEq1PyrOpkjHFJB+GwA==} engines: {node: '>=16.0.0'} @@ -8269,13 +8644,6 @@ packages: /@jridgewell/sourcemap-codec@1.4.15: resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} - /@jridgewell/trace-mapping@0.3.19: - resolution: {integrity: sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw==} - dependencies: - '@jridgewell/resolve-uri': 3.1.1 - '@jridgewell/sourcemap-codec': 1.4.15 - dev: true - /@jridgewell/trace-mapping@0.3.20: resolution: {integrity: sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==} dependencies: @@ -8695,6 +9063,12 @@ packages: glob: 7.1.7 dev: true + /@next/eslint-plugin-next@14.1.0: + resolution: {integrity: sha512-x4FavbNEeXx/baD/zC/SdrvkjSby8nBn8KcCREqk6UuwvwoAPZmaV8TFCAuo/cpovBRTIY67mHhe86MQQm/68Q==} + dependencies: + glob: 10.3.10 + dev: true + /@next/swc-darwin-arm64@13.5.6: resolution: {integrity: sha512-5nvXMzKtZfvcu4BhtV0KH1oGv4XEW+B+jOfmBdpFI3C7FrB/MfujRpWYSBBO64+qbW8pkZiSyQv9eiwnn5VIQA==} engines: {node: '>= 10'} @@ -9384,7 +9758,7 @@ packages: '@opentelemetry/api': 1.7.0 '@opentelemetry/instrumentation': 0.46.0(@opentelemetry/api@1.7.0) '@opentelemetry/redis-common': 0.36.1 - '@opentelemetry/semantic-conventions': 1.20.0 + '@opentelemetry/semantic-conventions': 1.21.0 '@types/ioredis4': /@types/ioredis@4.28.10 transitivePeerDependencies: - supports-color @@ -9399,7 +9773,7 @@ packages: '@opentelemetry/api': 1.7.0 '@opentelemetry/instrumentation': 0.46.0(@opentelemetry/api@1.7.0) '@opentelemetry/sdk-metrics': 1.20.0(@opentelemetry/api@1.7.0) - '@opentelemetry/semantic-conventions': 1.20.0 + '@opentelemetry/semantic-conventions': 1.21.0 transitivePeerDependencies: - supports-color dev: false @@ -9412,7 +9786,7 @@ packages: dependencies: '@opentelemetry/api': 1.7.0 '@opentelemetry/instrumentation': 0.45.1(@opentelemetry/api@1.7.0) - '@opentelemetry/semantic-conventions': 1.18.1 + '@opentelemetry/semantic-conventions': 1.21.0 transitivePeerDependencies: - supports-color dev: false @@ -9425,7 +9799,7 @@ packages: dependencies: '@opentelemetry/api': 1.7.0 '@opentelemetry/instrumentation': 0.46.0(@opentelemetry/api@1.7.0) - '@opentelemetry/semantic-conventions': 1.20.0 + '@opentelemetry/semantic-conventions': 1.21.0 transitivePeerDependencies: - supports-color dev: false @@ -10815,6 +11189,30 @@ packages: '@babel/runtime': 7.23.7 dev: true + /@react-google-maps/api@2.19.2(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-Vt57XWzCKfsUjKOmFUl2erVVfOePkPK5OigF/f+q7UuV/Nm9KDDy1PMFBx+wNahEqOd6a32BxfsykEhBnbU9wQ==} + peerDependencies: + react: ^16.8 || ^17 || ^18 + react-dom: ^16.8 || ^17 || ^18 + dependencies: + '@googlemaps/js-api-loader': 1.16.2 + '@googlemaps/markerclusterer': 2.3.2 + '@react-google-maps/infobox': 2.19.2 + '@react-google-maps/marker-clusterer': 2.19.2 + '@types/google.maps': 3.53.5 + invariant: 2.2.4 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: false + + /@react-google-maps/infobox@2.19.2: + resolution: {integrity: sha512-6wvBqeJsQ/eFSvoxg+9VoncQvNoVCdmxzxRpLvmjPD+nNC6mHM0vJH1xSqaKijkMrfLJT0nfkTGpovrF896jwg==} + dev: false + + /@react-google-maps/marker-clusterer@2.19.2: + resolution: {integrity: sha512-x9ibmsP0ZVqzyCo1Pitbw+4b6iEXRw/r1TCy3vOUR3eKrzWLnHYZMR325BkZW2r8fnuWE/V3Fp4QZOP9qYORCw==} + dev: false + /@repeaterjs/repeater@3.0.4: resolution: {integrity: sha512-AW8PKd6iX3vAZ0vA43nOUOnbq/X5ihgU+mSXXqunMkeQADGiqw/PY0JNeYtD5sr0PAy51YPgAPbDoeapv9r8WA==} dev: true @@ -12760,6 +13158,19 @@ packages: zod: 3.22.4 dev: false + /@t3-oss/env-core@0.8.0(typescript@5.3.3)(zod@3.22.4): + resolution: {integrity: sha512-Tc1pg0KH/tJeI0Z1s/Isp1VsGDj1N03ZAYFV8GjWgMxytF/ve0Dv+opjmTapHICRv8qiB1Y/fsTjkWNMpKPRCQ==} + peerDependencies: + typescript: '>=5.0.0' + zod: ^3.0.0 + peerDependenciesMeta: + typescript: + optional: true + dependencies: + typescript: 5.3.3 + zod: 3.22.4 + dev: false + /@t3-oss/env-nextjs@0.6.1(typescript@5.2.2)(zod@3.22.4): resolution: {integrity: sha512-z1dIC++Vxj9kmzX5nSPfcrCSkszy3dTEPC4Ssx7Ap5AqR3c2Qa7S0xf8axn6coy7D/vCXDAAnHYnCMDhtcY3SQ==} peerDependencies: @@ -12799,6 +13210,20 @@ packages: zod: 3.22.4 dev: false + /@t3-oss/env-nextjs@0.8.0(typescript@5.3.3)(zod@3.22.4): + resolution: {integrity: sha512-bJyoE8of4QmqZN7a49iLJAbUq4graScb9ezXzvnuIVr9JP43C093vmy55hT1uZL533CwiPz8zo1INwyAS6qnHw==} + peerDependencies: + typescript: '>=5.0.0' + zod: ^3.0.0 + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@t3-oss/env-core': 0.8.0(typescript@5.3.3)(zod@3.22.4) + typescript: 5.3.3 + zod: 3.22.4 + dev: false + /@testing-library/dom@9.3.3: resolution: {integrity: sha512-fB0R+fa3AUqbLHWyxXa2kGVtf1Fe1ZZFr0Zp6AIbIAzXb2mKbEXl+PCQNUOaq5lbTab5tfctfXRNsWXxa2f7Aw==} engines: {node: '>=14'} @@ -13065,6 +13490,10 @@ packages: resolution: {integrity: sha512-40um9QqwHjRS92qnOaDpL7RmDK15NuZYo9HihiJRbYkMQZlWnuH8AdvbMy8/o6lgLmKbDUKa+OALCltHdbOTpQ==} dev: true + /@types/google.maps@3.53.5: + resolution: {integrity: sha512-HoRq4Te8J6krH7hj+TfdYepqegoKZCj3kkaK5gf+ySFSHLvyqYkDvkrtbcVJXQ6QBphQ0h1TF7p4J6sOh4r/zg==} + dev: false + /@types/graceful-fs@4.1.7: resolution: {integrity: sha512-MhzcwU8aUygZroVwL2jeYk6JisJrPl/oov/gsgGCue9mkgl9wjGbzReYQClxiUgFDnib9FuHqTndccKeZKxTRw==} dependencies: @@ -16108,13 +16537,8 @@ packages: /caniuse-lite@1.0.30001572: resolution: {integrity: sha512-1Pbh5FLmn5y4+QhNyJE9j3/7dK44dGB83/ZMjv/qJk86TvDbjk0LosiZo0i0WB0Vx607qMX9jYrn1VLHCkN4rw==} - /caniuse-lite@1.0.30001583: - resolution: {integrity: sha512-acWTYaha8xfhA/Du/z4sNZjHUWjkiuoAi2LM+T/aL+kemKQgPT1xBb/YKjlQ0Qo8gvbHsGNplrEJ+9G3gL7i4Q==} - dev: false - /caniuse-lite@1.0.30001585: resolution: {integrity: sha512-yr2BWR1yLXQ8fMpdS/4ZZXpseBgE7o4g41x3a6AJOqZuOi+iE/WdJYAuZ6Y95i4Ohd2Y+9MzIWRR+uGABH4s3Q==} - dev: true /capital-case@1.0.4: resolution: {integrity: sha512-ds37W8CytHgwnhGGTi88pcPyR15qoNkOpYwmMMfnWqqWgESapLqvDx6huFjQ5vqWSn2Z06173XNA7LtMOeUh1A==} @@ -18278,6 +18702,31 @@ packages: - supports-color dev: true + /eslint-config-next@14.1.0(eslint@8.56.0)(typescript@5.3.3): + resolution: {integrity: sha512-SBX2ed7DoRFXC6CQSLc/SbLY9Ut6HxNB2wPTcoIWjUMd7aF7O/SIE7111L8FdZ9TXsNV4pulUDnfthpyPtbFUg==} + peerDependencies: + eslint: ^7.23.0 || ^8.0.0 + typescript: '>=3.3.1' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@next/eslint-plugin-next': 14.1.0 + '@rushstack/eslint-patch': 1.5.1 + '@typescript-eslint/parser': 6.19.1(eslint@8.56.0)(typescript@5.3.3) + eslint: 8.56.0 + eslint-import-resolver-node: 0.3.9 + eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.19.1)(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1)(eslint@8.56.0) + eslint-plugin-import: 2.29.1(@typescript-eslint/parser@6.19.1)(eslint-import-resolver-typescript@3.6.1)(eslint@8.56.0) + eslint-plugin-jsx-a11y: 6.8.0(eslint@8.56.0) + eslint-plugin-react: 7.33.2(eslint@8.56.0) + eslint-plugin-react-hooks: 4.6.0(eslint@8.56.0) + typescript: 5.3.3 + transitivePeerDependencies: + - eslint-import-resolver-webpack + - supports-color + dev: true + /eslint-config-prettier@9.1.0(eslint@8.56.0): resolution: {integrity: sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==} hasBin: true @@ -20797,6 +21246,36 @@ packages: - utf-8-validate dev: true + /graphql-config@5.0.3(@types/node@20.11.5)(graphql@16.8.1)(typescript@5.3.3): + resolution: {integrity: sha512-BNGZaoxIBkv9yy6Y7omvsaBUHOzfFcII3UN++tpH8MGOKFPFkCPZuwx09ggANMt8FgyWP1Od8SWPmrUEZca4NQ==} + engines: {node: '>= 16.0.0'} + peerDependencies: + cosmiconfig-toml-loader: ^1.0.0 + graphql: ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 + peerDependenciesMeta: + cosmiconfig-toml-loader: + optional: true + dependencies: + '@graphql-tools/graphql-file-loader': 8.0.0(graphql@16.8.1) + '@graphql-tools/json-file-loader': 8.0.0(graphql@16.8.1) + '@graphql-tools/load': 8.0.0(graphql@16.8.1) + '@graphql-tools/merge': 9.0.0(graphql@16.8.1) + '@graphql-tools/url-loader': 8.0.0(@types/node@20.11.5)(graphql@16.8.1) + '@graphql-tools/utils': 10.0.6(graphql@16.8.1) + cosmiconfig: 8.3.6(typescript@5.3.3) + graphql: 16.8.1 + jiti: 1.20.0 + minimatch: 4.2.3 + string-env-interpolation: 1.0.1 + tslib: 2.6.2 + transitivePeerDependencies: + - '@types/node' + - bufferutil + - encoding + - typescript + - utf-8-validate + dev: true + /graphql-config@5.0.3(@types/node@20.8.10)(graphql@16.8.1)(typescript@5.2.2): resolution: {integrity: sha512-BNGZaoxIBkv9yy6Y7omvsaBUHOzfFcII3UN++tpH8MGOKFPFkCPZuwx09ggANMt8FgyWP1Od8SWPmrUEZca4NQ==} engines: {node: '>= 16.0.0'} @@ -23293,6 +23772,10 @@ packages: engines: {node: '>=12.0.0'} dev: false + /kdbush@4.0.2: + resolution: {integrity: sha512-WbCVYJ27Sz8zi9Q7Q0xHC+05iwkm3Znipc2XTlrnJbsHMYktW4hPhXUE8Ys1engBrvffoSCqbil1JQAa7clRpA==} + dev: false + /keyv@3.0.0: resolution: {integrity: sha512-eguHnq22OE3uVoSYG0LVWNP+4ppamWr9+zWBe1bsNcovIMy6huUJFPgy4mGwCd/rnl3vOLGW1MTlu4c57CT1xA==} dependencies: @@ -24109,6 +24592,18 @@ packages: '@types/node': 20.10.4 dev: true + /meros@1.3.0(@types/node@20.11.5): + resolution: {integrity: sha512-2BNGOimxEz5hmjUG2FwoxCt5HN7BXdaWyFqEwxPTrJzVdABtrL4TiHTcsWSFAxPQ/tOnEaQEJh3qWq71QRMY+w==} + engines: {node: '>=13'} + peerDependencies: + '@types/node': '>=13' + peerDependenciesMeta: + '@types/node': + optional: true + dependencies: + '@types/node': 20.11.5 + dev: true + /meros@1.3.0(@types/node@20.8.10): resolution: {integrity: sha512-2BNGOimxEz5hmjUG2FwoxCt5HN7BXdaWyFqEwxPTrJzVdABtrL4TiHTcsWSFAxPQ/tOnEaQEJh3qWq71QRMY+w==} engines: {node: '>=13'} @@ -24755,7 +25250,7 @@ packages: '@opentelemetry/api': 1.7.0 '@swc/helpers': 0.5.2 busboy: 1.6.0 - caniuse-lite: 1.0.30001583 + caniuse-lite: 1.0.30001585 graceful-fs: 4.2.11 postcss: 8.4.31 react: 18.2.0 @@ -27058,6 +27553,21 @@ packages: dependencies: jsesc: 0.5.0 + /rehackt@0.0.3(@types/react@18.2.48)(react@18.2.0): + resolution: {integrity: sha512-aBRHudKhOWwsTvCbSoinzq+Lej/7R8e8UoPvLZo5HirZIIBLGAgdG7SL9QpdcBoQ7+3QYPi3lRLknAzXBlhZ7g==} + peerDependencies: + '@types/react': '*' + react: '*' + peerDependenciesMeta: + '@types/react': + optional: true + react: + optional: true + dependencies: + '@types/react': 18.2.48 + react: 18.2.0 + dev: false + /relateurl@0.2.7: resolution: {integrity: sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==} engines: {node: '>= 0.10'} @@ -28315,6 +28825,12 @@ packages: ts-interface-checker: 0.1.13 dev: true + /supercluster@8.0.1: + resolution: {integrity: sha512-IiOea5kJ9iqzD2t7QJq/cREyLHTtSmUT6gQsweojg9WH2sYJqZK9SswTu6jrscO6D1G5v5vYZ9ru/eq85lXeZQ==} + dependencies: + kdbush: 4.0.2 + dev: false + /superjson@1.13.3: resolution: {integrity: sha512-mJiVjfd2vokfDxsQPOwJ/PtanO87LhpYY88ubI5dUB1Ab58Txbyje3+jpm+/83R/fevaq/107NNhtYBLuoTrFg==} engines: {node: '>=10'} @@ -30242,11 +30758,6 @@ packages: resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==} engines: {node: '>= 6'} - /yaml@2.3.2: - resolution: {integrity: sha512-N/lyzTPaJasoDmfV7YTrYCI0G/3ivm/9wdG0aHuheKowWQwGTsK0Eoiw6utmzAnI6pkJa0DUVygvp3spqqEKXg==} - engines: {node: '>= 14'} - dev: true - /yaml@2.3.4: resolution: {integrity: sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA==} engines: {node: '>= 14'} diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 900f078d1d..7e59d3ac5a 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -5,6 +5,7 @@ packages: - apps/dashboard - apps/admin-panel - apps/pay + - apps/blink-map - lib/eslint-config - lib/gt3-server-node-express-sdk - lib/galoy-components From 187c8c98a272757905a7e1d28f412316bbb92ce8 Mon Sep 17 00:00:00 2001 From: Siddharth Tiwari Date: Sat, 3 Feb 2024 22:34:11 +0530 Subject: [PATCH 02/12] chore: update deps --- apps/blink-map/README.md | 36 +----------------------------------- apps/blink-map/package.json | 20 ++++++++++---------- pnpm-lock.yaml | 28 ++++++++++++++-------------- 3 files changed, 25 insertions(+), 59 deletions(-) diff --git a/apps/blink-map/README.md b/apps/blink-map/README.md index c4033664f8..5c2d58c321 100644 --- a/apps/blink-map/README.md +++ b/apps/blink-map/README.md @@ -1,36 +1,2 @@ -This is a [Next.js](https://nextjs.org/) project bootstrapped with [`create-next-app`](https://github.com/vercel/next.js/tree/canary/packages/create-next-app). +# Blink Map -## Getting Started - -First, run the development server: - -```bash -npm run dev -# or -yarn dev -# or -pnpm dev -# or -bun dev -``` - -Open [http://localhost:3000](http://localhost:3000) with your browser to see the result. - -You can start editing the page by modifying `app/page.tsx`. The page auto-updates as you edit the file. - -This project uses [`next/font`](https://nextjs.org/docs/basic-features/font-optimization) to automatically optimize and load Inter, a custom Google Font. - -## Learn More - -To learn more about Next.js, take a look at the following resources: - -- [Next.js Documentation](https://nextjs.org/docs) - learn about Next.js features and API. -- [Learn Next.js](https://nextjs.org/learn) - an interactive Next.js tutorial. - -You can check out [the Next.js GitHub repository](https://github.com/vercel/next.js/) - your feedback and contributions are welcome! - -## Deploy on Vercel - -The easiest way to deploy your Next.js app is to use the [Vercel Platform](https://vercel.com/new?utm_medium=default-template&filter=next.js&utm_source=create-next-app&utm_campaign=create-next-app-readme) from the creators of Next.js. - -Check out our [Next.js deployment documentation](https://nextjs.org/docs/deployment) for more details. diff --git a/apps/blink-map/package.json b/apps/blink-map/package.json index 162183e1e8..21759467ab 100644 --- a/apps/blink-map/package.json +++ b/apps/blink-map/package.json @@ -12,16 +12,16 @@ }, "dependencies": { "@apollo/client": "^3.9.2", - "@opentelemetry/api": "^1.7.0", - "@opentelemetry/core": "1.18.1", - "@opentelemetry/exporter-trace-otlp-http": "^0.45.1", - "@opentelemetry/instrumentation-graphql": "^0.36.0", - "@opentelemetry/instrumentation-http": "^0.45.1", - "@opentelemetry/instrumentation-net": "^0.32.4", - "@opentelemetry/resources": "^1.18.1", - "@opentelemetry/sdk-node": "^0.45.1", + "@opentelemetry/api": "^1.6.0", + "@opentelemetry/core": "^1.21.0", + "@opentelemetry/exporter-trace-otlp-http": "^0.44.0", + "@opentelemetry/instrumentation-graphql": "^0.35.2", + "@opentelemetry/instrumentation-http": "^0.44.0", + "@opentelemetry/instrumentation-net": "^0.32.2", + "@opentelemetry/resources": "^1.17.1", + "@opentelemetry/sdk-node": "^0.48.0", "@opentelemetry/sdk-trace-node": "^1.18.1", - "@opentelemetry/semantic-conventions": "^1.18.1", + "@opentelemetry/semantic-conventions": "^1.17.1", "@react-google-maps/api": "^2.19.2", "@t3-oss/env-nextjs": "^0.8.0", "graphql": "^16.8.1", @@ -50,4 +50,4 @@ "tailwindcss": "^3.3.0", "typescript": "^5" } -} +} \ No newline at end of file diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 2bd8094c1e..e2950815d5 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -155,34 +155,34 @@ importers: specifier: ^3.9.2 version: 3.9.2(@types/react@18.2.48)(graphql@16.8.1)(react-dom@18.2.0)(react@18.2.0) '@opentelemetry/api': - specifier: ^1.7.0 + specifier: ^1.6.0 version: 1.7.0 '@opentelemetry/core': - specifier: 1.18.1 - version: 1.18.1(@opentelemetry/api@1.7.0) + specifier: ^1.21.0 + version: 1.21.0(@opentelemetry/api@1.7.0) '@opentelemetry/exporter-trace-otlp-http': - specifier: ^0.45.1 - version: 0.45.1(@opentelemetry/api@1.7.0) + specifier: ^0.44.0 + version: 0.44.0(@opentelemetry/api@1.7.0) '@opentelemetry/instrumentation-graphql': - specifier: ^0.36.0 - version: 0.36.1(@opentelemetry/api@1.7.0) + specifier: ^0.35.2 + version: 0.35.2(@opentelemetry/api@1.7.0) '@opentelemetry/instrumentation-http': - specifier: ^0.45.1 - version: 0.45.1(@opentelemetry/api@1.7.0) + specifier: ^0.44.0 + version: 0.44.0(@opentelemetry/api@1.7.0) '@opentelemetry/instrumentation-net': - specifier: ^0.32.4 + specifier: ^0.32.2 version: 0.32.5(@opentelemetry/api@1.7.0) '@opentelemetry/resources': - specifier: ^1.18.1 + specifier: ^1.17.1 version: 1.21.0(@opentelemetry/api@1.7.0) '@opentelemetry/sdk-node': - specifier: ^0.45.1 - version: 0.45.1(@opentelemetry/api@1.7.0) + specifier: ^0.48.0 + version: 0.48.0(@opentelemetry/api@1.7.0) '@opentelemetry/sdk-trace-node': specifier: ^1.18.1 version: 1.21.0(@opentelemetry/api@1.7.0) '@opentelemetry/semantic-conventions': - specifier: ^1.18.1 + specifier: ^1.17.1 version: 1.21.0 '@react-google-maps/api': specifier: ^2.19.2 From d820fcc33d807ca1fe65c7d86f6d5abc081dfb9d Mon Sep 17 00:00:00 2001 From: Siddharth Tiwari Date: Mon, 5 Feb 2024 00:14:34 +0530 Subject: [PATCH 03/12] chore: rename rebase --- .github/labeler.yml | 4 +-- .github/workflows/bats.yml | 2 +- .github/workflows/buck2-test.yaml | 4 +-- .github/workflows/integration-test.yml | 4 +-- BUCK | 2 +- apps/blink-map/README.md | 2 -- apps/blink-map/next-env.d.ts | 5 +++ apps/{blink-map => map}/.eslintrc.json | 0 apps/{blink-map => map}/.gitignore | 0 apps/{blink-map => map}/BUCK | 2 +- apps/{blink-map => map}/Dockerfile | 4 +-- apps/map/README.md | 2 ++ apps/{blink-map => map}/app/favicon.ico | Bin apps/{blink-map => map}/app/globals.css | 0 apps/{blink-map => map}/app/layout.tsx | 2 +- apps/{blink-map => map}/app/page.tsx | 0 apps/{blink-map => map}/codegen.yml | 0 .../components/map/index.tsx | 0 .../components/map/map-theme.ts | 0 apps/{blink-map => map}/env.ts | 0 .../instrumentation.node.ts | 2 +- apps/{blink-map => map}/instrumentation.ts | 0 apps/{blink-map => map}/next.config.js | 0 apps/{blink-map => map}/package.json | 2 +- apps/{blink-map => map}/postcss.config.js | 0 apps/{blink-map => map}/prettier.config.js | 0 apps/{blink-map => map}/prettierrc.js | 0 apps/{blink-map => map}/public/logo.svg | 0 .../services/galoy/graphql/client.ts | 0 .../services/galoy/graphql/generated.ts | 0 .../graphql/queries/business-map-marker.ts | 0 apps/{blink-map => map}/tailwind.config.ts | 0 apps/{blink-map => map}/tsconfig.json | 0 ci/apps/app-template.lib.yml | 4 +-- ci/apps/pipeline.yml | 2 +- dev/Tiltfile | 32 +++++++++--------- flake.nix | 2 +- pnpm-lock.yaml | 2 +- pnpm-workspace.yaml | 2 +- 39 files changed, 43 insertions(+), 38 deletions(-) delete mode 100644 apps/blink-map/README.md create mode 100644 apps/blink-map/next-env.d.ts rename apps/{blink-map => map}/.eslintrc.json (100%) rename apps/{blink-map => map}/.gitignore (100%) rename apps/{blink-map => map}/BUCK (98%) rename apps/{blink-map => map}/Dockerfile (95%) create mode 100644 apps/map/README.md rename apps/{blink-map => map}/app/favicon.ico (100%) rename apps/{blink-map => map}/app/globals.css (100%) rename apps/{blink-map => map}/app/layout.tsx (94%) rename apps/{blink-map => map}/app/page.tsx (100%) rename apps/{blink-map => map}/codegen.yml (100%) rename apps/{blink-map => map}/components/map/index.tsx (100%) rename apps/{blink-map => map}/components/map/map-theme.ts (100%) rename apps/{blink-map => map}/env.ts (100%) rename apps/{blink-map => map}/instrumentation.node.ts (95%) rename apps/{blink-map => map}/instrumentation.ts (100%) rename apps/{blink-map => map}/next.config.js (100%) rename apps/{blink-map => map}/package.json (98%) rename apps/{blink-map => map}/postcss.config.js (100%) rename apps/{blink-map => map}/prettier.config.js (100%) rename apps/{blink-map => map}/prettierrc.js (100%) rename apps/{blink-map => map}/public/logo.svg (100%) rename apps/{blink-map => map}/services/galoy/graphql/client.ts (100%) rename apps/{blink-map => map}/services/galoy/graphql/generated.ts (100%) rename apps/{blink-map => map}/services/galoy/graphql/queries/business-map-marker.ts (100%) rename apps/{blink-map => map}/tailwind.config.ts (100%) rename apps/{blink-map => map}/tsconfig.json (100%) diff --git a/.github/labeler.yml b/.github/labeler.yml index 797784738a..5d35153e1d 100644 --- a/.github/labeler.yml +++ b/.github/labeler.yml @@ -22,8 +22,8 @@ admin-panel: - flake.lock - pnpm-lock.yaml -blink-map: - - apps/blink-map/* +map: + - apps/map/* - flake.lock - pnpm-lock.yaml diff --git a/.github/workflows/bats.yml b/.github/workflows/bats.yml index 55d40b67e8..8b5df6699f 100644 --- a/.github/workflows/bats.yml +++ b/.github/workflows/bats.yml @@ -23,7 +23,7 @@ jobs: - name: Buck2 build run: | nix develop -c buck2 build //core/api //core/api-ws-server \ - //core/api-keys //apps/dashboard //apps/consent //apps/pay //apps/admin-panel //apps/blink-map \ + //core/api-keys //apps/dashboard //apps/consent //apps/pay //apps/admin-panel //apps/map \ //core/notifications - name: Run bats tests run: | diff --git a/.github/workflows/buck2-test.yaml b/.github/workflows/buck2-test.yaml index 77cf738a67..f072fc87cb 100644 --- a/.github/workflows/buck2-test.yaml +++ b/.github/workflows/buck2-test.yaml @@ -23,7 +23,7 @@ jobs: ${{ toJSON(github.event.pull_request.labels.*.name) }} EOF - DEFAULT_LABELS=("dashboard" "consent" "pay" "core" "api-keys" "notifications" "admin-panel" "blink-map") + DEFAULT_LABELS=("dashboard" "consent" "pay" "core" "api-keys" "notifications" "admin-panel" "map") LABELS=($(jq -r '.[]' < labels.json)) if [ ${#LABELS[@]} -eq 0 ]; then LABELS=("${DEFAULT_LABELS[@]}") @@ -33,7 +33,7 @@ jobs: for LABEL in "${LABELS[@]}"; do case "$LABEL" in - dashboard|consent|pay|admin-panel|blink-map) + dashboard|consent|pay|admin-panel|map) ARGS+=" //apps/$LABEL:test" ;; core) diff --git a/.github/workflows/integration-test.yml b/.github/workflows/integration-test.yml index 8d225f760d..cf39a00ff4 100644 --- a/.github/workflows/integration-test.yml +++ b/.github/workflows/integration-test.yml @@ -27,7 +27,7 @@ jobs: ${{ toJSON(github.event.pull_request.labels.*.name) }} EOF - DEFAULT_LABELS=("dashboard" "consent" "pay" "core" "admin-panel" "blink-map") + DEFAULT_LABELS=("dashboard" "consent" "pay" "core" "admin-panel" "map") LABELS=($(jq -r '.[]' < labels.json)) if [ ${#LABELS[@]} -eq 0 ]; then LABELS=("${DEFAULT_LABELS[@]}") @@ -37,7 +37,7 @@ jobs: for LABEL in "${LABELS[@]}"; do case "$LABEL" in - dashboard|consent|pay|core|admin-panel) + dashboard|consent|pay|core|admin-panel|map) ARGS+=" $LABEL" ;; esac diff --git a/BUCK b/BUCK index e07e9a4b99..482cfe37fc 100644 --- a/BUCK +++ b/BUCK @@ -8,7 +8,7 @@ pnpm_workspace( "//apps/dashboard:package.json", "//apps/pay:package.json", "//apps/admin-panel:package.json", - "//apps/blink-map:package.json", + "//apps/map:package.json", "//lib/eslint-config:package.json", "//lib/galoy-components:package.json" ], diff --git a/apps/blink-map/README.md b/apps/blink-map/README.md deleted file mode 100644 index 5c2d58c321..0000000000 --- a/apps/blink-map/README.md +++ /dev/null @@ -1,2 +0,0 @@ -# Blink Map - diff --git a/apps/blink-map/next-env.d.ts b/apps/blink-map/next-env.d.ts new file mode 100644 index 0000000000..4f11a03dc6 --- /dev/null +++ b/apps/blink-map/next-env.d.ts @@ -0,0 +1,5 @@ +/// +/// + +// NOTE: This file should not be edited +// see https://nextjs.org/docs/basic-features/typescript for more information. diff --git a/apps/blink-map/.eslintrc.json b/apps/map/.eslintrc.json similarity index 100% rename from apps/blink-map/.eslintrc.json rename to apps/map/.eslintrc.json diff --git a/apps/blink-map/.gitignore b/apps/map/.gitignore similarity index 100% rename from apps/blink-map/.gitignore rename to apps/map/.gitignore diff --git a/apps/blink-map/BUCK b/apps/map/BUCK similarity index 98% rename from apps/blink-map/BUCK rename to apps/map/BUCK index 377b6a0714..83780d50c2 100644 --- a/apps/blink-map/BUCK +++ b/apps/map/BUCK @@ -55,7 +55,7 @@ next_build( ) next_build_bin( - name = "blink-map", + name = "map", ) dev_deps_srcs = { diff --git a/apps/blink-map/Dockerfile b/apps/map/Dockerfile similarity index 95% rename from apps/blink-map/Dockerfile rename to apps/map/Dockerfile index aa01ee6742..fd299527dd 100644 --- a/apps/blink-map/Dockerfile +++ b/apps/map/Dockerfile @@ -1,5 +1,5 @@ FROM nixos/nix:latest AS builder -ARG APP=blink-map +ARG APP=map COPY . /workdir WORKDIR /workdir @@ -16,7 +16,7 @@ RUN cp -R $(nix-store --query --requisites result/) /tmp/nix-store-closure RUN ln -snf $(nix-store --query result/)/bin/* /tmp/local-bin/ FROM gcr.io/distroless/static-debian11 AS final -ARG APP=blink-map +ARG APP=map WORKDIR /app/$APP COPY --from=builder /tmp/nix-store-closure /nix/store diff --git a/apps/map/README.md b/apps/map/README.md new file mode 100644 index 0000000000..7169fbef20 --- /dev/null +++ b/apps/map/README.md @@ -0,0 +1,2 @@ +# Map + diff --git a/apps/blink-map/app/favicon.ico b/apps/map/app/favicon.ico similarity index 100% rename from apps/blink-map/app/favicon.ico rename to apps/map/app/favicon.ico diff --git a/apps/blink-map/app/globals.css b/apps/map/app/globals.css similarity index 100% rename from apps/blink-map/app/globals.css rename to apps/map/app/globals.css diff --git a/apps/blink-map/app/layout.tsx b/apps/map/app/layout.tsx similarity index 94% rename from apps/blink-map/app/layout.tsx rename to apps/map/app/layout.tsx index 3edcf5713c..ee34153e39 100644 --- a/apps/blink-map/app/layout.tsx +++ b/apps/map/app/layout.tsx @@ -5,7 +5,7 @@ import "./globals.css" const inter = Inter({ subsets: ["latin"] }) export const metadata: Metadata = { - title: "Blink Maps", + title: "Maps", description: "Merchant map for Blink", } diff --git a/apps/blink-map/app/page.tsx b/apps/map/app/page.tsx similarity index 100% rename from apps/blink-map/app/page.tsx rename to apps/map/app/page.tsx diff --git a/apps/blink-map/codegen.yml b/apps/map/codegen.yml similarity index 100% rename from apps/blink-map/codegen.yml rename to apps/map/codegen.yml diff --git a/apps/blink-map/components/map/index.tsx b/apps/map/components/map/index.tsx similarity index 100% rename from apps/blink-map/components/map/index.tsx rename to apps/map/components/map/index.tsx diff --git a/apps/blink-map/components/map/map-theme.ts b/apps/map/components/map/map-theme.ts similarity index 100% rename from apps/blink-map/components/map/map-theme.ts rename to apps/map/components/map/map-theme.ts diff --git a/apps/blink-map/env.ts b/apps/map/env.ts similarity index 100% rename from apps/blink-map/env.ts rename to apps/map/env.ts diff --git a/apps/blink-map/instrumentation.node.ts b/apps/map/instrumentation.node.ts similarity index 95% rename from apps/blink-map/instrumentation.node.ts rename to apps/map/instrumentation.node.ts index 540b206397..377f594508 100644 --- a/apps/blink-map/instrumentation.node.ts +++ b/apps/map/instrumentation.node.ts @@ -12,7 +12,7 @@ const sdk = new NodeSDK({ textMapPropagator: new W3CTraceContextPropagator(), resource: new Resource({ [SemanticResourceAttributes.SERVICE_NAME]: - process.env.TRACING_SERVICE_NAME || "blink-map", + process.env.TRACING_SERVICE_NAME || "map", }), spanProcessor: new SimpleSpanProcessor(new OTLPTraceExporter()), instrumentations: [ diff --git a/apps/blink-map/instrumentation.ts b/apps/map/instrumentation.ts similarity index 100% rename from apps/blink-map/instrumentation.ts rename to apps/map/instrumentation.ts diff --git a/apps/blink-map/next.config.js b/apps/map/next.config.js similarity index 100% rename from apps/blink-map/next.config.js rename to apps/map/next.config.js diff --git a/apps/blink-map/package.json b/apps/map/package.json similarity index 98% rename from apps/blink-map/package.json rename to apps/map/package.json index 21759467ab..499850d689 100644 --- a/apps/blink-map/package.json +++ b/apps/map/package.json @@ -1,5 +1,5 @@ { - "name": "blink-map", + "name": "map", "private": true, "scripts": { "dev": "next dev -p 3005", diff --git a/apps/blink-map/postcss.config.js b/apps/map/postcss.config.js similarity index 100% rename from apps/blink-map/postcss.config.js rename to apps/map/postcss.config.js diff --git a/apps/blink-map/prettier.config.js b/apps/map/prettier.config.js similarity index 100% rename from apps/blink-map/prettier.config.js rename to apps/map/prettier.config.js diff --git a/apps/blink-map/prettierrc.js b/apps/map/prettierrc.js similarity index 100% rename from apps/blink-map/prettierrc.js rename to apps/map/prettierrc.js diff --git a/apps/blink-map/public/logo.svg b/apps/map/public/logo.svg similarity index 100% rename from apps/blink-map/public/logo.svg rename to apps/map/public/logo.svg diff --git a/apps/blink-map/services/galoy/graphql/client.ts b/apps/map/services/galoy/graphql/client.ts similarity index 100% rename from apps/blink-map/services/galoy/graphql/client.ts rename to apps/map/services/galoy/graphql/client.ts diff --git a/apps/blink-map/services/galoy/graphql/generated.ts b/apps/map/services/galoy/graphql/generated.ts similarity index 100% rename from apps/blink-map/services/galoy/graphql/generated.ts rename to apps/map/services/galoy/graphql/generated.ts diff --git a/apps/blink-map/services/galoy/graphql/queries/business-map-marker.ts b/apps/map/services/galoy/graphql/queries/business-map-marker.ts similarity index 100% rename from apps/blink-map/services/galoy/graphql/queries/business-map-marker.ts rename to apps/map/services/galoy/graphql/queries/business-map-marker.ts diff --git a/apps/blink-map/tailwind.config.ts b/apps/map/tailwind.config.ts similarity index 100% rename from apps/blink-map/tailwind.config.ts rename to apps/map/tailwind.config.ts diff --git a/apps/blink-map/tsconfig.json b/apps/map/tsconfig.json similarity index 100% rename from apps/blink-map/tsconfig.json rename to apps/map/tsconfig.json diff --git a/ci/apps/app-template.lib.yml b/ci/apps/app-template.lib.yml index e5fdfc0154..e0cc76cd0c 100644 --- a/ci/apps/app-template.lib.yml +++ b/ci/apps/app-template.lib.yml @@ -196,9 +196,9 @@ plan: #@ "YAML_PATH": ".image.digest", #@ "CHART": "admin-panel" #@ } -#@ "blink-map": { +#@ "map": { #@ "YAML_PATH": ".image.digest", -#@ "CHART": "blink-map" +#@ "CHART": "map" #@ } #@ } name: #@ bump_image_in_chart_name(app) diff --git a/ci/apps/pipeline.yml b/ci/apps/pipeline.yml index 093493d2de..b420cb64af 100644 --- a/ci/apps/pipeline.yml +++ b/ci/apps/pipeline.yml @@ -12,7 +12,7 @@ #@ "bump_image_in_chart_name", #@ "bump_image_in_chart") -#@ apps = ["consent", "dashboard", "pay", "admin-panel", "blink-map"] +#@ apps = ["consent", "dashboard", "pay", "admin-panel", "map"] groups: - name: all diff --git a/dev/Tiltfile b/dev/Tiltfile index be582562f0..efcf11c1d8 100644 --- a/dev/Tiltfile +++ b/dev/Tiltfile @@ -7,7 +7,7 @@ CONSENT_TEST_LABEL = "consent" DASHBOARD_TEST_LABEL = "dashboard" PAY_TEST_LABEL = "pay" ADMIN_PANEL_TEST_LABEL = "admin-panel" -BLINK_MAP_TEST_LABEL = "blink-map" +map_TEST_LABEL = "map" TEST_RESOURCES = { CORE_TEST_LABEL: "test-api", @@ -127,28 +127,28 @@ local_resource( ], ) -blink_map_target = "//apps/blink-map:dev" +map_target = "//apps/map:dev" if is_ci: - blink_map_target = '//apps/blink-map:blink-map' -blink_map_env = { + map_target = '//apps/map:map' +map_env = { "PORT": "3005", "CORE_URL" : "http://localhost:4455/graphql", } local_resource( - "blink-map", + "map", labels = ["apps"], - cmd = "buck2 build {}".format(blink_map_target), - serve_cmd = "buck2 run {}".format(blink_map_target), - env = blink_map_env, - serve_env = blink_map_env, - deps = _buck2_dep_inputs(blink_map_target), + cmd = "buck2 build {}".format(map_target), + serve_cmd = "buck2 run {}".format(map_target), + env = map_env, + serve_env = map_env, + deps = _buck2_dep_inputs(map_target), allow_parallel = True, resource_deps = [ "api", "apollo-router", ], links = [ - link("http://localhost:3005", "blink-map"), + link("http://localhost:3005", "map"), ], ) @@ -222,14 +222,14 @@ local_resource( ], ) -blink_map_test_target = "//apps/blink-map:test-integration" +map_test_target = "//apps/map:test-integration" local_resource( - "blink-map-test", + "map-test", labels = ["test"], - auto_init = is_ci and BLINK_MAP_TEST_LABEL in cfg.get("test", []), - cmd = "buck2 test {}".format(blink_map_test_target), + auto_init = is_ci and map_TEST_LABEL in cfg.get("test", []), + cmd = "buck2 test {}".format(map_test_target), resource_deps = [ - "blink-map", + "map", ], ) diff --git a/flake.nix b/flake.nix index 6b5f59c44f..5a339e0df7 100644 --- a/flake.nix +++ b/flake.nix @@ -229,7 +229,7 @@ dashboard = nextDerivation {pkgName = "dashboard";}; pay = nextDerivation {pkgName = "pay";}; admin-panel = nextDerivation {pkgName = "admin-panel";}; - blink-map = nextDerivation {pkgName = "blink-map";}; + map = nextDerivation {pkgName = "map";}; api-keys = rustDerivation {pkgName = "api-keys";}; notifications = rustDerivation {pkgName = "notifications";}; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index e2950815d5..4992f3f3bd 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -149,7 +149,7 @@ importers: specifier: ^29.1.1 version: 29.1.2(@babel/core@7.23.9)(jest@29.7.0)(typescript@5.2.2) - apps/blink-map: + apps/map: dependencies: '@apollo/client': specifier: ^3.9.2 diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 7e59d3ac5a..348a533c53 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -5,7 +5,7 @@ packages: - apps/dashboard - apps/admin-panel - apps/pay - - apps/blink-map + - apps/map - lib/eslint-config - lib/gt3-server-node-express-sdk - lib/galoy-components From 8b754460ccc3d0a048e5e44a3ca0152c1e9033fe Mon Sep 17 00:00:00 2001 From: Siddharth Tiwari Date: Mon, 5 Feb 2024 21:26:24 +0530 Subject: [PATCH 04/12] chore: label uppercase rebase --- dev/Tiltfile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/dev/Tiltfile b/dev/Tiltfile index efcf11c1d8..424ac020c1 100644 --- a/dev/Tiltfile +++ b/dev/Tiltfile @@ -7,7 +7,7 @@ CONSENT_TEST_LABEL = "consent" DASHBOARD_TEST_LABEL = "dashboard" PAY_TEST_LABEL = "pay" ADMIN_PANEL_TEST_LABEL = "admin-panel" -map_TEST_LABEL = "map" +MAP_TEST_LABEL = "map" TEST_RESOURCES = { CORE_TEST_LABEL: "test-api", @@ -226,7 +226,7 @@ map_test_target = "//apps/map:test-integration" local_resource( "map-test", labels = ["test"], - auto_init = is_ci and map_TEST_LABEL in cfg.get("test", []), + auto_init = is_ci and MAP_TEST_LABEL in cfg.get("test", []), cmd = "buck2 test {}".format(map_test_target), resource_deps = [ "map", From ffacfe26f29887d4c3fedb9848da45cdf226bd99 Mon Sep 17 00:00:00 2001 From: Siddharth Tiwari Date: Thu, 8 Feb 2024 02:58:18 +0530 Subject: [PATCH 05/12] feat: adding MerchantMapSuggest gql rebase --- apps/map/app/layout.tsx | 4 +- apps/map/app/server-acton.ts | 70 + apps/map/components/input/index.tsx | 34 + apps/map/components/logo/location.tsx | 16 + apps/map/components/map/index.tsx | 202 ++- apps/map/components/map/suggest-form.tsx | 102 ++ apps/map/components/sheet/index.tsx | 126 ++ apps/map/components/utils.ts | 6 + apps/map/package.json | 13 +- apps/map/public/location.svg | 1 + apps/map/services/galoy/graphql/generated.ts | 86 ++ .../graphql/mutation/merchant-map-suggest.ts | 55 + apps/map/tailwind.config.ts | 8 +- pnpm-lock.yaml | 1178 +++++++++++++---- 14 files changed, 1617 insertions(+), 284 deletions(-) create mode 100644 apps/map/app/server-acton.ts create mode 100644 apps/map/components/input/index.tsx create mode 100644 apps/map/components/logo/location.tsx create mode 100644 apps/map/components/map/suggest-form.tsx create mode 100644 apps/map/components/sheet/index.tsx create mode 100644 apps/map/components/utils.ts create mode 100644 apps/map/public/location.svg create mode 100644 apps/map/services/galoy/graphql/mutation/merchant-map-suggest.ts diff --git a/apps/map/app/layout.tsx b/apps/map/app/layout.tsx index ee34153e39..9b8bb28818 100644 --- a/apps/map/app/layout.tsx +++ b/apps/map/app/layout.tsx @@ -1,8 +1,8 @@ import type { Metadata } from "next" -import { Inter } from "next/font/google" +import { Inter_Tight } from "next/font/google" import "./globals.css" -const inter = Inter({ subsets: ["latin"] }) +const inter = Inter_Tight({ subsets: ["latin"] }) export const metadata: Metadata = { title: "Maps", diff --git a/apps/map/app/server-acton.ts b/apps/map/app/server-acton.ts new file mode 100644 index 0000000000..ab8ec10e11 --- /dev/null +++ b/apps/map/app/server-acton.ts @@ -0,0 +1,70 @@ +"use server" + +import { merchantMapSuggest } from "@/services/galoy/graphql/mutation/merchant-map-suggest" + +export const submitMerchantSuggest = async ( + _prevState: { + error: boolean + message: string + }, + form: FormData, +): Promise<{ + error: boolean + message: string +}> => { + const title = form.get("title") + const username = form.get("username") + const latitude = form.get("latitude") + const longitude = form.get("longitude") + if ( + !title || + !username || + !latitude || + !longitude || + typeof title !== "string" || + typeof username != "string" || + typeof latitude != "string" || + typeof longitude != "string" + ) { + return { + error: true, + message: "Missing fields", + } + } + + const lat = parseFloat(latitude) + const lon = parseFloat(longitude) + + if (isNaN(lat) || isNaN(lon) || lat < -90 || lat > 90 || lon < -180 || lon > 180) { + return { + error: true, + message: "Invalid coordinates", + } + } + + const response = await merchantMapSuggest({ + title, + username, + latitude: lat, + longitude: lon, + }) + + if (response instanceof Error) { + return { + error: true, + message: response.message, + } + } + + if (response.errors.length > 0) { + return { + error: true, + message: response.errors[0].message, + } + } + + return { + error: false, + message: "success", + } +} diff --git a/apps/map/components/input/index.tsx b/apps/map/components/input/index.tsx new file mode 100644 index 0000000000..165b65b67f --- /dev/null +++ b/apps/map/components/input/index.tsx @@ -0,0 +1,34 @@ +import React, { InputHTMLAttributes } from "react" + +interface InputProps extends InputHTMLAttributes { + label?: string + id: string +} + +const InputComponent: React.FC = ({ label, id, ...inputProps }) => { + return ( +
+ {label ? ( + + ) : null} + +
+ ) +} + +export default InputComponent diff --git a/apps/map/components/logo/location.tsx b/apps/map/components/logo/location.tsx new file mode 100644 index 0000000000..5e310d9366 --- /dev/null +++ b/apps/map/components/logo/location.tsx @@ -0,0 +1,16 @@ +import React from "react" + +const LocationIcon = () => ( + + + + +) + +export default LocationIcon diff --git a/apps/map/components/map/index.tsx b/apps/map/components/map/index.tsx index 1117fc4250..e9c2781702 100644 --- a/apps/map/components/map/index.tsx +++ b/apps/map/components/map/index.tsx @@ -5,10 +5,14 @@ import { BusinessMapMarkersQuery } from "@/services/galoy/graphql/generated" import Link from "next/link" import { theme } from "./map-theme" import { env } from "@/env" +import LocationIcon from "../logo/location" +import { SuggestMapFormSheet } from "./suggest-form" type MapComponentProps = { mapData: BusinessMapMarkersQuery["businessMapMarkers"] } +const DEFAULT_LAT = 13.7942 +const DEFAULT_LNG = -88.8965 export default function MapComponent({ mapData }: MapComponentProps) { const mapRef = useRef() @@ -16,9 +20,18 @@ export default function MapComponent({ mapData }: MapComponentProps) { BusinessMapMarkersQuery["businessMapMarkers"][number] | null >(null) const [currentLocation, setCurrentLocation] = useState({ - lat: 13.7942, - lng: -88.8965, + coordinates: { + lat: DEFAULT_LAT, + lng: DEFAULT_LNG, + }, + userAllowedLocation: false, }) + + const [draggablePin, setDraggablePin] = useState({ + coordinates: { lat: 0, lng: 0 }, + visible: false, + }) + const libraries = useMemo(() => ["places"], []) const onMapLoad = useCallback((map: google.maps.Map) => { mapRef.current = map @@ -49,8 +62,8 @@ export default function MapComponent({ mapData }: MapComponentProps) { navigator.geolocation.getCurrentPosition( (position) => { setCurrentLocation({ - lat: position.coords.latitude, - lng: position.coords.longitude, + coordinates: { lat: position.coords.latitude, lng: position.coords.longitude }, + userAllowedLocation: true, }) }, () => { @@ -76,25 +89,153 @@ export default function MapComponent({ mapData }: MapComponentProps) { const centerMapOnCurrentLocation = () => { if (mapRef.current) { - mapRef.current.panTo(currentLocation) + mapRef.current.panTo(currentLocation.coordinates) mapRef.current.setZoom(14) } } + const addDraggablePin = () => { + const center = mapRef?.current?.getCenter() + + if (!center) { + return + } + + setDraggablePin({ + coordinates: { lat: center?.lat(), lng: center?.lng() }, + visible: true, + }) + } + + const cancelDraggablePin = () => { + setDraggablePin({ + coordinates: { lat: 0, lng: 0 }, + visible: false, + }) + } + + const handleDragEnd = (event: google.maps.MapMouseEvent) => { + const lat = event?.latLng?.lat() + const lng = event?.latLng?.lng() + + if (!lat || !lng) { + return + } + + setDraggablePin({ + coordinates: { lat, lng }, + visible: true, + }) + } + + const onInputChangeDraggablePinLat = (e: React.ChangeEvent) => { + setDraggablePin({ + coordinates: { lat: Number(e.target.value), lng: draggablePin.coordinates.lng }, + visible: true, + }) + + if (!mapRef.current) { + return + } + mapRef.current.panTo({ + lat: Number(e.target.value), + lng: draggablePin.coordinates.lng, + }) + } + + const onInputChangeDraggablePinLong = (e: React.ChangeEvent) => { + setDraggablePin({ + coordinates: { lat: draggablePin.coordinates.lat, lng: Number(e.target.value) }, + visible: true, + }) + + if (!mapRef.current) { + return + } + mapRef.current.panTo({ + lat: draggablePin.coordinates.lat, + lng: Number(e.target.value), + }) + } + return ( <> - {/* TODO USE LOGO HERE */} - + {draggablePin.visible && ( +
+
+
+ + +
+
+ + +
+
+
+ )} + + {draggablePin.visible && ( +
+ + +
+ )} + {!draggablePin.visible && ( + + )} + {currentLocation.userAllowedLocation && ( + + )} @@ -117,19 +258,21 @@ export default function MapComponent({ mapData }: MapComponentProps) { onClick={() => handleMarkerClick(marker)} /> ))} - + {currentLocation.userAllowedLocation && ( + + )} {selectedMarker && ( )} + {draggablePin.visible && ( + + )} ) diff --git a/apps/map/components/map/suggest-form.tsx b/apps/map/components/map/suggest-form.tsx new file mode 100644 index 0000000000..9639c54057 --- /dev/null +++ b/apps/map/components/map/suggest-form.tsx @@ -0,0 +1,102 @@ +import { submitMerchantSuggest } from "@/app/server-acton" +import InputComponent from "../input" +import { + Sheet, + SheetContent, + SheetDescription, + SheetHeader, + SheetTitle, + SheetTrigger, +} from "../sheet" +import { useFormState } from "react-dom" +import { useState } from "react" + +type formProps = { + latitude: number + longitude: number +} + +export function SuggestMapFormSheet({ latitude, longitude }: formProps) { + const [isOpen, setIsOpen] = useState(false) + const [state, formAction] = useFormState< + { + error: boolean + message: string + }, + FormData + >(submitMerchantSuggest, { + error: false, + message: "", + }) + + const handleOpen = () => { + state.error = false + state.message = "" + setIsOpen(true) + } + + return ( + + + + + + + Suggest Business + + {state.message === "success" ? ( +

{"Request Submitted"}

+ ) : ( + <> + + Fill the Details of the Business you want to suggest, with there username. + +
+ + + + + {state.error && {state.message}} + + + + )} +
+
+ ) +} diff --git a/apps/map/components/sheet/index.tsx b/apps/map/components/sheet/index.tsx new file mode 100644 index 0000000000..a6095ced50 --- /dev/null +++ b/apps/map/components/sheet/index.tsx @@ -0,0 +1,126 @@ +import * as React from "react" +import * as SheetPrimitive from "@radix-ui/react-dialog" +import { cva, type VariantProps } from "class-variance-authority" +import { cn } from "../utils" + +const Sheet = SheetPrimitive.Root + +const SheetTrigger = SheetPrimitive.Trigger + +const SheetClose = SheetPrimitive.Close + +const SheetPortal = SheetPrimitive.Portal + +const SheetOverlay = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)) +SheetOverlay.displayName = SheetPrimitive.Overlay.displayName + +const sheetVariants = cva( + "fixed z-50 gap-4 bg-white p-6 shadow-lg transition ease-in-out data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:duration-300 data-[state=open]:duration-500", + { + variants: { + side: { + top: "inset-x-0 top-0 border-b data-[state=closed]:slide-out-to-top data-[state=open]:slide-in-from-top", + bottom: + "inset-x-0 bottom-0 border-t data-[state=closed]:slide-out-to-bottom data-[state=open]:slide-in-from-bottom", + left: "inset-y-0 left-0 h-full sm:w-3/4 sm:border-r data-[state=closed]:slide-out-to-left data-[state=open]:slide-in-from-left w-full sm:max-w-sm", + right: + "inset-y-0 right-0 h-full sm:w-3/4 sm:border-l data-[state=closed]:slide-out-to-right data-[state=open]:slide-in-from-right w-full sm:max-w-sm", + }, + }, + defaultVariants: { + side: "right", + }, + }, +) + +interface SheetContentProps + extends React.ComponentPropsWithoutRef, + VariantProps {} + +const SheetContent = React.forwardRef< + React.ElementRef, + SheetContentProps +>(({ side = "right", className, children, ...props }, ref) => ( + + + + {children} + + xClose + + + +)) +SheetContent.displayName = SheetPrimitive.Content.displayName + +const SheetHeader = ({ className, ...props }: React.HTMLAttributes) => ( +
+) +SheetHeader.displayName = "SheetHeader" + +const SheetFooter = ({ className, ...props }: React.HTMLAttributes) => ( +
+) +SheetFooter.displayName = "SheetFooter" + +const SheetTitle = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)) +SheetTitle.displayName = SheetPrimitive.Title.displayName + +const SheetDescription = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)) +SheetDescription.displayName = SheetPrimitive.Description.displayName + +export { + Sheet, + SheetPortal, + SheetOverlay, + SheetTrigger, + SheetClose, + SheetContent, + SheetHeader, + SheetFooter, + SheetTitle, + SheetDescription, +} diff --git a/apps/map/components/utils.ts b/apps/map/components/utils.ts new file mode 100644 index 0000000000..bd0c391ddd --- /dev/null +++ b/apps/map/components/utils.ts @@ -0,0 +1,6 @@ +import { clsx, type ClassValue } from "clsx" +import { twMerge } from "tailwind-merge" + +export function cn(...inputs: ClassValue[]) { + return twMerge(clsx(inputs)) +} diff --git a/apps/map/package.json b/apps/map/package.json index 499850d689..98b1374681 100644 --- a/apps/map/package.json +++ b/apps/map/package.json @@ -22,12 +22,17 @@ "@opentelemetry/sdk-node": "^0.48.0", "@opentelemetry/sdk-trace-node": "^1.18.1", "@opentelemetry/semantic-conventions": "^1.17.1", + "@radix-ui/react-dialog": "^1.0.5", "@react-google-maps/api": "^2.19.2", "@t3-oss/env-nextjs": "^0.8.0", + "class-variance-authority": "^0.7.0", + "clsx": "^2.0.0", "graphql": "^16.8.1", "next": "14.1.0", - "react": "^18", - "react-dom": "^18", + "react": "^18.2.0", + "react-dom": "^18.2.0", + "tailwind-merge": "^2.1.0", + "tailwindcss-animate": "^1.0.7", "zod": "^3.22.4" }, "devDependencies": { @@ -41,8 +46,8 @@ "@graphql-codegen/typescript-resolvers": "^4.0.1", "@graphql-inspector/cli": "^4.0.3", "@types/node": "^20", - "@types/react": "^18", - "@types/react-dom": "^18", + "@types/react": "18.2.31", + "@types/react-dom": "18.2.14", "autoprefixer": "^10.0.1", "eslint": "^8", "eslint-config-next": "14.1.0", diff --git a/apps/map/public/location.svg b/apps/map/public/location.svg new file mode 100644 index 0000000000..e8017c368f --- /dev/null +++ b/apps/map/public/location.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/map/services/galoy/graphql/generated.ts b/apps/map/services/galoy/graphql/generated.ts index 656487878e..8c8f3005f0 100644 --- a/apps/map/services/galoy/graphql/generated.ts +++ b/apps/map/services/galoy/graphql/generated.ts @@ -796,6 +796,32 @@ export type MapMarker = { readonly username: Scalars['Username']['output']; }; +export type Merchant = { + readonly __typename: 'Merchant'; + /** GPS coordinates for the merchant that can be used to place the related business on a map */ + readonly coordinates: Coordinates; + readonly createdAt: Scalars['Timestamp']['output']; + readonly id: Scalars['ID']['output']; + readonly title: Scalars['String']['output']; + /** The username of the merchant */ + readonly username: Scalars['Username']['output']; + /** Whether the merchant has been validated */ + readonly validated: Scalars['Boolean']['output']; +}; + +export type MerchantMapSuggestInput = { + readonly latitude: Scalars['Float']['input']; + readonly longitude: Scalars['Float']['input']; + readonly title: Scalars['String']['input']; + readonly username: Scalars['Username']['input']; +}; + +export type MerchantPayload = { + readonly __typename: 'MerchantPayload'; + readonly errors: ReadonlyArray; + readonly merchant?: Maybe; +}; + export type MobileVersions = { readonly __typename: 'MobileVersions'; readonly currentSupported: Scalars['Int']['output']; @@ -903,6 +929,7 @@ export type Mutation = { readonly lnUsdInvoiceFeeProbe: SatAmountPayload; /** Sends a payment to a lightning address. */ readonly lnurlPaymentSend: PaymentSendPayload; + readonly merchantMapSuggest: MerchantPayload; readonly onChainAddressCreate: OnChainAddressPayload; readonly onChainAddressCurrent: OnChainAddressPayload; readonly onChainPaymentSend: PaymentSendPayload; @@ -1091,6 +1118,11 @@ export type MutationLnurlPaymentSendArgs = { }; +export type MutationMerchantMapSuggestArgs = { + input: MerchantMapSuggestInput; +}; + + export type MutationOnChainAddressCreateArgs = { input: OnChainAddressCreateInput; }; @@ -2103,12 +2135,66 @@ export const WalletCurrency = { } as const; export type WalletCurrency = typeof WalletCurrency[keyof typeof WalletCurrency]; +export type MerchantMapSuggestMutationVariables = Exact<{ + input: MerchantMapSuggestInput; +}>; + + +export type MerchantMapSuggestMutation = { readonly __typename: 'Mutation', readonly merchantMapSuggest: { readonly __typename: 'MerchantPayload', readonly errors: ReadonlyArray<{ readonly __typename: 'GraphQLApplicationError', readonly code?: string | null, readonly message: string }>, readonly merchant?: { readonly __typename: 'Merchant', readonly createdAt: number, readonly id: string, readonly title: string, readonly username: string, readonly validated: boolean, readonly coordinates: { readonly __typename: 'Coordinates', readonly latitude: number, readonly longitude: number } } | null } }; + export type BusinessMapMarkersQueryVariables = Exact<{ [key: string]: never; }>; export type BusinessMapMarkersQuery = { readonly __typename: 'Query', readonly businessMapMarkers: ReadonlyArray<{ readonly __typename: 'MapMarker', readonly username: string, readonly mapInfo: { readonly __typename: 'MapInfo', readonly title: string, readonly coordinates: { readonly __typename: 'Coordinates', readonly latitude: number, readonly longitude: number } } }> }; +export const MerchantMapSuggestDocument = gql` + mutation MerchantMapSuggest($input: MerchantMapSuggestInput!) { + merchantMapSuggest(input: $input) { + errors { + code + message + } + merchant { + coordinates { + latitude + longitude + } + createdAt + id + title + username + validated + } + } +} + `; +export type MerchantMapSuggestMutationFn = Apollo.MutationFunction; + +/** + * __useMerchantMapSuggestMutation__ + * + * To run a mutation, you first call `useMerchantMapSuggestMutation` within a React component and pass it any options that fit your needs. + * When your component renders, `useMerchantMapSuggestMutation` returns a tuple that includes: + * - A mutate function that you can call at any time to execute the mutation + * - An object with fields that represent the current status of the mutation's execution + * + * @param baseOptions options that will be passed into the mutation, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options-2; + * + * @example + * const [merchantMapSuggestMutation, { data, loading, error }] = useMerchantMapSuggestMutation({ + * variables: { + * input: // value for 'input' + * }, + * }); + */ +export function useMerchantMapSuggestMutation(baseOptions?: Apollo.MutationHookOptions) { + const options = {...defaultOptions, ...baseOptions} + return Apollo.useMutation(MerchantMapSuggestDocument, options); + } +export type MerchantMapSuggestMutationHookResult = ReturnType; +export type MerchantMapSuggestMutationResult = Apollo.MutationResult; +export type MerchantMapSuggestMutationOptions = Apollo.BaseMutationOptions; export const BusinessMapMarkersDocument = gql` query BusinessMapMarkers { businessMapMarkers { diff --git a/apps/map/services/galoy/graphql/mutation/merchant-map-suggest.ts b/apps/map/services/galoy/graphql/mutation/merchant-map-suggest.ts new file mode 100644 index 0000000000..dc14fc8bc0 --- /dev/null +++ b/apps/map/services/galoy/graphql/mutation/merchant-map-suggest.ts @@ -0,0 +1,55 @@ +import { gql } from "@apollo/client" +import { apolloClient } from "../client" +import { MerchantMapSuggestDocument, MerchantMapSuggestMutation } from "../generated" + +gql` + mutation MerchantMapSuggest($input: MerchantMapSuggestInput!) { + merchantMapSuggest(input: $input) { + errors { + code + message + } + merchant { + coordinates { + latitude + longitude + } + createdAt + id + title + username + validated + } + } + } +` + +export async function merchantMapSuggest(input: { + latitude: number + longitude: number + title: string + username: string +}): Promise { + const client = apolloClient.UnAuthed() + try { + const response = await client.mutate({ + mutation: MerchantMapSuggestDocument, + variables: { + input, + }, + }) + + if (!response?.data?.merchantMapSuggest) { + return Error("No response") + } + + return response.data.merchantMapSuggest + } catch (err) { + console.error("error while fetching MerchantMapSuggest", err) + if (err instanceof Error) { + return Error(err.message) + } else { + return Error("Unknown error") + } + } +} diff --git a/apps/map/tailwind.config.ts b/apps/map/tailwind.config.ts index 7e4bd91a03..9823b1c69a 100644 --- a/apps/map/tailwind.config.ts +++ b/apps/map/tailwind.config.ts @@ -1,4 +1,4 @@ -import type { Config } from "tailwindcss"; +import type { Config } from "tailwindcss" const config: Config = { content: [ @@ -15,6 +15,6 @@ const config: Config = { }, }, }, - plugins: [], -}; -export default config; + plugins: [require("tailwindcss-animate")], +} +export default config diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 4992f3f3bd..132015f20e 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -149,118 +149,6 @@ importers: specifier: ^29.1.1 version: 29.1.2(@babel/core@7.23.9)(jest@29.7.0)(typescript@5.2.2) - apps/map: - dependencies: - '@apollo/client': - specifier: ^3.9.2 - version: 3.9.2(@types/react@18.2.48)(graphql@16.8.1)(react-dom@18.2.0)(react@18.2.0) - '@opentelemetry/api': - specifier: ^1.6.0 - version: 1.7.0 - '@opentelemetry/core': - specifier: ^1.21.0 - version: 1.21.0(@opentelemetry/api@1.7.0) - '@opentelemetry/exporter-trace-otlp-http': - specifier: ^0.44.0 - version: 0.44.0(@opentelemetry/api@1.7.0) - '@opentelemetry/instrumentation-graphql': - specifier: ^0.35.2 - version: 0.35.2(@opentelemetry/api@1.7.0) - '@opentelemetry/instrumentation-http': - specifier: ^0.44.0 - version: 0.44.0(@opentelemetry/api@1.7.0) - '@opentelemetry/instrumentation-net': - specifier: ^0.32.2 - version: 0.32.5(@opentelemetry/api@1.7.0) - '@opentelemetry/resources': - specifier: ^1.17.1 - version: 1.21.0(@opentelemetry/api@1.7.0) - '@opentelemetry/sdk-node': - specifier: ^0.48.0 - version: 0.48.0(@opentelemetry/api@1.7.0) - '@opentelemetry/sdk-trace-node': - specifier: ^1.18.1 - version: 1.21.0(@opentelemetry/api@1.7.0) - '@opentelemetry/semantic-conventions': - specifier: ^1.17.1 - version: 1.21.0 - '@react-google-maps/api': - specifier: ^2.19.2 - version: 2.19.2(react-dom@18.2.0)(react@18.2.0) - '@t3-oss/env-nextjs': - specifier: ^0.8.0 - version: 0.8.0(typescript@5.3.3)(zod@3.22.4) - graphql: - specifier: ^16.8.1 - version: 16.8.1 - next: - specifier: 14.1.0 - version: 14.1.0(@babel/core@7.23.9)(@opentelemetry/api@1.7.0)(react-dom@18.2.0)(react@18.2.0) - react: - specifier: ^18 - version: 18.2.0 - react-dom: - specifier: ^18 - version: 18.2.0(react@18.2.0) - zod: - specifier: ^3.22.4 - version: 3.22.4 - devDependencies: - '@galoy/eslint-config': - specifier: workspace:^ - version: link:../../lib/eslint-config - '@graphql-codegen/add': - specifier: ^5.0.0 - version: 5.0.0(graphql@16.8.1) - '@graphql-codegen/cli': - specifier: ^5.0.0 - version: 5.0.0(@types/node@20.11.5)(graphql@16.8.1)(typescript@5.3.3) - '@graphql-codegen/client-preset': - specifier: ^4.1.0 - version: 4.1.0(graphql@16.8.1) - '@graphql-codegen/typescript': - specifier: ^4.0.1 - version: 4.0.1(graphql@16.8.1) - '@graphql-codegen/typescript-operations': - specifier: ^4.0.1 - version: 4.0.1(graphql@16.8.1) - '@graphql-codegen/typescript-react-apollo': - specifier: ^4.1.0 - version: 4.1.0(graphql-tag@2.12.6)(graphql@16.8.1) - '@graphql-codegen/typescript-resolvers': - specifier: ^4.0.1 - version: 4.0.1(graphql@16.8.1) - '@graphql-inspector/cli': - specifier: ^4.0.3 - version: 4.0.3(@types/node@20.11.5)(graphql@16.8.1) - '@types/node': - specifier: ^20 - version: 20.11.5 - '@types/react': - specifier: ^18 - version: 18.2.48 - '@types/react-dom': - specifier: ^18 - version: 18.2.18 - autoprefixer: - specifier: ^10.0.1 - version: 10.4.16(postcss@8.4.32) - eslint: - specifier: ^8 - version: 8.56.0 - eslint-config-next: - specifier: 14.1.0 - version: 14.1.0(eslint@8.56.0)(typescript@5.3.3) - postcss: - specifier: ^8 - version: 8.4.32 - tailwindcss: - specifier: ^3.3.0 - version: 3.4.1 - typescript: - specifier: ^5 - version: 5.3.3 - apps/consent: dependencies: '@apollo/client': @@ -551,6 +439,133 @@ importers: specifier: 5.3.3 version: 5.3.3 + apps/map: + dependencies: + '@apollo/client': + specifier: ^3.9.2 + version: 3.9.2(@types/react@18.2.31)(graphql@16.8.1)(react-dom@18.2.0)(react@18.2.0) + '@opentelemetry/api': + specifier: ^1.6.0 + version: 1.7.0 + '@opentelemetry/core': + specifier: ^1.21.0 + version: 1.21.0(@opentelemetry/api@1.7.0) + '@opentelemetry/exporter-trace-otlp-http': + specifier: ^0.44.0 + version: 0.44.0(@opentelemetry/api@1.7.0) + '@opentelemetry/instrumentation-graphql': + specifier: ^0.35.2 + version: 0.35.2(@opentelemetry/api@1.7.0) + '@opentelemetry/instrumentation-http': + specifier: ^0.44.0 + version: 0.44.0(@opentelemetry/api@1.7.0) + '@opentelemetry/instrumentation-net': + specifier: ^0.32.2 + version: 0.32.5(@opentelemetry/api@1.7.0) + '@opentelemetry/resources': + specifier: ^1.17.1 + version: 1.21.0(@opentelemetry/api@1.7.0) + '@opentelemetry/sdk-node': + specifier: ^0.48.0 + version: 0.48.0(@opentelemetry/api@1.7.0) + '@opentelemetry/sdk-trace-node': + specifier: ^1.18.1 + version: 1.21.0(@opentelemetry/api@1.7.0) + '@opentelemetry/semantic-conventions': + specifier: ^1.17.1 + version: 1.21.0 + '@radix-ui/react-dialog': + specifier: ^1.0.5 + version: 1.0.5(@types/react-dom@18.2.14)(@types/react@18.2.31)(react-dom@18.2.0)(react@18.2.0) + '@react-google-maps/api': + specifier: ^2.19.2 + version: 2.19.2(react-dom@18.2.0)(react@18.2.0) + '@t3-oss/env-nextjs': + specifier: ^0.8.0 + version: 0.8.0(typescript@5.3.3)(zod@3.22.4) + class-variance-authority: + specifier: ^0.7.0 + version: 0.7.0 + clsx: + specifier: ^2.0.0 + version: 2.0.0 + graphql: + specifier: ^16.8.1 + version: 16.8.1 + next: + specifier: 14.1.0 + version: 14.1.0(@babel/core@7.23.9)(@opentelemetry/api@1.7.0)(react-dom@18.2.0)(react@18.2.0) + react: + specifier: ^18.2.0 + version: 18.2.0 + react-dom: + specifier: ^18.2.0 + version: 18.2.0(react@18.2.0) + tailwind-merge: + specifier: ^2.1.0 + version: 2.1.0 + tailwindcss-animate: + specifier: ^1.0.7 + version: 1.0.7(tailwindcss@3.4.1) + zod: + specifier: ^3.22.4 + version: 3.22.4 + devDependencies: + '@galoy/eslint-config': + specifier: workspace:^ + version: link:../../lib/eslint-config + '@graphql-codegen/add': + specifier: ^5.0.0 + version: 5.0.0(graphql@16.8.1) + '@graphql-codegen/cli': + specifier: ^5.0.0 + version: 5.0.0(@types/node@20.11.5)(graphql@16.8.1)(typescript@5.3.3) + '@graphql-codegen/client-preset': + specifier: ^4.1.0 + version: 4.1.0(graphql@16.8.1) + '@graphql-codegen/typescript': + specifier: ^4.0.1 + version: 4.0.1(graphql@16.8.1) + '@graphql-codegen/typescript-operations': + specifier: ^4.0.1 + version: 4.0.1(graphql@16.8.1) + '@graphql-codegen/typescript-react-apollo': + specifier: ^4.1.0 + version: 4.1.0(graphql-tag@2.12.6)(graphql@16.8.1) + '@graphql-codegen/typescript-resolvers': + specifier: ^4.0.1 + version: 4.0.1(graphql@16.8.1) + '@graphql-inspector/cli': + specifier: ^4.0.3 + version: 4.0.3(@types/node@20.11.5)(graphql@16.8.1) + '@types/node': + specifier: ^20 + version: 20.11.5 + '@types/react': + specifier: 18.2.31 + version: 18.2.31 + '@types/react-dom': + specifier: 18.2.14 + version: 18.2.14 + autoprefixer: + specifier: ^10.0.1 + version: 10.4.16(postcss@8.4.32) + eslint: + specifier: ^8 + version: 8.56.0 + eslint-config-next: + specifier: 14.1.0 + version: 14.1.0(eslint@8.56.0)(typescript@5.3.3) + postcss: + specifier: ^8 + version: 8.4.32 + tailwindcss: + specifier: ^3.3.0 + version: 3.4.1 + typescript: + specifier: ^5 + version: 5.3.3 + apps/pay: dependencies: '@apollo/client': @@ -1363,7 +1378,6 @@ packages: /@alloc/quick-lru@5.2.0: resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==} engines: {node: '>=10'} - dev: true /@ampproject/remapping@2.2.1: resolution: {integrity: sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==} @@ -1495,7 +1509,7 @@ packages: zen-observable-ts: 1.2.5 dev: false - /@apollo/client@3.9.2(@types/react@18.2.48)(graphql@16.8.1)(react-dom@18.2.0)(react@18.2.0): + /@apollo/client@3.9.2(@types/react@18.2.31)(graphql@16.8.1)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-Zw9WvXjqhpbgkvAvnj52vstOWwM0iedKWtn1hSq1cODQyoe1CF2uFwMYFI7l56BrAY9CzLi6MQA0AhxpgJgvxw==} peerDependencies: graphql: ^15.0.0 || ^16.0.0 @@ -1524,7 +1538,7 @@ packages: prop-types: 15.8.1 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - rehackt: 0.0.3(@types/react@18.2.48)(react@18.2.0) + rehackt: 0.0.3(@types/react@18.2.31)(react@18.2.0) response-iterator: 0.2.6 symbol-observable: 4.0.0 ts-invariant: 0.10.3 @@ -3172,12 +3186,21 @@ packages: '@babel/core': 7.23.7 '@babel/helper-plugin-utils': 7.22.5 - /@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.23.7): + /@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.23.9): + resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.9 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.23.9): resolution: {integrity: sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 + '@babel/core': 7.23.9 '@babel/helper-plugin-utils': 7.22.5 dev: true @@ -3198,6 +3221,15 @@ packages: '@babel/core': 7.23.7 '@babel/helper-plugin-utils': 7.22.5 + /@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.23.9): + resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.9 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + /@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.23.5): resolution: {integrity: sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==} engines: {node: '>=6.9.0'} @@ -3366,6 +3398,15 @@ packages: '@babel/core': 7.23.7 '@babel/helper-plugin-utils': 7.22.5 + /@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.23.9): + resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.9 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + /@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.23.5): resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==} peerDependencies: @@ -3383,6 +3424,15 @@ packages: '@babel/core': 7.23.7 '@babel/helper-plugin-utils': 7.22.5 + /@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.23.9): + resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.9 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + /@babel/plugin-syntax-jsx@7.23.3(@babel/core@7.23.5): resolution: {integrity: sha512-EB2MELswq55OHUoRZLGg/zC7QWUKfNLpE57m/S2yr1uEneIgsTgrSzXP3NXEsMkVn76OlaVVnzN+ugObuYGwhg==} engines: {node: '>=6.9.0'} @@ -3429,6 +3479,15 @@ packages: '@babel/core': 7.23.7 '@babel/helper-plugin-utils': 7.22.5 + /@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.23.9): + resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.9 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + /@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.23.5): resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==} peerDependencies: @@ -3446,6 +3505,15 @@ packages: '@babel/core': 7.23.7 '@babel/helper-plugin-utils': 7.22.5 + /@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.23.9): + resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.9 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + /@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.23.5): resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==} peerDependencies: @@ -3463,6 +3531,15 @@ packages: '@babel/core': 7.23.7 '@babel/helper-plugin-utils': 7.22.5 + /@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.23.9): + resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.9 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + /@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.23.5): resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==} peerDependencies: @@ -3480,6 +3557,15 @@ packages: '@babel/core': 7.23.7 '@babel/helper-plugin-utils': 7.22.5 + /@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.23.9): + resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.9 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + /@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.23.5): resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==} peerDependencies: @@ -3497,6 +3583,15 @@ packages: '@babel/core': 7.23.7 '@babel/helper-plugin-utils': 7.22.5 + /@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.23.9): + resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.9 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + /@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.23.5): resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==} peerDependencies: @@ -3514,6 +3609,15 @@ packages: '@babel/core': 7.23.7 '@babel/helper-plugin-utils': 7.22.5 + /@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.23.9): + resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.9 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + /@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.23.5): resolution: {integrity: sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==} engines: {node: '>=6.9.0'} @@ -3552,6 +3656,16 @@ packages: '@babel/core': 7.23.7 '@babel/helper-plugin-utils': 7.22.5 + /@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.23.9): + resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.9 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + /@babel/plugin-syntax-typescript@7.23.3(@babel/core@7.23.7): resolution: {integrity: sha512-9EiNjVJOMwCO+43TqoTrgQ8jMwcAd0sWyXi9RPfIsLTj4R2MADDDQXELhffaUx/uJv2AYcxBgPwH6j4TIA4ytQ==} engines: {node: '>=6.9.0'} @@ -3561,6 +3675,16 @@ packages: '@babel/core': 7.23.7 '@babel/helper-plugin-utils': 7.22.5 + /@babel/plugin-syntax-typescript@7.23.3(@babel/core@7.23.9): + resolution: {integrity: sha512-9EiNjVJOMwCO+43TqoTrgQ8jMwcAd0sWyXi9RPfIsLTj4R2MADDDQXELhffaUx/uJv2AYcxBgPwH6j4TIA4ytQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.9 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + /@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.23.5): resolution: {integrity: sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==} engines: {node: '>=6.9.0'} @@ -6151,8 +6275,8 @@ packages: optional: true dependencies: '@babel/generator': 7.23.6 - '@babel/template': 7.22.15 - '@babel/types': 7.23.6 + '@babel/template': 7.23.9 + '@babel/types': 7.23.9 '@graphql-codegen/core': 4.0.0(graphql@16.8.1) '@graphql-codegen/plugin-helpers': 5.0.1(graphql@16.8.1) '@graphql-tools/apollo-engine-loader': 8.0.0(graphql@16.8.1) @@ -6207,8 +6331,8 @@ packages: optional: true dependencies: '@babel/generator': 7.23.6 - '@babel/template': 7.22.15 - '@babel/types': 7.23.6 + '@babel/template': 7.23.9 + '@babel/types': 7.23.9 '@graphql-codegen/core': 4.0.0(graphql@16.8.1) '@graphql-codegen/plugin-helpers': 5.0.1(graphql@16.8.1) '@graphql-tools/apollo-engine-loader': 8.0.0(graphql@16.8.1) @@ -8304,7 +8428,7 @@ packages: engines: {node: ^8.13.0 || >=10.10.0} dependencies: '@grpc/proto-loader': 0.7.10 - '@types/node': 20.8.10 + '@types/node': 20.11.5 dev: false /@grpc/grpc-js@1.9.14: @@ -8543,7 +8667,7 @@ packages: resolution: {integrity: sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jridgewell/trace-mapping': 0.3.20 + '@jridgewell/trace-mapping': 0.3.22 callsites: 3.1.0 graceful-fs: 4.2.11 dev: true @@ -9425,12 +9549,10 @@ packages: dependencies: '@nodelib/fs.stat': 2.0.5 run-parallel: 1.2.0 - dev: true /@nodelib/fs.stat@2.0.5: resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} engines: {node: '>= 8'} - dev: true /@nodelib/fs.walk@1.2.8: resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} @@ -9438,12 +9560,18 @@ packages: dependencies: '@nodelib/fs.scandir': 2.1.5 fastq: 1.16.0 - dev: true /@one-ini/wasm@0.1.1: resolution: {integrity: sha512-XuySG1E38YScSJoMlqovLru4KTUNSjgVTIjyh7qMX6aNN5HY5Ct5LhRJdxO79JtTzKfzV/bnWpz+zquYrISsvw==} dev: true + /@opentelemetry/api-logs@0.44.0: + resolution: {integrity: sha512-OctojdKGmXHKAJa4/Ml+Nf7MD9jtYXvZyP64xTh0pNTmtgaTdWW3FURri2DdB/+l7YxRy0tYYZS3/tYEM1pj3w==} + engines: {node: '>=14'} + dependencies: + '@opentelemetry/api': 1.7.0 + dev: false + /@opentelemetry/api-logs@0.45.1: resolution: {integrity: sha512-zVGq/k70l+kB/Wuv3O/zhptP2hvDhEbhDu9EtHde1iWZJf3FedeYS/nWVcMBkkyPAjS/JKNk86WN4CBQLGUuOw==} engines: {node: '>=14'} @@ -9497,6 +9625,16 @@ packages: '@opentelemetry/api': 1.7.0 dev: false + /@opentelemetry/core@1.17.1(@opentelemetry/api@1.7.0): + resolution: {integrity: sha512-I6LrZvl1FF97FQXPR0iieWQmKnGxYtMbWA1GrAXnLUR+B1Hn2m8KqQNEIlZAucyv00GBgpWkpllmULmZfG8P3g==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': '>=1.0.0 <1.7.0' + dependencies: + '@opentelemetry/api': 1.7.0 + '@opentelemetry/semantic-conventions': 1.17.1 + dev: false + /@opentelemetry/core@1.18.1(@opentelemetry/api@1.7.0): resolution: {integrity: sha512-kvnUqezHMhsQvdsnhnqTNfAJs3ox/isB0SVrM1dhVFw7SsB7TstuVa6fgWnN2GdPyilIFLUvvbTZoVRmx6eiRg==} engines: {node: '>=14'} @@ -9557,6 +9695,20 @@ packages: '@opentelemetry/sdk-trace-base': 1.21.0(@opentelemetry/api@1.7.0) dev: false + /@opentelemetry/exporter-trace-otlp-http@0.44.0(@opentelemetry/api@1.7.0): + resolution: {integrity: sha512-RkorGE6wf6PF5OjMUGBnbUDyaVgmN+vL7OgClJJUTxqbE7WqgbW8dkU04O+1mcB1znXZ1Aej1uDm0pS+eW/upA==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.0.0 + dependencies: + '@opentelemetry/api': 1.7.0 + '@opentelemetry/core': 1.17.1(@opentelemetry/api@1.7.0) + '@opentelemetry/otlp-exporter-base': 0.44.0(@opentelemetry/api@1.7.0) + '@opentelemetry/otlp-transformer': 0.44.0(@opentelemetry/api@1.7.0) + '@opentelemetry/resources': 1.17.1(@opentelemetry/api@1.7.0) + '@opentelemetry/sdk-trace-base': 1.17.1(@opentelemetry/api@1.7.0) + dev: false + /@opentelemetry/exporter-trace-otlp-http@0.45.1(@opentelemetry/api@1.7.0): resolution: {integrity: sha512-a6CGqSG66n5R1mghzLMzyzn3iGap1b0v+0PjKFjfYuwLtpHQBxh2PHxItu+m2mXSwnM4R0GJlk9oUW5sQkCE0w==} engines: {node: '>=14'} @@ -9655,6 +9807,18 @@ packages: '@opentelemetry/semantic-conventions': 1.21.0 dev: false + /@opentelemetry/instrumentation-graphql@0.35.2(@opentelemetry/api@1.7.0): + resolution: {integrity: sha512-lJv7BbHFK0ExwogdQMtVHfnWhCBMDQEz8KYvhShXfRPiSStU5aVwa3TmT0O00KiJFpATSKJNZMv1iZNHbF6z1g==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + dependencies: + '@opentelemetry/api': 1.7.0 + '@opentelemetry/instrumentation': 0.44.0(@opentelemetry/api@1.7.0) + transitivePeerDependencies: + - supports-color + dev: false + /@opentelemetry/instrumentation-graphql@0.36.0(@opentelemetry/api@1.7.0): resolution: {integrity: sha512-H5nezZCV4HUjmPi4o2QlFXGzvldZiJ7hAEldy+37qMmm5PaqLmFW4w084/C+4IdPoxm4gJRtI8vkXJQJqqyktQ==} engines: {node: '>=14'} @@ -9704,6 +9868,21 @@ packages: - supports-color dev: false + /@opentelemetry/instrumentation-http@0.44.0(@opentelemetry/api@1.7.0): + resolution: {integrity: sha512-Nlvj3Y2n9q6uIcQq9f33HbcB4Dr62erSwYA37+vkorYnzI2j9PhxKitocRTZnbYsrymYmQJW9mdq/IAfbtVnNg==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + dependencies: + '@opentelemetry/api': 1.7.0 + '@opentelemetry/core': 1.17.1(@opentelemetry/api@1.7.0) + '@opentelemetry/instrumentation': 0.44.0(@opentelemetry/api@1.7.0) + '@opentelemetry/semantic-conventions': 1.17.1 + semver: 7.6.0 + transitivePeerDependencies: + - supports-color + dev: false + /@opentelemetry/instrumentation-http@0.45.1(@opentelemetry/api@1.7.0): resolution: {integrity: sha512-ph7kv38Lipg/ggvoNJrwc3RCceLnTkVZwRbE5iu6w7fGsMjjc9jwlSmaOXKxUJjIimil2hL1qBm8xg2lmOVwxg==} engines: {node: '>=14'} @@ -9817,6 +9996,22 @@ packages: - supports-color dev: false + /@opentelemetry/instrumentation@0.44.0(@opentelemetry/api@1.7.0): + resolution: {integrity: sha512-B6OxJTRRCceAhhnPDBshyQO7K07/ltX3quOLu0icEvPK9QZ7r9P1y0RQX8O5DxB4vTv4URRkxkg+aFU/plNtQw==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + dependencies: + '@opentelemetry/api': 1.7.0 + '@types/shimmer': 1.0.5 + import-in-the-middle: 1.4.2 + require-in-the-middle: 7.2.0 + semver: 7.6.0 + shimmer: 1.2.1 + transitivePeerDependencies: + - supports-color + dev: false + /@opentelemetry/instrumentation@0.45.1(@opentelemetry/api@1.7.0): resolution: {integrity: sha512-V1Cr0g8hSg35lpW3G/GYVZurrhHrQZJdmP68WyJ83f1FDn3iru+/Vnlto9kiOSm7PHhW+pZGdb9Fbv+mkQ31CA==} engines: {node: '>=14'} @@ -9881,6 +10076,16 @@ packages: - supports-color dev: false + /@opentelemetry/otlp-exporter-base@0.44.0(@opentelemetry/api@1.7.0): + resolution: {integrity: sha512-DKQqRrfVMe96aSLZiCgIesLcMLfnWH8d4bTpLB1JbU+SAQJ7nVCAfS9U36mjFCVhvNDD7gwfCNrxqFMCHq6FUw==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.0.0 + dependencies: + '@opentelemetry/api': 1.7.0 + '@opentelemetry/core': 1.17.1(@opentelemetry/api@1.7.0) + dev: false + /@opentelemetry/otlp-exporter-base@0.45.1(@opentelemetry/api@1.7.0): resolution: {integrity: sha512-Jvd6x8EwWGKEPWF4tkP4LpTPXiIkkafMNMvMJUfJd5DyNAftL1vAz+48jmi3URL2LMPkGryrvWPz8Tdu917gQw==} engines: {node: '>=14'} @@ -9961,6 +10166,21 @@ packages: protobufjs: 7.2.5 dev: false + /@opentelemetry/otlp-transformer@0.44.0(@opentelemetry/api@1.7.0): + resolution: {integrity: sha512-1/KC+aHM1oGEsXyNy7QoxpvErxGdzt26bg9VHyNb4TDILkUFdwrnywnxPc6lXZ6h/8T8Mt718UWOKjNHC514kQ==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': '>=1.3.0 <1.7.0' + dependencies: + '@opentelemetry/api': 1.7.0 + '@opentelemetry/api-logs': 0.44.0 + '@opentelemetry/core': 1.17.1(@opentelemetry/api@1.7.0) + '@opentelemetry/resources': 1.17.1(@opentelemetry/api@1.7.0) + '@opentelemetry/sdk-logs': 0.44.0(@opentelemetry/api-logs@0.44.0)(@opentelemetry/api@1.7.0) + '@opentelemetry/sdk-metrics': 1.17.1(@opentelemetry/api@1.7.0) + '@opentelemetry/sdk-trace-base': 1.17.1(@opentelemetry/api@1.7.0) + dev: false + /@opentelemetry/otlp-transformer@0.45.1(@opentelemetry/api@1.7.0): resolution: {integrity: sha512-FhIHgfC0b0XtoBrS5ISfva939yWffNl47ypXR8I7Ru+dunlySpmf2TLocKHYLHGcWiuoeSNO5O4dZCmSKOtpXw==} engines: {node: '>=14'} @@ -10071,6 +10291,17 @@ packages: engines: {node: '>=14'} dev: false + /@opentelemetry/resources@1.17.1(@opentelemetry/api@1.7.0): + resolution: {integrity: sha512-M2e5emqg5I7qRKqlzKx0ROkcPyF8PbcSaWEdsm72od9txP7Z/Pl8PDYOyu80xWvbHAWk5mDxOF6v3vNdifzclA==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': '>=1.0.0 <1.7.0' + dependencies: + '@opentelemetry/api': 1.7.0 + '@opentelemetry/core': 1.17.1(@opentelemetry/api@1.7.0) + '@opentelemetry/semantic-conventions': 1.17.1 + dev: false + /@opentelemetry/resources@1.18.1(@opentelemetry/api@1.7.0): resolution: {integrity: sha512-JjbcQLYMttXcIabflLRuaw5oof5gToYV9fuXbcsoOeQ0BlbwUn6DAZi++PNsSz2jjPeASfDls10iaO/8BRIPRA==} engines: {node: '>=14'} @@ -10104,6 +10335,19 @@ packages: '@opentelemetry/semantic-conventions': 1.21.0 dev: false + /@opentelemetry/sdk-logs@0.44.0(@opentelemetry/api-logs@0.44.0)(@opentelemetry/api@1.7.0): + resolution: {integrity: sha512-UN3ofh9Jj54gIgrSXNRWAoaH6iPvrrjed5YAtqO9cW65U+5QPzk1Rv95vjAcY9VTrmMWvuqgEK1CYObG6Hu4OQ==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': '>=1.4.0 <1.7.0' + '@opentelemetry/api-logs': '>=0.39.1' + dependencies: + '@opentelemetry/api': 1.7.0 + '@opentelemetry/api-logs': 0.44.0 + '@opentelemetry/core': 1.17.1(@opentelemetry/api@1.7.0) + '@opentelemetry/resources': 1.17.1(@opentelemetry/api@1.7.0) + dev: false + /@opentelemetry/sdk-logs@0.45.1(@opentelemetry/api-logs@0.45.1)(@opentelemetry/api@1.7.0): resolution: {integrity: sha512-z0RRgW4LeKEKnhXS4F/HnqB6+7gsy63YK47F4XAJYHs4s1KKg8XnQ2RkbuL31i/a9nXkylttYtvsT50CGr487g==} engines: {node: '>=14'} @@ -10143,6 +10387,18 @@ packages: '@opentelemetry/resources': 1.21.0(@opentelemetry/api@1.7.0) dev: false + /@opentelemetry/sdk-metrics@1.17.1(@opentelemetry/api@1.7.0): + resolution: {integrity: sha512-eHdpsMCKhKhwznxvEfls8Wv3y4ZBWkkXlD3m7vtHIiWBqsMHspWSfie1s07mM45i/bBCf6YBMgz17FUxIXwmZA==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': '>=1.3.0 <1.7.0' + dependencies: + '@opentelemetry/api': 1.7.0 + '@opentelemetry/core': 1.17.1(@opentelemetry/api@1.7.0) + '@opentelemetry/resources': 1.17.1(@opentelemetry/api@1.7.0) + lodash.merge: 4.6.2 + dev: false + /@opentelemetry/sdk-metrics@1.18.1(@opentelemetry/api@1.7.0): resolution: {integrity: sha512-TEFgeNFhdULBYiCoHbz31Y4PDsfjjxRp8Wmdp6ybLQZPqMNEb+dRq+XN8Xw3ivIgTaf9gYsomgV5ensX99RuEQ==} engines: {node: '>=14'} @@ -10227,6 +10483,18 @@ packages: - supports-color dev: false + /@opentelemetry/sdk-trace-base@1.17.1(@opentelemetry/api@1.7.0): + resolution: {integrity: sha512-pfSJJSjZj5jkCJUQZicSpzN8Iz9UKMryPWikZRGObPnJo6cUSoKkjZh6BM3j+D47G4olMBN+YZKYqkFM1L6zNA==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': '>=1.0.0 <1.7.0' + dependencies: + '@opentelemetry/api': 1.7.0 + '@opentelemetry/core': 1.17.1(@opentelemetry/api@1.7.0) + '@opentelemetry/resources': 1.17.1(@opentelemetry/api@1.7.0) + '@opentelemetry/semantic-conventions': 1.17.1 + dev: false + /@opentelemetry/sdk-trace-base@1.18.1(@opentelemetry/api@1.7.0): resolution: {integrity: sha512-tRHfDxN5dO+nop78EWJpzZwHsN1ewrZRVVwo03VJa3JQZxToRDH29/+MB24+yoa+IArerdr7INFJiX/iN4gjqg==} engines: {node: '>=14'} @@ -10308,6 +10576,11 @@ packages: semver: 7.6.0 dev: false + /@opentelemetry/semantic-conventions@1.17.1: + resolution: {integrity: sha512-xbR2U+2YjauIuo42qmE8XyJK6dYeRMLJuOlUP5SO4auET4VtOHOzgkRVOq+Ik18N+Xf3YPcqJs9dZMiDddz1eQ==} + engines: {node: '>=14'} + dev: false + /@opentelemetry/semantic-conventions@1.18.1: resolution: {integrity: sha512-+NLGHr6VZwcgE/2lw8zDIufOCGnzsA5CbQIMleXZTrgkBd0TanCX+MiDYJ1TOS4KL/Tqk0nFRxawnaYr6pkZkA==} engines: {node: '>=14'} @@ -10641,7 +10914,6 @@ packages: resolution: {integrity: sha512-yQ8oGX2GVsEYMWGxcovu1uGWPCxV5BFfeeYxqPmuAzUyLT9qmaMXSAhXpb0WrspIeqYzdJpkh2vHModJPgRIaw==} dependencies: '@babel/runtime': 7.23.7 - dev: true /@radix-ui/react-arrow@1.0.3(@types/react-dom@18.2.17)(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-wSP+pHsB/jQRaL6voubsQ/ZlrGBHHrOjmBnr19hxYgtS0WvAFwZhK2WP/YY5yF9uKECCEEDGxuLxq1NBK51wFA==} @@ -10688,6 +10960,20 @@ packages: react-dom: 18.2.0(react@18.2.0) dev: true + /@radix-ui/react-compose-refs@1.0.1(@types/react@18.2.31)(react@18.2.0): + resolution: {integrity: sha512-fDSBgd44FKHa1FRMU59qBMPFcl2PZE+2nmqunj+BWFyYYjnhIDWL2ItDs3rrbJDQOtzt5nIebLCQc4QRfz6LJw==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@babel/runtime': 7.23.7 + '@types/react': 18.2.31 + react: 18.2.0 + dev: false + /@radix-ui/react-compose-refs@1.0.1(@types/react@18.2.45)(react@18.2.0): resolution: {integrity: sha512-fDSBgd44FKHa1FRMU59qBMPFcl2PZE+2nmqunj+BWFyYYjnhIDWL2ItDs3rrbJDQOtzt5nIebLCQc4QRfz6LJw==} peerDependencies: @@ -10701,6 +10987,20 @@ packages: '@types/react': 18.2.45 react: 18.2.0 + /@radix-ui/react-context@1.0.1(@types/react@18.2.31)(react@18.2.0): + resolution: {integrity: sha512-ebbrdFoYTcuZ0v4wG5tedGnp9tzcV8awzsxYph7gXUyvnNLuTIcCk1q17JEbnVhXAKG9oX3KtchwiMIAYp9NLg==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@babel/runtime': 7.23.7 + '@types/react': 18.2.31 + react: 18.2.0 + dev: false + /@radix-ui/react-context@1.0.1(@types/react@18.2.45)(react@18.2.0): resolution: {integrity: sha512-ebbrdFoYTcuZ0v4wG5tedGnp9tzcV8awzsxYph7gXUyvnNLuTIcCk1q17JEbnVhXAKG9oX3KtchwiMIAYp9NLg==} peerDependencies: @@ -10715,6 +11015,40 @@ packages: react: 18.2.0 dev: true + /@radix-ui/react-dialog@1.0.5(@types/react-dom@18.2.14)(@types/react@18.2.31)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-GjWJX/AUpB703eEBanuBnIWdIXg6NvJFCXcNlSZk4xdszCdhrJgBoUd1cGk67vFO+WdA2pfI/plOpqz/5GUP6Q==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@babel/runtime': 7.23.7 + '@radix-ui/primitive': 1.0.1 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.31)(react@18.2.0) + '@radix-ui/react-context': 1.0.1(@types/react@18.2.31)(react@18.2.0) + '@radix-ui/react-dismissable-layer': 1.0.5(@types/react-dom@18.2.14)(@types/react@18.2.31)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-focus-guards': 1.0.1(@types/react@18.2.31)(react@18.2.0) + '@radix-ui/react-focus-scope': 1.0.4(@types/react-dom@18.2.14)(@types/react@18.2.31)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-id': 1.0.1(@types/react@18.2.31)(react@18.2.0) + '@radix-ui/react-portal': 1.0.4(@types/react-dom@18.2.14)(@types/react@18.2.31)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.2.14)(@types/react@18.2.31)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.14)(@types/react@18.2.31)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-slot': 1.0.2(@types/react@18.2.31)(react@18.2.0) + '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.2.31)(react@18.2.0) + '@types/react': 18.2.31 + '@types/react-dom': 18.2.14 + aria-hidden: 1.2.3 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + react-remove-scroll: 2.5.5(@types/react@18.2.31)(react@18.2.0) + dev: false + /@radix-ui/react-direction@1.0.1(@types/react@18.2.45)(react@18.2.0): resolution: {integrity: sha512-RXcvnXgyvYvBEOhCBuddKecVkoMiI10Jcm5cTI7abJRAHYfFxeu+FBQs/DvdxSYucxR5mna0dNsL6QFlds5TMA==} peerDependencies: @@ -10754,6 +11088,45 @@ packages: react-dom: 18.2.0(react@18.2.0) dev: true + /@radix-ui/react-dismissable-layer@1.0.5(@types/react-dom@18.2.14)(@types/react@18.2.31)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-aJeDjQhywg9LBu2t/At58hCvr7pEm0o2Ke1x33B+MhjNmmZ17sy4KImo0KPLgsnc/zN7GPdce8Cnn0SWvwZO7g==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@babel/runtime': 7.23.7 + '@radix-ui/primitive': 1.0.1 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.31)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.14)(@types/react@18.2.31)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.31)(react@18.2.0) + '@radix-ui/react-use-escape-keydown': 1.0.3(@types/react@18.2.31)(react@18.2.0) + '@types/react': 18.2.31 + '@types/react-dom': 18.2.14 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: false + + /@radix-ui/react-focus-guards@1.0.1(@types/react@18.2.31)(react@18.2.0): + resolution: {integrity: sha512-Rect2dWbQ8waGzhMavsIbmSVCgYxkXLxxR3ZvCX79JOglzdEy4JXMb98lq4hPxUbLr77nP0UOGf4rcMU+s1pUA==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@babel/runtime': 7.23.7 + '@types/react': 18.2.31 + react: 18.2.0 + dev: false + /@radix-ui/react-focus-guards@1.0.1(@types/react@18.2.45)(react@18.2.0): resolution: {integrity: sha512-Rect2dWbQ8waGzhMavsIbmSVCgYxkXLxxR3ZvCX79JOglzdEy4JXMb98lq4hPxUbLr77nP0UOGf4rcMU+s1pUA==} peerDependencies: @@ -10791,6 +11164,44 @@ packages: react-dom: 18.2.0(react@18.2.0) dev: true + /@radix-ui/react-focus-scope@1.0.4(@types/react-dom@18.2.14)(@types/react@18.2.31)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-sL04Mgvf+FmyvZeYfNu1EPAaaxD+aw7cYeIB9L9Fvq8+urhltTRaEo5ysKOpHuKPclsZcSUMKlN05x4u+CINpA==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@babel/runtime': 7.23.7 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.31)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.14)(@types/react@18.2.31)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.31)(react@18.2.0) + '@types/react': 18.2.31 + '@types/react-dom': 18.2.14 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: false + + /@radix-ui/react-id@1.0.1(@types/react@18.2.31)(react@18.2.0): + resolution: {integrity: sha512-tI7sT/kqYp8p96yGWY1OAnLHrqDgzHefRBKQ2YAkBS5ja7QLcZ9Z/uY7bEjPUatf8RomoXM8/1sMj1IJaE5UzQ==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@babel/runtime': 7.23.7 + '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.2.31)(react@18.2.0) + '@types/react': 18.2.31 + react: 18.2.0 + dev: false + /@radix-ui/react-id@1.0.1(@types/react@18.2.45)(react@18.2.0): resolution: {integrity: sha512-tI7sT/kqYp8p96yGWY1OAnLHrqDgzHefRBKQ2YAkBS5ja7QLcZ9Z/uY7bEjPUatf8RomoXM8/1sMj1IJaE5UzQ==} peerDependencies: @@ -10857,6 +11268,70 @@ packages: react-dom: 18.2.0(react@18.2.0) dev: true + /@radix-ui/react-portal@1.0.4(@types/react-dom@18.2.14)(@types/react@18.2.31)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-Qki+C/EuGUVCQTOTD5vzJzJuMUlewbzuKyUy+/iHM2uwGiru9gZeBJtHAPKAEkB5KWGi9mP/CHKcY0wt1aW45Q==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@babel/runtime': 7.23.7 + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.14)(@types/react@18.2.31)(react-dom@18.2.0)(react@18.2.0) + '@types/react': 18.2.31 + '@types/react-dom': 18.2.14 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: false + + /@radix-ui/react-presence@1.0.1(@types/react-dom@18.2.14)(@types/react@18.2.31)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-UXLW4UAbIY5ZjcvzjfRFo5gxva8QirC9hF7wRE4U5gz+TP0DbRk+//qyuAQ1McDxBt1xNMBTaciFGvEmJvAZCg==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@babel/runtime': 7.23.7 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.31)(react@18.2.0) + '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.2.31)(react@18.2.0) + '@types/react': 18.2.31 + '@types/react-dom': 18.2.14 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: false + + /@radix-ui/react-primitive@1.0.3(@types/react-dom@18.2.14)(@types/react@18.2.31)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-yi58uVyoAcK/Nq1inRY56ZSjKypBNKTa/1mcL8qdl6oJeEaDbOldlzrGn7P6Q3Id5d+SYNGc5AJgc4vGhjs5+g==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@babel/runtime': 7.23.7 + '@radix-ui/react-slot': 1.0.2(@types/react@18.2.31)(react@18.2.0) + '@types/react': 18.2.31 + '@types/react-dom': 18.2.14 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: false + /@radix-ui/react-primitive@1.0.3(@types/react-dom@18.2.17)(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-yi58uVyoAcK/Nq1inRY56ZSjKypBNKTa/1mcL8qdl6oJeEaDbOldlzrGn7P6Q3Id5d+SYNGc5AJgc4vGhjs5+g==} peerDependencies: @@ -10969,6 +11444,21 @@ packages: react-dom: 18.2.0(react@18.2.0) dev: true + /@radix-ui/react-slot@1.0.2(@types/react@18.2.31)(react@18.2.0): + resolution: {integrity: sha512-YeTpuq4deV+6DusvVUW4ivBgnkHwECUu0BiN43L5UCDFgdhsRUWAghhTF5MbvNTPzmiFOx90asDSUjWuCNapwg==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@babel/runtime': 7.23.5 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.31)(react@18.2.0) + '@types/react': 18.2.31 + react: 18.2.0 + dev: false + /@radix-ui/react-slot@1.0.2(@types/react@18.2.45)(react@18.2.0): resolution: {integrity: sha512-YeTpuq4deV+6DusvVUW4ivBgnkHwECUu0BiN43L5UCDFgdhsRUWAghhTF5MbvNTPzmiFOx90asDSUjWuCNapwg==} peerDependencies: @@ -11060,6 +11550,20 @@ packages: react-dom: 18.2.0(react@18.2.0) dev: true + /@radix-ui/react-use-callback-ref@1.0.1(@types/react@18.2.31)(react@18.2.0): + resolution: {integrity: sha512-D94LjX4Sp0xJFVaoQOd3OO9k7tpBYNOXdVhkltUbGv2Qb9OXdrg/CpsjlZv7ia14Sylv398LswWBVVu5nqKzAQ==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@babel/runtime': 7.23.7 + '@types/react': 18.2.31 + react: 18.2.0 + dev: false + /@radix-ui/react-use-callback-ref@1.0.1(@types/react@18.2.45)(react@18.2.0): resolution: {integrity: sha512-D94LjX4Sp0xJFVaoQOd3OO9k7tpBYNOXdVhkltUbGv2Qb9OXdrg/CpsjlZv7ia14Sylv398LswWBVVu5nqKzAQ==} peerDependencies: @@ -11074,6 +11578,21 @@ packages: react: 18.2.0 dev: true + /@radix-ui/react-use-controllable-state@1.0.1(@types/react@18.2.31)(react@18.2.0): + resolution: {integrity: sha512-Svl5GY5FQeN758fWKrjM6Qb7asvXeiZltlT4U2gVfl8Gx5UAv2sMR0LWo8yhsIZh2oQ0eFdZ59aoOOMV7b47VA==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@babel/runtime': 7.23.7 + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.31)(react@18.2.0) + '@types/react': 18.2.31 + react: 18.2.0 + dev: false + /@radix-ui/react-use-controllable-state@1.0.1(@types/react@18.2.45)(react@18.2.0): resolution: {integrity: sha512-Svl5GY5FQeN758fWKrjM6Qb7asvXeiZltlT4U2gVfl8Gx5UAv2sMR0LWo8yhsIZh2oQ0eFdZ59aoOOMV7b47VA==} peerDependencies: @@ -11089,6 +11608,21 @@ packages: react: 18.2.0 dev: true + /@radix-ui/react-use-escape-keydown@1.0.3(@types/react@18.2.31)(react@18.2.0): + resolution: {integrity: sha512-vyL82j40hcFicA+M4Ex7hVkB9vHgSse1ZWomAqV2Je3RleKGO5iM8KMOEtfoSB0PnIelMd2lATjTGMYqN5ylTg==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@babel/runtime': 7.23.7 + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.31)(react@18.2.0) + '@types/react': 18.2.31 + react: 18.2.0 + dev: false + /@radix-ui/react-use-escape-keydown@1.0.3(@types/react@18.2.45)(react@18.2.0): resolution: {integrity: sha512-vyL82j40hcFicA+M4Ex7hVkB9vHgSse1ZWomAqV2Je3RleKGO5iM8KMOEtfoSB0PnIelMd2lATjTGMYqN5ylTg==} peerDependencies: @@ -11104,6 +11638,20 @@ packages: react: 18.2.0 dev: true + /@radix-ui/react-use-layout-effect@1.0.1(@types/react@18.2.31)(react@18.2.0): + resolution: {integrity: sha512-v/5RegiJWYdoCvMnITBkNNx6bCj20fiaJnWtRkU18yITptraXjffz5Qbn05uOiQnOvi+dbkznkoaMltz1GnszQ==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@babel/runtime': 7.23.7 + '@types/react': 18.2.31 + react: 18.2.0 + dev: false + /@radix-ui/react-use-layout-effect@1.0.1(@types/react@18.2.45)(react@18.2.0): resolution: {integrity: sha512-v/5RegiJWYdoCvMnITBkNNx6bCj20fiaJnWtRkU18yITptraXjffz5Qbn05uOiQnOvi+dbkznkoaMltz1GnszQ==} peerDependencies: @@ -12062,7 +12610,7 @@ packages: typescript: optional: true dependencies: - '@babel/core': 7.23.7 + '@babel/core': 7.23.9 '@storybook/channels': 7.6.3 '@storybook/client-logger': 7.6.3 '@storybook/core-common': 7.6.3 @@ -12074,7 +12622,7 @@ packages: '@swc/core': 1.3.105 '@types/node': 18.19.8 '@types/semver': 7.5.6 - babel-loader: 9.1.3(@babel/core@7.23.7)(webpack@5.89.0) + babel-loader: 9.1.3(@babel/core@7.23.9)(webpack@5.89.0) browser-assert: 1.2.1 case-sensitive-paths-webpack-plugin: 2.4.0 constants-browserify: 1.0.0 @@ -13751,6 +14299,7 @@ packages: resolution: {integrity: sha512-TlgT8JntpcbmKUFzjhsyhGfP2fsiz1Mv56im6enJ905xG1DAYesxJaeSbGqQmAw8OWPdhyJGhGSQGKRNJ45u9w==} dependencies: undici-types: 5.26.5 + dev: true /@types/node@8.10.66: resolution: {integrity: sha512-tktOkFUA4kXx2hhhrB8bIFb5TbwzS4uOhKEmwiD+NoiL0qtP2OQ9mFldbgD4dV1djrlBYP6eBuQZiWjuHUpqFw==} @@ -13821,7 +14370,6 @@ packages: resolution: {integrity: sha512-V835xgdSVmyQmI1KLV2BEIUgqEuinxp9O4G6g3FqO/SqLac049E53aysv0oEFD2kHfejeKU+ZqL2bcFWj9gLAQ==} dependencies: '@types/react': 18.2.48 - dev: true /@types/react-dom@18.2.17: resolution: {integrity: sha512-rvrT/M7Df5eykWFxn6MYt5Pem/Dbyc1N8Y0S9Mrkw2WFCRiqUgw9P7ul2NpwsXCSM1DVdENzdG9J5SreqfAIWg==} @@ -13865,7 +14413,6 @@ packages: '@types/prop-types': 15.7.11 '@types/scheduler': 0.16.8 csstype: 3.1.3 - dev: true /@types/react@18.2.45: resolution: {integrity: sha512-TtAxCNrlrBp8GoeEp1npd5g+d/OejJHFxS3OWmrPBMFaVQMSN0OFySozJio5BHxTuTeug00AVXVAjfDSfk+lUg==} @@ -14315,6 +14862,27 @@ packages: - supports-color dev: true + /@typescript-eslint/parser@6.21.0(eslint@8.56.0)(typescript@5.3.3): + resolution: {integrity: sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + eslint: ^7.0.0 || ^8.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/scope-manager': 6.21.0 + '@typescript-eslint/types': 6.21.0 + '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.3.3) + '@typescript-eslint/visitor-keys': 6.21.0 + debug: 4.3.4(supports-color@5.5.0) + eslint: 8.56.0 + typescript: 5.3.3 + transitivePeerDependencies: + - supports-color + dev: true + /@typescript-eslint/scope-manager@5.62.0: resolution: {integrity: sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -14602,7 +15170,29 @@ packages: - supports-color dev: true - /@typescript-eslint/typescript-estree@6.21.0(typescript@5.2.2): + /@typescript-eslint/typescript-estree@6.21.0(typescript@5.2.2): + resolution: {integrity: sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/types': 6.21.0 + '@typescript-eslint/visitor-keys': 6.21.0 + debug: 4.3.4(supports-color@5.5.0) + globby: 11.1.0 + is-glob: 4.0.3 + minimatch: 9.0.3 + semver: 7.6.0 + ts-api-utils: 1.2.1(typescript@5.2.2) + typescript: 5.2.2 + transitivePeerDependencies: + - supports-color + dev: true + + /@typescript-eslint/typescript-estree@6.21.0(typescript@5.3.3): resolution: {integrity: sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: @@ -14618,8 +15208,8 @@ packages: is-glob: 4.0.3 minimatch: 9.0.3 semver: 7.6.0 - ts-api-utils: 1.2.1(typescript@5.2.2) - typescript: 5.2.2 + ts-api-utils: 1.2.1(typescript@5.3.3) + typescript: 5.3.3 transitivePeerDependencies: - supports-color dev: true @@ -15309,7 +15899,6 @@ packages: /any-promise@1.3.0: resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} - dev: true /anymatch@3.1.3: resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} @@ -15317,7 +15906,6 @@ packages: dependencies: normalize-path: 3.0.0 picomatch: 2.3.1 - dev: true /app-module-path@2.2.0: resolution: {integrity: sha512-gkco+qxENJV+8vFcDiiFhuoSvRXb2a/QPqpSoWhVz829VNJfOTnELbBmPmNKFxf3xdNnw4DWCkzkDaavcX/1YQ==} @@ -15352,7 +15940,6 @@ packages: /arg@5.0.2: resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==} - dev: true /argparse@1.0.10: resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} @@ -15368,7 +15955,6 @@ packages: engines: {node: '>=10'} dependencies: tslib: 2.6.2 - dev: true /aria-query@5.1.3: resolution: {integrity: sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ==} @@ -15614,8 +16200,8 @@ packages: peerDependencies: postcss: ^8.1.0 dependencies: - browserslist: 4.22.2 - caniuse-lite: 1.0.30001572 + browserslist: 4.22.3 + caniuse-lite: 1.0.30001585 fraction.js: 4.3.7 normalize-range: 0.1.2 picocolors: 1.0.0 @@ -15720,17 +16306,17 @@ packages: '@babel/core': 7.23.7 dev: true - /babel-jest@29.7.0(@babel/core@7.23.7): + /babel-jest@29.7.0(@babel/core@7.23.9): resolution: {integrity: sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: '@babel/core': ^7.8.0 dependencies: - '@babel/core': 7.23.7 + '@babel/core': 7.23.9 '@jest/transform': 29.7.0 '@types/babel__core': 7.20.5 babel-plugin-istanbul: 6.1.1 - babel-preset-jest: 29.6.3(@babel/core@7.23.7) + babel-preset-jest: 29.6.3(@babel/core@7.23.9) chalk: 4.1.2 graceful-fs: 4.2.11 slash: 3.0.0 @@ -15738,14 +16324,14 @@ packages: - supports-color dev: true - /babel-loader@9.1.3(@babel/core@7.23.7)(webpack@5.89.0): + /babel-loader@9.1.3(@babel/core@7.23.9)(webpack@5.89.0): resolution: {integrity: sha512-xG3ST4DglodGf8qSwv0MdeWLhrDsw/32QMdTO5T1ZIp9gQur0HkCyFs7Awskr10JKXFXwpAhiCuYX5oGXnRGbw==} engines: {node: '>= 14.15.0'} peerDependencies: '@babel/core': ^7.12.0 webpack: '>=5' dependencies: - '@babel/core': 7.23.7 + '@babel/core': 7.23.9 find-cache-dir: 4.0.0 schema-utils: 4.2.0 webpack: 5.89.0(@swc/core@1.3.105)(esbuild@0.18.20)(webpack-cli@5.1.4) @@ -15772,8 +16358,8 @@ packages: resolution: {integrity: sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@babel/template': 7.22.15 - '@babel/types': 7.23.6 + '@babel/template': 7.23.9 + '@babel/types': 7.23.9 '@types/babel__core': 7.20.5 '@types/babel__traverse': 7.20.4 dev: true @@ -15863,24 +16449,24 @@ packages: resolution: {integrity: sha512-eqj0hVcJUR57/Ug2zE1Yswsw4LhuqqHhD+8v120T1cl3kjg76QwtyBrdIk4WVwK+lAhBJVYCd/v+4nc4y+8JsA==} dev: true - /babel-preset-current-node-syntax@1.0.1(@babel/core@7.23.7): + /babel-preset-current-node-syntax@1.0.1(@babel/core@7.23.9): resolution: {integrity: sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.23.7 - '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.23.7) - '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.23.7) - '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.23.7) - '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.23.7) - '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.23.7) - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.23.7) - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.23.7) - '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.23.7) - '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.23.7) - '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.23.7) - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.23.7) - '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.23.7) + '@babel/core': 7.23.9 + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.23.9) + '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.23.9) + '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.23.9) + '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.23.9) + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.23.9) + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.23.9) + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.23.9) + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.23.9) + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.23.9) + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.23.9) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.23.9) + '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.23.9) dev: true /babel-preset-fbjs@3.4.0(@babel/core@7.23.7): @@ -15918,15 +16504,15 @@ packages: babel-plugin-syntax-trailing-function-commas: 7.0.0-beta.0 dev: true - /babel-preset-jest@29.6.3(@babel/core@7.23.7): + /babel-preset-jest@29.6.3(@babel/core@7.23.9): resolution: {integrity: sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.23.7 + '@babel/core': 7.23.9 babel-plugin-jest-hoist: 29.6.3 - babel-preset-current-node-syntax: 1.0.1(@babel/core@7.23.7) + babel-preset-current-node-syntax: 1.0.1(@babel/core@7.23.9) dev: true /babel-preset-react-app@10.0.1: @@ -15965,7 +16551,6 @@ packages: /balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} - dev: true /base-x@3.0.9: resolution: {integrity: sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ==} @@ -16037,7 +16622,6 @@ packages: /binary-extensions@2.2.0: resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} engines: {node: '>=8'} - dev: true /bindings@1.5.0: resolution: {integrity: sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==} @@ -16295,7 +16879,6 @@ packages: dependencies: balanced-match: 1.0.2 concat-map: 0.0.1 - dev: true /brace-expansion@2.0.1: resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} @@ -16308,7 +16891,6 @@ packages: engines: {node: '>=8'} dependencies: fill-range: 7.0.1 - dev: true /brorand@1.1.0: resolution: {integrity: sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==} @@ -16516,7 +17098,6 @@ packages: /camelcase-css@2.0.1: resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==} engines: {node: '>= 6'} - dev: true /camelcase@5.3.1: resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==} @@ -16709,7 +17290,6 @@ packages: readdirp: 3.6.0 optionalDependencies: fsevents: 2.3.3 - dev: true /chokidar@3.6.0: resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} @@ -16953,7 +17533,6 @@ packages: /commander@4.1.1: resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} engines: {node: '>= 6'} - dev: true /commander@6.2.1: resolution: {integrity: sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==} @@ -17010,7 +17589,6 @@ packages: /concat-map@0.0.1: resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} - dev: true /concat-stream@1.6.2: resolution: {integrity: sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==} @@ -17421,7 +17999,6 @@ packages: resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} engines: {node: '>=4'} hasBin: true - dev: true /csso@5.0.5: resolution: {integrity: sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==} @@ -17879,7 +18456,6 @@ packages: /detect-node-es@1.1.0: resolution: {integrity: sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==} - dev: true /detect-package-manager@2.0.1: resolution: {integrity: sha512-j/lJHyoLlWi6G1LDdLgvUtz60Zo5GEj+sVYtTVXnYLDPuzgC3llMxonXym9zIwhhUII8vjdw0LXxavpLqTbl1A==} @@ -18065,7 +18641,6 @@ packages: /didyoumean@1.2.2: resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==} - dev: true /diff-sequences@29.6.3: resolution: {integrity: sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==} @@ -18081,7 +18656,6 @@ packages: /dlv@1.1.3: resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==} - dev: true /doctrine@2.1.0: resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==} @@ -18692,7 +19266,7 @@ packages: eslint: 8.56.0 eslint-import-resolver-node: 0.3.9 eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.19.1)(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1)(eslint@8.56.0) - eslint-plugin-import: 2.29.1(@typescript-eslint/parser@6.19.1)(eslint-import-resolver-typescript@3.6.1)(eslint@8.56.0) + eslint-plugin-import: 2.29.1(@typescript-eslint/parser@6.21.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.56.0) eslint-plugin-jsx-a11y: 6.8.0(eslint@8.56.0) eslint-plugin-react: 7.33.2(eslint@8.56.0) eslint-plugin-react-hooks: 4.6.0(eslint@8.56.0) @@ -18713,11 +19287,11 @@ packages: dependencies: '@next/eslint-plugin-next': 14.1.0 '@rushstack/eslint-patch': 1.5.1 - '@typescript-eslint/parser': 6.19.1(eslint@8.56.0)(typescript@5.3.3) + '@typescript-eslint/parser': 6.21.0(eslint@8.56.0)(typescript@5.3.3) eslint: 8.56.0 eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.19.1)(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1)(eslint@8.56.0) - eslint-plugin-import: 2.29.1(@typescript-eslint/parser@6.19.1)(eslint-import-resolver-typescript@3.6.1)(eslint@8.56.0) + eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.21.0)(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1)(eslint@8.56.0) + eslint-plugin-import: 2.29.1(@typescript-eslint/parser@6.21.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.56.0) eslint-plugin-jsx-a11y: 6.8.0(eslint@8.56.0) eslint-plugin-react: 7.33.2(eslint@8.56.0) eslint-plugin-react-hooks: 4.6.0(eslint@8.56.0) @@ -18838,7 +19412,30 @@ packages: enhanced-resolve: 5.15.0 eslint: 8.56.0 eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.19.1)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.56.0) - eslint-plugin-import: 2.29.1(@typescript-eslint/parser@6.19.1)(eslint-import-resolver-typescript@3.6.1)(eslint@8.56.0) + eslint-plugin-import: 2.29.1(@typescript-eslint/parser@6.21.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.56.0) + fast-glob: 3.3.2 + get-tsconfig: 4.7.2 + is-core-module: 2.13.1 + is-glob: 4.0.3 + transitivePeerDependencies: + - '@typescript-eslint/parser' + - eslint-import-resolver-node + - eslint-import-resolver-webpack + - supports-color + dev: true + + /eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@6.21.0)(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1)(eslint@8.56.0): + resolution: {integrity: sha512-xgdptdoi5W3niYeuQxKmzVDTATvLYqhpwmykwsh7f6HIOStGWEIL9iqZgQDF9u9OEzrRwR8no5q2VT+bjAujTg==} + engines: {node: ^14.18.0 || >=16.0.0} + peerDependencies: + eslint: '*' + eslint-plugin-import: '*' + dependencies: + debug: 4.3.4(supports-color@5.5.0) + enhanced-resolve: 5.15.0 + eslint: 8.56.0 + eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.21.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.56.0) + eslint-plugin-import: 2.29.1(@typescript-eslint/parser@6.21.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.56.0) fast-glob: 3.3.2 get-tsconfig: 4.7.2 is-core-module: 2.13.1 @@ -18998,6 +19595,36 @@ packages: - supports-color dev: true + /eslint-module-utils@2.8.0(@typescript-eslint/parser@6.21.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.56.0): + resolution: {integrity: sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==} + engines: {node: '>=4'} + peerDependencies: + '@typescript-eslint/parser': '*' + eslint: '*' + eslint-import-resolver-node: '*' + eslint-import-resolver-typescript: '*' + eslint-import-resolver-webpack: '*' + peerDependenciesMeta: + '@typescript-eslint/parser': + optional: true + eslint: + optional: true + eslint-import-resolver-node: + optional: true + eslint-import-resolver-typescript: + optional: true + eslint-import-resolver-webpack: + optional: true + dependencies: + '@typescript-eslint/parser': 6.21.0(eslint@8.56.0)(typescript@5.3.3) + debug: 3.2.7(supports-color@8.1.1) + eslint: 8.56.0 + eslint-import-resolver-node: 0.3.9 + eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.21.0)(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1)(eslint@8.56.0) + transitivePeerDependencies: + - supports-color + dev: true + /eslint-module-utils@2.8.0(@typescript-eslint/parser@6.21.0)(eslint-import-resolver-node@0.3.9)(eslint@8.52.0): resolution: {integrity: sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==} engines: {node: '>=4'} @@ -19147,7 +19774,7 @@ packages: - supports-color dev: true - /eslint-plugin-import@2.29.1(@typescript-eslint/parser@6.19.1)(eslint-import-resolver-typescript@3.6.1)(eslint@8.56.0): + /eslint-plugin-import@2.29.1(@typescript-eslint/parser@6.19.1)(eslint@8.56.0): resolution: {integrity: sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==} engines: {node: '>=4'} peerDependencies: @@ -19182,7 +19809,7 @@ packages: - supports-color dev: true - /eslint-plugin-import@2.29.1(@typescript-eslint/parser@6.19.1)(eslint@8.56.0): + /eslint-plugin-import@2.29.1(@typescript-eslint/parser@6.21.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.56.0): resolution: {integrity: sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==} engines: {node: '>=4'} peerDependencies: @@ -19192,7 +19819,7 @@ packages: '@typescript-eslint/parser': optional: true dependencies: - '@typescript-eslint/parser': 6.19.1(eslint@8.56.0)(typescript@5.3.3) + '@typescript-eslint/parser': 6.21.0(eslint@8.56.0)(typescript@5.3.3) array-includes: 3.1.7 array.prototype.findlastindex: 1.2.3 array.prototype.flat: 1.3.2 @@ -19201,7 +19828,7 @@ packages: doctrine: 2.1.0 eslint: 8.56.0 eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.19.1)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.56.0) + eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.21.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.56.0) hasown: 2.0.0 is-core-module: 2.13.1 is-glob: 4.0.3 @@ -20055,7 +20682,6 @@ packages: glob-parent: 5.1.2 merge2: 1.4.1 micromatch: 4.0.5 - dev: true /fast-json-parse@1.0.3: resolution: {integrity: sha512-FRWsaZRWEJ1ESVNbDWmsAlqDk96gPQezzLghafp5J4GUKjbCz3OkAHuZs5TuPEtkbVQERysLp9xv6c24fBm8Aw==} @@ -20124,7 +20750,6 @@ packages: resolution: {integrity: sha512-ifCoaXsDrsdkWTtiNJX5uzHDsrck5TzfKKDcuFFTIrrc/BS076qgEIfoIy1VeZqViznfKiysPYTh/QeHtnIsYA==} dependencies: reusify: 1.0.4 - dev: true /faye-websocket@0.10.0: resolution: {integrity: sha512-Xhj93RXbMSq8urNCUq4p9l0P6hnySJ/7YNRhYNug0bLOuii7pKO7xQFb5mx9xZXWCar88pLPb805PvUkwrLZpQ==} @@ -20280,7 +20905,6 @@ packages: engines: {node: '>=8'} dependencies: to-regex-range: 5.0.1 - dev: true /finalhandler@1.1.2: resolution: {integrity: sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==} @@ -20662,14 +21286,12 @@ packages: /fs.realpath@1.0.0: resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} - dev: true /fsevents@2.3.3: resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} os: [darwin] requiresBuild: true - dev: true optional: true /function-bind@1.1.2: @@ -20780,7 +21402,6 @@ packages: /get-nonce@1.0.1: resolution: {integrity: sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==} engines: {node: '>=6'} - dev: true /get-npm-tarball-url@2.1.0: resolution: {integrity: sha512-ro+DiMu5DXgRBabqXupW38h7WPZ9+Ad8UjwhvsmmN8w1sU7ab0nzAXvVZ4kqYg57OrqomRtJvepX5/xvFKNtjA==} @@ -20905,14 +21526,12 @@ packages: engines: {node: '>= 6'} dependencies: is-glob: 4.0.3 - dev: true /glob-parent@6.0.2: resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} engines: {node: '>=10.13.0'} dependencies: is-glob: 4.0.3 - dev: true /glob-to-regexp@0.4.1: resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==} @@ -20948,7 +21567,6 @@ packages: minimatch: 3.1.2 once: 1.4.0 path-is-absolute: 1.0.1 - dev: true /glob@7.1.7: resolution: {integrity: sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==} @@ -22186,7 +22804,6 @@ packages: dependencies: once: 1.4.0 wrappy: 1.0.2 - dev: true /inherits@2.0.1: resolution: {integrity: sha512-8nWq2nLTAwd02jTqJExUYFSD/fKq6VH9Y/oG2accc/kdI0V98Bag8d5a4gi3XHz73rDWa2PvTtvcWYquKqSENA==} @@ -22373,7 +22990,6 @@ packages: engines: {node: '>=8'} dependencies: binary-extensions: 2.2.0 - dev: true /is-boolean-object@1.1.2: resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} @@ -22424,7 +23040,6 @@ packages: /is-extglob@2.1.1: resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} engines: {node: '>=0.10.0'} - dev: true /is-finalizationregistry@1.0.2: resolution: {integrity: sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw==} @@ -22452,7 +23067,6 @@ packages: engines: {node: '>=0.10.0'} dependencies: is-extglob: 2.1.1 - dev: true /is-gzip@1.0.0: resolution: {integrity: sha512-rcfALRIb1YewtnksfRIHGcIY93QnK8BIQ/2c9yDYcG/Y6+vRoJuTWBmmSEbyLLYtXm7q35pHOHbZFQBaLrhlWQ==} @@ -22514,7 +23128,6 @@ packages: /is-number@7.0.0: resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} engines: {node: '>=0.12.0'} - dev: true /is-obj@1.0.1: resolution: {integrity: sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg==} @@ -22774,8 +23387,8 @@ packages: resolution: {integrity: sha512-EAMEJBsYuyyztxMxW3g7ugGPkrZsV57v0Hmv3mm1uQsmB+QnZuepg731CRaIgeUVSdmsTngOkSnauNF8p7FIhA==} engines: {node: '>=10'} dependencies: - '@babel/core': 7.23.7 - '@babel/parser': 7.23.6 + '@babel/core': 7.23.9 + '@babel/parser': 7.23.9 '@istanbuljs/schema': 0.1.3 istanbul-lib-coverage: 3.2.0 semver: 7.6.0 @@ -22958,11 +23571,11 @@ packages: ts-node: optional: true dependencies: - '@babel/core': 7.23.7 + '@babel/core': 7.23.9 '@jest/test-sequencer': 29.7.0 '@jest/types': 29.6.3 '@types/node': 20.11.5 - babel-jest: 29.7.0(@babel/core@7.23.7) + babel-jest: 29.7.0(@babel/core@7.23.9) chalk: 4.1.2 ci-info: 3.9.0 deepmerge: 4.3.1 @@ -22998,11 +23611,11 @@ packages: ts-node: optional: true dependencies: - '@babel/core': 7.23.7 + '@babel/core': 7.23.9 '@jest/test-sequencer': 29.7.0 '@jest/types': 29.6.3 '@types/node': 20.8.10 - babel-jest: 29.7.0(@babel/core@7.23.7) + babel-jest: 29.7.0(@babel/core@7.23.9) chalk: 4.1.2 ci-info: 3.9.0 deepmerge: 4.3.1 @@ -23278,15 +23891,15 @@ packages: resolution: {integrity: sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@babel/core': 7.23.7 + '@babel/core': 7.23.9 '@babel/generator': 7.23.6 - '@babel/plugin-syntax-jsx': 7.23.3(@babel/core@7.23.7) - '@babel/plugin-syntax-typescript': 7.23.3(@babel/core@7.23.7) - '@babel/types': 7.23.6 + '@babel/plugin-syntax-jsx': 7.23.3(@babel/core@7.23.9) + '@babel/plugin-syntax-typescript': 7.23.3(@babel/core@7.23.9) + '@babel/types': 7.23.9 '@jest/expect-utils': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - babel-preset-current-node-syntax: 1.0.1(@babel/core@7.23.7) + babel-preset-current-node-syntax: 1.0.1(@babel/core@7.23.9) chalk: 4.1.2 expect: 29.7.0 graceful-fs: 4.2.11 @@ -23428,7 +24041,6 @@ packages: /jiti@1.20.0: resolution: {integrity: sha512-3TV69ZbrvV6U5DfQimop50jE9Dl6J8O1ja1dvBbMba/sZ3YBEQqJ2VZRoQPVnhlzjNtU1vaXRZVrVjU4qtm8yA==} hasBin: true - dev: true /jose@4.15.2: resolution: {integrity: sha512-IY73F228OXRl9ar3jJagh7Vnuhj/GzBunPiZP13K0lOl7Am9SoWW3kEzq3MCllJMTtZqHTiDXQvoRd4U95aU6A==} @@ -23964,7 +24576,6 @@ packages: /lilconfig@2.1.0: resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==} engines: {node: '>=10'} - dev: true /lilconfig@3.0.0: resolution: {integrity: sha512-K2U4W2Ff5ibV7j7ydLr+zLAkIg5JJ4lPn1Ltsdt+Tz/IjQ8buJ55pZAxoP34lqIiwtF9iAvtLv3JGv7CAyAg+g==} @@ -24562,7 +25173,6 @@ packages: /merge2@1.4.1: resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} engines: {node: '>= 8'} - dev: true /merkle-lib@2.0.10: resolution: {integrity: sha512-XrNQvUbn1DL5hKNe46Ccs+Tu3/PYOlrcZILuGUhb95oKBPjc/nmIC8D462PQkipVDGKRvwhn+QFg2cCdIvmDJA==} @@ -24635,7 +25245,6 @@ packages: dependencies: braces: 3.0.2 picomatch: 2.3.1 - dev: true /migrate-mongo@11.0.0(mongodb@6.3.0): resolution: {integrity: sha512-GB/gHzUwp/fL1w6ksNGihTyb+cSrm6NbVLlz1OSkQKaLlzAXMwH7iKK2ZS7W5v+I8vXiY2rL58WTUZSAL6QR+A==} @@ -24729,7 +25338,6 @@ packages: resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} dependencies: brace-expansion: 1.1.11 - dev: true /minimatch@4.2.3: resolution: {integrity: sha512-lIUdtK5hdofgCTu3aT0sOaHsYR37viUuIc0rwnnDXImbwFRcumyLMeZaM0t0I/fgxS6s6JMfu0rLD1Wz9pv1ng==} @@ -24992,7 +25600,6 @@ packages: any-promise: 1.3.0 object-assign: 4.1.1 thenify-all: 1.6.0 - dev: true /nan@2.18.0: resolution: {integrity: sha512-W7tfG7vMOGtD30sHoZSSc/JVYiyDPEyQVso/Zz+/uQd0B0L46gtC+pHha5FFMRpil6fm/AoEcRWyOVi4+E/f8w==} @@ -25011,7 +25618,6 @@ packages: resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true - dev: true /nanolru@1.0.0: resolution: {integrity: sha512-GyQkE8M32pULhQk7Sko5raoIbPalAk90ICG+An4fq6fCsFHsP6fB2K46WGXVdoJpy4SGMnZ/EKbo123fZJomWg==} @@ -25467,7 +26073,6 @@ packages: /normalize-path@3.0.0: resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} engines: {node: '>=0.10.0'} - dev: true /normalize-range@0.1.2: resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==} @@ -25980,7 +26585,6 @@ packages: /path-is-absolute@1.0.1: resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} engines: {node: '>=0.10.0'} - dev: true /path-key@3.1.1: resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} @@ -26120,12 +26724,10 @@ packages: /picomatch@2.3.1: resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} engines: {node: '>=8.6'} - dev: true /pify@2.3.0: resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} engines: {node: '>=0.10.0'} - dev: true /pify@3.0.0: resolution: {integrity: sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==} @@ -26208,7 +26810,6 @@ packages: /pirates@4.0.6: resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} engines: {node: '>= 6'} - dev: true /pkg-dir@3.0.0: resolution: {integrity: sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==} @@ -26308,7 +26909,6 @@ packages: postcss-value-parser: 4.2.0 read-cache: 1.0.0 resolve: 1.22.8 - dev: true /postcss-js@4.0.1(postcss@8.4.32): resolution: {integrity: sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==} @@ -26318,7 +26918,6 @@ packages: dependencies: camelcase-css: 2.0.1 postcss: 8.4.32 - dev: true /postcss-load-config@4.0.1(postcss@8.4.32): resolution: {integrity: sha512-vEJIc8RdiBRu3oRAI0ymerOn+7rPuMvRXslTvZUKZonDHFIczxztIyJ1urxM1x9JXEikvpWWTUUqal5j/8QgvA==} @@ -26335,7 +26934,6 @@ packages: lilconfig: 2.1.0 postcss: 8.4.32 yaml: 2.3.4 - dev: true /postcss-load-config@5.0.2(postcss@8.4.31): resolution: {integrity: sha512-Q8QR3FYbqOKa0bnC1UQ2bFq9/ulHX5Bi34muzitMr8aDtUelO5xKeJEYC/5smE0jNE9zdB/NBnOwXKexELbRlw==} @@ -26467,7 +27065,6 @@ packages: dependencies: postcss: 8.4.32 postcss-selector-parser: 6.0.13 - dev: true /postcss-reporter@7.0.5(postcss@8.4.31): resolution: {integrity: sha512-glWg7VZBilooZGOFPhN9msJ3FQs19Hie7l5a/eE6WglzYqVeH3ong3ShFcp9kDWJT1g2Y/wd59cocf9XxBtkWA==} @@ -26486,11 +27083,9 @@ packages: dependencies: cssesc: 3.0.0 util-deprecate: 1.0.2 - dev: true /postcss-value-parser@4.2.0: resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} - dev: true /postcss-values-parser@2.0.1: resolution: {integrity: sha512-2tLuBsA6P4rYTNKCXYG/71C7j1pU6pK503suYOmn4xYrQIzW+opD+7FAFNuGSdZC/3Qfy334QbeMu7MEb8gOxg==} @@ -26536,7 +27131,6 @@ packages: nanoid: 3.3.7 picocolors: 1.0.0 source-map-js: 1.0.2 - dev: true /postgres-array@2.0.0: resolution: {integrity: sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA==} @@ -26977,7 +27571,6 @@ packages: /queue-microtask@1.2.3: resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} - dev: true /queue-tick@1.0.1: resolution: {integrity: sha512-kJt5qhMxoszgU/62PLP1CJytzd2NKetjSRnyuj31fDd3Rlcz3fzlFdFLD1SItunPwyqEOkca6GbV612BWfaBag==} @@ -27153,9 +27746,9 @@ packages: resolution: {integrity: sha512-rCz0HBIT0LWbIM+///LfRrJoTKftIzzwsYDf0ns5KwaEjejMHQRtphcns+IXFHDNY9pnz6G8l/JbbI6pD4EAIA==} engines: {node: '>=16.14.0'} dependencies: - '@babel/core': 7.23.7 + '@babel/core': 7.23.9 '@babel/traverse': 7.23.7 - '@babel/types': 7.23.6 + '@babel/types': 7.23.9 '@types/babel__core': 7.20.5 '@types/babel__traverse': 7.20.4 '@types/doctrine': 0.0.9 @@ -27272,6 +27865,22 @@ packages: engines: {node: '>=0.10.0'} dev: true + /react-remove-scroll-bar@2.3.4(@types/react@18.2.31)(react@18.2.0): + resolution: {integrity: sha512-63C4YQBUt0m6ALadE9XV56hV8BgJWDmmTPY758iIJjfQKt2nYwoUrPk0LXRXcB/yIj82T1/Ixfdpdk68LwIB0A==} + engines: {node: '>=10'} + peerDependencies: + '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@types/react': 18.2.31 + react: 18.2.0 + react-style-singleton: 2.2.1(@types/react@18.2.31)(react@18.2.0) + tslib: 2.6.2 + dev: false + /react-remove-scroll-bar@2.3.4(@types/react@18.2.45)(react@18.2.0): resolution: {integrity: sha512-63C4YQBUt0m6ALadE9XV56hV8BgJWDmmTPY758iIJjfQKt2nYwoUrPk0LXRXcB/yIj82T1/Ixfdpdk68LwIB0A==} engines: {node: '>=10'} @@ -27288,6 +27897,25 @@ packages: tslib: 2.6.2 dev: true + /react-remove-scroll@2.5.5(@types/react@18.2.31)(react@18.2.0): + resolution: {integrity: sha512-ImKhrzJJsyXJfBZ4bzu8Bwpka14c/fQt0k+cyFp/PBhTfyDnU5hjOtM4AG/0AMyy8oKzOTR0lDgJIM7pYXI0kw==} + engines: {node: '>=10'} + peerDependencies: + '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@types/react': 18.2.31 + react: 18.2.0 + react-remove-scroll-bar: 2.3.4(@types/react@18.2.31)(react@18.2.0) + react-style-singleton: 2.2.1(@types/react@18.2.31)(react@18.2.0) + tslib: 2.6.2 + use-callback-ref: 1.3.0(@types/react@18.2.31)(react@18.2.0) + use-sidecar: 1.1.2(@types/react@18.2.31)(react@18.2.0) + dev: false + /react-remove-scroll@2.5.5(@types/react@18.2.45)(react@18.2.0): resolution: {integrity: sha512-ImKhrzJJsyXJfBZ4bzu8Bwpka14c/fQt0k+cyFp/PBhTfyDnU5hjOtM4AG/0AMyy8oKzOTR0lDgJIM7pYXI0kw==} engines: {node: '>=10'} @@ -27307,6 +27935,23 @@ packages: use-sidecar: 1.1.2(@types/react@18.2.45)(react@18.2.0) dev: true + /react-style-singleton@2.2.1(@types/react@18.2.31)(react@18.2.0): + resolution: {integrity: sha512-ZWj0fHEMyWkHzKYUr2Bs/4zU6XLmq9HsgBURm7g5pAVfyn49DgUiNgY2d4lXRlYSiCif9YBGpQleewkcqddc7g==} + engines: {node: '>=10'} + peerDependencies: + '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@types/react': 18.2.31 + get-nonce: 1.0.1 + invariant: 2.2.4 + react: 18.2.0 + tslib: 2.6.2 + dev: false + /react-style-singleton@2.2.1(@types/react@18.2.45)(react@18.2.0): resolution: {integrity: sha512-ZWj0fHEMyWkHzKYUr2Bs/4zU6XLmq9HsgBURm7g5pAVfyn49DgUiNgY2d4lXRlYSiCif9YBGpQleewkcqddc7g==} engines: {node: '>=10'} @@ -27369,7 +28014,6 @@ packages: resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==} dependencies: pify: 2.3.0 - dev: true /read-pkg-up@7.0.1: resolution: {integrity: sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==} @@ -27425,7 +28069,6 @@ packages: engines: {node: '>=8.10.0'} dependencies: picomatch: 2.3.1 - dev: true /real-require@0.2.0: resolution: {integrity: sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg==} @@ -27553,7 +28196,7 @@ packages: dependencies: jsesc: 0.5.0 - /rehackt@0.0.3(@types/react@18.2.48)(react@18.2.0): + /rehackt@0.0.3(@types/react@18.2.31)(react@18.2.0): resolution: {integrity: sha512-aBRHudKhOWwsTvCbSoinzq+Lej/7R8e8UoPvLZo5HirZIIBLGAgdG7SL9QpdcBoQ7+3QYPi3lRLknAzXBlhZ7g==} peerDependencies: '@types/react': '*' @@ -27564,7 +28207,7 @@ packages: react: optional: true dependencies: - '@types/react': 18.2.48 + '@types/react': 18.2.31 react: 18.2.0 dev: false @@ -27773,7 +28416,6 @@ packages: /reusify@1.0.4: resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} engines: {iojs: '>=1.0.0', node: '>=0.10.0'} - dev: true /rfdc@1.3.0: resolution: {integrity: sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==} @@ -27816,7 +28458,6 @@ packages: resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} dependencies: queue-microtask: 1.2.3 - dev: true /rxjs@7.8.1: resolution: {integrity: sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==} @@ -27900,7 +28541,7 @@ packages: engines: {node: '>=14.0.0'} hasBin: true dependencies: - chokidar: 3.5.3 + chokidar: 3.6.0 immutable: 4.3.4 source-map-js: 1.0.2 dev: true @@ -28823,7 +29464,6 @@ packages: mz: 2.7.0 pirates: 4.0.6 ts-interface-checker: 0.1.13 - dev: true /supercluster@8.0.1: resolution: {integrity: sha512-IiOea5kJ9iqzD2t7QJq/cREyLHTtSmUT6gQsweojg9WH2sYJqZK9SswTu6jrscO6D1G5v5vYZ9ru/eq85lXeZQ==} @@ -28964,7 +29604,15 @@ packages: /tailwind-merge@2.1.0: resolution: {integrity: sha512-l11VvI4nSwW7MtLSLYT4ldidDEUwQAMWuSHk7l4zcXZDgnCRa0V3OdCwFfM7DCzakVXMNRwAeje9maFFXT71dQ==} dependencies: - '@babel/runtime': 7.23.5 + '@babel/runtime': 7.23.7 + dev: false + + /tailwindcss-animate@1.0.7(tailwindcss@3.4.1): + resolution: {integrity: sha512-bl6mpH3T7I3UFxuvDEXLxy/VuFxBk5bbzplh7tXI68mwMokNYd1t9qPBHlnyTwfa4JGC4zP516I1hYYtQ/vspA==} + peerDependencies: + tailwindcss: '>=3.0.0 || insiders' + dependencies: + tailwindcss: 3.4.1 dev: false /tailwindcss@3.4.1: @@ -28996,7 +29644,6 @@ packages: sucrase: 3.34.0 transitivePeerDependencies: - ts-node - dev: true /tapable@1.1.3: resolution: {integrity: sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==} @@ -29242,13 +29889,11 @@ packages: engines: {node: '>=0.8'} dependencies: thenify: 3.3.1 - dev: true /thenify@3.3.1: resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} dependencies: any-promise: 1.3.0 - dev: true /thirty-two@1.0.2: resolution: {integrity: sha512-OEI0IWCe+Dw46019YLl6V10Us5bi574EvlJEOcAkB29IzQ/mYD1A6RyNHLjZPiHCmuodxvgF6U+vZO1L15lxVA==} @@ -29377,7 +30022,6 @@ packages: engines: {node: '>=8.0'} dependencies: is-number: 7.0.0 - dev: true /tocbot@4.23.0: resolution: {integrity: sha512-5DWuSZXsqG894mkGb8ZsQt9myyQyVxE50AiGRZ0obV0BVUTVkaZmc9jbgpknaAAPUm4FIrzGkEseD6FuQJYJDQ==} @@ -29467,6 +30111,15 @@ packages: typescript: 5.2.2 dev: true + /ts-api-utils@1.2.1(typescript@5.3.3): + resolution: {integrity: sha512-RIYA36cJn2WiH9Hy77hdF9r7oEwxAtB/TS9/S4Qd90Ap4z5FSiin5zEiTL44OII1Y3IIlEvxwxFUVgrHSZ/UpA==} + engines: {node: '>=16'} + peerDependencies: + typescript: '>=4.2.0' + dependencies: + typescript: 5.3.3 + dev: true + /ts-dedent@2.2.0: resolution: {integrity: sha512-q5W7tVM71e2xjHZTlgfTDoPF/SmqKG5hddq9SzR49CH2hayqRKJtQ4mtRlSxKaJlR/+9rEM+mnBHf7I2/BQcpQ==} engines: {node: '>=6.10'} @@ -29479,7 +30132,6 @@ packages: /ts-interface-checker@0.1.13: resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} - dev: true /ts-invariant@0.10.3: resolution: {integrity: sha512-uivwYcQaxAucv1CzRp2n/QdYPo4ILf9VXgH19zEIjFx2EJufV16P0JtJVpYHy89DItG6Kwj2oIUjrcK5au+4tQ==} @@ -30057,6 +30709,21 @@ packages: resolution: {integrity: sha512-WHN8KDQblxd32odxeIgo83rdVDE2bvdkb86it7bMhYZwWKJz0+O0RK/eZiHYnM+zgt/U7hAHOlCQGfjjvSkw2g==} dev: true + /use-callback-ref@1.3.0(@types/react@18.2.31)(react@18.2.0): + resolution: {integrity: sha512-3FT9PRuRdbB9HfXhEq35u4oZkvpJ5kuYbpqhCfmiZyReuRgpnhDlbr2ZEnnuS0RrJAPn6l23xjFg9kpDM+Ms7w==} + engines: {node: '>=10'} + peerDependencies: + '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@types/react': 18.2.31 + react: 18.2.0 + tslib: 2.6.2 + dev: false + /use-callback-ref@1.3.0(@types/react@18.2.45)(react@18.2.0): resolution: {integrity: sha512-3FT9PRuRdbB9HfXhEq35u4oZkvpJ5kuYbpqhCfmiZyReuRgpnhDlbr2ZEnnuS0RrJAPn6l23xjFg9kpDM+Ms7w==} engines: {node: '>=10'} @@ -30103,6 +30770,22 @@ packages: react-dom: 18.2.0(react@18.2.0) dev: true + /use-sidecar@1.1.2(@types/react@18.2.31)(react@18.2.0): + resolution: {integrity: sha512-epTbsLuzZ7lPClpz2TyryBfztm7m+28DlEv2ZCQ3MDr5ssiwyOwGH/e5F9CkfWjJ1t4clvI58yF822/GUkjjhw==} + engines: {node: '>=10'} + peerDependencies: + '@types/react': ^16.9.0 || ^17.0.0 || ^18.0.0 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@types/react': 18.2.31 + detect-node-es: 1.1.0 + react: 18.2.0 + tslib: 2.6.2 + dev: false + /use-sidecar@1.1.2(@types/react@18.2.45)(react@18.2.0): resolution: {integrity: sha512-epTbsLuzZ7lPClpz2TyryBfztm7m+28DlEv2ZCQ3MDr5ssiwyOwGH/e5F9CkfWjJ1t4clvI58yF822/GUkjjhw==} engines: {node: '>=10'} @@ -30170,7 +30853,7 @@ packages: resolution: {integrity: sha512-9lDD+EVI2fjFsMWXc6dy5JJzBsVTcQ2fVkfBvncZ6xJWG9wtBhOldG+mHkSL0+V1K/xgZz0JDO5UT5hFwHUghg==} engines: {node: '>=10.12.0'} dependencies: - '@jridgewell/trace-mapping': 0.3.20 + '@jridgewell/trace-mapping': 0.3.22 '@types/istanbul-lib-coverage': 2.0.4 convert-source-map: 2.0.0 dev: true @@ -30761,7 +31444,6 @@ packages: /yaml@2.3.4: resolution: {integrity: sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA==} engines: {node: '>= 14'} - dev: true /yargs-parser@18.1.3: resolution: {integrity: sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==} From 992cd837362ee6b52304434a3fc8110228c93b63 Mon Sep 17 00:00:00 2001 From: Siddharth Tiwari Date: Thu, 8 Feb 2024 03:15:24 +0530 Subject: [PATCH 06/12] chore: Addressing comments, update readme, update codegen --- apps/map/README.md | 7 + apps/map/codegen.yml | 2 +- apps/map/components/map/index.tsx | 2 +- apps/map/components/map/suggest-form.tsx | 2 +- apps/map/services/galoy/graphql/generated.ts | 145 ++++--------------- 5 files changed, 37 insertions(+), 121 deletions(-) diff --git a/apps/map/README.md b/apps/map/README.md index 7169fbef20..0a55876c0e 100644 --- a/apps/map/README.md +++ b/apps/map/README.md @@ -1,2 +1,9 @@ # Map +### local dev setup +This app uses Google Maps, therefore it requires a Google Maps API token: +``` +NEXT_PUBLIC_MAP_API_TOKEN +``` + +App run's on port `3005` by default. diff --git a/apps/map/codegen.yml b/apps/map/codegen.yml index d80849439d..2a58c294fe 100644 --- a/apps/map/codegen.yml +++ b/apps/map/codegen.yml @@ -1,6 +1,6 @@ overwrite: true schema: - - "http://localhost:4455/graphql" + - "../../core/api/src/graphql/public/schema.graphql" documents: - "app/**/*.{ts,tsx}" - "services/**/*.{ts,tsx}" diff --git a/apps/map/components/map/index.tsx b/apps/map/components/map/index.tsx index e9c2781702..3242f44b03 100644 --- a/apps/map/components/map/index.tsx +++ b/apps/map/components/map/index.tsx @@ -254,7 +254,7 @@ export default function MapComponent({ mapData }: MapComponentProps) { lat: marker.mapInfo.coordinates.latitude, lng: marker.mapInfo.coordinates.longitude, }} - title={marker.username as string} + title={marker.username} onClick={() => handleMarkerClick(marker)} /> ))} diff --git a/apps/map/components/map/suggest-form.tsx b/apps/map/components/map/suggest-form.tsx index 9639c54057..344cd9f683 100644 --- a/apps/map/components/map/suggest-form.tsx +++ b/apps/map/components/map/suggest-form.tsx @@ -51,7 +51,7 @@ export function SuggestMapFormSheet({ latitude, longitude }: formProps) { ) : ( <> - Fill the Details of the Business you want to suggest, with there username. + Fill the Details of the Business you want to Add.
; }; -export type ApiKey = { - readonly __typename: 'ApiKey'; - readonly createdAt: Scalars['Timestamp']['output']; - readonly expired: Scalars['Boolean']['output']; - readonly expiresAt?: Maybe; - readonly id: Scalars['ID']['output']; - readonly lastUsedAt?: Maybe; - readonly name: Scalars['String']['output']; - readonly readOnly: Scalars['Boolean']['output']; - readonly revoked: Scalars['Boolean']['output']; -}; - -export type ApiKeyCreateInput = { - readonly expireInDays?: InputMaybe; - readonly name: Scalars['String']['input']; - readonly readOnly?: Scalars['Boolean']['input']; -}; - -export type ApiKeyCreatePayload = { - readonly __typename: 'ApiKeyCreatePayload'; - readonly apiKey: ApiKey; - readonly apiKeySecret: Scalars['String']['output']; -}; - -export type ApiKeyRevokeInput = { - readonly id: Scalars['ID']['input']; -}; - -export type ApiKeyRevokePayload = { - readonly __typename: 'ApiKeyRevokePayload'; - readonly apiKey: ApiKey; -}; - export type AuthTokenPayload = { readonly __typename: 'AuthTokenPayload'; readonly authToken?: Maybe; @@ -838,8 +832,6 @@ export type Mutation = { readonly accountEnableNotificationChannel: AccountUpdateNotificationSettingsPayload; readonly accountUpdateDefaultWalletId: AccountUpdateDefaultWalletIdPayload; readonly accountUpdateDisplayCurrency: AccountUpdateDisplayCurrencyPayload; - readonly apiKeyCreate: ApiKeyCreatePayload; - readonly apiKeyRevoke: ApiKeyRevokePayload; readonly callbackEndpointAdd: CallbackEndpointAddPayload; readonly callbackEndpointDelete: SuccessPayload; readonly captchaCreateChallenge: CaptchaCreateChallengePayload; @@ -941,13 +933,9 @@ export type Mutation = { readonly quizCompleted: QuizCompletedPayload; /** @deprecated will be moved to AccountContact */ readonly userContactUpdateAlias: UserContactUpdateAliasPayload; - readonly userDisableNotificationCategory: UserUpdateNotificationSettingsPayload; - readonly userDisableNotificationChannel: UserUpdateNotificationSettingsPayload; readonly userEmailDelete: UserEmailDeletePayload; readonly userEmailRegistrationInitiate: UserEmailRegistrationInitiatePayload; readonly userEmailRegistrationValidate: UserEmailRegistrationValidatePayload; - readonly userEnableNotificationCategory: UserUpdateNotificationSettingsPayload; - readonly userEnableNotificationChannel: UserUpdateNotificationSettingsPayload; readonly userLogin: AuthTokenPayload; readonly userLoginUpgrade: UpgradePayload; readonly userLogout: SuccessPayload; @@ -993,16 +981,6 @@ export type MutationAccountUpdateDisplayCurrencyArgs = { }; -export type MutationApiKeyCreateArgs = { - input: ApiKeyCreateInput; -}; - - -export type MutationApiKeyRevokeArgs = { - input: ApiKeyRevokeInput; -}; - - export type MutationCallbackEndpointAddArgs = { input: CallbackEndpointAddInput; }; @@ -1168,16 +1146,6 @@ export type MutationUserContactUpdateAliasArgs = { }; -export type MutationUserDisableNotificationCategoryArgs = { - input: UserDisableNotificationCategoryInput; -}; - - -export type MutationUserDisableNotificationChannelArgs = { - input: UserDisableNotificationChannelInput; -}; - - export type MutationUserEmailRegistrationInitiateArgs = { input: UserEmailRegistrationInitiateInput; }; @@ -1188,16 +1156,6 @@ export type MutationUserEmailRegistrationValidateArgs = { }; -export type MutationUserEnableNotificationCategoryArgs = { - input: UserEnableNotificationCategoryInput; -}; - - -export type MutationUserEnableNotificationChannelArgs = { - input: UserEnableNotificationChannelInput; -}; - - export type MutationUserLoginArgs = { input: UserLoginInput; }; @@ -1807,7 +1765,6 @@ export type UsdWalletTransactionsByPaymentHashArgs = { export type User = { readonly __typename: 'User'; - readonly apiKeys: ReadonlyArray; /** * Get single contact details. * Can include the transactions associated with the contact. @@ -1830,7 +1787,6 @@ export type User = { * When value is 'default' the intent is to use preferred language from OS settings. */ readonly language: Scalars['Language']['output']; - readonly notificationSettings: UserNotificationSettings; /** Phone number with international calling code. */ readonly phone?: Maybe; /** Whether TOTP is enabled for this user. */ @@ -1881,15 +1837,6 @@ export type UserContactUpdateAliasPayload = { readonly errors: ReadonlyArray; }; -export type UserDisableNotificationCategoryInput = { - readonly category: UserNotificationCategory; - readonly channel: UserNotificationChannel; -}; - -export type UserDisableNotificationChannelInput = { - readonly channel: UserNotificationChannel; -}; - export type UserEmailDeletePayload = { readonly __typename: 'UserEmailDeletePayload'; readonly errors: ReadonlyArray; @@ -1918,15 +1865,6 @@ export type UserEmailRegistrationValidatePayload = { readonly me?: Maybe; }; -export type UserEnableNotificationCategoryInput = { - readonly category: UserNotificationCategory; - readonly channel: UserNotificationChannel; -}; - -export type UserEnableNotificationChannelInput = { - readonly channel: UserNotificationChannel; -}; - export type UserLoginInput = { readonly code: Scalars['OneTimeAuthCode']['input']; readonly phone: Scalars['Phone']['input']; @@ -1941,30 +1879,6 @@ export type UserLogoutInput = { readonly deviceToken: Scalars['String']['input']; }; -export const UserNotificationCategory = { - AdminNotification: 'ADMIN_NOTIFICATION', - Balance: 'BALANCE', - Circles: 'CIRCLES', - Payments: 'PAYMENTS' -} as const; - -export type UserNotificationCategory = typeof UserNotificationCategory[keyof typeof UserNotificationCategory]; -export const UserNotificationChannel = { - Push: 'PUSH' -} as const; - -export type UserNotificationChannel = typeof UserNotificationChannel[keyof typeof UserNotificationChannel]; -export type UserNotificationChannelSettings = { - readonly __typename: 'UserNotificationChannelSettings'; - readonly disabledCategories: ReadonlyArray; - readonly enabled: Scalars['Boolean']['output']; -}; - -export type UserNotificationSettings = { - readonly __typename: 'UserNotificationSettings'; - readonly push: UserNotificationChannelSettings; -}; - export type UserPhoneDeletePayload = { readonly __typename: 'UserPhoneDeletePayload'; readonly errors: ReadonlyArray; @@ -2024,11 +1938,6 @@ export type UserUpdateLanguagePayload = { readonly user?: Maybe; }; -export type UserUpdateNotificationSettingsPayload = { - readonly __typename: 'UserUpdateNotificationSettingsPayload'; - readonly notificationSettings: UserNotificationSettings; -}; - export type UserUpdateUsernameInput = { readonly username: Scalars['Username']['input']; }; From 5bf121413bc078a254b28051fbdc7c7a05b14d4b Mon Sep 17 00:00:00 2001 From: Siddharth Tiwari Date: Thu, 8 Feb 2024 04:01:05 +0530 Subject: [PATCH 07/12] chore: added test label in tilt --- dev/Tiltfile | 1 + 1 file changed, 1 insertion(+) diff --git a/dev/Tiltfile b/dev/Tiltfile index 424ac020c1..f6b895f611 100644 --- a/dev/Tiltfile +++ b/dev/Tiltfile @@ -15,6 +15,7 @@ TEST_RESOURCES = { DASHBOARD_TEST_LABEL: "test-dashboard", PAY_TEST_LABEL: "test-pay", ADMIN_PANEL_TEST_LABEL: "test-admin-panel" + MAP_TEST_LABEL = "test-map" } is_ci=("ci" in sys.argv) or cfg.get("bats", False) From df5262f7c4735d616454aca0f611a6a91d238006 Mon Sep 17 00:00:00 2001 From: Siddharth Tiwari Date: Thu, 8 Feb 2024 04:01:38 +0530 Subject: [PATCH 08/12] chore: clean unused files --- apps/blink-map/next-env.d.ts | 5 ----- apps/map/public/location.svg | 1 - 2 files changed, 6 deletions(-) delete mode 100644 apps/blink-map/next-env.d.ts delete mode 100644 apps/map/public/location.svg diff --git a/apps/blink-map/next-env.d.ts b/apps/blink-map/next-env.d.ts deleted file mode 100644 index 4f11a03dc6..0000000000 --- a/apps/blink-map/next-env.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -/// -/// - -// NOTE: This file should not be edited -// see https://nextjs.org/docs/basic-features/typescript for more information. diff --git a/apps/map/public/location.svg b/apps/map/public/location.svg deleted file mode 100644 index e8017c368f..0000000000 --- a/apps/map/public/location.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file From e9e12350314732bc3654c682dab834f2f474ff76 Mon Sep 17 00:00:00 2001 From: Siddharth Tiwari Date: Thu, 8 Feb 2024 04:07:40 +0530 Subject: [PATCH 09/12] fix: tilt syntax --- dev/Tiltfile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/dev/Tiltfile b/dev/Tiltfile index f6b895f611..a3905edb42 100644 --- a/dev/Tiltfile +++ b/dev/Tiltfile @@ -14,8 +14,8 @@ TEST_RESOURCES = { CONSENT_TEST_LABEL: "test-consent", DASHBOARD_TEST_LABEL: "test-dashboard", PAY_TEST_LABEL: "test-pay", - ADMIN_PANEL_TEST_LABEL: "test-admin-panel" - MAP_TEST_LABEL = "test-map" + ADMIN_PANEL_TEST_LABEL: "test-admin-panel", + MAP_TEST_LABEL: "test-map" } is_ci=("ci" in sys.argv) or cfg.get("bats", False) From 60bba250d09412f94ebba20e0500d08a2139fbd5 Mon Sep 17 00:00:00 2001 From: Siddharth Tiwari Date: Thu, 8 Feb 2024 04:13:10 +0530 Subject: [PATCH 10/12] chore: fix tilt --- dev/Tiltfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dev/Tiltfile b/dev/Tiltfile index a3905edb42..f02b9a52f8 100644 --- a/dev/Tiltfile +++ b/dev/Tiltfile @@ -225,7 +225,7 @@ local_resource( map_test_target = "//apps/map:test-integration" local_resource( - "map-test", + "test-map", labels = ["test"], auto_init = is_ci and MAP_TEST_LABEL in cfg.get("test", []), cmd = "buck2 test {}".format(map_test_target), From d8595fd3b9488d465536607b2dbea15c9ec7247a Mon Sep 17 00:00:00 2001 From: Siddharth Tiwari Date: Thu, 8 Feb 2024 04:23:50 +0530 Subject: [PATCH 11/12] chore: editable coordinates --- apps/map/components/map/suggest-form.tsx | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/apps/map/components/map/suggest-form.tsx b/apps/map/components/map/suggest-form.tsx index 344cd9f683..83529daf83 100644 --- a/apps/map/components/map/suggest-form.tsx +++ b/apps/map/components/map/suggest-form.tsx @@ -18,6 +18,11 @@ type formProps = { export function SuggestMapFormSheet({ latitude, longitude }: formProps) { const [isOpen, setIsOpen] = useState(false) + const [coordinates, setCoordinates] = useState({ + latitude: latitude, + longitude: longitude, + }) + const [state, formAction] = useFormState< { error: boolean @@ -72,19 +77,28 @@ export function SuggestMapFormSheet({ latitude, longitude }: formProps) { required={true} label="Latitude" id="latitude" - value={latitude} + value={coordinates.latitude} placeholder="Latitude" name="latitude" type="number" + onChange={(e) => { + setCoordinates({ ...coordinates, latitude: parseFloat(e.target.value) }) + }} /> { + setCoordinates({ + ...coordinates, + longitude: parseFloat(e.target.value), + }) + }} /> {state.error && {state.message}} - +
+ +
)} {!draggablePin.visible && ( )} {currentLocation.userAllowedLocation && ( @@ -239,7 +231,7 @@ export default function MapComponent({ mapData }: MapComponentProps) { mapTypeId={google.maps.MapTypeId.ROADMAP} mapContainerStyle={{ width: "100vw", height: "100vh" }} > - {mapData.map((marker) => ( + {mapData.map((marker, index) => ( { state.error = false state.message = "" + setCoordinates({ + latitude, + longitude, + }) setIsOpen(true) } return ( - @@ -82,7 +86,7 @@ export function SuggestMapFormSheet({ latitude, longitude }: formProps) { name="latitude" type="number" onChange={(e) => { - setCoordinates({ ...coordinates, latitude: parseFloat(e.target.value) }) + setCoordinates({ ...coordinates, latitude: Number(e.target.value) }) }} /> { setCoordinates({ ...coordinates, - longitude: parseFloat(e.target.value), + longitude: Number(e.target.value), }) }} /> {state.error && {state.message}}