@radixdlt/atom
Version:
Container for CRUD instructions known as 'Particles' that are sent to the Radix decentralized ledger
52 lines • 2.74 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.ResourceIdentifier = exports.isResourceIdentifier = void 0;
const neverthrow_1 = require("neverthrow");
const account_1 = require("@radixdlt/account");
const data_formats_1 = require("@radixdlt/data-formats");
const separator = '/';
const CBOR_BYTESTRING_PREFIX = 6;
const JSON_TAG = ':rri:';
const JSONDecoder = data_formats_1.taggedStringDecoder(JSON_TAG)((identifier) => fromString(identifier));
const jsonDecoding = data_formats_1.JSONDecoding.withDecoders(JSONDecoder).create();
const fromAddressAndName = (input) => {
const address = input.address;
const name = input.name;
const identifier = ['', address.toString(), name].join(separator);
return Object.assign(Object.assign(Object.assign({}, data_formats_1.JSONEncoding(data_formats_1.serializerNotNeeded)(() => `${JSON_TAG}${identifier}`)), data_formats_1.DSONObjectEncoding({
prefix: CBOR_BYTESTRING_PREFIX,
buffer: Buffer.from(identifier),
})), { address,
name, toString: () => identifier, equals: (other) => other.address.equals(address) && other.name === name });
};
const fromString = (identifierString) => {
const components = identifierString.split(separator);
if (components.length !== 3)
return neverthrow_1.err(new Error('Invalid RRI string'));
if (components[0].length !== 0)
return neverthrow_1.err(new Error('Expected leading /'));
const name = components[2];
if (name.length === 0)
return neverthrow_1.err(new Error('Expected non empty name'));
return account_1.Address.fromBase58String(components[1]).map((address) => (Object.assign(Object.assign(Object.assign({}, data_formats_1.JSONEncoding(data_formats_1.serializerNotNeeded)(() => `${JSON_TAG}${identifierString}`)), data_formats_1.DSONObjectEncoding({
prefix: CBOR_BYTESTRING_PREFIX,
buffer: Buffer.from(identifierString),
})), { address,
name, toString: () => identifierString, equals: (other) => other.address.equals(address) && other.name === name })));
};
const isResourceIdentifier = (something) => {
const inspection = something;
return (inspection.address !== undefined &&
inspection.name !== undefined &&
inspection.toString !== undefined &&
inspection.equals !== undefined);
};
exports.isResourceIdentifier = isResourceIdentifier;
const fromUnsafe = (input) => {
return exports.isResourceIdentifier(input) ? neverthrow_1.ok(input) : fromString(input);
};
exports.ResourceIdentifier = Object.assign(Object.assign({ JSON_TAG,
JSONDecoder }, jsonDecoding), { fromAddressAndName,
fromUnsafe,
fromString });
//# sourceMappingURL=resourceIdentifier.js.map