registry-sdk/src/types.ts
Nabarun Gogoi de0ac597a1
Setup eslint and husky pre-commit (#3)
* Set up eslint and husky

* Fix eslint errors

---------

Co-authored-by: neeraj <neeraj.rtly@gmail.com>
2024-03-07 09:47:05 +05:30

131 lines
2.2 KiB
TypeScript

import assert from 'assert';
import { Validator } from 'jsonschema';
import RecordSchema from './schema/record.json';
import { Util } from './util';
/**
* Record.
*/
export class Record {
_record: any;
/**
* New Record.
*/
constructor (record: any) {
assert(record);
const validator = new Validator();
const result = validator.validate(record, RecordSchema);
if (!result.valid) {
result.errors.map(console.error);
throw new Error('Invalid record input.');
}
this._record = record;
}
get attributes () {
return Buffer.from(JSON.stringify(this._record), 'binary');
}
/**
* Serialize record.
*/
serialize () {
return {
id: '_',
bond_id: '_',
create_time: '_',
expiry_time: '_',
// Setting deleted as false (zero value) throws error in EIP712 signature verification.
deleted: true,
attributes: this.attributes
};
}
/**
* Get message to calculate record signature.
*/
getMessageToSign () {
return Util.sortJSON(this._record);
}
}
/**
* Record Signature.
*/
export class Signature {
_pubKey: string;
_sig: string;
/**
* New Signature.
*/
constructor (pubKey: string, sig: string) {
assert(pubKey);
assert(sig);
this._pubKey = pubKey;
this._sig = sig;
}
/**
* Serialize Signature.
*/
serialize () {
return Util.sortJSON({
pub_key: this._pubKey,
sig: this._sig
});
}
}
/**
* Message Payload.
*/
export class Payload {
_record: Record;
_signatures: Signature[];
/**
* New Payload.
*/
constructor (record: Record, ...signatures: Signature[]) {
assert(record);
this._record = record;
this._signatures = signatures;
}
get record () {
return this._record;
}
get signatures () {
return this._signatures;
}
/**
* Add message signature to payload.
*/
addSignature (signature: any) {
assert(signature);
this._signatures.push(signature);
}
/**
* Serialize Payload.
*/
serialize () {
// return Util.sortJSON({
// });
return {
record: this._record.serialize(),
signatures: this._signatures.map(s => s.serialize())
};
}
}