UNPKG

@radixdlt/atom

Version:

Container for CRUD instructions known as 'Particles' that are sent to the Radix decentralized ledger

52 lines 2.74 kB
"use strict"; 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