solid-logic 6.0.1-3 → 6.0.1-5
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/accessControlSubjects.cjs.js +1 -1
- package/dist/acl/accessControlSubjects.cjs.js.map +1 -1
- package/dist/acl/accessControlSubjects.d.ts.map +1 -1
- package/dist/acl/accessControlSubjects.esm.js +38 -37
- package/dist/acl/accessControlSubjects.esm.js.map +1 -1
- package/dist/acl/aclLogic.cjs.js +1 -1
- package/dist/acl/aclLogic.cjs.js.map +1 -1
- package/dist/acl/aclLogic.esm.js +2 -6
- package/dist/acl/aclLogic.esm.js.map +1 -1
- package/dist/authSession/authSession.cjs.js.map +1 -1
- package/dist/authSession/authSession.esm.js.map +1 -1
- package/dist/authSession/events.cjs.js.map +1 -1
- package/dist/authSession/events.esm.js.map +1 -1
- package/dist/authSession/flagAuthorizationOnTransitions.cjs.js.map +1 -1
- package/dist/authSession/flagAuthorizationOnTransitions.esm.js.map +1 -1
- package/dist/authSession/identityState.cjs.js +1 -1
- package/dist/authSession/identityState.cjs.js.map +1 -1
- package/dist/authSession/identityState.esm.js +3 -17
- package/dist/authSession/identityState.esm.js.map +1 -1
- package/dist/authSession/issuer.cjs.js.map +1 -1
- package/dist/authSession/issuer.esm.js.map +1 -1
- package/dist/authSession/session.cjs.js.map +1 -1
- package/dist/authSession/session.esm.js.map +1 -1
- package/dist/authn/SolidAuthnLogic.cjs.js.map +1 -1
- package/dist/authn/SolidAuthnLogic.esm.js.map +1 -1
- package/dist/authn/authUtil.cjs.js.map +1 -1
- package/dist/authn/authUtil.esm.js.map +1 -1
- package/dist/authn/serverLogout.cjs.js.map +1 -1
- package/dist/authn/serverLogout.esm.js.map +1 -1
- package/dist/chat/chatLogic.cjs.js.map +1 -1
- package/dist/chat/chatLogic.esm.js.map +1 -1
- package/dist/directory/catalogDirectory.cjs.js.map +1 -1
- package/dist/directory/catalogDirectory.esm.js.map +1 -1
- package/dist/directory/contactsDirectory.cjs.js.map +1 -1
- package/dist/directory/contactsDirectory.esm.js.map +1 -1
- package/dist/directory/directoryHelpers.cjs.js.map +1 -1
- package/dist/directory/directoryHelpers.esm.js.map +1 -1
- package/dist/directory/directoryLogic.cjs.js.map +1 -1
- package/dist/directory/directoryLogic.esm.js.map +1 -1
- package/dist/directory/friendsDirectory.cjs.js.map +1 -1
- package/dist/directory/friendsDirectory.esm.js.map +1 -1
- package/dist/inbox/inboxLogic.cjs.js.map +1 -1
- package/dist/inbox/inboxLogic.esm.js.map +1 -1
- package/dist/index.cjs.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.esm.js.map +1 -1
- package/dist/issuer/issuerLogic.cjs.js.map +1 -1
- package/dist/issuer/issuerLogic.esm.js.map +1 -1
- package/dist/logic/CustomError.cjs.js.map +1 -1
- package/dist/logic/CustomError.esm.js.map +1 -1
- package/dist/logic/solidLogic.cjs.js.map +1 -1
- package/dist/logic/solidLogic.esm.js.map +1 -1
- package/dist/logic/solidLogicSingleton.cjs.js +1 -1
- package/dist/logic/solidLogicSingleton.cjs.js.map +1 -1
- package/dist/logic/solidLogicSingleton.esm.js +1 -1
- package/dist/logic/solidLogicSingleton.esm.js.map +1 -1
- package/dist/profile/profileAclDocuments.cjs.js.map +1 -1
- package/dist/profile/profileAclDocuments.esm.js.map +1 -1
- package/dist/profile/profileDocuments.cjs.js.map +1 -1
- package/dist/profile/profileDocuments.esm.js.map +1 -1
- package/dist/profile/profileLogic.cjs.js.map +1 -1
- package/dist/profile/profileLogic.esm.js.map +1 -1
- package/dist/resource/resourceHttp.cjs.js.map +1 -1
- package/dist/resource/resourceHttp.esm.js.map +1 -1
- package/dist/resource/resourceLogic.cjs.js +1 -1
- package/dist/resource/resourceLogic.cjs.js.map +1 -1
- package/dist/resource/resourceLogic.d.ts.map +1 -1
- package/dist/resource/resourceLogic.esm.js +124 -57
- package/dist/resource/resourceLogic.esm.js.map +1 -1
- package/dist/resource/resourceMetadata.cjs.js +1 -1
- package/dist/resource/resourceMetadata.cjs.js.map +1 -1
- package/dist/resource/resourceMetadata.d.ts +2 -0
- package/dist/resource/resourceMetadata.d.ts.map +1 -1
- package/dist/resource/resourceMetadata.esm.js +6 -2
- package/dist/resource/resourceMetadata.esm.js.map +1 -1
- package/dist/typeIndex/typeIndexAclDocuments.cjs.js.map +1 -1
- package/dist/typeIndex/typeIndexAclDocuments.esm.js.map +1 -1
- package/dist/typeIndex/typeIndexDocuments.cjs.js.map +1 -1
- package/dist/typeIndex/typeIndexDocuments.esm.js.map +1 -1
- package/dist/typeIndex/typeIndexLogic.cjs.js +1 -1
- package/dist/typeIndex/typeIndexLogic.cjs.js.map +1 -1
- package/dist/typeIndex/typeIndexLogic.esm.js +5 -10
- package/dist/typeIndex/typeIndexLogic.esm.js.map +1 -1
- package/dist/types.d.ts +17 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/util/containerLogic.cjs.js.map +1 -1
- package/dist/util/containerLogic.esm.js.map +1 -1
- package/dist/util/debug.cjs.js +1 -1
- package/dist/util/debug.cjs.js.map +1 -1
- package/dist/util/debug.esm.js +4 -1
- package/dist/util/debug.esm.js.map +1 -1
- package/dist/util/ns.cjs.js.map +1 -1
- package/dist/util/ns.esm.js.map +1 -1
- package/dist/util/utilityLogic.cjs.js.map +1 -1
- package/dist/util/utilityLogic.esm.js.map +1 -1
- package/dist/util/utils.cjs.js.map +1 -1
- package/dist/util/utils.esm.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"directoryHelpers.cjs.js","names":[],"sources":["../../src/directory/directoryHelpers.ts"],"sourcesContent":["import type { LiveStore, NamedNode } from 'rdflib'\nimport type { DirectoryEntry, DirectoryRelationshipLabel, DirectorySource } from '../types'\nimport { ns } from '../util/ns'\n\nconst DIRECTORY_SOURCE_PRIORITY: DirectorySource[] = ['contacts', 'groups', 'friends', 'catalog']\n\nexport function tokenizeQuery (query: string): string[] {\n return query\n .toLowerCase()\n .trim()\n .split(/\\s+/)\n .filter(Boolean)\n}\n\nexport function matchesQuery (label: string, query: string): boolean {\n return matchesAnyLabel([label], query)\n}\n\nexport function matchesAnyLabel (labels: string[], query: string): boolean {\n const queryWords = tokenizeQuery(query)\n if (queryWords.length === 0) return true\n\n const labelWords = labels.flatMap(label => tokenizeQuery(label))\n const fallbackHaystack = labels.join(' ').toLowerCase()\n return queryWords.every(word =>\n labelWords.some(labelWord => labelWord.includes(word)) || fallbackHaystack.includes(word)\n )\n}\n\nexport function sortEntries (entries: Iterable<DirectoryEntry>): DirectoryEntry[] {\n return Array.from(entries)\n .sort((left, right) => left.label.localeCompare(right.label, undefined, { sensitivity: 'base' }))\n}\n\nexport function mergeDirectoryEntry (\n discoveredEntries: Map<string, DirectoryEntry>,\n entry: DirectoryEntry\n): DirectoryEntry {\n const key = directoryEntryKey(entry)\n const existing = discoveredEntries.get(key)\n if (existing) {\n const preferred = preferredDirectoryEntry(existing, entry)\n const labels = canonicalizeSearchableLabels(\n preferred.label,\n [...(existing.searchableLabels ?? [existing.label]), ...(entry.searchableLabels ?? [entry.label])]\n )\n const merged = {\n ...existing,\n label: preferred.label,\n relationshipLabel: bestRelationshipLabel(existing.relationshipLabel, entry.relationshipLabel),\n sources: canonicalizeDirectorySources([...existing.sources, ...entry.sources]),\n searchableLabels: labels\n }\n discoveredEntries.set(key, merged)\n return merged\n }\n\n const normalized = {\n ...entry,\n sources: canonicalizeDirectorySources(entry.sources),\n searchableLabels: entry.searchableLabels ?? [entry.label]\n }\n discoveredEntries.set(key, normalized)\n return normalized\n}\n\nfunction preferredDirectoryEntry (current: DirectoryEntry, incoming: DirectoryEntry): DirectoryEntry {\n return directoryEntrySourcePriority(incoming) < directoryEntrySourcePriority(current) ? incoming : current\n}\n\nfunction directoryEntrySourcePriority (entry: DirectoryEntry): number {\n const priorities = entry.sources.map(source => DIRECTORY_SOURCE_PRIORITY.indexOf(source))\n return priorities.length ? Math.min(...priorities) : DIRECTORY_SOURCE_PRIORITY.length\n}\n\nexport function canonicalizeDirectorySources (sources: DirectorySource[]): DirectorySource[] {\n return DIRECTORY_SOURCE_PRIORITY.filter(source => sources.includes(source))\n}\n\nfunction canonicalizeSearchableLabels (preferredLabel: string, labels: string[]): string[] {\n return uniqueStrings(labels).sort((left, right) => {\n if (left === preferredLabel) return -1\n if (right === preferredLabel) return 1\n return left.localeCompare(right, undefined, { sensitivity: 'base' })\n })\n}\n\nexport function bestRelationshipLabel (\n current: DirectoryRelationshipLabel | undefined,\n incoming: DirectoryRelationshipLabel\n): DirectoryRelationshipLabel {\n if (current === 'Contact' || incoming === 'Contact') return 'Contact'\n if (current === 'Friend' || incoming === 'Friend') return 'Friend'\n if (current === 'Group' || incoming === 'Group') return 'Group'\n return 'People'\n}\n\nexport function directoryEntryKey (entry: DirectoryEntry): string {\n return `${entry.kind}:${entry.uri}`\n}\n\nexport function uniqueNamedNodes (nodes: NamedNode[]): NamedNode[] {\n const seen = new Set<string>()\n return nodes.filter(node => {\n if (seen.has(node.value)) return false\n seen.add(node.value)\n return true\n })\n}\n\nexport function uniqueStrings<T extends string> (values: T[]): T[] {\n return [...new Set(values)]\n}\n\nexport function isHttpUri (value: string | null | undefined): boolean {\n return !!value && (value.startsWith('https://') || value.startsWith('http://'))\n}\n\nexport function fallbackLabel (uri: string): string {\n const withoutFragment = uri.split('#')[0]\n const fragment = uri.includes('#') ? uri.slice(uri.indexOf('#') + 1) : ''\n const base = fragment && fragment !== 'this' && fragment !== 'me'\n ? fragment\n : withoutFragment.slice(withoutFragment.lastIndexOf('/') + 1)\n return decodeURIComponent(base || uri).replace(/[_-]+/g, ' ')\n}\n\nexport function storedLabelForNode (store: LiveStore, node: NamedNode): string | null {\n return store.anyValue(node, ns.vcard('fn')) ||\n store.anyValue(node, ns.foaf('name')) ||\n store.anyValue(node, ns.schema('name')) ||\n store.anyValue(node, ns.rdfs('label')) ||\n null\n}\n\nexport function labelForNode (store: LiveStore, node: NamedNode): string {\n return storedLabelForNode(store, node) || fallbackLabel(node.value)\n}\n\nexport async function loadDocumentSilently (store: LiveStore, node: NamedNode): Promise<boolean> {\n try {\n await store.fetcher.load(node.doc())\n return true\n } catch (_error) {\n return false\n }\n}\n"],"mappings":"qCAIA,
|
|
1
|
+
{"version":3,"file":"directoryHelpers.cjs.js","names":["ns","require_ns","DIRECTORY_SOURCE_PRIORITY","tokenizeQuery","query","matchesAnyLabel","queryWords","labelWords","labels","label","fallbackHaystack","labelWord","word","sortEntries","entries","left","right","mergeDirectoryEntry","key","directoryEntryKey","entry","existing","discoveredEntries","preferred","preferredDirectoryEntry","canonicalizeSearchableLabels","merged","bestRelationshipLabel","canonicalizeDirectorySources","normalized","directoryEntrySourcePriority","incoming","current","priorities","source","sources","uniqueStrings","preferredLabel","uniqueNamedNodes","seen","nodes","node","values","isHttpUri","value","fallbackLabel","withoutFragment","uri","fragment","base","storedLabelForNode","store","labelForNode","loadDocumentSilently"],"sources":["../../src/directory/directoryHelpers.ts"],"sourcesContent":["import type { LiveStore, NamedNode } from 'rdflib'\nimport type { DirectoryEntry, DirectoryRelationshipLabel, DirectorySource } from '../types'\nimport { ns } from '../util/ns'\n\nconst DIRECTORY_SOURCE_PRIORITY: DirectorySource[] = ['contacts', 'groups', 'friends', 'catalog']\n\nexport function tokenizeQuery (query: string): string[] {\n return query\n .toLowerCase()\n .trim()\n .split(/\\s+/)\n .filter(Boolean)\n}\n\nexport function matchesQuery (label: string, query: string): boolean {\n return matchesAnyLabel([label], query)\n}\n\nexport function matchesAnyLabel (labels: string[], query: string): boolean {\n const queryWords = tokenizeQuery(query)\n if (queryWords.length === 0) return true\n\n const labelWords = labels.flatMap(label => tokenizeQuery(label))\n const fallbackHaystack = labels.join(' ').toLowerCase()\n return queryWords.every(word =>\n labelWords.some(labelWord => labelWord.includes(word)) || fallbackHaystack.includes(word)\n )\n}\n\nexport function sortEntries (entries: Iterable<DirectoryEntry>): DirectoryEntry[] {\n return Array.from(entries)\n .sort((left, right) => left.label.localeCompare(right.label, undefined, { sensitivity: 'base' }))\n}\n\nexport function mergeDirectoryEntry (\n discoveredEntries: Map<string, DirectoryEntry>,\n entry: DirectoryEntry\n): DirectoryEntry {\n const key = directoryEntryKey(entry)\n const existing = discoveredEntries.get(key)\n if (existing) {\n const preferred = preferredDirectoryEntry(existing, entry)\n const labels = canonicalizeSearchableLabels(\n preferred.label,\n [...(existing.searchableLabels ?? [existing.label]), ...(entry.searchableLabels ?? [entry.label])]\n )\n const merged = {\n ...existing,\n label: preferred.label,\n relationshipLabel: bestRelationshipLabel(existing.relationshipLabel, entry.relationshipLabel),\n sources: canonicalizeDirectorySources([...existing.sources, ...entry.sources]),\n searchableLabels: labels\n }\n discoveredEntries.set(key, merged)\n return merged\n }\n\n const normalized = {\n ...entry,\n sources: canonicalizeDirectorySources(entry.sources),\n searchableLabels: entry.searchableLabels ?? [entry.label]\n }\n discoveredEntries.set(key, normalized)\n return normalized\n}\n\nfunction preferredDirectoryEntry (current: DirectoryEntry, incoming: DirectoryEntry): DirectoryEntry {\n return directoryEntrySourcePriority(incoming) < directoryEntrySourcePriority(current) ? incoming : current\n}\n\nfunction directoryEntrySourcePriority (entry: DirectoryEntry): number {\n const priorities = entry.sources.map(source => DIRECTORY_SOURCE_PRIORITY.indexOf(source))\n return priorities.length ? Math.min(...priorities) : DIRECTORY_SOURCE_PRIORITY.length\n}\n\nexport function canonicalizeDirectorySources (sources: DirectorySource[]): DirectorySource[] {\n return DIRECTORY_SOURCE_PRIORITY.filter(source => sources.includes(source))\n}\n\nfunction canonicalizeSearchableLabels (preferredLabel: string, labels: string[]): string[] {\n return uniqueStrings(labels).sort((left, right) => {\n if (left === preferredLabel) return -1\n if (right === preferredLabel) return 1\n return left.localeCompare(right, undefined, { sensitivity: 'base' })\n })\n}\n\nexport function bestRelationshipLabel (\n current: DirectoryRelationshipLabel | undefined,\n incoming: DirectoryRelationshipLabel\n): DirectoryRelationshipLabel {\n if (current === 'Contact' || incoming === 'Contact') return 'Contact'\n if (current === 'Friend' || incoming === 'Friend') return 'Friend'\n if (current === 'Group' || incoming === 'Group') return 'Group'\n return 'People'\n}\n\nexport function directoryEntryKey (entry: DirectoryEntry): string {\n return `${entry.kind}:${entry.uri}`\n}\n\nexport function uniqueNamedNodes (nodes: NamedNode[]): NamedNode[] {\n const seen = new Set<string>()\n return nodes.filter(node => {\n if (seen.has(node.value)) return false\n seen.add(node.value)\n return true\n })\n}\n\nexport function uniqueStrings<T extends string> (values: T[]): T[] {\n return [...new Set(values)]\n}\n\nexport function isHttpUri (value: string | null | undefined): boolean {\n return !!value && (value.startsWith('https://') || value.startsWith('http://'))\n}\n\nexport function fallbackLabel (uri: string): string {\n const withoutFragment = uri.split('#')[0]\n const fragment = uri.includes('#') ? uri.slice(uri.indexOf('#') + 1) : ''\n const base = fragment && fragment !== 'this' && fragment !== 'me'\n ? fragment\n : withoutFragment.slice(withoutFragment.lastIndexOf('/') + 1)\n return decodeURIComponent(base || uri).replace(/[_-]+/g, ' ')\n}\n\nexport function storedLabelForNode (store: LiveStore, node: NamedNode): string | null {\n return store.anyValue(node, ns.vcard('fn')) ||\n store.anyValue(node, ns.foaf('name')) ||\n store.anyValue(node, ns.schema('name')) ||\n store.anyValue(node, ns.rdfs('label')) ||\n null\n}\n\nexport function labelForNode (store: LiveStore, node: NamedNode): string {\n return storedLabelForNode(store, node) || fallbackLabel(node.value)\n}\n\nexport async function loadDocumentSilently (store: LiveStore, node: NamedNode): Promise<boolean> {\n try {\n await store.fetcher.load(node.doc())\n return true\n } catch (_error) {\n return false\n }\n}\n"],"mappings":"qCAIA,IAAME,EAA+C,CAAC,WAAY,SAAU,UAAW,SAAS,EAEhG,SAAgBC,EAAe,EAAyB,CACtD,OAAOC,EACJ,YAAY,CAAC,CACb,KAAK,CAAC,CACN,MAAM,KAAK,CAAC,CACZ,OAAO,OAAO,CACnB,CAMA,SAAgBC,EAAiB,EAAkB,EAAwB,CACzE,IAAMC,EAAaH,EAAcC,CAAK,EACtC,GAAIE,EAAW,SAAW,EAAG,MAAO,GAEpC,IAAMC,EAAaC,EAAO,QAAQ,GAASL,EAAcM,CAAK,CAAC,EACzDC,EAAmBF,EAAO,KAAK,GAAG,CAAC,CAAC,YAAY,EACtD,OAAOF,EAAW,MAAM,GACtBC,EAAW,KAAK,GAAaI,EAAU,SAASC,CAAI,CAAC,GAAKF,EAAiB,SAASE,CAAI,CAC1F,CACF,CAEA,SAAgBC,EAAa,EAAqD,CAChF,OAAO,MAAM,KAAKC,CAAO,CAAC,CACvB,MAAM,EAAM,IAAUC,EAAK,MAAM,cAAcC,EAAM,MAAO,IAAA,GAAW,CAAE,YAAa,MAAO,CAAC,CAAC,CACpG,CAEA,SAAgBC,EACd,EACA,EACgB,CAChB,IAAMC,EAAMC,EAAkBC,CAAK,EAC7BC,EAAWC,EAAkB,IAAIJ,CAAG,EAC1C,GAAIG,EAAU,CACZ,IAAME,EAAYC,EAAwBH,EAAUD,CAAK,EACnDZ,EAASiB,EACbF,EAAU,MACV,CAAC,GAAIF,EAAS,kBAAoB,CAACA,EAAS,KAAK,EAAI,GAAID,EAAM,kBAAoB,CAACA,EAAM,KAAK,CAAE,CACnG,EACMM,EAAS,CACb,GAAGL,EACH,MAAOE,EAAU,MACjB,kBAAmBI,EAAsBN,EAAS,kBAAmBD,EAAM,iBAAiB,EAC5F,QAASQ,EAA6B,CAAC,GAAGP,EAAS,QAAS,GAAGD,EAAM,OAAO,CAAC,EAC7E,iBAAkBZ,CACpB,EAEA,OADAc,EAAkB,IAAIJ,EAAKQ,CAAM,EAC1BA,CACT,CAEA,IAAMG,EAAa,CACjB,GAAGT,EACH,QAASQ,EAA6BR,EAAM,OAAO,EACnD,iBAAkBA,EAAM,kBAAoB,CAACA,EAAM,KAAK,CAC1D,EAEA,OADAE,EAAkB,IAAIJ,EAAKW,CAAU,EAC9BA,CACT,CAEA,SAASL,EAAyB,EAAyB,EAA0C,CACnG,OAAOM,EAA6BC,CAAQ,EAAID,EAA6BE,CAAO,EAAID,EAAWC,CACrG,CAEA,SAASF,EAA8B,EAA+B,CACpE,IAAMG,EAAab,EAAM,QAAQ,IAAI,GAAUlB,EAA0B,QAAQgC,CAAM,CAAC,EACxF,OAAOD,EAAW,OAAS,KAAK,IAAI,GAAGA,CAAU,EAAI/B,EAA0B,MACjF,CAEA,SAAgB0B,EAA8B,EAA+C,CAC3F,OAAO1B,EAA0B,OAAO,GAAUiC,EAAQ,SAASD,CAAM,CAAC,CAC5E,CAEA,SAAST,EAA8B,EAAwB,EAA4B,CACzF,OAAOW,EAAc5B,CAAM,CAAC,CAAC,MAAM,EAAM,IACnCO,IAASsB,EAAuB,GAChCrB,IAAUqB,EAAuB,EAC9BtB,EAAK,cAAcC,EAAO,IAAA,GAAW,CAAE,YAAa,MAAO,CAAC,CACpE,CACH,CAEA,SAAgBW,EACd,EACA,EAC4B,CAI5B,OAHIK,IAAY,WAAaD,IAAa,UAAkB,UACxDC,IAAY,UAAYD,IAAa,SAAiB,SACtDC,IAAY,SAAWD,IAAa,QAAgB,QACjD,QACT,CAEA,SAAgBZ,EAAmB,EAA+B,CAChE,MAAO,GAAGC,EAAM,KAAK,GAAGA,EAAM,KAChC,CAEA,SAAgBkB,EAAkB,EAAiC,CACjE,IAAMC,EAAO,IAAI,IACjB,OAAOC,EAAM,OAAO,GAClB,CAAID,EAAK,IAAIE,EAAK,KAAK,IACvBF,EAAK,IAAIE,EAAK,KAAK,EACZ,GACR,CACH,CAEA,SAAgBL,EAAiC,EAAkB,CACjE,MAAO,CAAC,GAAG,IAAI,IAAIM,CAAM,CAAC,CAC5B,CAEA,SAAgBC,EAAW,EAA2C,CACpE,MAAO,CAAC,CAACC,IAAUA,EAAM,WAAW,UAAU,GAAKA,EAAM,WAAW,SAAS,EAC/E,CAEA,SAAgBC,EAAe,EAAqB,CAClD,IAAMC,EAAkBC,EAAI,MAAM,GAAG,CAAC,CAAC,GACjCC,EAAWD,EAAI,SAAS,GAAG,EAAIA,EAAI,MAAMA,EAAI,QAAQ,GAAG,EAAI,CAAC,EAAI,GACjEE,EAAOD,GAAYA,IAAa,QAAUA,IAAa,KACzDA,EACAF,EAAgB,MAAMA,EAAgB,YAAY,GAAG,EAAI,CAAC,EAC9D,OAAO,mBAAmBG,GAAQF,CAAG,CAAC,CAAC,QAAQ,SAAU,GAAG,CAC9D,CAEA,SAAgBG,EAAoB,EAAkB,EAAgC,CACpF,OAAOC,EAAM,SAASV,EAAMzC,EAAAA,GAAG,MAAM,IAAI,CAAC,GACxCmD,EAAM,SAASV,EAAMzC,EAAAA,GAAG,KAAK,MAAM,CAAC,GACpCmD,EAAM,SAASV,EAAMzC,EAAAA,GAAG,OAAO,MAAM,CAAC,GACtCmD,EAAM,SAASV,EAAMzC,EAAAA,GAAG,KAAK,OAAO,CAAC,GACrC,IACJ,CAEA,SAAgBoD,EAAc,EAAkB,EAAyB,CACvE,OAAOF,EAAmBC,EAAOV,CAAI,GAAKI,EAAcJ,EAAK,KAAK,CACpE,CAEA,eAAsBY,EAAsB,EAAkB,EAAmC,CAC/F,GAAI,CAEF,OADA,MAAMF,EAAM,QAAQ,KAAKV,EAAK,IAAI,CAAC,EAC5B,EACT,MAAiB,CACf,MAAO,EACT,CACF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"directoryHelpers.esm.js","names":[],"sources":["../../src/directory/directoryHelpers.ts"],"sourcesContent":["import type { LiveStore, NamedNode } from 'rdflib'\nimport type { DirectoryEntry, DirectoryRelationshipLabel, DirectorySource } from '../types'\nimport { ns } from '../util/ns'\n\nconst DIRECTORY_SOURCE_PRIORITY: DirectorySource[] = ['contacts', 'groups', 'friends', 'catalog']\n\nexport function tokenizeQuery (query: string): string[] {\n return query\n .toLowerCase()\n .trim()\n .split(/\\s+/)\n .filter(Boolean)\n}\n\nexport function matchesQuery (label: string, query: string): boolean {\n return matchesAnyLabel([label], query)\n}\n\nexport function matchesAnyLabel (labels: string[], query: string): boolean {\n const queryWords = tokenizeQuery(query)\n if (queryWords.length === 0) return true\n\n const labelWords = labels.flatMap(label => tokenizeQuery(label))\n const fallbackHaystack = labels.join(' ').toLowerCase()\n return queryWords.every(word =>\n labelWords.some(labelWord => labelWord.includes(word)) || fallbackHaystack.includes(word)\n )\n}\n\nexport function sortEntries (entries: Iterable<DirectoryEntry>): DirectoryEntry[] {\n return Array.from(entries)\n .sort((left, right) => left.label.localeCompare(right.label, undefined, { sensitivity: 'base' }))\n}\n\nexport function mergeDirectoryEntry (\n discoveredEntries: Map<string, DirectoryEntry>,\n entry: DirectoryEntry\n): DirectoryEntry {\n const key = directoryEntryKey(entry)\n const existing = discoveredEntries.get(key)\n if (existing) {\n const preferred = preferredDirectoryEntry(existing, entry)\n const labels = canonicalizeSearchableLabels(\n preferred.label,\n [...(existing.searchableLabels ?? [existing.label]), ...(entry.searchableLabels ?? [entry.label])]\n )\n const merged = {\n ...existing,\n label: preferred.label,\n relationshipLabel: bestRelationshipLabel(existing.relationshipLabel, entry.relationshipLabel),\n sources: canonicalizeDirectorySources([...existing.sources, ...entry.sources]),\n searchableLabels: labels\n }\n discoveredEntries.set(key, merged)\n return merged\n }\n\n const normalized = {\n ...entry,\n sources: canonicalizeDirectorySources(entry.sources),\n searchableLabels: entry.searchableLabels ?? [entry.label]\n }\n discoveredEntries.set(key, normalized)\n return normalized\n}\n\nfunction preferredDirectoryEntry (current: DirectoryEntry, incoming: DirectoryEntry): DirectoryEntry {\n return directoryEntrySourcePriority(incoming) < directoryEntrySourcePriority(current) ? incoming : current\n}\n\nfunction directoryEntrySourcePriority (entry: DirectoryEntry): number {\n const priorities = entry.sources.map(source => DIRECTORY_SOURCE_PRIORITY.indexOf(source))\n return priorities.length ? Math.min(...priorities) : DIRECTORY_SOURCE_PRIORITY.length\n}\n\nexport function canonicalizeDirectorySources (sources: DirectorySource[]): DirectorySource[] {\n return DIRECTORY_SOURCE_PRIORITY.filter(source => sources.includes(source))\n}\n\nfunction canonicalizeSearchableLabels (preferredLabel: string, labels: string[]): string[] {\n return uniqueStrings(labels).sort((left, right) => {\n if (left === preferredLabel) return -1\n if (right === preferredLabel) return 1\n return left.localeCompare(right, undefined, { sensitivity: 'base' })\n })\n}\n\nexport function bestRelationshipLabel (\n current: DirectoryRelationshipLabel | undefined,\n incoming: DirectoryRelationshipLabel\n): DirectoryRelationshipLabel {\n if (current === 'Contact' || incoming === 'Contact') return 'Contact'\n if (current === 'Friend' || incoming === 'Friend') return 'Friend'\n if (current === 'Group' || incoming === 'Group') return 'Group'\n return 'People'\n}\n\nexport function directoryEntryKey (entry: DirectoryEntry): string {\n return `${entry.kind}:${entry.uri}`\n}\n\nexport function uniqueNamedNodes (nodes: NamedNode[]): NamedNode[] {\n const seen = new Set<string>()\n return nodes.filter(node => {\n if (seen.has(node.value)) return false\n seen.add(node.value)\n return true\n })\n}\n\nexport function uniqueStrings<T extends string> (values: T[]): T[] {\n return [...new Set(values)]\n}\n\nexport function isHttpUri (value: string | null | undefined): boolean {\n return !!value && (value.startsWith('https://') || value.startsWith('http://'))\n}\n\nexport function fallbackLabel (uri: string): string {\n const withoutFragment = uri.split('#')[0]\n const fragment = uri.includes('#') ? uri.slice(uri.indexOf('#') + 1) : ''\n const base = fragment && fragment !== 'this' && fragment !== 'me'\n ? fragment\n : withoutFragment.slice(withoutFragment.lastIndexOf('/') + 1)\n return decodeURIComponent(base || uri).replace(/[_-]+/g, ' ')\n}\n\nexport function storedLabelForNode (store: LiveStore, node: NamedNode): string | null {\n return store.anyValue(node, ns.vcard('fn')) ||\n store.anyValue(node, ns.foaf('name')) ||\n store.anyValue(node, ns.schema('name')) ||\n store.anyValue(node, ns.rdfs('label')) ||\n null\n}\n\nexport function labelForNode (store: LiveStore, node: NamedNode): string {\n return storedLabelForNode(store, node) || fallbackLabel(node.value)\n}\n\nexport async function loadDocumentSilently (store: LiveStore, node: NamedNode): Promise<boolean> {\n try {\n await store.fetcher.load(node.doc())\n return true\n } catch (_error) {\n return false\n }\n}\n"],"mappings":";;AAIA,
|
|
1
|
+
{"version":3,"file":"directoryHelpers.esm.js","names":["DIRECTORY_SOURCE_PRIORITY","tokenizeQuery","query","matchesAnyLabel","queryWords","labelWords","labels","label","fallbackHaystack","labelWord","word","sortEntries","entries","left","right","mergeDirectoryEntry","key","directoryEntryKey","entry","existing","discoveredEntries","preferred","preferredDirectoryEntry","canonicalizeSearchableLabels","merged","bestRelationshipLabel","canonicalizeDirectorySources","normalized","directoryEntrySourcePriority","incoming","current","priorities","source","sources","uniqueStrings","preferredLabel","uniqueNamedNodes","seen","nodes","node","values","isHttpUri","value","fallbackLabel","withoutFragment","uri","fragment","base","storedLabelForNode","store","ns","labelForNode","loadDocumentSilently"],"sources":["../../src/directory/directoryHelpers.ts"],"sourcesContent":["import type { LiveStore, NamedNode } from 'rdflib'\nimport type { DirectoryEntry, DirectoryRelationshipLabel, DirectorySource } from '../types'\nimport { ns } from '../util/ns'\n\nconst DIRECTORY_SOURCE_PRIORITY: DirectorySource[] = ['contacts', 'groups', 'friends', 'catalog']\n\nexport function tokenizeQuery (query: string): string[] {\n return query\n .toLowerCase()\n .trim()\n .split(/\\s+/)\n .filter(Boolean)\n}\n\nexport function matchesQuery (label: string, query: string): boolean {\n return matchesAnyLabel([label], query)\n}\n\nexport function matchesAnyLabel (labels: string[], query: string): boolean {\n const queryWords = tokenizeQuery(query)\n if (queryWords.length === 0) return true\n\n const labelWords = labels.flatMap(label => tokenizeQuery(label))\n const fallbackHaystack = labels.join(' ').toLowerCase()\n return queryWords.every(word =>\n labelWords.some(labelWord => labelWord.includes(word)) || fallbackHaystack.includes(word)\n )\n}\n\nexport function sortEntries (entries: Iterable<DirectoryEntry>): DirectoryEntry[] {\n return Array.from(entries)\n .sort((left, right) => left.label.localeCompare(right.label, undefined, { sensitivity: 'base' }))\n}\n\nexport function mergeDirectoryEntry (\n discoveredEntries: Map<string, DirectoryEntry>,\n entry: DirectoryEntry\n): DirectoryEntry {\n const key = directoryEntryKey(entry)\n const existing = discoveredEntries.get(key)\n if (existing) {\n const preferred = preferredDirectoryEntry(existing, entry)\n const labels = canonicalizeSearchableLabels(\n preferred.label,\n [...(existing.searchableLabels ?? [existing.label]), ...(entry.searchableLabels ?? [entry.label])]\n )\n const merged = {\n ...existing,\n label: preferred.label,\n relationshipLabel: bestRelationshipLabel(existing.relationshipLabel, entry.relationshipLabel),\n sources: canonicalizeDirectorySources([...existing.sources, ...entry.sources]),\n searchableLabels: labels\n }\n discoveredEntries.set(key, merged)\n return merged\n }\n\n const normalized = {\n ...entry,\n sources: canonicalizeDirectorySources(entry.sources),\n searchableLabels: entry.searchableLabels ?? [entry.label]\n }\n discoveredEntries.set(key, normalized)\n return normalized\n}\n\nfunction preferredDirectoryEntry (current: DirectoryEntry, incoming: DirectoryEntry): DirectoryEntry {\n return directoryEntrySourcePriority(incoming) < directoryEntrySourcePriority(current) ? incoming : current\n}\n\nfunction directoryEntrySourcePriority (entry: DirectoryEntry): number {\n const priorities = entry.sources.map(source => DIRECTORY_SOURCE_PRIORITY.indexOf(source))\n return priorities.length ? Math.min(...priorities) : DIRECTORY_SOURCE_PRIORITY.length\n}\n\nexport function canonicalizeDirectorySources (sources: DirectorySource[]): DirectorySource[] {\n return DIRECTORY_SOURCE_PRIORITY.filter(source => sources.includes(source))\n}\n\nfunction canonicalizeSearchableLabels (preferredLabel: string, labels: string[]): string[] {\n return uniqueStrings(labels).sort((left, right) => {\n if (left === preferredLabel) return -1\n if (right === preferredLabel) return 1\n return left.localeCompare(right, undefined, { sensitivity: 'base' })\n })\n}\n\nexport function bestRelationshipLabel (\n current: DirectoryRelationshipLabel | undefined,\n incoming: DirectoryRelationshipLabel\n): DirectoryRelationshipLabel {\n if (current === 'Contact' || incoming === 'Contact') return 'Contact'\n if (current === 'Friend' || incoming === 'Friend') return 'Friend'\n if (current === 'Group' || incoming === 'Group') return 'Group'\n return 'People'\n}\n\nexport function directoryEntryKey (entry: DirectoryEntry): string {\n return `${entry.kind}:${entry.uri}`\n}\n\nexport function uniqueNamedNodes (nodes: NamedNode[]): NamedNode[] {\n const seen = new Set<string>()\n return nodes.filter(node => {\n if (seen.has(node.value)) return false\n seen.add(node.value)\n return true\n })\n}\n\nexport function uniqueStrings<T extends string> (values: T[]): T[] {\n return [...new Set(values)]\n}\n\nexport function isHttpUri (value: string | null | undefined): boolean {\n return !!value && (value.startsWith('https://') || value.startsWith('http://'))\n}\n\nexport function fallbackLabel (uri: string): string {\n const withoutFragment = uri.split('#')[0]\n const fragment = uri.includes('#') ? uri.slice(uri.indexOf('#') + 1) : ''\n const base = fragment && fragment !== 'this' && fragment !== 'me'\n ? fragment\n : withoutFragment.slice(withoutFragment.lastIndexOf('/') + 1)\n return decodeURIComponent(base || uri).replace(/[_-]+/g, ' ')\n}\n\nexport function storedLabelForNode (store: LiveStore, node: NamedNode): string | null {\n return store.anyValue(node, ns.vcard('fn')) ||\n store.anyValue(node, ns.foaf('name')) ||\n store.anyValue(node, ns.schema('name')) ||\n store.anyValue(node, ns.rdfs('label')) ||\n null\n}\n\nexport function labelForNode (store: LiveStore, node: NamedNode): string {\n return storedLabelForNode(store, node) || fallbackLabel(node.value)\n}\n\nexport async function loadDocumentSilently (store: LiveStore, node: NamedNode): Promise<boolean> {\n try {\n await store.fetcher.load(node.doc())\n return true\n } catch (_error) {\n return false\n }\n}\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"directoryLogic.cjs.js","names":[],"sources":["../../src/directory/directoryLogic.ts"],"sourcesContent":["import { type AuthnLogic, type DirectoryEntry, type DirectoryLogic, type DirectorySearchOptions, type DirectorySource, type TypeIndexLogic } from '../types'\nimport { type LiveStore } from 'rdflib'\nimport { createContactsDirectoryDiscovery } from './contactsDirectory'\nimport { createFriendsDirectoryDiscovery } from './friendsDirectory'\nimport { createCatalogDirectoryDiscovery } from './catalogDirectory'\nimport { matchesAnyLabel, mergeDirectoryEntry, sortEntries } from './directoryHelpers'\n\nconst DEFAULT_FOAF_DISTANCE = 3\n\nexport const DEFAULT_DIRECTORY_CATALOG_URL = 'https://raw.githubusercontent.com/solid/catalog/refs/heads/main/catalog-data.ttl'\nexport const DEFAULT_DIRECTORY_SOURCES: DirectorySource[] = ['contacts', 'friends', 'catalog', 'groups']\n\nexport function createDirectoryLogic (\n store: LiveStore,\n authn: AuthnLogic,\n typeIndexLogic: TypeIndexLogic\n): DirectoryLogic {\n const contactsDiscovery = createContactsDirectoryDiscovery(store, typeIndexLogic)\n const friendsDiscovery = createFriendsDirectoryDiscovery(store)\n const catalogDiscovery = createCatalogDirectoryDiscovery()\n\n async function discoverWithNormalizedOptions (\n normalized: ReturnType<typeof normalizeOptions>\n ): Promise<DirectoryEntry[]> {\n const discoveredEntries = new Map<string, DirectoryEntry>()\n const discoveryTasks: Promise<void>[] = []\n\n const mergeEntry = (entry: DirectoryEntry): void => {\n mergeDirectoryEntry(discoveredEntries, entry)\n }\n\n if (normalized.sources.includes('catalog')) {\n discoveryTasks.push(catalogDiscovery.discoverCatalogEntries(normalized.catalogUrl, mergeEntry))\n }\n\n if (normalized.user) {\n if (normalized.sources.includes('contacts')) {\n discoveryTasks.push(contactsDiscovery.discoverAddressBookContacts(normalized.user, mergeEntry))\n }\n\n if (normalized.sources.includes('groups')) {\n discoveryTasks.push(contactsDiscovery.discoverAddressBookGroups(normalized.user, mergeEntry))\n }\n\n if (normalized.sources.includes('friends')) {\n discoveryTasks.push(friendsDiscovery.discoverFoafPeople(normalized.user, normalized.maxFoafDistance, mergeEntry))\n }\n }\n\n if (!discoveryTasks.length) {\n return []\n }\n\n const results = await Promise.allSettled(discoveryTasks)\n if (results.every(result => result.status === 'rejected')) {\n throw new Error('Unable to load directory entries.')\n }\n\n return sortEntries(discoveredEntries.values())\n }\n\n async function search (options: DirectorySearchOptions = {}): Promise<DirectoryEntry[]> {\n const normalized = normalizeOptions(options)\n const entries = await discoverWithNormalizedOptions(normalized)\n return entries.filter(entry => matchesAnyLabel([entry.label, ...(entry.searchableLabels ?? [])], normalized.query))\n }\n\n return {\n search\n }\n\n function normalizeOptions (options: DirectorySearchOptions = {}) {\n const sources = options.sources === undefined ? [...DEFAULT_DIRECTORY_SOURCES] : [...options.sources]\n return {\n query: options.query ?? '',\n sources,\n catalogUrl: options.catalogUrl ?? DEFAULT_DIRECTORY_CATALOG_URL,\n user: options.user ?? authn.currentUser(),\n maxFoafDistance: options.maxFoafDistance ?? DEFAULT_FOAF_DISTANCE\n }\n }\n}\n"],"mappings":"mKAOA,
|
|
1
|
+
{"version":3,"file":"directoryLogic.cjs.js","names":["createContactsDirectoryDiscovery","createFriendsDirectoryDiscovery","createCatalogDirectoryDiscovery","sortEntries","matchesAnyLabel","require_directoryHelpers","require_contactsDirectory","require_friendsDirectory","require_catalogDirectory","DEFAULT_FOAF_DISTANCE","DEFAULT_DIRECTORY_CATALOG_URL","DEFAULT_DIRECTORY_SOURCES","createDirectoryLogic","contactsDiscovery","store","typeIndexLogic","friendsDiscovery","catalogDiscovery","discoverWithNormalizedOptions","discoveredEntries","discoveryTasks","mergeEntry","entry","normalized","result","search","normalizeOptions","options","sources","authn"],"sources":["../../src/directory/directoryLogic.ts"],"sourcesContent":["import { type AuthnLogic, type DirectoryEntry, type DirectoryLogic, type DirectorySearchOptions, type DirectorySource, type TypeIndexLogic } from '../types'\nimport { type LiveStore } from 'rdflib'\nimport { createContactsDirectoryDiscovery } from './contactsDirectory'\nimport { createFriendsDirectoryDiscovery } from './friendsDirectory'\nimport { createCatalogDirectoryDiscovery } from './catalogDirectory'\nimport { matchesAnyLabel, mergeDirectoryEntry, sortEntries } from './directoryHelpers'\n\nconst DEFAULT_FOAF_DISTANCE = 3\n\nexport const DEFAULT_DIRECTORY_CATALOG_URL = 'https://raw.githubusercontent.com/solid/catalog/refs/heads/main/catalog-data.ttl'\nexport const DEFAULT_DIRECTORY_SOURCES: DirectorySource[] = ['contacts', 'friends', 'catalog', 'groups']\n\nexport function createDirectoryLogic (\n store: LiveStore,\n authn: AuthnLogic,\n typeIndexLogic: TypeIndexLogic\n): DirectoryLogic {\n const contactsDiscovery = createContactsDirectoryDiscovery(store, typeIndexLogic)\n const friendsDiscovery = createFriendsDirectoryDiscovery(store)\n const catalogDiscovery = createCatalogDirectoryDiscovery()\n\n async function discoverWithNormalizedOptions (\n normalized: ReturnType<typeof normalizeOptions>\n ): Promise<DirectoryEntry[]> {\n const discoveredEntries = new Map<string, DirectoryEntry>()\n const discoveryTasks: Promise<void>[] = []\n\n const mergeEntry = (entry: DirectoryEntry): void => {\n mergeDirectoryEntry(discoveredEntries, entry)\n }\n\n if (normalized.sources.includes('catalog')) {\n discoveryTasks.push(catalogDiscovery.discoverCatalogEntries(normalized.catalogUrl, mergeEntry))\n }\n\n if (normalized.user) {\n if (normalized.sources.includes('contacts')) {\n discoveryTasks.push(contactsDiscovery.discoverAddressBookContacts(normalized.user, mergeEntry))\n }\n\n if (normalized.sources.includes('groups')) {\n discoveryTasks.push(contactsDiscovery.discoverAddressBookGroups(normalized.user, mergeEntry))\n }\n\n if (normalized.sources.includes('friends')) {\n discoveryTasks.push(friendsDiscovery.discoverFoafPeople(normalized.user, normalized.maxFoafDistance, mergeEntry))\n }\n }\n\n if (!discoveryTasks.length) {\n return []\n }\n\n const results = await Promise.allSettled(discoveryTasks)\n if (results.every(result => result.status === 'rejected')) {\n throw new Error('Unable to load directory entries.')\n }\n\n return sortEntries(discoveredEntries.values())\n }\n\n async function search (options: DirectorySearchOptions = {}): Promise<DirectoryEntry[]> {\n const normalized = normalizeOptions(options)\n const entries = await discoverWithNormalizedOptions(normalized)\n return entries.filter(entry => matchesAnyLabel([entry.label, ...(entry.searchableLabels ?? [])], normalized.query))\n }\n\n return {\n search\n }\n\n function normalizeOptions (options: DirectorySearchOptions = {}) {\n const sources = options.sources === undefined ? [...DEFAULT_DIRECTORY_SOURCES] : [...options.sources]\n return {\n query: options.query ?? '',\n sources,\n catalogUrl: options.catalogUrl ?? DEFAULT_DIRECTORY_CATALOG_URL,\n user: options.user ?? authn.currentUser(),\n maxFoafDistance: options.maxFoafDistance ?? DEFAULT_FOAF_DISTANCE\n }\n }\n}\n"],"mappings":"mKAOA,IAAMS,EAAwB,EAEjBC,EAAgC,mFAChCC,EAA+C,CAAC,WAAY,UAAW,UAAW,QAAQ,EAEvG,SAAgBC,EACd,EACA,EACA,EACgB,CAChB,IAAMC,EAAoBb,EAAAA,iCAAiCc,EAAOC,CAAc,EAC1EC,EAAmBf,EAAAA,gCAAgCa,CAAK,EACxDG,EAAmBf,EAAAA,gCAAgC,EAEzD,eAAegB,EACb,EAC2B,CAC3B,IAAMC,EAAoB,IAAI,IACxBC,EAAkC,CAAC,EAEnCC,EAAc,GAAgC,CAClDhB,EAAA,oBAAoBc,EAAmBG,CAAK,CAC9C,EAoBA,GAlBIC,EAAW,QAAQ,SAAS,SAAS,GACvCH,EAAe,KAAKH,EAAiB,uBAAuBM,EAAW,WAAYF,CAAU,CAAC,EAG5FE,EAAW,OACTA,EAAW,QAAQ,SAAS,UAAU,GACxCH,EAAe,KAAKP,EAAkB,4BAA4BU,EAAW,KAAMF,CAAU,CAAC,EAG5FE,EAAW,QAAQ,SAAS,QAAQ,GACtCH,EAAe,KAAKP,EAAkB,0BAA0BU,EAAW,KAAMF,CAAU,CAAC,EAG1FE,EAAW,QAAQ,SAAS,SAAS,GACvCH,EAAe,KAAKJ,EAAiB,mBAAmBO,EAAW,KAAMA,EAAW,gBAAiBF,CAAU,CAAC,GAIhH,CAACD,EAAe,OAClB,MAAO,CAAC,EAIV,IAAI,MADkB,QAAQ,WAAWA,CAAc,EAAA,CAC3C,MAAM,GAAUI,EAAO,SAAW,UAAU,EACtD,MAAU,MAAM,mCAAmC,EAGrD,OAAOrB,EAAAA,YAAYgB,EAAkB,OAAO,CAAC,CAC/C,CAEA,eAAeM,EAAQ,EAAkC,CAAC,EAA8B,CACtF,IAAMF,EAAaG,EAAiBC,CAAO,EAE3C,OAAO,MADeT,EAA8BK,CAAU,EAAA,CAC/C,OAAO,GAASnB,EAAAA,gBAAgB,CAACkB,EAAM,MAAO,GAAIA,EAAM,kBAAoB,CAAC,CAAE,EAAGC,EAAW,KAAK,CAAC,CACpH,CAEA,MAAO,CACL,QACF,EAEA,SAASG,EAAkB,EAAkC,CAAC,EAAG,CAC/D,IAAME,EAAUD,EAAQ,UAAY,IAAA,GAAY,CAAC,GAAGhB,CAAyB,EAAI,CAAC,GAAGgB,EAAQ,OAAO,EACpG,MAAO,CACL,MAAOA,EAAQ,OAAS,GACxB,UACA,WAAYA,EAAQ,YAAA,mFACpB,KAAMA,EAAQ,MAAQE,EAAM,YAAY,EACxC,gBAAiBF,EAAQ,iBAAmBlB,CAC9C,CACF,CACF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"directoryLogic.esm.js","names":[],"sources":["../../src/directory/directoryLogic.ts"],"sourcesContent":["import { type AuthnLogic, type DirectoryEntry, type DirectoryLogic, type DirectorySearchOptions, type DirectorySource, type TypeIndexLogic } from '../types'\nimport { type LiveStore } from 'rdflib'\nimport { createContactsDirectoryDiscovery } from './contactsDirectory'\nimport { createFriendsDirectoryDiscovery } from './friendsDirectory'\nimport { createCatalogDirectoryDiscovery } from './catalogDirectory'\nimport { matchesAnyLabel, mergeDirectoryEntry, sortEntries } from './directoryHelpers'\n\nconst DEFAULT_FOAF_DISTANCE = 3\n\nexport const DEFAULT_DIRECTORY_CATALOG_URL = 'https://raw.githubusercontent.com/solid/catalog/refs/heads/main/catalog-data.ttl'\nexport const DEFAULT_DIRECTORY_SOURCES: DirectorySource[] = ['contacts', 'friends', 'catalog', 'groups']\n\nexport function createDirectoryLogic (\n store: LiveStore,\n authn: AuthnLogic,\n typeIndexLogic: TypeIndexLogic\n): DirectoryLogic {\n const contactsDiscovery = createContactsDirectoryDiscovery(store, typeIndexLogic)\n const friendsDiscovery = createFriendsDirectoryDiscovery(store)\n const catalogDiscovery = createCatalogDirectoryDiscovery()\n\n async function discoverWithNormalizedOptions (\n normalized: ReturnType<typeof normalizeOptions>\n ): Promise<DirectoryEntry[]> {\n const discoveredEntries = new Map<string, DirectoryEntry>()\n const discoveryTasks: Promise<void>[] = []\n\n const mergeEntry = (entry: DirectoryEntry): void => {\n mergeDirectoryEntry(discoveredEntries, entry)\n }\n\n if (normalized.sources.includes('catalog')) {\n discoveryTasks.push(catalogDiscovery.discoverCatalogEntries(normalized.catalogUrl, mergeEntry))\n }\n\n if (normalized.user) {\n if (normalized.sources.includes('contacts')) {\n discoveryTasks.push(contactsDiscovery.discoverAddressBookContacts(normalized.user, mergeEntry))\n }\n\n if (normalized.sources.includes('groups')) {\n discoveryTasks.push(contactsDiscovery.discoverAddressBookGroups(normalized.user, mergeEntry))\n }\n\n if (normalized.sources.includes('friends')) {\n discoveryTasks.push(friendsDiscovery.discoverFoafPeople(normalized.user, normalized.maxFoafDistance, mergeEntry))\n }\n }\n\n if (!discoveryTasks.length) {\n return []\n }\n\n const results = await Promise.allSettled(discoveryTasks)\n if (results.every(result => result.status === 'rejected')) {\n throw new Error('Unable to load directory entries.')\n }\n\n return sortEntries(discoveredEntries.values())\n }\n\n async function search (options: DirectorySearchOptions = {}): Promise<DirectoryEntry[]> {\n const normalized = normalizeOptions(options)\n const entries = await discoverWithNormalizedOptions(normalized)\n return entries.filter(entry => matchesAnyLabel([entry.label, ...(entry.searchableLabels ?? [])], normalized.query))\n }\n\n return {\n search\n }\n\n function normalizeOptions (options: DirectorySearchOptions = {}) {\n const sources = options.sources === undefined ? [...DEFAULT_DIRECTORY_SOURCES] : [...options.sources]\n return {\n query: options.query ?? '',\n sources,\n catalogUrl: options.catalogUrl ?? DEFAULT_DIRECTORY_CATALOG_URL,\n user: options.user ?? authn.currentUser(),\n maxFoafDistance: options.maxFoafDistance ?? DEFAULT_FOAF_DISTANCE\n }\n }\n}\n"],"mappings":";;;;;AAOA,
|
|
1
|
+
{"version":3,"file":"directoryLogic.esm.js","names":["DEFAULT_FOAF_DISTANCE","DEFAULT_DIRECTORY_CATALOG_URL","DEFAULT_DIRECTORY_SOURCES","createDirectoryLogic","contactsDiscovery","createContactsDirectoryDiscovery","store","typeIndexLogic","friendsDiscovery","createFriendsDirectoryDiscovery","catalogDiscovery","createCatalogDirectoryDiscovery","discoverWithNormalizedOptions","discoveredEntries","discoveryTasks","mergeEntry","entry","normalized","result","sortEntries","search","normalizeOptions","options","matchesAnyLabel","sources","authn"],"sources":["../../src/directory/directoryLogic.ts"],"sourcesContent":["import { type AuthnLogic, type DirectoryEntry, type DirectoryLogic, type DirectorySearchOptions, type DirectorySource, type TypeIndexLogic } from '../types'\nimport { type LiveStore } from 'rdflib'\nimport { createContactsDirectoryDiscovery } from './contactsDirectory'\nimport { createFriendsDirectoryDiscovery } from './friendsDirectory'\nimport { createCatalogDirectoryDiscovery } from './catalogDirectory'\nimport { matchesAnyLabel, mergeDirectoryEntry, sortEntries } from './directoryHelpers'\n\nconst DEFAULT_FOAF_DISTANCE = 3\n\nexport const DEFAULT_DIRECTORY_CATALOG_URL = 'https://raw.githubusercontent.com/solid/catalog/refs/heads/main/catalog-data.ttl'\nexport const DEFAULT_DIRECTORY_SOURCES: DirectorySource[] = ['contacts', 'friends', 'catalog', 'groups']\n\nexport function createDirectoryLogic (\n store: LiveStore,\n authn: AuthnLogic,\n typeIndexLogic: TypeIndexLogic\n): DirectoryLogic {\n const contactsDiscovery = createContactsDirectoryDiscovery(store, typeIndexLogic)\n const friendsDiscovery = createFriendsDirectoryDiscovery(store)\n const catalogDiscovery = createCatalogDirectoryDiscovery()\n\n async function discoverWithNormalizedOptions (\n normalized: ReturnType<typeof normalizeOptions>\n ): Promise<DirectoryEntry[]> {\n const discoveredEntries = new Map<string, DirectoryEntry>()\n const discoveryTasks: Promise<void>[] = []\n\n const mergeEntry = (entry: DirectoryEntry): void => {\n mergeDirectoryEntry(discoveredEntries, entry)\n }\n\n if (normalized.sources.includes('catalog')) {\n discoveryTasks.push(catalogDiscovery.discoverCatalogEntries(normalized.catalogUrl, mergeEntry))\n }\n\n if (normalized.user) {\n if (normalized.sources.includes('contacts')) {\n discoveryTasks.push(contactsDiscovery.discoverAddressBookContacts(normalized.user, mergeEntry))\n }\n\n if (normalized.sources.includes('groups')) {\n discoveryTasks.push(contactsDiscovery.discoverAddressBookGroups(normalized.user, mergeEntry))\n }\n\n if (normalized.sources.includes('friends')) {\n discoveryTasks.push(friendsDiscovery.discoverFoafPeople(normalized.user, normalized.maxFoafDistance, mergeEntry))\n }\n }\n\n if (!discoveryTasks.length) {\n return []\n }\n\n const results = await Promise.allSettled(discoveryTasks)\n if (results.every(result => result.status === 'rejected')) {\n throw new Error('Unable to load directory entries.')\n }\n\n return sortEntries(discoveredEntries.values())\n }\n\n async function search (options: DirectorySearchOptions = {}): Promise<DirectoryEntry[]> {\n const normalized = normalizeOptions(options)\n const entries = await discoverWithNormalizedOptions(normalized)\n return entries.filter(entry => matchesAnyLabel([entry.label, ...(entry.searchableLabels ?? [])], normalized.query))\n }\n\n return {\n search\n }\n\n function normalizeOptions (options: DirectorySearchOptions = {}) {\n const sources = options.sources === undefined ? [...DEFAULT_DIRECTORY_SOURCES] : [...options.sources]\n return {\n query: options.query ?? '',\n sources,\n catalogUrl: options.catalogUrl ?? DEFAULT_DIRECTORY_CATALOG_URL,\n user: options.user ?? authn.currentUser(),\n maxFoafDistance: options.maxFoafDistance ?? DEFAULT_FOAF_DISTANCE\n }\n }\n}\n"],"mappings":";;;;;AAOA,IAAMA,IAAwB,GAEjBC,IAAgC,oFAChCC,IAA+C;CAAC;CAAY;CAAW;CAAW;AAAQ;AAEvG,SAAgBC,EACd,GACA,GACA,GACgB;CAChB,IAAMC,IAAoBC,EAAiCC,GAAOC,CAAc,GAC1EC,IAAmBC,EAAgCH,CAAK,GACxDI,IAAmBC,EAAgC;CAEzD,eAAeC,EACb,GAC2B;EAC3B,IAAMC,oBAAoB,IAAI,IAA4B,GACpDC,IAAkC,CAAC,GAEnCC,KAAc,MAAgC;GAClD,EAAoBF,GAAmBG,CAAK;EAC9C;EAoBA,IAlBIC,EAAW,QAAQ,SAAS,SAAS,KACvCH,EAAe,KAAKJ,EAAiB,uBAAuBO,EAAW,YAAYF,CAAU,CAAC,GAG5FE,EAAW,SACTA,EAAW,QAAQ,SAAS,UAAU,KACxCH,EAAe,KAAKV,EAAkB,4BAA4Ba,EAAW,MAAMF,CAAU,CAAC,GAG5FE,EAAW,QAAQ,SAAS,QAAQ,KACtCH,EAAe,KAAKV,EAAkB,0BAA0Ba,EAAW,MAAMF,CAAU,CAAC,GAG1FE,EAAW,QAAQ,SAAS,SAAS,KACvCH,EAAe,KAAKN,EAAiB,mBAAmBS,EAAW,MAAMA,EAAW,iBAAiBF,CAAU,CAAC,IAIhH,CAACD,EAAe,QAClB,OAAO,CAAC;EAIV,KAAI,MADkB,QAAQ,WAAWA,CAAc,EAAA,CAC3C,OAAM,MAAUI,EAAO,WAAW,UAAU,GACtD,MAAU,MAAM,mCAAmC;EAGrD,OAAOC,EAAYN,EAAkB,OAAO,CAAC;CAC/C;CAEA,eAAeO,EAAQ,IAAkC,CAAC,GAA8B;EACtF,IAAMH,IAAaI,EAAiBC,CAAO;EAE3C,QAAO,MADeV,EAA8BK,CAAU,EAAA,CAC/C,QAAO,MAASM,EAAgB,CAACP,EAAM,OAAO,GAAIA,EAAM,oBAAoB,CAAC,CAAE,GAAGC,EAAW,KAAK,CAAC;CACpH;CAEA,OAAO,EACL,UACF;CAEA,SAASI,EAAkB,IAAkC,CAAC,GAAG;EAC/D,IAAMG,IAAUF,EAAQ,YAAY,KAAA,IAAY,CAAC,GAAGpB,CAAyB,IAAI,CAAC,GAAGoB,EAAQ,OAAO;EACpG,OAAO;GACL,OAAOA,EAAQ,SAAS;GACxB;GACA,YAAYA,EAAQ,cAAA;GACpB,MAAMA,EAAQ,QAAQG,EAAM,YAAY;GACxC,iBAAiBH,EAAQ,mBAAmBtB;EAC9C;CACF;AACF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"friendsDirectory.cjs.js","names":[],"sources":["../../src/directory/friendsDirectory.ts"],"sourcesContent":["import { type DirectoryEntry } from '../types'\nimport { type LiveStore, NamedNode } from 'rdflib'\nimport { ns } from '../util/ns'\nimport { loadDocumentSilently, storedLabelForNode } from './directoryHelpers'\n\nconst PEOPLE_SEARCH_CONCURRENCY = 6\n\nexport function createFriendsDirectoryDiscovery (store: LiveStore) {\n function relationshipLabelForDepth (depth: number) {\n return depth === 1 ? 'Friend' : 'People'\n }\n\n async function emitPersonEntry (\n person: NamedNode,\n depth: number,\n onEntry: (entry: DirectoryEntry) => void | Promise<void>\n ): Promise<void> {\n const personName = storedLabelForNode(store, person)\n if (!personName) return\n\n await onEntry({\n kind: 'person',\n uri: person.value,\n label: personName,\n subjectType: 'agent',\n relationshipLabel: relationshipLabelForDepth(depth),\n sources: ['friends']\n })\n }\n\n async function discoverFoafPeople (\n user: NamedNode,\n maxFoafDistance: number,\n onEntry: (entry: DirectoryEntry) => void | Promise<void>\n ): Promise<void> {\n const visited = new Set<string>([user.value])\n const emitted = new Set<string>()\n const loadedDocs = new Set<string>()\n let queue: Array<{ person: NamedNode, depth: number }> = [{ person: user, depth: 0 }]\n\n const processPerson = async (currentEntry: { person: NamedNode, depth: number }) => {\n const { person: current, depth } = currentEntry\n const currentDoc = current.doc().value\n if (!loadedDocs.has(currentDoc)) {\n loadedDocs.add(currentDoc)\n await loadDocumentSilently(store, current)\n }\n\n if (current.value !== user.value) {\n if (!emitted.has(current.value)) {\n emitted.add(current.value)\n await emitPersonEntry(current, depth, onEntry)\n }\n }\n\n if (depth >= maxFoafDistance) {\n return [] as Array<{ person: NamedNode, depth: number }>\n }\n\n const nextPeople: Array<{ person: NamedNode, depth: number }> = []\n const contacts = store.each(current, ns.foaf('knows')) as NamedNode[]\n for (const contact of contacts) {\n if (contact.termType === 'NamedNode') {\n const contactName = storedLabelForNode(store, contact)\n if (contact.value !== user.value && contactName && !emitted.has(contact.value)) {\n emitted.add(contact.value)\n await onEntry({\n kind: 'person',\n uri: contact.value,\n label: contactName,\n subjectType: 'agent',\n relationshipLabel: depth === 0 ? 'Friend' : 'People',\n sources: ['friends']\n })\n }\n\n if (!visited.has(contact.value)) {\n visited.add(contact.value)\n nextPeople.push({ person: contact, depth: depth + 1 })\n }\n }\n }\n\n return nextPeople\n }\n\n while (queue.length > 0) {\n const nextQueue: Array<{ person: NamedNode, depth: number }> = []\n\n for (let index = 0; index < queue.length; index += PEOPLE_SEARCH_CONCURRENCY) {\n const batch = queue.slice(index, index + PEOPLE_SEARCH_CONCURRENCY)\n const nested = await Promise.all(batch.map(processPerson))\n nested.forEach(entries => nextQueue.push(...entries))\n }\n\n queue = nextQueue\n }\n }\n\n return {\n discoverFoafPeople\n }\n}\n"],"mappings":"4EAKA,
|
|
1
|
+
{"version":3,"file":"friendsDirectory.cjs.js","names":["storedLabelForNode","loadDocumentSilently","ns","require_ns","require_directoryHelpers","PEOPLE_SEARCH_CONCURRENCY","createFriendsDirectoryDiscovery","relationshipLabelForDepth","depth","emitPersonEntry","personName","store","person","onEntry","discoverFoafPeople","visited","user","emitted","loadedDocs","queue","processPerson","current","currentEntry","currentDoc","maxFoafDistance","nextPeople","contacts","contact","contactName","nextQueue","index","batch","entries"],"sources":["../../src/directory/friendsDirectory.ts"],"sourcesContent":["import { type DirectoryEntry } from '../types'\nimport { type LiveStore, NamedNode } from 'rdflib'\nimport { ns } from '../util/ns'\nimport { loadDocumentSilently, storedLabelForNode } from './directoryHelpers'\n\nconst PEOPLE_SEARCH_CONCURRENCY = 6\n\nexport function createFriendsDirectoryDiscovery (store: LiveStore) {\n function relationshipLabelForDepth (depth: number) {\n return depth === 1 ? 'Friend' : 'People'\n }\n\n async function emitPersonEntry (\n person: NamedNode,\n depth: number,\n onEntry: (entry: DirectoryEntry) => void | Promise<void>\n ): Promise<void> {\n const personName = storedLabelForNode(store, person)\n if (!personName) return\n\n await onEntry({\n kind: 'person',\n uri: person.value,\n label: personName,\n subjectType: 'agent',\n relationshipLabel: relationshipLabelForDepth(depth),\n sources: ['friends']\n })\n }\n\n async function discoverFoafPeople (\n user: NamedNode,\n maxFoafDistance: number,\n onEntry: (entry: DirectoryEntry) => void | Promise<void>\n ): Promise<void> {\n const visited = new Set<string>([user.value])\n const emitted = new Set<string>()\n const loadedDocs = new Set<string>()\n let queue: Array<{ person: NamedNode, depth: number }> = [{ person: user, depth: 0 }]\n\n const processPerson = async (currentEntry: { person: NamedNode, depth: number }) => {\n const { person: current, depth } = currentEntry\n const currentDoc = current.doc().value\n if (!loadedDocs.has(currentDoc)) {\n loadedDocs.add(currentDoc)\n await loadDocumentSilently(store, current)\n }\n\n if (current.value !== user.value) {\n if (!emitted.has(current.value)) {\n emitted.add(current.value)\n await emitPersonEntry(current, depth, onEntry)\n }\n }\n\n if (depth >= maxFoafDistance) {\n return [] as Array<{ person: NamedNode, depth: number }>\n }\n\n const nextPeople: Array<{ person: NamedNode, depth: number }> = []\n const contacts = store.each(current, ns.foaf('knows')) as NamedNode[]\n for (const contact of contacts) {\n if (contact.termType === 'NamedNode') {\n const contactName = storedLabelForNode(store, contact)\n if (contact.value !== user.value && contactName && !emitted.has(contact.value)) {\n emitted.add(contact.value)\n await onEntry({\n kind: 'person',\n uri: contact.value,\n label: contactName,\n subjectType: 'agent',\n relationshipLabel: depth === 0 ? 'Friend' : 'People',\n sources: ['friends']\n })\n }\n\n if (!visited.has(contact.value)) {\n visited.add(contact.value)\n nextPeople.push({ person: contact, depth: depth + 1 })\n }\n }\n }\n\n return nextPeople\n }\n\n while (queue.length > 0) {\n const nextQueue: Array<{ person: NamedNode, depth: number }> = []\n\n for (let index = 0; index < queue.length; index += PEOPLE_SEARCH_CONCURRENCY) {\n const batch = queue.slice(index, index + PEOPLE_SEARCH_CONCURRENCY)\n const nested = await Promise.all(batch.map(processPerson))\n nested.forEach(entries => nextQueue.push(...entries))\n }\n\n queue = nextQueue\n }\n }\n\n return {\n discoverFoafPeople\n }\n}\n"],"mappings":"4EAKA,IAAMK,EAA4B,EAElC,SAAgBC,EAAiC,EAAkB,CACjE,SAASC,EAA2B,EAAe,CACjD,OAAOC,IAAU,EAAI,SAAW,QAClC,CAEA,eAAeC,EACb,EACA,EACA,EACe,CACf,IAAMC,EAAaV,EAAAA,mBAAmBW,EAAOC,CAAM,EAC9CF,GAEL,MAAMG,EAAQ,CACZ,KAAM,SACN,IAAKD,EAAO,MACZ,MAAOF,EACP,YAAa,QACb,kBAAmBH,EAA0BC,CAAK,EAClD,QAAS,CAAC,SAAS,CACrB,CAAC,CACH,CAEA,eAAeM,EACb,EACA,EACA,EACe,CACf,IAAMC,EAAU,IAAI,IAAY,CAACC,EAAK,KAAK,CAAC,EACtCC,EAAU,IAAI,IACdC,EAAa,IAAI,IACnBC,EAAqD,CAAC,CAAE,OAAQH,EAAM,MAAO,CAAE,CAAC,EAE9EI,EAAgB,KAAO,IAAuD,CAClF,GAAM,CAAE,OAAQC,EAAS,SAAUC,EAC7BC,EAAaF,EAAQ,IAAI,CAAC,CAAC,MAajC,GAZKH,EAAW,IAAIK,CAAU,IAC5BL,EAAW,IAAIK,CAAU,EACzB,MAAMtB,EAAAA,qBAAqBU,EAAOU,CAAO,GAGvCA,EAAQ,QAAUL,EAAK,QACpBC,EAAQ,IAAII,EAAQ,KAAK,IAC5BJ,EAAQ,IAAII,EAAQ,KAAK,EACzB,MAAMZ,EAAgBY,EAASb,EAAOK,CAAO,IAI7CL,GAASgB,EACX,MAAO,CAAC,EAGV,IAAMC,EAA0D,CAAC,EAC3DC,EAAWf,EAAM,KAAKU,EAASnB,EAAAA,GAAG,KAAK,OAAO,CAAC,EACrD,IAAK,IAAMyB,KAAWD,EACpB,GAAIC,EAAQ,WAAa,YAAa,CACpC,IAAMC,EAAc5B,EAAAA,mBAAmBW,EAAOgB,CAAO,EACjDA,EAAQ,QAAUX,EAAK,OAASY,GAAe,CAACX,EAAQ,IAAIU,EAAQ,KAAK,IAC3EV,EAAQ,IAAIU,EAAQ,KAAK,EACzB,MAAMd,EAAQ,CACZ,KAAM,SACN,IAAKc,EAAQ,MACb,MAAOC,EACP,YAAa,QACb,kBAAmBpB,IAAU,EAAI,SAAW,SAC5C,QAAS,CAAC,SAAS,CACrB,CAAC,GAGEO,EAAQ,IAAIY,EAAQ,KAAK,IAC5BZ,EAAQ,IAAIY,EAAQ,KAAK,EACzBF,EAAW,KAAK,CAAE,OAAQE,EAAS,MAAOnB,EAAQ,CAAE,CAAC,EAEzD,CAGF,OAAOiB,CACT,EAEA,KAAON,EAAM,OAAS,GAAG,CACvB,IAAMU,EAAyD,CAAC,EAEhE,IAAK,IAAIC,EAAQ,EAAGA,EAAQX,EAAM,OAAQ,GAASd,EAA2B,CAC5E,IAAM0B,EAAQZ,EAAM,MAAMW,EAAOA,EAAQzB,CAAyB,GAElE,MADqB,QAAQ,IAAI0B,EAAM,IAAIX,CAAa,CAAC,EAAA,CAClD,QAAQ,GAAWS,EAAU,KAAK,GAAGG,CAAO,CAAC,CACtD,CAEA,EAAQH,CACV,CACF,CAEA,MAAO,CACL,oBACF,CACF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"friendsDirectory.esm.js","names":[],"sources":["../../src/directory/friendsDirectory.ts"],"sourcesContent":["import { type DirectoryEntry } from '../types'\nimport { type LiveStore, NamedNode } from 'rdflib'\nimport { ns } from '../util/ns'\nimport { loadDocumentSilently, storedLabelForNode } from './directoryHelpers'\n\nconst PEOPLE_SEARCH_CONCURRENCY = 6\n\nexport function createFriendsDirectoryDiscovery (store: LiveStore) {\n function relationshipLabelForDepth (depth: number) {\n return depth === 1 ? 'Friend' : 'People'\n }\n\n async function emitPersonEntry (\n person: NamedNode,\n depth: number,\n onEntry: (entry: DirectoryEntry) => void | Promise<void>\n ): Promise<void> {\n const personName = storedLabelForNode(store, person)\n if (!personName) return\n\n await onEntry({\n kind: 'person',\n uri: person.value,\n label: personName,\n subjectType: 'agent',\n relationshipLabel: relationshipLabelForDepth(depth),\n sources: ['friends']\n })\n }\n\n async function discoverFoafPeople (\n user: NamedNode,\n maxFoafDistance: number,\n onEntry: (entry: DirectoryEntry) => void | Promise<void>\n ): Promise<void> {\n const visited = new Set<string>([user.value])\n const emitted = new Set<string>()\n const loadedDocs = new Set<string>()\n let queue: Array<{ person: NamedNode, depth: number }> = [{ person: user, depth: 0 }]\n\n const processPerson = async (currentEntry: { person: NamedNode, depth: number }) => {\n const { person: current, depth } = currentEntry\n const currentDoc = current.doc().value\n if (!loadedDocs.has(currentDoc)) {\n loadedDocs.add(currentDoc)\n await loadDocumentSilently(store, current)\n }\n\n if (current.value !== user.value) {\n if (!emitted.has(current.value)) {\n emitted.add(current.value)\n await emitPersonEntry(current, depth, onEntry)\n }\n }\n\n if (depth >= maxFoafDistance) {\n return [] as Array<{ person: NamedNode, depth: number }>\n }\n\n const nextPeople: Array<{ person: NamedNode, depth: number }> = []\n const contacts = store.each(current, ns.foaf('knows')) as NamedNode[]\n for (const contact of contacts) {\n if (contact.termType === 'NamedNode') {\n const contactName = storedLabelForNode(store, contact)\n if (contact.value !== user.value && contactName && !emitted.has(contact.value)) {\n emitted.add(contact.value)\n await onEntry({\n kind: 'person',\n uri: contact.value,\n label: contactName,\n subjectType: 'agent',\n relationshipLabel: depth === 0 ? 'Friend' : 'People',\n sources: ['friends']\n })\n }\n\n if (!visited.has(contact.value)) {\n visited.add(contact.value)\n nextPeople.push({ person: contact, depth: depth + 1 })\n }\n }\n }\n\n return nextPeople\n }\n\n while (queue.length > 0) {\n const nextQueue: Array<{ person: NamedNode, depth: number }> = []\n\n for (let index = 0; index < queue.length; index += PEOPLE_SEARCH_CONCURRENCY) {\n const batch = queue.slice(index, index + PEOPLE_SEARCH_CONCURRENCY)\n const nested = await Promise.all(batch.map(processPerson))\n nested.forEach(entries => nextQueue.push(...entries))\n }\n\n queue = nextQueue\n }\n }\n\n return {\n discoverFoafPeople\n }\n}\n"],"mappings":";;;AAKA,
|
|
1
|
+
{"version":3,"file":"friendsDirectory.esm.js","names":["PEOPLE_SEARCH_CONCURRENCY","createFriendsDirectoryDiscovery","relationshipLabelForDepth","depth","emitPersonEntry","personName","storedLabelForNode","store","person","onEntry","discoverFoafPeople","visited","user","emitted","loadedDocs","queue","processPerson","current","currentEntry","currentDoc","loadDocumentSilently","maxFoafDistance","nextPeople","contacts","ns","contact","contactName","nextQueue","index","batch","entries"],"sources":["../../src/directory/friendsDirectory.ts"],"sourcesContent":["import { type DirectoryEntry } from '../types'\nimport { type LiveStore, NamedNode } from 'rdflib'\nimport { ns } from '../util/ns'\nimport { loadDocumentSilently, storedLabelForNode } from './directoryHelpers'\n\nconst PEOPLE_SEARCH_CONCURRENCY = 6\n\nexport function createFriendsDirectoryDiscovery (store: LiveStore) {\n function relationshipLabelForDepth (depth: number) {\n return depth === 1 ? 'Friend' : 'People'\n }\n\n async function emitPersonEntry (\n person: NamedNode,\n depth: number,\n onEntry: (entry: DirectoryEntry) => void | Promise<void>\n ): Promise<void> {\n const personName = storedLabelForNode(store, person)\n if (!personName) return\n\n await onEntry({\n kind: 'person',\n uri: person.value,\n label: personName,\n subjectType: 'agent',\n relationshipLabel: relationshipLabelForDepth(depth),\n sources: ['friends']\n })\n }\n\n async function discoverFoafPeople (\n user: NamedNode,\n maxFoafDistance: number,\n onEntry: (entry: DirectoryEntry) => void | Promise<void>\n ): Promise<void> {\n const visited = new Set<string>([user.value])\n const emitted = new Set<string>()\n const loadedDocs = new Set<string>()\n let queue: Array<{ person: NamedNode, depth: number }> = [{ person: user, depth: 0 }]\n\n const processPerson = async (currentEntry: { person: NamedNode, depth: number }) => {\n const { person: current, depth } = currentEntry\n const currentDoc = current.doc().value\n if (!loadedDocs.has(currentDoc)) {\n loadedDocs.add(currentDoc)\n await loadDocumentSilently(store, current)\n }\n\n if (current.value !== user.value) {\n if (!emitted.has(current.value)) {\n emitted.add(current.value)\n await emitPersonEntry(current, depth, onEntry)\n }\n }\n\n if (depth >= maxFoafDistance) {\n return [] as Array<{ person: NamedNode, depth: number }>\n }\n\n const nextPeople: Array<{ person: NamedNode, depth: number }> = []\n const contacts = store.each(current, ns.foaf('knows')) as NamedNode[]\n for (const contact of contacts) {\n if (contact.termType === 'NamedNode') {\n const contactName = storedLabelForNode(store, contact)\n if (contact.value !== user.value && contactName && !emitted.has(contact.value)) {\n emitted.add(contact.value)\n await onEntry({\n kind: 'person',\n uri: contact.value,\n label: contactName,\n subjectType: 'agent',\n relationshipLabel: depth === 0 ? 'Friend' : 'People',\n sources: ['friends']\n })\n }\n\n if (!visited.has(contact.value)) {\n visited.add(contact.value)\n nextPeople.push({ person: contact, depth: depth + 1 })\n }\n }\n }\n\n return nextPeople\n }\n\n while (queue.length > 0) {\n const nextQueue: Array<{ person: NamedNode, depth: number }> = []\n\n for (let index = 0; index < queue.length; index += PEOPLE_SEARCH_CONCURRENCY) {\n const batch = queue.slice(index, index + PEOPLE_SEARCH_CONCURRENCY)\n const nested = await Promise.all(batch.map(processPerson))\n nested.forEach(entries => nextQueue.push(...entries))\n }\n\n queue = nextQueue\n }\n }\n\n return {\n discoverFoafPeople\n }\n}\n"],"mappings":";;;AAKA,IAAMA,IAA4B;AAElC,SAAgBC,EAAiC,GAAkB;CACjE,SAASC,EAA2B,GAAe;EACjD,OAAOC,MAAU,IAAI,WAAW;CAClC;CAEA,eAAeC,EACb,GACA,GACA,GACe;EACf,IAAMC,IAAaC,EAAmBC,GAAOC,CAAM;EACnD,AAAKH,KAEL,MAAMI,EAAQ;GACZ,MAAM;GACN,KAAKD,EAAO;GACZ,OAAOH;GACP,aAAa;GACb,mBAAmBH,EAA0BC,CAAK;GAClD,SAAS,CAAC,SAAS;EACrB,CAAC;CACH;CAEA,eAAeO,EACb,GACA,GACA,GACe;EACf,IAAMC,oBAAU,IAAI,IAAY,CAACC,EAAK,KAAK,CAAC,GACtCC,oBAAU,IAAI,IAAY,GAC1BC,oBAAa,IAAI,IAAY,GAC/BC,IAAqD,CAAC;GAAE,QAAQH;GAAM,OAAO;EAAE,CAAC,GAE9EI,IAAgB,OAAO,MAAuD;GAClF,IAAM,EAAE,QAAQC,GAAS,aAAUC,GAC7BC,IAAaF,EAAQ,IAAI,CAAC,CAAC;GAajC,IAZKH,EAAW,IAAIK,CAAU,MAC5BL,EAAW,IAAIK,CAAU,GACzB,MAAMC,EAAqBb,GAAOU,CAAO,IAGvCA,EAAQ,UAAUL,EAAK,UACpBC,EAAQ,IAAII,EAAQ,KAAK,MAC5BJ,EAAQ,IAAII,EAAQ,KAAK,GACzB,MAAMb,EAAgBa,GAASd,GAAOM,CAAO,KAI7CN,KAASkB,GACX,OAAO,CAAC;GAGV,IAAMC,IAA0D,CAAC,GAC3DC,IAAWhB,EAAM,KAAKU,GAASO,EAAG,KAAK,OAAO,CAAC;GACrD,KAAK,IAAMC,KAAWF,GACpB,IAAIE,EAAQ,aAAa,aAAa;IACpC,IAAMC,IAAcpB,EAAmBC,GAAOkB,CAAO;IAarD,AAZIA,EAAQ,UAAUb,EAAK,SAASc,KAAe,CAACb,EAAQ,IAAIY,EAAQ,KAAK,MAC3EZ,EAAQ,IAAIY,EAAQ,KAAK,GACzB,MAAMhB,EAAQ;KACZ,MAAM;KACN,KAAKgB,EAAQ;KACb,OAAOC;KACP,aAAa;KACb,mBAAmBvB,MAAU,IAAI,WAAW;KAC5C,SAAS,CAAC,SAAS;IACrB,CAAC,IAGEQ,EAAQ,IAAIc,EAAQ,KAAK,MAC5Bd,EAAQ,IAAIc,EAAQ,KAAK,GACzBH,EAAW,KAAK;KAAE,QAAQG;KAAS,OAAOtB,IAAQ;IAAE,CAAC;GAEzD;GAGF,OAAOmB;EACT;EAEA,OAAOP,EAAM,SAAS,IAAG;GACvB,IAAMY,IAAyD,CAAC;GAEhE,KAAK,IAAIC,IAAQ,GAAGA,IAAQb,EAAM,QAAQ,KAASf,GAA2B;IAC5E,IAAM6B,IAAQd,EAAM,MAAMa,GAAOA,IAAQ5B,CAAyB;IAElE,CAAA,MADqB,QAAQ,IAAI6B,EAAM,IAAIb,CAAa,CAAC,EAAA,CAClD,SAAQ,MAAWW,EAAU,KAAK,GAAGG,CAAO,CAAC;GACtD;GAEA,IAAQH;EACV;CACF;CAEA,OAAO,EACL,sBACF;AACF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"inboxLogic.cjs.js","names":[],"sources":["../../src/inbox/inboxLogic.ts"],"sourcesContent":["import { NamedNode } from 'rdflib'\nimport { InboxLogic } from '../types'\nimport { getArchiveUrl } from '../util/utils'\n\nexport function createInboxLogic(store, profileLogic, utilityLogic, containerLogic, aclLogic): InboxLogic {\n\n async function createInboxFor(peerWebId: string, nick: string) {\n const myWebId: NamedNode = await profileLogic.loadMe()\n const podRoot: NamedNode = await profileLogic.getPodRoot(myWebId)\n const ourInbox = `${podRoot.value}p2p-inboxes/${encodeURIComponent(nick)}/`\n await containerLogic.createContainer(ourInbox)\n // const aclDocUrl = await aclLogic.findAclDocUrl(ourInbox);\n await utilityLogic.setSinglePeerAccess({\n ownerWebId: myWebId.value,\n peerWebId,\n accessToModes: 'acl:Append',\n target: ourInbox\n })\n return ourInbox\n }\n\n async function getNewMessages(\n user?: NamedNode\n ): Promise<NamedNode[]> {\n if (!user) {\n user = await profileLogic.loadMe()\n }\n const inbox = await profileLogic.getMainInbox(user)\n const urls = await containerLogic.getContainerMembers(inbox)\n return urls.filter(url => !containerLogic.isContainer(url))\n }\n\n async function markAsRead(url: string, date: Date) {\n const downloaded = await store.fetcher._fetch(url)\n if (downloaded.status !== 200) {\n throw new Error(`Not OK! ${url}`)\n }\n const archiveUrl = getArchiveUrl(url, date)\n const options = {\n method: 'PUT',\n body: await downloaded.text(),\n headers: [\n ['Content-Type', downloaded.headers.get('Content-Type') || 'application/octet-stream']\n ]\n }\n const uploaded = await store.fetcher._fetch(archiveUrl, options)\n if (uploaded.status.toString()[0] === '2') {\n await store.fetcher._fetch(url, {\n method: 'DELETE'\n })\n }\n }\n return {\n createInboxFor,\n getNewMessages,\n markAsRead\n }\n}\n"],"mappings":"wCAIA,
|
|
1
|
+
{"version":3,"file":"inboxLogic.cjs.js","names":["getArchiveUrl","require_utils","createInboxLogic","createInboxFor","myWebId","profileLogic","ourInbox","nick","containerLogic","utilityLogic","getNewMessages","user","inbox","url","markAsRead","downloaded","store","archiveUrl","date","options"],"sources":["../../src/inbox/inboxLogic.ts"],"sourcesContent":["import { NamedNode } from 'rdflib'\nimport { InboxLogic } from '../types'\nimport { getArchiveUrl } from '../util/utils'\n\nexport function createInboxLogic(store, profileLogic, utilityLogic, containerLogic, aclLogic): InboxLogic {\n\n async function createInboxFor(peerWebId: string, nick: string) {\n const myWebId: NamedNode = await profileLogic.loadMe()\n const podRoot: NamedNode = await profileLogic.getPodRoot(myWebId)\n const ourInbox = `${podRoot.value}p2p-inboxes/${encodeURIComponent(nick)}/`\n await containerLogic.createContainer(ourInbox)\n // const aclDocUrl = await aclLogic.findAclDocUrl(ourInbox);\n await utilityLogic.setSinglePeerAccess({\n ownerWebId: myWebId.value,\n peerWebId,\n accessToModes: 'acl:Append',\n target: ourInbox\n })\n return ourInbox\n }\n\n async function getNewMessages(\n user?: NamedNode\n ): Promise<NamedNode[]> {\n if (!user) {\n user = await profileLogic.loadMe()\n }\n const inbox = await profileLogic.getMainInbox(user)\n const urls = await containerLogic.getContainerMembers(inbox)\n return urls.filter(url => !containerLogic.isContainer(url))\n }\n\n async function markAsRead(url: string, date: Date) {\n const downloaded = await store.fetcher._fetch(url)\n if (downloaded.status !== 200) {\n throw new Error(`Not OK! ${url}`)\n }\n const archiveUrl = getArchiveUrl(url, date)\n const options = {\n method: 'PUT',\n body: await downloaded.text(),\n headers: [\n ['Content-Type', downloaded.headers.get('Content-Type') || 'application/octet-stream']\n ]\n }\n const uploaded = await store.fetcher._fetch(archiveUrl, options)\n if (uploaded.status.toString()[0] === '2') {\n await store.fetcher._fetch(url, {\n method: 'DELETE'\n })\n }\n }\n return {\n createInboxFor,\n getNewMessages,\n markAsRead\n }\n}\n"],"mappings":"wCAIA,SAAgBE,EAAiB,EAAO,EAAc,EAAc,EAAgB,EAAsB,CAEtG,eAAeC,EAAe,EAAmB,EAAc,CAC7D,IAAMC,EAAqB,MAAMC,EAAa,OAAO,EAE/CC,EAAW,IAAG,MADaD,EAAa,WAAWD,CAAO,EAAA,CACpC,MAAM,cAAc,mBAAmBG,CAAI,EAAE,GASzE,OARA,MAAMC,EAAe,gBAAgBF,CAAQ,EAE7C,MAAMG,EAAa,oBAAoB,CACrC,WAAYL,EAAQ,MACpB,YACA,cAAe,aACf,OAAQE,CACV,CAAC,EACMA,CACX,CAEA,eAAeI,EACX,EACsB,CACtB,AACEC,IAAO,MAAMN,EAAa,OAAO,EAEnC,IAAMO,EAAQ,MAAMP,EAAa,aAAaM,CAAI,EAElD,OAAO,MADYH,EAAe,oBAAoBI,CAAK,EAAA,CAC/C,OAAO,GAAO,CAACJ,EAAe,YAAYK,CAAG,CAAC,CAC9D,CAEA,eAAeC,EAAW,EAAa,EAAY,CACjD,IAAMC,EAAa,MAAMC,EAAM,QAAQ,OAAOH,CAAG,EACjD,GAAIE,EAAW,SAAW,IACxB,MAAU,MAAM,WAAWF,GAAK,EAElC,IAAMI,EAAajB,EAAAA,cAAca,EAAKK,CAAI,EACpCC,EAAU,CACd,OAAQ,MACR,KAAM,MAAMJ,EAAW,KAAK,EAC5B,QAAS,CACP,CAAC,eAAgBA,EAAW,QAAQ,IAAI,cAAc,GAAK,0BAA0B,CACvF,CACF,GAEI,MADmBC,EAAM,QAAQ,OAAOC,EAAYE,CAAO,EAAA,CAClD,OAAO,SAAS,CAAC,CAAC,KAAO,KACpC,MAAMH,EAAM,QAAQ,OAAOH,EAAK,CAC9B,OAAQ,QACV,CAAC,CAEL,CACA,MAAO,CACL,iBACA,iBACA,YACF,CACF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"inboxLogic.esm.js","names":[],"sources":["../../src/inbox/inboxLogic.ts"],"sourcesContent":["import { NamedNode } from 'rdflib'\nimport { InboxLogic } from '../types'\nimport { getArchiveUrl } from '../util/utils'\n\nexport function createInboxLogic(store, profileLogic, utilityLogic, containerLogic, aclLogic): InboxLogic {\n\n async function createInboxFor(peerWebId: string, nick: string) {\n const myWebId: NamedNode = await profileLogic.loadMe()\n const podRoot: NamedNode = await profileLogic.getPodRoot(myWebId)\n const ourInbox = `${podRoot.value}p2p-inboxes/${encodeURIComponent(nick)}/`\n await containerLogic.createContainer(ourInbox)\n // const aclDocUrl = await aclLogic.findAclDocUrl(ourInbox);\n await utilityLogic.setSinglePeerAccess({\n ownerWebId: myWebId.value,\n peerWebId,\n accessToModes: 'acl:Append',\n target: ourInbox\n })\n return ourInbox\n }\n\n async function getNewMessages(\n user?: NamedNode\n ): Promise<NamedNode[]> {\n if (!user) {\n user = await profileLogic.loadMe()\n }\n const inbox = await profileLogic.getMainInbox(user)\n const urls = await containerLogic.getContainerMembers(inbox)\n return urls.filter(url => !containerLogic.isContainer(url))\n }\n\n async function markAsRead(url: string, date: Date) {\n const downloaded = await store.fetcher._fetch(url)\n if (downloaded.status !== 200) {\n throw new Error(`Not OK! ${url}`)\n }\n const archiveUrl = getArchiveUrl(url, date)\n const options = {\n method: 'PUT',\n body: await downloaded.text(),\n headers: [\n ['Content-Type', downloaded.headers.get('Content-Type') || 'application/octet-stream']\n ]\n }\n const uploaded = await store.fetcher._fetch(archiveUrl, options)\n if (uploaded.status.toString()[0] === '2') {\n await store.fetcher._fetch(url, {\n method: 'DELETE'\n })\n }\n }\n return {\n createInboxFor,\n getNewMessages,\n markAsRead\n }\n}\n"],"mappings":";;AAIA,
|
|
1
|
+
{"version":3,"file":"inboxLogic.esm.js","names":["createInboxLogic","createInboxFor","myWebId","profileLogic","ourInbox","nick","containerLogic","utilityLogic","getNewMessages","user","inbox","url","markAsRead","downloaded","store","archiveUrl","getArchiveUrl","date","options"],"sources":["../../src/inbox/inboxLogic.ts"],"sourcesContent":["import { NamedNode } from 'rdflib'\nimport { InboxLogic } from '../types'\nimport { getArchiveUrl } from '../util/utils'\n\nexport function createInboxLogic(store, profileLogic, utilityLogic, containerLogic, aclLogic): InboxLogic {\n\n async function createInboxFor(peerWebId: string, nick: string) {\n const myWebId: NamedNode = await profileLogic.loadMe()\n const podRoot: NamedNode = await profileLogic.getPodRoot(myWebId)\n const ourInbox = `${podRoot.value}p2p-inboxes/${encodeURIComponent(nick)}/`\n await containerLogic.createContainer(ourInbox)\n // const aclDocUrl = await aclLogic.findAclDocUrl(ourInbox);\n await utilityLogic.setSinglePeerAccess({\n ownerWebId: myWebId.value,\n peerWebId,\n accessToModes: 'acl:Append',\n target: ourInbox\n })\n return ourInbox\n }\n\n async function getNewMessages(\n user?: NamedNode\n ): Promise<NamedNode[]> {\n if (!user) {\n user = await profileLogic.loadMe()\n }\n const inbox = await profileLogic.getMainInbox(user)\n const urls = await containerLogic.getContainerMembers(inbox)\n return urls.filter(url => !containerLogic.isContainer(url))\n }\n\n async function markAsRead(url: string, date: Date) {\n const downloaded = await store.fetcher._fetch(url)\n if (downloaded.status !== 200) {\n throw new Error(`Not OK! ${url}`)\n }\n const archiveUrl = getArchiveUrl(url, date)\n const options = {\n method: 'PUT',\n body: await downloaded.text(),\n headers: [\n ['Content-Type', downloaded.headers.get('Content-Type') || 'application/octet-stream']\n ]\n }\n const uploaded = await store.fetcher._fetch(archiveUrl, options)\n if (uploaded.status.toString()[0] === '2') {\n await store.fetcher._fetch(url, {\n method: 'DELETE'\n })\n }\n }\n return {\n createInboxFor,\n getNewMessages,\n markAsRead\n }\n}\n"],"mappings":";;AAIA,SAAgBA,EAAiB,GAAO,GAAc,GAAc,GAAgB,GAAsB;CAEtG,eAAeC,EAAe,GAAmB,GAAc;EAC7D,IAAMC,IAAqB,MAAMC,EAAa,OAAO,GAE/CC,IAAW,IAAG,MADaD,EAAa,WAAWD,CAAO,EAAA,CACpC,MAAM,cAAc,mBAAmBG,CAAI,EAAE;EASzE,OARA,MAAMC,EAAe,gBAAgBF,CAAQ,GAE7C,MAAMG,EAAa,oBAAoB;GACrC,YAAYL,EAAQ;GACpB;GACA,eAAe;GACf,QAAQE;EACV,CAAC,GACMA;CACX;CAEA,eAAeI,EACX,GACsB;EACtB,AACEC,MAAO,MAAMN,EAAa,OAAO;EAEnC,IAAMO,IAAQ,MAAMP,EAAa,aAAaM,CAAI;EAElD,QAAO,MADYH,EAAe,oBAAoBI,CAAK,EAAA,CAC/C,QAAO,MAAO,CAACJ,EAAe,YAAYK,CAAG,CAAC;CAC9D;CAEA,eAAeC,EAAW,GAAa,GAAY;EACjD,IAAMC,IAAa,MAAMC,EAAM,QAAQ,OAAOH,CAAG;EACjD,IAAIE,EAAW,WAAW,KACxB,MAAU,MAAM,WAAWF,GAAK;EAElC,IAAMI,IAAaC,EAAcL,GAAKM,CAAI,GACpCC,IAAU;GACd,QAAQ;GACR,MAAM,MAAML,EAAW,KAAK;GAC5B,SAAS,CACP,CAAC,gBAAgBA,EAAW,QAAQ,IAAI,cAAc,KAAK,0BAA0B,CACvF;EACF;EAEA,CAAI,MADmBC,EAAM,QAAQ,OAAOC,GAAYG,CAAO,EAAA,CAClD,OAAO,SAAS,CAAC,CAAC,OAAO,OACpC,MAAMJ,EAAM,QAAQ,OAAOH,GAAK,EAC9B,QAAQ,SACV,CAAC;CAEL;CACA,OAAO;EACL;EACA;EACA;CACF;AACF"}
|
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, PUBLIC_ACCESS_ROLES, WRITE_LOCKED_OWNER_ROLE, Authenticated, Public, classifyContainerAccessScope, analyzeContainerAccessScope, classifyAuthorizationScope, filterAuthorizationsByContainerScope } from './acl/aclLogic'\nexport type { AccessRole, ContainerAccessScope, ContainerAccessScopeResult, 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,
|
|
1
|
+
{"version":3,"file":"index.cjs.js","names":["solidLogicSingleton","require_identityState","require_aclLogic","require_authUtil","require_CustomError","require_typeIndexLogic","require_directoryLogic","require_solidLogicSingleton","require_serverLogout","require_issuerLogic","_dokieli_web_access_control","authn","authSession","store"],"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, WRITE_LOCKED_OWNER_ROLE, Authenticated, Public, classifyContainerAccessScope, analyzeContainerAccessScope, classifyAuthorizationScope, filterAuthorizationsByContainerScope } from './acl/aclLogic'\nexport type { AccessRole, ContainerAccessScope, ContainerAccessScopeResult, 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, ResourceLogic, ResourceContent, ResourceMetadata, 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,IAAMW,EAAQX,EAAAA,oBAAoB,MAC5BY,EAAcZ,EAAAA,oBAAoB,MAAM,YACxCa,EAAQb,EAAAA,oBAAoB"}
|
package/dist/index.d.ts
CHANGED
|
@@ -12,7 +12,7 @@ export { createTypeIndexLogic } from './typeIndex/typeIndexLogic';
|
|
|
12
12
|
export { createDirectoryLogic, DEFAULT_DIRECTORY_CATALOG_URL, DEFAULT_DIRECTORY_SOURCES } from './directory/directoryLogic';
|
|
13
13
|
export type { AccessControlSubjectKind, AccessControlSubject } from './acl/accessControlSubjects';
|
|
14
14
|
export type { ACLContext, AccessMode, AccessSubject, Authorization, PatchPlan } from './types';
|
|
15
|
-
export type { AppDetails, SolidNamespace, AuthenticationContext, SolidLogic, ChatLogic, DirectoryLogic, DirectoryEntry, DirectorySearchOptions, DirectoryRelationshipLabel, DirectorySource } from './types';
|
|
15
|
+
export type { AppDetails, SolidNamespace, AuthenticationContext, SolidLogic, ResourceLogic, ResourceContent, ResourceMetadata, ChatLogic, DirectoryLogic, DirectoryEntry, DirectorySearchOptions, DirectoryRelationshipLabel, DirectorySource } from './types';
|
|
16
16
|
export { UnauthorizedError, CrossOriginForbiddenError, SameOriginForbiddenError, NotFoundError, FetchError, NotEditableError, WebOperationError } from './logic/CustomError';
|
|
17
17
|
export { solidLogicSingleton, // solidLogicSingleton is exported entirely because it is used in solid-panes
|
|
18
18
|
store, authn, authSession };
|
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,mBAAmB,EAAE,uBAAuB,EAAE,aAAa,EAAE,MAAM,EAAE,4BAA4B,EAAE,2BAA2B,EAAE,0BAA0B,EAAE,oCAAoC,EAAE,MAAM,gBAAgB,CAAA;AACzP,YAAY,EAAE,UAAU,EAAE,oBAAoB,EAAE,0BAA0B,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAA;AACpH,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;
|
|
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,uBAAuB,EAAE,aAAa,EAAE,MAAM,EAAE,4BAA4B,EAAE,2BAA2B,EAAE,0BAA0B,EAAE,oCAAoC,EAAE,MAAM,gBAAgB,CAAA;AACzP,YAAY,EAAE,UAAU,EAAE,oBAAoB,EAAE,0BAA0B,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAA;AACpH,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,aAAa,EAAE,eAAe,EAAE,gBAAgB,EAAE,SAAS,EAAE,cAAc,EAAE,cAAc,EAAE,sBAAsB,EAAE,0BAA0B,EAAE,eAAe,EAAE,MAAM,SAAS,CAAA;AAC9P,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.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, PUBLIC_ACCESS_ROLES, WRITE_LOCKED_OWNER_ROLE, Authenticated, Public, classifyContainerAccessScope, analyzeContainerAccessScope, classifyAuthorizationScope, filterAuthorizationsByContainerScope } from './acl/aclLogic'\nexport type { AccessRole, ContainerAccessScope, ContainerAccessScopeResult, 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,
|
|
1
|
+
{"version":3,"file":"index.esm.js","names":["authn","solidLogicSingleton","authSession","store","ACCESS_ROLES","ACL_LINK","Authenticated","CrossOriginForbiddenError","DEFAULT_DIRECTORY_CATALOG_URL","DEFAULT_DIRECTORY_SOURCES","FetchError","NotEditableError","NotFoundError","PUBLIC_ACCESS_ROLES","Public","SameOriginForbiddenError","UnauthorizedError","WRITE_LOCKED_OWNER_ROLE","WebOperationError","analyzeContainerAccessScope","appContext","classifyAuthorizationScope","classifyContainerAccessScope","createDirectoryLogic","createTypeIndexLogic","filterAuthorizationsByContainerScope","getSuggestedIssuers","offlineTestID","performServerSideLogout","reloadOnIdentityReplaced"],"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, WRITE_LOCKED_OWNER_ROLE, Authenticated, Public, classifyContainerAccessScope, analyzeContainerAccessScope, classifyAuthorizationScope, filterAuthorizationsByContainerScope } from './acl/aclLogic'\nexport type { AccessRole, ContainerAccessScope, ContainerAccessScopeResult, 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, ResourceLogic, ResourceContent, ResourceMetadata, 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,IAAMA,IAAQC,EAAoB,OAC5BC,IAAcD,EAAoB,MAAM,aACxCE,IAAQF,EAAoB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"issuerLogic.cjs.js","names":[],"sources":["../../src/issuer/issuerLogic.ts"],"sourcesContent":["const DEFAULT_ISSUERS = [\n {\n name: 'Solid Community',\n uri: 'https://solidcommunity.net'\n },\n {\n name: 'Solid Web',\n uri: 'https://solidweb.org'\n },\n {\n name: 'Solid Web ME',\n uri: 'https://solidweb.me'\n },\n {\n name: 'Inrupt.com',\n uri: 'https://login.inrupt.com'\n }\n]\n\n/**\n * @returns - A list of suggested OIDC issuers\n */\nexport function getSuggestedIssuers (): { name: string, uri: string }[] {\n // Suggest a default list of OIDC issuers\n const issuers = [...DEFAULT_ISSUERS]\n \n // Suggest the current host if not already included\n const { host, origin } = new URL(location.href)\n const hosts = issuers.map(({ uri }) => new URL(uri).host)\n if (!hosts.includes(host)) {\n issuers.unshift({ name: host, uri: origin })\n }\n \n return issuers\n }"],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"issuerLogic.cjs.js","names":["DEFAULT_ISSUERS","getSuggestedIssuers","issuers","uri","host","origin"],"sources":["../../src/issuer/issuerLogic.ts"],"sourcesContent":["const DEFAULT_ISSUERS = [\n {\n name: 'Solid Community',\n uri: 'https://solidcommunity.net'\n },\n {\n name: 'Solid Web',\n uri: 'https://solidweb.org'\n },\n {\n name: 'Solid Web ME',\n uri: 'https://solidweb.me'\n },\n {\n name: 'Inrupt.com',\n uri: 'https://login.inrupt.com'\n }\n]\n\n/**\n * @returns - A list of suggested OIDC issuers\n */\nexport function getSuggestedIssuers (): { name: string, uri: string }[] {\n // Suggest a default list of OIDC issuers\n const issuers = [...DEFAULT_ISSUERS]\n \n // Suggest the current host if not already included\n const { host, origin } = new URL(location.href)\n const hosts = issuers.map(({ uri }) => new URL(uri).host)\n if (!hosts.includes(host)) {\n issuers.unshift({ name: host, uri: origin })\n }\n \n return issuers\n }"],"mappings":"AAAA,IAAMA,EAAkB,CACtB,CACE,KAAM,kBACN,IAAK,4BACP,EACA,CACE,KAAM,YACN,IAAK,sBACP,EACA,CACE,KAAM,eACN,IAAK,qBACP,EACA,CACE,KAAM,aACN,IAAK,0BACP,CACF,EAKA,SAAgBC,GAAwD,CAEpE,IAAMC,EAAU,CAAC,GAAGF,CAAe,EAG7B,CAAE,OAAM,UAAW,IAAI,IAAI,SAAS,IAAI,EAM9C,OALcE,EAAQ,KAAK,CAAE,SAAU,IAAI,IAAIC,CAAG,CAAC,CAAC,IAC/C,CAAA,CAAM,SAASC,CAAI,GACtBF,EAAQ,QAAQ,CAAE,KAAME,EAAM,IAAKC,CAAO,CAAC,EAGtCH,CACT"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"issuerLogic.esm.js","names":[],"sources":["../../src/issuer/issuerLogic.ts"],"sourcesContent":["const DEFAULT_ISSUERS = [\n {\n name: 'Solid Community',\n uri: 'https://solidcommunity.net'\n },\n {\n name: 'Solid Web',\n uri: 'https://solidweb.org'\n },\n {\n name: 'Solid Web ME',\n uri: 'https://solidweb.me'\n },\n {\n name: 'Inrupt.com',\n uri: 'https://login.inrupt.com'\n }\n]\n\n/**\n * @returns - A list of suggested OIDC issuers\n */\nexport function getSuggestedIssuers (): { name: string, uri: string }[] {\n // Suggest a default list of OIDC issuers\n const issuers = [...DEFAULT_ISSUERS]\n \n // Suggest the current host if not already included\n const { host, origin } = new URL(location.href)\n const hosts = issuers.map(({ uri }) => new URL(uri).host)\n if (!hosts.includes(host)) {\n issuers.unshift({ name: host, uri: origin })\n }\n \n return issuers\n }"],"mappings":";AAAA,
|
|
1
|
+
{"version":3,"file":"issuerLogic.esm.js","names":["DEFAULT_ISSUERS","getSuggestedIssuers","issuers","uri","host","origin"],"sources":["../../src/issuer/issuerLogic.ts"],"sourcesContent":["const DEFAULT_ISSUERS = [\n {\n name: 'Solid Community',\n uri: 'https://solidcommunity.net'\n },\n {\n name: 'Solid Web',\n uri: 'https://solidweb.org'\n },\n {\n name: 'Solid Web ME',\n uri: 'https://solidweb.me'\n },\n {\n name: 'Inrupt.com',\n uri: 'https://login.inrupt.com'\n }\n]\n\n/**\n * @returns - A list of suggested OIDC issuers\n */\nexport function getSuggestedIssuers (): { name: string, uri: string }[] {\n // Suggest a default list of OIDC issuers\n const issuers = [...DEFAULT_ISSUERS]\n \n // Suggest the current host if not already included\n const { host, origin } = new URL(location.href)\n const hosts = issuers.map(({ uri }) => new URL(uri).host)\n if (!hosts.includes(host)) {\n issuers.unshift({ name: host, uri: origin })\n }\n \n return issuers\n }"],"mappings":";AAAA,IAAMA,IAAkB;CACtB;EACE,MAAM;EACN,KAAK;CACP;CACA;EACE,MAAM;EACN,KAAK;CACP;CACA;EACE,MAAM;EACN,KAAK;CACP;CACA;EACE,MAAM;EACN,KAAK;CACP;AACF;AAKA,SAAgBC,IAAwD;CAEpE,IAAMC,IAAU,CAAC,GAAGF,CAAe,GAG7B,EAAE,SAAM,cAAW,IAAI,IAAI,SAAS,IAAI;CAM9C,OALcE,EAAQ,KAAK,EAAE,aAAU,IAAI,IAAIC,CAAG,CAAC,CAAC,IAC/C,CAAA,CAAM,SAASC,CAAI,KACtBF,EAAQ,QAAQ;EAAE,MAAME;EAAM,KAAKC;CAAO,CAAC,GAGtCH;AACT"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CustomError.cjs.js","names":[],"sources":["../../src/logic/CustomError.ts"],"sourcesContent":["class CustomError extends Error {\n constructor(message?: string) {\n super(message)\n // see: typescriptlang.org/docs/handbook/release-notes/typescript-2-2.html\n Object.setPrototypeOf(this, new.target.prototype) // restore prototype chain\n this.name = new.target.name // stack traces display correctly now\n }\n}\n\nexport class UnauthorizedError extends CustomError {}\n\nexport class CrossOriginForbiddenError extends CustomError {}\n\nexport class SameOriginForbiddenError extends CustomError {}\n\nexport class NotFoundError extends CustomError {}\n\nexport class NotEditableError extends CustomError { }\n\nexport class WebOperationError extends CustomError {}\n\nexport class FetchError extends CustomError {\n status: number\n\n constructor(status: number, message?: string) {\n super(message)\n this.status = status\n }\n}"],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"CustomError.cjs.js","names":["CustomError","message","UnauthorizedError","CrossOriginForbiddenError","SameOriginForbiddenError","NotFoundError","NotEditableError","WebOperationError","FetchError","status"],"sources":["../../src/logic/CustomError.ts"],"sourcesContent":["class CustomError extends Error {\n constructor(message?: string) {\n super(message)\n // see: typescriptlang.org/docs/handbook/release-notes/typescript-2-2.html\n Object.setPrototypeOf(this, new.target.prototype) // restore prototype chain\n this.name = new.target.name // stack traces display correctly now\n }\n}\n\nexport class UnauthorizedError extends CustomError {}\n\nexport class CrossOriginForbiddenError extends CustomError {}\n\nexport class SameOriginForbiddenError extends CustomError {}\n\nexport class NotFoundError extends CustomError {}\n\nexport class NotEditableError extends CustomError { }\n\nexport class WebOperationError extends CustomError {}\n\nexport class FetchError extends CustomError {\n status: number\n\n constructor(status: number, message?: string) {\n super(message)\n this.status = status\n }\n}"],"mappings":"AAAA,IAAMA,EAAN,cAA0B,KAAM,CAC5B,YAAY,EAAkB,CAC1B,MAAMC,CAAO,EAEb,OAAO,eAAe,KAAM,WAAW,SAAS,EAChD,KAAK,KAAO,WAAW,IAC3B,CACJ,EAEaC,EAAb,cAAuCF,CAAY,CAAC,EAEvCG,EAAb,cAA+CH,CAAY,CAAC,EAE/CI,EAAb,cAA8CJ,CAAY,CAAC,EAE9CK,EAAb,cAAmCL,CAAY,CAAC,EAEnCM,EAAb,cAAsCN,CAAY,CAAE,EAEvCO,EAAb,cAAuCP,CAAY,CAAC,EAEvCQ,EAAb,cAAgCR,CAAY,CAGxC,YAAY,EAAgB,EAAkB,CAC1C,MAAMC,CAAO,EACb,KAAK,OAASQ,CAClB,CACJ"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CustomError.esm.js","names":[],"sources":["../../src/logic/CustomError.ts"],"sourcesContent":["class CustomError extends Error {\n constructor(message?: string) {\n super(message)\n // see: typescriptlang.org/docs/handbook/release-notes/typescript-2-2.html\n Object.setPrototypeOf(this, new.target.prototype) // restore prototype chain\n this.name = new.target.name // stack traces display correctly now\n }\n}\n\nexport class UnauthorizedError extends CustomError {}\n\nexport class CrossOriginForbiddenError extends CustomError {}\n\nexport class SameOriginForbiddenError extends CustomError {}\n\nexport class NotFoundError extends CustomError {}\n\nexport class NotEditableError extends CustomError { }\n\nexport class WebOperationError extends CustomError {}\n\nexport class FetchError extends CustomError {\n status: number\n\n constructor(status: number, message?: string) {\n super(message)\n this.status = status\n }\n}"],"mappings":";AAAA,
|
|
1
|
+
{"version":3,"file":"CustomError.esm.js","names":["CustomError","message","UnauthorizedError","CrossOriginForbiddenError","SameOriginForbiddenError","NotFoundError","NotEditableError","WebOperationError","FetchError","status"],"sources":["../../src/logic/CustomError.ts"],"sourcesContent":["class CustomError extends Error {\n constructor(message?: string) {\n super(message)\n // see: typescriptlang.org/docs/handbook/release-notes/typescript-2-2.html\n Object.setPrototypeOf(this, new.target.prototype) // restore prototype chain\n this.name = new.target.name // stack traces display correctly now\n }\n}\n\nexport class UnauthorizedError extends CustomError {}\n\nexport class CrossOriginForbiddenError extends CustomError {}\n\nexport class SameOriginForbiddenError extends CustomError {}\n\nexport class NotFoundError extends CustomError {}\n\nexport class NotEditableError extends CustomError { }\n\nexport class WebOperationError extends CustomError {}\n\nexport class FetchError extends CustomError {\n status: number\n\n constructor(status: number, message?: string) {\n super(message)\n this.status = status\n }\n}"],"mappings":";AAAA,IAAMA,IAAN,cAA0B,MAAM;CAC5B,YAAY,GAAkB;EAI1B,AAHA,MAAMC,CAAO,GAEb,OAAO,eAAe,MAAM,WAAW,SAAS,GAChD,KAAK,OAAO,WAAW;CAC3B;AACJ,GAEaC,IAAb,cAAuCF,EAAY,CAAC,GAEvCG,IAAb,cAA+CH,EAAY,CAAC,GAE/CI,IAAb,cAA8CJ,EAAY,CAAC,GAE9CK,IAAb,cAAmCL,EAAY,CAAC,GAEnCM,IAAb,cAAsCN,EAAY,CAAE,GAEvCO,IAAb,cAAuCP,EAAY,CAAC,GAEvCQ,IAAb,cAAgCR,EAAY;CAGxC,YAAY,GAAgB,GAAkB;EAE1C,AADA,MAAMC,CAAO,GACb,KAAK,SAASQ;CAClB;AACJ"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"solidLogic.cjs.js","names":[],"sources":["../../src/logic/solidLogic.ts"],"sourcesContent":["import * as rdf from 'rdflib'\nimport { LiveStore, NamedNode, Statement } from 'rdflib'\nimport { createAclLogic } from '../acl/aclLogic'\nimport { SolidAuthnLogic } from '../authn/SolidAuthnLogic'\nimport type { SessionWithLegacyEvents } from '../authSession/authSession'\nimport { flagAuthorizationOnSessionTransitions } from '../authSession/flagAuthorizationOnTransitions'\nimport { createChatLogic } from '../chat/chatLogic'\nimport { createInboxLogic } from '../inbox/inboxLogic'\nimport { createResourceLogic } from '../resource/resourceLogic'\nimport { createProfileLogic } from '../profile/profileLogic'\nimport { createTypeIndexLogic } from '../typeIndex/typeIndexLogic'\nimport { createDirectoryLogic } from '../directory/directoryLogic'\nimport { createContainerLogic } from '../util/containerLogic'\nimport { createUtilityLogic } from '../util/utilityLogic'\nimport type { AuthnLogic, SolidLogic } from '../types'\nimport * as debug from '../util/debug'\n/*\n** It is important to distinquish `fetch`, a function provided by the browser\n** and `Fetcher`, a helper object for the rdflib Store which turns it\n** into a `ConnectedStore` or a `LiveStore`. A Fetcher object is\n** available at store.fetcher, and `fetch` function at `store.fetcher._fetch`,\n*/\nexport function createSolidLogic(specialFetch: { fetch: (url: any, requestInit: any) => any }, session: SessionWithLegacyEvents): SolidLogic {\n\n debug.log('SolidLogic: Unique instance created. There should only be one of these.')\n const store: LiveStore = rdf.graph() as LiveStore\n rdf.fetcher(store, {fetch: specialFetch.fetch}) // Attach a web I/O module, store.fetcher\n store.updater = new rdf.UpdateManager(store) // Add real-time live updates store.updater\n store.features = [] // disable automatic node merging on store load\n // Whose credentials a request would carry changed: mark every recorded\n // response out-of-date so editability answers \"unknown\" instead of the\n // previous identity's access. Decision points repair with\n // ensureDocumentAuthorization() (see flagAuthorizationOnTransitions.ts).\n const unsubscribeAuthorization = flagAuthorizationOnSessionTransitions(store, session)\n\n const authn: AuthnLogic = new SolidAuthnLogic(session)\n\n // The subscription is released with the auth logic: both belong to this\n // instance's lifetime, so replacing a SolidLogic instance does not leave\n // the old store subscribed to the session.\n const disposeAuthn = authn.dispose?.bind(authn)\n authn.dispose = (): void => {\n unsubscribeAuthorization()\n disposeAuthn?.()\n }\n \n const acl = createAclLogic(store)\n const containerLogic = createContainerLogic(store)\n const utilityLogic = createUtilityLogic(store, acl, containerLogic)\n const profile = createProfileLogic(store, authn, utilityLogic)\n const chat = createChatLogic(store, profile)\n const inbox = createInboxLogic(store, profile, utilityLogic, containerLogic, acl)\n const typeIndex = createTypeIndexLogic(store, authn, profile, utilityLogic)\n const directory = createDirectoryLogic(store, authn, typeIndex)\n const resource = createResourceLogic(store, acl, containerLogic, typeIndex)\n debug.log('SolidAuthnLogic initialized')\n\n function load(doc: NamedNode | NamedNode[] | string) {\n return store.fetcher.load(doc)\n }\n\n // @@@@ use the one in rdflib.js when it is available and delete this\n function updatePromise(\n del: Array<Statement>,\n ins: Array<Statement> = []\n ): Promise<void> {\n return new Promise((resolve, reject) => {\n store.updater.update(del, ins, function (_uri, ok, errorBody) {\n if (!ok) {\n reject(new Error(errorBody))\n } else {\n resolve()\n }\n }) // callback\n }) // promise\n }\n\n function clearStore() {\n store.statements.slice().forEach(store.remove.bind(store))\n }\n\n return {\n store,\n authn,\n acl,\n resource,\n inbox,\n chat,\n profile,\n typeIndex,\n directory,\n load,\n updatePromise,\n clearStore\n }\n}\n"],"mappings":"gnBAsBA,
|
|
1
|
+
{"version":3,"file":"solidLogic.cjs.js","names":["rdf","flagAuthorizationOnSessionTransitions","SolidAuthnLogic","createAclLogic","createContainerLogic","createUtilityLogic","createProfileLogic","createChatLogic","createInboxLogic","createTypeIndexLogic","createDirectoryLogic","createResourceLogic","require_runtime","require_debug","require_aclLogic","require_SolidAuthnLogic","require_flagAuthorizationOnTransitions","require_chatLogic","require_inboxLogic","require_resourceLogic","require_containerLogic","require_profileLogic","require_typeIndexLogic","require_directoryLogic","require_utilityLogic","rdflib","createSolidLogic","store","specialFetch","unsubscribeAuthorization","session","authn","disposeAuthn","acl","containerLogic","utilityLogic","profile","chat","inbox","typeIndex","directory","resource","load","doc","updatePromise","del","ins","ok","resolve","reject","errorBody","clearStore"],"sources":["../../src/logic/solidLogic.ts"],"sourcesContent":["import * as rdf from 'rdflib'\nimport { LiveStore, NamedNode, Statement } from 'rdflib'\nimport { createAclLogic } from '../acl/aclLogic'\nimport { SolidAuthnLogic } from '../authn/SolidAuthnLogic'\nimport type { SessionWithLegacyEvents } from '../authSession/authSession'\nimport { flagAuthorizationOnSessionTransitions } from '../authSession/flagAuthorizationOnTransitions'\nimport { createChatLogic } from '../chat/chatLogic'\nimport { createInboxLogic } from '../inbox/inboxLogic'\nimport { createResourceLogic } from '../resource/resourceLogic'\nimport { createProfileLogic } from '../profile/profileLogic'\nimport { createTypeIndexLogic } from '../typeIndex/typeIndexLogic'\nimport { createDirectoryLogic } from '../directory/directoryLogic'\nimport { createContainerLogic } from '../util/containerLogic'\nimport { createUtilityLogic } from '../util/utilityLogic'\nimport type { AuthnLogic, SolidLogic } from '../types'\nimport * as debug from '../util/debug'\n/*\n** It is important to distinquish `fetch`, a function provided by the browser\n** and `Fetcher`, a helper object for the rdflib Store which turns it\n** into a `ConnectedStore` or a `LiveStore`. A Fetcher object is\n** available at store.fetcher, and `fetch` function at `store.fetcher._fetch`,\n*/\nexport function createSolidLogic(specialFetch: { fetch: (url: any, requestInit: any) => any }, session: SessionWithLegacyEvents): SolidLogic {\n\n debug.log('SolidLogic: Unique instance created. There should only be one of these.')\n const store: LiveStore = rdf.graph() as LiveStore\n rdf.fetcher(store, {fetch: specialFetch.fetch}) // Attach a web I/O module, store.fetcher\n store.updater = new rdf.UpdateManager(store) // Add real-time live updates store.updater\n store.features = [] // disable automatic node merging on store load\n // Whose credentials a request would carry changed: mark every recorded\n // response out-of-date so editability answers \"unknown\" instead of the\n // previous identity's access. Decision points repair with\n // ensureDocumentAuthorization() (see flagAuthorizationOnTransitions.ts).\n const unsubscribeAuthorization = flagAuthorizationOnSessionTransitions(store, session)\n\n const authn: AuthnLogic = new SolidAuthnLogic(session)\n\n // The subscription is released with the auth logic: both belong to this\n // instance's lifetime, so replacing a SolidLogic instance does not leave\n // the old store subscribed to the session.\n const disposeAuthn = authn.dispose?.bind(authn)\n authn.dispose = (): void => {\n unsubscribeAuthorization()\n disposeAuthn?.()\n }\n \n const acl = createAclLogic(store)\n const containerLogic = createContainerLogic(store)\n const utilityLogic = createUtilityLogic(store, acl, containerLogic)\n const profile = createProfileLogic(store, authn, utilityLogic)\n const chat = createChatLogic(store, profile)\n const inbox = createInboxLogic(store, profile, utilityLogic, containerLogic, acl)\n const typeIndex = createTypeIndexLogic(store, authn, profile, utilityLogic)\n const directory = createDirectoryLogic(store, authn, typeIndex)\n const resource = createResourceLogic(store, acl, containerLogic, typeIndex)\n debug.log('SolidAuthnLogic initialized')\n\n function load(doc: NamedNode | NamedNode[] | string) {\n return store.fetcher.load(doc)\n }\n\n // @@@@ use the one in rdflib.js when it is available and delete this\n function updatePromise(\n del: Array<Statement>,\n ins: Array<Statement> = []\n ): Promise<void> {\n return new Promise((resolve, reject) => {\n store.updater.update(del, ins, function (_uri, ok, errorBody) {\n if (!ok) {\n reject(new Error(errorBody))\n } else {\n resolve()\n }\n }) // callback\n }) // promise\n }\n\n function clearStore() {\n store.statements.slice().forEach(store.remove.bind(store))\n }\n\n return {\n store,\n authn,\n acl,\n resource,\n inbox,\n chat,\n profile,\n typeIndex,\n directory,\n load,\n updatePromise,\n clearStore\n }\n}\n"],"mappings":"gnBAsBA,SAAgB0B,EAAiB,EAA8D,EAA8C,CAEzIb,EAAA,IAAU,0EAA0E,EACpF,IAAMc,EAAmB3B,EAAI,MAAM,EACnCyB,EAAI,QAAQE,EAAO,CAAC,MAAOC,EAAa,KAAK,CAAC,EAC9C,EAAM,QAAU,IAAI5B,EAAI,cAAc2B,CAAK,EAC3C,EAAM,SAAW,CAAC,EAKlB,IAAME,EAA2B5B,EAAAA,sCAAsC0B,EAAOG,CAAO,EAE/EC,EAAoB,IAAI7B,EAAAA,gBAAgB4B,CAAO,EAK/CE,EAAeD,EAAM,SAAS,KAAKA,CAAK,EAC9C,EAAM,YAAsB,CAC1BF,EAAyB,EACzBG,IAAe,CACjB,EAEA,IAAMC,EAAM9B,EAAAA,eAAewB,CAAK,EAC1BO,EAAiB9B,EAAAA,qBAAqBuB,CAAK,EAC3CQ,EAAe9B,EAAAA,mBAAmBsB,EAAOM,EAAKC,CAAc,EAC5DE,EAAU9B,EAAAA,mBAAmBqB,EAAOI,EAAOI,CAAY,EACvDE,EAAO9B,EAAAA,gBAAgBoB,EAAOS,CAAO,EACrCE,EAAQ9B,EAAAA,iBAAiBmB,EAAOS,EAASD,EAAcD,EAAgBD,CAAG,EAC1EM,EAAY9B,EAAAA,qBAAqBkB,EAAOI,EAAOK,EAASD,CAAY,EACpEK,EAAY9B,EAAAA,qBAAqBiB,EAAOI,EAAOQ,CAAS,EACxDE,EAAW9B,EAAAA,oBAAoBgB,EAAOM,EAAKC,EAAgBK,CAAS,EAC1E1B,EAAA,IAAU,6BAA6B,EAEvC,SAAS6B,EAAK,EAAuC,CACjD,OAAOf,EAAM,QAAQ,KAAKgB,CAAG,CACjC,CAGA,SAASC,EACL,EACA,EAAwB,CAAC,EACZ,CACb,OAAO,IAAI,SAAS,EAAS,IAAW,CACxCjB,EAAM,QAAQ,OAAOkB,EAAKC,EAAK,SAAU,EAAM,EAAI,EAAW,CACrDC,EAGLC,EAAQ,EAFRC,EAAW,MAAMC,CAAS,CAAC,CAI/B,CAAC,CACD,CAAC,CACL,CAEA,SAASC,GAAa,CAClBxB,EAAM,WAAW,MAAM,CAAC,CAAC,QAAQA,EAAM,OAAO,KAAKA,CAAK,CAAC,CAC7D,CAEA,MAAO,CACH,QACA,QACA,MACA,WACA,QACA,OACA,UACA,YACA,YACA,OACA,gBACA,YACJ,CACJ"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"solidLogic.esm.js","names":[],"sources":["../../src/logic/solidLogic.ts"],"sourcesContent":["import * as rdf from 'rdflib'\nimport { LiveStore, NamedNode, Statement } from 'rdflib'\nimport { createAclLogic } from '../acl/aclLogic'\nimport { SolidAuthnLogic } from '../authn/SolidAuthnLogic'\nimport type { SessionWithLegacyEvents } from '../authSession/authSession'\nimport { flagAuthorizationOnSessionTransitions } from '../authSession/flagAuthorizationOnTransitions'\nimport { createChatLogic } from '../chat/chatLogic'\nimport { createInboxLogic } from '../inbox/inboxLogic'\nimport { createResourceLogic } from '../resource/resourceLogic'\nimport { createProfileLogic } from '../profile/profileLogic'\nimport { createTypeIndexLogic } from '../typeIndex/typeIndexLogic'\nimport { createDirectoryLogic } from '../directory/directoryLogic'\nimport { createContainerLogic } from '../util/containerLogic'\nimport { createUtilityLogic } from '../util/utilityLogic'\nimport type { AuthnLogic, SolidLogic } from '../types'\nimport * as debug from '../util/debug'\n/*\n** It is important to distinquish `fetch`, a function provided by the browser\n** and `Fetcher`, a helper object for the rdflib Store which turns it\n** into a `ConnectedStore` or a `LiveStore`. A Fetcher object is\n** available at store.fetcher, and `fetch` function at `store.fetcher._fetch`,\n*/\nexport function createSolidLogic(specialFetch: { fetch: (url: any, requestInit: any) => any }, session: SessionWithLegacyEvents): SolidLogic {\n\n debug.log('SolidLogic: Unique instance created. There should only be one of these.')\n const store: LiveStore = rdf.graph() as LiveStore\n rdf.fetcher(store, {fetch: specialFetch.fetch}) // Attach a web I/O module, store.fetcher\n store.updater = new rdf.UpdateManager(store) // Add real-time live updates store.updater\n store.features = [] // disable automatic node merging on store load\n // Whose credentials a request would carry changed: mark every recorded\n // response out-of-date so editability answers \"unknown\" instead of the\n // previous identity's access. Decision points repair with\n // ensureDocumentAuthorization() (see flagAuthorizationOnTransitions.ts).\n const unsubscribeAuthorization = flagAuthorizationOnSessionTransitions(store, session)\n\n const authn: AuthnLogic = new SolidAuthnLogic(session)\n\n // The subscription is released with the auth logic: both belong to this\n // instance's lifetime, so replacing a SolidLogic instance does not leave\n // the old store subscribed to the session.\n const disposeAuthn = authn.dispose?.bind(authn)\n authn.dispose = (): void => {\n unsubscribeAuthorization()\n disposeAuthn?.()\n }\n \n const acl = createAclLogic(store)\n const containerLogic = createContainerLogic(store)\n const utilityLogic = createUtilityLogic(store, acl, containerLogic)\n const profile = createProfileLogic(store, authn, utilityLogic)\n const chat = createChatLogic(store, profile)\n const inbox = createInboxLogic(store, profile, utilityLogic, containerLogic, acl)\n const typeIndex = createTypeIndexLogic(store, authn, profile, utilityLogic)\n const directory = createDirectoryLogic(store, authn, typeIndex)\n const resource = createResourceLogic(store, acl, containerLogic, typeIndex)\n debug.log('SolidAuthnLogic initialized')\n\n function load(doc: NamedNode | NamedNode[] | string) {\n return store.fetcher.load(doc)\n }\n\n // @@@@ use the one in rdflib.js when it is available and delete this\n function updatePromise(\n del: Array<Statement>,\n ins: Array<Statement> = []\n ): Promise<void> {\n return new Promise((resolve, reject) => {\n store.updater.update(del, ins, function (_uri, ok, errorBody) {\n if (!ok) {\n reject(new Error(errorBody))\n } else {\n resolve()\n }\n }) // callback\n }) // promise\n }\n\n function clearStore() {\n store.statements.slice().forEach(store.remove.bind(store))\n }\n\n return {\n store,\n authn,\n acl,\n resource,\n inbox,\n chat,\n profile,\n typeIndex,\n directory,\n load,\n updatePromise,\n clearStore\n }\n}\n"],"mappings":";;;;;;;;;;;;;;AAsBA,
|
|
1
|
+
{"version":3,"file":"solidLogic.esm.js","names":["rdf","createSolidLogic","store","specialFetch","unsubscribeAuthorization","flagAuthorizationOnSessionTransitions","session","authn","SolidAuthnLogic","disposeAuthn","acl","createAclLogic","containerLogic","createContainerLogic","utilityLogic","createUtilityLogic","profile","createProfileLogic","chat","createChatLogic","inbox","createInboxLogic","typeIndex","createTypeIndexLogic","directory","createDirectoryLogic","resource","createResourceLogic","load","doc","updatePromise","del","ins","ok","resolve","reject","errorBody","clearStore"],"sources":["../../src/logic/solidLogic.ts"],"sourcesContent":["import * as rdf from 'rdflib'\nimport { LiveStore, NamedNode, Statement } from 'rdflib'\nimport { createAclLogic } from '../acl/aclLogic'\nimport { SolidAuthnLogic } from '../authn/SolidAuthnLogic'\nimport type { SessionWithLegacyEvents } from '../authSession/authSession'\nimport { flagAuthorizationOnSessionTransitions } from '../authSession/flagAuthorizationOnTransitions'\nimport { createChatLogic } from '../chat/chatLogic'\nimport { createInboxLogic } from '../inbox/inboxLogic'\nimport { createResourceLogic } from '../resource/resourceLogic'\nimport { createProfileLogic } from '../profile/profileLogic'\nimport { createTypeIndexLogic } from '../typeIndex/typeIndexLogic'\nimport { createDirectoryLogic } from '../directory/directoryLogic'\nimport { createContainerLogic } from '../util/containerLogic'\nimport { createUtilityLogic } from '../util/utilityLogic'\nimport type { AuthnLogic, SolidLogic } from '../types'\nimport * as debug from '../util/debug'\n/*\n** It is important to distinquish `fetch`, a function provided by the browser\n** and `Fetcher`, a helper object for the rdflib Store which turns it\n** into a `ConnectedStore` or a `LiveStore`. A Fetcher object is\n** available at store.fetcher, and `fetch` function at `store.fetcher._fetch`,\n*/\nexport function createSolidLogic(specialFetch: { fetch: (url: any, requestInit: any) => any }, session: SessionWithLegacyEvents): SolidLogic {\n\n debug.log('SolidLogic: Unique instance created. There should only be one of these.')\n const store: LiveStore = rdf.graph() as LiveStore\n rdf.fetcher(store, {fetch: specialFetch.fetch}) // Attach a web I/O module, store.fetcher\n store.updater = new rdf.UpdateManager(store) // Add real-time live updates store.updater\n store.features = [] // disable automatic node merging on store load\n // Whose credentials a request would carry changed: mark every recorded\n // response out-of-date so editability answers \"unknown\" instead of the\n // previous identity's access. Decision points repair with\n // ensureDocumentAuthorization() (see flagAuthorizationOnTransitions.ts).\n const unsubscribeAuthorization = flagAuthorizationOnSessionTransitions(store, session)\n\n const authn: AuthnLogic = new SolidAuthnLogic(session)\n\n // The subscription is released with the auth logic: both belong to this\n // instance's lifetime, so replacing a SolidLogic instance does not leave\n // the old store subscribed to the session.\n const disposeAuthn = authn.dispose?.bind(authn)\n authn.dispose = (): void => {\n unsubscribeAuthorization()\n disposeAuthn?.()\n }\n \n const acl = createAclLogic(store)\n const containerLogic = createContainerLogic(store)\n const utilityLogic = createUtilityLogic(store, acl, containerLogic)\n const profile = createProfileLogic(store, authn, utilityLogic)\n const chat = createChatLogic(store, profile)\n const inbox = createInboxLogic(store, profile, utilityLogic, containerLogic, acl)\n const typeIndex = createTypeIndexLogic(store, authn, profile, utilityLogic)\n const directory = createDirectoryLogic(store, authn, typeIndex)\n const resource = createResourceLogic(store, acl, containerLogic, typeIndex)\n debug.log('SolidAuthnLogic initialized')\n\n function load(doc: NamedNode | NamedNode[] | string) {\n return store.fetcher.load(doc)\n }\n\n // @@@@ use the one in rdflib.js when it is available and delete this\n function updatePromise(\n del: Array<Statement>,\n ins: Array<Statement> = []\n ): Promise<void> {\n return new Promise((resolve, reject) => {\n store.updater.update(del, ins, function (_uri, ok, errorBody) {\n if (!ok) {\n reject(new Error(errorBody))\n } else {\n resolve()\n }\n }) // callback\n }) // promise\n }\n\n function clearStore() {\n store.statements.slice().forEach(store.remove.bind(store))\n }\n\n return {\n store,\n authn,\n acl,\n resource,\n inbox,\n chat,\n profile,\n typeIndex,\n directory,\n load,\n updatePromise,\n clearStore\n }\n}\n"],"mappings":";;;;;;;;;;;;;;AAsBA,SAAgBC,EAAiB,GAA8D,GAA8C;CAEzI,EAAU,0EAA0E;CACpF,IAAMC,IAAmBF,EAAI,MAAM;CAGnC,AAFAA,EAAI,QAAQE,GAAO,EAAC,OAAOC,EAAa,MAAK,CAAC,GAC9C,EAAM,UAAU,IAAIH,EAAI,cAAcE,CAAK,GAC3C,EAAM,WAAW,CAAC;CAKlB,IAAME,IAA2BC,EAAsCH,GAAOI,CAAO,GAE/EC,IAAoB,IAAIC,EAAgBF,CAAO,GAK/CG,IAAeF,EAAM,SAAS,KAAKA,CAAK;CAC9C,EAAM,gBAAsB;EAE1B,AADAH,EAAyB,GACzBK,IAAe;CACjB;CAEA,IAAMC,IAAMC,EAAeT,CAAK,GAC1BU,IAAiBC,EAAqBX,CAAK,GAC3CY,IAAeC,EAAmBb,GAAOQ,GAAKE,CAAc,GAC5DI,IAAUC,EAAmBf,GAAOK,GAAOO,CAAY,GACvDI,IAAOC,EAAgBjB,GAAOc,CAAO,GACrCI,IAAQC,EAAiBnB,GAAOc,GAASF,GAAcF,GAAgBF,CAAG,GAC1EY,IAAYC,EAAqBrB,GAAOK,GAAOS,GAASF,CAAY,GACpEU,IAAYC,EAAqBvB,GAAOK,GAAOe,CAAS,GACxDI,IAAWC,EAAoBzB,GAAOQ,GAAKE,GAAgBU,CAAS;CAC1E,EAAU,6BAA6B;CAEvC,SAASM,EAAK,GAAuC;EACjD,OAAO1B,EAAM,QAAQ,KAAK2B,CAAG;CACjC;CAGA,SAASC,EACL,GACA,IAAwB,CAAC,GACZ;EACb,OAAO,IAAI,SAAS,GAAS,MAAW;GACxC,EAAM,QAAQ,OAAOC,GAAKC,GAAK,SAAU,GAAM,GAAI,GAAW;IAC1D,AAAKC,IAGLC,EAAQ,IAFRC,EAAW,MAAMC,CAAS,CAAC;GAI/B,CAAC;EACD,CAAC;CACL;CAEA,SAASC,IAAa;EAClB,EAAM,WAAW,MAAM,CAAC,CAAC,QAAQnC,EAAM,OAAO,KAAKA,CAAK,CAAC;CAC7D;CAEA,OAAO;EACH;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CACJ;AACJ"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
const e=require("../util/debug.cjs.js"),t=require("../authSession/identityState.cjs.js"),n=require("../authSession/authSession.cjs.js"),r=require("./solidLogic.cjs.js");var i=async(e,r)=>{let i=r&&r.credentials&&r.credentials==`omit`,a=n.authSession;if(!t.sessionExplicitlyInactive(a)&&(a?.info?.webId||a?.webId)&&!i){let t=typeof a.
|
|
1
|
+
const e=require("../util/debug.cjs.js"),t=require("../authSession/identityState.cjs.js"),n=require("../authSession/authSession.cjs.js"),r=require("./solidLogic.cjs.js");var i=async(e,r)=>{let i=r&&r.credentials&&r.credentials==`omit`,a=n.authSession;if(!t.sessionExplicitlyInactive(a)&&(a?.info?.webId||a?.webId)&&!i){let t=typeof a.authFetch==`function`?a.authFetch.bind(a):typeof a.fetch==`function`?a.fetch.bind(a):null;return t?t(e,r):window.fetch(e,r)}return window.fetch(e,r)},a=Symbol.for(`solid-logic-singleton`),o=typeof window<`u`?window:global;function s(){return o[a]?e.log(`SolidLogic: Using existing global singleton instance.`):(e.log(`SolidLogic: Creating new global singleton instance.`),o[a]=r.createSolidLogic({fetch:i},n.authSession),e.log(`Unique quadstore initialized.`)),o[a]}var c=s();exports.solidLogicSingleton=c;
|
|
2
2
|
//# sourceMappingURL=solidLogicSingleton.cjs.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"solidLogicSingleton.cjs.js","names":[],"sources":["../../src/logic/solidLogicSingleton.ts"],"sourcesContent":["import * as debug from '../util/debug'\nimport { authSession } from '../authSession/authSession'\nimport { sessionExplicitlyInactive } from '../authSession/identityState'\nimport { createSolidLogic } from './solidLogic'\nimport { SolidLogic } from '../types'\n\nconst _fetch = async (url, requestInit) => {\n const omitCreds = requestInit && requestInit.credentials && requestInit.credentials == 'omit'\n const sessionAny = authSession as any\n // A session that explicitly reports itself inactive must not keep\n // identifying the last user: with a retained WebID, choosing the\n // authenticated fetch would send the previous identity's credentials.\n const sessionWebId = sessionExplicitlyInactive(sessionAny)\n ? undefined\n : (sessionAny?.info?.webId || sessionAny?.webId)\n if (sessionWebId && !omitCreds) { // see https://github.com/solidos/solidos/issues/114\n // In fact fetch should respect credentials omit itself\n const authenticatedFetch = (typeof sessionAny.
|
|
1
|
+
{"version":3,"file":"solidLogicSingleton.cjs.js","names":["authSession","sessionExplicitlyInactive","createSolidLogic","require_debug","require_identityState","require_authSession","require_solidLogic","_fetch","omitCreds","requestInit","sessionAny","authenticatedFetch","url","SINGLETON_SYMBOL","globalTarget","getOrCreateSingleton","solidLogicSingleton"],"sources":["../../src/logic/solidLogicSingleton.ts"],"sourcesContent":["import * as debug from '../util/debug'\nimport { authSession } from '../authSession/authSession'\nimport { sessionExplicitlyInactive } from '../authSession/identityState'\nimport { createSolidLogic } from './solidLogic'\nimport { SolidLogic } from '../types'\n\nconst _fetch = async (url, requestInit) => {\n const omitCreds = requestInit && requestInit.credentials && requestInit.credentials == 'omit'\n const sessionAny = authSession as any\n // A session that explicitly reports itself inactive must not keep\n // identifying the last user: with a retained WebID, choosing the\n // authenticated fetch would send the previous identity's credentials.\n const sessionWebId = sessionExplicitlyInactive(sessionAny)\n ? undefined\n : (sessionAny?.info?.webId || sessionAny?.webId)\n if (sessionWebId && !omitCreds) { // see https://github.com/solidos/solidos/issues/114\n // In fact fetch should respect credentials omit itself\n const authenticatedFetch = (typeof sessionAny.authFetch === 'function')\n ? sessionAny.authFetch.bind(sessionAny)\n : (typeof sessionAny.fetch === 'function' ? sessionAny.fetch.bind(sessionAny) : null)\n if (authenticatedFetch) {\n return authenticatedFetch(url, requestInit)\n }\n return window.fetch(url, requestInit)\n } else {\n return window.fetch(url, requestInit)\n }\n}\n\n// Global singleton pattern to ensure unique store across library versions\nconst SINGLETON_SYMBOL = Symbol.for('solid-logic-singleton')\n\n// Type the global object properly with the singleton\ninterface GlobalWithSingleton {\n [SINGLETON_SYMBOL]?: SolidLogic\n}\n\nconst globalTarget = (typeof window !== 'undefined' ? window : global) as GlobalWithSingleton\n\nfunction getOrCreateSingleton(): SolidLogic {\n if (!globalTarget[SINGLETON_SYMBOL]) {\n debug.log('SolidLogic: Creating new global singleton instance.')\n globalTarget[SINGLETON_SYMBOL] = createSolidLogic({ fetch: _fetch }, authSession)\n debug.log('Unique quadstore initialized.')\n } else {\n debug.log('SolidLogic: Using existing global singleton instance.')\n }\n return globalTarget[SINGLETON_SYMBOL]!\n}\n//this const makes solidLogicSingleton global accessible in mashlib\nconst solidLogicSingleton = getOrCreateSingleton()\n\nexport { solidLogicSingleton }"],"mappings":"yKAMA,IAAMO,EAAS,MAAO,EAAK,IAAgB,CACvC,IAAMC,EAAYC,GAAeA,EAAY,aAAeA,EAAY,aAAe,OACjFC,EAAaV,EAAAA,YAOnB,GAHqBC,GAAAA,0BAA0BS,CAAU,IAElDA,GAAY,MAAM,OAASA,GAAY,QAC1B,CAACF,EAAW,CAE5B,IAAMG,EAAsB,OAAOD,EAAW,WAAc,WACtDA,EAAW,UAAU,KAAKA,CAAU,EACnC,OAAOA,EAAW,OAAU,WAAaA,EAAW,MAAM,KAAKA,CAAU,EAAI,KAIpF,OAHIC,EACOA,EAAmBC,EAAKH,CAAW,EAEvC,OAAO,MAAMG,EAAKH,CAAW,CACxC,CACI,OAAO,OAAO,MAAMG,EAAKH,CAAW,CAE5C,EAGMI,EAAmB,OAAO,IAAI,uBAAuB,EAOrDC,EAAgB,OAAO,OAAW,IAAc,OAAS,OAE/D,SAASC,GAAmC,CAQxC,OAPKD,EAAaD,GAKdV,EAAA,IAAU,uDAAuD,GAJjEA,EAAA,IAAU,qDAAqD,EAC/D,EAAaU,GAAoBX,EAAAA,iBAAiB,CAAE,MAAOK,CAAO,EAAGP,EAAAA,WAAW,EAChFG,EAAA,IAAU,+BAA+B,GAItCW,EAAaD,EACxB,CAEA,IAAMG,EAAsBD,EAAqB"}
|
|
@@ -6,7 +6,7 @@ import { createSolidLogic as r } from "./solidLogic.esm.js";
|
|
|
6
6
|
var i = async (e, r) => {
|
|
7
7
|
let i = r && r.credentials && r.credentials == "omit", a = n;
|
|
8
8
|
if (!t(a) && (a?.info?.webId || a?.webId) && !i) {
|
|
9
|
-
let t = typeof a.
|
|
9
|
+
let t = typeof a.authFetch == "function" ? a.authFetch.bind(a) : typeof a.fetch == "function" ? a.fetch.bind(a) : null;
|
|
10
10
|
return t ? t(e, r) : window.fetch(e, r);
|
|
11
11
|
}
|
|
12
12
|
return window.fetch(e, r);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"solidLogicSingleton.esm.js","names":[],"sources":["../../src/logic/solidLogicSingleton.ts"],"sourcesContent":["import * as debug from '../util/debug'\nimport { authSession } from '../authSession/authSession'\nimport { sessionExplicitlyInactive } from '../authSession/identityState'\nimport { createSolidLogic } from './solidLogic'\nimport { SolidLogic } from '../types'\n\nconst _fetch = async (url, requestInit) => {\n const omitCreds = requestInit && requestInit.credentials && requestInit.credentials == 'omit'\n const sessionAny = authSession as any\n // A session that explicitly reports itself inactive must not keep\n // identifying the last user: with a retained WebID, choosing the\n // authenticated fetch would send the previous identity's credentials.\n const sessionWebId = sessionExplicitlyInactive(sessionAny)\n ? undefined\n : (sessionAny?.info?.webId || sessionAny?.webId)\n if (sessionWebId && !omitCreds) { // see https://github.com/solidos/solidos/issues/114\n // In fact fetch should respect credentials omit itself\n const authenticatedFetch = (typeof sessionAny.
|
|
1
|
+
{"version":3,"file":"solidLogicSingleton.esm.js","names":["_fetch","omitCreds","requestInit","sessionAny","authSession","authenticatedFetch","url","SINGLETON_SYMBOL","globalTarget","getOrCreateSingleton","log","createSolidLogic","solidLogicSingleton"],"sources":["../../src/logic/solidLogicSingleton.ts"],"sourcesContent":["import * as debug from '../util/debug'\nimport { authSession } from '../authSession/authSession'\nimport { sessionExplicitlyInactive } from '../authSession/identityState'\nimport { createSolidLogic } from './solidLogic'\nimport { SolidLogic } from '../types'\n\nconst _fetch = async (url, requestInit) => {\n const omitCreds = requestInit && requestInit.credentials && requestInit.credentials == 'omit'\n const sessionAny = authSession as any\n // A session that explicitly reports itself inactive must not keep\n // identifying the last user: with a retained WebID, choosing the\n // authenticated fetch would send the previous identity's credentials.\n const sessionWebId = sessionExplicitlyInactive(sessionAny)\n ? undefined\n : (sessionAny?.info?.webId || sessionAny?.webId)\n if (sessionWebId && !omitCreds) { // see https://github.com/solidos/solidos/issues/114\n // In fact fetch should respect credentials omit itself\n const authenticatedFetch = (typeof sessionAny.authFetch === 'function')\n ? sessionAny.authFetch.bind(sessionAny)\n : (typeof sessionAny.fetch === 'function' ? sessionAny.fetch.bind(sessionAny) : null)\n if (authenticatedFetch) {\n return authenticatedFetch(url, requestInit)\n }\n return window.fetch(url, requestInit)\n } else {\n return window.fetch(url, requestInit)\n }\n}\n\n// Global singleton pattern to ensure unique store across library versions\nconst SINGLETON_SYMBOL = Symbol.for('solid-logic-singleton')\n\n// Type the global object properly with the singleton\ninterface GlobalWithSingleton {\n [SINGLETON_SYMBOL]?: SolidLogic\n}\n\nconst globalTarget = (typeof window !== 'undefined' ? window : global) as GlobalWithSingleton\n\nfunction getOrCreateSingleton(): SolidLogic {\n if (!globalTarget[SINGLETON_SYMBOL]) {\n debug.log('SolidLogic: Creating new global singleton instance.')\n globalTarget[SINGLETON_SYMBOL] = createSolidLogic({ fetch: _fetch }, authSession)\n debug.log('Unique quadstore initialized.')\n } else {\n debug.log('SolidLogic: Using existing global singleton instance.')\n }\n return globalTarget[SINGLETON_SYMBOL]!\n}\n//this const makes solidLogicSingleton global accessible in mashlib\nconst solidLogicSingleton = getOrCreateSingleton()\n\nexport { solidLogicSingleton }"],"mappings":";;;;;AAMA,IAAMA,IAAS,OAAO,GAAK,MAAgB;CACvC,IAAMC,IAAYC,KAAeA,EAAY,eAAeA,EAAY,eAAe,QACjFC,IAAaC;CAOnB,IAHqB,GAA0BD,CAAU,MAElDA,GAAY,MAAM,SAASA,GAAY,UAC1B,CAACF,GAAW;EAE5B,IAAMI,IAAsB,OAAOF,EAAW,aAAc,aACtDA,EAAW,UAAU,KAAKA,CAAU,IACnC,OAAOA,EAAW,SAAU,aAAaA,EAAW,MAAM,KAAKA,CAAU,IAAI;EAIpF,OAHIE,IACOA,EAAmBC,GAAKJ,CAAW,IAEvC,OAAO,MAAMI,GAAKJ,CAAW;CACxC;CACI,OAAO,OAAO,MAAMI,GAAKJ,CAAW;AAE5C,GAGMK,IAAmB,OAAO,IAAI,uBAAuB,GAOrDC,IAAgB,OAAO,SAAW,MAAc,SAAS;AAE/D,SAASC,IAAmC;CAQxC,OAPKD,EAAaD,KAKdG,EAAU,uDAAuD,KAJjEA,EAAU,qDAAqD,GAC/D,EAAaH,KAAoBI,EAAiB,EAAE,OAAOX,EAAO,GAAGI,CAAW,GAChFM,EAAU,+BAA+B,IAItCF,EAAaD;AACxB;AAEA,IAAMK,IAAsBH,EAAqB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"profileAclDocuments.cjs.js","names":[],"sources":["../../src/profile/profileAclDocuments.ts"],"sourcesContent":["export function ownerOnlyContainerAclDocument(webId: string): string {\n return [\n '@prefix acl: <http://www.w3.org/ns/auth/acl#>.',\n '',\n '<#owner>',\n 'a acl:Authorization;',\n `acl:agent <${webId}>;`,\n 'acl:accessTo <./>;',\n 'acl:default <./>;',\n 'acl:mode acl:Read, acl:Write, acl:Control.'\n ].join('\\n')\n}\n"],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"profileAclDocuments.cjs.js","names":["ownerOnlyContainerAclDocument","webId"],"sources":["../../src/profile/profileAclDocuments.ts"],"sourcesContent":["export function ownerOnlyContainerAclDocument(webId: string): string {\n return [\n '@prefix acl: <http://www.w3.org/ns/auth/acl#>.',\n '',\n '<#owner>',\n 'a acl:Authorization;',\n `acl:agent <${webId}>;`,\n 'acl:accessTo <./>;',\n 'acl:default <./>;',\n 'acl:mode acl:Read, acl:Write, acl:Control.'\n ].join('\\n')\n}\n"],"mappings":"AAAA,SAAgBA,EAA8B,EAAuB,CACjE,MAAO,CACH,iDACA,GACA,WACA,uBACA,cAAcC,EAAM,IACpB,qBACA,oBACA,4CACJ,CAAC,CAAC,KAAK;CAAI,CACf"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"profileAclDocuments.esm.js","names":[],"sources":["../../src/profile/profileAclDocuments.ts"],"sourcesContent":["export function ownerOnlyContainerAclDocument(webId: string): string {\n return [\n '@prefix acl: <http://www.w3.org/ns/auth/acl#>.',\n '',\n '<#owner>',\n 'a acl:Authorization;',\n `acl:agent <${webId}>;`,\n 'acl:accessTo <./>;',\n 'acl:default <./>;',\n 'acl:mode acl:Read, acl:Write, acl:Control.'\n ].join('\\n')\n}\n"],"mappings":";AAAA,
|
|
1
|
+
{"version":3,"file":"profileAclDocuments.esm.js","names":["ownerOnlyContainerAclDocument","webId"],"sources":["../../src/profile/profileAclDocuments.ts"],"sourcesContent":["export function ownerOnlyContainerAclDocument(webId: string): string {\n return [\n '@prefix acl: <http://www.w3.org/ns/auth/acl#>.',\n '',\n '<#owner>',\n 'a acl:Authorization;',\n `acl:agent <${webId}>;`,\n 'acl:accessTo <./>;',\n 'acl:default <./>;',\n 'acl:mode acl:Read, acl:Write, acl:Control.'\n ].join('\\n')\n}\n"],"mappings":";AAAA,SAAgBA,EAA8B,GAAuB;CACjE,OAAO;EACH;EACA;EACA;EACA;EACA,cAAcC,EAAM;EACpB;EACA;EACA;CACJ,CAAC,CAAC,KAAK,IAAI;AACf"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"profileDocuments.cjs.js","names":[],"sources":["../../src/profile/profileDocuments.ts"],"sourcesContent":["export function preferencesFileDocument(): string {\n return [\n '@prefix dct: <http://purl.org/dc/terms/>.',\n '@prefix pim: <http://www.w3.org/ns/pim/space#>.',\n '@prefix solid: <http://www.w3.org/ns/solid/terms#>.',\n '<>',\n ' a pim:ConfigurationFile ;',\n ' dct:title \"Preferences file\".'\n ].join('\\n')\n}\n"],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"profileDocuments.cjs.js","names":["preferencesFileDocument"],"sources":["../../src/profile/profileDocuments.ts"],"sourcesContent":["export function preferencesFileDocument(): string {\n return [\n '@prefix dct: <http://purl.org/dc/terms/>.',\n '@prefix pim: <http://www.w3.org/ns/pim/space#>.',\n '@prefix solid: <http://www.w3.org/ns/solid/terms#>.',\n '<>',\n ' a pim:ConfigurationFile ;',\n ' dct:title \"Preferences file\".'\n ].join('\\n')\n}\n"],"mappings":"AAAA,SAAgBA,GAAkC,CAC9C,MAAO,CACH,4CACA,kDACA,sDACA,KACA,gCACA,mCACJ,CAAC,CAAC,KAAK;CAAI,CACf"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"profileDocuments.esm.js","names":[],"sources":["../../src/profile/profileDocuments.ts"],"sourcesContent":["export function preferencesFileDocument(): string {\n return [\n '@prefix dct: <http://purl.org/dc/terms/>.',\n '@prefix pim: <http://www.w3.org/ns/pim/space#>.',\n '@prefix solid: <http://www.w3.org/ns/solid/terms#>.',\n '<>',\n ' a pim:ConfigurationFile ;',\n ' dct:title \"Preferences file\".'\n ].join('\\n')\n}\n"],"mappings":";AAAA,
|
|
1
|
+
{"version":3,"file":"profileDocuments.esm.js","names":["preferencesFileDocument"],"sources":["../../src/profile/profileDocuments.ts"],"sourcesContent":["export function preferencesFileDocument(): string {\n return [\n '@prefix dct: <http://purl.org/dc/terms/>.',\n '@prefix pim: <http://www.w3.org/ns/pim/space#>.',\n '@prefix solid: <http://www.w3.org/ns/solid/terms#>.',\n '<>',\n ' a pim:ConfigurationFile ;',\n ' dct:title \"Preferences file\".'\n ].join('\\n')\n}\n"],"mappings":";AAAA,SAAgBA,IAAkC;CAC9C,OAAO;EACH;EACA;EACA;EACA;EACA;EACA;CACJ,CAAC,CAAC,KAAK,IAAI;AACf"}
|