Перейти к содержанию

@spatium/sdk

Классы

Интерфейсы

Псевдонимы типов

Curve

Ƭ Curve: EcdsaCurve | EddsaCurve


EcdsaCurve

Ƭ EcdsaCurve: "secp256k1"


EcdsaSignature

Ƭ EcdsaSignature: Object

Oбъявления типа

Имя Тип
r string
recovery number
s string

EddsaCurve

Ƭ EddsaCurve: "ed25519"


EddsaSignature

Ƭ EddsaSignature: Object

Oбъявления типа

Имя Тип
R string
s string

StorageData

Ƭ StorageData: unknown

Хранение blob данных

SDK хранит только сериализуемые JSON данные


StorageFilter

Ƭ StorageFilter: Partial<{ room: string ; topic: string }>


StorageMeta

Ƭ StorageMeta: Object

Идентификационные данные хранилища

Каждая уникальная комбинация room и topic должна идентифицировать хранилище

Oбъявления типа

Имя Тип Описание
room string Скоуп данных, таких как отдельный пользователь, отдельный сеанс связи, и т.д.
topic string Тэг данных внутри скоупа, например, отдельное свойство объекта пользователя, отдельный шаг сеанса сязи, и т.д.

StoragePayload

Ƭ StoragePayload: StorageMeta & { data: StorageData }


TransportCallback

Ƭ TransportCallback: (meta: TransportMeta, data: TransportData) => Promise<void>

Oбъявления типа

▸ (meta, data): Promise<void>

Параметры
Имя Тип
meta TransportMeta
data TransportData
Возвращает

Promise<void>


TransportData

Ƭ TransportData: unknown

Отправка blob данных

SDK отправляет только сериализуемые JSON данные


TransportFilter

Ƭ TransportFilter: Partial<TransportMeta>

Фильтрация сообщений

В качестве фильтрации сообщений используется частичная мета. Принимающая сторона может решить дождаться сообщения с определенным room, topic или даже любого сообщения (с {} в качестве фильтра)


TransportMeta

Ƭ TransportMeta: Object

Идентификационные данные сообщения

Каждое переданное сообщение содержит эти поля для корректной идентификации и обнаружения

Oбъявления типа

Имя Тип Описание
room string Скоуп сообщения, таких как отдельный пользователь, отдельный сеанс связи, и т.д.
topic string Тэг сообщения внутри скоупа, например, отдельное свойство объекта пользователя, отдельный шаг сеанса сязи, и т.д.

TransportPayload

Ƭ TransportPayload: TransportMeta & { data: TransportData }

Переменные

NIL

Const NIL: string = _NIL

Функции

decrypt

decrypt(data, key): string

Параметры

Имя Тип
data string
key string

Возвращает

string


deriveHDKey

deriveHDKey(secret, coin, account): string

Параметры

Имя Тип
secret string
coin number
account number

Возвращает

string


deserialize

deserialize(data): unknown

Параметры

Имя Тип
data string

Возвращает

unknown


encodeEddsaBN

encodeEddsaBN(curve, s): string

Параметры

Имя Тип
curve "ed25519"
s string

Возвращает

string


encodeEddsaPoint

encodeEddsaPoint(curve, p): string

Параметры

Имя Тип
curve "ed25519"
p string

Возвращает

string


encrypt

encrypt(data, key, randomSource): string

Параметры

Имя Тип
data string
key string
randomSource (size: number) => string

Возвращает

string


fromInternal

fromInternal(value, decimals): string

Параметры

Имя Тип
value string
decimals number

Возвращает

string


getEcdsaPublicKey

getEcdsaPublicKey(driver, secretId, syncSessionId): Promise<string>

Получение составного публичного ключа из уже выполненного сеанса синхронизации (отдельный помощник)

См. также

getEcdsaPublicKey

Пример

// Считаем, что процедура синхронизации уже пройдена

const publicKey = await getEcdsaPublicKey(protocol, secretId, syncSessionId);

Параметры

Имя Тип Описание
driver Protocol имплементация протокола
secretId string ID (UUID) of a secret used for synchronization
syncSessionId string ID (UUID) процедуры синхронизации

Возвращает

Promise<string>

составной публичный ключ, синхронизированный в ходе этой сессии


getEddsaPublicKey

getEddsaPublicKey(driver, secretId, syncSessionId): Promise<string>

Получение составного публичного ключа из уже выполненного сеанса синхронизации (отдельный помощник)

См. также

getEddsaPublicKey

Пример

// Считаем, что процедура синхронизации уже пройдена

const publicKey = await getEddsaPublicKey(protocol, secretId, syncSessionId);

Параметры

Имя Тип Описание
driver Protocol имплементация протокола
secretId string ID (UUID) секрета используемого для синхронизации
syncSessionId string ID (UUID) процедуры синхронизации

