Files

Библиотека для работы с подписью данных @msb/crypto

  1. Состоит из 4 модулей:
  • core - ядро библиотеки для работы с подписью данных
  • install - модуль для проверки и установки криптомодуля
  • sign - модуль для подписи данных
  • verify - модуль для проверки подписи данных
  1. Установить зависимости:

    npm i @msb/crypto
    
  2. Инструкция для установки криптомодуля и сертификатов (https://confluence.gboteam.ru/pages/viewpage.action?pageId=121085377)

  3. Пример использования подписания документов:

/* eslint-disable @typescript-eslint/no-confusing-void-expression */
import type { FC } from 'react';
import { Button } from '@fractal-ui/core';
import type { ISignModalProps, ISignModalApi, ISignRequestData, IBaseEntity } from '@msb/crypto';
import { openSignModal } from '@msb/crypto';

const service = {
  sign: (docs: ISignRequestData[]) => docs.map((doc, index) => ({ id: doc.id ?? `ID ${index}` })),
  getSignData: async () => {
    const response = {
      data: {
        signDocuments: [
          {
            documentId: 'db20e321-7ed1-41a8-865b-b6b7ef6097a4',
            clientId: 'fb188766-6eff-4122-897e-0c24364c4ea2',
            signDataList: [
              {
                id: 'db20e321-7ed1-41a8-865b-b6b7ef6097a4',
                label: 'Письмо в Банк №28 от 08.08.2025',
                dssLabel: 'Письмо в Банк №28 от 08.08.2025',
                digest:
                  'eyJpZCI6ImRiMjBlMzIxLTdlZDEtNDFhOC04NjViLWI2YjdlZjYwOTdhNCIsImRhdGUiOiIyMDI1LTA4LTA4IiwibnVtYmVyIjoyOCwiYmFua0NsaWVudEluZm8ubmFtZSI6ItCd0JrQniBcItCU0L7RgNGC0LXRhS3Qv9GA0LjRhtC10L9cIiIsImJhbmtDbGllbnRJbmZvLmludGVybmF0aW9uYWxOYW1lIjoiTktPIFwiRG9ydGVraC1wcml0c2VwXCIiLCJiYW5rQ2xpZW50SW5mby5pbm5LaW8iOiI3NzQ1MDMyMzYwIiwiYmFua0NsaWVudEluZm8ub2dybk9ncmlwIjoiNTg1OTQyOTM1MDY4NyIsInR5cGVOYW1lIjoidGVzdDIiLCJhdHRhY2htZW50cy5maWxlTmFtZSI6WyJ0ZXN0LnR4dCJdLCJhdHRhY2htZW50cy5maWxlSGFzaCI6WyIxMmE1MDgzODE5MWI1NTA0ZjFlNWYyZmQwNzg3MTRjZjZiNTkyYjlkMjlhZjk5ZDBiMTBkOGQwMjg4MWMzODU3Il0sImF0dGFjaG1lbnRzLmZpbGVTaXplIjpbNF0sImJyYW5jaEluZm8uZmlsaWFsTmFtZSI6ItCkLdCbINCR0JDQndCa0JAg0JPQn9CRICjQkNCeKSBcItCf0KDQmNCS0J7Qm9CW0KHQmtCY0JlcIiIsImJyYW5jaEluZm8uYmljIjoiMDQyMjAyNzY0IiwiYnJhbmNoSW5mby5jb2RlIjoiMDEwIn0=',
                type: 'DOCUMENT',
                signDataViewList: [
                  {
                    label: 'Основная информация',
                    signFieldsViewList: [
                      {
                        label: 'Тип документа',
                        value: 'test2',
                      },
                    ],
                  },
                  {
                    label: 'Отправитель',
                    signFieldsViewList: [
                      {
                        label: 'Организация',
                        value: 'НКО "Дортех-прицеп"',
                      },
                      {
                        label: 'Международное наименование организации',
                        value: 'NKO "Dortekh-pritsep"',
                      },
                      {
                        label: 'ИНН',
                        value: '7745032360',
                      },
                      {
                        label: 'ОГРН',
                        value: '5859429350687',
                      },
                    ],
                  },
                  {
                    label: 'Получатель',
                    signFieldsViewList: [
                      {
                        label: 'Филиал',
                        value: '010 Ф-Л БАНКА ГПБ (АО) "ПРИВОЛЖСКИЙ"',
                      },
                      {
                        label: 'БИК',
                        value: '042202764',
                      },
                    ],
                  },
                ],
              },
              {
                id: '526e7ed4-019b-489e-8f67-11c540e7179e',
                label: 'Вложение №1',
                dssLabel: 'Вложение №1',
                type: 'ATTACHMENT',
                signDataViewList: [
                  {
                    label: 'Описание вложения',
                    signFieldsViewList: [
                      {
                        label: 'Наименование файла',
                        value: 'test.txt',
                      },
                      {
                        label: 'Хешсумма',
                        value: '12a50838191b5504f1e5f2fd078714cf6b592b9d29af99d0b10d8d02881c3857',
                      },
                      {
                        label: 'Размер',
                        value: '4 б',
                      },
                    ],
                  },
                ],
              },
            ],
          },
        ],
      },
    };

    if (response?.data?.signDocuments) {
      return { signDocuments: (response.data?.signDocuments ?? []).map(signDocument => ({ ...signDocument, clientId: '' })) };
    }

    return Promise.reject({ error: '' });
  },
  send: (sendData: IBaseEntity[]) => Promise.resolve(sendData.map((doc, index) => doc.id ?? `ID ${index}`)),
} as unknown as ISignModalApi;

const SignDataComponent: FC<ISignModalProps['modalParams'] & Pick<ISignModalProps, 'type'>> = ({ type, ...props }) => {
  const handleClick = async () => {
    try {
      await openSignModal({
        api: service,
        signData: {
          documentsRegistry: [
            {
              documents: [{ id: 'db20e321-7ed1-41a8-865b-b6b7ef6097a4' }],
              clientId: 'fb188766-6eff-4122-897e-0c24364c4ea2',
              clientName: '',
            },
          ],
          statistics: {
            documentsCount: 10,
            documentsSum: 0,
            clientsCount: 1,
          },
        },
        type,
      });
    } catch (e: unknown) {
      console.error(JSON.stringify(e));
    }
  };

  return (
    <Button dataAction="open-installer" onClick={handleClick}>
      Открыть
    </Button>
  );
};

export { SignDataComponent };

  1. Пример использования @eco/crypto в стриме @eco/dsf (https://bitbucket.gboteam.ru/projects/ECO_FE/repos/eco-dsf/browse)