solid-ui 2.4.27 → 2.4.28

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.
Files changed (91) hide show
  1. package/README.md +6 -1
  2. package/dist/670.solid-ui.min.js +1 -0
  3. package/dist/805.solid-ui.min.js +3 -0
  4. package/dist/805.solid-ui.min.js.LICENSE.txt +58 -0
  5. package/dist/805.solid-ui.min.js.map +1 -0
  6. package/dist/_2b19.solid-ui.js +14 -0
  7. package/dist/_2b19.solid-ui.js.map +1 -0
  8. package/dist/index.html +1 -9
  9. package/dist/{main.js → solid-ui.js} +7906 -20465
  10. package/dist/solid-ui.js.map +1 -0
  11. package/dist/solid-ui.min.js +3 -0
  12. package/dist/solid-ui.min.js.LICENSE.txt +54 -0
  13. package/dist/solid-ui.min.js.map +1 -0
  14. package/dist/vendors-node_modules_jsonld_lib_jsonld_js.solid-ui.js +12134 -0
  15. package/dist/vendors-node_modules_jsonld_lib_jsonld_js.solid-ui.js.map +1 -0
  16. package/lib/acl/access-controller.d.ts +2 -3
  17. package/lib/acl/access-controller.d.ts.map +1 -1
  18. package/lib/acl/access-controller.js +17 -15
  19. package/lib/acl/access-controller.js.map +1 -1
  20. package/lib/acl/access-groups.d.ts.map +1 -1
  21. package/lib/acl/access-groups.js +78 -8
  22. package/lib/acl/access-groups.js.map +1 -1
  23. package/lib/acl/acl-control.d.ts.map +1 -1
  24. package/lib/acl/acl-control.js +10 -11
  25. package/lib/acl/acl-control.js.map +1 -1
  26. package/lib/acl/acl.d.ts +1 -1
  27. package/lib/acl/acl.js +1 -1
  28. package/lib/acl/acl.js.map +1 -1
  29. package/lib/acl/add-agent-buttons.d.ts.map +1 -1
  30. package/lib/acl/add-agent-buttons.js +4 -3
  31. package/lib/acl/add-agent-buttons.js.map +1 -1
  32. package/lib/chat/chatLogic.js +63 -26
  33. package/lib/chat/chatLogic.js.map +1 -1
  34. package/lib/chat/keys.d.ts +13 -0
  35. package/lib/chat/keys.d.ts.map +1 -0
  36. package/lib/chat/keys.js +233 -0
  37. package/lib/chat/keys.js.map +1 -0
  38. package/lib/chat/message.js +67 -8
  39. package/lib/chat/message.js.map +1 -1
  40. package/lib/chat/signature.d.ts +24 -0
  41. package/lib/chat/signature.d.ts.map +1 -0
  42. package/lib/chat/signature.js +112 -0
  43. package/lib/chat/signature.js.map +1 -0
  44. package/lib/footer/index.d.ts.map +1 -1
  45. package/lib/footer/index.js +5 -1
  46. package/lib/footer/index.js.map +1 -1
  47. package/lib/header/index.d.ts.map +1 -1
  48. package/lib/header/index.js +41 -20
  49. package/lib/header/index.js.map +1 -1
  50. package/lib/login/login.d.ts.map +1 -1
  51. package/lib/login/login.js +39 -37
  52. package/lib/login/login.js.map +1 -1
  53. package/lib/style.js +60 -2
  54. package/lib/style.js.map +1 -1
  55. package/lib/utils/headerFooterHelpers.d.ts +0 -4
  56. package/lib/utils/headerFooterHelpers.d.ts.map +1 -1
  57. package/lib/utils/headerFooterHelpers.js +0 -27
  58. package/lib/utils/headerFooterHelpers.js.map +1 -1
  59. package/lib/utils/keyHelpers/accessData.d.ts +10 -0
  60. package/lib/utils/keyHelpers/accessData.d.ts.map +1 -0
  61. package/lib/utils/keyHelpers/accessData.js +232 -0
  62. package/lib/utils/keyHelpers/accessData.js.map +1 -0
  63. package/lib/utils/keyHelpers/acl.d.ts +20 -0
  64. package/lib/utils/keyHelpers/acl.d.ts.map +1 -0
  65. package/lib/utils/keyHelpers/acl.js +93 -0
  66. package/lib/utils/keyHelpers/acl.js.map +1 -0
  67. package/lib/versionInfo.js +6 -6
  68. package/lib/versionInfo.js.map +1 -1
  69. package/lib/widgets/buttons.d.ts.map +1 -1
  70. package/lib/widgets/buttons.js +43 -49
  71. package/lib/widgets/buttons.js.map +1 -1
  72. package/lib/widgets/forms.js +8 -4
  73. package/lib/widgets/forms.js.map +1 -1
  74. package/package.json +13 -10
  75. package/dist/main.js.map +0 -1
  76. package/lib/acl/styles.d.ts +0 -90
  77. package/lib/acl/styles.d.ts.map +0 -1
  78. package/lib/acl/styles.js +0 -98
  79. package/lib/acl/styles.js.map +0 -1
  80. package/lib/footer/styleMap.d.ts +0 -8
  81. package/lib/footer/styleMap.d.ts.map +0 -1
  82. package/lib/footer/styleMap.js +0 -15
  83. package/lib/footer/styleMap.js.map +0 -1
  84. package/lib/header/styleMap.d.ts +0 -117
  85. package/lib/header/styleMap.d.ts.map +0 -1
  86. package/lib/header/styleMap.js +0 -139
  87. package/lib/header/styleMap.js.map +0 -1
  88. package/lib/jss/index.d.ts +0 -20
  89. package/lib/jss/index.d.ts.map +0 -1
  90. package/lib/jss/index.js +0 -47
  91. package/lib/jss/index.js.map +0 -1