Возвращает

Promise<string>

составной публичный ключ, синхронизированный в ходе этой сессии


matchOptional

matchOptional<T>(a, b): boolean

Параметры типа

Имя
T

Параметры

Имя Тип
a T
b undefined | T

Возвращает

boolean


matchTransportMeta

matchTransportMeta(meta, filter): boolean

Сравнение меты с фильтром

Полезная имплементация для фильтрации сообщений

Параметры

Имя Type Описание
meta TransportMeta идентификаторы сообщений
filter Partial<TransportMeta> фильтр входящих сообщений

Возвращает

boolean

true если предоставленная мета соответствует фильтру


pack

pack<T>(_schema, v): unknown

Параметры типа

Имя Тип
T extends ZodType<any, any, any, T>

Параметры

Имя Тип
_schema T
v TypeOf<T>

Возвращает

unknown


randomBytes

randomBytes(length): string

Параметры

Имя Тип
length number

Возвращает

string


read

read(driver, meta): Promise<StorageData | null>

Чтение данных, хранящихся в предоставленной мете (отдельный помощник)

Этот метод обычно используется в стратегии постоянного хранилища

См. также

read

Параметры

Имя Тип Описание
driver StorageDriver StorageDriver имплементация
meta StorageMeta составной идентификатор

Возвращает

Promise<StorageData | null>

хранящиеся данные или null, если такие не найдены


receive

receive(driver, filter): Promise<TransportPayload>

Получение определенного сообщения

Этот метода ожидает, пока не придет подходящее сообщение (определяется параметром filter) и возвращает данные сообщения. Если указан фильтр assert, сообщение так же с ним сравнивается и возвращается если не прошло подтверждение. Такое поведение может быть полезно при внезапной отписке, получении некорректных сообщений и подобных ошибочных сценариях.

Параметры

Имя Тип Описание
driver TransportDriver TransportDriver имплементация
filter Partial<TransportMeta> фильтр входящего сообщения

Возвращает

Promise<TransportPayload>

payload полученного сообщения (и мета, и данные)

receive(driver, filter, timeout?): Promise<TransportPayload>

Параметры

Имя Тип
driver TransportDriver
filter Partial<TransportMeta>
timeout? number

Возвращает

Promise<TransportPayload>

receive(driver, filter, assert): Promise<TransportPayload>

Параметры

Имя Тип
driver TransportDriver
filter Partial<TransportMeta>
assert Partial<TransportMeta>

Возвращает

Promise<TransportPayload>

receive(driver, filter, assert, timeout?): Promise<TransportPayload>

Параметры

Имя Тип
driver TransportDriver
filter Partial<TransportMeta>
assert Partial<TransportMeta>
timeout? number

Возвращает

Promise<TransportPayload>


safeDecrypt

safeDecrypt(data, key): null | string

Параметры

Имя Тип
data string
key string

Возвращает

null | string


safeDeserialize

safeDeserialize(data): unknown

Параметры

Имя Тип
data string

Возвращает

unknown


safeSecureUnpack

safeSecureUnpack<T>(schema, data): null | TypeOf<T>

Параметры типа

Имя Тип
T extends ZodType<any, any, any, T>

Параметры

Имя Тип
schema T
data unknown

Возвращает

null | TypeOf<T>


safeUnpack

safeUnpack<T>(_schema, data): null | TypeOf<T>

Параметры типа

Имя Тип
T extends ZodType<any, any, any, T>

Параметры

Имя Тип
_schema T
data unknown

Возвращает

null | TypeOf<T>


securePack

securePack<T>(schema, v, randomSource): string

Параметры типа

Имя Тип
T extends ZodType<any, any, any, T>

Параметры

Имя Тип
schema T
v TypeOf<T>
randomSource (size: number) => string

Возвращает

string


secureUnpack

secureUnpack<T>(schema, data): TypeOf<T>

Параметры типа

Имя Тип
T extends ZodType<any, any, any, T>

Параметры

Имя Тип
schema T
data unknown

Возвращает

TypeOf<T>


send

send(driver, meta, data): Promise<void>

Отправка сообщения с помощью транспорта (отдельный помощник)

Этот метода ожидает, пока сообщение будет отправлено (но не дожидается получения) и отдает в ответ возможна ли его отправка. Можно определить пункт назначения и способ отправки.

См. также

send

Параметры

Имя Тип Описание
driver TransportDriver TransportDriver имплементация
meta TransportMeta идентификатор сообщения
data unknown данные сообщения

Возвращает

Promise<void>


serialize

serialize(data): string

Параметры

Имя Тип
data unknown

Возвращает

string


signEcdsaMessage

signEcdsaMessage(driver, signSessionId, syncSessionId, message): Promise<EcdsaSignature>

Генерирует распределенную ECDSA подпись для данного сообщения (отдельный помощник)

