@lit-protocol/auth-helpers
Version:
Advanced authentication utilities for managing blockchain resource permissions and capabilities within the Lit Protocol ecosystem. Built on top of SIWE (Sign-In with Ethereum) and SIWE-RECAP for robust authentication flows.
63 lines • 2.93 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.addRecapToSiweMessage = exports.createCapacityCreditsResourceData = void 0;
exports.sanitizeSiweMessage = sanitizeSiweMessage;
/**
* 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.capacityTokenId ? { nft_id: [params.capacityTokenId] } : {}), // Conditionally include nft_id
...(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;
/**
* 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.
* @param litNodeClient - The LitNodeClient interface
* @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, litNodeClient, }) => {
if (!resources || resources.length < 1) {
throw new Error('resources is required');
}
if (!litNodeClient) {
throw new Error('litNodeClient is required');
}
for (const request of resources) {
const recapObject = await litNodeClient.generateSessionCapabilityObjectWithWildcards([
request.resource,
]);
recapObject.addCapabilityForResource(request.resource, request.ability, request.data || null);
const verified = recapObject.verifyCapabilitiesForResource(request.resource, request.ability);
if (!verified) {
throw new Error(`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