UNPKG

@atomicjolt/lti-client

Version:

Client Javascript libraries to handle LTI.

84 lines (76 loc) 2.47 kB
import { PostMessageClient, PostMessageClientWrapper } from "./client"; import { PostMessageError } from "./error"; import { PostMessageGetDataRequest, PostMessageGetDataResponse, PostMessagePutDataRequest, } from "./types"; /** * Class representing the LTI Platform Storage specification * https://www.imsglobal.org/spec/lti-pm-s/v0p1 */ export class PlatformStorage extends PostMessageClientWrapper { /** * Checks if the platform supports platform storage * @returns A promise that resolves to a boolean indicating if the platform supports the required capabilities. */ async isSupported(): Promise<boolean> { const capabilities = await this.client.getCapabilities(); const dataCaps = capabilities.filter( (cap) => cap.subject === "lti.put_data" || cap.subject === "lti.get_data" ); return dataCaps.length == 2; } /** * Retrieves a value from the storage. * @param key - The key of the value to retrieve. * @returns A promise that resolves to the retrieved value as a string or null if the key does not exist. */ async get(key: string): Promise<string | null> { try { const response = await this.client.send< PostMessageGetDataRequest, PostMessageGetDataResponse >({ subject: "lti.get_data", message_id: this.client.messageId("lti.get_data", key), key, }); return response.value; } catch (error) { if (error instanceof PostMessageError) { if (error?.response?.error?.code === "key_not_found") { return null; } } throw error; } } /** * Sets a value in the storage. * @param key - The key of the value to set. * @param value - The value to set. * @returns A promise that resolves when the value has been set. */ async set(key: string, value: any): Promise<void> { await this.client.send<PostMessagePutDataRequest>({ subject: "lti.put_data", message_id: this.client.messageId("lti.put_data", key), key, value, }); } /** * Removes a value from the storage. * @param key - The key of the value to remove. * @returns A promise that resolves when the value has been removed. */ async remove(key: string): Promise<void> { await this.client.send<PostMessagePutDataRequest>({ subject: "lti.put_data", message_id: this.client.messageId("lti.put_data", key), key, value: null, }); } }