@@ -23,6 +23,8 @@ var _solidLogic = require("solid-logic");
23
23
  var ns = _interopRequireWildcard(require("../ns"));
24
24
  var $rdf = _interopRequireWildcard(require("rdflib"));
25
25
  var utils = _interopRequireWildcard(require("../utils"));
26
+ var _signature = require("./signature");
27
+ var _keys = require("./keys");
26
28
  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); }
27
29
  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; }
28
30
  /**
@@ -83,7 +85,7 @@ var ChatChannel = /*#__PURE__*/function () {
83
85
  var oldMsg = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
84
86
  var deleteIt = arguments.length > 2 ? arguments[2] : undefined;
85
87
  return /*#__PURE__*/_regenerator["default"].mark(function _callee2() {
86
- var sts, now, timestamp, dateStamp, chatDocument, message, me, msg;
88
+ var sts, now, timestamp, dateStamp, chatDocument, message, me, msg, oldMsgMaker, errMsg, privateKey, sig, _errMsg;
87
89
  return _regenerator["default"].wrap(function _callee2$(_context2) {
88
90
  while (1) switch (_context2.prev = _context2.next) {
89
91
  case 0:
@@ -94,41 +96,76 @@ var ChatChannel = /*#__PURE__*/function () {
94
96
  chatDocument = oldMsg ? oldMsg.doc() : _this.dateFolder.leafDocumentFromDate(now);
95
97
  message = _solidLogic.store.sym(chatDocument.uri + '#' + 'Msg' + timestamp); // const content = store.literal(text)
96
98
  me = _solidLogic.authn.currentUser(); // If already logged on
97
- if (oldMsg) {
98
- // edit message replaces old one
99
- sts.push($rdf.st(mostRecentVersion(oldMsg), ns.dct('isReplacedBy'), message, chatDocument));
100
- if (deleteIt) {
101
- sts.push($rdf.st(message, ns.schema('dateDeleted'), dateStamp, chatDocument));
102
- }
103
- } else {
104
- // link new message to channel
105
- sts.push($rdf.st(_this.channel, ns.wf('message'), message, chatDocument));
99
+ msg = (0, _signature.getBlankMsg)();
100
+ msg.id = message.uri;
101
+ if (!oldMsg) {
102
+ _context2.next = 22;
103
+ break;
106
104
  }
105
+ // edit message replaces old one
106
+ oldMsgMaker = _solidLogic.store.any(oldMsg, ns.foaf('maker')); // may not be needed here, but needed on READ
107
+ if (!(oldMsgMaker.uri === me.uri)) {
108
+ _context2.next = 16;
109
+ break;
110
+ }
111
+ sts.push($rdf.st(mostRecentVersion(oldMsg), ns.dct('isReplacedBy'), message, chatDocument));
112
+ if (deleteIt) {
113
+ // we need to add a specific signature, else anyone can delete a msg ?
114
+ sts.push($rdf.st(message, ns.schema('dateDeleted'), dateStamp, chatDocument));
115
+ }
116
+ _context2.next = 20;
117
+ break;
118
+ case 16:
119
+ errMsg = 'Error you cannot delete/edit a message from someone else : \n' + oldMsgMaker.uri;
120
+ debug.warn(errMsg);
121
+ alert(errMsg);
122
+ throw new Error(errMsg);
123
+ case 20:
124
+ _context2.next = 23;
125
+ break;
126
+ case 22:
127
+ // link new message to channel
128
+ sts.push($rdf.st(_this.channel, ns.wf('message'), message, chatDocument));
129
+ case 23:
107
130
  sts.push($rdf.st(message, ns.sioc('content'), _solidLogic.store.literal(text), chatDocument));
131
+ msg.content = text;
108
132
  sts.push($rdf.st(message, ns.dct('created'), dateStamp, chatDocument));
109
- if (me) {
110
- sts.push($rdf.st(message, ns.foaf('maker'), me, chatDocument));
133
+ msg.created = dateStamp.value;
134
+ if (!me) {
135
+ _context2.next = 35;
136
+ break;
111
137
  }
112
- _context2.prev = 11;
113
- _context2.next = 14;
138
+ sts.push($rdf.st(message, ns.foaf('maker'), me, chatDocument));
139
+ msg.maker = me.uri;
140
+ // privateKey the cached private key of me, cached in store
141
+ _context2.next = 32;
142
+ return (0, _keys.getPrivateKey)(me);
143
+ case 32:
144
+ privateKey = _context2.sent;
145
+ // me.uri)
146
+ sig = (0, _signature.signMsg)(msg, privateKey);
147
+ sts.push($rdf.st(message, $rdf.sym("".concat(_signature.SEC, "proofValue")), $rdf.lit(sig), chatDocument));
148
+ case 35:
149
+ _context2.prev = 35;
150
+ _context2.next = 38;
114
151
  return _solidLogic.store.updater.update([], sts);
115
- case 14:
116
- _context2.next = 22;
152
+ case 38:
153
+ _context2.next = 46;
117
154
  break;
118
- case 16:
119
- _context2.prev = 16;
120
- _context2.t0 = _context2["catch"](11);
121
- msg = 'Error saving chat message: ' + _context2.t0;
122
- debug.warn(msg);
123
- alert(msg);
124
- throw new Error(msg);
125
- case 22:
155
+ case 40:
156
+ _context2.prev = 40;
157
+ _context2.t0 = _context2["catch"](35);
158
+ _errMsg = 'Error saving chat message: ' + _context2.t0;
159
+ debug.warn(_errMsg);
160
+ alert(_errMsg);
161
+ throw new Error(_errMsg);
162
+ case 46:
126
163
  return _context2.abrupt("return", message);
127
- case 23:
164
+ case 47:
128
165
  case "end":
129
166
  return _context2.stop();
130
167
  }
131
- }, _callee2, null, [[11, 16]]);
168
+ }, _callee2, null, [[35, 40]]);
132
169
  })();
133
170
  });
