When using the LearnCard Network Plugin, challenge-based DID Authentication is handled for you, so no further steps are necessary.
2. Using Challenge-based DID Authentication
If you choose to use the API endpoints directly, you'll need to manage challenge-based DID Authentication for each request. Here's a simplified TypeScript example to help you implement this authentication method:
async function getClient(
url = 'https://network.learncard.com/api': string,
didAuthFunction: (challenge?: string) => Promise<string>
) {
let challenges: string[] = [];
const getChallenges = async (amount = 95 + Math.round((Math.random() - 0.5) * 5)): Promise<string[]> => {
// Call the API to get a list of challenges
// Replace this line with your preferred way of making API calls
const response = await fetch(url + "/challenges?amount=" + amount);
return await response.json();
};
challenges = await getChallenges();
async function getAuthHeaders() {
if (challenges.length === 0) challenges.push(...(await getChallenges()));
return { Authorization: `Bearer ${await didAuthFunction(challenges.pop())}` };
}
// Use getAuthHeaders in your API calls to set the Authorization header
}
export default getClient;
In this example, we first define a getClient function that takes a url and a didAuthFunction. The didAuthFunction should be an asynchronous function that returns a signed challenge as a string.
The getChallenges function fetches a list of challenges from the API. The getAuthHeaders function generates an Authorization header using the didAuthFunction and a challenge. This header can then be used in your API calls.