@kartverket/backstage-plugin-risk-scorecard 5.2.1 → 5.2.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/utils/hooks.esm.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hooks.esm.js","sources":["../../src/utils/hooks.ts"],"sourcesContent":["import {\n configApiRef,\n fetchApiRef,\n githubAuthApiRef,\n googleAuthApiRef,\n identityApiRef,\n useApi,\n} from '@backstage/core-plugin-api';\nimport { useEntity } from '@backstage/plugin-catalog-react';\nimport { useCallback, useEffect, useRef, useState } from 'react';\nimport { URLS } from '../urls';\nimport {\n CreateRiScResultDTO,\n GcpCryptoKeyObject,\n ProcessRiScResultDTO,\n PublishRiScResultDTO,\n RiScContentResultDTO,\n SopsConfigDTO,\n profileInfoToDTOString,\n riScToDTOString,\n DeleteRiScResultDTO,\n} from './DTOs';\nimport { latestSupportedVersion } from './constants';\nimport {\n DefaultRiScTypeDescriptor,\n DifferenceDTO,\n GithubRepoInfo,\n RiSc,\n RiScWithMetadata,\n} from './types';\n\nexport function useGithubRepositoryInformation(): GithubRepoInfo {\n const [, org, repo] =\n useEntity().entity.metadata.annotations?.['backstage.io/view-url'].match(\n /github\\.com\\/([^\\/]+)\\/([^\\/]+)/,\n ) || [];\n\n return {\n owner: org,\n name: repo,\n };\n}\n\nexport function useAuthenticatedFetch() {\n const repoInformation = useGithubRepositoryInformation();\n const googleApi = useApi(googleAuthApiRef);\n const gitHubApi = useApi(githubAuthApiRef);\n const identityApi = useApi(identityApiRef);\n const { fetch } = useApi(fetchApiRef);\n const backendUrl = useApi(configApiRef).getString('backend.baseUrl');\n const riScUri = `${backendUrl}${URLS.backend.riScUri_temp}/${repoInformation.owner}/${repoInformation.name}`; // URLS.backend.riScUri\n\n const uriToFetchAllRiScs = `${riScUri}/${latestSupportedVersion}/all`; // URLS.backend.fetchAllRiScs\n const uriToFetchDefaultRiScDescriptors = `${backendUrl}${URLS.backend.fetchDefaultRiScTypeDescriptors}`;\n\n function uriToFetchDifference(id: string) {\n // URLS.backend.fetchDifference\n return `${riScUri}/${id}/difference`;\n }\n\n function uriToFetchRiSc(id: string) {\n // URLS.backend.fetchRiSc\n return `${riScUri}/${id}`;\n }\n\n function uriToDeleteRiSc(id: string) {\n // URLS.backend.deleteRiSc\n return `${riScUri}/${id}`;\n }\n\n function uriToPublishRiSc(id: string) {\n // URLS.backend.publishRiSc\n return `${riScUri}/publish/${id}`;\n }\n\n const configApi = useApi(configApiRef);\n\n function isDevelopment() {\n return configApi.getString('auth.environment') === 'development';\n }\n\n function fullyAuthenticatedFetch<T, K>(\n uri: string,\n method: 'GET' | 'POST' | 'PUT' | 'DELETE',\n onSuccess: (response: T) => void,\n onError: (error: K, rejectedLogin: boolean) => void,\n body?: string,\n ) {\n Promise.all([\n identityApi.getCredentials(),\n googleApi.getAccessToken([\n URLS.external.www_googleapis_com__cloudkms,\n URLS.external.www_googleapis_com__cloud_platform,\n URLS.external.www_googleapis_com__cloudplatformprojects_readonly,\n ]),\n gitHubApi.getAccessToken(['repo']),\n ])\n .then(([idToken, googleAccessToken, gitHubAccessToken]) => {\n fetch(uri, {\n method: method,\n headers: {\n Authorization: `Bearer ${idToken.token}`,\n 'GCP-Access-Token': googleAccessToken,\n 'GitHub-Access-Token': gitHubAccessToken,\n 'Content-Type': 'application/json',\n },\n body: body,\n }).then(res => {\n if (!res.ok) {\n return res\n .json()\n .then(json => json as K)\n .then(typedJson => onError(typedJson, false))\n .catch(error => onError(error, false));\n }\n return res\n .json()\n .then(json => json as T)\n .then(typedJson => onSuccess(typedJson));\n });\n })\n .catch(error => {\n if (error.name === 'RejectedError') {\n onError(error, true);\n } else {\n onError(error, false);\n }\n });\n }\n\n function googleAuthenticatedFetch<T, K>(\n uri: string,\n method: 'GET',\n onSuccess: (response: T) => void,\n onError: (error: K, rejectedLogin: boolean) => void,\n body?: string,\n ) {\n Promise.all([\n identityApi.getCredentials(),\n googleApi.getAccessToken([\n URLS.external.www_googleapis_com__cloudkms,\n URLS.external.www_googleapis_com__cloud_platform,\n URLS.external.www_googleapis_com__cloudplatformprojects_readonly,\n ]),\n ])\n .then(([idToken, googleAccessToken]) => {\n fetch(uri, {\n method: method,\n headers: {\n Authorization: `Bearer ${idToken.token}`,\n 'GCP-Access-Token': googleAccessToken,\n 'Content-Type': 'application/json',\n },\n body: body,\n }).then(res => {\n if (!res.ok) {\n return res\n .json()\n .then(json => json as K)\n .then(typedJson => onError(typedJson, false))\n .catch(error => onError(error, false));\n }\n return res\n .json()\n .then(json => json as T)\n .then(typedJson => onSuccess(typedJson));\n });\n })\n .catch(error => {\n if (error.name === 'RejectedError') {\n onError(error, true);\n } else {\n onError(error, false);\n }\n });\n }\n\n function fetchDifference(\n selectedRiSc: RiScWithMetadata,\n onSuccess: (response: DifferenceDTO) => void,\n onError?: (loginRejected: boolean) => void,\n ) {\n return identityApi.getProfileInfo().then(profile => {\n fullyAuthenticatedFetch<DifferenceDTO, DifferenceDTO>(\n uriToFetchDifference(selectedRiSc.id),\n 'POST',\n onSuccess,\n (_, rejectedLogin) => {\n if (onError) onError(rejectedLogin);\n },\n riScToDTOString(\n selectedRiSc.content,\n false,\n profile,\n selectedRiSc.sopsConfig,\n ),\n );\n });\n }\n\n function fetchRiScs(\n onSuccess: (response: RiScContentResultDTO[]) => void,\n onError?: (loginRejected: boolean) => void,\n ) {\n if (isDevelopment()) {\n fullyAuthenticatedFetch<RiScContentResultDTO[], RiScContentResultDTO[]>(\n uriToFetchAllRiScs,\n 'GET',\n onSuccess,\n (_, rejectedLogin) => {\n if (onError) onError(rejectedLogin);\n },\n );\n } else {\n googleAuthenticatedFetch<RiScContentResultDTO[], RiScContentResultDTO[]>(\n uriToFetchAllRiScs,\n 'GET',\n onSuccess,\n (_, rejectedLogin) => {\n if (onError) onError(rejectedLogin);\n },\n );\n }\n }\n\n function postFeedback(feedback: string): Promise<void> {\n return new Promise((resolve, reject) => {\n fullyAuthenticatedFetch<void, any>(\n `${riScUri}/feedback`,\n 'POST',\n () => resolve(),\n error => reject(error),\n feedback,\n );\n });\n }\n\n function fetchGcpCryptoKeys(\n onSuccess: (response: GcpCryptoKeyObject[]) => void,\n onError?: (error: GcpCryptoKeyObject[], loginRejected: boolean) => void,\n ) {\n googleAuthenticatedFetch<GcpCryptoKeyObject[], GcpCryptoKeyObject[]>(\n `${backendUrl}/api/proxy/risc-proxy/api/google/gcpCryptoKeys`, // URL\n 'GET',\n res => onSuccess(res),\n (error, rejectedLogin) => {\n if (onError) onError(error, rejectedLogin);\n },\n );\n }\n\n function publishRiScs(\n riScId: string,\n onSuccess?: (response: PublishRiScResultDTO) => void,\n onError?: (error: ProcessRiScResultDTO, loginRejected: boolean) => void,\n ) {\n return identityApi.getProfileInfo().then(profile =>\n fullyAuthenticatedFetch<PublishRiScResultDTO, ProcessRiScResultDTO>(\n uriToPublishRiSc(riScId),\n 'POST',\n res => {\n if (onSuccess) onSuccess(res);\n },\n (error, rejectedLogin) => {\n if (onError) onError(error, rejectedLogin);\n },\n profileInfoToDTOString(profile),\n ),\n );\n }\n\n function postRiScs(\n riSc: RiSc,\n generateDefault: boolean,\n sopsConfig: SopsConfigDTO,\n defaultRiScId: string | undefined,\n onSuccess?: (response: CreateRiScResultDTO) => void,\n onError?: (error: ProcessRiScResultDTO, loginRejected: boolean) => void,\n ) {\n return identityApi.getProfileInfo().then(profile =>\n fullyAuthenticatedFetch<CreateRiScResultDTO, ProcessRiScResultDTO>(\n `${riScUri}?generateDefault=${generateDefault}`,\n 'POST',\n res => {\n if (onSuccess) onSuccess(res);\n },\n (error, rejectedLogin) => {\n if (onError) onError(error, rejectedLogin);\n },\n riScToDTOString(riSc, true, profile, sopsConfig, defaultRiScId),\n ),\n );\n }\n\n function putRiScs(\n riSc: RiScWithMetadata,\n onSuccess?: (response: ProcessRiScResultDTO | PublishRiScResultDTO) => void,\n onError?: (error: ProcessRiScResultDTO, loginRejected: boolean) => void,\n ) {\n identityApi.getProfileInfo().then(profile =>\n fullyAuthenticatedFetch<\n ProcessRiScResultDTO | PublishRiScResultDTO,\n ProcessRiScResultDTO\n >(\n uriToFetchRiSc(riSc.id),\n 'PUT',\n res => {\n if (onSuccess) onSuccess(res);\n },\n (error, rejectedLogin) => {\n if (onError) onError(error, rejectedLogin);\n },\n riScToDTOString(\n riSc.content,\n riSc.isRequiresNewApproval!!,\n profile,\n riSc.sopsConfig,\n ),\n ),\n );\n }\n\n function deleteRiScs(\n riScId: string,\n onSuccess?: (response: DeleteRiScResultDTO) => void,\n onError?: (error: ProcessRiScResultDTO, loginRejected: boolean) => void,\n ) {\n fullyAuthenticatedFetch<DeleteRiScResultDTO, ProcessRiScResultDTO>(\n uriToDeleteRiSc(riScId),\n 'DELETE',\n res => {\n if (onSuccess) onSuccess(res);\n },\n (error, rejectedLogin) => {\n if (onError) onError(error, rejectedLogin);\n },\n );\n }\n\n function fetchDefaultRiScTypeDescriptors(\n onSuccess: (response: DefaultRiScTypeDescriptor[]) => void,\n ) {\n googleAuthenticatedFetch<DefaultRiScTypeDescriptor[], void>(\n uriToFetchDefaultRiScDescriptors,\n 'GET',\n res => onSuccess(res),\n () => {},\n );\n }\n return {\n fetchRiScs,\n fetchGcpCryptoKeys,\n postRiScs,\n putRiScs,\n deleteRiScs,\n publishRiScs,\n fetchDifference,\n postFeedback,\n fetchDefaultRiScTypeDescriptors,\n };\n}\n\nexport const useDebouncedValue = <T>(value: T, delay = 500) => {\n const [debouncedValue, setDebouncedValue] = useState<T>(value);\n\n useEffect(() => {\n const timeout = setTimeout(() => {\n setDebouncedValue(value);\n }, delay);\n\n return () => clearTimeout(timeout);\n }, [value, delay]);\n\n return debouncedValue;\n};\n\nexport function useDebounce<T>(\n value: T,\n delay: number,\n callback: (value: T) => void,\n) {\n const timeoutRef = useRef<NodeJS.Timeout | null>(null);\n const latestValueRef = useRef<T>(value);\n const latestCallbackRef = useRef<(v: T) => void>(callback);\n\n useEffect(() => {\n latestValueRef.current = value;\n }, [value]);\n\n useEffect(() => {\n latestCallbackRef.current = callback;\n }, [callback]);\n\n useEffect(() => {\n if (timeoutRef.current) {\n clearTimeout(timeoutRef.current);\n }\n\n timeoutRef.current = setTimeout(() => {\n latestCallbackRef.current(latestValueRef.current);\n timeoutRef.current = null;\n }, delay);\n\n return () => {\n if (timeoutRef.current) {\n clearTimeout(timeoutRef.current);\n }\n };\n }, [value, delay]);\n\n const flush = useCallback(() => {\n if (timeoutRef.current) {\n clearTimeout(timeoutRef.current);\n timeoutRef.current = null;\n }\n const v = latestValueRef.current;\n const hasValue = Array.isArray(v) ? v.length > 0 : v !== null;\n if (hasValue) {\n latestCallbackRef.current(v);\n }\n }, []);\n return { flush };\n}\n"],"names":[],"mappings":";;;;;;;AA+BO,SAAS,8BAAA,GAAiD;AAC/D,EAAA,MAAM,GAAG,GAAA,EAAK,IAAI,CAAA,GAChB,SAAA,EAAU,CAAE,MAAA,CAAO,QAAA,CAAS,WAAA,GAAc,uBAAuB,CAAA,CAAE,KAAA;AAAA,IACjE;AAAA,OACG,EAAC;AAER,EAAA,OAAO;AAAA,IACL,KAAA,EAAO,GAAA;AAAA,IACP,IAAA,EAAM;AAAA,GACR;AACF;AAEO,SAAS,qBAAA,GAAwB;AACtC,EAAA,MAAM,kBAAkB,8BAAA,EAA+B;AACvD,EAAA,MAAM,SAAA,GAAY,OAAO,gBAAgB,CAAA;AACzC,EAAA,MAAM,SAAA,GAAY,OAAO,gBAAgB,CAAA;AACzC,EAAA,MAAM,WAAA,GAAc,OAAO,cAAc,CAAA;AACzC,EAAA,MAAM,EAAE,KAAA,EAAM,GAAI,MAAA,CAAO,WAAW,CAAA;AACpC,EAAA,MAAM,UAAA,GAAa,MAAA,CAAO,YAAY,CAAA,CAAE,UAAU,iBAAiB,CAAA;AACnE,EAAA,MAAM,OAAA,GAAU,CAAA,EAAG,UAAU,CAAA,EAAG,IAAA,CAAK,OAAA,CAAQ,YAAY,CAAA,CAAA,EAAI,eAAA,CAAgB,KAAK,CAAA,CAAA,EAAI,eAAA,CAAgB,IAAI,CAAA,CAAA;AAE1G,EAAA,MAAM,kBAAA,GAAqB,CAAA,EAAG,OAAO,CAAA,CAAA,EAAI,sBAAsB,CAAA,IAAA,CAAA;AAC/D,EAAA,MAAM,mCAAmC,CAAA,EAAG,UAAU,CAAA,EAAG,IAAA,CAAK,QAAQ,+BAA+B,CAAA,CAAA;AAErG,EAAA,SAAS,qBAAqB,EAAA,EAAY;AAExC,IAAA,OAAO,CAAA,EAAG,OAAO,CAAA,CAAA,EAAI,EAAE,CAAA,WAAA,CAAA;AAAA,EACzB;AAEA,EAAA,SAAS,eAAe,EAAA,EAAY;AAElC,IAAA,OAAO,CAAA,EAAG,OAAO,CAAA,CAAA,EAAI,EAAE,CAAA,CAAA;AAAA,EACzB;AAEA,EAAA,SAAS,gBAAgB,EAAA,EAAY;AAEnC,IAAA,OAAO,CAAA,EAAG,OAAO,CAAA,CAAA,EAAI,EAAE,CAAA,CAAA;AAAA,EACzB;AAEA,EAAA,SAAS,iBAAiB,EAAA,EAAY;AAEpC,IAAA,OAAO,CAAA,EAAG,OAAO,CAAA,SAAA,EAAY,EAAE,CAAA,CAAA;AAAA,EACjC;AAEA,EAAA,MAAM,SAAA,GAAY,OAAO,YAAY,CAAA;AAErC,EAAA,SAAS,aAAA,GAAgB;AACvB,IAAA,OAAO,SAAA,CAAU,SAAA,CAAU,kBAAkB,CAAA,KAAM,aAAA;AAAA,EACrD;AAEA,EAAA,SAAS,uBAAA,CACP,GAAA,EACA,MAAA,EACA,SAAA,EACA,SACA,IAAA,EACA;AACA,IAAA,OAAA,CAAQ,GAAA,CAAI;AAAA,MACV,YAAY,cAAA,EAAe;AAAA,MAC3B,UAAU,cAAA,CAAe;AAAA,QACvB,KAAK,QAAA,CAAS,4BAAA;AAAA,QACd,KAAK,QAAA,CAAS,kCAAA;AAAA,QACd,KAAK,QAAA,CAAS;AAAA,OACf,CAAA;AAAA,MACD,SAAA,CAAU,cAAA,CAAe,CAAC,MAAM,CAAC;AAAA,KAClC,EACE,IAAA,CAAK,CAAC,CAAC,OAAA,EAAS,iBAAA,EAAmB,iBAAiB,CAAA,KAAM;AACzD,MAAA,KAAA,CAAM,GAAA,EAAK;AAAA,QACT,MAAA;AAAA,QACA,OAAA,EAAS;AAAA,UACP,aAAA,EAAe,CAAA,OAAA,EAAU,OAAA,CAAQ,KAAK,CAAA,CAAA;AAAA,UACtC,kBAAA,EAAoB,iBAAA;AAAA,UACpB,qBAAA,EAAuB,iBAAA;AAAA,UACvB,cAAA,EAAgB;AAAA,SAClB;AAAA,QACA;AAAA,OACD,CAAA,CAAE,IAAA,CAAK,CAAA,GAAA,KAAO;AACb,QAAA,IAAI,CAAC,IAAI,EAAA,EAAI;AACX,UAAA,OAAO,IACJ,IAAA,EAAK,CACL,KAAK,CAAA,IAAA,KAAQ,IAAS,EACtB,IAAA,CAAK,CAAA,SAAA,KAAa,QAAQ,SAAA,EAAW,KAAK,CAAC,CAAA,CAC3C,KAAA,CAAM,WAAS,OAAA,CAAQ,KAAA,EAAO,KAAK,CAAC,CAAA;AAAA,QACzC;AACA,QAAA,OAAO,GAAA,CACJ,IAAA,EAAK,CACL,IAAA,CAAK,CAAA,IAAA,KAAQ,IAAS,CAAA,CACtB,IAAA,CAAK,CAAA,SAAA,KAAa,SAAA,CAAU,SAAS,CAAC,CAAA;AAAA,MAC3C,CAAC,CAAA;AAAA,IACH,CAAC,CAAA,CACA,KAAA,CAAM,CAAA,KAAA,KAAS;AACd,MAAA,IAAI,KAAA,CAAM,SAAS,eAAA,EAAiB;AAClC,QAAA,OAAA,CAAQ,OAAO,IAAI,CAAA;AAAA,MACrB,CAAA,MAAO;AACL,QAAA,OAAA,CAAQ,OAAO,KAAK,CAAA;AAAA,MACtB;AAAA,IACF,CAAC,CAAA;AAAA,EACL;AAEA,EAAA,SAAS,wBAAA,CACP,GAAA,EACA,MAAA,EACA,SAAA,EACA,SACA,IAAA,EACA;AACA,IAAA,OAAA,CAAQ,GAAA,CAAI;AAAA,MACV,YAAY,cAAA,EAAe;AAAA,MAC3B,UAAU,cAAA,CAAe;AAAA,QACvB,KAAK,QAAA,CAAS,4BAAA;AAAA,QACd,KAAK,QAAA,CAAS,kCAAA;AAAA,QACd,KAAK,QAAA,CAAS;AAAA,OACf;AAAA,KACF,CAAA,CACE,IAAA,CAAK,CAAC,CAAC,OAAA,EAAS,iBAAiB,CAAA,KAAM;AACtC,MAAA,KAAA,CAAM,GAAA,EAAK;AAAA,QACT,MAAA;AAAA,QACA,OAAA,EAAS;AAAA,UACP,aAAA,EAAe,CAAA,OAAA,EAAU,OAAA,CAAQ,KAAK,CAAA,CAAA;AAAA,UACtC,kBAAA,EAAoB,iBAAA;AAAA,UACpB,cAAA,EAAgB;AAAA,SAClB;AAAA,QACA;AAAA,OACD,CAAA,CAAE,IAAA,CAAK,CAAA,GAAA,KAAO;AACb,QAAA,IAAI,CAAC,IAAI,EAAA,EAAI;AACX,UAAA,OAAO,IACJ,IAAA,EAAK,CACL,KAAK,CAAA,IAAA,KAAQ,IAAS,EACtB,IAAA,CAAK,CAAA,SAAA,KAAa,QAAQ,SAAA,EAAW,KAAK,CAAC,CAAA,CAC3C,KAAA,CAAM,WAAS,OAAA,CAAQ,KAAA,EAAO,KAAK,CAAC,CAAA;AAAA,QACzC;AACA,QAAA,OAAO,GAAA,CACJ,IAAA,EAAK,CACL,IAAA,CAAK,CAAA,IAAA,KAAQ,IAAS,CAAA,CACtB,IAAA,CAAK,CAAA,SAAA,KAAa,SAAA,CAAU,SAAS,CAAC,CAAA;AAAA,MAC3C,CAAC,CAAA;AAAA,IACH,CAAC,CAAA,CACA,KAAA,CAAM,CAAA,KAAA,KAAS;AACd,MAAA,IAAI,KAAA,CAAM,SAAS,eAAA,EAAiB;AAClC,QAAA,OAAA,CAAQ,OAAO,IAAI,CAAA;AAAA,MACrB,CAAA,MAAO;AACL,QAAA,OAAA,CAAQ,OAAO,KAAK,CAAA;AAAA,MACtB;AAAA,IACF,CAAC,CAAA;AAAA,EACL;AAEA,EAAA,SAAS,eAAA,CACP,YAAA,EACA,SAAA,EACA,OAAA,EACA;AACA,IAAA,OAAO,WAAA,CAAY,cAAA,EAAe,CAAE,IAAA,CAAK,CAAA,OAAA,KAAW;AAClD,MAAA,uBAAA;AAAA,QACE,oBAAA,CAAqB,aAAa,EAAE,CAAA;AAAA,QACpC,MAAA;AAAA,QACA,SAAA;AAAA,QACA,CAAC,GAAG,aAAA,KAAkB;AACpB,UAAA,IAAI,OAAA,UAAiB,aAAa,CAAA;AAAA,QACpC,CAAA;AAAA,QACA,eAAA;AAAA,UACE,YAAA,CAAa,OAAA;AAAA,UACb,KAAA;AAAA,UACA,OAAA;AAAA,UACA,YAAA,CAAa;AAAA;AACf,OACF;AAAA,IACF,CAAC,CAAA;AAAA,EACH;AAEA,EAAA,SAAS,UAAA,CACP,WACA,OAAA,EACA;AACA,IAAA,IAAI,eAAc,EAAG;AACnB,MAAA,uBAAA;AAAA,QACE,kBAAA;AAAA,QACA,KAAA;AAAA,QACA,SAAA;AAAA,QACA,CAAC,GAAG,aAAA,KAAkB;AACpB,UAAA,IAAI,OAAA,UAAiB,aAAa,CAAA;AAAA,QACpC;AAAA,OACF;AAAA,IACF,CAAA,MAAO;AACL,MAAA,wBAAA;AAAA,QACE,kBAAA;AAAA,QACA,KAAA;AAAA,QACA,SAAA;AAAA,QACA,CAAC,GAAG,aAAA,KAAkB;AACpB,UAAA,IAAI,OAAA,UAAiB,aAAa,CAAA;AAAA,QACpC;AAAA,OACF;AAAA,IACF;AAAA,EACF;AAEA,EAAA,SAAS,aAAa,QAAA,EAAiC;AACrD,IAAA,OAAO,IAAI,OAAA,CAAQ,CAAC,OAAA,EAAS,MAAA,KAAW;AACtC,MAAA,uBAAA;AAAA,QACE,GAAG,OAAO,CAAA,SAAA,CAAA;AAAA,QACV,MAAA;AAAA,QACA,MAAM,OAAA,EAAQ;AAAA,QACd,CAAA,KAAA,KAAS,OAAO,KAAK,CAAA;AAAA,QACrB;AAAA,OACF;AAAA,IACF,CAAC,CAAA;AAAA,EACH;AAEA,EAAA,SAAS,kBAAA,CACP,WACA,OAAA,EACA;AACA,IAAA,wBAAA;AAAA,MACE,GAAG,UAAU,CAAA,8CAAA,CAAA;AAAA;AAAA,MACb,KAAA;AAAA,MACA,CAAA,GAAA,KAAO,UAAU,GAAG,CAAA;AAAA,MACpB,CAAC,OAAO,aAAA,KAAkB;AACxB,QAAA,IAAI,OAAA,EAAS,OAAA,CAAQ,KAAA,EAAO,aAAa,CAAA;AAAA,MAC3C;AAAA,KACF;AAAA,EACF;AAEA,EAAA,SAAS,YAAA,CACP,MAAA,EACA,SAAA,EACA,OAAA,EACA;AACA,IAAA,OAAO,WAAA,CAAY,gBAAe,CAAE,IAAA;AAAA,MAAK,CAAA,OAAA,KACvC,uBAAA;AAAA,QACE,iBAAiB,MAAM,CAAA;AAAA,QACvB,MAAA;AAAA,QACA,CAAA,GAAA,KAAO;AACL,UAAA,IAAI,SAAA,YAAqB,GAAG,CAAA;AAAA,QAC9B,CAAA;AAAA,QACA,CAAC,OAAO,aAAA,KAAkB;AACxB,UAAA,IAAI,OAAA,EAAS,OAAA,CAAQ,KAAA,EAAO,aAAa,CAAA;AAAA,QAC3C,CAAA;AAAA,QACA,uBAAuB,OAAO;AAAA;AAChC,KACF;AAAA,EACF;AAEA,EAAA,SAAS,UACP,IAAA,EACA,eAAA,EACA,UAAA,EACA,aAAA,EACA,WACA,OAAA,EACA;AACA,IAAA,OAAO,WAAA,CAAY,gBAAe,CAAE,IAAA;AAAA,MAAK,CAAA,OAAA,KACvC,uBAAA;AAAA,QACE,CAAA,EAAG,OAAO,CAAA,iBAAA,EAAoB,eAAe,CAAA,CAAA;AAAA,QAC7C,MAAA;AAAA,QACA,CAAA,GAAA,KAAO;AACL,UAAA,IAAI,SAAA,YAAqB,GAAG,CAAA;AAAA,QAC9B,CAAA;AAAA,QACA,CAAC,OAAO,aAAA,KAAkB;AACxB,UAAA,IAAI,OAAA,EAAS,OAAA,CAAQ,KAAA,EAAO,aAAa,CAAA;AAAA,QAC3C,CAAA;AAAA,QACA,eAAA,CAAgB,IAAA,EAAM,IAAA,EAAM,OAAA,EAAS,YAAY,aAAa;AAAA;AAChE,KACF;AAAA,EACF;AAEA,EAAA,SAAS,QAAA,CACP,IAAA,EACA,SAAA,EACA,OAAA,EACA;AACA,IAAA,WAAA,CAAY,gBAAe,CAAE,IAAA;AAAA,MAAK,CAAA,OAAA,KAChC,uBAAA;AAAA,QAIE,cAAA,CAAe,KAAK,EAAE,CAAA;AAAA,QACtB,KAAA;AAAA,QACA,CAAA,GAAA,KAAO;AACL,UAAA,IAAI,SAAA,YAAqB,GAAG,CAAA;AAAA,QAC9B,CAAA;AAAA,QACA,CAAC,OAAO,aAAA,KAAkB;AACxB,UAAA,IAAI,OAAA,EAAS,OAAA,CAAQ,KAAA,EAAO,aAAa,CAAA;AAAA,QAC3C,CAAA;AAAA,QACA,eAAA;AAAA,UACE,IAAA,CAAK,OAAA;AAAA,UACL,IAAA,CAAK,qBAAA;AAAA,UACL,OAAA;AAAA,UACA,IAAA,CAAK;AAAA;AACP;AACF,KACF;AAAA,EACF;AAEA,EAAA,SAAS,WAAA,CACP,MAAA,EACA,SAAA,EACA,OAAA,EACA;AACA,IAAA,uBAAA;AAAA,MACE,gBAAgB,MAAM,CAAA;AAAA,MACtB,QAAA;AAAA,MACA,CAAA,GAAA,KAAO;AACL,QAAA,IAAI,SAAA,YAAqB,GAAG,CAAA;AAAA,MAC9B,CAAA;AAAA,MACA,CAAC,OAAO,aAAA,KAAkB;AACxB,QAAA,IAAI,OAAA,EAAS,OAAA,CAAQ,KAAA,EAAO,aAAa,CAAA;AAAA,MAC3C;AAAA,KACF;AAAA,EACF;AAEA,EAAA,SAAS,gCACP,SAAA,EACA;AACA,IAAA,wBAAA;AAAA,MACE,gCAAA;AAAA,MACA,KAAA;AAAA,MACA,CAAA,GAAA,KAAO,UAAU,GAAG,CAAA;AAAA,MACpB,MAAM;AAAA,MAAC;AAAA,KACT;AAAA,EACF;AACA,EAAA,OAAO;AAAA,IACL,UAAA;AAAA,IACA,kBAAA;AAAA,IACA,SAAA;AAAA,IACA,QAAA;AAAA,IACA,WAAA;AAAA,IACA,YAAA;AAAA,IACA,eAAA;AAAA,IACA,YAAA;AAAA,IACA;AAAA,GACF;AACF;AAEO,MAAM,iBAAA,GAAoB,CAAI,KAAA,EAAU,KAAA,GAAQ,GAAA,KAAQ;AAC7D,EAAA,MAAM,CAAC,cAAA,EAAgB,iBAAiB,CAAA,GAAI,SAAY,KAAK,CAAA;AAE7D,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,MAAM,OAAA,GAAU,WAAW,MAAM;AAC/B,MAAA,iBAAA,CAAkB,KAAK,CAAA;AAAA,IACzB,GAAG,KAAK,CAAA;AAER,IAAA,OAAO,MAAM,aAAa,OAAO,CAAA;AAAA,EACnC,CAAA,EAAG,CAAC,KAAA,EAAO,KAAK,CAAC,CAAA;AAEjB,EAAA,OAAO,cAAA;AACT;AAEO,SAAS,WAAA,CACd,KAAA,EACA,KAAA,EACA,QAAA,EACA;AACA,EAAA,MAAM,UAAA,GAAa,OAA8B,IAAI,CAAA;AACrD,EAAA,MAAM,cAAA,GAAiB,OAAU,KAAK,CAAA;AACtC,EAAA,MAAM,iBAAA,GAAoB,OAAuB,QAAQ,CAAA;AAEzD,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,cAAA,CAAe,OAAA,GAAU,KAAA;AAAA,EAC3B,CAAA,EAAG,CAAC,KAAK,CAAC,CAAA;AAEV,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,iBAAA,CAAkB,OAAA,GAAU,QAAA;AAAA,EAC9B,CAAA,EAAG,CAAC,QAAQ,CAAC,CAAA;AAEb,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,WAAW,OAAA,EAAS;AACtB,MAAA,YAAA,CAAa,WAAW,OAAO,CAAA;AAAA,IACjC;AAEA,IAAA,UAAA,CAAW,OAAA,GAAU,WAAW,MAAM;AACpC,MAAA,iBAAA,CAAkB,OAAA,CAAQ,eAAe,OAAO,CAAA;AAChD,MAAA,UAAA,CAAW,OAAA,GAAU,IAAA;AAAA,IACvB,GAAG,KAAK,CAAA;AAER,IAAA,OAAO,MAAM;AACX,MAAA,IAAI,WAAW,OAAA,EAAS;AACtB,QAAA,YAAA,CAAa,WAAW,OAAO,CAAA;AAAA,MACjC;AAAA,IACF,CAAA;AAAA,EACF,CAAA,EAAG,CAAC,KAAA,EAAO,KAAK,CAAC,CAAA;AAEjB,EAAA,MAAM,KAAA,GAAQ,YAAY,MAAM;AAC9B,IAAA,IAAI,WAAW,OAAA,EAAS;AACtB,MAAA,YAAA,CAAa,WAAW,OAAO,CAAA;AAC/B,MAAA,UAAA,CAAW,OAAA,GAAU,IAAA;AAAA,IACvB;AACA,IAAA,MAAM,IAAI,cAAA,CAAe,OAAA;AACzB,IAAA,MAAM,QAAA,GAAW,MAAM,OAAA,CAAQ,CAAC,IAAI,CAAA,CAAE,MAAA,GAAS,IAAI,CAAA,KAAM,IAAA;AACzD,IAAA,IAAI,QAAA,EAAU;AACZ,MAAA,iBAAA,CAAkB,QAAQ,CAAC,CAAA;AAAA,IAC7B;AAAA,EACF,CAAA,EAAG,EAAE,CAAA;AACL,EAAA,OAAO,EAAE,KAAA,EAAM;AACjB;;;;"}
|
|
1
|
+
{"version":3,"file":"hooks.esm.js","sources":["../../src/utils/hooks.ts"],"sourcesContent":["import {\n configApiRef,\n fetchApiRef,\n githubAuthApiRef,\n googleAuthApiRef,\n identityApiRef,\n useApi,\n} from '@backstage/core-plugin-api';\nimport { useEntity } from '@backstage/plugin-catalog-react';\nimport { useCallback, useEffect, useRef, useState } from 'react';\nimport { URLS } from '../urls';\nimport {\n CreateRiScResultDTO,\n GcpCryptoKeyObject,\n ProcessRiScResultDTO,\n PublishRiScResultDTO,\n RiScContentResultDTO,\n SopsConfigDTO,\n profileInfoToDTOString,\n riScToDTOString,\n DeleteRiScResultDTO,\n} from './DTOs';\nimport { latestSupportedVersion } from './constants';\nimport {\n DefaultRiScTypeDescriptor,\n DifferenceDTO,\n GithubRepoInfo,\n RiSc,\n RiScWithMetadata,\n} from './types';\n\nexport function useGithubRepositoryInformation(): GithubRepoInfo {\n const [, org, repo] =\n useEntity().entity.metadata.annotations?.['backstage.io/view-url'].match(\n /github\\.com\\/([^\\/]+)\\/([^\\/]+)/,\n ) || [];\n\n return {\n owner: org,\n name: repo,\n };\n}\n\nexport function useAuthenticatedFetch() {\n const repoInformation = useGithubRepositoryInformation();\n const googleApi = useApi(googleAuthApiRef);\n const gitHubApi = useApi(githubAuthApiRef);\n const identityApi = useApi(identityApiRef);\n const { fetch } = useApi(fetchApiRef);\n const backendUrl = useApi(configApiRef).getString('backend.baseUrl');\n const riScUri = `${backendUrl}${URLS.backend.riScUri_temp}/${repoInformation.owner}/${repoInformation.name}`; // URLS.backend.riScUri\n\n const uriToFetchAllRiScs = `${riScUri}/${latestSupportedVersion}/all`; // URLS.backend.fetchAllRiScs\n const uriToFetchDefaultRiScDescriptors = `${backendUrl}${URLS.backend.fetchDefaultRiScTypeDescriptors}`;\n\n function uriToFetchDifference(id: string) {\n // URLS.backend.fetchDifference\n return `${riScUri}/${id}/difference`;\n }\n\n function uriToFetchRiSc(id: string) {\n // URLS.backend.fetchRiSc\n return `${riScUri}/${id}`;\n }\n\n function uriToDeleteRiSc(id: string) {\n // URLS.backend.deleteRiSc\n return `${riScUri}/${id}`;\n }\n\n function uriToPublishRiSc(id: string) {\n // URLS.backend.publishRiSc\n return `${riScUri}/publish/${id}`;\n }\n\n const configApi = useApi(configApiRef);\n\n function isDevelopment() {\n return configApi.getString('auth.environment') === 'development';\n }\n\n function fullyAuthenticatedFetch<T, K>(\n uri: string,\n method: 'GET' | 'POST' | 'PUT' | 'DELETE',\n onSuccess: (response: T) => void,\n onError: (error: K, rejectedLogin: boolean) => void,\n body?: string,\n ) {\n Promise.all([\n identityApi.getCredentials(),\n googleApi.getAccessToken([\n URLS.external.www_googleapis_com__cloudkms,\n URLS.external.www_googleapis_com__cloud_platform,\n URLS.external.www_googleapis_com__cloudplatformprojects_readonly,\n ]),\n gitHubApi.getAccessToken(['repo']),\n ])\n .then(([idToken, googleAccessToken, gitHubAccessToken]) => {\n fetch(uri, {\n method: method,\n headers: {\n Authorization: `Bearer ${idToken.token}`,\n 'GCP-Access-Token': googleAccessToken,\n 'GitHub-Access-Token': gitHubAccessToken,\n 'Content-Type': 'application/json',\n },\n body: body,\n }).then(res => {\n if (!res.ok) {\n return res\n .json()\n .then(json => json as K)\n .then(typedJson => onError(typedJson, false))\n .catch(error => onError(error, false));\n }\n return res\n .json()\n .then(json => json as T)\n .then(typedJson => onSuccess(typedJson));\n });\n })\n .catch(error => {\n if (error.name === 'RejectedError') {\n onError(error, true);\n } else {\n onError(error, false);\n }\n });\n }\n\n function googleAuthenticatedFetch<T, K>(\n uri: string,\n method: 'GET',\n onSuccess: (response: T) => void,\n onError: (error: K, rejectedLogin: boolean) => void,\n body?: string,\n ) {\n Promise.all([\n identityApi.getCredentials(),\n googleApi.getAccessToken([\n URLS.external.www_googleapis_com__cloudkms,\n URLS.external.www_googleapis_com__cloud_platform,\n URLS.external.www_googleapis_com__cloudplatformprojects_readonly,\n ]),\n ])\n .then(([idToken, googleAccessToken]) => {\n fetch(uri, {\n method: method,\n headers: {\n Authorization: `Bearer ${idToken.token}`,\n 'GCP-Access-Token': googleAccessToken,\n 'Content-Type': 'application/json',\n },\n body: body,\n }).then(res => {\n if (!res.ok) {\n return res\n .json()\n .then(json => json as K)\n .then(typedJson => onError(typedJson, false))\n .catch(error => onError(error, false));\n }\n return res\n .json()\n .then(json => json as T)\n .then(typedJson => onSuccess(typedJson));\n });\n })\n .catch(error => {\n if (error.name === 'RejectedError') {\n onError(error, true);\n } else {\n onError(error, false);\n }\n });\n }\n\n function fetchDifference(\n selectedRiSc: RiScWithMetadata,\n onSuccess: (response: DifferenceDTO) => void,\n onError?: (loginRejected: boolean) => void,\n ) {\n return identityApi.getProfileInfo().then(profile => {\n fullyAuthenticatedFetch<DifferenceDTO, DifferenceDTO>(\n uriToFetchDifference(selectedRiSc.id),\n 'POST',\n onSuccess,\n (_, rejectedLogin) => {\n if (onError) onError(rejectedLogin);\n },\n riScToDTOString(\n selectedRiSc.content,\n false,\n profile,\n selectedRiSc.sopsConfig,\n ),\n );\n });\n }\n\n function fetchRiScs(\n onSuccess: (response: RiScContentResultDTO[]) => void,\n onError?: (loginRejected: boolean) => void,\n ) {\n if (isDevelopment()) {\n fullyAuthenticatedFetch<RiScContentResultDTO[], RiScContentResultDTO[]>(\n uriToFetchAllRiScs,\n 'GET',\n onSuccess,\n (_, rejectedLogin) => {\n if (onError) onError(rejectedLogin);\n },\n );\n } else {\n googleAuthenticatedFetch<RiScContentResultDTO[], RiScContentResultDTO[]>(\n uriToFetchAllRiScs,\n 'GET',\n onSuccess,\n (_, rejectedLogin) => {\n if (onError) onError(rejectedLogin);\n },\n );\n }\n }\n\n function postFeedback(feedback: string): Promise<void> {\n return new Promise((resolve, reject) => {\n fullyAuthenticatedFetch<void, any>(\n `${riScUri}/feedback`,\n 'POST',\n () => resolve(),\n error => reject(error),\n feedback,\n );\n });\n }\n\n function fetchGcpCryptoKeys(\n onSuccess: (response: GcpCryptoKeyObject[]) => void,\n onError?: (error: GcpCryptoKeyObject[], loginRejected: boolean) => void,\n ) {\n googleAuthenticatedFetch<GcpCryptoKeyObject[], GcpCryptoKeyObject[]>(\n `${backendUrl}/api/proxy/risc-proxy/api/google/gcpCryptoKeys`, // URL\n 'GET',\n res => onSuccess(res),\n (error, rejectedLogin) => {\n if (onError) onError(error, rejectedLogin);\n },\n );\n }\n\n function publishRiScs(\n riScId: string,\n onSuccess?: (response: PublishRiScResultDTO) => void,\n onError?: (error: ProcessRiScResultDTO, loginRejected: boolean) => void,\n ) {\n return identityApi.getProfileInfo().then(profile =>\n fullyAuthenticatedFetch<PublishRiScResultDTO, ProcessRiScResultDTO>(\n uriToPublishRiSc(riScId),\n 'POST',\n res => {\n if (onSuccess) onSuccess(res);\n },\n (error, rejectedLogin) => {\n if (onError) onError(error, rejectedLogin);\n },\n profileInfoToDTOString(profile),\n ),\n );\n }\n\n function postRiScs(\n riSc: RiSc,\n generateDefault: boolean,\n sopsConfig: SopsConfigDTO,\n defaultRiScId: string | undefined,\n onSuccess?: (response: CreateRiScResultDTO) => void,\n onError?: (error: ProcessRiScResultDTO, loginRejected: boolean) => void,\n ) {\n return identityApi.getProfileInfo().then(profile =>\n fullyAuthenticatedFetch<CreateRiScResultDTO, ProcessRiScResultDTO>(\n `${riScUri}?generateDefault=${generateDefault}`,\n 'POST',\n res => {\n if (onSuccess) onSuccess(res);\n },\n (error, rejectedLogin) => {\n if (onError) onError(error, rejectedLogin);\n },\n riScToDTOString(riSc, true, profile, sopsConfig, defaultRiScId),\n ),\n );\n }\n\n function putRiScs(\n riSc: RiScWithMetadata,\n onSuccess?: (response: ProcessRiScResultDTO | PublishRiScResultDTO) => void,\n onError?: (error: ProcessRiScResultDTO, loginRejected: boolean) => void,\n ) {\n identityApi.getProfileInfo().then(profile =>\n fullyAuthenticatedFetch<\n ProcessRiScResultDTO | PublishRiScResultDTO,\n ProcessRiScResultDTO\n >(\n uriToFetchRiSc(riSc.id),\n 'PUT',\n res => {\n if (onSuccess) onSuccess(res);\n },\n (error, rejectedLogin) => {\n if (onError) onError(error, rejectedLogin);\n },\n riScToDTOString(\n riSc.content,\n riSc.isRequiresNewApproval!!,\n profile,\n riSc.sopsConfig,\n ),\n ),\n );\n }\n\n function deleteRiScs(\n riScId: string,\n onSuccess?: (response: DeleteRiScResultDTO) => void,\n onError?: (error: ProcessRiScResultDTO, loginRejected: boolean) => void,\n ) {\n fullyAuthenticatedFetch<DeleteRiScResultDTO, ProcessRiScResultDTO>(\n uriToDeleteRiSc(riScId),\n 'DELETE',\n res => {\n if (onSuccess) onSuccess(res);\n },\n (error, rejectedLogin) => {\n if (onError) onError(error, rejectedLogin);\n },\n );\n }\n\n function fetchDefaultRiScTypeDescriptors(\n onSuccess: (response: DefaultRiScTypeDescriptor[]) => void,\n ) {\n fullyAuthenticatedFetch<DefaultRiScTypeDescriptor[], void>(\n uriToFetchDefaultRiScDescriptors,\n 'GET',\n res => onSuccess(res),\n () => {},\n );\n }\n return {\n fetchRiScs,\n fetchGcpCryptoKeys,\n postRiScs,\n putRiScs,\n deleteRiScs,\n publishRiScs,\n fetchDifference,\n postFeedback,\n fetchDefaultRiScTypeDescriptors,\n };\n}\n\nexport const useDebouncedValue = <T>(value: T, delay = 500) => {\n const [debouncedValue, setDebouncedValue] = useState<T>(value);\n\n useEffect(() => {\n const timeout = setTimeout(() => {\n setDebouncedValue(value);\n }, delay);\n\n return () => clearTimeout(timeout);\n }, [value, delay]);\n\n return debouncedValue;\n};\n\nexport function useDebounce<T>(\n value: T,\n delay: number,\n callback: (value: T) => void,\n) {\n const timeoutRef = useRef<NodeJS.Timeout | null>(null);\n const latestValueRef = useRef<T>(value);\n const latestCallbackRef = useRef<(v: T) => void>(callback);\n\n useEffect(() => {\n latestValueRef.current = value;\n }, [value]);\n\n useEffect(() => {\n latestCallbackRef.current = callback;\n }, [callback]);\n\n useEffect(() => {\n if (timeoutRef.current) {\n clearTimeout(timeoutRef.current);\n }\n\n timeoutRef.current = setTimeout(() => {\n latestCallbackRef.current(latestValueRef.current);\n timeoutRef.current = null;\n }, delay);\n\n return () => {\n if (timeoutRef.current) {\n clearTimeout(timeoutRef.current);\n }\n };\n }, [value, delay]);\n\n const flush = useCallback(() => {\n if (timeoutRef.current) {\n clearTimeout(timeoutRef.current);\n timeoutRef.current = null;\n }\n const v = latestValueRef.current;\n const hasValue = Array.isArray(v) ? v.length > 0 : v !== null;\n if (hasValue) {\n latestCallbackRef.current(v);\n }\n }, []);\n return { flush };\n}\n"],"names":[],"mappings":";;;;;;;AA+BO,SAAS,8BAAA,GAAiD;AAC/D,EAAA,MAAM,GAAG,GAAA,EAAK,IAAI,CAAA,GAChB,SAAA,EAAU,CAAE,MAAA,CAAO,QAAA,CAAS,WAAA,GAAc,uBAAuB,CAAA,CAAE,KAAA;AAAA,IACjE;AAAA,OACG,EAAC;AAER,EAAA,OAAO;AAAA,IACL,KAAA,EAAO,GAAA;AAAA,IACP,IAAA,EAAM;AAAA,GACR;AACF;AAEO,SAAS,qBAAA,GAAwB;AACtC,EAAA,MAAM,kBAAkB,8BAAA,EAA+B;AACvD,EAAA,MAAM,SAAA,GAAY,OAAO,gBAAgB,CAAA;AACzC,EAAA,MAAM,SAAA,GAAY,OAAO,gBAAgB,CAAA;AACzC,EAAA,MAAM,WAAA,GAAc,OAAO,cAAc,CAAA;AACzC,EAAA,MAAM,EAAE,KAAA,EAAM,GAAI,MAAA,CAAO,WAAW,CAAA;AACpC,EAAA,MAAM,UAAA,GAAa,MAAA,CAAO,YAAY,CAAA,CAAE,UAAU,iBAAiB,CAAA;AACnE,EAAA,MAAM,OAAA,GAAU,CAAA,EAAG,UAAU,CAAA,EAAG,IAAA,CAAK,OAAA,CAAQ,YAAY,CAAA,CAAA,EAAI,eAAA,CAAgB,KAAK,CAAA,CAAA,EAAI,eAAA,CAAgB,IAAI,CAAA,CAAA;AAE1G,EAAA,MAAM,kBAAA,GAAqB,CAAA,EAAG,OAAO,CAAA,CAAA,EAAI,sBAAsB,CAAA,IAAA,CAAA;AAC/D,EAAA,MAAM,mCAAmC,CAAA,EAAG,UAAU,CAAA,EAAG,IAAA,CAAK,QAAQ,+BAA+B,CAAA,CAAA;AAErG,EAAA,SAAS,qBAAqB,EAAA,EAAY;AAExC,IAAA,OAAO,CAAA,EAAG,OAAO,CAAA,CAAA,EAAI,EAAE,CAAA,WAAA,CAAA;AAAA,EACzB;AAEA,EAAA,SAAS,eAAe,EAAA,EAAY;AAElC,IAAA,OAAO,CAAA,EAAG,OAAO,CAAA,CAAA,EAAI,EAAE,CAAA,CAAA;AAAA,EACzB;AAEA,EAAA,SAAS,gBAAgB,EAAA,EAAY;AAEnC,IAAA,OAAO,CAAA,EAAG,OAAO,CAAA,CAAA,EAAI,EAAE,CAAA,CAAA;AAAA,EACzB;AAEA,EAAA,SAAS,iBAAiB,EAAA,EAAY;AAEpC,IAAA,OAAO,CAAA,EAAG,OAAO,CAAA,SAAA,EAAY,EAAE,CAAA,CAAA;AAAA,EACjC;AAEA,EAAA,MAAM,SAAA,GAAY,OAAO,YAAY,CAAA;AAErC,EAAA,SAAS,aAAA,GAAgB;AACvB,IAAA,OAAO,SAAA,CAAU,SAAA,CAAU,kBAAkB,CAAA,KAAM,aAAA;AAAA,EACrD;AAEA,EAAA,SAAS,uBAAA,CACP,GAAA,EACA,MAAA,EACA,SAAA,EACA,SACA,IAAA,EACA;AACA,IAAA,OAAA,CAAQ,GAAA,CAAI;AAAA,MACV,YAAY,cAAA,EAAe;AAAA,MAC3B,UAAU,cAAA,CAAe;AAAA,QACvB,KAAK,QAAA,CAAS,4BAAA;AAAA,QACd,KAAK,QAAA,CAAS,kCAAA;AAAA,QACd,KAAK,QAAA,CAAS;AAAA,OACf,CAAA;AAAA,MACD,SAAA,CAAU,cAAA,CAAe,CAAC,MAAM,CAAC;AAAA,KAClC,EACE,IAAA,CAAK,CAAC,CAAC,OAAA,EAAS,iBAAA,EAAmB,iBAAiB,CAAA,KAAM;AACzD,MAAA,KAAA,CAAM,GAAA,EAAK;AAAA,QACT,MAAA;AAAA,QACA,OAAA,EAAS;AAAA,UACP,aAAA,EAAe,CAAA,OAAA,EAAU,OAAA,CAAQ,KAAK,CAAA,CAAA;AAAA,UACtC,kBAAA,EAAoB,iBAAA;AAAA,UACpB,qBAAA,EAAuB,iBAAA;AAAA,UACvB,cAAA,EAAgB;AAAA,SAClB;AAAA,QACA;AAAA,OACD,CAAA,CAAE,IAAA,CAAK,CAAA,GAAA,KAAO;AACb,QAAA,IAAI,CAAC,IAAI,EAAA,EAAI;AACX,UAAA,OAAO,IACJ,IAAA,EAAK,CACL,KAAK,CAAA,IAAA,KAAQ,IAAS,EACtB,IAAA,CAAK,CAAA,SAAA,KAAa,QAAQ,SAAA,EAAW,KAAK,CAAC,CAAA,CAC3C,KAAA,CAAM,WAAS,OAAA,CAAQ,KAAA,EAAO,KAAK,CAAC,CAAA;AAAA,QACzC;AACA,QAAA,OAAO,GAAA,CACJ,IAAA,EAAK,CACL,IAAA,CAAK,CAAA,IAAA,KAAQ,IAAS,CAAA,CACtB,IAAA,CAAK,CAAA,SAAA,KAAa,SAAA,CAAU,SAAS,CAAC,CAAA;AAAA,MAC3C,CAAC,CAAA;AAAA,IACH,CAAC,CAAA,CACA,KAAA,CAAM,CAAA,KAAA,KAAS;AACd,MAAA,IAAI,KAAA,CAAM,SAAS,eAAA,EAAiB;AAClC,QAAA,OAAA,CAAQ,OAAO,IAAI,CAAA;AAAA,MACrB,CAAA,MAAO;AACL,QAAA,OAAA,CAAQ,OAAO,KAAK,CAAA;AAAA,MACtB;AAAA,IACF,CAAC,CAAA;AAAA,EACL;AAEA,EAAA,SAAS,wBAAA,CACP,GAAA,EACA,MAAA,EACA,SAAA,EACA,SACA,IAAA,EACA;AACA,IAAA,OAAA,CAAQ,GAAA,CAAI;AAAA,MACV,YAAY,cAAA,EAAe;AAAA,MAC3B,UAAU,cAAA,CAAe;AAAA,QACvB,KAAK,QAAA,CAAS,4BAAA;AAAA,QACd,KAAK,QAAA,CAAS,kCAAA;AAAA,QACd,KAAK,QAAA,CAAS;AAAA,OACf;AAAA,KACF,CAAA,CACE,IAAA,CAAK,CAAC,CAAC,OAAA,EAAS,iBAAiB,CAAA,KAAM;AACtC,MAAA,KAAA,CAAM,GAAA,EAAK;AAAA,QACT,MAAA;AAAA,QACA,OAAA,EAAS;AAAA,UACP,aAAA,EAAe,CAAA,OAAA,EAAU,OAAA,CAAQ,KAAK,CAAA,CAAA;AAAA,UACtC,kBAAA,EAAoB,iBAAA;AAAA,UACpB,cAAA,EAAgB;AAAA,SAClB;AAAA,QACA;AAAA,OACD,CAAA,CAAE,IAAA,CAAK,CAAA,GAAA,KAAO;AACb,QAAA,IAAI,CAAC,IAAI,EAAA,EAAI;AACX,UAAA,OAAO,IACJ,IAAA,EAAK,CACL,KAAK,CAAA,IAAA,KAAQ,IAAS,EACtB,IAAA,CAAK,CAAA,SAAA,KAAa,QAAQ,SAAA,EAAW,KAAK,CAAC,CAAA,CAC3C,KAAA,CAAM,WAAS,OAAA,CAAQ,KAAA,EAAO,KAAK,CAAC,CAAA;AAAA,QACzC;AACA,QAAA,OAAO,GAAA,CACJ,IAAA,EAAK,CACL,IAAA,CAAK,CAAA,IAAA,KAAQ,IAAS,CAAA,CACtB,IAAA,CAAK,CAAA,SAAA,KAAa,SAAA,CAAU,SAAS,CAAC,CAAA;AAAA,MAC3C,CAAC,CAAA;AAAA,IACH,CAAC,CAAA,CACA,KAAA,CAAM,CAAA,KAAA,KAAS;AACd,MAAA,IAAI,KAAA,CAAM,SAAS,eAAA,EAAiB;AAClC,QAAA,OAAA,CAAQ,OAAO,IAAI,CAAA;AAAA,MACrB,CAAA,MAAO;AACL,QAAA,OAAA,CAAQ,OAAO,KAAK,CAAA;AAAA,MACtB;AAAA,IACF,CAAC,CAAA;AAAA,EACL;AAEA,EAAA,SAAS,eAAA,CACP,YAAA,EACA,SAAA,EACA,OAAA,EACA;AACA,IAAA,OAAO,WAAA,CAAY,cAAA,EAAe,CAAE,IAAA,CAAK,CAAA,OAAA,KAAW;AAClD,MAAA,uBAAA;AAAA,QACE,oBAAA,CAAqB,aAAa,EAAE,CAAA;AAAA,QACpC,MAAA;AAAA,QACA,SAAA;AAAA,QACA,CAAC,GAAG,aAAA,KAAkB;AACpB,UAAA,IAAI,OAAA,UAAiB,aAAa,CAAA;AAAA,QACpC,CAAA;AAAA,QACA,eAAA;AAAA,UACE,YAAA,CAAa,OAAA;AAAA,UACb,KAAA;AAAA,UACA,OAAA;AAAA,UACA,YAAA,CAAa;AAAA;AACf,OACF;AAAA,IACF,CAAC,CAAA;AAAA,EACH;AAEA,EAAA,SAAS,UAAA,CACP,WACA,OAAA,EACA;AACA,IAAA,IAAI,eAAc,EAAG;AACnB,MAAA,uBAAA;AAAA,QACE,kBAAA;AAAA,QACA,KAAA;AAAA,QACA,SAAA;AAAA,QACA,CAAC,GAAG,aAAA,KAAkB;AACpB,UAAA,IAAI,OAAA,UAAiB,aAAa,CAAA;AAAA,QACpC;AAAA,OACF;AAAA,IACF,CAAA,MAAO;AACL,MAAA,wBAAA;AAAA,QACE,kBAAA;AAAA,QACA,KAAA;AAAA,QACA,SAAA;AAAA,QACA,CAAC,GAAG,aAAA,KAAkB;AACpB,UAAA,IAAI,OAAA,UAAiB,aAAa,CAAA;AAAA,QACpC;AAAA,OACF;AAAA,IACF;AAAA,EACF;AAEA,EAAA,SAAS,aAAa,QAAA,EAAiC;AACrD,IAAA,OAAO,IAAI,OAAA,CAAQ,CAAC,OAAA,EAAS,MAAA,KAAW;AACtC,MAAA,uBAAA;AAAA,QACE,GAAG,OAAO,CAAA,SAAA,CAAA;AAAA,QACV,MAAA;AAAA,QACA,MAAM,OAAA,EAAQ;AAAA,QACd,CAAA,KAAA,KAAS,OAAO,KAAK,CAAA;AAAA,QACrB;AAAA,OACF;AAAA,IACF,CAAC,CAAA;AAAA,EACH;AAEA,EAAA,SAAS,kBAAA,CACP,WACA,OAAA,EACA;AACA,IAAA,wBAAA;AAAA,MACE,GAAG,UAAU,CAAA,8CAAA,CAAA;AAAA;AAAA,MACb,KAAA;AAAA,MACA,CAAA,GAAA,KAAO,UAAU,GAAG,CAAA;AAAA,MACpB,CAAC,OAAO,aAAA,KAAkB;AACxB,QAAA,IAAI,OAAA,EAAS,OAAA,CAAQ,KAAA,EAAO,aAAa,CAAA;AAAA,MAC3C;AAAA,KACF;AAAA,EACF;AAEA,EAAA,SAAS,YAAA,CACP,MAAA,EACA,SAAA,EACA,OAAA,EACA;AACA,IAAA,OAAO,WAAA,CAAY,gBAAe,CAAE,IAAA;AAAA,MAAK,CAAA,OAAA,KACvC,uBAAA;AAAA,QACE,iBAAiB,MAAM,CAAA;AAAA,QACvB,MAAA;AAAA,QACA,CAAA,GAAA,KAAO;AACL,UAAA,IAAI,SAAA,YAAqB,GAAG,CAAA;AAAA,QAC9B,CAAA;AAAA,QACA,CAAC,OAAO,aAAA,KAAkB;AACxB,UAAA,IAAI,OAAA,EAAS,OAAA,CAAQ,KAAA,EAAO,aAAa,CAAA;AAAA,QAC3C,CAAA;AAAA,QACA,uBAAuB,OAAO;AAAA;AAChC,KACF;AAAA,EACF;AAEA,EAAA,SAAS,UACP,IAAA,EACA,eAAA,EACA,UAAA,EACA,aAAA,EACA,WACA,OAAA,EACA;AACA,IAAA,OAAO,WAAA,CAAY,gBAAe,CAAE,IAAA;AAAA,MAAK,CAAA,OAAA,KACvC,uBAAA;AAAA,QACE,CAAA,EAAG,OAAO,CAAA,iBAAA,EAAoB,eAAe,CAAA,CAAA;AAAA,QAC7C,MAAA;AAAA,QACA,CAAA,GAAA,KAAO;AACL,UAAA,IAAI,SAAA,YAAqB,GAAG,CAAA;AAAA,QAC9B,CAAA;AAAA,QACA,CAAC,OAAO,aAAA,KAAkB;AACxB,UAAA,IAAI,OAAA,EAAS,OAAA,CAAQ,KAAA,EAAO,aAAa,CAAA;AAAA,QAC3C,CAAA;AAAA,QACA,eAAA,CAAgB,IAAA,EAAM,IAAA,EAAM,OAAA,EAAS,YAAY,aAAa;AAAA;AAChE,KACF;AAAA,EACF;AAEA,EAAA,SAAS,QAAA,CACP,IAAA,EACA,SAAA,EACA,OAAA,EACA;AACA,IAAA,WAAA,CAAY,gBAAe,CAAE,IAAA;AAAA,MAAK,CAAA,OAAA,KAChC,uBAAA;AAAA,QAIE,cAAA,CAAe,KAAK,EAAE,CAAA;AAAA,QACtB,KAAA;AAAA,QACA,CAAA,GAAA,KAAO;AACL,UAAA,IAAI,SAAA,YAAqB,GAAG,CAAA;AAAA,QAC9B,CAAA;AAAA,QACA,CAAC,OAAO,aAAA,KAAkB;AACxB,UAAA,IAAI,OAAA,EAAS,OAAA,CAAQ,KAAA,EAAO,aAAa,CAAA;AAAA,QAC3C,CAAA;AAAA,QACA,eAAA;AAAA,UACE,IAAA,CAAK,OAAA;AAAA,UACL,IAAA,CAAK,qBAAA;AAAA,UACL,OAAA;AAAA,UACA,IAAA,CAAK;AAAA;AACP;AACF,KACF;AAAA,EACF;AAEA,EAAA,SAAS,WAAA,CACP,MAAA,EACA,SAAA,EACA,OAAA,EACA;AACA,IAAA,uBAAA;AAAA,MACE,gBAAgB,MAAM,CAAA;AAAA,MACtB,QAAA;AAAA,MACA,CAAA,GAAA,KAAO;AACL,QAAA,IAAI,SAAA,YAAqB,GAAG,CAAA;AAAA,MAC9B,CAAA;AAAA,MACA,CAAC,OAAO,aAAA,KAAkB;AACxB,QAAA,IAAI,OAAA,EAAS,OAAA,CAAQ,KAAA,EAAO,aAAa,CAAA;AAAA,MAC3C;AAAA,KACF;AAAA,EACF;AAEA,EAAA,SAAS,gCACP,SAAA,EACA;AACA,IAAA,uBAAA;AAAA,MACE,gCAAA;AAAA,MACA,KAAA;AAAA,MACA,CAAA,GAAA,KAAO,UAAU,GAAG,CAAA;AAAA,MACpB,MAAM;AAAA,MAAC;AAAA,KACT;AAAA,EACF;AACA,EAAA,OAAO;AAAA,IACL,UAAA;AAAA,IACA,kBAAA;AAAA,IACA,SAAA;AAAA,IACA,QAAA;AAAA,IACA,WAAA;AAAA,IACA,YAAA;AAAA,IACA,eAAA;AAAA,IACA,YAAA;AAAA,IACA;AAAA,GACF;AACF;AAEO,MAAM,iBAAA,GAAoB,CAAI,KAAA,EAAU,KAAA,GAAQ,GAAA,KAAQ;AAC7D,EAAA,MAAM,CAAC,cAAA,EAAgB,iBAAiB,CAAA,GAAI,SAAY,KAAK,CAAA;AAE7D,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,MAAM,OAAA,GAAU,WAAW,MAAM;AAC/B,MAAA,iBAAA,CAAkB,KAAK,CAAA;AAAA,IACzB,GAAG,KAAK,CAAA;AAER,IAAA,OAAO,MAAM,aAAa,OAAO,CAAA;AAAA,EACnC,CAAA,EAAG,CAAC,KAAA,EAAO,KAAK,CAAC,CAAA;AAEjB,EAAA,OAAO,cAAA;AACT;AAEO,SAAS,WAAA,CACd,KAAA,EACA,KAAA,EACA,QAAA,EACA;AACA,EAAA,MAAM,UAAA,GAAa,OAA8B,IAAI,CAAA;AACrD,EAAA,MAAM,cAAA,GAAiB,OAAU,KAAK,CAAA;AACtC,EAAA,MAAM,iBAAA,GAAoB,OAAuB,QAAQ,CAAA;AAEzD,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,cAAA,CAAe,OAAA,GAAU,KAAA;AAAA,EAC3B,CAAA,EAAG,CAAC,KAAK,CAAC,CAAA;AAEV,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,iBAAA,CAAkB,OAAA,GAAU,QAAA;AAAA,EAC9B,CAAA,EAAG,CAAC,QAAQ,CAAC,CAAA;AAEb,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,WAAW,OAAA,EAAS;AACtB,MAAA,YAAA,CAAa,WAAW,OAAO,CAAA;AAAA,IACjC;AAEA,IAAA,UAAA,CAAW,OAAA,GAAU,WAAW,MAAM;AACpC,MAAA,iBAAA,CAAkB,OAAA,CAAQ,eAAe,OAAO,CAAA;AAChD,MAAA,UAAA,CAAW,OAAA,GAAU,IAAA;AAAA,IACvB,GAAG,KAAK,CAAA;AAER,IAAA,OAAO,MAAM;AACX,MAAA,IAAI,WAAW,OAAA,EAAS;AACtB,QAAA,YAAA,CAAa,WAAW,OAAO,CAAA;AAAA,MACjC;AAAA,IACF,CAAA;AAAA,EACF,CAAA,EAAG,CAAC,KAAA,EAAO,KAAK,CAAC,CAAA;AAEjB,EAAA,MAAM,KAAA,GAAQ,YAAY,MAAM;AAC9B,IAAA,IAAI,WAAW,OAAA,EAAS;AACtB,MAAA,YAAA,CAAa,WAAW,OAAO,CAAA;AAC/B,MAAA,UAAA,CAAW,OAAA,GAAU,IAAA;AAAA,IACvB;AACA,IAAA,MAAM,IAAI,cAAA,CAAe,OAAA;AACzB,IAAA,MAAM,QAAA,GAAW,MAAM,OAAA,CAAQ,CAAC,IAAI,CAAA,CAAE,MAAA,GAAS,IAAI,CAAA,KAAM,IAAA;AACzD,IAAA,IAAI,QAAA,EAAU;AACZ,MAAA,iBAAA,CAAkB,QAAQ,CAAC,CAAA;AAAA,IAC7B;AAAA,EACF,CAAA,EAAG,EAAE,CAAA;AACL,EAAA,OAAO,EAAE,KAAA,EAAM;AACjB;;;;"}
|