From e584bd37503fd712cba42543c4809ebdec8600ce Mon Sep 17 00:00:00 2001 From: elraphty Date: Mon, 25 Sep 2023 19:01:57 +0100 Subject: [PATCH 1/4] finished organization bounties swtiching --- db/db.go | 6 + db/structs.go | 3 +- frontend/app/src/App.tsx | 14 +- .../app/src/components/common/BaseModal.tsx | 2 +- .../app/src/components/common/LazyImg.tsx | 2 - frontend/app/src/helpers/helpers.ts | 28 +- frontend/app/src/people/main/FocusView.tsx | 16 +- .../people/main/bountyModal/BountyModal.tsx | 21 - .../widgetViews/OrganizationDetails.tsx | 22 +- .../people/widgetViews/OrganizationView.tsx | 65 +- frontend/app/src/store/main.ts | 17 +- frontend/app/yarn.lock | 576 ++++++------------ handlers/organizations.go | 25 +- routes/organizations.go | 2 +- 14 files changed, 331 insertions(+), 468 deletions(-) diff --git a/db/db.go b/db/db.go index 3ba582251..737f2ea8a 100644 --- a/db/db.go +++ b/db/db.go @@ -1039,6 +1039,12 @@ func (db database) GetOrganizationUsersCount(uuid string) int64 { return count } +func (db database) GetOrganizationBountyCount(uuid string) int64 { + var count int64 + db.db.Model(&Bounty{}).Where("org_uuid = ?", uuid).Count(&count) + return count +} + func (db database) GetOrganizationUser(pubkey string, org_uuid string) OrganizationUsers { ms := OrganizationUsers{} diff --git a/db/structs.go b/db/structs.go index d577cd202..6266fc41a 100644 --- a/db/structs.go +++ b/db/structs.go @@ -100,7 +100,7 @@ type Tabler interface { type Person struct { ID uint `json:"id"` Uuid string `json:"uuid"` - OwnerPubKey string `json:"owner_pubkey"` + OwnerPubKey string `gorm:"uniqueIndex,unique"json:"owner_pubkey"` OwnerAlias string `json:"owner_alias"` UniqueName string `json:"unique_name"` Description string `json:"description"` @@ -403,6 +403,7 @@ type Organization struct { Created *time.Time `json:"created"` Updated *time.Time `json:"updated"` Show bool `json:"show"` + BountyCount int64 `json:"bounty_count,omitempty"` } type OrganizationShort struct { diff --git a/frontend/app/src/App.tsx b/frontend/app/src/App.tsx index 8e4459e58..51d8fc7a9 100644 --- a/frontend/app/src/App.tsx +++ b/frontend/app/src/App.tsx @@ -19,15 +19,23 @@ const theme = createTheme({ function App() { const getUserOrganizations = useCallback(async () => { - if (uiStore.meInfo && uiStore.meInfo?.tribe_jwt) { - await mainStore.getUserOrganizations(); + if (uiStore.selectedPerson !== 0) { + await mainStore.getUserOrganizations(uiStore.selectedPerson); } - }, []); + }, [uiStore.selectedPerson]); useEffect(() => { getUserOrganizations(); }, [getUserOrganizations]); + const getBountyRoles = useCallback(async () => { + await mainStore.getRoles(); + }, []); + + useEffect(() => { + getBountyRoles(); + }, []) + useEffect(() => { // get usd/sat exchange rate every 100 second; mainStore.getUsdToSatsExchangeRate(); diff --git a/frontend/app/src/components/common/BaseModal.tsx b/frontend/app/src/components/common/BaseModal.tsx index c4c73644f..9d1987bd5 100644 --- a/frontend/app/src/components/common/BaseModal.tsx +++ b/frontend/app/src/components/common/BaseModal.tsx @@ -1,6 +1,6 @@ /* eslint-disable @typescript-eslint/typedef */ import { Modal, ModalProps } from '@mui/base'; -import { Box, styled } from '@mui/system'; +import { styled } from '@mui/system'; import clsx from 'clsx'; import React from 'react'; diff --git a/frontend/app/src/components/common/LazyImg.tsx b/frontend/app/src/components/common/LazyImg.tsx index 45b3df503..aa50ac9fe 100644 --- a/frontend/app/src/components/common/LazyImg.tsx +++ b/frontend/app/src/components/common/LazyImg.tsx @@ -1,10 +1,8 @@ import { noop } from 'lodash'; import React, { - ComponentProps, HTMLAttributes, ImgHTMLAttributes, useEffect, - useMemo, useRef, useState } from 'react'; diff --git a/frontend/app/src/helpers/helpers.ts b/frontend/app/src/helpers/helpers.ts index 8f64c452e..39e5657c2 100644 --- a/frontend/app/src/helpers/helpers.ts +++ b/frontend/app/src/helpers/helpers.ts @@ -147,23 +147,25 @@ export type Roles = | 'VIEW REPORT'; export const userHasRole = (bountyRoles: any[], userRoles: any[], role: Roles): boolean => { - let hasRole = false; - const bountyRolesMap = {}; - const userRolesMap = {}; + if(bountyRoles.length) { + const bountyRolesMap = {}; + const userRolesMap = {}; - bountyRoles.forEach((role: any) => { - bountyRolesMap[role.name] = role.name; - }); + bountyRoles.forEach((role: any) => { + bountyRolesMap[role.name] = role.name; + }); - userRoles.forEach((user: any) => { - userRolesMap[user.role] = user.role; - }); + userRoles.forEach((user: any) => { + userRolesMap[user.role] = user.role; + }); - if (bountyRolesMap.hasOwnProperty(role) && userRolesMap.hasOwnProperty(role)) { - hasRole = true; - } + if (bountyRolesMap.hasOwnProperty(role) && userRolesMap.hasOwnProperty(role)) { + return true; + } - return hasRole; + return false; + } + return false }; export const toCapitalize = (word: string): string => { diff --git a/frontend/app/src/people/main/FocusView.tsx b/frontend/app/src/people/main/FocusView.tsx index 45e7262c1..73fb73934 100644 --- a/frontend/app/src/people/main/FocusView.tsx +++ b/frontend/app/src/people/main/FocusView.tsx @@ -70,9 +70,9 @@ const B = styled.div` overflow-y: auto; box-sizing: border-box; ${EnvWithScrollBar({ - thumbColor: '#5a606c', - trackBackgroundColor: 'rgba(0,0,0,0)' - })} + thumbColor: '#5a606c', + trackBackgroundColor: 'rgba(0,0,0,0)' +})} `; function FocusedView(props: FocusViewProps) { const { @@ -109,9 +109,9 @@ function FocusedView(props: FocusViewProps) { const userOrganizations = main.organizations.length ? main.organizations.map((org: Organization) => ({ - label: toCapitalize(org.name), - value: org.uuid - })) + label: toCapitalize(org.name), + value: org.uuid + })) : []; function isNotHttps(url: string | undefined) { @@ -420,8 +420,8 @@ function FocusedView(props: FocusViewProps) { extraHTML={ ui.meInfo.verification_signature ? { - twitter: `Post this to your twitter account to verify:
Sphinx Verification: ${ui.meInfo.verification_signature}` - } + twitter: `Post this to your twitter account to verify:
Sphinx Verification: ${ui.meInfo.verification_signature}` + } : {} } /> diff --git a/frontend/app/src/people/main/bountyModal/BountyModal.tsx b/frontend/app/src/people/main/bountyModal/BountyModal.tsx index 875bf44e9..421dec966 100644 --- a/frontend/app/src/people/main/bountyModal/BountyModal.tsx +++ b/frontend/app/src/people/main/bountyModal/BountyModal.tsx @@ -19,27 +19,6 @@ export const BountyModal = ({ basePath }: BountyModalProps) => { const wantedLength = person?.extras ? person?.extras.wanted?.length : 0; - const changeWanted = (step: any) => { - if (!wantedLength) return; - const currentStep = Number(wantedIndex); - const newStep = currentStep + step; - - if (step === 1) { - if (newStep < wantedLength) { - history.replace({ - pathname: `${basePath}/${newStep}` - }); - } - } - if (step === -1) { - if (newStep >= 0) { - history.replace({ - pathname: `${basePath}/${newStep}` - }); - } - } - }; - const onGoBack = () => { ui.setBountyPerson(0); history.push({ diff --git a/frontend/app/src/people/widgetViews/OrganizationDetails.tsx b/frontend/app/src/people/widgetViews/OrganizationDetails.tsx index 9241556bc..b746cc2c9 100644 --- a/frontend/app/src/people/widgetViews/OrganizationDetails.tsx +++ b/frontend/app/src/people/widgetViews/OrganizationDetails.tsx @@ -174,7 +174,6 @@ const OrganizationDetails = (props: { close: () => void; org: Organization | und const [users, setUsers] = useState([]); const [user, setUser] = useState(); const [userRoles, setUserRoles] = useState([]); - const [bountyRoles, setBountyRoles] = useState([]); const [bountyRolesData, setBountyRolesData] = useState([]); const [toasts, setToasts]: any = useState([]); const [lnInvoice, setLnInvoice] = useState(''); @@ -238,15 +237,12 @@ const OrganizationDetails = (props: { close: () => void; org: Organization | und }; const getBountyRoles = useCallback(async () => { - const roles = await main.getRoles(); - setBountyRoles(roles); - - const bountyRolesData = roles.map((role: any) => ({ + const bountyRolesData = main.bountyRoles.map((role: any) => ({ name: role.name, status: false })); setBountyRolesData(bountyRolesData); - }, [main]); + }, [main.bountyRoles]); const getUserRoles = async (user: any) => { if (uuid && user.owner_pubkey) { @@ -445,7 +441,7 @@ const OrganizationDetails = (props: { close: () => void; org: Organization | und User{usersCount > 1 && 's'} {usersCount} - {(isOrganizationAdmin || userHasRole(bountyRoles, userRoles, 'ADD USER')) && ( + {(isOrganizationAdmin || userHasRole(main.bountyRoles, userRoles, 'ADD USER')) && ( void; org: Organization | und Budget {orgBudget} sats - {(isOrganizationAdmin || userHasRole(bountyRoles, userRoles, 'ADD BUDGET')) && ( + {(isOrganizationAdmin || userHasRole(main.bountyRoles, userRoles, 'ADD BUDGET')) && ( void; org: Organization | und onClick={() => setIsOpenBudget(true)} /> )} - {(isOrganizationAdmin || userHasRole(bountyRoles, userRoles, 'VIEW REPORT')) && ( + {(isOrganizationAdmin || userHasRole(main.bountyRoles, userRoles, 'VIEW REPORT')) && ( <> setIsOpenBudgetHistory(true)}> Budget history @@ -489,7 +485,7 @@ const OrganizationDetails = (props: { close: () => void; org: Organization | und {user.owner_pubkey} - {(isOrganizationAdmin || userHasRole(bountyRoles, userRoles, 'ADD ROLES')) && ( + {(isOrganizationAdmin || userHasRole(main.bountyRoles, userRoles, 'ADD ROLES')) && ( handleSettingsClick(user)} icon={'settings'} @@ -501,7 +497,7 @@ const OrganizationDetails = (props: { close: () => void; org: Organization | und }} /> )} - {(isOrganizationAdmin || userHasRole(bountyRoles, userRoles, 'DELETE USER')) && ( + {(isOrganizationAdmin || userHasRole(main.bountyRoles, userRoles, 'DELETE USER')) && ( { deleteOrganizationUser(user); @@ -588,8 +584,8 @@ const OrganizationDetails = (props: { close: () => void; org: Organization | und style={ item.name === 'github_description' && !values.ticket_url ? { - display: 'none' - } + display: 'none' + } : undefined } /> diff --git a/frontend/app/src/people/widgetViews/OrganizationView.tsx b/frontend/app/src/people/widgetViews/OrganizationView.tsx index 53d0cf21e..bebbaee1f 100644 --- a/frontend/app/src/people/widgetViews/OrganizationView.tsx +++ b/frontend/app/src/people/widgetViews/OrganizationView.tsx @@ -11,6 +11,7 @@ import { Button, IconButton } from 'components/common'; import { useIsMobile } from 'hooks/uiHooks'; import { Formik } from 'formik'; import { FormField, validator } from 'components/form/utils'; +import { userHasRole } from 'helpers'; import { Modal } from '../../components/common'; import avatarIcon from '../../public/static/profile_avatar.svg'; import { colors } from '../../config/colors'; @@ -78,6 +79,7 @@ const Organizations = (props: { person: Person }) => { const [organization, setOrganization] = useState(); const [disableFormButtons, setDisableFormButtons] = useState(false); const [toasts, setToasts]: any = useState([]); + const [user, setUser] = useState(); const { main, ui } = useStores(); const isMobile = useIsMobile(); const config = widgetConfigs['organizations']; @@ -108,9 +110,21 @@ const Organizations = (props: { person: Person }) => { const getUserOrganizations = useCallback(async () => { setIsLoading(true); - await main.getUserOrganizations(); + if (ui.selectedPerson !== 0) { + await main.getUserOrganizations(ui.selectedPerson); + const user = await main.getPersonById(ui.selectedPerson); + setUser(user); + } setIsLoading(false); - }, [main]); + }, [main, ui.selectedPerson]); + + const getUserRoles = async (orgUuid: string): Promise => { + if (user?.owner_pubkey) { + const userRoles = await main.getUserRoles(orgUuid, user.owner_pubkey); + return userRoles; + } + return []; + }; useEffect(() => { getUserOrganizations(); @@ -137,24 +151,39 @@ const Organizations = (props: { person: Person }) => { setIsLoading(false); }; - const renderOrganizations = () => { - if (main.organizations.length) { - return main.organizations.map((org: Organization, i: number) => ( - - { + const orgUi = (org: any, key: number) => { + const isOrganizationAdmin = org?.owner_pubkey === user?.owner_pubkey; + return ( + + { + const userRoles = await getUserRoles(org.uuid); + if (isOrganizationAdmin + || userHasRole(main.bountyRoles, userRoles, 'ADD USER') + || userHasRole(main.bountyRoles, userRoles, 'VIEW REPORT')) { setOrganization(org); setDetailsOpen(true); - }} - > - - {org.name} - - + } + } + } + > + + {org.name} + + + {(org.bounty_count && org.bount_count !== 0) && org.uuid && + ( Bounties - - )); + ) + } + + ) + } + + const renderOrganizations = () => { + if (main.organizations.length) { + return main.organizations.map((org: Organization, i: number) => orgUi(org, i)) } else { return ; } @@ -247,8 +276,8 @@ const Organizations = (props: { person: Person }) => { style={ item.name === 'github_description' && !values.ticket_url ? { - display: 'none' - } + display: 'none' + } : undefined } /> diff --git a/frontend/app/src/store/main.ts b/frontend/app/src/store/main.ts index 403bf4506..9c1df39d1 100644 --- a/frontend/app/src/store/main.ts +++ b/frontend/app/src/store/main.ts @@ -194,6 +194,7 @@ export interface Organization { created: string; updated: string; show: boolean; + bounty_count?: number; } export interface BountyRoles { @@ -1642,11 +1643,11 @@ export class MainStore { this.organizations = organizations; } - @action async getUserOrganizations(): Promise { + @action async getUserOrganizations(id: number): Promise { try { if (!uiStore.meInfo) return []; const info = uiStore.meInfo; - const r: any = await fetch(`${TribesURL}/organizations/user`, { + const r: any = await fetch(`${TribesURL}/organizations/user/${id}`, { method: 'GET', mode: 'cors', headers: { @@ -1764,6 +1765,13 @@ export class MainStore { } } + @observable + bountyRoles: BountyRoles[] = []; + + @action setBountyRoles(roles: BountyRoles[]) { + this.bountyRoles = roles; + } + async getRoles(): Promise { try { if (!uiStore.meInfo) return []; @@ -1777,7 +1785,10 @@ export class MainStore { } }); - return r.json(); + const roles = await r.json(); + this.setBountyRoles(roles); + + return roles; } catch (e) { console.log('Error getRoles', e); return []; diff --git a/frontend/app/yarn.lock b/frontend/app/yarn.lock index 5712a47c0..9031f1ecc 100644 --- a/frontend/app/yarn.lock +++ b/frontend/app/yarn.lock @@ -1788,7 +1788,7 @@ "@jridgewell/sourcemap-codec" "^1.4.10" "@jridgewell/trace-mapping" "^0.3.9" -"@jridgewell/resolve-uri@^3.0.3", "@jridgewell/resolve-uri@3.1.0": +"@jridgewell/resolve-uri@3.1.0", "@jridgewell/resolve-uri@^3.0.3": version "3.1.0" resolved "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz" integrity sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w== @@ -1806,23 +1806,15 @@ "@jridgewell/gen-mapping" "^0.3.0" "@jridgewell/trace-mapping" "^0.3.9" -"@jridgewell/sourcemap-codec@^1.4.10": - version "1.4.15" - resolved "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz" - integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== - "@jridgewell/sourcemap-codec@1.4.14": version "1.4.14" resolved "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz" integrity sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw== -"@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.9": - version "0.3.18" - resolved "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz" - integrity sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA== - dependencies: - "@jridgewell/resolve-uri" "3.1.0" - "@jridgewell/sourcemap-codec" "1.4.14" +"@jridgewell/sourcemap-codec@^1.4.10": + version "1.4.15" + resolved "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz" + integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== "@jridgewell/trace-mapping@0.3.9": version "0.3.9" @@ -1832,6 +1824,14 @@ "@jridgewell/resolve-uri" "^3.0.3" "@jridgewell/sourcemap-codec" "^1.4.10" +"@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.9": + version "0.3.18" + resolved "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz" + integrity sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA== + dependencies: + "@jridgewell/resolve-uri" "3.1.0" + "@jridgewell/sourcemap-codec" "1.4.14" + "@leichtgewicht/ip-codec@^2.0.1": version "2.0.4" resolved "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz" @@ -1998,7 +1998,7 @@ "@nodelib/fs.stat" "2.0.5" run-parallel "^1.1.9" -"@nodelib/fs.stat@^2.0.2", "@nodelib/fs.stat@2.0.5": +"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": version "2.0.5" resolved "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz" integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== @@ -2586,13 +2586,6 @@ dependencies: "@types/react" "*" -"@types/react-dom@<18.0.0": - version "16.9.19" - resolved "https://registry.npmjs.org/@types/react-dom/-/react-dom-16.9.19.tgz" - integrity sha512-xC8D280Bf6p0zguJ8g62jcEOKZiUbx9sIe6O3tT/lKfR87A7A6g65q13z6D5QUMIa/6yFPkNhqjF5z/VVZEYqQ== - dependencies: - "@types/react" "^16" - "@types/react-dom@18.0.4": version "18.0.4" resolved "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.0.4.tgz" @@ -2600,6 +2593,13 @@ dependencies: "@types/react" "*" +"@types/react-dom@<18.0.0": + version "16.9.19" + resolved "https://registry.npmjs.org/@types/react-dom/-/react-dom-16.9.19.tgz" + integrity sha512-xC8D280Bf6p0zguJ8g62jcEOKZiUbx9sIe6O3tT/lKfR87A7A6g65q13z6D5QUMIa/6yFPkNhqjF5z/VVZEYqQ== + dependencies: + "@types/react" "^16" + "@types/react-input-autosize@^2.2.1": version "2.2.1" resolved "https://registry.npmjs.org/@types/react-input-autosize/-/react-input-autosize-2.2.1.tgz" @@ -2655,9 +2655,9 @@ dependencies: "@types/react" "*" -"@types/react@*", "@types/react@^16": +"@types/react@*", "@types/react@17.0.30", "@types/react@^16": version "17.0.30" - resolved "https://registry.npmjs.org/@types/react/-/react-17.0.30.tgz" + resolved "https://registry.yarnpkg.com/@types/react/-/react-17.0.30.tgz#2f8e6f5ab6415c091cc5e571942ee9064b17609e" integrity sha512-3Dt/A8gd3TCXi2aRe84y7cK1K8G+N9CZRDG8kDGguOKa0kf/ZkSwTmVIDPsm/KbQOVMaDJXwhBtuOXxqwdpWVg== dependencies: "@types/prop-types" "*" @@ -2874,7 +2874,7 @@ semver "^7.3.7" tsutils "^3.21.0" -"@typescript-eslint/utils@^5.58.0", "@typescript-eslint/utils@5.62.0": +"@typescript-eslint/utils@5.62.0", "@typescript-eslint/utils@^5.58.0": version "5.62.0" resolved "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.62.0.tgz" integrity sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ== @@ -2896,7 +2896,7 @@ "@typescript-eslint/types" "5.62.0" eslint-visitor-keys "^3.3.0" -"@webassemblyjs/ast@^1.11.5", "@webassemblyjs/ast@1.11.6": +"@webassemblyjs/ast@1.11.6", "@webassemblyjs/ast@^1.11.5": version "1.11.6" resolved "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.6.tgz" integrity sha512-IN1xI7PwOvLPgjcf180gC1bqn3q/QaOCwYUahIOhbYUu8KA/3tw2RT/T0Gidi1l7Hhj5D/INhJxiICObqpMu4Q== @@ -2997,7 +2997,7 @@ "@webassemblyjs/wasm-gen" "1.11.6" "@webassemblyjs/wasm-parser" "1.11.6" -"@webassemblyjs/wasm-parser@^1.11.5", "@webassemblyjs/wasm-parser@1.11.6": +"@webassemblyjs/wasm-parser@1.11.6", "@webassemblyjs/wasm-parser@^1.11.5": version "1.11.6" resolved "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.6.tgz" integrity sha512-6ZwPeGzMJM3Dqp3hCsLgESxBGtT/OeCvCZ4TA1JUPYgmhAx38tTPR9JaKy0S5H3evQpO/h2uWs2j6Yc/fjkpTQ== @@ -3127,27 +3127,7 @@ ajv@^6.10.0, ajv@^6.12.2, ajv@^6.12.4, ajv@^6.12.5: json-schema-traverse "^0.4.1" uri-js "^4.2.2" -ajv@^8.0.0: - version "8.12.0" - resolved "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz" - integrity sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA== - dependencies: - fast-deep-equal "^3.1.1" - json-schema-traverse "^1.0.0" - require-from-string "^2.0.2" - uri-js "^4.2.2" - -ajv@^8.6.0: - version "8.12.0" - resolved "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz" - integrity sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA== - dependencies: - fast-deep-equal "^3.1.1" - json-schema-traverse "^1.0.0" - require-from-string "^2.0.2" - uri-js "^4.2.2" - -ajv@^8.9.0: +ajv@^8.0.0, ajv@^8.6.0, ajv@^8.9.0: version "8.12.0" resolved "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz" integrity sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA== @@ -3245,13 +3225,6 @@ aria-hidden@^1.2.2: dependencies: tslib "^2.0.0" -aria-query@^5.0.0, aria-query@^5.1.3: - version "5.3.0" - resolved "https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz" - integrity sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A== - dependencies: - dequal "^2.0.3" - aria-query@5.1.3: version "5.1.3" resolved "https://registry.npmjs.org/aria-query/-/aria-query-5.1.3.tgz" @@ -3259,6 +3232,13 @@ aria-query@5.1.3: dependencies: deep-equal "^2.0.5" +aria-query@^5.0.0, aria-query@^5.1.3: + version "5.3.0" + resolved "https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz" + integrity sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A== + dependencies: + dequal "^2.0.3" + arity-n@^1.0.4: version "1.0.4" resolved "https://registry.npmjs.org/arity-n/-/arity-n-1.0.4.tgz" @@ -3272,16 +3252,16 @@ array-buffer-byte-length@^1.0.0: call-bind "^1.0.2" is-array-buffer "^3.0.1" -array-flatten@^2.1.2: - version "2.1.2" - resolved "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz" - integrity sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ== - array-flatten@1.1.1: version "1.1.1" resolved "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz" integrity sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg== +array-flatten@^2.1.2: + version "2.1.2" + resolved "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz" + integrity sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ== + array-includes@^3.1.6: version "3.1.6" resolved "https://registry.npmjs.org/array-includes/-/array-includes-3.1.6.tgz" @@ -3764,25 +3744,7 @@ ccount@^2.0.0: resolved "https://registry.npmjs.org/ccount/-/ccount-2.0.1.tgz" integrity sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg== -chalk@^2.0.0: - version "2.4.2" - resolved "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz" - integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== - dependencies: - ansi-styles "^3.2.1" - escape-string-regexp "^1.0.5" - supports-color "^5.3.0" - -chalk@^2.0.1: - version "2.4.2" - resolved "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz" - integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== - dependencies: - ansi-styles "^3.2.1" - escape-string-regexp "^1.0.5" - supports-color "^5.3.0" - -chalk@^2.4.1: +chalk@^2.0.0, chalk@^2.0.1, chalk@^2.4.1: version "2.4.2" resolved "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz" integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== @@ -3799,31 +3761,7 @@ chalk@^3.0.0: ansi-styles "^4.1.0" supports-color "^7.1.0" -chalk@^4.0.0: - version "4.1.2" - resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz" - integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== - dependencies: - ansi-styles "^4.1.0" - supports-color "^7.1.0" - -chalk@^4.0.2: - version "4.1.2" - resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz" - integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== - dependencies: - ansi-styles "^4.1.0" - supports-color "^7.1.0" - -chalk@^4.1.0: - version "4.1.2" - resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz" - integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== - dependencies: - ansi-styles "^4.1.0" - supports-color "^7.1.0" - -chalk@^4.1.2: +chalk@^4.0.0, chalk@^4.0.2, chalk@^4.1.0, chalk@^4.1.2: version "4.1.2" resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz" integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== @@ -3979,16 +3917,16 @@ color-convert@^2.0.1: dependencies: color-name "~1.1.4" -color-name@~1.1.4: - version "1.1.4" - resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz" - integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== - color-name@1.1.3: version "1.1.3" resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz" integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== +color-name@~1.1.4: + version "1.1.4" + resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== + colord@^2.9.1: version "2.9.3" resolved "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz" @@ -4288,15 +4226,15 @@ css-to-react-native@^3.0.0: css-color-keywords "^1.0.0" postcss-value-parser "^4.0.2" -css-tree@^1.1.2: - version "1.1.3" - resolved "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz" - integrity sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q== +css-tree@1.0.0-alpha.37: + version "1.0.0-alpha.37" + resolved "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.37.tgz" + integrity sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg== dependencies: - mdn-data "2.0.14" + mdn-data "2.0.4" source-map "^0.6.1" -css-tree@^1.1.3: +css-tree@^1.1.2, css-tree@^1.1.3: version "1.1.3" resolved "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz" integrity sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q== @@ -4304,14 +4242,6 @@ css-tree@^1.1.3: mdn-data "2.0.14" source-map "^0.6.1" -css-tree@1.0.0-alpha.37: - version "1.0.0-alpha.37" - resolved "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.37.tgz" - integrity sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg== - dependencies: - mdn-data "2.0.4" - source-map "^0.6.1" - css-what@^3.2.1: version "3.4.2" resolved "https://registry.npmjs.org/css-what/-/css-what-3.4.2.tgz" @@ -4434,33 +4364,26 @@ dateformat@^3.0.3: resolved "https://registry.npmjs.org/dateformat/-/dateformat-3.0.3.tgz" integrity sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q== -debug@^2.6.0: +debug@2.6.9, debug@^2.6.0: version "2.6.9" resolved "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz" integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== dependencies: ms "2.0.0" -debug@^3.2.7: - version "3.2.7" - resolved "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz" - integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== - dependencies: - ms "^2.1.1" - -debug@^4.0.0, debug@^4.1.0, debug@^4.1.1, debug@^4.3.2, debug@^4.3.4, debug@~4.3.1, debug@~4.3.2, debug@4: +debug@4, debug@^4.0.0, debug@^4.1.0, debug@^4.1.1, debug@^4.3.2, debug@^4.3.4, debug@~4.3.1, debug@~4.3.2: version "4.3.4" resolved "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz" integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== dependencies: ms "2.1.2" -debug@2.6.9: - version "2.6.9" - resolved "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz" - integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== +debug@^3.2.7: + version "3.2.7" + resolved "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz" + integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== dependencies: - ms "2.0.0" + ms "^2.1.1" decimal.js@^10.2.1: version "10.4.3" @@ -4543,16 +4466,16 @@ delayed-stream@~1.0.0: resolved "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz" integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== -depd@~1.1.2: - version "1.1.2" - resolved "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz" - integrity sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ== - depd@2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz" integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== +depd@~1.1.2: + version "1.1.2" + resolved "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz" + integrity sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ== + dequal@^2.0.0, dequal@^2.0.3: version "2.0.3" resolved "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz" @@ -4669,6 +4592,14 @@ dom-helpers@^5.0.1: "@babel/runtime" "^7.8.7" csstype "^3.0.2" +dom-serializer@0: + version "0.2.2" + resolved "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz" + integrity sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g== + dependencies: + domelementtype "^2.0.1" + entities "^2.0.0" + dom-serializer@^1.0.1: version "1.4.1" resolved "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz" @@ -4678,24 +4609,16 @@ dom-serializer@^1.0.1: domhandler "^4.2.0" entities "^2.0.0" -dom-serializer@0: - version "0.2.2" - resolved "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz" - integrity sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g== - dependencies: - domelementtype "^2.0.1" - entities "^2.0.0" +domelementtype@1: + version "1.3.1" + resolved "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz" + integrity sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w== domelementtype@^2.0.1, domelementtype@^2.2.0: version "2.3.0" resolved "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz" integrity sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw== -domelementtype@1: - version "1.3.1" - resolved "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz" - integrity sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w== - domexception@^2.0.1: version "2.0.1" resolved "https://registry.npmjs.org/domexception/-/domexception-2.0.1.tgz" @@ -5128,7 +5051,7 @@ eslint-plugin-testing-library@^5.0.1: dependencies: "@typescript-eslint/utils" "^5.58.0" -eslint-scope@^5.1.1, eslint-scope@5.1.1: +eslint-scope@5.1.1, eslint-scope@^5.1.1: version "5.1.1" resolved "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz" integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== @@ -5465,15 +5388,7 @@ find-up@^3.0.0: dependencies: locate-path "^3.0.0" -find-up@^4.0.0: - version "4.1.0" - resolved "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz" - integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== - dependencies: - locate-path "^5.0.0" - path-exists "^4.0.0" - -find-up@^4.1.0: +find-up@^4.0.0, find-up@^4.1.0: version "4.1.0" resolved "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz" integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== @@ -5586,17 +5501,7 @@ fs-extra@^10.0.0: jsonfile "^6.0.1" universalify "^2.0.0" -fs-extra@^9.0.0: - version "9.1.0" - resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz" - integrity sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ== - dependencies: - at-least-node "^1.0.0" - graceful-fs "^4.2.0" - jsonfile "^6.0.1" - universalify "^2.0.0" - -fs-extra@^9.0.1: +fs-extra@^9.0.0, fs-extra@^9.0.1: version "9.1.0" resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz" integrity sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ== @@ -5616,6 +5521,11 @@ fs.realpath@^1.0.0: resolved "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz" integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== +fsevents@^2.3.2, fsevents@~2.3.2: + version "2.3.3" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" + integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== + function-bind@^1.1.1: version "1.1.1" resolved "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz" @@ -5689,7 +5599,7 @@ get-symbol-description@^1.0.0: call-bind "^1.0.2" get-intrinsic "^1.1.1" -glob-parent@^5.1.2: +glob-parent@^5.1.2, glob-parent@~5.1.2: version "5.1.2" resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz" integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== @@ -5703,39 +5613,32 @@ glob-parent@^6.0.2: dependencies: is-glob "^4.0.3" -glob-parent@~5.1.2: - version "5.1.2" - resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz" - integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== - dependencies: - is-glob "^4.0.1" - glob-to-regexp@^0.4.1: version "0.4.1" resolved "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz" integrity sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw== -glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6: - version "7.2.3" - resolved "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz" - integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== +glob@7.1.6: + version "7.1.6" + resolved "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz" + integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== dependencies: fs.realpath "^1.0.0" inflight "^1.0.4" inherits "2" - minimatch "^3.1.1" + minimatch "^3.0.4" once "^1.3.0" path-is-absolute "^1.0.0" -glob@7.1.6: - version "7.1.6" - resolved "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz" - integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== +glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6: + version "7.2.3" + resolved "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz" + integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== dependencies: fs.realpath "^1.0.0" inflight "^1.0.4" inherits "2" - minimatch "^3.0.4" + minimatch "^3.1.1" once "^1.3.0" path-is-absolute "^1.0.0" @@ -6131,16 +6034,6 @@ http-deceiver@^1.2.7: resolved "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz" integrity sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw== -http-errors@~1.6.2: - version "1.6.3" - resolved "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz" - integrity sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A== - dependencies: - depd "~1.1.2" - inherits "2.0.3" - setprototypeof "1.1.0" - statuses ">= 1.4.0 < 2" - http-errors@2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz" @@ -6152,6 +6045,16 @@ http-errors@2.0.0: statuses "2.0.1" toidentifier "1.0.1" +http-errors@~1.6.2: + version "1.6.3" + resolved "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz" + integrity sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A== + dependencies: + depd "~1.1.2" + inherits "2.0.3" + setprototypeof "1.1.0" + statuses ">= 1.4.0 < 2" + http-parser-js@>=0.5.1: version "0.5.8" resolved "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.8.tgz" @@ -6204,13 +6107,6 @@ husky@^8.0.3: resolved "https://registry.npmjs.org/husky/-/husky-8.0.3.tgz" integrity sha512-+dQSyqPh4x1hlO1swXBiNb2HzTDN1I2IGLQx1GrBuiqFJfoMrnZWwVmatvSiO+Iz8fBUnf+lekwNo4c2LlXItg== -iconv-lite@^0.6.3: - version "0.6.3" - resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz" - integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw== - dependencies: - safer-buffer ">= 2.1.2 < 3.0.0" - iconv-lite@0.4.24: version "0.4.24" resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz" @@ -6218,6 +6114,13 @@ iconv-lite@0.4.24: dependencies: safer-buffer ">= 2.1.2 < 3" +iconv-lite@^0.6.3: + version "0.6.3" + resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz" + integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw== + dependencies: + safer-buffer ">= 2.1.2 < 3.0.0" + icss-utils@^5.0.0, icss-utils@^5.1.0: version "5.1.0" resolved "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz" @@ -6279,7 +6182,7 @@ inflight@^1.0.4: once "^1.3.0" wrappy "1" -inherits@^2.0.0, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.3, inherits@2, inherits@2.0.4: +inherits@2, inherits@2.0.4, inherits@^2.0.0, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.3: version "2.0.4" resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== @@ -6315,16 +6218,16 @@ invariant@^2.2.4: dependencies: loose-envify "^1.0.0" -ipaddr.js@^2.0.1: - version "2.1.0" - resolved "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.1.0.tgz" - integrity sha512-LlbxQ7xKzfBusov6UMi4MFpEg0m+mAm9xyNGEduwXMEDuf4WfzB/RZwMVYEd7IKGvh4IUkEXYxtAVu9T3OelJQ== - ipaddr.js@1.9.1: version "1.9.1" resolved "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz" integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== +ipaddr.js@^2.0.1: + version "2.1.0" + resolved "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.1.0.tgz" + integrity sha512-LlbxQ7xKzfBusov6UMi4MFpEg0m+mAm9xyNGEduwXMEDuf4WfzB/RZwMVYEd7IKGvh4IUkEXYxtAVu9T3OelJQ== + is-alphabetical@^1.0.0: version "1.0.4" resolved "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.4.tgz" @@ -6495,6 +6398,11 @@ is-plain-obj@^4.0.0: resolved "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz" integrity sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg== +is-plain-object@5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz" + integrity sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q== + is-plain-object@^2.0.4: version "2.0.4" resolved "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz" @@ -6502,11 +6410,6 @@ is-plain-object@^2.0.4: dependencies: isobject "^3.0.1" -is-plain-object@5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz" - integrity sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q== - is-potential-custom-element-name@^1.0.1: version "1.0.1" resolved "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz" @@ -6614,6 +6517,11 @@ is-wsl@^2.2.0: dependencies: is-docker "^2.0.0" +isarray@0.0.1: + version "0.0.1" + resolved "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz" + integrity sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ== + isarray@^2.0.5: version "2.0.5" resolved "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz" @@ -6624,11 +6532,6 @@ isarray@~1.0.0: resolved "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz" integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== -isarray@0.0.1: - version "0.0.1" - resolved "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz" - integrity sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ== - isexe@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz" @@ -7731,7 +7634,7 @@ memo-decorator@^2.0.1: resolved "https://registry.npmjs.org/memo-decorator/-/memo-decorator-2.0.1.tgz" integrity sha512-Cydoauo7y1Uad1UuznJqhuEQCt6adIl1w5ik3WmNl4FJeBmWAaMs64qyGRahaXWK/Dlmt/+QNesRTeFUcpJPkQ== -memoize-one@^5.1.1, "memoize-one@>=3.1.1 <6": +"memoize-one@>=3.1.1 <6", memoize-one@^5.1.1: version "5.2.1" resolved "https://registry.npmjs.org/memoize-one/-/memoize-one-5.2.1.tgz" integrity sha512-zYiwtZUcYyXKo/np96AGZAckk+FWWsUdJ3cHGGmld7+AhvcWmQyGCYUh1hc4Q/pkOhb65dQR/pqCyK0cOaHz4Q== @@ -8042,7 +7945,7 @@ micromatch@^4.0.2, micromatch@^4.0.4, micromatch@^4.0.5: braces "^3.0.2" picomatch "^2.3.1" -"mime-db@>= 1.43.0 < 2", mime-db@1.52.0: +mime-db@1.52.0, "mime-db@>= 1.43.0 < 2": version "1.52.0" resolved "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz" integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== @@ -8139,16 +8042,16 @@ mri@^1.1.0: resolved "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz" integrity sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA== -ms@^2.1.1, ms@2.1.2: - version "2.1.2" - resolved "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz" - integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== - ms@2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz" integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A== +ms@2.1.2, ms@^2.1.1: + version "2.1.2" + resolved "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz" + integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== + ms@2.1.3: version "2.1.3" resolved "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz" @@ -8423,14 +8326,7 @@ optionator@^0.9.3: prelude-ls "^1.2.1" type-check "^0.4.0" -p-limit@^2.0.0: - version "2.3.0" - resolved "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz" - integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== - dependencies: - p-try "^2.0.0" - -p-limit@^2.2.0: +p-limit@^2.0.0, p-limit@^2.2.0: version "2.3.0" resolved "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz" integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== @@ -8515,7 +8411,7 @@ parse-json@^5.0.0, parse-json@^5.2.0: json-parse-even-better-errors "^2.3.0" lines-and-columns "^1.1.6" -parse5@^6.0.0, parse5@6.0.1: +parse5@6.0.1, parse5@^6.0.0: version "6.0.1" resolved "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz" integrity sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw== @@ -8558,6 +8454,11 @@ path-parse@^1.0.7: resolved "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz" integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== +path-to-regexp@0.1.7: + version "0.1.7" + resolved "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz" + integrity sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ== + path-to-regexp@^1.7.0: version "1.8.0" resolved "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.8.0.tgz" @@ -8565,11 +8466,6 @@ path-to-regexp@^1.7.0: dependencies: isarray "0.0.1" -path-to-regexp@0.1.7: - version "0.1.7" - resolved "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz" - integrity sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ== - path-type@^4.0.0: version "4.0.0" resolved "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz" @@ -9262,14 +9158,7 @@ property-expr@^2.0.4: resolved "https://registry.npmjs.org/property-expr/-/property-expr-2.0.5.tgz" integrity sha512-IJUkICM5dP5znhCckHSv30Q4b5/JA5enCtkRHYaOVOAocnH/1BQEYTC5NMfT3AVl/iXKdr3aqQbQn9DxyWknwA== -property-information@^5.0.0: - version "5.6.0" - resolved "https://registry.npmjs.org/property-information/-/property-information-5.6.0.tgz" - integrity sha512-YUHSPk+A30YPv+0Qf8i9Mbfe/C0hdPXk1s1jPVToV8pk8BQtpw10ct89Eo7OWkutrwqvT0eicAxlOg3dOAu8JA== - dependencies: - xtend "^4.0.0" - -property-information@^5.3.0: +property-information@^5.0.0, property-information@^5.3.0: version "5.6.0" resolved "https://registry.npmjs.org/property-information/-/property-information-5.6.0.tgz" integrity sha512-YUHSPk+A30YPv+0Qf8i9Mbfe/C0hdPXk1s1jPVToV8pk8BQtpw10ct89Eo7OWkutrwqvT0eicAxlOg3dOAu8JA== @@ -9455,7 +9344,7 @@ react-element-to-jsx-string@^14.3.4: is-plain-object "5.0.0" react-is "17.0.2" -react-error-overlay@^6.0.11, react-error-overlay@6.0.9: +react-error-overlay@6.0.9, react-error-overlay@^6.0.11: version "6.0.9" resolved "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-6.0.9.tgz" integrity sha512-nQTTcUu+ATDbrSD1BZHr5kgSD4oF8OFjxun8uAaL8RwPBacGBNPf/yAuVVdx17N8XNzRDMrZ9XcKZHCjPW+9ew== @@ -9502,37 +9391,17 @@ react-intersection-observer@^9.4.1: resolved "https://registry.npmjs.org/react-intersection-observer/-/react-intersection-observer-9.5.2.tgz" integrity sha512-EmoV66/yvksJcGa1rdW0nDNc4I1RifDWkT50gXSFnPLYQ4xUptuDD4V7k+Rj1OgVAlww628KLGcxPXFlOkkU/Q== -react-is@^16.13.1: - version "16.13.1" - resolved "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz" - integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== - -react-is@^16.6.0: - version "16.13.1" - resolved "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz" - integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== - -react-is@^16.7.0: - version "16.13.1" - resolved "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz" - integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== - -react-is@^16.8.4: - version "16.13.1" - resolved "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz" - integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== - -react-is@^17.0.1, react-is@^17.0.2, react-is@17.0.2: +react-is@17.0.2, react-is@^17.0.1, react-is@^17.0.2: version "17.0.2" resolved "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz" integrity sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w== -react-is@^18.0.0: - version "18.2.0" - resolved "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz" - integrity sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w== +react-is@^16.13.1, react-is@^16.6.0, react-is@^16.7.0, react-is@^16.8.4: + version "16.13.1" + resolved "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz" + integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== -react-is@^18.2.0: +react-is@^18.0.0, react-is@^18.2.0: version "18.2.0" resolved "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz" integrity sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w== @@ -10133,20 +10002,15 @@ safe-array-concat@^1.0.0: has-symbols "^1.0.3" isarray "^2.0.5" -safe-buffer@^5.1.0, safe-buffer@>=5.1.0, safe-buffer@~5.2.0, safe-buffer@5.2.1: - version "5.2.1" - resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz" - integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== - -safe-buffer@~5.1.0, safe-buffer@~5.1.1: +safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: version "5.1.2" resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz" integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== -safe-buffer@5.1.2: - version "5.1.2" - resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz" - integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== +safe-buffer@5.2.1, safe-buffer@>=5.1.0, safe-buffer@^5.1.0, safe-buffer@~5.2.0: + version "5.2.1" + resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz" + integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== safe-regex-test@^1.0.0: version "1.0.0" @@ -10195,6 +10059,15 @@ scheduler@^0.19.1: loose-envify "^1.1.0" object-assign "^4.1.1" +schema-utils@2.7.0: + version "2.7.0" + resolved "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.0.tgz" + integrity sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A== + dependencies: + "@types/json-schema" "^7.0.4" + ajv "^6.12.2" + ajv-keywords "^3.4.1" + schema-utils@^2.6.5: version "2.7.1" resolved "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz" @@ -10223,15 +10096,6 @@ schema-utils@^4.0.0: ajv-formats "^2.1.1" ajv-keywords "^5.1.0" -schema-utils@2.7.0: - version "2.7.0" - resolved "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.0.tgz" - integrity sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A== - dependencies: - "@types/json-schema" "^7.0.4" - ajv "^6.12.2" - ajv-keywords "^3.4.1" - select-hose@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz" @@ -10244,17 +10108,7 @@ selfsigned@^2.1.1: dependencies: node-forge "^1" -semver@^6.0.0: - version "6.3.1" - resolved "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz" - integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== - -semver@^6.3.0: - version "6.3.1" - resolved "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz" - integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== - -semver@^6.3.1: +semver@^6.0.0, semver@^6.3.0, semver@^6.3.1: version "6.3.1" resolved "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz" integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== @@ -10449,20 +10303,15 @@ source-map-support@^0.5.6, source-map-support@~0.5.20: buffer-from "^1.0.0" source-map "^0.6.0" -source-map@^0.5.7: - version "0.5.7" - resolved "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz" - integrity sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ== - -source-map@^0.6.0: +source-map@0.6.1, source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.0, source-map@~0.6.1: version "0.6.1" resolved "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz" integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== -source-map@^0.6.1, source-map@0.6.1: - version "0.6.1" - resolved "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz" - integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== +source-map@^0.5.7: + version "0.5.7" + resolved "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz" + integrity sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ== source-map@^0.7.3: version "0.7.4" @@ -10476,16 +10325,6 @@ source-map@^0.8.0-beta.0: dependencies: whatwg-url "^7.0.0" -source-map@~0.6.0: - version "0.6.1" - resolved "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz" - integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== - -source-map@~0.6.1: - version "0.6.1" - resolved "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz" - integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== - sourcemap-codec@^1.4.8: version "1.4.8" resolved "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz" @@ -10551,16 +10390,16 @@ state-toggle@^1.0.0: resolved "https://registry.npmjs.org/state-toggle/-/state-toggle-1.0.3.tgz" integrity sha512-d/5Z4/2iiCnHw6Xzghyhb+GcmF89bxwgXG60wjIiZaxnymbyOmI8Hk4VqHXiVVp6u2ysaskFfXg3ekCj4WNftQ== -"statuses@>= 1.4.0 < 2": - version "1.5.0" - resolved "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz" - integrity sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA== - statuses@2.0.1: version "2.0.1" resolved "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz" integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== +"statuses@>= 1.4.0 < 2": + version "1.5.0" + resolved "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz" + integrity sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA== + stop-iteration-iterator@^1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.0.0.tgz" @@ -10568,20 +10407,6 @@ stop-iteration-iterator@^1.0.0: dependencies: internal-slot "^1.0.4" -string_decoder@^1.1.1: - version "1.3.0" - resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz" - integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== - dependencies: - safe-buffer "~5.2.0" - -string_decoder@~1.1.1: - version "1.1.1" - resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz" - integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== - dependencies: - safe-buffer "~5.1.0" - string-length@^4.0.1: version "4.0.2" resolved "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz" @@ -10653,6 +10478,20 @@ string.prototype.trimstart@^1.0.6: define-properties "^1.1.4" es-abstract "^1.20.4" +string_decoder@^1.1.1: + version "1.3.0" + resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz" + integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== + dependencies: + safe-buffer "~5.2.0" + +string_decoder@~1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz" + integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== + dependencies: + safe-buffer "~5.1.0" + stringify-entities@^3.0.1: version "3.1.0" resolved "https://registry.npmjs.org/stringify-entities/-/stringify-entities-3.1.0.tgz" @@ -10778,14 +10617,7 @@ sucrase@^3.32.0: pirates "^4.0.1" ts-interface-checker "^0.1.9" -supports-color@^5.3.0: - version "5.5.0" - resolved "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz" - integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== - dependencies: - has-flag "^3.0.0" - -supports-color@^5.5.0: +supports-color@^5.3.0, supports-color@^5.5.0: version "5.5.0" resolved "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz" integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== @@ -11121,22 +10953,7 @@ tslib@^1.8.1, tslib@^1.9.3: resolved "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz" integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== -tslib@^2.0.0: - version "2.6.0" - resolved "https://registry.npmjs.org/tslib/-/tslib-2.6.0.tgz" - integrity sha512-7At1WUettjcSRHXCyYtTselblcHl9PJFFVKiCAy/bY97+BPZXSQ2wbq0P9s8tK2G7dFQfNnlJnPAiArVBVBsfA== - -tslib@^2.0.3: - version "2.6.0" - resolved "https://registry.npmjs.org/tslib/-/tslib-2.6.0.tgz" - integrity sha512-7At1WUettjcSRHXCyYtTselblcHl9PJFFVKiCAy/bY97+BPZXSQ2wbq0P9s8tK2G7dFQfNnlJnPAiArVBVBsfA== - -tslib@^2.1.0: - version "2.6.0" - resolved "https://registry.npmjs.org/tslib/-/tslib-2.6.0.tgz" - integrity sha512-7At1WUettjcSRHXCyYtTselblcHl9PJFFVKiCAy/bY97+BPZXSQ2wbq0P9s8tK2G7dFQfNnlJnPAiArVBVBsfA== - -tslib@^2.3.1: +tslib@^2.0.0, tslib@^2.0.3, tslib@^2.1.0, tslib@^2.3.1: version "2.6.0" resolved "https://registry.npmjs.org/tslib/-/tslib-2.6.0.tgz" integrity sha512-7At1WUettjcSRHXCyYtTselblcHl9PJFFVKiCAy/bY97+BPZXSQ2wbq0P9s8tK2G7dFQfNnlJnPAiArVBVBsfA== @@ -11418,7 +11235,7 @@ universalify@^2.0.0: resolved "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz" integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ== -unpipe@~1.0.0, unpipe@1.0.0: +unpipe@1.0.0, unpipe@~1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz" integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== @@ -11550,12 +11367,7 @@ vary@~1.1.2: resolved "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz" integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg== -vfile-location@^3.0.0: - version "3.2.0" - resolved "https://registry.npmjs.org/vfile-location/-/vfile-location-3.2.0.tgz" - integrity sha512-aLEIZKv/oxuCDZ8lkJGhuhztf/BW4M+iHdCwglA/eWc+vtuRFJj8EtgceYFX4LRjOhCAAiNHsKGssC6onJ+jbA== - -vfile-location@^3.2.0: +vfile-location@^3.0.0, vfile-location@^3.2.0: version "3.2.0" resolved "https://registry.npmjs.org/vfile-location/-/vfile-location-3.2.0.tgz" integrity sha512-aLEIZKv/oxuCDZ8lkJGhuhztf/BW4M+iHdCwglA/eWc+vtuRFJj8EtgceYFX4LRjOhCAAiNHsKGssC6onJ+jbA== @@ -11787,7 +11599,7 @@ webpack@^5.64.4: watchpack "^2.4.0" webpack-sources "^3.2.3" -websocket-driver@^0.7.4, websocket-driver@>=0.5.1: +websocket-driver@>=0.5.1, websocket-driver@^0.7.4: version "0.7.4" resolved "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz" integrity sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg== diff --git a/handlers/organizations.go b/handlers/organizations.go index 076d71c3d..2d366d5ab 100644 --- a/handlers/organizations.go +++ b/handlers/organizations.go @@ -12,6 +12,7 @@ import ( "github.com/rs/xid" "github.com/stakwork/sphinx-tribes/auth" "github.com/stakwork/sphinx-tribes/db" + "github.com/stakwork/sphinx-tribes/utils" ) func CreateOrEditOrganization(w http.ResponseWriter, r *http.Request) { @@ -334,6 +335,8 @@ func GetUserRoles(w http.ResponseWriter, r *http.Request) { func GetUserOrganizations(w http.ResponseWriter, r *http.Request) { ctx := r.Context() pubKeyFromAuth, _ := ctx.Value(auth.ContextKey).(string) + userIdParam := chi.URLParam(r, "userId") + userId, _ := utils.ConvertStringToUint(userIdParam) if pubKeyFromAuth == "" { fmt.Println("no pubkey from auth") @@ -341,12 +344,30 @@ func GetUserOrganizations(w http.ResponseWriter, r *http.Request) { return } + if userId == 0 { + fmt.Println("provide user id") + w.WriteHeader(http.StatusNotAcceptable) + return + } + + user := db.DB.GetPerson(userId) + // get the organizations created by the user, then get all the organizations // the user has been added to, loop through to get the organization - organizations := db.DB.GetUserCreatedOrganizations(pubKeyFromAuth) - assignedOrganizations := db.DB.GetUserAssignedOrganizations(pubKeyFromAuth) + organizations := db.DB.GetUserCreatedOrganizations(user.OwnerPubKey) + // add bounty count to the organization + for index, value := range organizations { + bountyCount := db.DB.GetOrganizationBountyCount(value.Uuid) + organizations[index].BountyCount = bountyCount + } + + assignedOrganizations := db.DB.GetUserAssignedOrganizations(user.OwnerPubKey) for _, value := range assignedOrganizations { organization := db.DB.GetOrganizationByUuid(value.OrgUuid) + + bountyCount := db.DB.GetOrganizationBountyCount(value.OrgUuid) + organization.BountyCount = bountyCount + organizations = append(organizations, organization) } diff --git a/routes/organizations.go b/routes/organizations.go index 9c0edffbe..2828d193d 100644 --- a/routes/organizations.go +++ b/routes/organizations.go @@ -28,7 +28,7 @@ func OrganizationRoutes() chi.Router { r.Get("/bounty/roles", handlers.GetBountyRoles) r.Get("/users/role/{uuid}/{user}", handlers.GetUserRoles) - r.Get("/user", handlers.GetUserOrganizations) + r.Get("/user/{userId}", handlers.GetUserOrganizations) r.Get("/budget/{uuid}", handlers.GetOrganizationBudget) r.Get("/budget/history/{uuid}", handlers.GetOrganizationBudgetHistory) r.Get("/payments/{uuid}", handlers.GetPaymentHistory) From 89fdc37e8ac831fdc28398fb1c5e9a9748967009 Mon Sep 17 00:00:00 2001 From: elraphty Date: Mon, 25 Sep 2023 21:43:59 +0100 Subject: [PATCH 2/4] changed Bounties to View tickets --- frontend/app/src/people/widgetViews/OrganizationView.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/app/src/people/widgetViews/OrganizationView.tsx b/frontend/app/src/people/widgetViews/OrganizationView.tsx index bebbaee1f..7db73dfb5 100644 --- a/frontend/app/src/people/widgetViews/OrganizationView.tsx +++ b/frontend/app/src/people/widgetViews/OrganizationView.tsx @@ -173,7 +173,7 @@ const Organizations = (props: { person: Person }) => { {(org.bounty_count && org.bount_count !== 0) && org.uuid && ( - Bounties + View tickets ) } From fbbfbb987439b218a3436689bea65851ff7e3831 Mon Sep 17 00:00:00 2001 From: elraphty Date: Tue, 26 Sep 2023 21:45:52 +0100 Subject: [PATCH 3/4] tested keysend payment wiht route hint --- db/structs.go | 3 +++ frontend/app/src/people/utils/AssignBounty.tsx | 1 + frontend/app/src/people/widgetViews/OrganizationView.tsx | 1 - .../summaries/wantedSummaries/CodingBounty.tsx | 8 +++++--- frontend/app/src/store/main.ts | 5 ++++- handlers/bounty.go | 9 ++++++++- handlers/invoiceCron.go | 7 ++++++- handlers/organizations.go | 3 +-- handlers/tribes.go | 2 ++ 9 files changed, 30 insertions(+), 9 deletions(-) diff --git a/db/structs.go b/db/structs.go index 6266fc41a..0324164e0 100644 --- a/db/structs.go +++ b/db/structs.go @@ -240,6 +240,7 @@ type InvoiceRequest struct { Commitment_fee uint `json:"commitment_fee,omitempty"` Bounty_expires string `json:"bounty_expires,omitempty"` Websocket_token string `json:"websocket_token,omitempty"` + Route_hint string `json:"route_hint,omitempty"` } type Invoice struct { @@ -262,6 +263,7 @@ type InvoiceStoreData struct { Assigned_hours uint `json:"assigned_hours,omitempty"` Commitment_fee uint `json:"commitment_fee,omitempty"` Bounty_expires string `json:"bounty_expires,omitempty"` + Route_hint string `json:"route_hint,omitempty"` } type InvoiceStatus struct { @@ -508,6 +510,7 @@ type PaymentHistoryData struct { type BountyPayRequest struct { ReceiverPubKey string `json:"receiver_pubkey"` Websocket_token string `json:"websocket_token,omitempty"` + RouteHint string `json:"route_hint,omitempty"` } func (Person) TableName() string { diff --git a/frontend/app/src/people/utils/AssignBounty.tsx b/frontend/app/src/people/utils/AssignBounty.tsx index cc6cc377f..13add2a70 100644 --- a/frontend/app/src/people/utils/AssignBounty.tsx +++ b/frontend/app/src/people/utils/AssignBounty.tsx @@ -42,6 +42,7 @@ export default function AssignBounty(props: ConnectCardProps) { memo: '', owner_pubkey: person?.owner_pubkey ?? '', user_pubkey: ui.meInfo?.owner_pubkey ?? '', + route_hint: person?.route_hint, created: created ? created.toString() : '', type: 'ASSIGN', assigned_hours: bountyHours, diff --git a/frontend/app/src/people/widgetViews/OrganizationView.tsx b/frontend/app/src/people/widgetViews/OrganizationView.tsx index 7db73dfb5..ada52f79b 100644 --- a/frontend/app/src/people/widgetViews/OrganizationView.tsx +++ b/frontend/app/src/people/widgetViews/OrganizationView.tsx @@ -32,7 +32,6 @@ const Container = styled.div` const OrganizationText = styled.p` font-size: 1rem; - text-transform: capitalize; font-weight: bold; margin-top: 15px; `; diff --git a/frontend/app/src/people/widgetViews/summaries/wantedSummaries/CodingBounty.tsx b/frontend/app/src/people/widgetViews/summaries/wantedSummaries/CodingBounty.tsx index ca5373f53..a00e80fc5 100644 --- a/frontend/app/src/people/widgetViews/summaries/wantedSummaries/CodingBounty.tsx +++ b/frontend/app/src/people/widgetViews/summaries/wantedSummaries/CodingBounty.tsx @@ -153,6 +153,7 @@ function MobileView(props: CodingBountiesProps) { memo: '', owner_pubkey: person.owner_pubkey, user_pubkey: assignee.owner_pubkey, + route_hint: assignee.route_hint, created: created ? created?.toString() : '', type: 'KEYSEND' }); @@ -177,7 +178,8 @@ function MobileView(props: CodingBountiesProps) { const body = { id: id || 0, websocket_token: ui.meInfo?.websocketToken || '', - receiver_pubkey: assignee.owner_pubkey + receiver_pubkey: assignee.owner_pubkey, + route_hint: assignee.route_hint }; await main.makeBountyPayment(body); @@ -256,8 +258,8 @@ function MobileView(props: CodingBountiesProps) { return (
{{ ...person }?.owner_alias && - ui.meInfo?.owner_alias && - { ...person }?.owner_alias === ui.meInfo?.owner_alias ? ( + ui.meInfo?.owner_alias && + { ...person }?.owner_alias === ui.meInfo?.owner_alias ? ( /* * creator view */ diff --git a/frontend/app/src/store/main.ts b/frontend/app/src/store/main.ts index 9c1df39d1..2e4605e33 100644 --- a/frontend/app/src/store/main.ts +++ b/frontend/app/src/store/main.ts @@ -1550,6 +1550,7 @@ export class MainStore { assigned_hours?: number; commitment_fee?: number; bounty_expires?: string; + route_hint?: string; }): Promise { try { const data = await api.post( @@ -1564,7 +1565,8 @@ export class MainStore { assigned_hours: body.assigned_hours, commitment_fee: body.commitment_fee, bounty_expires: body.bounty_expires, - websocket_token: uiStore.meInfo?.websocketToken + websocket_token: uiStore.meInfo?.websocketToken, + route_hint: body.route_hint }, { 'Content-Type': 'application/json' @@ -1880,6 +1882,7 @@ export class MainStore { id: number; receiver_pubkey: string; websocket_token: string; + route_hint: string; }): Promise { try { if (!uiStore.meInfo) return null; diff --git a/handlers/bounty.go b/handlers/bounty.go index b6d137496..96f97a417 100644 --- a/handlers/bounty.go +++ b/handlers/bounty.go @@ -311,7 +311,14 @@ func MakeBountyPayment(w http.ResponseWriter, r *http.Request) { } url := fmt.Sprintf("%s/payment", config.RelayUrl) - bodyData := fmt.Sprintf(`{"amount": %d, "destination_key": "%s"}`, amount, request.ReceiverPubKey) + + var bodyData string + if request.RouteHint != "" { + bodyData = fmt.Sprintf(`{"amount": %d, "destination_key": "%s", "route_hint": "%s"}`, amount, request.ReceiverPubKey, request.RouteHint) + } else { + bodyData = fmt.Sprintf(`{"amount": %d, "destination_key": "%s"}`, amount, request.ReceiverPubKey) + } + jsonBody := []byte(bodyData) client := &http.Client{} diff --git a/handlers/invoiceCron.go b/handlers/invoiceCron.go index 6ce27b847..416e3445f 100644 --- a/handlers/invoiceCron.go +++ b/handlers/invoiceCron.go @@ -71,7 +71,12 @@ func InitInvoiceCron() { if inv.Type == "KEYSEND" { url := fmt.Sprintf("%s/payment", config.RelayUrl) - bodyData := fmt.Sprintf(`{"amount": %s, "destination_key": "%s"}`, inv.Amount, inv.User_pubkey) + var bodyData string + if inv.Route_hint != "" { + bodyData = fmt.Sprintf(`{"amount": %s, "destination_key": "%s", "route_hint": "%s"}`, inv.Amount, inv.User_pubkey, inv.Route_hint) + } else { + bodyData = fmt.Sprintf(`{"amount": %s, "destination_key": "%s"}`, inv.Amount, inv.User_pubkey) + } jsonBody := []byte(bodyData) diff --git a/handlers/organizations.go b/handlers/organizations.go index 2d366d5ab..c8fa11d43 100644 --- a/handlers/organizations.go +++ b/handlers/organizations.go @@ -5,7 +5,6 @@ import ( "fmt" "io" "net/http" - "strings" "time" "github.com/go-chi/chi" @@ -53,7 +52,7 @@ func CreateOrEditOrganization(w http.ResponseWriter, r *http.Request) { return } - name := strings.ToLower(org.Name) + name := org.Name // check if the organization name already exists orgName := db.DB.GetOrganizationByName(name) diff --git a/handlers/tribes.go b/handlers/tribes.go index e44c12381..60bc26e8a 100644 --- a/handlers/tribes.go +++ b/handlers/tribes.go @@ -449,6 +449,7 @@ func GenerateInvoice(w http.ResponseWriter, r *http.Request) { commitmentFee := invoice.Commitment_fee bountyExpires := invoice.Bounty_expires websocketToken := invoice.Websocket_token + routeHint := invoice.Route_hint url := fmt.Sprintf("%s/invoices", config.RelayUrl) @@ -495,6 +496,7 @@ func GenerateInvoice(w http.ResponseWriter, r *http.Request) { Assigned_hours: assigedHours, Commitment_fee: commitmentFee, Bounty_expires: bountyExpires, + Route_hint: routeHint, } var invoiceList = append(invoiceCache, invoiceData) From 97e9784e0946c002c23a3dc99b77bd773fabbd81 Mon Sep 17 00:00:00 2001 From: elraphty Date: Tue, 26 Sep 2023 22:54:07 +0100 Subject: [PATCH 4/4] added buildkeysenddata util --- handlers/bounty.go | 7 +------ handlers/invoiceCron.go | 10 ++++------ utils/utils.go | 12 ++++++++++++ 3 files changed, 17 insertions(+), 12 deletions(-) diff --git a/handlers/bounty.go b/handlers/bounty.go index 96f97a417..22dcf48a5 100644 --- a/handlers/bounty.go +++ b/handlers/bounty.go @@ -312,12 +312,7 @@ func MakeBountyPayment(w http.ResponseWriter, r *http.Request) { url := fmt.Sprintf("%s/payment", config.RelayUrl) - var bodyData string - if request.RouteHint != "" { - bodyData = fmt.Sprintf(`{"amount": %d, "destination_key": "%s", "route_hint": "%s"}`, amount, request.ReceiverPubKey, request.RouteHint) - } else { - bodyData = fmt.Sprintf(`{"amount": %d, "destination_key": "%s"}`, amount, request.ReceiverPubKey) - } + bodyData := utils.BuildKeysendBodyData(amount, request.ReceiverPubKey, request.RouteHint) jsonBody := []byte(bodyData) diff --git a/handlers/invoiceCron.go b/handlers/invoiceCron.go index 416e3445f..e57e05bac 100644 --- a/handlers/invoiceCron.go +++ b/handlers/invoiceCron.go @@ -13,6 +13,7 @@ import ( "github.com/go-co-op/gocron" "github.com/stakwork/sphinx-tribes/config" "github.com/stakwork/sphinx-tribes/db" + "github.com/stakwork/sphinx-tribes/utils" ) func InitInvoiceCron() { @@ -71,12 +72,9 @@ func InitInvoiceCron() { if inv.Type == "KEYSEND" { url := fmt.Sprintf("%s/payment", config.RelayUrl) - var bodyData string - if inv.Route_hint != "" { - bodyData = fmt.Sprintf(`{"amount": %s, "destination_key": "%s", "route_hint": "%s"}`, inv.Amount, inv.User_pubkey, inv.Route_hint) - } else { - bodyData = fmt.Sprintf(`{"amount": %s, "destination_key": "%s"}`, inv.Amount, inv.User_pubkey) - } + amount, _ := utils.ConvertStringToUint(inv.Amount) + + bodyData := utils.BuildKeysendBodyData(amount, inv.User_pubkey, inv.Route_hint) jsonBody := []byte(bodyData) diff --git a/utils/utils.go b/utils/utils.go index 2cab47162..c131fb6a8 100644 --- a/utils/utils.go +++ b/utils/utils.go @@ -1,6 +1,7 @@ package utils import ( + "fmt" "net/http" "strconv" ) @@ -52,3 +53,14 @@ func BuildSearchQuery(key string, term string) (string, string) { arg2 := "%" + term + "%" return arg1, arg2 } + +func BuildKeysendBodyData(amount uint, receiver_pubkey string, route_hint string) string { + var bodyData string + if route_hint != "" { + bodyData = fmt.Sprintf(`{"amount": %d, "destination_key": "%s", "route_hint": "%s"}`, amount, receiver_pubkey, route_hint) + } else { + bodyData = fmt.Sprintf(`{"amount": %d, "destination_key": "%s"}`, amount, receiver_pubkey) + } + + return bodyData +}