134
171
  function updateMessage(_x2) {
@@ -1 +1 @@
1
- {"version":3,"file":"chatLogic.js","names":["debug","_interopRequireWildcard","require","_dateFolder","_solidLogic","ns","$rdf","utils","_getRequireWildcardCache","nodeInterop","WeakMap","cacheBabelInterop","cacheNodeInterop","obj","__esModule","_typeof","cache","has","get","newObj","hasPropertyDescriptor","Object","defineProperty","getOwnPropertyDescriptor","key","prototype","hasOwnProperty","call","desc","set","ChatChannel","channel","options","_classCallCheck2","channelRoot","doc","dateFolder","DateFolder","div","_createClass2","value","_createMessage","_asyncToGenerator2","_regenerator","mark","_callee","text","wrap","_callee$","_context","prev","next","abrupt","updateMessage","stop","createMessage","_x","apply","arguments","_updateMessage","_this","oldMsg","length","undefined","deleteIt","_callee2","sts","now","timestamp","dateStamp","chatDocument","message","me","msg","_callee2$","_context2","Date","getTime","term","leafDocumentFromDate","store","sym","uri","authn","currentUser","push","st","mostRecentVersion","dct","schema","wf","sioc","literal","foaf","updater","update","t0","warn","alert","Error","_x2","_deleteMessage","_callee3","_callee3$","_context3","deleteMessage","_x3","exports","originalVersion","any","isDeleted","holds","isReplaced","isHidden","nick","person","s","label","_createIfNotExists","_x4","_createIfNotExists2","contentType","data","_callee4","response","_callee4$","_context4","fetcher","load","sent","status","log","webOperation","t1","requested"],"sources":["../../src/chat/chatLogic.js"],"sourcesContent":["/**\n * Contains the [[ChatChannel]] class and logic for Solid Chat\n * @packageDocumentation\n */\n\nimport * as debug from '../debug'\nimport { DateFolder } from './dateFolder'\nimport { store, authn } from 'solid-logic'\nimport * as ns from '../ns'\nimport * as $rdf from 'rdflib' // pull in first avoid cross-refs\nimport * as utils from '../utils'\n\n/* The Solid logic for a 'LongChat'\n*/\n/**\n * Common code for a chat (discussion area of messages about something)\n * This version runs over a series of files for different time periods\n *\n * Parameters for the whole chat like its title are stored on\n * index.ttl#this and the chats messages are stored in YYYY/MM/DD/chat.ttl\n *\n */\n\nexport class ChatChannel {\n constructor (channel, options) {\n this.channel = channel\n this.channelRoot = channel.doc()\n this.options = options\n this.dateFolder = new DateFolder(this.channelRoot, 'chat.ttl')\n this.div = null // : HTMLElement\n }\n\n /* Store a new message in the web,\n */\n async createMessage (text) {\n return this.updateMessage(text)\n }\n\n /* Store a new message in the web,\n as a replacement for an existing one.\n The old one iis left, and the two are linked\n */\n async updateMessage (text, oldMsg = null, deleteIt) {\n const sts = []\n const now = new Date()\n const timestamp = '' + now.getTime()\n const dateStamp = $rdf.term(now)\n const chatDocument = oldMsg ? oldMsg.doc() : this.dateFolder.leafDocumentFromDate(now)\n const message = store.sym(chatDocument.uri + '#' + 'Msg' + timestamp)\n // const content = store.literal(text)\n\n const me = authn.currentUser() // If already logged on\n\n if (oldMsg) { // edit message replaces old one\n sts.push($rdf.st(mostRecentVersion(oldMsg), ns.dct('isReplacedBy'), message, chatDocument))\n if (deleteIt) {\n sts.push($rdf.st(message, ns.schema('dateDeleted'), dateStamp, chatDocument))\n }\n } else { // link new message to channel\n sts.push($rdf.st(this.channel, ns.wf('message'), message, chatDocument))\n }\n sts.push(\n $rdf.st(message, ns.sioc('content'), store.literal(text), chatDocument)\n )\n sts.push(\n $rdf.st(message, ns.dct('created'), dateStamp, chatDocument)\n )\n if (me) {\n sts.push($rdf.st(message, ns.foaf('maker'), me, chatDocument))\n }\n try {\n await store.updater.update([], sts)\n } catch (err) {\n const msg = 'Error saving chat message: ' + err\n debug.warn(msg)\n alert(msg)\n throw new Error(msg)\n }\n return message\n }\n\n /* Mark a message as deleted\n * Wee add a new version of the message,m witha deletion flag (deletion date)\n * so that the deletion can be revoked by adding another non-deleted update\n */\n async deleteMessage (message) {\n return this.updateMessage('(message deleted)', message, true)\n }\n} // class ChatChannel\n\nexport function originalVersion (message) {\n let msg = message\n while (msg) {\n message = msg\n msg = store.any(null, ns.dct('isReplacedBy'), message, message.doc())\n }\n return message\n}\n\nexport function mostRecentVersion (message) {\n let msg = message\n while (msg) {\n message = msg\n msg = store.any(message, ns.dct('isReplacedBy'), null, message.doc())\n }\n return message\n}\n\nexport function isDeleted (message) {\n return store.holds(message, ns.schema('dateDeleted'), null, message.doc())\n}\n\nexport function isReplaced (message) {\n return store.holds(message, ns.dct('isReplacedBy'), null, message.doc())\n}\n\nexport function isHidden (message) {\n return this.isDeleted(message) || this.isReplaced(message)\n}\n\n// A Nickname for a person\n\nexport function nick (person) {\n const s = store.any(person, ns.foaf('nick'))\n if (s) return '' + s.value\n return '' + utils.label(person)\n}\n\nexport async function _createIfNotExists (doc, contentType = 'text/turtle', data = '') {\n let response\n try {\n response = await store.fetcher.load(doc)\n } catch (err) {\n if (err.response.status === 404) {\n debug.log(\n 'createIfNotExists: doc does NOT exist, will create... ' + doc\n )\n try {\n response = await store.fetcher.webOperation('PUT', doc.uri, {\n data,\n contentType\n })\n } catch (err) {\n debug.log('createIfNotExists doc FAILED: ' + doc + ': ' + err)\n throw err\n }\n delete store.fetcher.requested[doc.uri] // delete cached 404 error\n // debug.log('createIfNotExists doc created ok ' + doc)\n return response\n } else {\n debug.log(\n 'createIfNotExists doc load error NOT 404: ' + doc + ': ' + err\n )\n throw err\n }\n }\n // debug.log('createIfNotExists: doc exists, all good: ' + doc)\n return response\n}\n// ends\n"],"mappings":"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"}
1
+ {"version":3,"file":"chatLogic.js","names":["debug","_interopRequireWildcard","require","_dateFolder","_solidLogic","ns","$rdf","utils","_signature","_keys","_getRequireWildcardCache","nodeInterop","WeakMap","cacheBabelInterop","cacheNodeInterop","obj","__esModule","_typeof","cache","has","get","newObj","hasPropertyDescriptor","Object","defineProperty","getOwnPropertyDescriptor","key","prototype","hasOwnProperty","call","desc","set","ChatChannel","channel","options","_classCallCheck2","channelRoot","doc","dateFolder","DateFolder","div","_createClass2","value","_createMessage","_asyncToGenerator2","_regenerator","mark","_callee","text","wrap","_callee$","_context","prev","next","abrupt","updateMessage","stop","createMessage","_x","apply","arguments","_updateMessage","_this","oldMsg","length","undefined","deleteIt","_callee2","sts","now","timestamp","dateStamp","chatDocument","message","me","msg","oldMsgMaker","errMsg","privateKey","sig","_errMsg","_callee2$","_context2","Date","getTime","term","leafDocumentFromDate","store","sym","uri","authn","currentUser","getBlankMsg","id","any","foaf","push","st","mostRecentVersion","dct","schema","warn","alert","Error","wf","sioc","literal","content","created","maker","getPrivateKey","sent","signMsg","concat","SEC","lit","updater","update","t0","_x2","_deleteMessage","_callee3","_callee3$","_context3","deleteMessage","_x3","exports","originalVersion","isDeleted","holds","isReplaced","isHidden","nick","person","s","label","_createIfNotExists","_x4","_createIfNotExists2","contentType","data","_callee4","response","_callee4$","_context4","fetcher","load","status","log","webOperation","t1","requested"],"sources":["../../src/chat/chatLogic.js"],"sourcesContent":["/**\n * Contains the [[ChatChannel]] class and logic for Solid Chat\n * @packageDocumentation\n */\n\nimport * as debug from '../debug'\nimport { DateFolder } from './dateFolder'\nimport { store, authn } from 'solid-logic'\nimport * as ns from '../ns'\nimport * as $rdf from 'rdflib' // pull in first avoid cross-refs\nimport * as utils from '../utils'\nimport { getBlankMsg, signMsg, SEC, verifySignature } from './signature'\nimport { getPrivateKey, getPublicKey } from './keys'\n\n/* The Solid logic for a 'LongChat'\n*/\n/**\n * Common code for a chat (discussion area of messages about something)\n * This version runs over a series of files for different time periods\n *\n * Parameters for the whole chat like its title are stored on\n * index.ttl#this and the chats messages are stored in YYYY/MM/DD/chat.ttl\n *\n */\n\nexport class ChatChannel {\n constructor (channel, options) {\n this.channel = channel\n this.channelRoot = channel.doc()\n this.options = options\n this.dateFolder = new DateFolder(this.channelRoot, 'chat.ttl')\n this.div = null // : HTMLElement\n }\n\n /* Store a new message in the web,\n */\n async createMessage (text) {\n return this.updateMessage(text)\n }\n\n /* Store a new message in the web,\n as a replacement for an existing one.\n The old one iis left, and the two are linked\n */\n async updateMessage (text, oldMsg = null, deleteIt) {\n const sts = []\n const now = new Date()\n const timestamp = '' + now.getTime()\n const dateStamp = $rdf.term(now)\n const chatDocument = oldMsg ? oldMsg.doc() : this.dateFolder.leafDocumentFromDate(now)\n const message = store.sym(chatDocument.uri + '#' + 'Msg' + timestamp)\n // const content = store.literal(text)\n\n const me = authn.currentUser() // If already logged on\n\n const msg = getBlankMsg()\n msg.id = message.uri\n if (oldMsg) { // edit message replaces old one\n const oldMsgMaker = store.any(oldMsg, ns.foaf('maker')) // may not be needed here, but needed on READ\n if (oldMsgMaker.uri === me.uri) {\n sts.push($rdf.st(mostRecentVersion(oldMsg), ns.dct('isReplacedBy'), message, chatDocument))\n if (deleteIt) { // we need to add a specific signature, else anyone can delete a msg ?\n sts.push($rdf.st(message, ns.schema('dateDeleted'), dateStamp, chatDocument))\n }\n } else {\n const errMsg = 'Error you cannot delete/edit a message from someone else : \\n' + oldMsgMaker.uri\n debug.warn(errMsg)\n alert(errMsg)\n throw new Error(errMsg)\n }\n } else { // link new message to channel\n sts.push($rdf.st(this.channel, ns.wf('message'), message, chatDocument))\n }\n sts.push(\n $rdf.st(message, ns.sioc('content'), store.literal(text), chatDocument)\n )\n msg.content = text\n\n sts.push(\n $rdf.st(message, ns.dct('created'), dateStamp, chatDocument)\n )\n msg.created = dateStamp.value\n if (me) {\n sts.push($rdf.st(message, ns.foaf('maker'), me, chatDocument))\n msg.maker = me.uri\n // privateKey the cached private key of me, cached in store\n const privateKey = await getPrivateKey(me) // me.uri)\n\n const sig = signMsg(msg, privateKey)\n sts.push($rdf.st(message, $rdf.sym(`${SEC}proofValue`), $rdf.lit(sig), chatDocument))\n }\n try {\n await store.updater.update([], sts)\n } catch (err) {\n const errMsg = 'Error saving chat message: ' + err\n debug.warn(errMsg)\n alert(errMsg)\n throw new Error(errMsg)\n }\n return message\n }\n\n /* Mark a message as deleted\n * Wee add a new version of the message,m witha deletion flag (deletion date)\n * so that the deletion can be revoked by adding another non-deleted update\n */\n async deleteMessage (message) {\n return this.updateMessage('(message deleted)', message, true)\n }\n} // class ChatChannel\n\nexport function originalVersion (message) {\n let msg = message\n while (msg) {\n message = msg\n msg = store.any(null, ns.dct('isReplacedBy'), message, message.doc())\n }\n return message\n}\n\nexport function mostRecentVersion (message) {\n let msg = message\n while (msg) {\n message = msg\n msg = store.any(message, ns.dct('isReplacedBy'), null, message.doc())\n }\n return message\n}\n\nexport function isDeleted (message) {\n return store.holds(message, ns.schema('dateDeleted'), null, message.doc())\n}\n\nexport function isReplaced (message) {\n return store.holds(message, ns.dct('isReplacedBy'), null, message.doc())\n}\n\nexport function isHidden (message) {\n return this.isDeleted(message) || this.isReplaced(message)\n}\n\n// A Nickname for a person\n\nexport function nick (person) {\n const s = store.any(person, ns.foaf('nick'))\n if (s) return '' + s.value\n return '' + utils.label(person)\n}\n\nexport async function _createIfNotExists (doc, contentType = 'text/turtle', data = '') {\n let response\n try {\n response = await store.fetcher.load(doc)\n } catch (err) {\n if (err.response.status === 404) {\n debug.log(\n 'createIfNotExists: doc does NOT exist, will create... ' + doc\n )\n try {\n response = await store.fetcher.webOperation('PUT', doc.uri, {\n data,\n contentType\n })\n } catch (err) {\n debug.log('createIfNotExists doc FAILED: ' + doc + ': ' + err)\n throw err\n }\n delete store.fetcher.requested[doc.uri] // delete cached 404 error\n // debug.log('createIfNotExists doc created ok ' + doc)\n return response\n } else {\n debug.log(\n 'createIfNotExists doc load error NOT 404: ' + doc + ': ' + err\n )\n throw err\n }\n }\n return response\n}\n// ends\n"],"mappings":"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"}
@@ -0,0 +1,13 @@
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
@@ -0,0 +1 @@
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,mBA4CpD"}
@@ -0,0 +1,233 @@
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 ns = _interopRequireWildcard(require("../ns"));
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 _callee2(webId) {
43
+ var publicKeyDoc, key;
44
+ return _regenerator["default"].wrap(function _callee2$(_context2) {
45
+ while (1) switch (_context2.prev = _context2.next) {
46
+ case 0:
47
+ _context2.next = 2;
48
+ return _solidLogic.store.fetcher.load(webId);
49
+ case 2:
50
+ _context2.next = 4;
51
+ return (0, _accessData.pubKeyUrl)(webId);
52
+ case 4:
53
+ publicKeyDoc = _context2.sent;
54
+ _context2.prev = 5;
55
+ _context2.next = 8;
56
+ return _solidLogic.store.fetcher.load(publicKeyDoc);
57
+ case 8:
58
+ // url.href)
59
+ key = _solidLogic.store.any(webId, ns.solid('publicKey'));
60
+ return _context2.abrupt("return", key === null || key === void 0 ? void 0 : key.value);
61
+ case 12:
62
+ _context2.prev = 12;
63
+ _context2.t0 = _context2["catch"](5);
64
+ return _context2.abrupt("return", undefined);
65
+ case 15:
66
+ case "end":
67
+ return _context2.stop();
68
+ }
69
+ }, _callee2, null, [[5, 12]]);
70
+ }));
71
+ return _getPublicKey.apply(this, arguments);
72
+ }
73
+ function getPrivateKey(_x2) {
74
+ return _getPrivateKey.apply(this, arguments);
75
+ }
76
+ function _getPrivateKey() {
77
+ _getPrivateKey = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee3(webId) {
78
+ var publicKeyDoc, privateKeyDoc, publicKey, privateKey, validPublicKey, del, add, newPublicKey, keyContainer;
79
+ return _regenerator["default"].wrap(function _callee3$(_context3) {
80
+ while (1) switch (_context3.prev = _context3.next) {
81
+ case 0:
82
+ _context3.next = 2;
83
+ return _solidLogic.store.fetcher.load(webId);
84
+ case 2:
85
+ _context3.next = 4;
86
+ return (0, _accessData.pubKeyUrl)(webId);
87
+ case 4:
88
+ publicKeyDoc = _context3.sent;
89
+ _context3.next = 7;
90
+ return (0, _accessData.privKeyUrl)(webId);
91
+ case 7:
92
+ privateKeyDoc = _context3.sent;
93
+ _context3.next = 10;
94
+ return (0, _accessData.getExistingPublicKey)(webId, publicKeyDoc);
95
+ case 10:
96
+ publicKey = _context3.sent;
97
+ _context3.next = 13;
98
+ return (0, _accessData.getExistingPrivateKey)(webId, privateKeyDoc);
99
+ case 13:
100
+ privateKey = _context3.sent;
101
+ // is publicKey valid ?
102
+ validPublicKey = true;
103
+ if (privateKey && publicKey !== generatePublicKey(privateKey)) {
104
+ 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;
105
+ }
106
+
107
+ // create key pair or repair publicKey
108
+ if (!(!privateKey || !publicKey || !validPublicKey)) {
109
+ _context3.next = 34;
110
+ break;
111
+ }
112
+ del = [];
113
+ add = [];
114
+ if (privateKey) {
115
+ _context3.next = 24;
116
+ break;
117
+ }
118
+ // add = []
119
+ privateKey = generatePrivateKey();
120
+ add = [$rdf.st(webId, ns.solid('privateKey'), $rdf.literal(privateKey), _solidLogic.store.sym(privateKeyDoc))];
121
+ _context3.next = 24;
122
+ return saveKey(privateKeyDoc, [], add, webId.uri);
123
+ case 24:
124
+ if (!(!publicKey || !validPublicKey)) {
125
+ _context3.next = 31;
126
+ break;
127
+ }
128
+ del = [];
129
+ // delete invalid public key
130
+ if (publicKey) {
131
+ del = [$rdf.st(webId, ns.solid('publicKey'), $rdf.lit(publicKey), _solidLogic.store.sym(publicKeyDoc))];
132
+ debug.log(del);
133
+ }
134
+ // update new valid key
135
+ newPublicKey = generatePublicKey(privateKey);
136
+ add = [$rdf.st(webId, ns.solid('publicKey'), $rdf.literal(newPublicKey), _solidLogic.store.sym(publicKeyDoc))];
137
+ _context3.next = 31;
138
+ return saveKey(publicKeyDoc, del, add);
139
+ case 31:
140
+ keyContainer = privateKeyDoc.substring(0, privateKeyDoc.lastIndexOf('/') + 1);
141
+ _context3.next = 34;
142
+ return (0, _acl.setAcl)(keyContainer, (0, _acl.keyContainerAclBody)(webId.uri));
143
+ case 34:
144
+ return _context3.abrupt("return", privateKey);
145
+ case 35:
146
+ case "end":
147
+ return _context3.stop();
148
+ }
149
+ }, _callee3);
150
+ }));
151
+ return _getPrivateKey.apply(this, arguments);
152
+ }
153
+ var deleteKeyAcl = /*#__PURE__*/function () {
154
+ var _ref = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee(keyDoc) {
155
+ var keyAclDoc, response;
156
+ return _regenerator["default"].wrap(function _callee$(_context) {
157
+ while (1) switch (_context.prev = _context.next) {
158
+ case 0:
159
+ _context.next = 2;
160
+ return _solidLogic.store.fetcher.load(keyDoc);
161
+ case 2:
162
+ keyAclDoc = _solidLogic.store.any(_solidLogic.store.sym(keyDoc), _solidLogic.store.sym('http://www.iana.org/assignments/link-relations/acl'));
163
+ if (!keyAclDoc) {
164
+ _context.next = 16;
165
+ break;
166
+ }
167
+ _context.prev = 4;
168
+ _context.next = 7;
169
+ return _solidLogic.store.fetcher.webOperation('DELETE', keyAclDoc.value);
170
+ case 7:
171
+ response = _context.sent;
172
+ // this may fail if webId is not an owner
173
+ debug.log('delete ' + keyAclDoc.value + ' ' + response.status); // should test 404 and 2xx
174
+ _context.next = 16;
175
+ break;
176
+ case 11:
177
+ _context.prev = 11;
178
+ _context.t0 = _context["catch"](4);
179
+ if (!(_context.t0.response.status !== 404)) {
180
+ _context.next = 15;
181
+ break;
182
+ }
183
+ throw new Error(_context.t0);
184
+ case 15:
185
+ debug.log('delete ' + keyAclDoc.value + ' ' + _context.t0.response.status); // should test 404 and 2xx
186
+ case 16:
187
+ case "end":
188
+ return _context.stop();
189
+ }
190
+ }, _callee, null, [[4, 11]]);
191
+ }));
192
+ return function deleteKeyAcl(_x3) {
193
+ return _ref.apply(this, arguments);
194
+ };
195
+ }();
196
+
197
+ /**
198
+ * delete acl if keydoc exists
199
+ * create/edit keyDoc
200
+ * set keyDoc acl
201
+ */
202
+ function saveKey(_x4, _x5, _x6) {
203
+ return _saveKey.apply(this, arguments);
204
+ }
205
+ function _saveKey() {
206
+ _saveKey = (0, _asyncToGenerator2["default"])(function (keyDoc, del, add) {
207
+ var me = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : '';
208
+ return /*#__PURE__*/_regenerator["default"].mark(function _callee4() {
209
+ var aclBody;
210
+ return _regenerator["default"].wrap(function _callee4$(_context4) {
211
+ while (1) switch (_context4.prev = _context4.next) {
212
+ case 0:
213
+ _context4.next = 2;
214
+ return deleteKeyAcl(keyDoc);
215
+ case 2:
216
+ _context4.next = 4;
217
+ return _solidLogic.store.updater.updateMany(del, add);
218
+ case 4:
219
+ // or a promise store.updater.update ?
220
+ // create READ only ACL
221
+ aclBody = (0, _acl.keyAclBody)(keyDoc, me);
222
+ _context4.next = 7;
223
+ return (0, _acl.setAcl)(keyDoc, aclBody);
224
+ case 7:
225
+ case "end":
226
+ return _context4.stop();
227
+ }
228
+ }, _callee4);
229
+ })();
230
+ });
231
+ return _saveKey.apply(this, arguments);
232
+ }
233
+ //# sourceMappingURL=keys.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"keys.js","names":["debug","_interopRequireWildcard","require","_secp256k","_utils","ns","_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","_callee2","webId","publicKeyDoc","wrap","_callee2$","_context2","prev","next","store","fetcher","load","pubKeyUrl","sent","any","solid","abrupt","value","t0","undefined","stop","getPrivateKey","_x2","_getPrivateKey","_callee3","privateKeyDoc","publicKey","validPublicKey","del","add","newPublicKey","keyContainer","_callee3$","_context3","privKeyUrl","getExistingPublicKey","getExistingPrivateKey","confirm","uri","st","literal","sym","saveKey","lit","log","substring","lastIndexOf","setAcl","keyContainerAclBody","deleteKeyAcl","_ref","_callee","keyDoc","keyAclDoc","response","_callee$","_context","webOperation","status","Error","_x3","_x4","_x5","_x6","_saveKey","me","length","_callee4","aclBody","_callee4$","_context4","updater","updateMany","keyAclBody"],"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 * as ns from '../ns'\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, ns.solid('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\r\n if (!privateKey) {\r\n // add = []\r\n privateKey = generatePrivateKey()\r\n add = [$rdf.st(webId, ns.solid('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, ns.solid('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, ns.solid('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\nconst deleteKeyAcl = async (keyDoc: string) => {\r\n await store.fetcher.load(keyDoc)\r\n\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\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 deleteKeyAcl(keyDoc)\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}\r\n"],"mappings":"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"}
@@ -27,6 +27,8 @@ var pad = _interopRequireWildcard(require("../pad"));
27
27
  var style = _interopRequireWildcard(require("../style"));
