@kartverket/backstage-plugin-risk-scorecard 8.1.5 → 8.3.0
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/components/riScPlugin/RiScPlugin.esm.js +36 -17
- package/dist/components/riScPlugin/RiScPlugin.esm.js.map +1 -1
- package/dist/components/riScPlugin/RiScPlugin.module.css.esm.js +8 -0
- package/dist/components/riScPlugin/RiScPlugin.module.css.esm.js.map +1 -0
- package/dist/hooks/usePredefinedScenarios.esm.js +12 -3
- package/dist/hooks/usePredefinedScenarios.esm.js.map +1 -1
- package/dist/urls/backend.esm.js +2 -1
- package/dist/urls/backend.esm.js.map +1 -1
- package/package.json +1 -1
|
@@ -26,6 +26,7 @@ import { LockedRiScView } from '../riScInfo/LockedRiScView.esm.js';
|
|
|
26
26
|
import { ThreatActorsAndVulnerabilitiesCard } from '../threatActorsAndVulnerabilities/ThreatActorsAndVulnerabilitiesCard.esm.js';
|
|
27
27
|
import { PredefinedScenariosBanner } from '../predefinedScenarios/PredefinedScenariosBanner.esm.js';
|
|
28
28
|
import { usePredefinedScenariosBannerDismissal } from '../../stores/PredefinedScenariosBannerStore.esm.js';
|
|
29
|
+
import pluginStyles from './RiScPlugin.module.css.esm.js';
|
|
29
30
|
|
|
30
31
|
function RiScPlugin() {
|
|
31
32
|
const [riScDialogState, setRiScDialogState] = useState(
|
|
@@ -176,23 +177,41 @@ function RiScPlugin() {
|
|
|
176
177
|
),
|
|
177
178
|
/* @__PURE__ */ jsx(ScenarioTableWrapper, { riScWithMetadata: selectedRiSc })
|
|
178
179
|
] }) }),
|
|
179
|
-
/* @__PURE__ */ jsx(Grid, { size: 4, children: /* @__PURE__ */ jsxs(
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
180
|
+
/* @__PURE__ */ jsx(Grid, { size: 4, children: /* @__PURE__ */ jsxs(
|
|
181
|
+
Flex,
|
|
182
|
+
{
|
|
183
|
+
direction: "column",
|
|
184
|
+
gap: "24px",
|
|
185
|
+
className: pluginStyles.rightColumn,
|
|
186
|
+
children: [
|
|
187
|
+
/* @__PURE__ */ jsx(
|
|
188
|
+
RiScStatusComponent,
|
|
189
|
+
{
|
|
190
|
+
selectedRiSc,
|
|
191
|
+
publishRiScFn: approveRiSc,
|
|
192
|
+
predefinedScenariosDismissed
|
|
193
|
+
}
|
|
194
|
+
),
|
|
195
|
+
/* @__PURE__ */ jsxs(
|
|
196
|
+
Flex,
|
|
197
|
+
{
|
|
198
|
+
direction: "column",
|
|
199
|
+
gap: "24px",
|
|
200
|
+
className: pluginStyles.stickyCards,
|
|
201
|
+
children: [
|
|
202
|
+
/* @__PURE__ */ jsx(RiskMatrix, { riScWithMetadata: selectedRiSc }),
|
|
203
|
+
/* @__PURE__ */ jsx(
|
|
204
|
+
ThreatActorsAndVulnerabilitiesCard,
|
|
205
|
+
{
|
|
206
|
+
scenarios: selectedRiSc.content.scenarios
|
|
207
|
+
}
|
|
208
|
+
)
|
|
209
|
+
]
|
|
210
|
+
}
|
|
211
|
+
)
|
|
212
|
+
]
|
|
213
|
+
}
|
|
214
|
+
) })
|
|
196
215
|
] }) }) }) })
|
|
197
216
|
] }),
|
|
198
217
|
riScDialogState !== RiScDialogStates.Closed && /* @__PURE__ */ jsx(
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RiScPlugin.esm.js","sources":["../../../src/components/riScPlugin/RiScPlugin.tsx"],"sourcesContent":["import { useEffect, useState } from 'react';\nimport { useSearchParams } from 'react-router-dom';\nimport { ScenarioWizard } from '../scenarioWizard/ScenarioWizard';\nimport { ScenarioDrawer } from '../scenarioDrawer/ScenarioDrawer';\nimport { RiskMatrix } from '../riskMatrix/RiskMatrix';\nimport AlertBar from '../common/AlertBar/AlertBar';\nimport Grid from '@mui/material/Grid';\nimport { RiScDialog, RiScDialogStates } from '../riScDialog/RiScDialog';\nimport { Spinner } from '../common/Spinner';\nimport { useRiScs } from '../../contexts/RiScContext';\nimport { ScenarioWizardSteps } from '../../contexts/ScenarioContext';\nimport { RiScHeader } from '../riScHeader/RiScHeader.tsx';\nimport { ScenarioTableWrapper } from '../scenarioTable/ScenarioTableWrapper.tsx';\nimport { FirstRiScDialog } from '../riScInfo/FirstRiScDialog.tsx';\nimport { Flex, Text } from '@backstage/ui';\nimport { CreateNewRiScButton } from '../riScInfo/CreateNewRiScButton.tsx';\nimport { RiScSelectionCard } from '../riScInfo/RiScSelectionCard.tsx';\nimport { RiScStatusComponent } from '../riScInfo/riScStatus/RiScStatusComponent.tsx';\nimport { pluginRiScTranslationRef } from '../../utils/translations.ts';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport styles from '../common/alertBar.module.css';\nimport { RiScDescriptionCard } from '../riScInfo/RiScDescriptionCard.tsx';\nimport riscStyles from '../riScInfo/RiScSelectionCard.module.css';\nimport { ErrorState } from '../riScInfo/ErrorState.tsx';\nimport { LockedRiScView } from '../riScInfo/LockedRiScView.tsx';\nimport { ThreatActorsAndVulnerabilitiesCard } from '../threatActorsAndVulnerabilities/ThreatActorsAndVulnerabilitiesCard.tsx';\nimport { PredefinedScenariosBanner } from '../predefinedScenarios/PredefinedScenariosBanner.tsx';\nimport { usePredefinedScenariosBannerDismissal } from '../../stores/PredefinedScenariosBannerStore.ts';\n\nexport function RiScPlugin() {\n const [riScDialogState, setRiScDialogState] = useState<RiScDialogStates>(\n RiScDialogStates.Closed,\n );\n\n function openCreateRiScDialog() {\n return setRiScDialogState(RiScDialogStates.Create);\n }\n\n function openDeleteRiScDialog() {\n return setRiScDialogState(RiScDialogStates.Delete);\n }\n\n function openEditRiScDialog() {\n return setRiScDialogState(RiScDialogStates.EditRiscInfo);\n }\n\n function openEditEncryptionDialog() {\n return setRiScDialogState(RiScDialogStates.EditEncryption);\n }\n\n function closeRiScDialog() {\n return setRiScDialogState(RiScDialogStates.Closed);\n }\n\n const {\n approveRiSc,\n selectedRiSc,\n selectedLockedRiSc,\n selectedSystemRiSc,\n isFetching,\n resetResponse,\n resetRiScStatus,\n response,\n updateStatus,\n riScs,\n systemRiScs,\n failedToFetchGcpCryptoKeys,\n allRiScsFailedDecryption,\n } = useRiScs();\n\n const {\n isDismissed: predefinedScenariosDismissed,\n dismiss: dismissPredefinedScenarios,\n } = usePredefinedScenariosBannerDismissal(selectedRiSc?.id);\n\n const { t } = useTranslationRef(pluginRiScTranslationRef);\n\n const [searchParams] = useSearchParams();\n const scenarioWizardStep = searchParams.get(\n 'step',\n ) as ScenarioWizardSteps | null;\n\n useEffect(() => {\n if (scenarioWizardStep !== null) {\n resetRiScStatus();\n resetResponse();\n }\n }, [resetRiScStatus, resetResponse, scenarioWizardStep]);\n\n return (\n <>\n <Flex className={styles.alertBarBox}>\n <AlertBar\n updateStatus={updateStatus}\n response={response}\n statusText={response?.statusMessage}\n />\n </Flex>\n {scenarioWizardStep !== null ? (\n <ScenarioWizard step={scenarioWizardStep} />\n ) : (\n <>\n <RiScHeader onEditEncryption={openEditEncryptionDialog} />\n {!isFetching &&\n riScs !== null &&\n riScs.length === 0 &&\n !selectedRiSc &&\n !selectedSystemRiSc &&\n !selectedLockedRiSc &&\n !allRiScsFailedDecryption && (\n <Flex\n direction=\"column\"\n gap=\"24px\"\n justify=\"center\"\n align=\"center\"\n className={riscStyles.componentLayout}\n >\n {/* TODO: Fjern hardkodet tekst og finn bedre oppførsel når det kun finnes system-RoS (Oppgave laget i notion) */}\n {systemRiScs.length > 0 && (\n <>\n <RiScSelectionCard />\n <span>System-RoS kan velges i dropdown</span>\n </>\n )}\n <FirstRiScDialog onNewRiSc={openCreateRiScDialog} />\n </Flex>\n )}\n {/* Added isFetching condition to avoid showing error state when user e.g., adds new scorecard. */}\n {!isFetching &&\n !selectedRiSc &&\n !selectedSystemRiSc &&\n !selectedLockedRiSc &&\n (failedToFetchGcpCryptoKeys || allRiScsFailedDecryption) && (\n <Flex\n align=\"center\"\n justify=\"center\"\n className={riscStyles.componentLayout}\n >\n <ErrorState onCreateNew={openCreateRiScDialog} />\n </Flex>\n )}\n {isFetching && <Spinner size={80} />}\n\n {selectedSystemRiSc && (\n <Flex\n justify=\"center\"\n align=\"center\"\n className={riscStyles.componentLayout}\n >\n {/* System RiScs redirect through their first appliesTo entity and render there as regular or locked RiScs. */}\n <Spinner size={80} />\n </Flex>\n )}\n\n {selectedLockedRiSc && (\n <>\n <Grid container spacing={4}>\n <Grid size={12}>\n <Grid container rowSpacing={3} columnSpacing={4}>\n <Grid size={8}>\n <Flex align=\"center\" justify=\"between\">\n <Text as=\"h3\" variant=\"body-large\" weight=\"bold\">\n {t('contentHeader.multipleRiScs')}\n </Text>\n <CreateNewRiScButton\n onCreateNew={openCreateRiScDialog}\n />\n </Flex>\n </Grid>\n <Grid size={8}>\n <RiScSelectionCard />\n </Grid>\n </Grid>\n </Grid>\n </Grid>\n <Flex\n justify=\"center\"\n align=\"center\"\n className={riscStyles.componentLayout}\n >\n <LockedRiScView lockedRiSc={selectedLockedRiSc} />\n </Flex>\n </>\n )}\n\n <Grid container spacing={4}>\n {selectedRiSc && (\n <>\n <Grid size={12}>\n <Grid container rowSpacing={3} columnSpacing={4}>\n <Grid size={8}>\n <Flex align=\"center\" justify=\"between\">\n <Text as=\"h3\" variant=\"body-large\" weight=\"bold\">\n {t('contentHeader.multipleRiScs')}\n </Text>\n <CreateNewRiScButton\n onCreateNew={openCreateRiScDialog}\n />\n </Flex>\n </Grid>\n <Grid size={8}>\n <RiScSelectionCard />\n </Grid>\n <Grid size={4} />\n\n <Grid size={8}>\n <Flex gap=\"24px\" direction=\"column\">\n <PredefinedScenariosBanner\n selectedRiSc={selectedRiSc}\n isDismissed={predefinedScenariosDismissed}\n dismiss={dismissPredefinedScenarios}\n />\n <RiScDescriptionCard\n riScWithMetadata={selectedRiSc}\n edit={openEditRiScDialog}\n />\n <ScenarioTableWrapper riScWithMetadata={selectedRiSc} />\n </Flex>\n </Grid>\n\n <Grid size={4}>\n <Flex direction=\"column\" gap=\"24px\">\n <RiScStatusComponent\n selectedRiSc={selectedRiSc}\n publishRiScFn={approveRiSc}\n predefinedScenariosDismissed={\n predefinedScenariosDismissed\n }\n />\n <RiskMatrix riScWithMetadata={selectedRiSc} />\n <ThreatActorsAndVulnerabilitiesCard\n scenarios={selectedRiSc.content.scenarios}\n />\n </Flex>\n </Grid>\n </Grid>\n </Grid>\n </>\n )}\n </Grid>\n </>\n )}\n\n {riScDialogState !== RiScDialogStates.Closed && (\n <RiScDialog\n onClose={closeRiScDialog}\n dialogState={riScDialogState}\n onDelete={openDeleteRiScDialog}\n />\n )}\n\n {!scenarioWizardStep && <ScenarioDrawer />}\n </>\n );\n}\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"RiScPlugin.esm.js","sources":["../../../src/components/riScPlugin/RiScPlugin.tsx"],"sourcesContent":["import { useEffect, useState } from 'react';\nimport { useSearchParams } from 'react-router-dom';\nimport { ScenarioWizard } from '../scenarioWizard/ScenarioWizard';\nimport { ScenarioDrawer } from '../scenarioDrawer/ScenarioDrawer';\nimport { RiskMatrix } from '../riskMatrix/RiskMatrix';\nimport AlertBar from '../common/AlertBar/AlertBar';\nimport Grid from '@mui/material/Grid';\nimport { RiScDialog, RiScDialogStates } from '../riScDialog/RiScDialog';\nimport { Spinner } from '../common/Spinner';\nimport { useRiScs } from '../../contexts/RiScContext';\nimport { ScenarioWizardSteps } from '../../contexts/ScenarioContext';\nimport { RiScHeader } from '../riScHeader/RiScHeader.tsx';\nimport { ScenarioTableWrapper } from '../scenarioTable/ScenarioTableWrapper.tsx';\nimport { FirstRiScDialog } from '../riScInfo/FirstRiScDialog.tsx';\nimport { Flex, Text } from '@backstage/ui';\nimport { CreateNewRiScButton } from '../riScInfo/CreateNewRiScButton.tsx';\nimport { RiScSelectionCard } from '../riScInfo/RiScSelectionCard.tsx';\nimport { RiScStatusComponent } from '../riScInfo/riScStatus/RiScStatusComponent.tsx';\nimport { pluginRiScTranslationRef } from '../../utils/translations.ts';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport styles from '../common/alertBar.module.css';\nimport { RiScDescriptionCard } from '../riScInfo/RiScDescriptionCard.tsx';\nimport riscStyles from '../riScInfo/RiScSelectionCard.module.css';\nimport { ErrorState } from '../riScInfo/ErrorState.tsx';\nimport { LockedRiScView } from '../riScInfo/LockedRiScView.tsx';\nimport { ThreatActorsAndVulnerabilitiesCard } from '../threatActorsAndVulnerabilities/ThreatActorsAndVulnerabilitiesCard.tsx';\nimport { PredefinedScenariosBanner } from '../predefinedScenarios/PredefinedScenariosBanner.tsx';\nimport { usePredefinedScenariosBannerDismissal } from '../../stores/PredefinedScenariosBannerStore.ts';\nimport pluginStyles from './RiScPlugin.module.css';\n\nexport function RiScPlugin() {\n const [riScDialogState, setRiScDialogState] = useState<RiScDialogStates>(\n RiScDialogStates.Closed,\n );\n\n function openCreateRiScDialog() {\n return setRiScDialogState(RiScDialogStates.Create);\n }\n\n function openDeleteRiScDialog() {\n return setRiScDialogState(RiScDialogStates.Delete);\n }\n\n function openEditRiScDialog() {\n return setRiScDialogState(RiScDialogStates.EditRiscInfo);\n }\n\n function openEditEncryptionDialog() {\n return setRiScDialogState(RiScDialogStates.EditEncryption);\n }\n\n function closeRiScDialog() {\n return setRiScDialogState(RiScDialogStates.Closed);\n }\n\n const {\n approveRiSc,\n selectedRiSc,\n selectedLockedRiSc,\n selectedSystemRiSc,\n isFetching,\n resetResponse,\n resetRiScStatus,\n response,\n updateStatus,\n riScs,\n systemRiScs,\n failedToFetchGcpCryptoKeys,\n allRiScsFailedDecryption,\n } = useRiScs();\n\n const {\n isDismissed: predefinedScenariosDismissed,\n dismiss: dismissPredefinedScenarios,\n } = usePredefinedScenariosBannerDismissal(selectedRiSc?.id);\n\n const { t } = useTranslationRef(pluginRiScTranslationRef);\n\n const [searchParams] = useSearchParams();\n const scenarioWizardStep = searchParams.get(\n 'step',\n ) as ScenarioWizardSteps | null;\n\n useEffect(() => {\n if (scenarioWizardStep !== null) {\n resetRiScStatus();\n resetResponse();\n }\n }, [resetRiScStatus, resetResponse, scenarioWizardStep]);\n\n return (\n <>\n <Flex className={styles.alertBarBox}>\n <AlertBar\n updateStatus={updateStatus}\n response={response}\n statusText={response?.statusMessage}\n />\n </Flex>\n {scenarioWizardStep !== null ? (\n <ScenarioWizard step={scenarioWizardStep} />\n ) : (\n <>\n <RiScHeader onEditEncryption={openEditEncryptionDialog} />\n {!isFetching &&\n riScs !== null &&\n riScs.length === 0 &&\n !selectedRiSc &&\n !selectedSystemRiSc &&\n !selectedLockedRiSc &&\n !allRiScsFailedDecryption && (\n <Flex\n direction=\"column\"\n gap=\"24px\"\n justify=\"center\"\n align=\"center\"\n className={riscStyles.componentLayout}\n >\n {/* TODO: Fjern hardkodet tekst og finn bedre oppførsel når det kun finnes system-RoS (Oppgave laget i notion) */}\n {systemRiScs.length > 0 && (\n <>\n <RiScSelectionCard />\n <span>System-RoS kan velges i dropdown</span>\n </>\n )}\n <FirstRiScDialog onNewRiSc={openCreateRiScDialog} />\n </Flex>\n )}\n {/* Added isFetching condition to avoid showing error state when user e.g., adds new scorecard. */}\n {!isFetching &&\n !selectedRiSc &&\n !selectedSystemRiSc &&\n !selectedLockedRiSc &&\n (failedToFetchGcpCryptoKeys || allRiScsFailedDecryption) && (\n <Flex\n align=\"center\"\n justify=\"center\"\n className={riscStyles.componentLayout}\n >\n <ErrorState onCreateNew={openCreateRiScDialog} />\n </Flex>\n )}\n {isFetching && <Spinner size={80} />}\n\n {selectedSystemRiSc && (\n <Flex\n justify=\"center\"\n align=\"center\"\n className={riscStyles.componentLayout}\n >\n {/* System RiScs redirect through their first appliesTo entity and render there as regular or locked RiScs. */}\n <Spinner size={80} />\n </Flex>\n )}\n\n {selectedLockedRiSc && (\n <>\n <Grid container spacing={4}>\n <Grid size={12}>\n <Grid container rowSpacing={3} columnSpacing={4}>\n <Grid size={8}>\n <Flex align=\"center\" justify=\"between\">\n <Text as=\"h3\" variant=\"body-large\" weight=\"bold\">\n {t('contentHeader.multipleRiScs')}\n </Text>\n <CreateNewRiScButton\n onCreateNew={openCreateRiScDialog}\n />\n </Flex>\n </Grid>\n <Grid size={8}>\n <RiScSelectionCard />\n </Grid>\n </Grid>\n </Grid>\n </Grid>\n <Flex\n justify=\"center\"\n align=\"center\"\n className={riscStyles.componentLayout}\n >\n <LockedRiScView lockedRiSc={selectedLockedRiSc} />\n </Flex>\n </>\n )}\n\n <Grid container spacing={4}>\n {selectedRiSc && (\n <>\n <Grid size={12}>\n <Grid container rowSpacing={3} columnSpacing={4}>\n <Grid size={8}>\n <Flex align=\"center\" justify=\"between\">\n <Text as=\"h3\" variant=\"body-large\" weight=\"bold\">\n {t('contentHeader.multipleRiScs')}\n </Text>\n <CreateNewRiScButton\n onCreateNew={openCreateRiScDialog}\n />\n </Flex>\n </Grid>\n <Grid size={8}>\n <RiScSelectionCard />\n </Grid>\n <Grid size={4} />\n\n <Grid size={8}>\n <Flex gap=\"24px\" direction=\"column\">\n <PredefinedScenariosBanner\n selectedRiSc={selectedRiSc}\n isDismissed={predefinedScenariosDismissed}\n dismiss={dismissPredefinedScenarios}\n />\n <RiScDescriptionCard\n riScWithMetadata={selectedRiSc}\n edit={openEditRiScDialog}\n />\n <ScenarioTableWrapper riScWithMetadata={selectedRiSc} />\n </Flex>\n </Grid>\n\n <Grid size={4}>\n <Flex\n direction=\"column\"\n gap=\"24px\"\n className={pluginStyles.rightColumn}\n >\n <RiScStatusComponent\n selectedRiSc={selectedRiSc}\n publishRiScFn={approveRiSc}\n predefinedScenariosDismissed={\n predefinedScenariosDismissed\n }\n />\n <Flex\n direction=\"column\"\n gap=\"24px\"\n className={pluginStyles.stickyCards}\n >\n <RiskMatrix riScWithMetadata={selectedRiSc} />\n <ThreatActorsAndVulnerabilitiesCard\n scenarios={selectedRiSc.content.scenarios}\n />\n </Flex>\n </Flex>\n </Grid>\n </Grid>\n </Grid>\n </>\n )}\n </Grid>\n </>\n )}\n\n {riScDialogState !== RiScDialogStates.Closed && (\n <RiScDialog\n onClose={closeRiScDialog}\n dialogState={riScDialogState}\n onDelete={openDeleteRiScDialog}\n />\n )}\n\n {!scenarioWizardStep && <ScenarioDrawer />}\n </>\n );\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import styleInject from '../../node_modules_dist/style-inject/dist/style-inject.es.esm.js';
|
|
2
|
+
|
|
3
|
+
var css_248z = ".RiScPlugin_rightColumn__7c55742ecd {\n height: 100%;\n}\n\n.RiScPlugin_stickyCards__7c55742ecd {\n position: sticky;\n top: 16px;\n align-self: flex-start;\n max-height: calc(100vh - 32px);\n overflow-y: auto;\n}\n";
|
|
4
|
+
var pluginStyles = {"rightColumn":"RiScPlugin_rightColumn__7c55742ecd","stickyCards":"RiScPlugin_stickyCards__7c55742ecd"};
|
|
5
|
+
styleInject(css_248z);
|
|
6
|
+
|
|
7
|
+
export { pluginStyles as default };
|
|
8
|
+
//# sourceMappingURL=RiScPlugin.module.css.esm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RiScPlugin.module.css.esm.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;"}
|
|
@@ -1,8 +1,10 @@
|
|
|
1
|
-
import { useQuery } from '@tanstack/react-query';
|
|
2
1
|
import { useApi, configApiRef, identityApiRef, githubAuthApiRef, fetchApiRef } from '@backstage/core-plugin-api';
|
|
2
|
+
import { useQuery } from '@tanstack/react-query';
|
|
3
3
|
import { buildNativeBackendUrls } from '../urls/backend.esm.js';
|
|
4
|
-
import {
|
|
4
|
+
import { URLS } from '../urls/index.esm.js';
|
|
5
5
|
import { latestSupportedVersion } from '../utils/constants.esm.js';
|
|
6
|
+
import { useNativeRiScBackendFeatureFlag } from '../utils/featureFlags.esm.js';
|
|
7
|
+
import { useGithubRepositoryInformation } from '../utils/hooks.esm.js';
|
|
6
8
|
|
|
7
9
|
const PREDEFINED_SCENARIOS_TEMPLATE_ID = "web-app-api";
|
|
8
10
|
const PREDEFINED_SCENARIOS_SOURCE_TEST_REF = "add-scenarios";
|
|
@@ -14,16 +16,23 @@ function usePredefinedScenarios(isTestPredefinedScenariosEnabled) {
|
|
|
14
16
|
const githubApi = useApi(githubAuthApiRef);
|
|
15
17
|
const { fetch } = useApi(fetchApiRef);
|
|
16
18
|
const repoInformation = useGithubRepositoryInformation();
|
|
19
|
+
const isNativeBackendEnabled = useNativeRiScBackendFeatureFlag();
|
|
17
20
|
const backendUrl = configApi.getString("backend.baseUrl");
|
|
18
|
-
const { uriToFetchInitRiScTemplate } = buildNativeBackendUrls({
|
|
21
|
+
const { uriToFetchInitRiScTemplate: uriToFetchInitRiScTemplateNative } = buildNativeBackendUrls({
|
|
19
22
|
baseUrl: `${backendUrl}/api/risk-scorecard`,
|
|
20
23
|
owner: repoInformation.owner,
|
|
21
24
|
repo: repoInformation.name,
|
|
22
25
|
version: latestSupportedVersion
|
|
23
26
|
});
|
|
27
|
+
function uriToFetchInitRiScTemplateProxy(id, ref) {
|
|
28
|
+
const base = `${backendUrl}${URLS.backend.fetchInitRiScTemplate.replace(":id", id)}`;
|
|
29
|
+
return ref ? `${base}?ref=${encodeURIComponent(ref)}` : base;
|
|
30
|
+
}
|
|
31
|
+
const uriToFetchInitRiScTemplate = isNativeBackendEnabled ? uriToFetchInitRiScTemplateNative : uriToFetchInitRiScTemplateProxy;
|
|
24
32
|
return useQuery({
|
|
25
33
|
queryKey: [
|
|
26
34
|
PREDEFINED_SCENARIOS_QUERY_KEY,
|
|
35
|
+
isNativeBackendEnabled ? "native" : "proxy",
|
|
27
36
|
isTestPredefinedScenariosEnabled ? "test" : "main"
|
|
28
37
|
],
|
|
29
38
|
retry: (count, error) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"usePredefinedScenarios.esm.js","sources":["../../src/hooks/usePredefinedScenarios.ts"],"sourcesContent":["import {
|
|
1
|
+
{"version":3,"file":"usePredefinedScenarios.esm.js","sources":["../../src/hooks/usePredefinedScenarios.ts"],"sourcesContent":["import {\n configApiRef,\n fetchApiRef,\n githubAuthApiRef,\n identityApiRef,\n useApi,\n} from '@backstage/core-plugin-api';\nimport { useQuery } from '@tanstack/react-query';\nimport { buildNativeBackendUrls } from '../urls/backend.ts';\nimport { URLS } from '../urls/index.ts';\nimport { latestSupportedVersion } from '../utils/constants.ts';\nimport { ScenarioDTO } from '../utils/DTOs.ts';\nimport { useNativeRiScBackendFeatureFlag } from '../utils/featureFlags.ts';\nimport { useGithubRepositoryInformation } from '../utils/hooks.ts';\n\nconst PREDEFINED_SCENARIOS_TEMPLATE_ID = 'web-app-api';\nconst PREDEFINED_SCENARIOS_SOURCE_TEST_REF = 'add-scenarios';\n\nconst PREDEFINED_SCENARIO_IDS = ['xK9mP', 'mF6xQ'];\n\nconst PREDEFINED_SCENARIOS_QUERY_KEY = ['predefined-scenarios'] as const;\n\nexport function usePredefinedScenarios(\n isTestPredefinedScenariosEnabled: boolean,\n) {\n const configApi = useApi(configApiRef);\n const identityApi = useApi(identityApiRef);\n const githubApi = useApi(githubAuthApiRef);\n const { fetch } = useApi(fetchApiRef);\n const repoInformation = useGithubRepositoryInformation();\n const isNativeBackendEnabled = useNativeRiScBackendFeatureFlag();\n\n const backendUrl = configApi.getString('backend.baseUrl');\n\n const { uriToFetchInitRiScTemplate: uriToFetchInitRiScTemplateNative } =\n buildNativeBackendUrls({\n baseUrl: `${backendUrl}/api/risk-scorecard`,\n owner: repoInformation.owner,\n repo: repoInformation.name,\n version: latestSupportedVersion,\n });\n\n function uriToFetchInitRiScTemplateProxy(id: string, ref?: string) {\n const base = `${backendUrl}${URLS.backend.fetchInitRiScTemplate.replace(':id', id)}`;\n return ref ? `${base}?ref=${encodeURIComponent(ref)}` : base;\n }\n\n const uriToFetchInitRiScTemplate = isNativeBackendEnabled\n ? uriToFetchInitRiScTemplateNative\n : uriToFetchInitRiScTemplateProxy;\n\n return useQuery({\n queryKey: [\n PREDEFINED_SCENARIOS_QUERY_KEY,\n isNativeBackendEnabled ? 'native' : 'proxy',\n isTestPredefinedScenariosEnabled ? 'test' : 'main',\n ],\n retry: (count, error) => {\n if (\n error.message === 'Unexpected status 401' ||\n error.message === 'Unexpected status 403' ||\n error.message === 'Unexpected status 404' ||\n error.message === 'Unexpected status 429'\n ) {\n return false;\n }\n return count < 2;\n },\n queryFn: async ({ signal }): Promise<ScenarioDTO[]> => {\n const [identity, githubToken] = await Promise.all([\n identityApi.getCredentials(),\n githubApi.getAccessToken(['repo']),\n ]);\n\n const response = await fetch(\n uriToFetchInitRiScTemplate(\n PREDEFINED_SCENARIOS_TEMPLATE_ID,\n isTestPredefinedScenariosEnabled\n ? PREDEFINED_SCENARIOS_SOURCE_TEST_REF\n : undefined,\n ),\n {\n signal,\n headers: {\n Authorization: `Bearer ${identity.token}`,\n 'GitHub-Access-Token': githubToken,\n },\n },\n );\n if (!response.ok) {\n throw new Error(`Unexpected status ${response.status}`);\n }\n const data: unknown = await response.json();\n const scenarios = (data as { scenarios?: ScenarioDTO[] })?.scenarios;\n if (!Array.isArray(scenarios)) {\n throw new Error('Source file has no scenarios array');\n }\n\n return scenarios.filter(dto =>\n PREDEFINED_SCENARIO_IDS.includes(dto.scenario.ID),\n );\n },\n });\n}\n"],"names":[],"mappings":"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"}
|
package/dist/urls/backend.esm.js
CHANGED
|
@@ -16,7 +16,8 @@ const BACKEND_URLS = {
|
|
|
16
16
|
// (1)
|
|
17
17
|
publishRiSc: "/api/proxy/risc-proxy/api/risc/:repoOwner/:repoName/publish/:id",
|
|
18
18
|
// (1)
|
|
19
|
-
fetchDefaultRiScTypeDescriptors: "/api/proxy/risc-proxy/api/initrisc"
|
|
19
|
+
fetchDefaultRiScTypeDescriptors: "/api/proxy/risc-proxy/api/initrisc",
|
|
20
|
+
fetchInitRiScTemplate: "/api/proxy/risc-proxy/api/initrisc/:id"
|
|
20
21
|
};
|
|
21
22
|
function buildNativeBackendUrls({
|
|
22
23
|
baseUrl,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"backend.esm.js","sources":["../../src/urls/backend.ts"],"sourcesContent":["// prettier-ignore\n\n// (1) Requires a method to inject tokens. Not yet implemented.\n// (2) Temporary primitive url until method (1) is implemented.\n\nexport const BACKEND_URLS = {\n\tgoogle_gcpCryptoKeys: '/api/proxy/risc-proxy/api/google/gcpCryptoKeys',\n\triScUri: '/api/proxy/risc-proxy/api/risc/:repoOwner/:repoName', // (1)\n\triScUri_temp: '/api/proxy/risc-proxy/api/risc', // (2)\n\topen_pr: '/api/proxy/risc-proxy/api/sops/:repoOwner/:repoName/openPullRequest/:branch', // (1)\n\tfetchAllRiScs: '/api/proxy/risc-proxy/api/risc/:repoOwner/:repoName/:version/all', // (1)\n\tfetchDifference: '/api/proxy/risc-proxy/api/risc/:repoOwner/:repoName/:id/difference', // (1)\n\tfetchRiSc: '/api/proxy/risc-proxy/api/risc/:repoOwner/:repoName/:id', // (1)\n deleteRiSc: 'api/proxy/risc-proxy/api/risc/:repoOwner/:repoName/:id', // (1)\n\tpublishRiSc: '/api/proxy/risc-proxy/api/risc/:repoOwner/:repoName/publish/:id', // (1)\n fetchDefaultRiScTypeDescriptors: '/api/proxy/risc-proxy/api/initrisc'
|
|
1
|
+
{"version":3,"file":"backend.esm.js","sources":["../../src/urls/backend.ts"],"sourcesContent":["// prettier-ignore\n\n// (1) Requires a method to inject tokens. Not yet implemented.\n// (2) Temporary primitive url until method (1) is implemented.\n\nexport const BACKEND_URLS = {\n\tgoogle_gcpCryptoKeys: '/api/proxy/risc-proxy/api/google/gcpCryptoKeys',\n\triScUri: '/api/proxy/risc-proxy/api/risc/:repoOwner/:repoName', // (1)\n\triScUri_temp: '/api/proxy/risc-proxy/api/risc', // (2)\n\topen_pr: '/api/proxy/risc-proxy/api/sops/:repoOwner/:repoName/openPullRequest/:branch', // (1)\n\tfetchAllRiScs: '/api/proxy/risc-proxy/api/risc/:repoOwner/:repoName/:version/all', // (1)\n\tfetchDifference: '/api/proxy/risc-proxy/api/risc/:repoOwner/:repoName/:id/difference', // (1)\n\tfetchRiSc: '/api/proxy/risc-proxy/api/risc/:repoOwner/:repoName/:id', // (1)\n deleteRiSc: 'api/proxy/risc-proxy/api/risc/:repoOwner/:repoName/:id', // (1)\n\tpublishRiSc: '/api/proxy/risc-proxy/api/risc/:repoOwner/:repoName/publish/:id', // (1)\n fetchDefaultRiScTypeDescriptors: '/api/proxy/risc-proxy/api/initrisc',\n fetchInitRiScTemplate: '/api/proxy/risc-proxy/api/initrisc/:id',\n};\n\nexport type RiScBackendUrls = {\n riScUri: string;\n uriToFetchAllRiScs: string;\n uriToFetchDifference: (id: string) => string;\n uriToFetchRiSc: (id: string) => string;\n uriToDeleteRiSc: (id: string) => string;\n uriToPublishRiSc: (id: string) => string;\n uriToFetchGcpCryptoKeys: string;\n uriToFetchDefaultRiScDescriptors: string;\n uriToFetchInitRiScTemplate: (id: string, ref?: string) => string;\n};\n\ntype BuildRiScBackendUrlsOptions = {\n baseUrl: string;\n owner: string;\n repo: string;\n version: string;\n};\n\n/** Native mode routes directly to the ros backend plugin. */\nexport function buildNativeBackendUrls({\n baseUrl,\n owner,\n repo,\n version,\n}: BuildRiScBackendUrlsOptions): RiScBackendUrls {\n const riScUri = `${baseUrl}/risc/${owner}/${repo}`;\n\n return {\n riScUri,\n uriToFetchAllRiScs: `${riScUri}/${version}/all`,\n uriToFetchDifference: (id: string) => `${riScUri}/${id}/difference`,\n uriToFetchRiSc: (id: string) => `${riScUri}/${id}`,\n uriToDeleteRiSc: (id: string) => `${riScUri}/${id}`,\n uriToPublishRiSc: (id: string) => `${riScUri}/publish/${id}`,\n uriToFetchGcpCryptoKeys: `${baseUrl}/google/gcpCryptoKeys`,\n uriToFetchDefaultRiScDescriptors: `${baseUrl}/initrisc`,\n uriToFetchInitRiScTemplate: (id: string, ref?: string) =>\n `${baseUrl}/initrisc/${id}${ref ? `?ref=${encodeURIComponent(ref)}` : ''}`,\n };\n}\n"],"names":[],"mappings":"AAKO,MAAM,YAAA,GAAe;AAAA,EAC3B,oBAAA,EAAsB,gDAAA;AAAA,EACtB,OAAA,EAAS,qDAAA;AAAA;AAAA,EACT,YAAA,EAAc,gCAAA;AAAA;AAAA,EACd,OAAA,EAAS,6EAAA;AAAA;AAAA,EACT,aAAA,EAAe,kEAAA;AAAA;AAAA,EACf,eAAA,EAAiB,oEAAA;AAAA;AAAA,EACjB,SAAA,EAAW,yDAAA;AAAA;AAAA,EACV,UAAA,EAAY,wDAAA;AAAA;AAAA,EACb,WAAA,EAAa,iEAAA;AAAA;AAAA,EACZ,+BAAA,EAAiC,oCAAA;AAAA,EACjC,qBAAA,EAAuB;AACzB;AAsBO,SAAS,sBAAA,CAAuB;AAAA,EACrC,OAAA;AAAA,EACA,KAAA;AAAA,EACA,IAAA;AAAA,EACA;AACF,CAAA,EAAiD;AAC/C,EAAA,MAAM,UAAU,CAAA,EAAG,OAAO,CAAA,MAAA,EAAS,KAAK,IAAI,IAAI,CAAA,CAAA;AAEhD,EAAA,OAAO;AAAA,IACL,OAAA;AAAA,IACA,kBAAA,EAAoB,CAAA,EAAG,OAAO,CAAA,CAAA,EAAI,OAAO,CAAA,IAAA,CAAA;AAAA,IACzC,sBAAsB,CAAC,EAAA,KAAe,CAAA,EAAG,OAAO,IAAI,EAAE,CAAA,WAAA,CAAA;AAAA,IACtD,gBAAgB,CAAC,EAAA,KAAe,CAAA,EAAG,OAAO,IAAI,EAAE,CAAA,CAAA;AAAA,IAChD,iBAAiB,CAAC,EAAA,KAAe,CAAA,EAAG,OAAO,IAAI,EAAE,CAAA,CAAA;AAAA,IACjD,kBAAkB,CAAC,EAAA,KAAe,CAAA,EAAG,OAAO,YAAY,EAAE,CAAA,CAAA;AAAA,IAC1D,uBAAA,EAAyB,GAAG,OAAO,CAAA,qBAAA,CAAA;AAAA,IACnC,gCAAA,EAAkC,GAAG,OAAO,CAAA,SAAA,CAAA;AAAA,IAC5C,0BAAA,EAA4B,CAAC,EAAA,EAAY,GAAA,KACvC,GAAG,OAAO,CAAA,UAAA,EAAa,EAAE,CAAA,EAAG,MAAM,CAAA,KAAA,EAAQ,kBAAA,CAAmB,GAAG,CAAC,KAAK,EAAE,CAAA;AAAA,GAC5E;AACF;;;;"}
|