Projects STRLCPY gradejs Commits 5f2714a6
🤬
  • ■ ■ ■ ■ ■
    packages/public-api/src/clientApiRouter.test.ts
    skipped 46 lines
    47 47   const requestWebPageScanMock = jest.spyOn(systemApi, 'requestWebPageScan');
    48 48   requestWebPageScanMock.mockImplementation(async () => ({}));
    49 49   
    50  - const response = await api
    51  - .post('/client/requestWebPageScan')
     50 + await api
     51 + .post('/client/requestWebPageRescan')
    52 52   .set('Origin', 'http://localhost:3000')
    53 53   .send(JSON.stringify(siteUrl))
    54 54   .expect(200);
    skipped 29 lines
    84 84   siteUrl.toString(),
    85 85   webPageScan.id.toString()
    86 86   );
    87  - expect(response.body).toMatchObject({
     87 + 
     88 + const responseGet = await api
     89 + .get('/client/getWebPageScan')
     90 + .set('Origin', 'http://localhost:3000')
     91 + .send(JSON.stringify(siteUrl))
     92 + .expect(200);
     93 + expect(responseGet.body).toMatchObject({
    88 94   result: {
    89 95   data: {
    90 96   id: webPageScan.id.toString(),
    skipped 28 lines
    119 125   },
    120 126   });
    121 127   
    122  - const response = await api
    123  - .post('/client/requestWebPageScan')
     128 + await api
     129 + .post('/client/requestWebPageRescan')
    124 130   .set('Origin', 'http://localhost:3000')
    125 131   .send(JSON.stringify(siteUrl))
    126 132   .expect(200);
    127 133   
    128 134   expect(requestWebPageScanMock).toHaveBeenCalledTimes(0);
    129  - expect(response.body).toMatchObject({
     135 + 
     136 + const responseGet = await api
     137 + .get('/client/getWebPageScan')
     138 + .set('Origin', 'http://localhost:3000')
     139 + .send(JSON.stringify(siteUrl))
     140 + .expect(200);
     141 + expect(responseGet.body).toMatchObject({
    130 142   result: {
    131 143   data: {
    132 144   id: existingScan.id.toString(),
    skipped 17 lines
  • ■ ■ ■ ■ ■ ■
    packages/web/src/components/pages/Home.tsx
    1  -import React, { useCallback, useEffect } from 'react';
     1 +import React, { useCallback } from 'react';
    2 2  import { Error, Home } from 'components/layouts';
    3 3  import { trackCustomEvent } from '../../services/analytics';
    4 4  import { useAppDispatch, parseWebsite, useAppSelector, homeDefaultSelector } from '../../store';
    skipped 4 lines
    9 9   const dispatch = useAppDispatch();
    10 10   const state = useAppSelector(homeDefaultSelector);
    11 11   
    12  - // TODO: properly handle history/routing
    13  - useEffect(() => {
    14  - if (!state.isLoading && !state.isFailed && state.address) {
    15  - navigate(`/scan/${state.address}`);
    16  - }
    17  - });
    18  - 
    19 12   const handleDetectStart = useCallback(async (address: string) => {
    20 13   trackCustomEvent('HomePage', 'WebsiteSubmitted');
    21 14   // TODO: error state of input field, e.g. when empty
    22 15   await dispatch(parseWebsite(address));
     16 + 
     17 + // TODO: properly handle history/routing
     18 + if (!state.isLoading && !state.isFailed && address) {
     19 + navigate(`/scan/${encodeURIComponent(address)}`);
     20 + }
    23 21   }, []);
    24 22   
    25 23   if (state.isFailed) {
    skipped 17 lines
  • ■ ■ ■ ■ ■ ■
    packages/web/src/components/pages/WebsiteResults.tsx
    skipped 15 lines
    16 16   const dispatch = useAppDispatch();
    17 17   
    18 18   /* TODO
    19  - - Отключить фильтры из селекторов (временно) ./
    20  - - Прокинуть данные из packages в packagePreview (все что есть), формализовать тип pkg ./
    21  - - Разобраться с тем как работают фильтрующие компоненты. Мб прикрутить их в отдельный redux-слайс для порядку.
    22  - - Сформулировать типы для фильтров и вернуть их обратно в селекторы.
     19 + - Disable filters from selectors temporarity (done)
     20 + - Pass all data from `packages` to PackagePreview, formalize Package type (done)
     21 + - Connect filtering components, consider separate redux slice as a single source of truth about filters state
     22 + - Make up filters types, reenable filters
    23 23   */
    24 24   
    25 25   const { vulnerabilities, keywordsList, status, vulnerabilitiesCount, lastScanDate } =
    skipped 103 lines
  • ■ ■ ■ ■ ■ ■
    packages/web/src/components/ui/PackagePreview/PackagePreview.tsx
    skipped 46 lines
    47 47   };
    48 48   
    49 49   const deps = Object.keys(
    50  - pkg.registryMetadata?.versionSpecificValues?.[pkg.versionSet[pkg.versionSet.length - 1]]
    51  - .dependencies ?? {}
     50 + pkg.registryMetadata?.versionSpecificValues?.[pkg.registryMetadata?.latestVersion]
     51 + ?.dependencies ?? {}
    52 52   );
    53 53   
    54 54   return (
    skipped 240 lines
    295 295   
    296 296   <div className={styles.author}>
    297 297   {/* TODO: print all maintainers? Author is not a single entity */}
    298  - <span className={styles.authorName}>{pkg.registryMetadata?.maintainers?.[0].name}</span>
     298 + <span className={styles.authorName}>{pkg.registryMetadata?.maintainers?.[0]?.name}</span>
    299 299   <img
    300 300   className={styles.authorImage}
    301  - src={pkg.registryMetadata?.maintainers?.[0].avatar}
     301 + src={pkg.registryMetadata?.maintainers?.[0]?.avatar}
    302 302   alt=''
    303 303   />
    304 304   </div>
    skipped 5 lines
  • ■ ■ ■ ■ ■ ■
    packages/web/src/store/selectors/websiteResults.ts
    skipped 40 lines
    41 41  export type ScanStatus = ReturnType<typeof getScanStatus>;
    42 42   
    43 43  const getPackagesMemoized = memoize((result: GetWebPageScanOutput['scanResult']) => {
    44  - const packages: IdentifiedPackage[] = result?.identifiedPackages ?? [];
     44 + const packages: IdentifiedPackage[] = (result?.identifiedPackages ?? []).map((pkg) => {
     45 + return {
     46 + ...pkg,
     47 + approximateByteSize: pkg.moduleIds.reduce((acc: number, id) => {
     48 + const size: number = result?.identifiedModuleMap?.[id]?.approximateByteSize ?? 0;
     49 + return acc + size;
     50 + }, 0),
     51 + duplicate: false, // TODO
     52 + outdated: !!(
     53 + pkg.registryMetadata &&
     54 + !pkg.versionSet.some(
     55 + (ver) => pkg.registryMetadata && semver.eq(pkg.registryMetadata.latestVersion, ver)
     56 + )
     57 + ),
     58 + vulnerable: (result?.vulnerabilities[pkg.name]?.length ?? 0) > 0,
     59 + version: semverListAsRange(pkg.versionSet),
     60 + };
     61 + });
    45 62   
    46  - for (const pkg of packages) {
    47  - pkg.approximateByteSize = pkg.moduleIds.reduce((acc: number, id) => {
    48  - const size: number = result?.identifiedModuleMap?.[id]?.approximateByteSize ?? 0;
    49  - return acc + size;
    50  - }, 0);
    51  - pkg.duplicate = false; // TODO
    52  - pkg.outdated = !!(
    53  - pkg.registryMetadata &&
    54  - !pkg.versionSet.some(
    55  - (ver) => pkg.registryMetadata && semver.eq(pkg.registryMetadata.latestVersion, ver)
    56  - )
    57  - );
    58  - pkg.vulnerable = (result?.vulnerabilities[pkg.name]?.length ?? 0) > 0;
    59  - pkg.version = semverListAsRange(pkg.versionSet);
    60  - }
    61 63   return packages;
    62 64  });
    63 65   
    skipped 112 lines
Please wait...
Page is in error, reload to recover