@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
124 lines • 5.07 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.createAuthConfigBuilder = void 0;
/**
* @module AuthConfigBuilder
* This module provides a builder for creating AuthConfig objects in a fluent manner.
* It simplifies the process of constructing authentication configurations and defining
* resource capabilities directly within a single builder.
*
* @example
* // import { createAuthConfigBuilder } from './auth-config-builder';
*
* // async function setupAuth() {
* // const authConfig = createAuthConfigBuilder()
* // .addStatement('This is a custom statement for authentication.')
* // .addDomain('myapp.example.com')
* // .addPKPSigningRequest('*') // Directly add resource capabilities
* // .addLitActionExecutionRequest('my-lit-action-ipfs-id') // Example Lit Action IPFS ID
* // .build();
* // console.log('Constructed AuthConfig:', authConfig);
* // }
* // setupAuth();
*/
const schemas_1 = require("@lit-protocol/schemas");
const constants_1 = require("@lit-protocol/constants");
const resources_1 = require("./resources"); // Corrected path: from ../lib/auth-config-builder.ts to ../lib/resources/
const zod_1 = require("zod");
/**
* Creates and returns a new instance of the AuthConfigBuilder.
*/
const createAuthConfigBuilder = () => {
const configInProgress = {};
const resourcesArray = [];
const builder = {
addCapabilityAuthSigs(sigs) {
configInProgress.capabilityAuthSigs = sigs;
return builder;
},
addExpiration(expiration) {
if (expiration instanceof Date) {
configInProgress.expiration = expiration.toISOString();
}
else {
configInProgress.expiration = expiration;
}
return builder;
},
addStatement(statement) {
configInProgress.statement = statement;
return builder;
},
addDomain(domain) {
configInProgress.domain = domain;
return builder;
},
// Resource capability methods
addPKPSigningRequest(resourceId) {
resourcesArray.push({
resource: new resources_1.LitPKPResource(resourceId),
ability: constants_1.LIT_ABILITY.PKPSigning,
});
return builder;
},
addLitActionExecutionRequest(resourceId) {
resourcesArray.push({
resource: new resources_1.LitActionResource(resourceId),
ability: constants_1.LIT_ABILITY.LitActionExecution,
});
return builder;
},
addAccessControlConditionSigningRequest(resourceId) {
resourcesArray.push({
resource: new resources_1.LitAccessControlConditionResource(resourceId),
ability: constants_1.LIT_ABILITY.AccessControlConditionSigning,
});
return builder;
},
addAccessControlConditionDecryptionRequest(resourceId) {
resourcesArray.push({
resource: new resources_1.LitAccessControlConditionResource(resourceId),
ability: constants_1.LIT_ABILITY.AccessControlConditionDecryption,
});
return builder;
},
addPaymentDelegationRequest(resourceId) {
resourcesArray.push({
resource: new resources_1.LitPaymentDelegationResource(resourceId),
ability: constants_1.LIT_ABILITY.PaymentDelegation,
});
return builder;
},
build: () => {
const finalConfig = {
...configInProgress,
resources: resourcesArray, // Cast needed if ResourceRequest is not strictly LitResourceAbilityRequest
};
// if resources is empty, throw an error
if (resourcesArray.length === 0) {
throw new Error(`🤯 Resources array is empty, please add at least one resource to the auth config. You can add resources using the following methods:
- addPKPSigningRequest
- addLitActionExecutionRequest
- addAccessControlConditionSigningRequest
- addAccessControlConditionDecryptionRequest
- addPaymentDelegationRequest
`);
}
try {
// Ensure default values for top-level AuthConfig props are applied
// by parsing an object that includes the resources array.
const parsedConfig = schemas_1.AuthConfigSchema.parse(finalConfig);
return parsedConfig;
}
catch (e) {
if (e instanceof zod_1.z.ZodError) {
console.error('AuthConfig validation failed:', e.errors);
}
throw new Error(`Failed to build AuthConfig: ${e.message}`);
}
},
};
return builder;
};
exports.createAuthConfigBuilder = createAuthConfigBuilder;
//# sourceMappingURL=auth-config-builder.js.map