You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

73 lines
2.3 KiB

import type { AccessModes as IAccessModes } from "@inrupt/solid-client";
import { universalAccess } from "@inrupt/solid-client";
import { FetchableDocument } from "../FetchableDocument";
import type { Resource } from "../resource/Resource";
import { DocumentError } from "../errors/DocumentError";
import type { SolidLdoDatasetContext } from "../../SolidLdoDatasetContext";
import type { DocumentGetterOptions } from "../DocumentStore";
export type AccessModes = IAccessModes;
export class AccessRules extends FetchableDocument {
readonly resource: Resource;
private _publicAccess: IAccessModes | null;
private _agentAccess: Record<string, IAccessModes> | null;
constructor(
resource: Resource,
context: SolidLdoDatasetContext,
documentGetterOptions?: DocumentGetterOptions,
) {
super(context, documentGetterOptions);
this._publicAccess = null;
this._agentAccess = null;
this.resource = resource;
}
/**
* ===========================================================================
* Getters
* ===========================================================================
*/
get publicAccess() {
return this._publicAccess;
}
get agentAccess() {
return this._agentAccess;
}
/**
* ===========================================================================
* Methods
* ===========================================================================
*/
protected async fetchDocument() {
try {
const [publicAccess, agentAccess] = await Promise.all([
universalAccess.getPublicAccess(this.resource.uri, {
fetch: this.context.fetch,
}),
universalAccess.getAgentAccessAll(this.resource.uri, {
fetch: this.context.fetch,
}),
]);
this._publicAccess = publicAccess || {
read: false,
write: false,
append: false,
controlRead: false,
controlWrite: false,
};
this._agentAccess = agentAccess || {};
return undefined;
} catch (err: unknown) {
if (typeof err === "object" && (err as Error).message) {
this.setError(new DocumentError(this, 500, (err as Error).message));
}
this.setError(
new DocumentError(this, 500, "Error Fetching Access Rules"),
);
}
}
}