Для этого метода необходима уже пройденная процедура синхронизации и так же ничего не должно быть помещено в постоянное хранилище. Сообщения с объемом информации отличным от 32 байт будут дополнены/урезаны в соответствии с ECDSA алгоритмом.

См. также

signEcdsaMessage

Пример

// Считаем, что процедура синхронизации уже пройдена и соединение установлено

// Генерируем рандомный session ID для новой сессии подписания
const signSessionId = uuid(randomBytes);

// Сообщение к подписанию
const message = '7hJ9yN2OdIQo2kJu0arZgw2EKnMX5FGtQ6jlCWuLXCM='

//  Генерируем ECDSA подпись
const signature = await signEcdsaMessage(protocol, secretId, syncSessionId, signSessionId, message);

// Верифицируем подпись к составному ключу с внешней библиотекой (тут - elliptic.js)
expect(new ec('secp256k1').verify(
  Buffer.from(message, 'base64'),
  {
    s: Buffer.from(signature.s, 'base64'),
    r: Buffer.from(signature.r, 'base64'),
    recoveryParam: signature.recovery,
  },
  Buffer.from(publicKey, 'base64'),
)).toBeTruthy();

Параметры

Имя Тип Описание
driver Protocol имплементация протокола
secretId string ID (UUID) секрета для синхронизации
signSessionId string ID (UUID) данной процедуры подписания
syncSessionId string ID (UUID) соответствующей процедуры синхронизации
message string сообщение (32 байта base64-encoded) к подписанию

Возвращает

Promise<EcdsaSignature>

ECDSA подпись в стандартном формате


signEddsaMessage

signEddsaMessage(driver, secretId, syncSessionId, signSessionId, message): Promise<EddsaSignature>

Генерирует распределенную EDDSA подпись для данного сообщения (отдельный помощник)

Для этого метода необходима уже пройденная процедура синхронизации и так же ничего не должно быть помещено в постоянное хранилище. Сообщения с объемом информации отличным от 32 байт будут дополнены/урезаны в соответствии с EDDSA алгоритмом.

См. также

signEddsaMessage

Пример

// Считаем, что процедура синхронизации уже пройдена и соединение установлено

// Генерируем рандомный session ID для новой сессии подписания
const signSessionId = uuid(randomBytes);

// Сообщение к подписанию
const message = '7hJ9yN2OdIQo2kJu0arZgw2EKnMX5FGtQ6jlCWuLXCM='

//  Генерируем EDDSA подпись
const signature = await signEddsaMessage(protocol, secretId, syncSessionId, signSessionId, message);

// Верифицируем подпись к составному ключу с внешней библиотекой (тут - elliptic.js)
expect(new ed('ed25519').verify(
  Buffer.from(message, 'base64').toString('hex'),
  Buffer.concat([
    Buffer.from(encodeEddsaPoint('ed25519', signature.R), 'base64'),
    Buffer.from(encodeEddsaBN('ed25519', signature.s), 'base64'),
  ]).toString('hex'),
  Buffer.from(encodeEddsaPoint('ed25519', publicKey), 'base64').toString('hex'),
)).toBeTruthy();

Параметры

Имя Тип Описание
driver Protocol имплементация протокола
signSessionId string ID (UUID) данной процедуры подписания
syncSessionId string ID (UUID) соответствующей процедуры синхронизации
message string сообщение (32 байта base64-encoded) к подписанию

Возвращает

Promise<EddsaSignature>

EDDSA подпись в стандартном формате


syncDistributedEcdsaKey

syncDistributedEcdsaKey(driver, secretId, syncSessionId, curve, derivationCoin, derivationAccount): Promise<string>

Выполняет процедуру синхронизации распределенного ключа (отдельный помощник)

