solid-ui 2.4.27-5e3807fa → 2.4.27-62cefbe0
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/README.md +1 -6
- package/dist/805.solid-ui.min.js +1 -1
- package/dist/805.solid-ui.min.js.map +1 -1
- package/dist/solid-ui.js +2933 -5867
- package/dist/solid-ui.js.map +1 -1
- package/dist/solid-ui.min.js +1 -1
- package/dist/solid-ui.min.js.LICENSE.txt +0 -4
- package/dist/solid-ui.min.js.map +1 -1
- package/dist/vendors-node_modules_jsonld_lib_jsonld_js.solid-ui.js +1938 -1938
- package/dist/vendors-node_modules_jsonld_lib_jsonld_js.solid-ui.js.map +1 -1
- package/lib/chat/bookmarks.js +6 -7
- package/lib/chat/bookmarks.js.map +1 -1
- package/lib/chat/chatLogic.js +248 -103
- package/lib/chat/chatLogic.js.map +1 -1
- package/lib/chat/dateFolder.js +129 -126
- package/lib/chat/dateFolder.js.map +1 -1
- package/lib/chat/infinite.js +630 -423
- package/lib/chat/infinite.js.map +1 -1
- package/lib/chat/message.js +289 -193
- package/lib/chat/message.js.map +1 -1
- package/lib/chat/messageTools.js +463 -277
- package/lib/chat/messageTools.js.map +1 -1
- package/lib/chat/thread.js +168 -145
- package/lib/chat/thread.js.map +1 -1
- package/lib/header/index.js +5 -0
- package/lib/header/index.js.map +1 -1
- package/lib/log.js +5 -5
- package/lib/log.js.map +1 -1
- package/lib/login/login.js +24 -1
- package/lib/login/login.js.map +1 -1
- package/lib/pad.js +4 -1
- package/lib/pad.js.map +1 -1
- package/lib/participation.js +2 -1
- package/lib/participation.js.map +1 -1
- package/lib/preferences.js +4 -0
- package/lib/preferences.js.map +1 -1
- package/lib/utils/headerFooterHelpers.js +2 -0
- package/lib/utils/headerFooterHelpers.js.map +1 -1
- package/lib/versionInfo.js +2 -2
- package/lib/versionInfo.js.map +1 -1
- package/lib/widgets/buttons.js +0 -2
- package/lib/widgets/buttons.js.map +1 -1
- package/lib/widgets/forms/autocomplete/autocompleteBar.js +8 -1
- package/lib/widgets/forms/autocomplete/autocompleteBar.js.map +1 -1
- package/lib/widgets/forms/autocomplete/autocompletePicker.js +8 -3
- package/lib/widgets/forms/autocomplete/autocompletePicker.js.map +1 -1
- package/lib/widgets/forms/autocomplete/language.js +5 -0
- package/lib/widgets/forms/autocomplete/language.js.map +1 -1
- package/lib/widgets/forms.js +4 -1
- package/lib/widgets/forms.js.map +1 -1
- package/lib/widgets/peoplePicker.js +11 -0
- package/lib/widgets/peoplePicker.js.map +1 -1
- package/package.json +3 -5
- package/lib/chat/keys.d.ts +0 -13
- package/lib/chat/keys.d.ts.map +0 -1
- package/lib/chat/keys.js +0 -223
- package/lib/chat/keys.js.map +0 -1
- package/lib/chat/signature.d.ts +0 -25
- package/lib/chat/signature.d.ts.map +0 -1
- package/lib/chat/signature.js +0 -113
- package/lib/chat/signature.js.map +0 -1
- package/lib/utils/keyHelpers/accessData.d.ts +0 -10
- package/lib/utils/keyHelpers/accessData.d.ts.map +0 -1
- package/lib/utils/keyHelpers/accessData.js +0 -226
- package/lib/utils/keyHelpers/accessData.js.map +0 -1
- package/lib/utils/keyHelpers/acl.d.ts +0 -20
- package/lib/utils/keyHelpers/acl.d.ts.map +0 -1
- package/lib/utils/keyHelpers/acl.js +0 -101
- package/lib/utils/keyHelpers/acl.js.map +0 -1
|
@@ -19,6 +19,17 @@ var _iconBase = require("../iconBase");
|
|
|
19
19
|
var ns = _interopRequireWildcard(require("../ns"));
|
|
20
20
|
var _solidLogic = require("solid-logic");
|
|
21
21
|
var _templateObject;
|
|
22
|
+
/**
|
|
23
|
+
*
|
|
24
|
+
* People Picker Pane
|
|
25
|
+
*
|
|
26
|
+
* This pane offers a mechanism for selecting a set of individuals, groups, or
|
|
27
|
+
* organizations to take some action on.
|
|
28
|
+
*
|
|
29
|
+
* Assumptions
|
|
30
|
+
* - Assumes that the user has a type index entry for vcard:AddressBook. @@ bad assuption
|
|
31
|
+
*
|
|
32
|
+
*/
|
|
22
33
|
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
23
34
|
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
24
35
|
var kb = _solidLogic.solidLogicSingleton.store;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"peoplePicker.js","names":["_escapeHtml","_interopRequireDefault","require","_uuid","rdf","_interopRequireWildcard","debug","_dragAndDrop","_error","_iconBase","ns","_solidLogic","_templateObject","_getRequireWildcardCache","nodeInterop","WeakMap","cacheBabelInterop","cacheNodeInterop","obj","__esModule","_typeof","cache","has","get","newObj","hasPropertyDescriptor","Object","defineProperty","getOwnPropertyDescriptor","key","prototype","hasOwnProperty","call","desc","set","kb","solidLogicSingleton","store","PeoplePicker","element","typeIndex","groupPickedCb","options","_classCallCheck2","selectedgroup","onSelectGroup","bind","_createClass2","value","render","_this","container","document","createElement","style","maxWidth","minHeight","outline","display","flexDirection","selectedGroup","Group","changeGroupButton","textContent","escape","addEventListener","_event","appendChild","findAddressBook","then","_ref","book","chooseExistingGroupButton","margin","GroupPicker","createNewGroupButton","createNewGroup","defaultNewGroupName","_ref2","group","GroupBuilder","errorBody","errorMessageBlock","concat","innerHTML","err","Promise","resolve","reject","fetcher","nowOrWhenFetched","ok","bookRegistration","any","solid","vcard","Error","load","_xhr","_indexes","indexes","groupIndex","groupContainer","sym","uri","uuid","v4","slice","name","patchPromises","doc","map","typeStatement","st","nameStatement","includesGroupStatement","toIns","equals","patch","forEach","add","all","log","xhr","responseURL","exports","_this2","loadGroups","groups","groupButton","handleClickGroup","_this3","_indexes2","each","_this4","getWithDefault","doneBuildingCb","groupChangedCb","onGroupChanged","changeType","agent","refresh","_this5","dropContainer","makeDropTarget","uris","groupNameInput","type","event","setGroupName","target","groupNameLabel","match","statement","webIdNode","object","personDiv","Person","handleRemove","copy","_taggedTemplateLiteral2","doneBuildingButton","webId","_this6","namedNode","rdfClass","foaf","holdsStatement","why","_this7","toDel","remove","errorMessage","_this8","_indexes3","updatePromises","namedGraph","oldNameStatements","newNameStatement","literal","_solidResponse","removeStatements","_this9","imgSrc","iconBase","profileImg","src","width","height","nameSpan","flexGrow","removeButton","subject","predicate","defaultValue","url","_ref3","updater","update","success","dir"],"sources":["../../src/widgets/peoplePicker.js"],"sourcesContent":["/**\n *\n * People Picker Pane\n *\n * This pane offers a mechanism for selecting a set of individuals, groups, or\n * organizations to take some action on.\n *\n * Assumptions\n * - Assumes that the user has a type index entry for vcard:AddressBook. @@ bad assuption\n *\n */\nimport escape from 'escape-html'\nimport uuid from 'uuid'\nimport * as rdf from 'rdflib'\nimport * as debug from '../debug'\n\nimport { makeDropTarget } from './dragAndDrop'\nimport { errorMessageBlock } from './error'\nimport { iconBase } from '../iconBase'\nimport * as ns from '../ns'\nimport { solidLogicSingleton } from 'solid-logic'\n\nconst kb = solidLogicSingleton.store\n\nexport class PeoplePicker {\n constructor (element, typeIndex, groupPickedCb, options) { // @@ can't expect typeindex to be passed\n this.options = options || {}\n this.element = element\n this.typeIndex = typeIndex\n this.groupPickedCb = groupPickedCb\n this.selectedgroup = this.options.selectedgroup // current selected group if any\n this.onSelectGroup = this.onSelectGroup.bind(this)\n }\n\n render () {\n const container = document.createElement('div')\n container.style.maxWidth = '350px'\n container.style.minHeight = '200px'\n container.style.outline = '1px solid black'\n container.style.display = 'flex'\n\n if (this.selectedgroup) {\n container.style.flexDirection = 'column'\n const selectedGroup = document.createElement('div')\n new Group(selectedGroup, this.selectedgroup).render()\n const changeGroupButton = document.createElement('button')\n changeGroupButton.textContent = escape('Change group')\n changeGroupButton.addEventListener('click', _event => {\n this.selectedgroup = null\n this.render()\n })\n container.appendChild(selectedGroup)\n container.appendChild(changeGroupButton)\n } else {\n this.findAddressBook(this.typeIndex)\n .then(({ book }) => {\n const chooseExistingGroupButton = document.createElement('button')\n chooseExistingGroupButton.textContent = escape(\n 'Pick an existing group'\n )\n chooseExistingGroupButton.style.margin = 'auto'\n chooseExistingGroupButton.addEventListener('click', _event => {\n new GroupPicker(container, book, this.onSelectGroup).render()\n })\n\n const createNewGroupButton = document.createElement('button')\n createNewGroupButton.textContent = escape('Create a new group')\n createNewGroupButton.style.margin = 'auto'\n createNewGroupButton.addEventListener('click', _event => {\n this.createNewGroup(book, this.options.defaultNewGroupName)\n .then(({ group }) => {\n new GroupBuilder(\n this.element,\n book,\n group,\n this.onSelectGroup\n ).render()\n })\n .catch(errorBody => {\n this.element.appendChild(\n errorMessageBlock(\n document,\n escape(`Error creating a new group. (${errorBody})`)\n )\n )\n })\n })\n\n container.appendChild(chooseExistingGroupButton)\n container.appendChild(createNewGroupButton)\n\n this.element.innerHTML = ''\n this.element.appendChild(container)\n })\n .catch(err => {\n this.element.appendChild(\n errorMessageBlock(\n document,\n escape(`Could find your groups. (${err})`)\n )\n )\n })\n }\n\n this.element.innerHTML = ''\n this.element.appendChild(container)\n return this\n }\n\n findAddressBook (typeIndex) {\n return new Promise((resolve, reject) => {\n kb.fetcher.nowOrWhenFetched(typeIndex, (ok, err) => {\n if (!ok) {\n return reject(err)\n }\n const bookRegistration = kb.any(\n null,\n ns.solid('forClass'),\n ns.vcard('AddressBook')\n )\n if (!bookRegistration) {\n return reject(\n new Error(\n 'no address book registered in the solid type index ' + typeIndex\n )\n )\n }\n const book = kb.any(bookRegistration, ns.solid('instance'))\n if (!book) {\n return reject(new Error('incomplete address book registration'))\n }\n kb.fetcher\n .load(book)\n .then(function (_xhr) {\n return resolve({ book })\n })\n .catch(function (err) {\n return reject(new Error('Could not load address book ' + err))\n })\n })\n })\n }\n\n createNewGroup (book, defaultNewGroupName) {\n const { groupIndex, groupContainer } = indexes(book)\n const group = rdf.sym(\n `${groupContainer.uri}${uuid.v4().slice(0, 8)}.ttl#this`\n )\n const name = defaultNewGroupName || 'Untitled Group'\n\n // NOTE that order matters here. Unfortunately this type of update is\n // non-atomic in that solid requires us to send two PATCHes, either of which\n // might fail.\n const patchPromises = [group.doc(), groupIndex].map(doc => {\n const typeStatement = rdf.st(group, ns.rdf('type'), ns.vcard('Group'), doc)\n const nameStatement = rdf.st(group, ns.vcard('fn'), name, group.doc(), doc)\n const includesGroupStatement = rdf.st(\n book,\n ns.vcard('includesGroup'),\n group,\n doc\n )\n const toIns = doc.equals(groupIndex)\n ? [typeStatement, nameStatement, includesGroupStatement]\n : [typeStatement, nameStatement]\n return patch(doc.uri, { toIns }).then(() => {\n toIns.forEach(st => {\n kb.add(st)\n })\n })\n })\n return Promise.all(patchPromises)\n .then(() => ({ group }))\n .catch(err => {\n debug.log('Could not create new group. PATCH failed ' + err)\n throw new Error(\n `Couldn't create new group. PATCH failed for (${\n err.xhr ? err.xhr.responseURL : ''\n } )`\n )\n })\n }\n\n onSelectGroup (group) {\n this.selectedgroup = group\n this.groupPickedCb(group)\n this.render()\n }\n}\n\nexport class GroupPicker {\n constructor (element, book, onSelectGroup) {\n this.element = element\n this.book = book\n this.onSelectGroup = onSelectGroup\n }\n\n render () {\n this.loadGroups()\n .then(groups => {\n // render the groups\n const container = document.createElement('div')\n container.style.display = 'flex'\n container.style.flexDirection = 'column'\n groups.forEach(group => {\n const groupButton = document.createElement('button')\n groupButton.addEventListener('click', this.handleClickGroup(group))\n new Group(groupButton, group).render()\n container.appendChild(groupButton)\n })\n this.element.innerHTML = ''\n this.element.appendChild(container)\n })\n .catch(err => {\n this.element.appendChild(\n errorMessageBlock(\n document,\n escape(`There was an error loading your groups. (${err})`)\n )\n )\n })\n return this\n }\n\n loadGroups () {\n return new Promise((resolve, reject) => {\n const { groupIndex } = indexes(this.book)\n kb.fetcher.nowOrWhenFetched(groupIndex, (ok, err) => {\n if (!ok) {\n return reject(err)\n }\n const groups = kb.each(this.book, ns.vcard('includesGroup'))\n return resolve(groups)\n })\n })\n }\n\n handleClickGroup (group) {\n return _event => {\n this.onSelectGroup(group)\n }\n }\n}\n\nexport class Group {\n constructor (element, group) {\n this.element = element\n this.group = group\n }\n\n render () {\n const container = document.createElement('div')\n container.textContent = escape(\n // @@@@@ need to escape??\n getWithDefault(this.group, ns.vcard('fn'), `[${this.group.value}]`)\n )\n this.element.innerHTML = ''\n this.element.appendChild(container)\n return this\n }\n}\n\nexport class GroupBuilder {\n constructor (element, book, group, doneBuildingCb, groupChangedCb) {\n this.element = element\n this.book = book\n this.group = group\n this.onGroupChanged = (err, changeType, agent) => {\n if (groupChangedCb) {\n groupChangedCb(err, changeType, agent)\n }\n }\n this.groupChangedCb = groupChangedCb\n this.doneBuildingCb = doneBuildingCb\n }\n\n refresh () {\n // TODO: implement\n }\n\n render () {\n const dropContainer = document.createElement('div')\n dropContainer.style.maxWidth = '350px'\n dropContainer.style.minHeight = '200px'\n dropContainer.style.outline = '1px solid black'\n dropContainer.style.display = 'flex'\n dropContainer.style.flexDirection = 'column'\n\n makeDropTarget(dropContainer, uris => {\n uris.forEach(uri => {\n this.add(uri).catch(err => {\n this.element.appendChild(\n errorMessageBlock(\n document,\n escape(`Could not add the given WebId. (${err})`)\n )\n )\n })\n })\n })\n\n const groupNameInput = document.createElement('input')\n groupNameInput.type = 'text'\n groupNameInput.value = getWithDefault(\n this.group,\n ns.vcard('fn'),\n 'Untitled Group'\n )\n groupNameInput.addEventListener('change', event => {\n this.setGroupName(event.target.value).catch(err => {\n this.element.appendChild(\n errorMessageBlock(document, `Error changing group name. (${err})`)\n )\n })\n })\n const groupNameLabel = document.createElement('label')\n groupNameLabel.textContent = escape('Group Name:')\n groupNameLabel.appendChild(groupNameInput)\n dropContainer.appendChild(groupNameLabel)\n\n if (kb.any(this.group, ns.vcard('hasMember'))) {\n kb.match(this.group, ns.vcard('hasMember')).forEach(statement => {\n const webIdNode = statement.object\n const personDiv = document.createElement('div')\n new Person(personDiv, webIdNode, this.handleRemove(webIdNode)).render()\n dropContainer.appendChild(personDiv)\n })\n } else {\n const copy = document.createElement('p')\n copy.textContent = escape`\n To add someone to this group, drag and drop their WebID URL onto the box.\n `\n dropContainer.appendChild(copy)\n }\n\n const doneBuildingButton = document.createElement('button')\n doneBuildingButton.textContent = escape('Done')\n doneBuildingButton.addEventListener('click', _event => {\n this.doneBuildingCb(this.group)\n })\n dropContainer.appendChild(doneBuildingButton)\n\n this.element.innerHTML = ''\n this.element.appendChild(dropContainer)\n return this\n }\n\n add (webId) {\n return new Promise((resolve, reject) => {\n kb.fetcher.nowOrWhenFetched(webId, (ok, err) => {\n if (!ok) {\n this.onGroupChanged(err)\n return reject(err)\n }\n // make sure it's a valid person, group, or entity (for now just handle\n // webId)\n const webIdNode = rdf.namedNode(webId)\n const rdfClass = kb.any(webIdNode, ns.rdf('type'))\n if (!rdfClass || !rdfClass.equals(ns.foaf('Person'))) {\n return reject(\n new Error(\n `Only people supported right now. (tried to add something of type ${rdfClass.value})`\n )\n )\n }\n return resolve(webIdNode)\n })\n }).then(webIdNode => {\n const statement = rdf.st(this.group, ns.vcard('hasMember'), webIdNode)\n if (kb.holdsStatement(statement)) {\n return webIdNode\n }\n return patch(this.group.doc().uri, { toIns: [statement] }).then(() => {\n statement.why = this.group.doc()\n kb.add(statement)\n this.onGroupChanged(null, 'added', webIdNode)\n this.render()\n })\n })\n }\n\n handleRemove (webIdNode) {\n return _event => {\n const statement = rdf.st(this.group, ns.vcard('hasMember'), webIdNode)\n return patch(this.group.doc().uri, { toDel: [statement] })\n .then(() => {\n kb.remove(statement)\n this.onGroupChanged(null, 'removed', webIdNode)\n this.render()\n return true\n })\n .catch(err => {\n const name = kb.any(webIdNode, ns.foaf('name'))\n const errorMessage =\n name && name.value\n ? `Could not remove ${name.value}. (${err})`\n : `Could not remove ${webIdNode.value}. (${err})`\n throw new Error(errorMessage)\n })\n }\n }\n\n setGroupName (name) {\n const { groupIndex } = indexes(this.book)\n const updatePromises = [this.group.doc(), groupIndex].map(namedGraph => {\n const oldNameStatements = kb.match(\n this.group,\n ns.vcard('fn'),\n null,\n namedGraph\n )\n const newNameStatement = rdf.st(\n this.group,\n ns.vcard('fn'),\n rdf.literal(name)\n )\n return patch(namedGraph.value, {\n toDel: oldNameStatements,\n toIns: [newNameStatement]\n }).then(_solidResponse => {\n kb.removeStatements(oldNameStatements)\n newNameStatement.why = namedGraph\n kb.add(newNameStatement)\n })\n })\n return Promise.all(updatePromises)\n }\n}\n// @ignore exporting this only for the unit test\n// @@ TODO maybe I should move this down at end, but for\n// now I will leave it where it was\nexport class Person {\n constructor (element, webIdNode, handleRemove) {\n this.webIdNode = webIdNode\n this.element = element\n this.handleRemove = handleRemove\n }\n\n render () {\n const container = document.createElement('div')\n container.style.display = 'flex'\n\n // TODO: take a look at UI.widgets.setName\n const imgSrc = getWithDefault(\n this.webIdNode,\n ns.foaf('img'),\n iconBase + 'noun_15059.svg'\n )\n const profileImg = document.createElement('img')\n profileImg.src = escape(imgSrc)\n profileImg.width = '50'\n profileImg.height = '50'\n profileImg.style.margin = '5px'\n\n // TODO: take a look at UI.widgets.setImage\n const name = getWithDefault(\n this.webIdNode,\n ns.foaf('name'),\n `[${this.webIdNode}]`\n )\n const nameSpan = document.createElement('span')\n nameSpan.innerHTML = escape(name)\n nameSpan.style.flexGrow = '1'\n nameSpan.style.margin = 'auto 0'\n\n const removeButton = document.createElement('button')\n removeButton.textContent = 'Remove'\n removeButton.addEventListener('click', _event =>\n this.handleRemove().catch(err => {\n this.element.appendChild(errorMessageBlock(document, escape(`${err}`)))\n })\n )\n removeButton.style.margin = '5px'\n\n container.appendChild(profileImg)\n container.appendChild(nameSpan)\n container.appendChild(removeButton)\n\n this.element.innerHTML = ''\n this.element.appendChild(container)\n return this\n }\n}\n\nfunction getWithDefault (subject, predicate, defaultValue) {\n const object = kb.any(subject, predicate)\n return object ? object.value : defaultValue\n}\n\nfunction patch (url, { toDel, toIns }) {\n return new Promise((resolve, reject) => {\n kb.updater.update(toDel, toIns, (uri, success, errorMessage) => {\n if (!success) {\n return reject(\n new Error(`PATCH failed for resource <${uri}>: ${errorMessage}`)\n )\n }\n resolve()\n })\n })\n // return webClient.patch(url, toDel, toIns)\n // .then(solidResponse => {\n // const status = solidResponse.xhr.status\n // if (status < 200 || status >= 400) {\n // const err = new Error(`PATCH failed for resource <${solidResponse.url}>`)\n // err.solidResponse = solidResponse\n // throw err\n // }\n // })\n}\n\nfunction indexes (book) {\n return {\n // bookIndex: book,\n groupIndex: kb.any(book, ns.vcard('groupIndex')),\n groupContainer: kb.sym(book.dir().uri + 'Group/')\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"peoplePicker.js","names":["_escapeHtml","_interopRequireDefault","require","_uuid","rdf","_interopRequireWildcard","debug","_dragAndDrop","_error","_iconBase","ns","_solidLogic","_templateObject","_getRequireWildcardCache","nodeInterop","WeakMap","cacheBabelInterop","cacheNodeInterop","obj","__esModule","_typeof","cache","has","get","newObj","hasPropertyDescriptor","Object","defineProperty","getOwnPropertyDescriptor","key","prototype","hasOwnProperty","call","desc","set","kb","solidLogicSingleton","store","PeoplePicker","element","typeIndex","groupPickedCb","options","_classCallCheck2","selectedgroup","onSelectGroup","bind","_createClass2","value","render","_this","container","document","createElement","style","maxWidth","minHeight","outline","display","flexDirection","selectedGroup","Group","changeGroupButton","textContent","escape","addEventListener","_event","appendChild","findAddressBook","then","_ref","book","chooseExistingGroupButton","margin","GroupPicker","createNewGroupButton","createNewGroup","defaultNewGroupName","_ref2","group","GroupBuilder","errorBody","errorMessageBlock","concat","innerHTML","err","Promise","resolve","reject","fetcher","nowOrWhenFetched","ok","bookRegistration","any","solid","vcard","Error","load","_xhr","_indexes","indexes","groupIndex","groupContainer","sym","uri","uuid","v4","slice","name","patchPromises","doc","map","typeStatement","st","nameStatement","includesGroupStatement","toIns","equals","patch","forEach","add","all","log","xhr","responseURL","exports","_this2","loadGroups","groups","groupButton","handleClickGroup","_this3","_indexes2","each","_this4","getWithDefault","doneBuildingCb","groupChangedCb","onGroupChanged","changeType","agent","refresh","_this5","dropContainer","makeDropTarget","uris","groupNameInput","type","event","setGroupName","target","groupNameLabel","match","statement","webIdNode","object","personDiv","Person","handleRemove","copy","_taggedTemplateLiteral2","doneBuildingButton","webId","_this6","namedNode","rdfClass","foaf","holdsStatement","why","_this7","toDel","remove","errorMessage","_this8","_indexes3","updatePromises","namedGraph","oldNameStatements","newNameStatement","literal","_solidResponse","removeStatements","_this9","imgSrc","iconBase","profileImg","src","width","height","nameSpan","flexGrow","removeButton","subject","predicate","defaultValue","url","_ref3","updater","update","success","dir"],"sources":["../../src/widgets/peoplePicker.js"],"sourcesContent":["/**\n *\n * People Picker Pane\n *\n * This pane offers a mechanism for selecting a set of individuals, groups, or\n * organizations to take some action on.\n *\n * Assumptions\n * - Assumes that the user has a type index entry for vcard:AddressBook. @@ bad assuption\n *\n */\nimport escape from 'escape-html'\nimport uuid from 'uuid'\nimport * as rdf from 'rdflib'\nimport * as debug from '../debug'\n\nimport { makeDropTarget } from './dragAndDrop'\nimport { errorMessageBlock } from './error'\nimport { iconBase } from '../iconBase'\nimport * as ns from '../ns'\nimport { solidLogicSingleton } from 'solid-logic'\n\nconst kb = solidLogicSingleton.store\n\nexport class PeoplePicker {\n constructor (element, typeIndex, groupPickedCb, options) { // @@ can't expect typeindex to be passed\n this.options = options || {}\n this.element = element\n this.typeIndex = typeIndex\n this.groupPickedCb = groupPickedCb\n this.selectedgroup = this.options.selectedgroup // current selected group if any\n this.onSelectGroup = this.onSelectGroup.bind(this)\n }\n\n render () {\n const container = document.createElement('div')\n container.style.maxWidth = '350px'\n container.style.minHeight = '200px'\n container.style.outline = '1px solid black'\n container.style.display = 'flex'\n\n if (this.selectedgroup) {\n container.style.flexDirection = 'column'\n const selectedGroup = document.createElement('div')\n new Group(selectedGroup, this.selectedgroup).render()\n const changeGroupButton = document.createElement('button')\n changeGroupButton.textContent = escape('Change group')\n changeGroupButton.addEventListener('click', _event => {\n this.selectedgroup = null\n this.render()\n })\n container.appendChild(selectedGroup)\n container.appendChild(changeGroupButton)\n } else {\n this.findAddressBook(this.typeIndex)\n .then(({ book }) => {\n const chooseExistingGroupButton = document.createElement('button')\n chooseExistingGroupButton.textContent = escape(\n 'Pick an existing group'\n )\n chooseExistingGroupButton.style.margin = 'auto'\n chooseExistingGroupButton.addEventListener('click', _event => {\n new GroupPicker(container, book, this.onSelectGroup).render()\n })\n\n const createNewGroupButton = document.createElement('button')\n createNewGroupButton.textContent = escape('Create a new group')\n createNewGroupButton.style.margin = 'auto'\n createNewGroupButton.addEventListener('click', _event => {\n this.createNewGroup(book, this.options.defaultNewGroupName)\n .then(({ group }) => {\n new GroupBuilder(\n this.element,\n book,\n group,\n this.onSelectGroup\n ).render()\n })\n .catch(errorBody => {\n this.element.appendChild(\n errorMessageBlock(\n document,\n escape(`Error creating a new group. (${errorBody})`)\n )\n )\n })\n })\n\n container.appendChild(chooseExistingGroupButton)\n container.appendChild(createNewGroupButton)\n\n this.element.innerHTML = ''\n this.element.appendChild(container)\n })\n .catch(err => {\n this.element.appendChild(\n errorMessageBlock(\n document,\n escape(`Could find your groups. (${err})`)\n )\n )\n })\n }\n\n this.element.innerHTML = ''\n this.element.appendChild(container)\n return this\n }\n\n findAddressBook (typeIndex) {\n return new Promise((resolve, reject) => {\n kb.fetcher.nowOrWhenFetched(typeIndex, (ok, err) => {\n if (!ok) {\n return reject(err)\n }\n const bookRegistration = kb.any(\n null,\n ns.solid('forClass'),\n ns.vcard('AddressBook')\n )\n if (!bookRegistration) {\n return reject(\n new Error(\n 'no address book registered in the solid type index ' + typeIndex\n )\n )\n }\n const book = kb.any(bookRegistration, ns.solid('instance'))\n if (!book) {\n return reject(new Error('incomplete address book registration'))\n }\n kb.fetcher\n .load(book)\n .then(function (_xhr) {\n return resolve({ book })\n })\n .catch(function (err) {\n return reject(new Error('Could not load address book ' + err))\n })\n })\n })\n }\n\n createNewGroup (book, defaultNewGroupName) {\n const { groupIndex, groupContainer } = indexes(book)\n const group = rdf.sym(\n `${groupContainer.uri}${uuid.v4().slice(0, 8)}.ttl#this`\n )\n const name = defaultNewGroupName || 'Untitled Group'\n\n // NOTE that order matters here. Unfortunately this type of update is\n // non-atomic in that solid requires us to send two PATCHes, either of which\n // might fail.\n const patchPromises = [group.doc(), groupIndex].map(doc => {\n const typeStatement = rdf.st(group, ns.rdf('type'), ns.vcard('Group'), doc)\n const nameStatement = rdf.st(group, ns.vcard('fn'), name, group.doc(), doc)\n const includesGroupStatement = rdf.st(\n book,\n ns.vcard('includesGroup'),\n group,\n doc\n )\n const toIns = doc.equals(groupIndex)\n ? [typeStatement, nameStatement, includesGroupStatement]\n : [typeStatement, nameStatement]\n return patch(doc.uri, { toIns }).then(() => {\n toIns.forEach(st => {\n kb.add(st)\n })\n })\n })\n return Promise.all(patchPromises)\n .then(() => ({ group }))\n .catch(err => {\n debug.log('Could not create new group. PATCH failed ' + err)\n throw new Error(\n `Couldn't create new group. PATCH failed for (${\n err.xhr ? err.xhr.responseURL : ''\n } )`\n )\n })\n }\n\n onSelectGroup (group) {\n this.selectedgroup = group\n this.groupPickedCb(group)\n this.render()\n }\n}\n\nexport class GroupPicker {\n constructor (element, book, onSelectGroup) {\n this.element = element\n this.book = book\n this.onSelectGroup = onSelectGroup\n }\n\n render () {\n this.loadGroups()\n .then(groups => {\n // render the groups\n const container = document.createElement('div')\n container.style.display = 'flex'\n container.style.flexDirection = 'column'\n groups.forEach(group => {\n const groupButton = document.createElement('button')\n groupButton.addEventListener('click', this.handleClickGroup(group))\n new Group(groupButton, group).render()\n container.appendChild(groupButton)\n })\n this.element.innerHTML = ''\n this.element.appendChild(container)\n })\n .catch(err => {\n this.element.appendChild(\n errorMessageBlock(\n document,\n escape(`There was an error loading your groups. (${err})`)\n )\n )\n })\n return this\n }\n\n loadGroups () {\n return new Promise((resolve, reject) => {\n const { groupIndex } = indexes(this.book)\n kb.fetcher.nowOrWhenFetched(groupIndex, (ok, err) => {\n if (!ok) {\n return reject(err)\n }\n const groups = kb.each(this.book, ns.vcard('includesGroup'))\n return resolve(groups)\n })\n })\n }\n\n handleClickGroup (group) {\n return _event => {\n this.onSelectGroup(group)\n }\n }\n}\n\nexport class Group {\n constructor (element, group) {\n this.element = element\n this.group = group\n }\n\n render () {\n const container = document.createElement('div')\n container.textContent = escape(\n // @@@@@ need to escape??\n getWithDefault(this.group, ns.vcard('fn'), `[${this.group.value}]`)\n )\n this.element.innerHTML = ''\n this.element.appendChild(container)\n return this\n }\n}\n\nexport class GroupBuilder {\n constructor (element, book, group, doneBuildingCb, groupChangedCb) {\n this.element = element\n this.book = book\n this.group = group\n this.onGroupChanged = (err, changeType, agent) => {\n if (groupChangedCb) {\n groupChangedCb(err, changeType, agent)\n }\n }\n this.groupChangedCb = groupChangedCb\n this.doneBuildingCb = doneBuildingCb\n }\n\n refresh () {\n // TODO: implement\n }\n\n render () {\n const dropContainer = document.createElement('div')\n dropContainer.style.maxWidth = '350px'\n dropContainer.style.minHeight = '200px'\n dropContainer.style.outline = '1px solid black'\n dropContainer.style.display = 'flex'\n dropContainer.style.flexDirection = 'column'\n\n makeDropTarget(dropContainer, uris => {\n uris.forEach(uri => {\n this.add(uri).catch(err => {\n this.element.appendChild(\n errorMessageBlock(\n document,\n escape(`Could not add the given WebId. (${err})`)\n )\n )\n })\n })\n })\n\n const groupNameInput = document.createElement('input')\n groupNameInput.type = 'text'\n groupNameInput.value = getWithDefault(\n this.group,\n ns.vcard('fn'),\n 'Untitled Group'\n )\n groupNameInput.addEventListener('change', event => {\n this.setGroupName(event.target.value).catch(err => {\n this.element.appendChild(\n errorMessageBlock(document, `Error changing group name. (${err})`)\n )\n })\n })\n const groupNameLabel = document.createElement('label')\n groupNameLabel.textContent = escape('Group Name:')\n groupNameLabel.appendChild(groupNameInput)\n dropContainer.appendChild(groupNameLabel)\n\n if (kb.any(this.group, ns.vcard('hasMember'))) {\n kb.match(this.group, ns.vcard('hasMember')).forEach(statement => {\n const webIdNode = statement.object\n const personDiv = document.createElement('div')\n new Person(personDiv, webIdNode, this.handleRemove(webIdNode)).render()\n dropContainer.appendChild(personDiv)\n })\n } else {\n const copy = document.createElement('p')\n copy.textContent = escape`\n To add someone to this group, drag and drop their WebID URL onto the box.\n `\n dropContainer.appendChild(copy)\n }\n\n const doneBuildingButton = document.createElement('button')\n doneBuildingButton.textContent = escape('Done')\n doneBuildingButton.addEventListener('click', _event => {\n this.doneBuildingCb(this.group)\n })\n dropContainer.appendChild(doneBuildingButton)\n\n this.element.innerHTML = ''\n this.element.appendChild(dropContainer)\n return this\n }\n\n add (webId) {\n return new Promise((resolve, reject) => {\n kb.fetcher.nowOrWhenFetched(webId, (ok, err) => {\n if (!ok) {\n this.onGroupChanged(err)\n return reject(err)\n }\n // make sure it's a valid person, group, or entity (for now just handle\n // webId)\n const webIdNode = rdf.namedNode(webId)\n const rdfClass = kb.any(webIdNode, ns.rdf('type'))\n if (!rdfClass || !rdfClass.equals(ns.foaf('Person'))) {\n return reject(\n new Error(\n `Only people supported right now. (tried to add something of type ${rdfClass.value})`\n )\n )\n }\n return resolve(webIdNode)\n })\n }).then(webIdNode => {\n const statement = rdf.st(this.group, ns.vcard('hasMember'), webIdNode)\n if (kb.holdsStatement(statement)) {\n return webIdNode\n }\n return patch(this.group.doc().uri, { toIns: [statement] }).then(() => {\n statement.why = this.group.doc()\n kb.add(statement)\n this.onGroupChanged(null, 'added', webIdNode)\n this.render()\n })\n })\n }\n\n handleRemove (webIdNode) {\n return _event => {\n const statement = rdf.st(this.group, ns.vcard('hasMember'), webIdNode)\n return patch(this.group.doc().uri, { toDel: [statement] })\n .then(() => {\n kb.remove(statement)\n this.onGroupChanged(null, 'removed', webIdNode)\n this.render()\n return true\n })\n .catch(err => {\n const name = kb.any(webIdNode, ns.foaf('name'))\n const errorMessage =\n name && name.value\n ? `Could not remove ${name.value}. (${err})`\n : `Could not remove ${webIdNode.value}. (${err})`\n throw new Error(errorMessage)\n })\n }\n }\n\n setGroupName (name) {\n const { groupIndex } = indexes(this.book)\n const updatePromises = [this.group.doc(), groupIndex].map(namedGraph => {\n const oldNameStatements = kb.match(\n this.group,\n ns.vcard('fn'),\n null,\n namedGraph\n )\n const newNameStatement = rdf.st(\n this.group,\n ns.vcard('fn'),\n rdf.literal(name)\n )\n return patch(namedGraph.value, {\n toDel: oldNameStatements,\n toIns: [newNameStatement]\n }).then(_solidResponse => {\n kb.removeStatements(oldNameStatements)\n newNameStatement.why = namedGraph\n kb.add(newNameStatement)\n })\n })\n return Promise.all(updatePromises)\n }\n}\n// @ignore exporting this only for the unit test\n// @@ TODO maybe I should move this down at end, but for\n// now I will leave it where it was\nexport class Person {\n constructor (element, webIdNode, handleRemove) {\n this.webIdNode = webIdNode\n this.element = element\n this.handleRemove = handleRemove\n }\n\n render () {\n const container = document.createElement('div')\n container.style.display = 'flex'\n\n // TODO: take a look at UI.widgets.setName\n const imgSrc = getWithDefault(\n this.webIdNode,\n ns.foaf('img'),\n iconBase + 'noun_15059.svg'\n )\n const profileImg = document.createElement('img')\n profileImg.src = escape(imgSrc)\n profileImg.width = '50'\n profileImg.height = '50'\n profileImg.style.margin = '5px'\n\n // TODO: take a look at UI.widgets.setImage\n const name = getWithDefault(\n this.webIdNode,\n ns.foaf('name'),\n `[${this.webIdNode}]`\n )\n const nameSpan = document.createElement('span')\n nameSpan.innerHTML = escape(name)\n nameSpan.style.flexGrow = '1'\n nameSpan.style.margin = 'auto 0'\n\n const removeButton = document.createElement('button')\n removeButton.textContent = 'Remove'\n removeButton.addEventListener('click', _event =>\n this.handleRemove().catch(err => {\n this.element.appendChild(errorMessageBlock(document, escape(`${err}`)))\n })\n )\n removeButton.style.margin = '5px'\n\n container.appendChild(profileImg)\n container.appendChild(nameSpan)\n container.appendChild(removeButton)\n\n this.element.innerHTML = ''\n this.element.appendChild(container)\n return this\n }\n}\n\nfunction getWithDefault (subject, predicate, defaultValue) {\n const object = kb.any(subject, predicate)\n return object ? object.value : defaultValue\n}\n\nfunction patch (url, { toDel, toIns }) {\n return new Promise((resolve, reject) => {\n kb.updater.update(toDel, toIns, (uri, success, errorMessage) => {\n if (!success) {\n return reject(\n new Error(`PATCH failed for resource <${uri}>: ${errorMessage}`)\n )\n }\n resolve()\n })\n })\n // return webClient.patch(url, toDel, toIns)\n // .then(solidResponse => {\n // const status = solidResponse.xhr.status\n // if (status < 200 || status >= 400) {\n // const err = new Error(`PATCH failed for resource <${solidResponse.url}>`)\n // err.solidResponse = solidResponse\n // throw err\n // }\n // })\n}\n\nfunction indexes (book) {\n return {\n // bookIndex: book,\n groupIndex: kb.any(book, ns.vcard('groupIndex')),\n groupContainer: kb.sym(book.dir().uri + 'Group/')\n }\n}\n"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "solid-ui",
|
|
3
|
-
"version": "2.4.27-
|
|
3
|
+
"version": "2.4.27-62cefbe0",
|
|
4
4
|
"description": "UI library for writing Solid read-write-web applications",
|
|
5
5
|
"main": "./lib/index.js",
|
|
6
6
|
"types": "./lib/index.d.ts",
|
|
@@ -55,7 +55,7 @@
|
|
|
55
55
|
},
|
|
56
56
|
"homepage": "https://github.com/solidos/solid-ui",
|
|
57
57
|
"dependencies": {
|
|
58
|
-
"
|
|
58
|
+
"16": "^0.0.2",
|
|
59
59
|
"acorn": "^7.4.1",
|
|
60
60
|
"escape-html": "^1.0.3",
|
|
61
61
|
"eslint-plugin-n": "^15.6.1",
|
|
@@ -95,7 +95,6 @@
|
|
|
95
95
|
"@typescript-eslint/eslint-plugin": "^5.55.0",
|
|
96
96
|
"@typescript-eslint/parser": "^5.55.0",
|
|
97
97
|
"babel-loader": "^8.3.0",
|
|
98
|
-
"crypto": "^1.0.1",
|
|
99
98
|
"eslint": "^8.36.0",
|
|
100
99
|
"eslint-config-standard": "^17.0.0",
|
|
101
100
|
"eslint-import-resolver-typescript": "^2.7.1",
|
|
@@ -103,12 +102,11 @@
|
|
|
103
102
|
"eslint-plugin-jest": "^26.9.0",
|
|
104
103
|
"eslint-plugin-node": "^11.1.0",
|
|
105
104
|
"eslint-plugin-promise": "^6.1.1",
|
|
106
|
-
"get-random-values": "^2.1.0",
|
|
107
105
|
"html-webpack-plugin": "^5.5.0",
|
|
108
106
|
"husky": "^7.0.4",
|
|
109
107
|
"isomorphic-fetch": "^3.0.0",
|
|
110
108
|
"jest": "^27.5.1",
|
|
111
|
-
"jsdom": "^
|
|
109
|
+
"jsdom": "^16.7.0",
|
|
112
110
|
"lint-staged": "^12.5.0",
|
|
113
111
|
"nock": "^13.3.0",
|
|
114
112
|
"react": "^17.0.2",
|
package/lib/chat/keys.d.ts
DELETED
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import { NamedNode } from 'rdflib';
|
|
2
|
-
export declare function generatePrivateKey(): string;
|
|
3
|
-
export declare function generatePublicKey(privateKey: string): string;
|
|
4
|
-
/**
|
|
5
|
-
* getPublicKey
|
|
6
|
-
* used for displaying messages in chat, therefore does not
|
|
7
|
-
* create a new key if not found
|
|
8
|
-
* @param webId
|
|
9
|
-
* @returns string | undefined
|
|
10
|
-
*/
|
|
11
|
-
export declare function getPublicKey(webId: NamedNode): Promise<string | undefined>;
|
|
12
|
-
export declare function getPrivateKey(webId: NamedNode): Promise<string>;
|
|
13
|
-
//# sourceMappingURL=keys.d.ts.map
|
package/lib/chat/keys.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"keys.d.ts","sourceRoot":"","sources":["../../src/chat/keys.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAA;AAKlC,wBAAgB,kBAAkB,IAAK,MAAM,CAE5C;AAED,wBAAgB,iBAAiB,CAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAE7D;AAED;;;;;;GAMG;AACH,wBAAsB,YAAY,CAAE,KAAK,EAAE,SAAS,+BAUnD;AAED,wBAAsB,aAAa,CAAE,KAAK,EAAE,SAAS,mBA6CpD"}
|
package/lib/chat/keys.js
DELETED
|
@@ -1,223 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
-
var _typeof = require("@babel/runtime/helpers/typeof");
|
|
5
|
-
Object.defineProperty(exports, "__esModule", {
|
|
6
|
-
value: true
|
|
7
|
-
});
|
|
8
|
-
exports.generatePrivateKey = generatePrivateKey;
|
|
9
|
-
exports.generatePublicKey = generatePublicKey;
|
|
10
|
-
exports.getPrivateKey = getPrivateKey;
|
|
11
|
-
exports.getPublicKey = getPublicKey;
|
|
12
|
-
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
|
|
13
|
-
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
|
|
14
|
-
var debug = _interopRequireWildcard(require("../debug"));
|
|
15
|
-
var _secp256k = require("@noble/curves/secp256k1");
|
|
16
|
-
var _utils = require("@noble/hashes/utils");
|
|
17
|
-
var _signature = require("./signature");
|
|
18
|
-
var _solidLogic = require("solid-logic");
|
|
19
|
-
var $rdf = _interopRequireWildcard(require("rdflib"));
|
|
20
|
-
var _accessData = require("../utils/keyHelpers/accessData");
|
|
21
|
-
var _acl = require("../utils/keyHelpers/acl");
|
|
22
|
-
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
23
|
-
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
24
|
-
function generatePrivateKey() {
|
|
25
|
-
return (0, _utils.bytesToHex)(_secp256k.schnorr.utils.randomPrivateKey());
|
|
26
|
-
}
|
|
27
|
-
function generatePublicKey(privateKey) {
|
|
28
|
-
return (0, _utils.bytesToHex)(_secp256k.schnorr.getPublicKey(privateKey));
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
/**
|
|
32
|
-
* getPublicKey
|
|
33
|
-
* used for displaying messages in chat, therefore does not
|
|
34
|
-
* create a new key if not found
|
|
35
|
-
* @param webId
|
|
36
|
-
* @returns string | undefined
|
|
37
|
-
*/
|
|
38
|
-
function getPublicKey(_x) {
|
|
39
|
-
return _getPublicKey.apply(this, arguments);
|
|
40
|
-
}
|
|
41
|
-
function _getPublicKey() {
|
|
42
|
-
_getPublicKey = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee(webId) {
|
|
43
|
-
var publicKeyDoc, key;
|
|
44
|
-
return _regenerator["default"].wrap(function _callee$(_context) {
|
|
45
|
-
while (1) switch (_context.prev = _context.next) {
|
|
46
|
-
case 0:
|
|
47
|
-
_context.next = 2;
|
|
48
|
-
return _solidLogic.store.fetcher.load(webId);
|
|
49
|
-
case 2:
|
|
50
|
-
_context.next = 4;
|
|
51
|
-
return (0, _accessData.pubKeyUrl)(webId);
|
|
52
|
-
case 4:
|
|
53
|
-
publicKeyDoc = _context.sent;
|
|
54
|
-
_context.prev = 5;
|
|
55
|
-
_context.next = 8;
|
|
56
|
-
return _solidLogic.store.fetcher.load(publicKeyDoc);
|
|
57
|
-
case 8:
|
|
58
|
-
// url.href)
|
|
59
|
-
key = _solidLogic.store.any(webId, _solidLogic.store.sym(_signature.CERT + 'PublicKey'));
|
|
60
|
-
return _context.abrupt("return", key === null || key === void 0 ? void 0 : key.value);
|
|
61
|
-
case 12:
|
|
62
|
-
_context.prev = 12;
|
|
63
|
-
_context.t0 = _context["catch"](5);
|
|
64
|
-
return _context.abrupt("return", undefined);
|
|
65
|
-
case 15:
|
|
66
|
-
case "end":
|
|
67
|
-
return _context.stop();
|
|
68
|
-
}
|
|
69
|
-
}, _callee, null, [[5, 12]]);
|
|
70
|
-
}));
|
|
71
|
-
return _getPublicKey.apply(this, arguments);
|
|
72
|
-
}
|
|
73
|
-
function getPrivateKey(_x2) {
|
|
74
|
-
return _getPrivateKey.apply(this, arguments);
|
|
75
|
-
}
|
|
76
|
-
/**
|
|
77
|
-
* delete acl if keydoc exists
|
|
78
|
-
* create/edit keyDoc
|
|
79
|
-
* set keyDoc acl
|
|
80
|
-
*/
|
|
81
|
-
function _getPrivateKey() {
|
|
82
|
-
_getPrivateKey = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee2(webId) {
|
|
83
|
-
var publicKeyDoc, privateKeyDoc, publicKey, privateKey, validPublicKey, del, add, newPublicKey, keyContainer;
|
|
84
|
-
return _regenerator["default"].wrap(function _callee2$(_context2) {
|
|
85
|
-
while (1) switch (_context2.prev = _context2.next) {
|
|
86
|
-
case 0:
|
|
87
|
-
_context2.next = 2;
|
|
88
|
-
return _solidLogic.store.fetcher.load(webId);
|
|
89
|
-
case 2:
|
|
90
|
-
_context2.next = 4;
|
|
91
|
-
return (0, _accessData.pubKeyUrl)(webId);
|
|
92
|
-
case 4:
|
|
93
|
-
publicKeyDoc = _context2.sent;
|
|
94
|
-
_context2.next = 7;
|
|
95
|
-
return (0, _accessData.privKeyUrl)(webId);
|
|
96
|
-
case 7:
|
|
97
|
-
privateKeyDoc = _context2.sent;
|
|
98
|
-
_context2.next = 10;
|
|
99
|
-
return (0, _accessData.getExistingPublicKey)(webId, publicKeyDoc);
|
|
100
|
-
case 10:
|
|
101
|
-
publicKey = _context2.sent;
|
|
102
|
-
_context2.next = 13;
|
|
103
|
-
return (0, _accessData.getExistingPrivateKey)(webId, privateKeyDoc);
|
|
104
|
-
case 13:
|
|
105
|
-
privateKey = _context2.sent;
|
|
106
|
-
// is publicKey valid ?
|
|
107
|
-
validPublicKey = true;
|
|
108
|
-
if (privateKey && publicKey !== generatePublicKey(privateKey)) {
|
|
109
|
-
if (confirm('This is strange the publicKey is not valid for\n' + (webId === null || webId === void 0 ? void 0 : webId.uri) + '\'shall we repair keeping the private key ?')) validPublicKey = false;
|
|
110
|
-
}
|
|
111
|
-
|
|
112
|
-
// create key pair or repair publicKey
|
|
113
|
-
if (!(!privateKey || !publicKey || !validPublicKey)) {
|
|
114
|
-
_context2.next = 34;
|
|
115
|
-
break;
|
|
116
|
-
}
|
|
117
|
-
del = [];
|
|
118
|
-
add = []; // if (privateKey) del.push($rdf.st(webId, store.sym(CERT + 'PrivateKey'), $rdf.lit(privateKey), store.sym(privateKeyDoc)))
|
|
119
|
-
if (privateKey) {
|
|
120
|
-
_context2.next = 24;
|
|
121
|
-
break;
|
|
122
|
-
}
|
|
123
|
-
// add = []
|
|
124
|
-
privateKey = generatePrivateKey();
|
|
125
|
-
add = [$rdf.st(webId, _solidLogic.store.sym(_signature.CERT + 'PrivateKey'), $rdf.literal(privateKey), _solidLogic.store.sym(privateKeyDoc))];
|
|
126
|
-
_context2.next = 24;
|
|
127
|
-
return saveKey(privateKeyDoc, [], add, webId.uri);
|
|
128
|
-
case 24:
|
|
129
|
-
if (!(!publicKey || !validPublicKey)) {
|
|
130
|
-
_context2.next = 31;
|
|
131
|
-
break;
|
|
132
|
-
}
|
|
133
|
-
del = [];
|
|
134
|
-
// delete invalid public key
|
|
135
|
-
if (publicKey) {
|
|
136
|
-
del = [$rdf.st(webId, _solidLogic.store.sym(_signature.CERT + 'PublicKey'), $rdf.lit(publicKey), _solidLogic.store.sym(publicKeyDoc))];
|
|
137
|
-
debug.log(del);
|
|
138
|
-
}
|
|
139
|
-
// update new valid key
|
|
140
|
-
newPublicKey = generatePublicKey(privateKey);
|
|
141
|
-
add = [$rdf.st(webId, _solidLogic.store.sym(_signature.CERT + 'PublicKey'), $rdf.literal(newPublicKey), _solidLogic.store.sym(publicKeyDoc))];
|
|
142
|
-
_context2.next = 31;
|
|
143
|
-
return saveKey(publicKeyDoc, del, add);
|
|
144
|
-
case 31:
|
|
145
|
-
keyContainer = privateKeyDoc.substring(0, privateKeyDoc.lastIndexOf('/') + 1);
|
|
146
|
-
_context2.next = 34;
|
|
147
|
-
return (0, _acl.setAcl)(keyContainer, (0, _acl.keyContainerAclBody)(webId.uri));
|
|
148
|
-
case 34:
|
|
149
|
-
return _context2.abrupt("return", privateKey);
|
|
150
|
-
case 35:
|
|
151
|
-
case "end":
|
|
152
|
-
return _context2.stop();
|
|
153
|
-
}
|
|
154
|
-
}, _callee2);
|
|
155
|
-
}));
|
|
156
|
-
return _getPrivateKey.apply(this, arguments);
|
|
157
|
-
}
|
|
158
|
-
function saveKey(_x3, _x4, _x5) {
|
|
159
|
-
return _saveKey.apply(this, arguments);
|
|
160
|
-
}
|
|
161
|
-
function _saveKey() {
|
|
162
|
-
_saveKey = (0, _asyncToGenerator2["default"])(function (keyDoc, del, add) {
|
|
163
|
-
var me = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : '';
|
|
164
|
-
return /*#__PURE__*/_regenerator["default"].mark(function _callee3() {
|
|
165
|
-
var keyAclDoc, response, aclBody;
|
|
166
|
-
return _regenerator["default"].wrap(function _callee3$(_context3) {
|
|
167
|
-
while (1) switch (_context3.prev = _context3.next) {
|
|
168
|
-
case 0:
|
|
169
|
-
_context3.next = 2;
|
|
170
|
-
return _solidLogic.store.fetcher.load(keyDoc);
|
|
171
|
-
case 2:
|
|
172
|
-
_context3.prev = 2;
|
|
173
|
-
// get keyAcldoc
|
|
174
|
-
keyAclDoc = _solidLogic.store.any(_solidLogic.store.sym(keyDoc), _solidLogic.store.sym('http://www.iana.org/assignments/link-relations/acl'));
|
|
175
|
-
if (!keyAclDoc) {
|
|
176
|
-
_context3.next = 17;
|
|
177
|
-
break;
|
|
178
|
-
}
|
|
179
|
-
_context3.prev = 5;
|
|
180
|
-
_context3.next = 8;
|
|
181
|
-
return _solidLogic.store.fetcher.webOperation('DELETE', keyAclDoc.value);
|
|
182
|
-
case 8:
|
|
183
|
-
response = _context3.sent;
|
|
184
|
-
// this may fail if webId is not an owner
|
|
185
|
-
debug.log('delete ' + keyAclDoc.value + ' ' + response.status); // should test 404 and 2xx
|
|
186
|
-
_context3.next = 17;
|
|
187
|
-
break;
|
|
188
|
-
case 12:
|
|
189
|
-
_context3.prev = 12;
|
|
190
|
-
_context3.t0 = _context3["catch"](5);
|
|
191
|
-
if (!(_context3.t0.response.status !== 404)) {
|
|
192
|
-
_context3.next = 16;
|
|
193
|
-
break;
|
|
194
|
-
}
|
|
195
|
-
throw new Error(_context3.t0);
|
|
196
|
-
case 16:
|
|
197
|
-
debug.log('delete ' + keyAclDoc.value + ' ' + _context3.t0.response.status); // should test 404 and 2xx
|
|
198
|
-
case 17:
|
|
199
|
-
_context3.next = 19;
|
|
200
|
-
return _solidLogic.store.updater.updateMany(del, add);
|
|
201
|
-
case 19:
|
|
202
|
-
// or a promise store.updater.update ?
|
|
203
|
-
// create READ only ACL
|
|
204
|
-
aclBody = (0, _acl.keyAclBody)(keyDoc, me);
|
|
205
|
-
_context3.next = 22;
|
|
206
|
-
return (0, _acl.setAcl)(keyDoc, aclBody);
|
|
207
|
-
case 22:
|
|
208
|
-
_context3.next = 27;
|
|
209
|
-
break;
|
|
210
|
-
case 24:
|
|
211
|
-
_context3.prev = 24;
|
|
212
|
-
_context3.t1 = _context3["catch"](2);
|
|
213
|
-
throw new Error(_context3.t1);
|
|
214
|
-
case 27:
|
|
215
|
-
case "end":
|
|
216
|
-
return _context3.stop();
|
|
217
|
-
}
|
|
218
|
-
}, _callee3, null, [[2, 24], [5, 12]]);
|
|
219
|
-
})();
|
|
220
|
-
});
|
|
221
|
-
return _saveKey.apply(this, arguments);
|
|
222
|
-
}
|
|
223
|
-
//# sourceMappingURL=keys.js.map
|
package/lib/chat/keys.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"keys.js","names":["debug","_interopRequireWildcard","require","_secp256k","_utils","_signature","_solidLogic","$rdf","_accessData","_acl","_getRequireWildcardCache","nodeInterop","WeakMap","cacheBabelInterop","cacheNodeInterop","obj","__esModule","_typeof","cache","has","get","newObj","hasPropertyDescriptor","Object","defineProperty","getOwnPropertyDescriptor","key","prototype","hasOwnProperty","call","desc","set","generatePrivateKey","bytesToHex","schnorr","utils","randomPrivateKey","generatePublicKey","privateKey","getPublicKey","_x","_getPublicKey","apply","arguments","_asyncToGenerator2","_regenerator","mark","_callee","webId","publicKeyDoc","wrap","_callee$","_context","prev","next","store","fetcher","load","pubKeyUrl","sent","any","sym","CERT","abrupt","value","t0","undefined","stop","getPrivateKey","_x2","_getPrivateKey","_callee2","privateKeyDoc","publicKey","validPublicKey","del","add","newPublicKey","keyContainer","_callee2$","_context2","privKeyUrl","getExistingPublicKey","getExistingPrivateKey","confirm","uri","st","literal","saveKey","lit","log","substring","lastIndexOf","setAcl","keyContainerAclBody","_x3","_x4","_x5","_saveKey","keyDoc","me","length","_callee3","keyAclDoc","response","aclBody","_callee3$","_context3","webOperation","status","Error","updater","updateMany","keyAclBody","t1"],"sources":["../../src/chat/keys.ts"],"sourcesContent":["import * as debug from '../debug'\r\nimport { schnorr } from '@noble/curves/secp256k1'\r\nimport { bytesToHex } from '@noble/hashes/utils'\r\nimport { CERT } from './signature'\r\nimport { store } from 'solid-logic'\r\nimport { NamedNode } from 'rdflib'\r\nimport * as $rdf from 'rdflib'\r\nimport { getExistingPublicKey, pubKeyUrl, privKeyUrl, getExistingPrivateKey } from '../utils/keyHelpers/accessData'\r\nimport { setAcl, keyContainerAclBody, keyAclBody } from '../utils/keyHelpers/acl'\r\n\r\nexport function generatePrivateKey (): string {\r\n return bytesToHex(schnorr.utils.randomPrivateKey())\r\n}\r\n\r\nexport function generatePublicKey (privateKey: string): string {\r\n return bytesToHex(schnorr.getPublicKey(privateKey))\r\n}\r\n\r\n/**\r\n * getPublicKey\r\n * used for displaying messages in chat, therefore does not\r\n * create a new key if not found\r\n * @param webId\r\n * @returns string | undefined\r\n */\r\nexport async function getPublicKey (webId: NamedNode) {\r\n await store.fetcher.load(webId)\r\n const publicKeyDoc = await pubKeyUrl(webId)\r\n try {\r\n await store.fetcher.load(publicKeyDoc) // url.href)\r\n const key = store.any(webId, store.sym(CERT + 'PublicKey'))\r\n return key?.value // as NamedNode\r\n } catch (err) {\r\n return undefined\r\n }\r\n}\r\n\r\nexport async function getPrivateKey (webId: NamedNode) {\r\n await store.fetcher.load(webId)\r\n // find keys url's\r\n const publicKeyDoc = await pubKeyUrl(webId)\r\n const privateKeyDoc = await privKeyUrl(webId)\r\n\r\n // find key pair\r\n const publicKey = await getExistingPublicKey(webId, publicKeyDoc)\r\n let privateKey = await getExistingPrivateKey(webId, privateKeyDoc)\r\n\r\n // is publicKey valid ?\r\n let validPublicKey = true\r\n if (privateKey && (publicKey !== generatePublicKey(privateKey as string))) {\r\n if (confirm('This is strange the publicKey is not valid for\\n' + webId?.uri +\r\n '\\'shall we repair keeping the private key ?')) validPublicKey = false\r\n }\r\n\r\n // create key pair or repair publicKey\r\n if (!privateKey || !publicKey || !validPublicKey) {\r\n let del: any[] = []\r\n let add: any[] = []\r\n // if (privateKey) del.push($rdf.st(webId, store.sym(CERT + 'PrivateKey'), $rdf.lit(privateKey), store.sym(privateKeyDoc)))\r\n\r\n if (!privateKey) {\r\n // add = []\r\n privateKey = generatePrivateKey()\r\n add = [$rdf.st(webId, store.sym(CERT + 'PrivateKey'), $rdf.literal(privateKey), store.sym(privateKeyDoc))]\r\n await saveKey(privateKeyDoc, [], add, webId.uri)\r\n }\r\n if (!publicKey || !validPublicKey) {\r\n del = []\r\n // delete invalid public key\r\n if (publicKey) {\r\n del = [$rdf.st(webId, store.sym(CERT + 'PublicKey'), $rdf.lit(publicKey), store.sym(publicKeyDoc))]\r\n debug.log(del)\r\n }\r\n // update new valid key\r\n const newPublicKey = generatePublicKey(privateKey)\r\n add = [$rdf.st(webId, store.sym(CERT + 'PublicKey'), $rdf.literal(newPublicKey), store.sym(publicKeyDoc))]\r\n await saveKey(publicKeyDoc, del, add)\r\n }\r\n const keyContainer = privateKeyDoc.substring(0, privateKeyDoc.lastIndexOf('/') + 1)\r\n await setAcl(keyContainer, keyContainerAclBody(webId.uri)) // includes DELETE and PUT\r\n }\r\n return privateKey as string\r\n}\r\n\r\n/**\r\n * delete acl if keydoc exists\r\n * create/edit keyDoc\r\n * set keyDoc acl\r\n */\r\nasync function saveKey (keyDoc: string, del, add, me: string = '') {\r\n await store.fetcher.load(keyDoc)\r\n // delete keyAclDoc\r\n try {\r\n // get keyAcldoc\r\n const keyAclDoc = store.any(store.sym(keyDoc), store.sym('http://www.iana.org/assignments/link-relations/acl'))\r\n if (keyAclDoc) {\r\n // delete READ only keyAclDoc. This is possible if the webId is an owner\r\n try {\r\n const response = await store.fetcher.webOperation('DELETE', keyAclDoc.value) // this may fail if webId is not an owner\r\n debug.log('delete ' + keyAclDoc.value + ' ' + response.status) // should test 404 and 2xx\r\n } catch (err) {\r\n if (err.response.status !== 404) { throw new Error(err) }\r\n debug.log('delete ' + keyAclDoc.value + ' ' + err.response.status) // should test 404 and 2xx\r\n }\r\n }\r\n\r\n // save key\r\n await store.updater.updateMany(del, add) // or a promise store.updater.update ?\r\n\r\n // create READ only ACL\r\n const aclBody = keyAclBody(keyDoc, me)\r\n await setAcl(keyDoc, aclBody)\r\n } catch (err) { throw new Error(err) }\r\n}\r\n"],"mappings":"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"}
|
package/lib/chat/signature.d.ts
DELETED
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
export declare const utf8Decoder: TextDecoder;
|
|
2
|
-
export declare const utf8Encoder: TextEncoder;
|
|
3
|
-
export declare const SEC = "https://w3id.org/security#";
|
|
4
|
-
export declare const CERT = "http://www.w3.org/ns/auth/cert#";
|
|
5
|
-
export type MsgTemplate = {
|
|
6
|
-
id: string;
|
|
7
|
-
created: string;
|
|
8
|
-
dateDeleted: string;
|
|
9
|
-
content: string;
|
|
10
|
-
maker: string;
|
|
11
|
-
sig: string;
|
|
12
|
-
};
|
|
13
|
-
export type UnsignedMsg = MsgTemplate & {
|
|
14
|
-
pubkey: string;
|
|
15
|
-
};
|
|
16
|
-
export type Message = UnsignedMsg & {
|
|
17
|
-
id: string;
|
|
18
|
-
sig: string;
|
|
19
|
-
};
|
|
20
|
-
export declare function getBlankMsg(): MsgTemplate;
|
|
21
|
-
export declare function serializeMsg(msg: UnsignedMsg): string;
|
|
22
|
-
export declare function getMsgHash(message: UnsignedMsg): string;
|
|
23
|
-
export declare function verifySignature(sig: string, message: Message, pubKey: string): boolean;
|
|
24
|
-
export declare function signMsg(message: UnsignedMsg, key: string): string;
|
|
25
|
-
//# sourceMappingURL=signature.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"signature.d.ts","sourceRoot":"","sources":["../../src/chat/signature.ts"],"names":[],"mappings":"AAOA,eAAO,MAAM,WAAW,aAA2B,CAAA;AACnD,eAAO,MAAM,WAAW,aAAoB,CAAA;AAE5C,eAAO,MAAM,GAAG,+BAA+B,CAAA;AAC/C,eAAO,MAAM,IAAI,oCAAoC,CAAA;AA2BrD,MAAM,MAAM,WAAW,GAAG;IACxB,EAAE,EAAE,MAAM,CAAA;IACV,OAAO,EAAE,MAAM,CAAA;IACf,WAAW,EAAE,MAAM,CAAA;IACnB,OAAO,EAAE,MAAM,CAAA;IACf,KAAK,EAAE,MAAM,CAAA;IACb,GAAG,EAAE,MAAM,CAAA;CACZ,CAAA;AAED,MAAM,MAAM,WAAW,GAAG,WAAW,GAAG;IACtC,MAAM,EAAE,MAAM,CAAA;CACf,CAAA;AAED,MAAM,MAAM,OAAO,GAAG,WAAW,GAAG;IAClC,EAAE,EAAE,MAAM,CAAA;IACV,GAAG,EAAE,MAAM,CAAA;CACZ,CAAA;AAED,wBAAgB,WAAW,IAAK,WAAW,CAS1C;AAWD,wBAAgB,YAAY,CAAE,GAAG,EAAE,WAAW,GAAG,MAAM,CAMtD;AAED,wBAAgB,UAAU,CAAE,OAAO,EAAE,WAAW,UAG/C;AAwBD,wBAAgB,eAAe,CAAE,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAMvF;AAED,wBAAgB,OAAO,CAAE,OAAO,EAAE,WAAW,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAIlE"}
|