28
28
  var utils = _interopRequireWildcard(require("../utils"));
29
29
  var widgets = _interopRequireWildcard(require("../widgets"));
30
+ var _signature = require("./signature");
31
+ var _keys = require("./keys");
30
32
  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); }
31
33
  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; }
32
34
  function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }
@@ -37,7 +39,11 @@ var messageBodyStyle = style.messageBodyStyle;
37
39
  var label = utils.label;
38
40
 
39
41
  /**
42
+ * elementForImageURI
40
43
  * HTML component for an image
44
+ * @param imageUri
45
+ * @param options { inlineImageHeightEms }
46
+ * @returns HTMLAnchorElement For Image
41
47
  */
42
48
  function elementForImageURI(imageUri, options) {
43
49
  var img = dom.createElement('img');
@@ -67,21 +73,27 @@ var anchor = function anchor(text, term) {
67
73
  a.textContent = text;
68
74
  return a;
69
75
  };
70
- function nick(person) {
76
+ function nickname(person) {
71
77
  var s = _solidLogic.store.any(person, ns.foaf('nick'));
72
78
  if (s) return '' + s.value;
73
79
  return '' + label(person);
74
80
  }
75
81
 
76
82
  /**
83
+ * creatorAndDate
77
84
  * Displays creator and date for a chat message
78
85
  * inside the `td1` element
86
+ * @param td1
87
+ * @param creator
88
+ * @param date
89
+ * @param message
90
+ * @returns HTMLAnchorElement For Image
79
91
  */
80
92
  function creatorAndDate(td1, creator, date, message) {
81
- var nickAnchor = td1.appendChild(anchor(nick(creator), creator));
93
+ var nickAnchor = td1.appendChild(anchor(nickname(creator), creator));
82
94
  if (creator.uri) {
83
95
  _solidLogic.store.fetcher.nowOrWhenFetched(creator.doc(), undefined, function (_ok, _body) {
84
- nickAnchor.textContent = nick(creator);
96
+ nickAnchor.textContent = nickname(creator);
85
97
  });
86
98
  }
87
99
  td1.appendChild(dom.createElement('br'));
@@ -89,14 +101,20 @@ function creatorAndDate(td1, creator, date, message) {
89
101
  }
90
102
 
91
103
  /**
104
+ * creatorAndDateHorizontal
92
105
  * Horizontally displays creator and date for a chat message
93
106
  * inside the `td1` element
107
+ * @param td1
108
+ * @param creator
109
+ * @param date
110
+ * @param message
111
+ * @returns HTMLAnchorElement For Image
94
112
  */
95
113
  function creatorAndDateHorizontal(td1, creator, date, message) {
96
114
  var nickAnchor = td1.appendChild(anchor(label(creator), creator));
97
115
  if (creator.uri) {
98
116
  _solidLogic.store.fetcher.nowOrWhenFetched(creator.doc(), undefined, function (_ok, _body) {
99
- nickAnchor.textContent = nick(creator);
117
+ nickAnchor.textContent = nickname(creator);
100
118
  });
101
119
  }
102
120
  var dateBit = td1.appendChild(anchor(date, message));
@@ -106,19 +124,61 @@ function creatorAndDateHorizontal(td1, creator, date, message) {
106
124
  }
107
125
 
108
126
  /**
127
+ * renderMessageRow
109
128
  * Renders a chat message, read-only mode
129
+ * @param channelObject
130
+ * @param message
131
+ * @param fresh
132
+ * @param options
133
+ * @param userContext
134
+ * @returns Message Row HTML Table Element
110
135
  */
111
136
  function renderMessageRow(channelObject, message, fresh, options, userContext) {
137
+ var unsignedMessage = false;
112
138
  var colorizeByAuthor = options.colorizeByAuthor === '1' || options.colorizeByAuthor === true;
113
139
  var creator = _solidLogic.store.any(message, ns.foaf('maker'));
114
140
  var date = _solidLogic.store.any(message, ns.dct('created'));
115
141
  var latestVersion = (0, _chatLogic.mostRecentVersion)(message);
116
- var content = _solidLogic.store.any(latestVersion, ns.sioc('content'));
142
+ var latestVersionCreator = _solidLogic.store.any(latestVersion, ns.foaf('maker'));
143
+
144
+ // use latest content if same owner, else use original
145
+ var msgId = creator.uri === latestVersionCreator.uri ? latestVersion : message;
146
+ var content = _solidLogic.store.any(msgId, ns.sioc('content'));
147
+ var signature = _solidLogic.store.any(msgId, $rdf.sym("".concat(_signature.SEC, "proofValue")));
148
+
149
+ // set message object
150
+ var msg = (0, _signature.getBlankMsg)();
151
+ msg.id = msgId.uri;
152
+ msg.created = _solidLogic.store.any(msgId, ns.dct('created')).value;
153
+ msg.content = content.value;
154
+ msg.maker = creator.uri;
155
+
156
+ // unsigned message
157
+ if (!(signature !== null && signature !== void 0 && signature.value)) {
158
+ unsignedMessage = true;
159
+ debug.warn(msgId.uri + ' is unsigned'); // TODO replace with UI (colored message ?)
160
+ } else {
161
+ // signed message, get public key and check signature
162
+ (0, _keys.getPublicKey)(creator).then(function (publicKey) {
163
+ debug.log(creator.uri + '\n' + msg.created + '\n' + msg.id + '\n' + publicKey);
164
+ if (!publicKey) {
165
+ // TODO try to recreate the publicKey
166
+ // if(me.uri === creator.uri) await getPrivateKey(creator)
167
+ debug.warn('message is signed but ' + creator.uri + ' is missing publicKey');
168
+ }
169
+ // check that publicKey is a valid hex string
170
+ var regex = /[0-9A-Fa-f]{6}/g;
171
+ if (!(publicKey !== null && publicKey !== void 0 && publicKey.match(regex))) debug.warn('invalid publicKey hex string\n' + creator.uri + '\n' + publicKey);
172
+ // verify signature
173
+ else if (signature !== null && signature !== void 0 && signature.value && !(0, _signature.verifySignature)(signature === null || signature === void 0 ? void 0 : signature.value, msg, publicKey)) debug.warn('invalid signature\n' + msg.id);
174
+ });
175
+ }
117
176
  var originalMessage = (0, _chatLogic.originalVersion)(message);
118
177
  var edited = !message.sameTerm(originalMessage);
119
178
  var sortDate = _solidLogic.store.the(originalMessage, ns.dct('created'), null, originalMessage.doc()); // In message
120
179
 
121
180
  var messageRow = dom.createElement('tr');
181
+ if (unsignedMessage) messageRow.setAttribute('style', 'background-color: red');
122
182
  messageRow.AJAR_date = sortDate.value;
123
183
  messageRow.AJAR_subject = message;
124
184
  var td1 = dom.createElement('td');
@@ -207,7 +267,8 @@ function renderMessageRow(channelObject, message, fresh, options, userContext) {
207
267
  toolsTD.appendChild(tools);
208
268
  });
209
269
  return messageRow;
210
- }
270
+ } // END OF RENDERMESSAGE
271
+
211
272
  function switchToEditor(messageRow, message, channelObject, userContext) {
212
273
  var messageTable = messageRow.parentNode;
213
274
  var editRow = renderMessageEditor(channelObject, messageTable, userContext, channelObject.options, (0, _chatLogic.mostRecentVersion)(message));
@@ -252,8 +313,6 @@ function renderMessageEditor(channelObject, messageTable, userContext, options,
252
313
  while (1) switch (_context7.prev = _context7.next) {
253
314
  case 0:
254
315
  sendComplete = function _sendComplete(message, _text2) {
255
- // const dateStamp = store.any(message, ns.dct('created'), null, message.doc())
256
- // const content = $rdf.literal(text2)
257
316
  (0, _infinite.insertMessageIntoTable)(channelObject, messageTable, message, false, options, userContext); // not green
258
317
 
259
318
  if (originalMessage) {