Каждый секрет используется независимо для генерации фрагментов распределенного ключа (BIP-44 с путем m/44'/(coin)'/(account)'/0'/0'), и после с этими фрагментами выполняется синхронизация MPC ключа для получения составного публичного ключа для этой пары.

Вопреки тому, что каждая сессия содержит уникальный сет данных, полученный ключ детерминирован для последующих синхронизаций, например, каждый набор секретов, монета и аккаунт всегда создадут тот же составной ключ (и эфемерные приватные ключи)

В результате этой операции новые данные синхронизации сохранены в постоянное хранилище, доступ к которым можно получить с помощью session ID.

С этого момента можно свободно вызывать getEcdsaPublicKey или signEcdsaMessage пока данные синхронизации (или секрет) доступны в хранилище.

См. также

syncDistributedEcdsaKey

Пример

// Считаем, что процедура синхронизации уже пройдена и соединение установлено

// Генерируем рандомный session ID для новой сессии подписания
const syncSessionId = uuid(randomBytes);

// Выполняем ECDSA-over-secp256k1 процедуру синхронизации для ключа с путем ```m/44'/0'/0'/0'/0'```
const publicKey = await syncDistributedEcdsaKey(protocol, secretId, syncSessionId, 'secp256k1', 0, 0);

// К этому моменту данные синхронизации уже сохранены в хранилище и составной ключ доступен к получению
const _publicKey = await getEcdsaPublicKey(protocol, secretId, syncSessionId);

// Этот ключ, очевидно, является тем же ключом, который мы получаем из самой процедуры синхронизации
expect(publicKey).toBe(_publicKey);

Параметры

Имя Тип Описание
driver Protocol имплементация протокола
syncSessionId string ID (UUID) данной процедуры синхронизации
secretId string ID (UUID) секрета используемого для синхронизации
curve "secp256k1" эллиптическая кривая (ECC) (на данный момент поддерживается только secp256k1)
derivationCoin number coin свойство формирования HD ключа (BIP-44)
derivationAccount number account свойство формирования HD ключа (BIP-44)

Возвращает

Promise<string>

составной публичный ключ (который так же можно получить позже с помощью getEcdsaPublicKey)


syncDistributedEddsaKey

syncDistributedEddsaKey(driver, secretId, syncSessionId, curve, derivationCoin, derivationAccount): Promise<string>

Выполняет процедуру синхронизации распределенного ключа (отдельный помощник)

Каждый секрет используется независимо для генерации фрагментов распределенного ключа (BIP-44 с путем m/44'/(coin)'/(account)'/0'/0'), и после с этими фрагментами выполняется синхронизация MPC ключа для получения составного публичного ключа для этой пары.

Вопреки тому, что каждая сессия содержит уникальный сет данных, полученный ключ детерминирован для последующих синхронизаций, например, каждый набор секретов, монета и аккаунт всегда создадут тот же составной ключ (и эфемерные приватные ключи)

В результате этой операции новые данные синхронизации сохранены в постоянное хранилище, доступ к которым можно получить с помощью session ID.

С этого момента можно свободно вызывать getEddsaPublicKey или signEddsaMessage пока данные синхронизации (или секрет) доступны в хранилище.

См. также

syncDistributedEddsaKey

Пример

// Считаем, что процедура синхронизации уже пройдена и соединение установлено

// Генерируем рандомный session ID для новой сессии подписания
const syncSessionId = uuid(randomBytes);

// Выполняем EDDSA-over-secp256k1 процедуру синхронизации для ключа с путем ```m/44'/0'/0'/0'/0'```
const publicKey = await syncDistributedEddsaKey(protocol, secretId, syncSessionId, 'ed25519', 0, 0);

// К этому моменту данные синхронизации уже сохранены в хранилище и составной ключ доступен к получению
const _publicKey = await getEddsaPublicKey(protocol, secretId, syncSessionId);

// Этот ключ, очевидно, является тем же ключом, который мы получаем из самой процедуры синхронизации
expect(publicKey).toBe(_publicKey);

Параметры

Имя Тип Описание
driver Protocol имплементация протокола
secretId string ID (UUID) секрета используемого для синхронизации
syncSessionId string ID (UUID) данной процедуры синхронизации
curve "secp256k1" эллиптическая кривая (ECC) (на данный момент поддерживается только secp256k1)
derivationCoin number coin свойство формирования HD ключа (BIP-44)
derivationAccount number account свойство формирования HD ключа (BIP-44)

Возвращает

Promise<string>

составной публичный ключ (который так же можно получить позже с помощью getEddsaPublicKey)


take

take(driver, meta): Promise<StorageData | null>

Принимает данные, хранящиеся внутри предоставленной меты и удаляет оригинал (отдельный помощник)

Этот метод обычно применяется при использовании стратегии с временным хранилищем как способ удаления сохраненных записей.

См. также

take

Параметры

Имя Тип Описание
driver StorageDriver StorageDriver имплемнтация
meta StorageMeta составной идентификатор

Возвращает

Promise<StorageData | null>

хранящиеся данные или null, если такие не найдены


toInternal

toInternal(value, decimals): string

Параметры

Имя Тип
value string
decimals number

Возвращает

string


unpack

unpack<T>(_schema, data): TypeOf<T>

Параметры типа

Имя Тип
T extends ZodType<any, any, any, T>

Параметры

Имя Тип
_schema T
data unknown

Возвращает

TypeOf<T>


uuid

uuid(randomSource): string

Параметры

Имя Тип
randomSource (size: number) => string

Возвращает

string


write

write(driver, meta, data): Promise<void>

Записывает блок данных в хранилище, уникально идентифицируется метой

Если такой блок уже существует, метод его переписывает

См. также

write

Параметры

Имя Тип Описание
driver StorageDriver StorageDriver implementation
meta StorageMeta составной идентификатор
data unknown блок данных

Возвращает

Promise<void>