UNPKG

@treecg/curation

Version:

This library implements a class (Curator) with methods to curate an announcement LDES in LDP.

124 lines (114 loc) 4.45 kB
/*************************************** * Title: SolidCommunication * Description: utility functions for authenticated communication to a solid pod * Author: Wout Slabbinck (wout.slabbinck@ugent.be) * Created on 10/12/2021 *****************************************/ import {Session} from "@rubensworks/solid-client-authn-isomorphic"; import {LoggerBrowser as Logger} from "@treecg/types/dist/lib/utils/Logger-Browser"; import {Quad, Store, Writer} from "n3"; import {turtleStringToStore} from "./Conversion"; const logger = new Logger('SolidCommunication'); export async function fetchResourceAsStore(iri: string, session: Session): Promise<Store> { const response = await session.fetch(iri, { method: "GET", headers: { Accept: "text/turtle" } }); if (response.status !== 200) { logger.debug(`${iri} Could not be fetched | ${response.statusText}`); throw Error(`Failed fetching resource at ${iri}`); } logger.debug(`${iri} fetched`); const text = await response.text(); return await turtleStringToStore(text, iri); } export async function putLDJSON(iri: string, session: Session, body: string): Promise<Response> { return await putResource(iri, session, body, 'application/ld+json'); } export async function putTurtle(iri: string, session: Session, body: string): Promise<Response> { return await putResource(iri, session, body, 'text/turtle'); } export async function postResource(containerIRI: string, session: Session, body: string, contentType: string): Promise<Response> { const response = await session.fetch(containerIRI, { method: "POST", headers: { "Content-Type": contentType, "Link": `<http://www.w3.org/ns/ldp#Resource>; rel="type"` }, body: body }); if (response.status === 201) { logger.debug(`Created resource at ${response.url} | status: ${response.status}`); } else { logger.debug(`Resource was not created at ${containerIRI} | ${response.statusText}`); console.log(await response.text()); throw Error(`Failed creating resource at ${containerIRI}`); } return response; } export async function putResource(iri: string, session: Session, body: string, contentType: string): Promise<Response> { const response = await session.fetch(iri, { method: "PUT", headers: { "Content-Type": contentType, "Link": `<http://www.w3.org/ns/ldp#Resource>; rel="type"` }, body: body }); if (response.status === 201) { logger.debug(`Created resource at ${iri} | status: ${response.status}`); } else if (response.status === 205) { logger.debug(`Updated contents at ${iri} | status: ${response.status}`); } else { logger.debug(`Resource was not created/updated at ${iri} | ${response.statusText}`); console.log(await response.text()); throw Error(`Failed creating/updating resource at ${iri}`); } return response; } export async function putContainer(iri: string, session: Session): Promise<Response> { const response = await session.fetch(iri, { method: "PUT", headers: { "Content-Type": 'text/turtle', "Link": `<http://www.w3.org/ns/ldp#Container>; rel="type"` }, }); if (response.status === 201) { logger.debug(`Created Container at ${iri} | status: ${response.status}`); } else if (response.status === 205) { logger.debug(`Updated Container at ${iri} | status: ${response.status}`); } else { logger.debug(`Container was not created/updated at ${iri} | ${response.statusText}`); console.log(await response.text()); throw Error(`Failed creating/updating Container at ${iri}`); } return response; } export enum SPARQL { INSERT = 'INSERT DATA', DELETE = 'DELETE DATA' } export async function patchQuads(iri: string, session: Session, quads: Quad[], type: SPARQL): Promise<Response> { const writer = new Writer(); let sparqlQuery = `${type} {`; sparqlQuery = sparqlQuery.concat(writer.quadsToString(quads)); sparqlQuery = sparqlQuery.concat(` }`); const response = await session.fetch(iri, { method: "PATCH", headers: { "Content-Type": 'application/sparql-update', }, body: sparqlQuery }); if (response.status === 205) { logger.debug(`Updated contents at ${iri} | status: ${response.status}`); } else { logger.debug(`Resource was not updated at ${iri} | ${response.statusText}`); throw Error(`Failed updating resource at ${iri}`); } return response; }