raiden-ts
Version:
Raiden Light Client Typescript/Javascript SDK
136 lines • 5.97 kB
JavaScript
"use strict";
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
__setModuleDefault(result, mod);
return result;
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.ServicesValidityMap = exports.SuggestedPartners = exports.SuggestedPartner = exports.LastIOUResults = exports.IOU = exports.PFS = exports.PfsError = exports.PfsResult = exports.InputPaths = exports.Paths = exports.Fee = exports.RoutesExtra = exports.AddressMetadataMap = exports.AddressMetadata = exports.Path = exports.PfsModeC = exports.PfsMode = exports.ServiceDeviceId = exports.ServiceC = exports.Service = void 0;
const Either_1 = require("fp-ts/lib/Either");
const t = __importStar(require("io-ts"));
const invert_1 = __importDefault(require("lodash/invert"));
const types_1 = require("../utils/types");
// it's like an enum, but with literals
exports.Service = {
PFS: 'path_finding',
MS: 'monitoring',
};
exports.ServiceC = t.keyof((0, invert_1.default)(exports.Service));
exports.ServiceDeviceId = {
[exports.Service.PFS]: 'PATH_FINDING',
[exports.Service.MS]: 'MONITORING',
};
exports.PfsMode = {
disabled: 'disabled',
auto: 'auto',
onlyAdditional: 'onlyAdditional',
};
exports.PfsModeC = t.keyof((0, invert_1.default)(exports.PfsMode));
exports.Path = t.readonlyArray(types_1.Address);
const _AddressMetadata = t.readonly(t.type({
user_id: t.string,
displayname: t.string,
capabilities: t.string,
}));
/** metadata/presence information of an address */
exports.AddressMetadata = _AddressMetadata;
const _AddressMetadataMap = t.readonly(t.record(t.string, exports.AddressMetadata));
const addressMetadataMapPredicate = (u) => t.array(types_1.Address).is(Object.keys(u));
/** an address_metadata map which decodes to checksummed addresses as keys */
exports.AddressMetadataMap = new t.RefinementType('AddressMetadataMap', (u) => _AddressMetadataMap.is(u) && addressMetadataMapPredicate(u), (i, c) => {
const e = _AddressMetadataMap.validate(i, c);
if ((0, Either_1.isLeft)(e))
return e;
const a = e.right;
const res = {};
// for each key of address_metadata's record, validate/decode it as Address
for (const [addr, meta] of Object.entries(a)) {
const ev = types_1.Address.validate(addr, c);
if ((0, Either_1.isLeft)(ev))
return ev;
res[ev.right] = meta;
}
return t.success(res);
}, _AddressMetadataMap.encode, _AddressMetadataMap, addressMetadataMapPredicate);
exports.RoutesExtra = t.partial({ address_metadata: exports.AddressMetadataMap });
exports.Fee = (0, types_1.Int)(32);
/** Codec for raiden-ts internal representation of a PFS result/routes */
exports.Paths = t.readonlyArray(t.readonly(t.intersection([t.type({ path: exports.Path, fee: exports.Fee }), exports.RoutesExtra])));
/**
* A broader codec representing paths received as input:
* - paths array can come on a `route` or `path` member
* - `fee` represents the final fee to be used, `estimated_fee` is what comes from PFS and can be
* increased of fee margins
* - rest is kept (currently, `address_metadata` map)
* Paths is a specific subset of InputPaths
*/
exports.InputPaths = t.readonlyArray(t.readonly(t.intersection([
t.union([t.type({ route: exports.Path }), t.type({ path: exports.Path })]),
t.union([t.type({ fee: exports.Fee }), t.type({ estimated_fee: exports.Fee })]),
exports.RoutesExtra,
])));
/** Codec for result from PFS path request */
exports.PfsResult = t.readonly(t.type({ result: exports.InputPaths }));
/** Codec for PFS API returned error */
exports.PfsError = t.readonly(t.intersection([
t.type({
error_code: t.number,
errors: t.string,
}),
t.partial({ error_details: t.record(t.string, t.unknown) }),
]));
/**
* A PFS server/service instance info
*/
exports.PFS = t.readonly(t.type({
address: types_1.Address,
url: t.string,
matrixServer: t.string,
rtt: t.number,
price: (0, types_1.UInt)(32),
token: types_1.Address,
validTill: t.number,
}));
/**
* An IOU used to pay the services
*/
exports.IOU = t.readonly(t.type({
sender: types_1.Address,
receiver: types_1.Address,
amount: (0, types_1.UInt)(32),
claimable_until: (0, types_1.UInt)(32),
one_to_n_address: types_1.Address,
chain_id: (0, types_1.UInt)(32),
}));
exports.LastIOUResults = t.readonly(t.type({ last_iou: (0, types_1.Signed)(exports.IOU) }));
exports.SuggestedPartner = t.readonly(t.type({
address: types_1.Address,
capacity: (0, types_1.UInt)(32),
centrality: t.union([t.number, t.string]),
score: t.union([t.number, t.string]),
uptime: t.union([t.number, t.string]),
}), 'SuggestedPartner');
exports.SuggestedPartners = t.array(exports.SuggestedPartner, 'SuggestedPartners');
exports.ServicesValidityMap = t.readonly(t.record(t.string, t.number), 'ServicesValidityMap');
//# sourceMappingURL=types.js.map