forked from cerc-io/registry-sdk
* Set up eslint and husky * Fix eslint errors --------- Co-authored-by: neeraj <neeraj.rtly@gmail.com>
131 lines
2.2 KiB
TypeScript
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())
|
|
};
|
|
}
|
|
}
|