UNPKG

@lit-protocol/auth-helpers

Version:

This submodule manages permissions and capabilities related to accessing specific resources on the blockchain. It utilizes features from the 'siwe' and 'siwe-recap' libraries to verify and handle data, allowing users to encode and decode session capabilit

88 lines 3.99 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.addRecapToSiweMessage = exports.generateSessionCapabilityObjectWithWildcards = exports.createCapacityCreditsResourceData = void 0; exports.sanitizeSiweMessage = sanitizeSiweMessage; const constants_1 = require("@lit-protocol/constants"); const recap_session_capability_object_1 = require("../recap/recap-session-capability-object"); /** * Sanitizes a SIWE message by unescaping double-escaped newlines and replacing escaped double quotes with single quotes. * * @param message - The SIWE message to sanitize. * @returns The sanitized SIWE message. */ function sanitizeSiweMessage(message) { let sanitizedMessage = message.replace(/\\\\n/g, '\\n'); sanitizedMessage = sanitizedMessage.replace(/\\"/g, "'"); return sanitizedMessage; } /** * Creates the resource data for a capacity delegation request. * @param params - The capacity delegation fields. * @returns The capacity delegation request object. */ const createCapacityCreditsResourceData = (params) => { return { ...(params.delegateeAddresses ? { delegate_to: params.delegateeAddresses.map((address) => address.startsWith('0x') ? address.slice(2) : address), } : {}), ...(params.uses !== undefined ? { uses: params.uses.toString() } : {}), }; }; exports.createCapacityCreditsResourceData = createCapacityCreditsResourceData; /** * Generates wildcard capability for each of the LIT resources * specified. * @param litResources is an array of LIT resources * @param addAllCapabilities is a boolean that specifies whether to add all capabilities for each resource */ const generateSessionCapabilityObjectWithWildcards = async (litResources, addAllCapabilities) => { const sessionCapabilityObject = new recap_session_capability_object_1.RecapSessionCapabilityObject({}, []); // disable for now const _addAllCapabilities = addAllCapabilities ?? false; if (_addAllCapabilities) { for (const litResource of litResources) { sessionCapabilityObject.addAllCapabilitiesForResource(litResource); } } return sessionCapabilityObject; }; exports.generateSessionCapabilityObjectWithWildcards = generateSessionCapabilityObjectWithWildcards; /** * Adds recap capabilities to a SiweMessage. * @param siweMessage - The SiweMessage to add recap capabilities to. * @param resources - An array of LitResourceAbilityRequest objects representing the resources and abilities to add. * @returns The updated SiweMessage with recap capabilities added. * @throws An error if the resources array is empty or if litNodeClient is not provided. * @throws An error if the generated capabilities fail to verify for any resource and ability. */ const addRecapToSiweMessage = async ({ siweMessage, resources, }) => { if (!resources || resources.length < 1) { throw new constants_1.InvalidArgumentException({ info: { resources, siweMessage, }, }, 'resources is required'); } for (const request of resources) { const recapObject = await (0, exports.generateSessionCapabilityObjectWithWildcards)([ request.resource, ]); recapObject.addCapabilityForResource(request.resource, request.ability, request.data); const verified = recapObject.verifyCapabilitiesForResource(request.resource, request.ability); if (!verified) { throw new constants_1.UnknownError({ info: { recapObject, request, }, }, `Failed to verify capabilities for resource: "${request.resource}" and ability: "${request.ability}`); } siweMessage = recapObject.addToSiweMessage(siweMessage); } return siweMessage; }; exports.addRecapToSiweMessage = addRecapToSiweMessage; //# sourceMappingURL=siwe-helper.js.map