solid-logic 6.0.1-0 → 6.0.1-1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/acl/aclLogic.cjs.js +1 -1
- package/dist/acl/aclLogic.cjs.js.map +1 -1
- package/dist/acl/aclLogic.d.ts +3 -0
- package/dist/acl/aclLogic.d.ts.map +1 -1
- package/dist/acl/aclLogic.esm.js +72 -54
- package/dist/acl/aclLogic.esm.js.map +1 -1
- package/dist/index.cjs.js +1 -1
- package/dist/index.cjs.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.esm.js +10 -10
- package/dist/index.esm.js.map +1 -1
- package/dist/types.d.ts +6 -1
- package/dist/types.d.ts.map +1 -1
- package/package.json +2 -2
package/dist/acl/aclLogic.cjs.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
const e=require("../util/ns.cjs.js"),t=require("./accessControlSubjects.cjs.js");let n=require("rdflib"),r=require("@dokieli/web-access-control");var i=[`Owner`,`Editor`,`No Access`,`Viewer`,`Poster`,`Submitter`],a=(0,n.sym)(`http://www.iana.org/assignments/link-relations/acl`);function
|
|
1
|
+
const e=require("../util/ns.cjs.js"),t=require("./accessControlSubjects.cjs.js");let n=require("rdflib"),r=require("@dokieli/web-access-control");var i=[`Owner`,`Editor`,`No Access`,`Viewer`,`Poster`,`Submitter`],a=[`No Access`,`Viewer`],o=(0,n.sym)(`http://www.iana.org/assignments/link-relations/acl`);function s(i){let s=e.ns,c=[{label:`Owner`,modes:[`Read`,`Write`,`Control`]},{label:`Editor`,modes:[`Read`,`Write`]},{label:`Poster`,modes:[`Append`,`Read`]},{label:`Submitter`,modes:[`Append`]},{label:`Viewer`,modes:[`Read`]},{label:`No Access`,modes:[]}],l=[{label:`Viewer`,modes:[`Read`]},{label:`No Access`,modes:[]}];function u(e){let t=new Set(e);return c.find(e=>e.label!==`No Access`&&e.modes.every(e=>t.has(e)))?.label??`No Access`}function d(e){return[...c.find(t=>t.label===e)?.modes??[]]}function f(e){let t=new Set(e);return l.find(e=>e.label!==`No Access`&&e.modes.every(e=>t.has(e)))?.label??`No Access`}function p(e){return[...l.find(t=>t.label===e)?.modes??[]]}function m(){let e=i.fetcher,t=e?._fetch??e?.fetch;if(!t)throw Error(`Cannot find effective ACL, store has no fetcher`);return t.bind(e)}async function h(e){await i.fetcher.load(e);let t=i.any(e,o);if(!t)throw Error(`No ACL link discovered for ${e}`);return t.value}async function g(e){let t=typeof e==`string`?e:e.value;return(0,r.findEffectiveACL)(t,{fetch:m()})}async function _(e){return(await g(e)).authorizations}async function v(e,t,n){let i=await g(e);return(0,r.planGrant)(i,t,n)}async function y(e,t){let n=await g(e);return(0,r.planRevoke)(n,t)}async function b(e,t){let n=await g(e);return(0,r.planPublicRead)(n,t)}async function x(e){return(0,r.applyPlan)(e,{fetch:m()})}async function S(e){return t.classifyAccessControlSubject(i,e)}function C(e,t,n){let r=i.any(i.sym(e),o);return Promise.resolve().then(()=>r||w(e).catch(t=>{throw Error(`Error fetching rel=ACL header for ${e}: ${t}`)})).then(r=>{let a=T(e,t,r.uri,n);if(!i.fetcher)throw Error(`Cannot PUT this, store has no fetcher`);return i.fetcher.webOperation(`PUT`,r.uri,{data:a,contentType:`text/turtle`}).then(e=>{if(!e.ok)throw Error(`Error writing ACL text: `+e.error);return r})})}function w(e){let t=i.fetcher;if(!t)throw Error(`Cannot fetch ACL rel, store has no fetcher`);return t.load(e).then(t=>{if(!t.ok)throw Error(`fetchACLRel: While loading:`+t.error);let n=i.any(i.sym(e),o);if(!n)throw Error(`fetchACLRel: No Link rel=ACL header for `+e);return n})}function T(e,t,r,i={}){let a=i.public||[],o=(0,n.graph)(),c=(0,n.Namespace)(`http://www.w3.org/ns/auth/acl#`),l=o.sym(`${r}#a1`),u=o.sym(r),d=o.sym(e);if(o.add(l,s.rdf(`type`),c(`Authorization`),u),o.add(l,c(`accessTo`),d,u),i.defaultForNew&&o.add(l,c(`default`),d,u),o.add(l,c(`agent`),t,u),o.add(l,c(`mode`),c(`Read`),u),o.add(l,c(`mode`),c(`Write`),u),o.add(l,c(`mode`),c(`Control`),u),a.length){l=o.sym(`${r}#a2`),o.add(l,s.rdf(`type`),c(`Authorization`),u),o.add(l,c(`accessTo`),d,u),o.add(l,c(`agentClass`),s.foaf(`Agent`),u);for(let e=0;e<a.length;e++)o.add(l,c(`mode`),c(a[e]),u)}return(0,n.serialize)(u,o,r)}return{findAclDocUrl:h,findEffectiveAcl:g,findAccessGrants:_,roleFromModes:u,modesFromRole:d,publicRoleFromModes:f,modesFromPublicRole:p,planGrant:v,planRevoke:y,planPublicRead:b,applyPlan:x,classifyAccessControlSubject:S,setACLUserPublic:C,genACLText:T,Authenticated:r.Authenticated,Public:r.Public,PUBLIC_ACCESS_ROLES:a}}exports.ACCESS_ROLES=i,exports.ACL_LINK=o,exports.PUBLIC_ACCESS_ROLES=a,exports.createAclLogic=s;
|
|
2
2
|
//# sourceMappingURL=aclLogic.cjs.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"aclLogic.cjs.js","names":[],"sources":["../../src/acl/aclLogic.ts"],"sourcesContent":["import { applyPlan as applyAuthorizationPlan, findEffectiveACL, planGrant as planAuthorizationGrant, planPublicRead as planAuthorizationPublicRead, planRevoke as planAuthorizationRevoke, type AccessMode, type AccessSubject, type ACLContext, type Authorization, type PatchPlan } from '@dokieli/web-access-control'\nimport { graph, NamedNode, Namespace, serialize, sym } from 'rdflib'\nimport type { AclLogic } from '../types'\nimport { ns as namespace } from '../util/ns'\nimport * as accessControlSubjects from './accessControlSubjects'\n\n// Will remove the below comment when i'm done with the manage access work\n// Helpers available from @dokieli/web-access-control:\n// - Discovery: findEffectiveACL, parentContainer\n// - ACL context and parsing: buildACLContext, authorizationsFromDataset, parseTurtle\n// - Query helpers: agentsWithMode, hasControl, isPublic, modesFor, subjectsWithMode\n// - Plan helpers: planContainerACL, planGrant, planOwnerControl, planPublicRead, planRevoke\n// - Serialization and application: serializeTerm, toN3Patch, toSparqlUpdate, toTurtle, applyPlan, negotiatePatchContentType\n// - Link and allow parsing: allows, parseWacAllow, linkTargets, parseLinkHeader\n// - Terms and constants: ACCESS_MODES, ACL, Authenticated, FOAF, modeFromIRI, modeIRI, namedNode, Public, quad, RDF_TYPE, variable\n\nexport const ACCESS_ROLES = ['Owner', 'Editor', 'No Access', 'Viewer', 'Poster', 'Submitter'] as const\n\nexport type AccessRole = typeof ACCESS_ROLES[number]\n\nexport const ACL_LINK = sym(\n 'http://www.iana.org/assignments/link-relations/acl'\n)\n\nexport function createAclLogic(store): AclLogic {\n\n const ns = namespace\n const ACCESS_ROLE_RULES: Array<{ label: AccessRole, modes: AccessMode[] }> = [\n { label: 'Owner', modes: ['Read', 'Write', 'Control'] },\n { label: 'Editor', modes: ['Read', 'Write'] },\n { label: 'Poster', modes: ['Append', 'Read'] },\n { label: 'Submitter', modes: ['Append'] },\n { label: 'Viewer', modes: ['Read'] },\n { label: 'No Access', modes: [] }\n ]\n\n function roleFromModes (modes: Iterable<AccessMode>): AccessRole {\n const modeSet = new Set(modes)\n const matchingRule = ACCESS_ROLE_RULES.find(rule => rule.label !== 'No Access' && rule.modes.every(mode => modeSet.has(mode)))\n\n return matchingRule?.label ?? 'No Access'\n }\n\n function modesFromRole (role: AccessRole): AccessMode[] {\n return [...(ACCESS_ROLE_RULES.find(rule => rule.label === role)?.modes ?? [])]\n }\n\n function getFetch() {\n const fetcher = store.fetcher as {\n _fetch?: (url: string, init?: RequestInit) => Promise<Response>\n fetch?: (url: string, init?: RequestInit) => Promise<Response>\n } | undefined\n const fetch = fetcher?._fetch ?? fetcher?.fetch\n if (!fetch) {\n throw new Error('Cannot find effective ACL, store has no fetcher')\n }\n return fetch.bind(fetcher)\n }\n \n async function findAclDocUrl(url: NamedNode) {\n await store.fetcher.load(url)\n const docNode = store.any(url, ACL_LINK)\n if (!docNode) {\n throw new Error(`No ACL link discovered for ${url}`)\n }\n return docNode.value\n }\n\n async function findEffectiveAcl(resourceURL: string | NamedNode): Promise<ACLContext> {\n const url = typeof resourceURL === 'string' ? resourceURL : resourceURL.value\n return findEffectiveACL(url, { fetch: getFetch() })\n }\n\n async function findAccessGrants(resourceURL: string | NamedNode): Promise<Authorization[]> {\n const context = await findEffectiveAcl(resourceURL)\n return context.authorizations\n }\n\n async function planGrant(resourceURL: string | NamedNode, subject: AccessSubject, modes: AccessMode[]): Promise<PatchPlan> {\n const context = await findEffectiveAcl(resourceURL)\n return planAuthorizationGrant(context, subject, modes)\n }\n\n async function planRevoke(resourceURL: string | NamedNode, subject: AccessSubject): Promise<PatchPlan> {\n const context = await findEffectiveAcl(resourceURL)\n return planAuthorizationRevoke(context, subject)\n }\n\n async function planPublicRead(resourceURL: string | NamedNode, enabled: boolean): Promise<PatchPlan> {\n const context = await findEffectiveAcl(resourceURL)\n return planAuthorizationPublicRead(context, enabled)\n }\n\n async function applyPlan(plan: PatchPlan): Promise<Response> {\n return applyAuthorizationPlan(plan, { fetch: getFetch() })\n }\n\n async function classifyAccessControlSubject(principle: string) {\n return accessControlSubjects.classifyAccessControlSubject(store, principle)\n }\n /**\n * Simple Access Control\n *\n * This function sets up a simple default ACL for a resource, with\n * RWC for the owner, and a specified access (default none) for the public.\n * In all cases owner has read write control.\n * Parameter lists modes allowed to public\n *\n * @param options\n * @param options.public eg ['Read', 'Write']\n *\n * @returns Resolves with aclDoc uri on successful write\n */\n function setACLUserPublic ( \n docURI: string,\n me: NamedNode,\n options: {\n defaultForNew?: boolean,\n public?: []\n }\n ): Promise<NamedNode> {\n const aclDoc = store.any(\n store.sym(docURI),\n ACL_LINK\n )\n\n return Promise.resolve()\n .then(() => {\n if (aclDoc) {\n return aclDoc as NamedNode\n }\n\n return fetchACLRel(docURI).catch(err => {\n throw new Error(`Error fetching rel=ACL header for ${docURI}: ${err}`)\n })\n })\n .then(aclDoc => {\n const aclText = genACLText(docURI, me, aclDoc.uri, options)\n if (!store.fetcher) {\n throw new Error('Cannot PUT this, store has no fetcher')\n }\n return store.fetcher\n .webOperation('PUT', aclDoc.uri, {\n data: aclText,\n contentType: 'text/turtle'\n })\n .then(result => {\n if (!result.ok) {\n throw new Error('Error writing ACL text: ' + result.error)\n }\n\n return aclDoc\n })\n })\n }\n\n /**\n * @param docURI\n * @returns\n */\n function fetchACLRel (docURI: string): Promise<NamedNode> {\n const fetcher = store.fetcher\n if (!fetcher) {\n throw new Error('Cannot fetch ACL rel, store has no fetcher')\n }\n\n return fetcher.load(docURI).then(result => {\n if (!result.ok) {\n throw new Error('fetchACLRel: While loading:' + (result as any).error)\n }\n\n const aclDoc = store.any(\n store.sym(docURI),\n ACL_LINK\n )\n\n if (!aclDoc) {\n throw new Error('fetchACLRel: No Link rel=ACL header for ' + docURI)\n }\n\n return aclDoc as NamedNode\n })\n }\n\n /**\n * @param docURI\n * @param me\n * @param aclURI\n * @param options\n *\n * @returns Serialized ACL\n */\n function genACLText (\n docURI: string,\n me: NamedNode,\n aclURI: string,\n options: {\n defaultForNew?: boolean,\n public?: []\n } = {}\n ): string | undefined {\n const optPublic = options.public || []\n const g = graph()\n const auth = Namespace('http://www.w3.org/ns/auth/acl#')\n let a = g.sym(`${aclURI}#a1`)\n const acl = g.sym(aclURI)\n const doc = g.sym(docURI)\n g.add(a, ns.rdf('type'), auth('Authorization'), acl)\n g.add(a, auth('accessTo'), doc, acl)\n if (options.defaultForNew) {\n g.add(a, auth('default'), doc, acl)\n }\n g.add(a, auth('agent'), me, acl)\n g.add(a, auth('mode'), auth('Read'), acl)\n g.add(a, auth('mode'), auth('Write'), acl)\n g.add(a, auth('mode'), auth('Control'), acl)\n\n if (optPublic.length) {\n a = g.sym(`${aclURI}#a2`)\n g.add(a, ns.rdf('type'), auth('Authorization'), acl)\n g.add(a, auth('accessTo'), doc, acl)\n g.add(a, auth('agentClass'), ns.foaf('Agent'), acl)\n for (let p = 0; p < optPublic.length; p++) {\n g.add(a, auth('mode'), auth(optPublic[p]), acl) // Like 'Read' etc\n }\n }\n return serialize(acl, g, aclURI)\n }\n return {\n findAclDocUrl,\n findEffectiveAcl,\n findAccessGrants,\n roleFromModes,\n modesFromRole,\n planGrant,\n planRevoke,\n planPublicRead,\n applyPlan,\n classifyAccessControlSubject,\n setACLUserPublic,\n genACLText\n }\n}"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"aclLogic.cjs.js","names":[],"sources":["../../src/acl/aclLogic.ts"],"sourcesContent":["import { applyPlan as applyAuthorizationPlan, Authenticated, findEffectiveACL, planGrant as planAuthorizationGrant, planPublicRead as planAuthorizationPublicRead, planRevoke as planAuthorizationRevoke, Public, type AccessMode, type AccessSubject, type ACLContext, type Authorization, type PatchPlan } from '@dokieli/web-access-control'\nimport { graph, NamedNode, Namespace, serialize, sym } from 'rdflib'\nimport type { AclLogic } from '../types'\nimport { ns as namespace } from '../util/ns'\nimport * as accessControlSubjects from './accessControlSubjects'\n\n// Will remove the below comment when i'm done with the manage access work\n// Helpers available from @dokieli/web-access-control:\n// - Discovery: findEffectiveACL, parentContainer\n// - ACL context and parsing: buildACLContext, authorizationsFromDataset, parseTurtle\n// - Query helpers: agentsWithMode, hasControl, isPublic, modesFor, subjectsWithMode\n// - Plan helpers: planContainerACL, planGrant, planOwnerControl, planPublicRead, planRevoke\n// - Serialization and application: serializeTerm, toN3Patch, toSparqlUpdate, toTurtle, applyPlan, negotiatePatchContentType\n// - Link and allow parsing: allows, parseWacAllow, linkTargets, parseLinkHeader\n// - Terms and constants: ACCESS_MODES, ACL, Authenticated, FOAF, modeFromIRI, modeIRI, namedNode, Public, quad, RDF_TYPE, variable\n\nexport const ACCESS_ROLES = ['Owner', 'Editor', 'No Access', 'Viewer', 'Poster', 'Submitter'] as const\nexport const PUBLIC_ACCESS_ROLES = ['No Access', 'Viewer'] as const\nexport { Authenticated, Public } from '@dokieli/web-access-control'\n\nexport type AccessRole = typeof ACCESS_ROLES[number]\nexport type PublicAccessRole = typeof PUBLIC_ACCESS_ROLES[number]\n\nexport const ACL_LINK = sym(\n 'http://www.iana.org/assignments/link-relations/acl'\n)\n\nexport function createAclLogic(store): AclLogic {\n\n const ns = namespace\n const ACCESS_ROLE_RULES: Array<{ label: AccessRole, modes: AccessMode[] }> = [\n { label: 'Owner', modes: ['Read', 'Write', 'Control'] },\n { label: 'Editor', modes: ['Read', 'Write'] },\n { label: 'Poster', modes: ['Append', 'Read'] },\n { label: 'Submitter', modes: ['Append'] },\n { label: 'Viewer', modes: ['Read'] },\n { label: 'No Access', modes: [] }\n ]\n const PUBLIC_ROLE_RULES: Array<{ label: PublicAccessRole, modes: AccessMode[] }> = [\n { label: 'Viewer', modes: ['Read'] },\n { label: 'No Access', modes: [] }\n ]\n\n function roleFromModes (modes: Iterable<AccessMode>): AccessRole {\n const modeSet = new Set(modes)\n const matchingRule = ACCESS_ROLE_RULES.find(rule => rule.label !== 'No Access' && rule.modes.every(mode => modeSet.has(mode)))\n\n return matchingRule?.label ?? 'No Access'\n }\n\n function modesFromRole (role: AccessRole): AccessMode[] {\n return [...(ACCESS_ROLE_RULES.find(rule => rule.label === role)?.modes ?? [])]\n }\n\n function publicRoleFromModes (modes: Iterable<AccessMode>): PublicAccessRole {\n const modeSet = new Set(modes)\n const matchingRule = PUBLIC_ROLE_RULES.find(rule => rule.label !== 'No Access' && rule.modes.every(mode => modeSet.has(mode)))\n\n return matchingRule?.label ?? 'No Access'\n }\n\n function modesFromPublicRole (role: PublicAccessRole): AccessMode[] {\n return [...(PUBLIC_ROLE_RULES.find(rule => rule.label === role)?.modes ?? [])]\n }\n\n function getFetch() {\n const fetcher = store.fetcher as {\n _fetch?: (url: string, init?: RequestInit) => Promise<Response>\n fetch?: (url: string, init?: RequestInit) => Promise<Response>\n } | undefined\n const fetch = fetcher?._fetch ?? fetcher?.fetch\n if (!fetch) {\n throw new Error('Cannot find effective ACL, store has no fetcher')\n }\n return fetch.bind(fetcher)\n }\n \n async function findAclDocUrl(url: NamedNode) {\n await store.fetcher.load(url)\n const docNode = store.any(url, ACL_LINK)\n if (!docNode) {\n throw new Error(`No ACL link discovered for ${url}`)\n }\n return docNode.value\n }\n\n async function findEffectiveAcl(resourceURL: string | NamedNode): Promise<ACLContext> {\n const url = typeof resourceURL === 'string' ? resourceURL : resourceURL.value\n return findEffectiveACL(url, { fetch: getFetch() })\n }\n\n async function findAccessGrants(resourceURL: string | NamedNode): Promise<Authorization[]> {\n const context = await findEffectiveAcl(resourceURL)\n return context.authorizations\n }\n\n async function planGrant(resourceURL: string | NamedNode, subject: AccessSubject, modes: AccessMode[]): Promise<PatchPlan> {\n const context = await findEffectiveAcl(resourceURL)\n return planAuthorizationGrant(context, subject, modes)\n }\n\n async function planRevoke(resourceURL: string | NamedNode, subject: AccessSubject): Promise<PatchPlan> {\n const context = await findEffectiveAcl(resourceURL)\n return planAuthorizationRevoke(context, subject)\n }\n\n async function planPublicRead(resourceURL: string | NamedNode, enabled: boolean): Promise<PatchPlan> {\n const context = await findEffectiveAcl(resourceURL)\n return planAuthorizationPublicRead(context, enabled)\n }\n\n async function applyPlan(plan: PatchPlan): Promise<Response> {\n return applyAuthorizationPlan(plan, { fetch: getFetch() })\n }\n\n async function classifyAccessControlSubject(principle: string) {\n return accessControlSubjects.classifyAccessControlSubject(store, principle)\n }\n /**\n * Simple Access Control\n *\n * This function sets up a simple default ACL for a resource, with\n * RWC for the owner, and a specified access (default none) for the public.\n * In all cases owner has read write control.\n * Parameter lists modes allowed to public\n *\n * @param options\n * @param options.public eg ['Read', 'Write']\n *\n * @returns Resolves with aclDoc uri on successful write\n */\n function setACLUserPublic ( \n docURI: string,\n me: NamedNode,\n options: {\n defaultForNew?: boolean,\n public?: []\n }\n ): Promise<NamedNode> {\n const aclDoc = store.any(\n store.sym(docURI),\n ACL_LINK\n )\n\n return Promise.resolve()\n .then(() => {\n if (aclDoc) {\n return aclDoc as NamedNode\n }\n\n return fetchACLRel(docURI).catch(err => {\n throw new Error(`Error fetching rel=ACL header for ${docURI}: ${err}`)\n })\n })\n .then(aclDoc => {\n const aclText = genACLText(docURI, me, aclDoc.uri, options)\n if (!store.fetcher) {\n throw new Error('Cannot PUT this, store has no fetcher')\n }\n return store.fetcher\n .webOperation('PUT', aclDoc.uri, {\n data: aclText,\n contentType: 'text/turtle'\n })\n .then(result => {\n if (!result.ok) {\n throw new Error('Error writing ACL text: ' + result.error)\n }\n\n return aclDoc\n })\n })\n }\n\n /**\n * @param docURI\n * @returns\n */\n function fetchACLRel (docURI: string): Promise<NamedNode> {\n const fetcher = store.fetcher\n if (!fetcher) {\n throw new Error('Cannot fetch ACL rel, store has no fetcher')\n }\n\n return fetcher.load(docURI).then(result => {\n if (!result.ok) {\n throw new Error('fetchACLRel: While loading:' + (result as any).error)\n }\n\n const aclDoc = store.any(\n store.sym(docURI),\n ACL_LINK\n )\n\n if (!aclDoc) {\n throw new Error('fetchACLRel: No Link rel=ACL header for ' + docURI)\n }\n\n return aclDoc as NamedNode\n })\n }\n\n /**\n * @param docURI\n * @param me\n * @param aclURI\n * @param options\n *\n * @returns Serialized ACL\n */\n function genACLText (\n docURI: string,\n me: NamedNode,\n aclURI: string,\n options: {\n defaultForNew?: boolean,\n public?: []\n } = {}\n ): string | undefined {\n const optPublic = options.public || []\n const g = graph()\n const auth = Namespace('http://www.w3.org/ns/auth/acl#')\n let a = g.sym(`${aclURI}#a1`)\n const acl = g.sym(aclURI)\n const doc = g.sym(docURI)\n g.add(a, ns.rdf('type'), auth('Authorization'), acl)\n g.add(a, auth('accessTo'), doc, acl)\n if (options.defaultForNew) {\n g.add(a, auth('default'), doc, acl)\n }\n g.add(a, auth('agent'), me, acl)\n g.add(a, auth('mode'), auth('Read'), acl)\n g.add(a, auth('mode'), auth('Write'), acl)\n g.add(a, auth('mode'), auth('Control'), acl)\n\n if (optPublic.length) {\n a = g.sym(`${aclURI}#a2`)\n g.add(a, ns.rdf('type'), auth('Authorization'), acl)\n g.add(a, auth('accessTo'), doc, acl)\n g.add(a, auth('agentClass'), ns.foaf('Agent'), acl)\n for (let p = 0; p < optPublic.length; p++) {\n g.add(a, auth('mode'), auth(optPublic[p]), acl) // Like 'Read' etc\n }\n }\n return serialize(acl, g, aclURI)\n }\n return {\n findAclDocUrl,\n findEffectiveAcl,\n findAccessGrants,\n roleFromModes,\n modesFromRole,\n publicRoleFromModes,\n modesFromPublicRole,\n planGrant,\n planRevoke,\n planPublicRead,\n applyPlan,\n classifyAccessControlSubject,\n setACLUserPublic,\n genACLText,\n Authenticated,\n Public,\n PUBLIC_ACCESS_ROLES\n }\n}"],"mappings":"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"}
|
package/dist/acl/aclLogic.d.ts
CHANGED
|
@@ -1,7 +1,10 @@
|
|
|
1
1
|
import { NamedNode } from 'rdflib';
|
|
2
2
|
import type { AclLogic } from '../types';
|
|
3
3
|
export declare const ACCESS_ROLES: readonly ["Owner", "Editor", "No Access", "Viewer", "Poster", "Submitter"];
|
|
4
|
+
export declare const PUBLIC_ACCESS_ROLES: readonly ["No Access", "Viewer"];
|
|
5
|
+
export { Authenticated, Public } from '@dokieli/web-access-control';
|
|
4
6
|
export type AccessRole = typeof ACCESS_ROLES[number];
|
|
7
|
+
export type PublicAccessRole = typeof PUBLIC_ACCESS_ROLES[number];
|
|
5
8
|
export declare const ACL_LINK: NamedNode;
|
|
6
9
|
export declare function createAclLogic(store: any): AclLogic;
|
|
7
10
|
//# sourceMappingURL=aclLogic.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"aclLogic.d.ts","sourceRoot":"","sources":["../../src/acl/aclLogic.ts"],"names":[],"mappings":"AACA,OAAO,EAAS,SAAS,EAA6B,MAAM,QAAQ,CAAA;AACpE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAA;AAcxC,eAAO,MAAM,YAAY,4EAA6E,CAAA;
|
|
1
|
+
{"version":3,"file":"aclLogic.d.ts","sourceRoot":"","sources":["../../src/acl/aclLogic.ts"],"names":[],"mappings":"AACA,OAAO,EAAS,SAAS,EAA6B,MAAM,QAAQ,CAAA;AACpE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAA;AAcxC,eAAO,MAAM,YAAY,4EAA6E,CAAA;AACtG,eAAO,MAAM,mBAAmB,kCAAmC,CAAA;AACnE,OAAO,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,6BAA6B,CAAA;AAEnE,MAAM,MAAM,UAAU,GAAG,OAAO,YAAY,CAAC,MAAM,CAAC,CAAA;AACpD,MAAM,MAAM,gBAAgB,GAAG,OAAO,mBAAmB,CAAC,MAAM,CAAC,CAAA;AAEjE,eAAO,MAAM,QAAQ,WAEpB,CAAA;AAED,wBAAgB,cAAc,CAAC,KAAK,KAAA,GAAG,QAAQ,CA8O9C"}
|
package/dist/acl/aclLogic.esm.js
CHANGED
|
@@ -1,18 +1,18 @@
|
|
|
1
1
|
import { ns as e } from "../util/ns.esm.js";
|
|
2
2
|
import { classifyAccessControlSubject as t } from "./accessControlSubjects.esm.js";
|
|
3
3
|
import { Namespace as n, graph as r, serialize as i, sym as a } from "rdflib";
|
|
4
|
-
import {
|
|
4
|
+
import { Authenticated as o, Authenticated as s, Public as c, Public as l, applyPlan as u, findEffectiveACL as d, planGrant as f, planPublicRead as p, planRevoke as m } from "@dokieli/web-access-control";
|
|
5
5
|
//#region src/acl/aclLogic.ts
|
|
6
|
-
var
|
|
6
|
+
var h = [
|
|
7
7
|
"Owner",
|
|
8
8
|
"Editor",
|
|
9
9
|
"No Access",
|
|
10
10
|
"Viewer",
|
|
11
11
|
"Poster",
|
|
12
12
|
"Submitter"
|
|
13
|
-
],
|
|
14
|
-
function
|
|
15
|
-
let
|
|
13
|
+
], g = ["No Access", "Viewer"], _ = a("http://www.iana.org/assignments/link-relations/acl");
|
|
14
|
+
function v(a) {
|
|
15
|
+
let s = e, l = [
|
|
16
16
|
{
|
|
17
17
|
label: "Owner",
|
|
18
18
|
modes: [
|
|
@@ -41,56 +41,69 @@ function p(a) {
|
|
|
41
41
|
label: "No Access",
|
|
42
42
|
modes: []
|
|
43
43
|
}
|
|
44
|
-
]
|
|
45
|
-
|
|
44
|
+
], h = [{
|
|
45
|
+
label: "Viewer",
|
|
46
|
+
modes: ["Read"]
|
|
47
|
+
}, {
|
|
48
|
+
label: "No Access",
|
|
49
|
+
modes: []
|
|
50
|
+
}];
|
|
51
|
+
function v(e) {
|
|
46
52
|
let t = new Set(e);
|
|
47
|
-
return
|
|
53
|
+
return l.find((e) => e.label !== "No Access" && e.modes.every((e) => t.has(e)))?.label ?? "No Access";
|
|
48
54
|
}
|
|
49
|
-
function
|
|
50
|
-
return [...
|
|
55
|
+
function y(e) {
|
|
56
|
+
return [...l.find((t) => t.label === e)?.modes ?? []];
|
|
51
57
|
}
|
|
52
|
-
function
|
|
58
|
+
function b(e) {
|
|
59
|
+
let t = new Set(e);
|
|
60
|
+
return h.find((e) => e.label !== "No Access" && e.modes.every((e) => t.has(e)))?.label ?? "No Access";
|
|
61
|
+
}
|
|
62
|
+
function x(e) {
|
|
63
|
+
return [...h.find((t) => t.label === e)?.modes ?? []];
|
|
64
|
+
}
|
|
65
|
+
function S() {
|
|
53
66
|
let e = a.fetcher, t = e?._fetch ?? e?.fetch;
|
|
54
67
|
if (!t) throw Error("Cannot find effective ACL, store has no fetcher");
|
|
55
68
|
return t.bind(e);
|
|
56
69
|
}
|
|
57
|
-
async function
|
|
70
|
+
async function C(e) {
|
|
58
71
|
await a.fetcher.load(e);
|
|
59
|
-
let t = a.any(e,
|
|
72
|
+
let t = a.any(e, _);
|
|
60
73
|
if (!t) throw Error(`No ACL link discovered for ${e}`);
|
|
61
74
|
return t.value;
|
|
62
75
|
}
|
|
63
|
-
async function
|
|
76
|
+
async function w(e) {
|
|
64
77
|
let t = typeof e == "string" ? e : e.value;
|
|
65
|
-
return
|
|
78
|
+
return d(t, { fetch: S() });
|
|
66
79
|
}
|
|
67
|
-
async function
|
|
68
|
-
return (await
|
|
80
|
+
async function T(e) {
|
|
81
|
+
return (await w(e)).authorizations;
|
|
69
82
|
}
|
|
70
|
-
async function
|
|
71
|
-
let r = await
|
|
72
|
-
return
|
|
83
|
+
async function E(e, t, n) {
|
|
84
|
+
let r = await w(e);
|
|
85
|
+
return f(r, t, n);
|
|
73
86
|
}
|
|
74
|
-
async function
|
|
75
|
-
let n = await
|
|
76
|
-
return
|
|
87
|
+
async function D(e, t) {
|
|
88
|
+
let n = await w(e);
|
|
89
|
+
return m(n, t);
|
|
77
90
|
}
|
|
78
|
-
async function
|
|
79
|
-
let n = await
|
|
80
|
-
return
|
|
91
|
+
async function O(e, t) {
|
|
92
|
+
let n = await w(e);
|
|
93
|
+
return p(n, t);
|
|
81
94
|
}
|
|
82
|
-
async function
|
|
83
|
-
return
|
|
95
|
+
async function k(e) {
|
|
96
|
+
return u(e, { fetch: S() });
|
|
84
97
|
}
|
|
85
|
-
async function
|
|
98
|
+
async function A(e) {
|
|
86
99
|
return t(a, e);
|
|
87
100
|
}
|
|
88
|
-
function
|
|
89
|
-
let r = a.any(a.sym(e),
|
|
90
|
-
return Promise.resolve().then(() => r ||
|
|
101
|
+
function j(e, t, n) {
|
|
102
|
+
let r = a.any(a.sym(e), _);
|
|
103
|
+
return Promise.resolve().then(() => r || M(e).catch((t) => {
|
|
91
104
|
throw Error(`Error fetching rel=ACL header for ${e}: ${t}`);
|
|
92
105
|
})).then((r) => {
|
|
93
|
-
let i =
|
|
106
|
+
let i = N(e, t, r.uri, n);
|
|
94
107
|
if (!a.fetcher) throw Error("Cannot PUT this, store has no fetcher");
|
|
95
108
|
return a.fetcher.webOperation("PUT", r.uri, {
|
|
96
109
|
data: i,
|
|
@@ -101,40 +114,45 @@ function p(a) {
|
|
|
101
114
|
});
|
|
102
115
|
});
|
|
103
116
|
}
|
|
104
|
-
function
|
|
117
|
+
function M(e) {
|
|
105
118
|
let t = a.fetcher;
|
|
106
119
|
if (!t) throw Error("Cannot fetch ACL rel, store has no fetcher");
|
|
107
120
|
return t.load(e).then((t) => {
|
|
108
121
|
if (!t.ok) throw Error("fetchACLRel: While loading:" + t.error);
|
|
109
|
-
let n = a.any(a.sym(e),
|
|
122
|
+
let n = a.any(a.sym(e), _);
|
|
110
123
|
if (!n) throw Error("fetchACLRel: No Link rel=ACL header for " + e);
|
|
111
124
|
return n;
|
|
112
125
|
});
|
|
113
126
|
}
|
|
114
|
-
function
|
|
115
|
-
let
|
|
116
|
-
if (
|
|
117
|
-
|
|
118
|
-
for (let e = 0; e <
|
|
127
|
+
function N(e, t, a, o = {}) {
|
|
128
|
+
let c = o.public || [], l = r(), u = n("http://www.w3.org/ns/auth/acl#"), d = l.sym(`${a}#a1`), f = l.sym(a), p = l.sym(e);
|
|
129
|
+
if (l.add(d, s.rdf("type"), u("Authorization"), f), l.add(d, u("accessTo"), p, f), o.defaultForNew && l.add(d, u("default"), p, f), l.add(d, u("agent"), t, f), l.add(d, u("mode"), u("Read"), f), l.add(d, u("mode"), u("Write"), f), l.add(d, u("mode"), u("Control"), f), c.length) {
|
|
130
|
+
d = l.sym(`${a}#a2`), l.add(d, s.rdf("type"), u("Authorization"), f), l.add(d, u("accessTo"), p, f), l.add(d, u("agentClass"), s.foaf("Agent"), f);
|
|
131
|
+
for (let e = 0; e < c.length; e++) l.add(d, u("mode"), u(c[e]), f);
|
|
119
132
|
}
|
|
120
|
-
return i(f,
|
|
133
|
+
return i(f, l, a);
|
|
121
134
|
}
|
|
122
135
|
return {
|
|
123
|
-
findAclDocUrl:
|
|
124
|
-
findEffectiveAcl:
|
|
125
|
-
findAccessGrants:
|
|
126
|
-
roleFromModes:
|
|
127
|
-
modesFromRole:
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
136
|
+
findAclDocUrl: C,
|
|
137
|
+
findEffectiveAcl: w,
|
|
138
|
+
findAccessGrants: T,
|
|
139
|
+
roleFromModes: v,
|
|
140
|
+
modesFromRole: y,
|
|
141
|
+
publicRoleFromModes: b,
|
|
142
|
+
modesFromPublicRole: x,
|
|
143
|
+
planGrant: E,
|
|
144
|
+
planRevoke: D,
|
|
145
|
+
planPublicRead: O,
|
|
146
|
+
applyPlan: k,
|
|
147
|
+
classifyAccessControlSubject: A,
|
|
148
|
+
setACLUserPublic: j,
|
|
149
|
+
genACLText: N,
|
|
150
|
+
Authenticated: o,
|
|
151
|
+
Public: c,
|
|
152
|
+
PUBLIC_ACCESS_ROLES: g
|
|
135
153
|
};
|
|
136
154
|
}
|
|
137
155
|
//#endregion
|
|
138
|
-
export {
|
|
156
|
+
export { h as ACCESS_ROLES, _ as ACL_LINK, s as Authenticated, g as PUBLIC_ACCESS_ROLES, l as Public, v as createAclLogic };
|
|
139
157
|
|
|
140
158
|
//# sourceMappingURL=aclLogic.esm.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"aclLogic.esm.js","names":[],"sources":["../../src/acl/aclLogic.ts"],"sourcesContent":["import { applyPlan as applyAuthorizationPlan, findEffectiveACL, planGrant as planAuthorizationGrant, planPublicRead as planAuthorizationPublicRead, planRevoke as planAuthorizationRevoke, type AccessMode, type AccessSubject, type ACLContext, type Authorization, type PatchPlan } from '@dokieli/web-access-control'\nimport { graph, NamedNode, Namespace, serialize, sym } from 'rdflib'\nimport type { AclLogic } from '../types'\nimport { ns as namespace } from '../util/ns'\nimport * as accessControlSubjects from './accessControlSubjects'\n\n// Will remove the below comment when i'm done with the manage access work\n// Helpers available from @dokieli/web-access-control:\n// - Discovery: findEffectiveACL, parentContainer\n// - ACL context and parsing: buildACLContext, authorizationsFromDataset, parseTurtle\n// - Query helpers: agentsWithMode, hasControl, isPublic, modesFor, subjectsWithMode\n// - Plan helpers: planContainerACL, planGrant, planOwnerControl, planPublicRead, planRevoke\n// - Serialization and application: serializeTerm, toN3Patch, toSparqlUpdate, toTurtle, applyPlan, negotiatePatchContentType\n// - Link and allow parsing: allows, parseWacAllow, linkTargets, parseLinkHeader\n// - Terms and constants: ACCESS_MODES, ACL, Authenticated, FOAF, modeFromIRI, modeIRI, namedNode, Public, quad, RDF_TYPE, variable\n\nexport const ACCESS_ROLES = ['Owner', 'Editor', 'No Access', 'Viewer', 'Poster', 'Submitter'] as const\n\nexport type AccessRole = typeof ACCESS_ROLES[number]\n\nexport const ACL_LINK = sym(\n 'http://www.iana.org/assignments/link-relations/acl'\n)\n\nexport function createAclLogic(store): AclLogic {\n\n const ns = namespace\n const ACCESS_ROLE_RULES: Array<{ label: AccessRole, modes: AccessMode[] }> = [\n { label: 'Owner', modes: ['Read', 'Write', 'Control'] },\n { label: 'Editor', modes: ['Read', 'Write'] },\n { label: 'Poster', modes: ['Append', 'Read'] },\n { label: 'Submitter', modes: ['Append'] },\n { label: 'Viewer', modes: ['Read'] },\n { label: 'No Access', modes: [] }\n ]\n\n function roleFromModes (modes: Iterable<AccessMode>): AccessRole {\n const modeSet = new Set(modes)\n const matchingRule = ACCESS_ROLE_RULES.find(rule => rule.label !== 'No Access' && rule.modes.every(mode => modeSet.has(mode)))\n\n return matchingRule?.label ?? 'No Access'\n }\n\n function modesFromRole (role: AccessRole): AccessMode[] {\n return [...(ACCESS_ROLE_RULES.find(rule => rule.label === role)?.modes ?? [])]\n }\n\n function getFetch() {\n const fetcher = store.fetcher as {\n _fetch?: (url: string, init?: RequestInit) => Promise<Response>\n fetch?: (url: string, init?: RequestInit) => Promise<Response>\n } | undefined\n const fetch = fetcher?._fetch ?? fetcher?.fetch\n if (!fetch) {\n throw new Error('Cannot find effective ACL, store has no fetcher')\n }\n return fetch.bind(fetcher)\n }\n \n async function findAclDocUrl(url: NamedNode) {\n await store.fetcher.load(url)\n const docNode = store.any(url, ACL_LINK)\n if (!docNode) {\n throw new Error(`No ACL link discovered for ${url}`)\n }\n return docNode.value\n }\n\n async function findEffectiveAcl(resourceURL: string | NamedNode): Promise<ACLContext> {\n const url = typeof resourceURL === 'string' ? resourceURL : resourceURL.value\n return findEffectiveACL(url, { fetch: getFetch() })\n }\n\n async function findAccessGrants(resourceURL: string | NamedNode): Promise<Authorization[]> {\n const context = await findEffectiveAcl(resourceURL)\n return context.authorizations\n }\n\n async function planGrant(resourceURL: string | NamedNode, subject: AccessSubject, modes: AccessMode[]): Promise<PatchPlan> {\n const context = await findEffectiveAcl(resourceURL)\n return planAuthorizationGrant(context, subject, modes)\n }\n\n async function planRevoke(resourceURL: string | NamedNode, subject: AccessSubject): Promise<PatchPlan> {\n const context = await findEffectiveAcl(resourceURL)\n return planAuthorizationRevoke(context, subject)\n }\n\n async function planPublicRead(resourceURL: string | NamedNode, enabled: boolean): Promise<PatchPlan> {\n const context = await findEffectiveAcl(resourceURL)\n return planAuthorizationPublicRead(context, enabled)\n }\n\n async function applyPlan(plan: PatchPlan): Promise<Response> {\n return applyAuthorizationPlan(plan, { fetch: getFetch() })\n }\n\n async function classifyAccessControlSubject(principle: string) {\n return accessControlSubjects.classifyAccessControlSubject(store, principle)\n }\n /**\n * Simple Access Control\n *\n * This function sets up a simple default ACL for a resource, with\n * RWC for the owner, and a specified access (default none) for the public.\n * In all cases owner has read write control.\n * Parameter lists modes allowed to public\n *\n * @param options\n * @param options.public eg ['Read', 'Write']\n *\n * @returns Resolves with aclDoc uri on successful write\n */\n function setACLUserPublic ( \n docURI: string,\n me: NamedNode,\n options: {\n defaultForNew?: boolean,\n public?: []\n }\n ): Promise<NamedNode> {\n const aclDoc = store.any(\n store.sym(docURI),\n ACL_LINK\n )\n\n return Promise.resolve()\n .then(() => {\n if (aclDoc) {\n return aclDoc as NamedNode\n }\n\n return fetchACLRel(docURI).catch(err => {\n throw new Error(`Error fetching rel=ACL header for ${docURI}: ${err}`)\n })\n })\n .then(aclDoc => {\n const aclText = genACLText(docURI, me, aclDoc.uri, options)\n if (!store.fetcher) {\n throw new Error('Cannot PUT this, store has no fetcher')\n }\n return store.fetcher\n .webOperation('PUT', aclDoc.uri, {\n data: aclText,\n contentType: 'text/turtle'\n })\n .then(result => {\n if (!result.ok) {\n throw new Error('Error writing ACL text: ' + result.error)\n }\n\n return aclDoc\n })\n })\n }\n\n /**\n * @param docURI\n * @returns\n */\n function fetchACLRel (docURI: string): Promise<NamedNode> {\n const fetcher = store.fetcher\n if (!fetcher) {\n throw new Error('Cannot fetch ACL rel, store has no fetcher')\n }\n\n return fetcher.load(docURI).then(result => {\n if (!result.ok) {\n throw new Error('fetchACLRel: While loading:' + (result as any).error)\n }\n\n const aclDoc = store.any(\n store.sym(docURI),\n ACL_LINK\n )\n\n if (!aclDoc) {\n throw new Error('fetchACLRel: No Link rel=ACL header for ' + docURI)\n }\n\n return aclDoc as NamedNode\n })\n }\n\n /**\n * @param docURI\n * @param me\n * @param aclURI\n * @param options\n *\n * @returns Serialized ACL\n */\n function genACLText (\n docURI: string,\n me: NamedNode,\n aclURI: string,\n options: {\n defaultForNew?: boolean,\n public?: []\n } = {}\n ): string | undefined {\n const optPublic = options.public || []\n const g = graph()\n const auth = Namespace('http://www.w3.org/ns/auth/acl#')\n let a = g.sym(`${aclURI}#a1`)\n const acl = g.sym(aclURI)\n const doc = g.sym(docURI)\n g.add(a, ns.rdf('type'), auth('Authorization'), acl)\n g.add(a, auth('accessTo'), doc, acl)\n if (options.defaultForNew) {\n g.add(a, auth('default'), doc, acl)\n }\n g.add(a, auth('agent'), me, acl)\n g.add(a, auth('mode'), auth('Read'), acl)\n g.add(a, auth('mode'), auth('Write'), acl)\n g.add(a, auth('mode'), auth('Control'), acl)\n\n if (optPublic.length) {\n a = g.sym(`${aclURI}#a2`)\n g.add(a, ns.rdf('type'), auth('Authorization'), acl)\n g.add(a, auth('accessTo'), doc, acl)\n g.add(a, auth('agentClass'), ns.foaf('Agent'), acl)\n for (let p = 0; p < optPublic.length; p++) {\n g.add(a, auth('mode'), auth(optPublic[p]), acl) // Like 'Read' etc\n }\n }\n return serialize(acl, g, aclURI)\n }\n return {\n findAclDocUrl,\n findEffectiveAcl,\n findAccessGrants,\n roleFromModes,\n modesFromRole,\n planGrant,\n planRevoke,\n planPublicRead,\n applyPlan,\n classifyAccessControlSubject,\n setACLUserPublic,\n genACLText\n }\n}"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"aclLogic.esm.js","names":[],"sources":["../../src/acl/aclLogic.ts"],"sourcesContent":["import { applyPlan as applyAuthorizationPlan, Authenticated, findEffectiveACL, planGrant as planAuthorizationGrant, planPublicRead as planAuthorizationPublicRead, planRevoke as planAuthorizationRevoke, Public, type AccessMode, type AccessSubject, type ACLContext, type Authorization, type PatchPlan } from '@dokieli/web-access-control'\nimport { graph, NamedNode, Namespace, serialize, sym } from 'rdflib'\nimport type { AclLogic } from '../types'\nimport { ns as namespace } from '../util/ns'\nimport * as accessControlSubjects from './accessControlSubjects'\n\n// Will remove the below comment when i'm done with the manage access work\n// Helpers available from @dokieli/web-access-control:\n// - Discovery: findEffectiveACL, parentContainer\n// - ACL context and parsing: buildACLContext, authorizationsFromDataset, parseTurtle\n// - Query helpers: agentsWithMode, hasControl, isPublic, modesFor, subjectsWithMode\n// - Plan helpers: planContainerACL, planGrant, planOwnerControl, planPublicRead, planRevoke\n// - Serialization and application: serializeTerm, toN3Patch, toSparqlUpdate, toTurtle, applyPlan, negotiatePatchContentType\n// - Link and allow parsing: allows, parseWacAllow, linkTargets, parseLinkHeader\n// - Terms and constants: ACCESS_MODES, ACL, Authenticated, FOAF, modeFromIRI, modeIRI, namedNode, Public, quad, RDF_TYPE, variable\n\nexport const ACCESS_ROLES = ['Owner', 'Editor', 'No Access', 'Viewer', 'Poster', 'Submitter'] as const\nexport const PUBLIC_ACCESS_ROLES = ['No Access', 'Viewer'] as const\nexport { Authenticated, Public } from '@dokieli/web-access-control'\n\nexport type AccessRole = typeof ACCESS_ROLES[number]\nexport type PublicAccessRole = typeof PUBLIC_ACCESS_ROLES[number]\n\nexport const ACL_LINK = sym(\n 'http://www.iana.org/assignments/link-relations/acl'\n)\n\nexport function createAclLogic(store): AclLogic {\n\n const ns = namespace\n const ACCESS_ROLE_RULES: Array<{ label: AccessRole, modes: AccessMode[] }> = [\n { label: 'Owner', modes: ['Read', 'Write', 'Control'] },\n { label: 'Editor', modes: ['Read', 'Write'] },\n { label: 'Poster', modes: ['Append', 'Read'] },\n { label: 'Submitter', modes: ['Append'] },\n { label: 'Viewer', modes: ['Read'] },\n { label: 'No Access', modes: [] }\n ]\n const PUBLIC_ROLE_RULES: Array<{ label: PublicAccessRole, modes: AccessMode[] }> = [\n { label: 'Viewer', modes: ['Read'] },\n { label: 'No Access', modes: [] }\n ]\n\n function roleFromModes (modes: Iterable<AccessMode>): AccessRole {\n const modeSet = new Set(modes)\n const matchingRule = ACCESS_ROLE_RULES.find(rule => rule.label !== 'No Access' && rule.modes.every(mode => modeSet.has(mode)))\n\n return matchingRule?.label ?? 'No Access'\n }\n\n function modesFromRole (role: AccessRole): AccessMode[] {\n return [...(ACCESS_ROLE_RULES.find(rule => rule.label === role)?.modes ?? [])]\n }\n\n function publicRoleFromModes (modes: Iterable<AccessMode>): PublicAccessRole {\n const modeSet = new Set(modes)\n const matchingRule = PUBLIC_ROLE_RULES.find(rule => rule.label !== 'No Access' && rule.modes.every(mode => modeSet.has(mode)))\n\n return matchingRule?.label ?? 'No Access'\n }\n\n function modesFromPublicRole (role: PublicAccessRole): AccessMode[] {\n return [...(PUBLIC_ROLE_RULES.find(rule => rule.label === role)?.modes ?? [])]\n }\n\n function getFetch() {\n const fetcher = store.fetcher as {\n _fetch?: (url: string, init?: RequestInit) => Promise<Response>\n fetch?: (url: string, init?: RequestInit) => Promise<Response>\n } | undefined\n const fetch = fetcher?._fetch ?? fetcher?.fetch\n if (!fetch) {\n throw new Error('Cannot find effective ACL, store has no fetcher')\n }\n return fetch.bind(fetcher)\n }\n \n async function findAclDocUrl(url: NamedNode) {\n await store.fetcher.load(url)\n const docNode = store.any(url, ACL_LINK)\n if (!docNode) {\n throw new Error(`No ACL link discovered for ${url}`)\n }\n return docNode.value\n }\n\n async function findEffectiveAcl(resourceURL: string | NamedNode): Promise<ACLContext> {\n const url = typeof resourceURL === 'string' ? resourceURL : resourceURL.value\n return findEffectiveACL(url, { fetch: getFetch() })\n }\n\n async function findAccessGrants(resourceURL: string | NamedNode): Promise<Authorization[]> {\n const context = await findEffectiveAcl(resourceURL)\n return context.authorizations\n }\n\n async function planGrant(resourceURL: string | NamedNode, subject: AccessSubject, modes: AccessMode[]): Promise<PatchPlan> {\n const context = await findEffectiveAcl(resourceURL)\n return planAuthorizationGrant(context, subject, modes)\n }\n\n async function planRevoke(resourceURL: string | NamedNode, subject: AccessSubject): Promise<PatchPlan> {\n const context = await findEffectiveAcl(resourceURL)\n return planAuthorizationRevoke(context, subject)\n }\n\n async function planPublicRead(resourceURL: string | NamedNode, enabled: boolean): Promise<PatchPlan> {\n const context = await findEffectiveAcl(resourceURL)\n return planAuthorizationPublicRead(context, enabled)\n }\n\n async function applyPlan(plan: PatchPlan): Promise<Response> {\n return applyAuthorizationPlan(plan, { fetch: getFetch() })\n }\n\n async function classifyAccessControlSubject(principle: string) {\n return accessControlSubjects.classifyAccessControlSubject(store, principle)\n }\n /**\n * Simple Access Control\n *\n * This function sets up a simple default ACL for a resource, with\n * RWC for the owner, and a specified access (default none) for the public.\n * In all cases owner has read write control.\n * Parameter lists modes allowed to public\n *\n * @param options\n * @param options.public eg ['Read', 'Write']\n *\n * @returns Resolves with aclDoc uri on successful write\n */\n function setACLUserPublic ( \n docURI: string,\n me: NamedNode,\n options: {\n defaultForNew?: boolean,\n public?: []\n }\n ): Promise<NamedNode> {\n const aclDoc = store.any(\n store.sym(docURI),\n ACL_LINK\n )\n\n return Promise.resolve()\n .then(() => {\n if (aclDoc) {\n return aclDoc as NamedNode\n }\n\n return fetchACLRel(docURI).catch(err => {\n throw new Error(`Error fetching rel=ACL header for ${docURI}: ${err}`)\n })\n })\n .then(aclDoc => {\n const aclText = genACLText(docURI, me, aclDoc.uri, options)\n if (!store.fetcher) {\n throw new Error('Cannot PUT this, store has no fetcher')\n }\n return store.fetcher\n .webOperation('PUT', aclDoc.uri, {\n data: aclText,\n contentType: 'text/turtle'\n })\n .then(result => {\n if (!result.ok) {\n throw new Error('Error writing ACL text: ' + result.error)\n }\n\n return aclDoc\n })\n })\n }\n\n /**\n * @param docURI\n * @returns\n */\n function fetchACLRel (docURI: string): Promise<NamedNode> {\n const fetcher = store.fetcher\n if (!fetcher) {\n throw new Error('Cannot fetch ACL rel, store has no fetcher')\n }\n\n return fetcher.load(docURI).then(result => {\n if (!result.ok) {\n throw new Error('fetchACLRel: While loading:' + (result as any).error)\n }\n\n const aclDoc = store.any(\n store.sym(docURI),\n ACL_LINK\n )\n\n if (!aclDoc) {\n throw new Error('fetchACLRel: No Link rel=ACL header for ' + docURI)\n }\n\n return aclDoc as NamedNode\n })\n }\n\n /**\n * @param docURI\n * @param me\n * @param aclURI\n * @param options\n *\n * @returns Serialized ACL\n */\n function genACLText (\n docURI: string,\n me: NamedNode,\n aclURI: string,\n options: {\n defaultForNew?: boolean,\n public?: []\n } = {}\n ): string | undefined {\n const optPublic = options.public || []\n const g = graph()\n const auth = Namespace('http://www.w3.org/ns/auth/acl#')\n let a = g.sym(`${aclURI}#a1`)\n const acl = g.sym(aclURI)\n const doc = g.sym(docURI)\n g.add(a, ns.rdf('type'), auth('Authorization'), acl)\n g.add(a, auth('accessTo'), doc, acl)\n if (options.defaultForNew) {\n g.add(a, auth('default'), doc, acl)\n }\n g.add(a, auth('agent'), me, acl)\n g.add(a, auth('mode'), auth('Read'), acl)\n g.add(a, auth('mode'), auth('Write'), acl)\n g.add(a, auth('mode'), auth('Control'), acl)\n\n if (optPublic.length) {\n a = g.sym(`${aclURI}#a2`)\n g.add(a, ns.rdf('type'), auth('Authorization'), acl)\n g.add(a, auth('accessTo'), doc, acl)\n g.add(a, auth('agentClass'), ns.foaf('Agent'), acl)\n for (let p = 0; p < optPublic.length; p++) {\n g.add(a, auth('mode'), auth(optPublic[p]), acl) // Like 'Read' etc\n }\n }\n return serialize(acl, g, aclURI)\n }\n return {\n findAclDocUrl,\n findEffectiveAcl,\n findAccessGrants,\n roleFromModes,\n modesFromRole,\n publicRoleFromModes,\n modesFromPublicRole,\n planGrant,\n planRevoke,\n planPublicRead,\n applyPlan,\n classifyAccessControlSubject,\n setACLUserPublic,\n genACLText,\n Authenticated,\n Public,\n PUBLIC_ACCESS_ROLES\n }\n}"],"mappings":"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"}
|
package/dist/index.cjs.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./authSession/identityState.cjs.js"),t=require("./acl/aclLogic.cjs.js"),n=require("./authn/authUtil.cjs.js"),r=require("./logic/CustomError.cjs.js"),i=require("./typeIndex/typeIndexLogic.cjs.js"),a=require("./directory/directoryLogic.cjs.js"),o=require("./logic/solidLogicSingleton.cjs.js"),s=require("./authn/serverLogout.cjs.js"),c=require("./issuer/issuerLogic.cjs.js");
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./authSession/identityState.cjs.js"),t=require("./acl/aclLogic.cjs.js"),n=require("./authn/authUtil.cjs.js"),r=require("./logic/CustomError.cjs.js"),i=require("./typeIndex/typeIndexLogic.cjs.js"),a=require("./directory/directoryLogic.cjs.js"),o=require("./logic/solidLogicSingleton.cjs.js"),s=require("./authn/serverLogout.cjs.js"),c=require("./issuer/issuerLogic.cjs.js");let l=require("@dokieli/web-access-control");var u=o.solidLogicSingleton.authn,d=o.solidLogicSingleton.authn.authSession,f=o.solidLogicSingleton.store;exports.ACCESS_ROLES=t.ACCESS_ROLES,exports.ACL_LINK=t.ACL_LINK,Object.defineProperty(exports,"Authenticated",{enumerable:!0,get:function(){return l.Authenticated}}),exports.CrossOriginForbiddenError=r.CrossOriginForbiddenError,exports.DEFAULT_DIRECTORY_CATALOG_URL=a.DEFAULT_DIRECTORY_CATALOG_URL,exports.DEFAULT_DIRECTORY_SOURCES=a.DEFAULT_DIRECTORY_SOURCES,exports.FetchError=r.FetchError,exports.NotEditableError=r.NotEditableError,exports.NotFoundError=r.NotFoundError,exports.PUBLIC_ACCESS_ROLES=t.PUBLIC_ACCESS_ROLES,Object.defineProperty(exports,"Public",{enumerable:!0,get:function(){return l.Public}}),exports.SameOriginForbiddenError=r.SameOriginForbiddenError,exports.UnauthorizedError=r.UnauthorizedError,exports.WebOperationError=r.WebOperationError,exports.appContext=n.appContext,exports.authSession=d,exports.authn=u,exports.createDirectoryLogic=a.createDirectoryLogic,exports.createTypeIndexLogic=i.createTypeIndexLogic,exports.getSuggestedIssuers=c.getSuggestedIssuers,exports.offlineTestID=n.offlineTestID,exports.performServerSideLogout=s.performServerSideLogout,exports.reloadOnIdentityReplaced=e.reloadOnIdentityReplaced,exports.solidLogicSingleton=o.solidLogicSingleton,exports.store=f;
|
|
2
2
|
//# sourceMappingURL=index.cjs.js.map
|
package/dist/index.cjs.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs.js","names":[],"sources":["../src/index.ts"],"sourcesContent":["// Make these variables directly accessible as it is what you need most of the time\n// This also makes these variable globaly accesible in mashlib\nimport { solidLogicSingleton } from './logic/solidLogicSingleton'\n\nconst authn = solidLogicSingleton.authn\nconst authSession = solidLogicSingleton.authn.authSession\nconst store = solidLogicSingleton.store\n\nexport { ACL_LINK, ACCESS_ROLES } from './acl/aclLogic'\nexport type { AccessRole } from './acl/aclLogic'\nexport { offlineTestID, appContext } from './authn/authUtil'\nexport { performServerSideLogout } from './authn/serverLogout'\nexport { reloadOnIdentityReplaced } from './authSession/identityState'\nexport { getSuggestedIssuers } from './issuer/issuerLogic'\nexport { createTypeIndexLogic } from './typeIndex/typeIndexLogic'\nexport { createDirectoryLogic, DEFAULT_DIRECTORY_CATALOG_URL, DEFAULT_DIRECTORY_SOURCES } from './directory/directoryLogic'\nexport type { AccessControlSubjectKind, AccessControlSubject } from './acl/accessControlSubjects'\nexport type { ACLContext, AccessMode, AccessSubject, Authorization, PatchPlan } from './types'\nexport type { AppDetails, SolidNamespace, AuthenticationContext, SolidLogic, ChatLogic, DirectoryLogic, DirectoryEntry, DirectorySearchOptions, DirectoryRelationshipLabel, DirectorySource } from './types'\nexport { UnauthorizedError, CrossOriginForbiddenError, SameOriginForbiddenError, NotFoundError, FetchError, NotEditableError, WebOperationError } from './logic/CustomError'\n\nexport {\n solidLogicSingleton, // solidLogicSingleton is exported entirely because it is used in solid-panes\n store,\n authn,\n authSession\n}\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.cjs.js","names":[],"sources":["../src/index.ts"],"sourcesContent":["// Make these variables directly accessible as it is what you need most of the time\n// This also makes these variable globaly accesible in mashlib\nimport { solidLogicSingleton } from './logic/solidLogicSingleton'\n\nconst authn = solidLogicSingleton.authn\nconst authSession = solidLogicSingleton.authn.authSession\nconst store = solidLogicSingleton.store\n\nexport { ACL_LINK, ACCESS_ROLES, PUBLIC_ACCESS_ROLES, Authenticated, Public } from './acl/aclLogic'\nexport type { AccessRole, PublicAccessRole } from './acl/aclLogic'\nexport { offlineTestID, appContext } from './authn/authUtil'\nexport { performServerSideLogout } from './authn/serverLogout'\nexport { reloadOnIdentityReplaced } from './authSession/identityState'\nexport { getSuggestedIssuers } from './issuer/issuerLogic'\nexport { createTypeIndexLogic } from './typeIndex/typeIndexLogic'\nexport { createDirectoryLogic, DEFAULT_DIRECTORY_CATALOG_URL, DEFAULT_DIRECTORY_SOURCES } from './directory/directoryLogic'\nexport type { AccessControlSubjectKind, AccessControlSubject } from './acl/accessControlSubjects'\nexport type { ACLContext, AccessMode, AccessSubject, Authorization, PatchPlan } from './types'\nexport type { AppDetails, SolidNamespace, AuthenticationContext, SolidLogic, ChatLogic, DirectoryLogic, DirectoryEntry, DirectorySearchOptions, DirectoryRelationshipLabel, DirectorySource } from './types'\nexport { UnauthorizedError, CrossOriginForbiddenError, SameOriginForbiddenError, NotFoundError, FetchError, NotEditableError, WebOperationError } from './logic/CustomError'\n\nexport {\n solidLogicSingleton, // solidLogicSingleton is exported entirely because it is used in solid-panes\n store,\n authn,\n authSession\n}\n"],"mappings":"sfAIA,IAAM,EAAQ,EAAA,oBAAoB,MAC5B,EAAc,EAAA,oBAAoB,MAAM,YACxC,EAAQ,EAAA,oBAAoB"}
|
package/dist/index.d.ts
CHANGED
|
@@ -2,8 +2,8 @@ import { solidLogicSingleton } from './logic/solidLogicSingleton';
|
|
|
2
2
|
declare const authn: import("./types").AuthnLogic;
|
|
3
3
|
declare const authSession: import("./authSession/authSession").SessionWithLegacyEvents;
|
|
4
4
|
declare const store: import("rdflib").LiveStore;
|
|
5
|
-
export { ACL_LINK, ACCESS_ROLES } from './acl/aclLogic';
|
|
6
|
-
export type { AccessRole } from './acl/aclLogic';
|
|
5
|
+
export { ACL_LINK, ACCESS_ROLES, PUBLIC_ACCESS_ROLES, Authenticated, Public } from './acl/aclLogic';
|
|
6
|
+
export type { AccessRole, PublicAccessRole } from './acl/aclLogic';
|
|
7
7
|
export { offlineTestID, appContext } from './authn/authUtil';
|
|
8
8
|
export { performServerSideLogout } from './authn/serverLogout';
|
|
9
9
|
export { reloadOnIdentityReplaced } from './authSession/identityState';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAA;AAEjE,QAAA,MAAM,KAAK,8BAA4B,CAAA;AACvC,QAAA,MAAM,WAAW,6DAAwC,CAAA;AACzD,QAAA,MAAM,KAAK,4BAA4B,CAAA;AAEvC,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAA;AAEjE,QAAA,MAAM,KAAK,8BAA4B,CAAA;AACvC,QAAA,MAAM,WAAW,6DAAwC,CAAA;AACzD,QAAA,MAAM,KAAK,4BAA4B,CAAA;AAEvC,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAA;AACnG,YAAY,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAA;AAClE,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAC5D,OAAO,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAA;AAC9D,OAAO,EAAE,wBAAwB,EAAE,MAAM,6BAA6B,CAAA;AACtE,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAA;AAC1D,OAAO,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAA;AACjE,OAAO,EAAE,oBAAoB,EAAE,6BAA6B,EAAE,yBAAyB,EAAE,MAAM,4BAA4B,CAAA;AAC3H,YAAY,EAAE,wBAAwB,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAA;AACjG,YAAY,EAAE,UAAU,EAAE,UAAU,EAAE,aAAa,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,SAAS,CAAA;AAC9F,YAAY,EAAE,UAAU,EAAE,cAAc,EAAE,qBAAqB,EAAE,UAAU,EAAE,SAAS,EAAE,cAAc,EAAE,cAAc,EAAE,sBAAsB,EAAE,0BAA0B,EAAE,eAAe,EAAE,MAAM,SAAS,CAAA;AAC5M,OAAO,EAAE,iBAAiB,EAAE,yBAAyB,EAAE,wBAAwB,EAAE,aAAa,EAAE,UAAU,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAA;AAE5K,OAAO,EACL,mBAAmB,EAAE,6EAA6E;AAClG,KAAK,EACL,KAAK,EACL,WAAW,EACZ,CAAA"}
|
package/dist/index.esm.js
CHANGED
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
import { reloadOnIdentityReplaced as e } from "./authSession/identityState.esm.js";
|
|
2
|
-
import { ACCESS_ROLES as t, ACL_LINK as n } from "./acl/aclLogic.esm.js";
|
|
3
|
-
import { appContext as
|
|
4
|
-
import { CrossOriginForbiddenError as
|
|
5
|
-
import { createTypeIndexLogic as
|
|
6
|
-
import { DEFAULT_DIRECTORY_CATALOG_URL as
|
|
7
|
-
import { solidLogicSingleton as
|
|
8
|
-
import { performServerSideLogout as
|
|
9
|
-
import { getSuggestedIssuers as
|
|
2
|
+
import { ACCESS_ROLES as t, ACL_LINK as n, Authenticated as r, PUBLIC_ACCESS_ROLES as i, Public as a } from "./acl/aclLogic.esm.js";
|
|
3
|
+
import { appContext as o, offlineTestID as s } from "./authn/authUtil.esm.js";
|
|
4
|
+
import { CrossOriginForbiddenError as c, FetchError as l, NotEditableError as u, NotFoundError as d, SameOriginForbiddenError as f, UnauthorizedError as p, WebOperationError as m } from "./logic/CustomError.esm.js";
|
|
5
|
+
import { createTypeIndexLogic as h } from "./typeIndex/typeIndexLogic.esm.js";
|
|
6
|
+
import { DEFAULT_DIRECTORY_CATALOG_URL as g, DEFAULT_DIRECTORY_SOURCES as _, createDirectoryLogic as v } from "./directory/directoryLogic.esm.js";
|
|
7
|
+
import { solidLogicSingleton as y } from "./logic/solidLogicSingleton.esm.js";
|
|
8
|
+
import { performServerSideLogout as b } from "./authn/serverLogout.esm.js";
|
|
9
|
+
import { getSuggestedIssuers as x } from "./issuer/issuerLogic.esm.js";
|
|
10
10
|
//#region src/index.ts
|
|
11
|
-
var
|
|
11
|
+
var S = y.authn, C = y.authn.authSession, w = y.store;
|
|
12
12
|
//#endregion
|
|
13
|
-
export { t as ACCESS_ROLES, n as ACL_LINK,
|
|
13
|
+
export { t as ACCESS_ROLES, n as ACL_LINK, r as Authenticated, c as CrossOriginForbiddenError, g as DEFAULT_DIRECTORY_CATALOG_URL, _ as DEFAULT_DIRECTORY_SOURCES, l as FetchError, u as NotEditableError, d as NotFoundError, i as PUBLIC_ACCESS_ROLES, a as Public, f as SameOriginForbiddenError, p as UnauthorizedError, m as WebOperationError, o as appContext, C as authSession, S as authn, v as createDirectoryLogic, h as createTypeIndexLogic, x as getSuggestedIssuers, s as offlineTestID, b as performServerSideLogout, e as reloadOnIdentityReplaced, y as solidLogicSingleton, w as store };
|
|
14
14
|
|
|
15
15
|
//# sourceMappingURL=index.esm.js.map
|
package/dist/index.esm.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.esm.js","names":[],"sources":["../src/index.ts"],"sourcesContent":["// Make these variables directly accessible as it is what you need most of the time\n// This also makes these variable globaly accesible in mashlib\nimport { solidLogicSingleton } from './logic/solidLogicSingleton'\n\nconst authn = solidLogicSingleton.authn\nconst authSession = solidLogicSingleton.authn.authSession\nconst store = solidLogicSingleton.store\n\nexport { ACL_LINK, ACCESS_ROLES } from './acl/aclLogic'\nexport type { AccessRole } from './acl/aclLogic'\nexport { offlineTestID, appContext } from './authn/authUtil'\nexport { performServerSideLogout } from './authn/serverLogout'\nexport { reloadOnIdentityReplaced } from './authSession/identityState'\nexport { getSuggestedIssuers } from './issuer/issuerLogic'\nexport { createTypeIndexLogic } from './typeIndex/typeIndexLogic'\nexport { createDirectoryLogic, DEFAULT_DIRECTORY_CATALOG_URL, DEFAULT_DIRECTORY_SOURCES } from './directory/directoryLogic'\nexport type { AccessControlSubjectKind, AccessControlSubject } from './acl/accessControlSubjects'\nexport type { ACLContext, AccessMode, AccessSubject, Authorization, PatchPlan } from './types'\nexport type { AppDetails, SolidNamespace, AuthenticationContext, SolidLogic, ChatLogic, DirectoryLogic, DirectoryEntry, DirectorySearchOptions, DirectoryRelationshipLabel, DirectorySource } from './types'\nexport { UnauthorizedError, CrossOriginForbiddenError, SameOriginForbiddenError, NotFoundError, FetchError, NotEditableError, WebOperationError } from './logic/CustomError'\n\nexport {\n solidLogicSingleton, // solidLogicSingleton is exported entirely because it is used in solid-panes\n store,\n authn,\n authSession\n}\n"],"mappings":";;;;;;;;;;AAIA,IAAM,IAAQ,EAAoB,OAC5B,IAAc,EAAoB,MAAM,aACxC,IAAQ,EAAoB"}
|
|
1
|
+
{"version":3,"file":"index.esm.js","names":[],"sources":["../src/index.ts"],"sourcesContent":["// Make these variables directly accessible as it is what you need most of the time\n// This also makes these variable globaly accesible in mashlib\nimport { solidLogicSingleton } from './logic/solidLogicSingleton'\n\nconst authn = solidLogicSingleton.authn\nconst authSession = solidLogicSingleton.authn.authSession\nconst store = solidLogicSingleton.store\n\nexport { ACL_LINK, ACCESS_ROLES, PUBLIC_ACCESS_ROLES, Authenticated, Public } from './acl/aclLogic'\nexport type { AccessRole, PublicAccessRole } from './acl/aclLogic'\nexport { offlineTestID, appContext } from './authn/authUtil'\nexport { performServerSideLogout } from './authn/serverLogout'\nexport { reloadOnIdentityReplaced } from './authSession/identityState'\nexport { getSuggestedIssuers } from './issuer/issuerLogic'\nexport { createTypeIndexLogic } from './typeIndex/typeIndexLogic'\nexport { createDirectoryLogic, DEFAULT_DIRECTORY_CATALOG_URL, DEFAULT_DIRECTORY_SOURCES } from './directory/directoryLogic'\nexport type { AccessControlSubjectKind, AccessControlSubject } from './acl/accessControlSubjects'\nexport type { ACLContext, AccessMode, AccessSubject, Authorization, PatchPlan } from './types'\nexport type { AppDetails, SolidNamespace, AuthenticationContext, SolidLogic, ChatLogic, DirectoryLogic, DirectoryEntry, DirectorySearchOptions, DirectoryRelationshipLabel, DirectorySource } from './types'\nexport { UnauthorizedError, CrossOriginForbiddenError, SameOriginForbiddenError, NotFoundError, FetchError, NotEditableError, WebOperationError } from './logic/CustomError'\n\nexport {\n solidLogicSingleton, // solidLogicSingleton is exported entirely because it is used in solid-panes\n store,\n authn,\n authSession\n}\n"],"mappings":";;;;;;;;;;AAIA,IAAM,IAAQ,EAAoB,OAC5B,IAAc,EAAoB,MAAM,aACxC,IAAQ,EAAoB"}
|
package/dist/types.d.ts
CHANGED
|
@@ -2,7 +2,7 @@ import type { SessionWithLegacyEvents } from './authSession/authSession';
|
|
|
2
2
|
import type { ACLContext, AccessMode, AccessSubject, Authorization, PatchPlan } from '@dokieli/web-access-control';
|
|
3
3
|
import { LiveStore, NamedNode, Statement } from 'rdflib';
|
|
4
4
|
import type { AccessControlSubject } from './acl/accessControlSubjects';
|
|
5
|
-
import type { AccessRole } from './acl/aclLogic';
|
|
5
|
+
import type { AccessRole, PublicAccessRole } from './acl/aclLogic';
|
|
6
6
|
export type AppDetails = {
|
|
7
7
|
noun: string;
|
|
8
8
|
appPathSegment: string;
|
|
@@ -85,6 +85,8 @@ export interface AclLogic {
|
|
|
85
85
|
classifyAccessControlSubject: (principle: string) => Promise<AccessControlSubject | undefined>;
|
|
86
86
|
roleFromModes: (modes: Iterable<AccessMode>) => AccessRole;
|
|
87
87
|
modesFromRole: (role: AccessRole) => AccessMode[];
|
|
88
|
+
publicRoleFromModes: (modes: Iterable<AccessMode>) => PublicAccessRole;
|
|
89
|
+
modesFromPublicRole: (role: PublicAccessRole) => AccessMode[];
|
|
88
90
|
planGrant: (resourceURL: string | NamedNode, subject: AccessSubject, modes: AccessMode[]) => Promise<PatchPlan>;
|
|
89
91
|
planRevoke: (resourceURL: string | NamedNode, subject: AccessSubject) => Promise<PatchPlan>;
|
|
90
92
|
planPublicRead: (resourceURL: string | NamedNode, enabled: boolean) => Promise<PatchPlan>;
|
|
@@ -97,6 +99,9 @@ export interface AclLogic {
|
|
|
97
99
|
defaultForNew?: boolean;
|
|
98
100
|
public?: [];
|
|
99
101
|
}) => string | undefined;
|
|
102
|
+
Authenticated: AccessSubject;
|
|
103
|
+
Public: AccessSubject;
|
|
104
|
+
PUBLIC_ACCESS_ROLES: readonly PublicAccessRole[];
|
|
100
105
|
}
|
|
101
106
|
export type { ACLContext, AccessMode, AccessSubject, Authorization, PatchPlan };
|
|
102
107
|
export interface InboxLogic {
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAA;AACxE,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,aAAa,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAA;AAClH,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAA;AACxD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAA;AACvE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAA;AACxE,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,aAAa,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAA;AAClH,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAA;AACxD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAA;AACvE,OAAO,KAAK,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAA;AAElE,MAAM,MAAM,UAAU,GAAG;IACrB,IAAI,EAAE,MAAM,CAAA;IACZ,cAAc,EAAE,MAAM,CAAA;CACzB,CAAA;AAED,MAAM,MAAM,qBAAqB,GAAG;IAChC,UAAU,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,CAAA;IAC7B,GAAG,CAAC,EAAE,WAAW,CAAA;IACjB,GAAG,CAAC,EAAE,YAAY,CAAA;IAClB,KAAK,CAAC,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,KAAK,CAAC,SAAS,CAAC,CAAA;KAAE,CAAA;IAC3C,SAAS,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,CAAA;IAC5B,EAAE,CAAC,EAAE,SAAS,GAAG,IAAI,CAAA;IACrB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,eAAe,CAAC,EAAE,SAAS,CAAA;IAC3B,oBAAoB,CAAC,EAAE,MAAM,CAAA;IAC7B,aAAa,CAAC,EAAE,SAAS,CAAA;IACzB,UAAU,CAAC,EAAE,WAAW,CAAA;CAC3B,CAAA;AAED,MAAM,WAAW,UAAU;IACvB,WAAW,EAAE,uBAAuB,CAAA;IACpC,WAAW,EAAE,MAAM,SAAS,GAAG,IAAI,CAAA;IACnC,SAAS,EAAE,CAAC,CAAC,EAAE,eAAe,CAAC,EAAE,CAAC,EAAE,EAAE,SAAS,GAAG,IAAI,KAAK,CAAC,KAAK,OAAO,CAAC,SAAS,GAAG,CAAC,GAAG,IAAI,CAAC,CAAA;IAC9F,QAAQ,EAAE,CAAC,KAAK,EAAE,SAAS,GAAG,MAAM,GAAG,IAAI,EACvC,OAAO,CAAC,EAAE,qBAAqB,KAAK,SAAS,GAAG,IAAI,CAAA;IACxD;;;;OAIG;IACH,OAAO,CAAC,EAAE,MAAM,IAAI,CAAA;CACvB;AAED,MAAM,WAAW,cAAc;IAC3B,CAAC,GAAG,EAAE,MAAM,GAAG,CAAC,IAAI,EAAE,MAAM,KAAK,SAAS,CAAA;CAC7C;AAED,MAAM,MAAM,cAAc,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,SAAS,CAAC;IAAC,KAAK,EAAE,SAAS,CAAA;CAAE,CAAA;AAClF,MAAM,MAAM,SAAS,GAAG;IAAE,QAAQ,EAAE,SAAS,CAAC;IAAC,IAAI,EAAE,SAAS,CAAC;IAAC,KAAK,EAAE,cAAc,CAAA;CAAE,CAAA;AAEvF,MAAM,WAAW,cAAc;IAC3B,EAAE,CAAC,EAAE,SAAS,CAAC;IACf,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB,OAAO,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,kBAAkB;IACnC,WAAW,EAAE,SAAS,CAAC;CACtB;AAED,MAAM,WAAW,SAAS;IACtB,MAAM,EAAE,CAAC,aAAa,EAAE,SAAS,EAAE,EAAE,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACvF,qBAAqB,EAAE,CAAC,SAAS,KAAA,EAAE,EAAE,KAAA,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/D,QAAQ,EAAE,CAAC,OAAO,EAAE,SAAS,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAChD,eAAe,EAAE,CAAC,aAAa,EAAE,SAAS,EAAE,EAAE,EAAE,SAAS,KAAK,OAAO,CAAC,SAAS,CAAC,CAAC;IACjF,OAAO,EAAE,CAAC,cAAc,EAAE,cAAc,KAAK,OAAO,CAAC,kBAAkB,CAAC,CAAC;IACzE,OAAO,EAAE,CAAC,OAAO,EAAE,SAAS,EAAE,OAAO,KAAA,KAAK,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,CAAC;IACpE,UAAU,EAAE,CAAC,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,KAAK,IAAI,CAAA;CACjE;AAED,MAAM,WAAW,IAAI;IACjB,EAAE,EAAE,SAAS,CAAC;IACd,aAAa,EAAE,SAAS,CAAC;IACzB,MAAM,EAAE,OAAO,CAAA;CAClB;AAED,MAAM,WAAW,YAAY;IACzB,uBAAuB,EAAE,CAAC,IAAI,EAAE,SAAS,KAAK,OAAO,CAAC,SAAS,GAAG,SAAS,CAAC,CAAC;IAC7E,eAAe,EAAE,CAAC,IAAI,EAAE,SAAS,KAAK,OAAO,CAAC,SAAS,CAAC,CAAC;IACzD,WAAW,EAAE,CAAC,IAAI,EAAE,SAAS,KAAK,OAAO,CAAC,SAAS,CAAC,CAAC;IACrD,MAAM,EAAE,MAAM,OAAO,CAAC,SAAS,CAAC,CAAC;IACjC,UAAU,EAAE,CAAC,IAAI,EAAE,SAAS,KAAK,SAAS,CAAC;IAC3C,YAAY,EAAE,CAAC,IAAI,EAAE,SAAS,KAAK,OAAO,CAAC,SAAS,CAAC,CAAC;IACtD,WAAW,EAAE,CAAC,EAAE,EAAE,SAAS,KAAK,IAAI,GAAG,IAAI,CAAA;CAC9C;AAED,MAAM,WAAW,QAAQ;IACrB,aAAa,EAAE,CAAC,GAAG,EAAE,SAAS,KAAK,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;IAC/D,gBAAgB,EAAE,CAAC,WAAW,EAAE,MAAM,GAAG,SAAS,KAAK,OAAO,CAAC,UAAU,CAAC,CAAC;IAC3E,gBAAgB,EAAE,CAAC,WAAW,EAAE,MAAM,GAAG,SAAS,KAAK,OAAO,CAAC,aAAa,EAAE,CAAC,CAAC;IAChF,4BAA4B,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC,oBAAoB,GAAG,SAAS,CAAC,CAAC;IAC/F,aAAa,EAAE,CAAC,KAAK,EAAE,QAAQ,CAAC,UAAU,CAAC,KAAK,UAAU,CAAC;IAC3D,aAAa,EAAE,CAAC,IAAI,EAAE,UAAU,KAAK,UAAU,EAAE,CAAC;IAClD,mBAAmB,EAAE,CAAC,KAAK,EAAE,QAAQ,CAAC,UAAU,CAAC,KAAK,gBAAgB,CAAC;IACvE,mBAAmB,EAAE,CAAC,IAAI,EAAE,gBAAgB,KAAK,UAAU,EAAE,CAAC;IAC9D,SAAS,EAAE,CAAC,WAAW,EAAE,MAAM,GAAG,SAAS,EAAE,OAAO,EAAE,aAAa,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,OAAO,CAAC,SAAS,CAAC,CAAC;IAChH,UAAU,EAAE,CAAC,WAAW,EAAE,MAAM,GAAG,SAAS,EAAE,OAAO,EAAE,aAAa,KAAK,OAAO,CAAC,SAAS,CAAC,CAAC;IAC5F,cAAc,EAAE,CAAC,WAAW,EAAE,MAAM,GAAG,SAAS,EAAE,OAAO,EAAE,OAAO,KAAK,OAAO,CAAC,SAAS,CAAC,CAAC;IAC1F,SAAS,EAAE,CAAC,IAAI,EAAE,SAAS,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAC;IAClD,gBAAgB,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,SAAS,EAC5C,OAAO,EAAE;QACL,aAAa,CAAC,EAAE,OAAO,CAAC;QACxB,MAAM,CAAC,EAAE,EAAE,CAAA;KACd,KACA,OAAO,CAAC,SAAS,CAAC,CAAC;IACxB,UAAU,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EACtD,OAAO,EAAE;QACL,aAAa,CAAC,EAAE,OAAO,CAAC;QACxB,MAAM,CAAC,EAAE,EAAE,CAAA;KACd,KACA,MAAM,GAAG,SAAS,CAAA;IACvB,aAAa,EAAE,aAAa,CAAA;IAC5B,MAAM,EAAE,aAAa,CAAA;IACrB,mBAAmB,EAAE,SAAS,gBAAgB,EAAE,CAAA;CACnD;AAED,YAAY,EAAE,UAAU,EAAE,UAAU,EAAE,aAAa,EAAE,aAAa,EAAE,SAAS,EAAE,CAAA;AAE/E,MAAM,WAAW,UAAU;IACvB,cAAc,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IACrE,cAAc,EAAE,CAAC,IAAI,CAAC,EAAE,SAAS,KAAK,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC;IAC3D,UAAU,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,KAAK,IAAI,CAAA;CAChD;AAED,MAAM,MAAM,qBAAqB,GAAG;IAChC,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,IAAI,CAAC,EAAE,SAAS,GAAG,IAAI,CAAA;CAC1B,CAAA;AAED,MAAM,MAAM,cAAc,GAAG;IACzB,OAAO,EAAE,OAAO,CAAA;IAChB,QAAQ,EAAE,OAAO,CAAA;CACpB,CAAA;AAED,MAAM,MAAM,wBAAwB,GAAG,cAAc,GAAG;IACpD,SAAS,EAAE,OAAO,CAAA;CACrB,CAAA;AAED,MAAM,MAAM,gBAAgB,GAAG;IAC3B,WAAW,EAAE,MAAM,GAAG,SAAS,CAAA;IAC/B,MAAM,EAAE,cAAc,CAAA;IACtB,MAAM,EAAE,MAAM,GAAG,SAAS,CAAA;IAC1B,IAAI,EAAE,MAAM,GAAG,SAAS,CAAA;IACxB,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAA;CAC/B,CAAA;AAED,MAAM,MAAM,0BAA0B,GAAG,gBAAgB,GAAG;IACxD,MAAM,EAAE,wBAAwB,CAAA;CACnC,CAAA;AAED,MAAM,WAAW,aAAa;IAC1B,eAAe,EAAE,CAAC,QAAQ,EAAE,SAAS,EAAE,OAAO,CAAC,EAAE,qBAAqB,KAAK,OAAO,CAAC,GAAG,CAAC,CAAC;IACxF,kCAAkC,EAAE,CAAC,QAAQ,EAAE,SAAS,EAAE,IAAI,CAAC,EAAE,SAAS,GAAG,IAAI,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACpG,aAAa,EAAE,CAAC,OAAO,EAAE,SAAS,KAAK,OAAO,CAAC,gBAAgB,CAAC,CAAC;IACjE,uBAAuB,EAAE,CAAC,OAAO,EAAE,SAAS,KAAK,OAAO,CAAC,0BAA0B,CAAC,CAAC;IACrF,eAAe,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAChD,WAAW,EAAE,CAAC,QAAQ,EAAE,SAAS,KAAK,OAAO,CAAC;IAC9C,uBAAuB,EAAE,CAAC,QAAQ,EAAE,SAAS,KAAK,MAAM,CAAC;IACzD,OAAO,EAAE,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,KAAK,OAAO,CAAA;CACrD;AAED,MAAM,WAAW,cAAc;IAC3B,gBAAgB,EAAE,CAAC,QAAQ,KAAA,EAAE,QAAQ,KAAA,KAAK,IAAI,EAAE,CAAC;IACjD,kBAAkB,EAAE,CAAC,IAAI,EAAE,SAAS,KAAK,OAAO,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC;IACxE,wBAAwB,EAAE,CAAC,IAAI,EAAE,SAAS,KAAK,OAAO,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC;IAC9E,kBAAkB,EAAE,CAAC,IAAI,EAAE,SAAS,KAAK,OAAO,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC;IACxE,qBAAqB,EAAE,CAAC,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,KAAK,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC;IACnF,eAAe,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC;IAC5D,sBAAsB,EAAE,CAAC,EAAE,EAAE,SAAS,KAAK,SAAS,CAAC;IACrD,uBAAuB,EAAE,CAAC,eAAe,EAAE,SAAS,KAAK,SAAS,CAAC;IACnE,mBAAmB,EAAE,CAAC,QAAQ,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,KAAK,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,CAAC;IAC/G,2BAA2B,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1D,sCAAsC,EAAE,CAAC,QAAQ,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IACnG,sBAAsB,EAAE,CAAC,KAAK,EAAE,cAAc,EAAE,QAAQ,EAAE,SAAS,GAAG,IAAI,KAAK,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC;CACvG;AAED,MAAM,MAAM,eAAe,GAAG,UAAU,GAAG,SAAS,GAAG,SAAS,GAAG,QAAQ,CAAA;AAE3E,MAAM,MAAM,0BAA0B,GAAG,QAAQ,GAAG,QAAQ,GAAG,SAAS,GAAG,OAAO,CAAA;AAElF,MAAM,MAAM,cAAc,GAAG;IACzB,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAA;IACxB,GAAG,EAAE,MAAM,CAAA;IACX,KAAK,EAAE,MAAM,CAAA;IACb,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAA;IAC3B,WAAW,EAAE,OAAO,GAAG,YAAY,CAAA;IACnC,iBAAiB,EAAE,0BAA0B,CAAA;IAC7C,OAAO,EAAE,eAAe,EAAE,CAAA;CAC7B,CAAA;AAED,MAAM,MAAM,sBAAsB,GAAG;IACjC,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,OAAO,CAAC,EAAE,eAAe,EAAE,CAAA;IAC3B,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,IAAI,CAAC,EAAE,SAAS,GAAG,IAAI,CAAA;IACvB,eAAe,CAAC,EAAE,MAAM,CAAA;CAC3B,CAAA;AAED,MAAM,WAAW,cAAc;IAC3B,MAAM,EAAE,CAAC,OAAO,CAAC,EAAE,sBAAsB,KAAK,OAAO,CAAC,cAAc,EAAE,CAAC,CAAA;CAC1E;AAED,MAAM,WAAW,UAAU;IACvB,KAAK,EAAE,SAAS,CAAC;IACjB,KAAK,EAAE,UAAU,CAAC;IAClB,GAAG,EAAE,QAAQ,CAAC;IACd,QAAQ,EAAE,aAAa,CAAC;IACxB,OAAO,EAAE,YAAY,CAAC;IACtB,KAAK,EAAE,UAAU,CAAC;IAClB,SAAS,EAAE,cAAc,CAAC;IAC1B,IAAI,EAAE,SAAS,CAAC;IAChB,SAAS,EAAE,cAAc,CAAC;IAC1B,IAAI,EAAE,CAAC,GAAG,EAAE,SAAS,GAAG,SAAS,EAAE,GAAG,MAAM,KAAK,IAAI,CAAC;IACtD,aAAa,EAAE,CAAC,GAAG,EAAE,KAAK,CAAC,SAAS,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,SAAS,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/E,UAAU,EAAE,MAAM,IAAI,CAAA;CACzB"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "solid-logic",
|
|
3
|
-
"version": "6.0.1-
|
|
3
|
+
"version": "6.0.1-1",
|
|
4
4
|
"description": "Core business logic of SolidOS",
|
|
5
5
|
"main": "dist/index.cjs.js",
|
|
6
6
|
"module": "dist/index.esm.js",
|
|
@@ -64,7 +64,7 @@
|
|
|
64
64
|
"solidos-toolkit": "dev"
|
|
65
65
|
},
|
|
66
66
|
"dependencies": {
|
|
67
|
-
"@dokieli/web-access-control": "^1.
|
|
67
|
+
"@dokieli/web-access-control": "^1.1.0",
|
|
68
68
|
"@uvdsl/solid-oidc-client-browser": "^0.2.3",
|
|
69
69
|
"solid-namespace": "^0.5.4",
|
|
70
70
|
"vite": "^8.0.16",
|