solid-ui 2.4.27-dc50c4e2 → 2.4.27-ddcbbf49
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 +6 -1
- package/dist/solid-ui.js +682 -322
- package/dist/solid-ui.js.map +1 -1
- package/dist/solid-ui.min.js +1 -1
- package/dist/solid-ui.min.js.map +1 -1
- package/lib/chat/chatLogic.js +16 -23
- package/lib/chat/chatLogic.js.map +1 -1
- package/lib/chat/keys.d.ts +10 -2
- package/lib/chat/keys.d.ts.map +1 -1
- package/lib/chat/keys.js +182 -111
- package/lib/chat/keys.js.map +1 -1
- package/lib/chat/message.js +55 -23
- package/lib/chat/message.js.map +1 -1
- package/lib/chat/signature.d.ts +0 -3
- package/lib/chat/signature.d.ts.map +1 -1
- package/lib/chat/signature.js +26 -24
- package/lib/chat/signature.js.map +1 -1
- package/lib/utils/keyHelpers/accessData.d.ts +10 -0
- package/lib/utils/keyHelpers/accessData.d.ts.map +1 -0
- package/lib/utils/keyHelpers/accessData.js +232 -0
- package/lib/utils/keyHelpers/accessData.js.map +1 -0
- package/lib/utils/keyHelpers/acl.d.ts +20 -0
- package/lib/utils/keyHelpers/acl.d.ts.map +1 -0
- package/lib/utils/keyHelpers/acl.js +93 -0
- package/lib/utils/keyHelpers/acl.js.map +1 -0
- package/lib/versionInfo.js +2 -2
- package/lib/versionInfo.js.map +1 -1
- package/package.json +1 -1
package/lib/chat/message.js
CHANGED
|
@@ -39,7 +39,11 @@ var messageBodyStyle = style.messageBodyStyle;
|
|
|
39
39
|
var label = utils.label;
|
|
40
40
|
|
|
41
41
|
/**
|
|
42
|
+
* elementForImageURI
|
|
42
43
|
* HTML component for an image
|
|
44
|
+
* @param imageUri
|
|
45
|
+
* @param options { inlineImageHeightEms }
|
|
46
|
+
* @returns HTMLAnchorElement For Image
|
|
43
47
|
*/
|
|
44
48
|
function elementForImageURI(imageUri, options) {
|
|
45
49
|
var img = dom.createElement('img');
|
|
@@ -69,21 +73,27 @@ var anchor = function anchor(text, term) {
|
|
|
69
73
|
a.textContent = text;
|
|
70
74
|
return a;
|
|
71
75
|
};
|
|
72
|
-
function
|
|
76
|
+
function nickname(person) {
|
|
73
77
|
var s = _solidLogic.store.any(person, ns.foaf('nick'));
|
|
74
78
|
if (s) return '' + s.value;
|
|
75
79
|
return '' + label(person);
|
|
76
80
|
}
|
|
77
81
|
|
|
78
82
|
/**
|
|
83
|
+
* creatorAndDate
|
|
79
84
|
* Displays creator and date for a chat message
|
|
80
85
|
* inside the `td1` element
|
|
86
|
+
* @param td1
|
|
87
|
+
* @param creator
|
|
88
|
+
* @param date
|
|
89
|
+
* @param message
|
|
90
|
+
* @returns HTMLAnchorElement For Image
|
|
81
91
|
*/
|
|
82
92
|
function creatorAndDate(td1, creator, date, message) {
|
|
83
|
-
var nickAnchor = td1.appendChild(anchor(
|
|
93
|
+
var nickAnchor = td1.appendChild(anchor(nickname(creator), creator));
|
|
84
94
|
if (creator.uri) {
|
|
85
95
|
_solidLogic.store.fetcher.nowOrWhenFetched(creator.doc(), undefined, function (_ok, _body) {
|
|
86
|
-
nickAnchor.textContent =
|
|
96
|
+
nickAnchor.textContent = nickname(creator);
|
|
87
97
|
});
|
|
88
98
|
}
|
|
89
99
|
td1.appendChild(dom.createElement('br'));
|
|
@@ -91,14 +101,20 @@ function creatorAndDate(td1, creator, date, message) {
|
|
|
91
101
|
}
|
|
92
102
|
|
|
93
103
|
/**
|
|
104
|
+
* creatorAndDateHorizontal
|
|
94
105
|
* Horizontally displays creator and date for a chat message
|
|
95
106
|
* inside the `td1` element
|
|
107
|
+
* @param td1
|
|
108
|
+
* @param creator
|
|
109
|
+
* @param date
|
|
110
|
+
* @param message
|
|
111
|
+
* @returns HTMLAnchorElement For Image
|
|
96
112
|
*/
|
|
97
113
|
function creatorAndDateHorizontal(td1, creator, date, message) {
|
|
98
114
|
var nickAnchor = td1.appendChild(anchor(label(creator), creator));
|
|
99
115
|
if (creator.uri) {
|
|
100
116
|
_solidLogic.store.fetcher.nowOrWhenFetched(creator.doc(), undefined, function (_ok, _body) {
|
|
101
|
-
nickAnchor.textContent =
|
|
117
|
+
nickAnchor.textContent = nickname(creator);
|
|
102
118
|
});
|
|
103
119
|
}
|
|
104
120
|
var dateBit = td1.appendChild(anchor(date, message));
|
|
@@ -108,44 +124,61 @@ function creatorAndDateHorizontal(td1, creator, date, message) {
|
|
|
108
124
|
}
|
|
109
125
|
|
|
110
126
|
/**
|
|
127
|
+
* renderMessageRow
|
|
111
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
|
|
112
135
|
*/
|
|
113
136
|
function renderMessageRow(channelObject, message, fresh, options, userContext) {
|
|
137
|
+
var unsignedMessage = false;
|
|
114
138
|
var colorizeByAuthor = options.colorizeByAuthor === '1' || options.colorizeByAuthor === true;
|
|
115
139
|
var creator = _solidLogic.store.any(message, ns.foaf('maker'));
|
|
116
140
|
var date = _solidLogic.store.any(message, ns.dct('created'));
|
|
117
141
|
var latestVersion = (0, _chatLogic.mostRecentVersion)(message);
|
|
118
142
|
var latestVersionCreator = _solidLogic.store.any(latestVersion, ns.foaf('maker'));
|
|
143
|
+
|
|
119
144
|
// use latest content if same owner, else use original
|
|
120
|
-
var msgId = creator === latestVersionCreator ? latestVersion : message;
|
|
145
|
+
var msgId = creator.uri === latestVersionCreator.uri ? latestVersion : message;
|
|
121
146
|
var content = _solidLogic.store.any(msgId, ns.sioc('content'));
|
|
122
|
-
var signature = _solidLogic.store.any(msgId, $rdf.sym("".concat(_signature.SEC, "
|
|
123
|
-
debug.log('alain ' + (signature === null || signature === void 0 ? void 0 : signature.value));
|
|
147
|
+
var signature = _solidLogic.store.any(msgId, $rdf.sym("".concat(_signature.SEC, "proofValue")));
|
|
124
148
|
|
|
125
|
-
//
|
|
149
|
+
// set message object
|
|
126
150
|
var msg = (0, _signature.getBlankMsg)();
|
|
127
151
|
msg.id = msgId.uri;
|
|
128
152
|
msg.created = _solidLogic.store.any(msgId, ns.dct('created')).value;
|
|
129
153
|
msg.content = content.value;
|
|
130
154
|
msg.maker = creator.uri;
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
debug.warn(
|
|
136
|
-
|
|
137
|
-
//
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
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
|
+
});
|
|
143
175
|
}
|
|
144
176
|
var originalMessage = (0, _chatLogic.originalVersion)(message);
|
|
145
177
|
var edited = !message.sameTerm(originalMessage);
|
|
146
178
|
var sortDate = _solidLogic.store.the(originalMessage, ns.dct('created'), null, originalMessage.doc()); // In message
|
|
147
179
|
|
|
148
180
|
var messageRow = dom.createElement('tr');
|
|
181
|
+
if (unsignedMessage) messageRow.setAttribute('style', 'background-color: red');
|
|
149
182
|
messageRow.AJAR_date = sortDate.value;
|
|
150
183
|
messageRow.AJAR_subject = message;
|
|
151
184
|
var td1 = dom.createElement('td');
|
|
@@ -234,7 +267,8 @@ function renderMessageRow(channelObject, message, fresh, options, userContext) {
|
|
|
234
267
|
toolsTD.appendChild(tools);
|
|
235
268
|
});
|
|
236
269
|
return messageRow;
|
|
237
|
-
}
|
|
270
|
+
} // END OF RENDERMESSAGE
|
|
271
|
+
|
|
238
272
|
function switchToEditor(messageRow, message, channelObject, userContext) {
|
|
239
273
|
var messageTable = messageRow.parentNode;
|
|
240
274
|
var editRow = renderMessageEditor(channelObject, messageTable, userContext, channelObject.options, (0, _chatLogic.mostRecentVersion)(message));
|
|
@@ -279,8 +313,6 @@ function renderMessageEditor(channelObject, messageTable, userContext, options,
|
|
|
279
313
|
while (1) switch (_context7.prev = _context7.next) {
|
|
280
314
|
case 0:
|
|
281
315
|
sendComplete = function _sendComplete(message, _text2) {
|
|
282
|
-
// const dateStamp = store.any(message, ns.dct('created'), null, message.doc())
|
|
283
|
-
// const content = $rdf.literal(text2)
|
|
284
316
|
(0, _infinite.insertMessageIntoTable)(channelObject, messageTable, message, false, options, userContext); // not green
|
|
285
317
|
|
|
286
318
|
if (originalMessage) {
|
package/lib/chat/message.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"message.js","names":["_infinite","require","_messageTools","_bookmarks","_chatLogic","debug","_interopRequireWildcard","_iconBase","_solidLogic","_login","_index","ns","pad","style","utils","widgets","_signature","_keys","_getRequireWildcardCache","nodeInterop","WeakMap","cacheBabelInterop","cacheNodeInterop","obj","__esModule","_typeof","cache","has","get","newObj","hasPropertyDescriptor","Object","defineProperty","getOwnPropertyDescriptor","key","prototype","hasOwnProperty","call","desc","set","_createForOfIteratorHelper","o","allowArrayLike","it","Symbol","iterator","Array","isArray","_unsupportedIterableToArray","length","i","F","s","n","done","value","e","_e","f","TypeError","normalCompletion","didErr","err","step","next","_e2","minLen","_arrayLikeToArray","toString","slice","constructor","name","from","test","arr","len","arr2","dom","window","document","messageBodyStyle","label","elementForImageURI","imageUri","options","img","createElement","height","inlineImageHeightEms","trim","setAttribute","anchor","appendChild","makeDraggable","$rdf","sym","text","term","a","uri","addEventListener","openHrefInOutlineMode","textContent","nick","person","store","any","foaf","creatorAndDate","td1","creator","date","message","nickAnchor","fetcher","nowOrWhenFetched","doc","undefined","_ok","_body","creatorAndDateHorizontal","dateBit","fontSize","marginLeft","renderMessageRow","channelObject","fresh","userContext","colorizeByAuthor","dct","latestVersion","mostRecentVersion","latestVersionCreator","msgId","content","sioc","signature","concat","SEC","log","msg","getBlankMsg","id","created","maker","pubKey","getPublicKey","verifySignature","Error","originalMessage","originalVersion","edited","sameTerm","sortDate","the","messageRow","AJAR_date","AJAR_subject","authorDateOnLeft","setImage","shortDate","bothDates","td2","isURI","para","isImage","expandImagesInline","anc","href","bgcolor","lightColorHash","getBgColor","strip","sentimentStripLinked","children","td3","toolsButton","button","icons","iconBase","_event","toolTR","parentNode","removeChild","toolsTR","tools","messageToolbar","nextSibling","parentElement","insertBefore","toolsTD","switchToEditor","messageTable","editRow","renderMessageEditor","originalRow","visibility","revertEditing","messageEditor","handleFieldInput","_x","_handleFieldInput","apply","arguments","_asyncToGenerator2","_regenerator","mark","_callee5","wrap","_callee5$","_context6","prev","sendMessage","field","stop","_x2","_x3","_sendMessage","_callee6","fromMainField","sendComplete","statusArea","_callee6$","_context7","_sendComplete","_text2","insertMessageIntoTable","oldRow","warn","backgroundColor","disabled","scrollIntoView","newestFirst","focus","select","updateMessage","sent","t0","errorMessageBlock","abrupt","droppedFileHandler","files","base","chatDocument","dir","uploadFiles","_ref","_callee","theFile","destURI","_callee$","_context2","_x4","_x5","droppedURIHandler","_ref2","_callee2","uris","_iterator","_step","_callee2$","_context3","finish","_x6","turnOnInput","getImageDoc","imageDoc","Date","now","tookPicture","_x7","_tookPicture","_callee4","_callee4$","_context5","menuButton","menuHandler","buttonStyle","rhs","me","authn","currentUser","menuOptions","div","newBase","event","chatChannel","lhs","middle","innerHTML","rows","anyValue","_ref3","_callee3","_callee3$","_context4","code","shiftKey","shiftEnterSendsMessage","_x8","makeDropTarget","sendButton","sendIcon","cancelButton","dateFolder","leafDocumentFromDate","media","cameraButton","recordParticipation","channel","context","ensureLoggedIn","then","assign","findBookmarkDocument","_context"],"sources":["../../src/chat/message.js"],"sourcesContent":["/** UI code for individual messages: display them, edit them\n *\n * @packageDocumentation\n */\n\n/* global $rdf */\nimport { insertMessageIntoTable } from './infinite'\nimport { messageToolbar, sentimentStripLinked } from './messageTools'\nimport { findBookmarkDocument } from './bookmarks'\nimport { mostRecentVersion, originalVersion } from './chatLogic'\nimport * as debug from '../debug'\nimport { icons } from '../iconBase'\nimport { store, authn } from 'solid-logic'\nimport { ensureLoggedIn } from '../login/login'\nimport { media } from '../media/index'\nimport * as ns from '../ns'\nimport * as pad from '../pad'\nimport * as style from '../style'\nimport * as utils from '../utils'\nimport * as widgets from '../widgets'\nimport { getBlankMsg, verifySignature, SEC } from './signature'\nimport { getPrivateKey, getPublicKey } from './keys'\n\nconst dom = window.document\nconst messageBodyStyle = style.messageBodyStyle\n\nconst label = utils.label\n\n/**\n * HTML component for an image\n */\nexport function elementForImageURI (imageUri, options) {\n const img = dom.createElement('img')\n let height = '10'\n if (options.inlineImageHeightEms) {\n height = ('' + options.inlineImageHeightEms).trim()\n }\n img.setAttribute(\n 'style',\n 'max-height: ' + height + 'em; border-radius: 1em; margin: 0.7em;'\n )\n // widgets.makeDropTarget(img, handleURIsDroppedOnMugshot, droppedFileHandler)\n if (imageUri) img.setAttribute('src', imageUri)\n const anchor = dom.createElement('a')\n anchor.setAttribute('href', imageUri)\n anchor.setAttribute('target', 'images')\n anchor.appendChild(img)\n widgets.makeDraggable(img, $rdf.sym(imageUri))\n return anchor\n}\n\nconst anchor = function (text, term) {\n // If there is no link return an element anyway\n const a = dom.createElement('a')\n if (term && term.uri) {\n a.setAttribute('href', term.uri)\n a.addEventListener('click', widgets.openHrefInOutlineMode, true)\n a.setAttribute('style', 'color: #3B5998; text-decoration: none; ') // font-weight: bold\n }\n a.textContent = text\n return a\n}\n\nfunction nick (person) {\n const s = store.any(person, ns.foaf('nick'))\n if (s) return '' + s.value\n return '' + label(person)\n}\n\n/**\n * Displays creator and date for a chat message\n * inside the `td1` element\n */\nexport function creatorAndDate (td1, creator, date, message) {\n const nickAnchor = td1.appendChild(anchor(nick(creator), creator))\n if (creator.uri) {\n store.fetcher.nowOrWhenFetched(creator.doc(), undefined, function (\n _ok,\n _body\n ) {\n nickAnchor.textContent = nick(creator)\n })\n }\n td1.appendChild(dom.createElement('br'))\n td1.appendChild(anchor(date, message))\n}\n\n/**\n * Horizontally displays creator and date for a chat message\n * inside the `td1` element\n */\nexport function creatorAndDateHorizontal (td1, creator, date, message) {\n const nickAnchor = td1.appendChild(anchor(label(creator), creator))\n if (creator.uri) {\n store.fetcher.nowOrWhenFetched(creator.doc(), undefined, function (\n _ok,\n _body\n ) {\n nickAnchor.textContent = nick(creator)\n })\n }\n const dateBit = td1.appendChild(anchor(date, message))\n dateBit.style.fontSize = '80%'\n dateBit.style.marginLeft = '1em'\n td1.appendChild(dom.createElement('br'))\n}\n\n/**\n * Renders a chat message, read-only mode\n */\nexport function renderMessageRow (channelObject, message, fresh, options, userContext) {\n const colorizeByAuthor =\n options.colorizeByAuthor === '1' || options.colorizeByAuthor === true\n\n const creator = store.any(message, ns.foaf('maker'))\n const date = store.any(message, ns.dct('created'))\n const latestVersion = mostRecentVersion(message)\n const latestVersionCreator = store.any(latestVersion, ns.foaf('maker'))\n // use latest content if same owner, else use original\n const msgId = creator === latestVersionCreator ? latestVersion : message\n const content = store.any(msgId, ns.sioc('content'))\n const signature = store.any(msgId, $rdf.sym(`${SEC}Proof`))\n debug.log('alain ' + signature?.value)\n\n // verify signature\n const msg = getBlankMsg()\n msg.id = msgId.uri\n msg.created = store.any(msgId, ns.dct('created')).value\n msg.content = content.value\n msg.maker = creator.uri\n\n try {\n // pubKey could be store in a cache for all makers\n const pubKey = getPublicKey(creator.uri)\n /* const pubKey0 = '023a9da707bee1302f66083c9d95673ff969b41607a66f52686fa774d64ceb87'\n debug.warn('publicKeys\\n' + pubKey0 + '\\n' + pubKey)\n const privKey0 = getPrivateKey(creator.uri) // alain to remove\n // unsigned messages should be signaled as unsecured\n debug.warn(msg)\n debug.warn(signature?.value) */\n if (signature?.value && !verifySignature(signature.value, msg, pubKey)) throw new Error('invalid signature')\n } catch (err) {\n debug.log(err)\n }\n const originalMessage = originalVersion(message)\n const edited = !message.sameTerm(originalMessage)\n\n const sortDate = store.the(originalMessage, ns.dct('created'), null, originalMessage.doc()) // In message\n\n const messageRow = dom.createElement('tr')\n messageRow.AJAR_date = sortDate.value\n messageRow.AJAR_subject = message\n\n const td1 = dom.createElement('td')\n messageRow.appendChild(td1)\n if (!options.authorDateOnLeft) {\n const img = dom.createElement('img')\n img.setAttribute(\n 'style',\n 'max-height: 2.5em; max-width: 2.5em; border-radius: 0.5em; margin: auto;'\n )\n widgets.setImage(img, creator)\n td1.appendChild(img)\n } else {\n creatorAndDate(td1, creator, widgets.shortDate(sortDate.value), message)\n }\n let bothDates = widgets.shortDate(sortDate.value)\n if (edited) {\n bothDates += ' ... ' + widgets.shortDate(date.value)\n }\n\n // Render the content ot the message itself\n const td2 = messageRow.appendChild(dom.createElement('td'))\n\n if (!options.authorDateOnLeft) {\n creatorAndDateHorizontal(\n td2,\n creator,\n bothDates, // widgets.shortDate(dateString)\n message\n )\n }\n const text = content.value.trim()\n const isURI = /^https?:\\/[^ <>]*$/i.test(text)\n let para = null\n if (isURI) {\n const isImage = /\\.(gif|jpg|jpeg|tiff|png|svg)$/i.test(text) // @@ Should use content-type not URI\n if (isImage && options.expandImagesInline) {\n const img = elementForImageURI(text, options)\n td2.appendChild(img)\n } else {\n // Link but not Image\n const anc = td2.appendChild(dom.createElement('a'))\n para = anc.appendChild(dom.createElement('p'))\n anc.href = text\n para.textContent = text\n td2.appendChild(anc)\n }\n } else {\n // text\n para = dom.createElement('p')\n td2.appendChild(para)\n para.textContent = text\n }\n if (para) {\n const bgcolor = colorizeByAuthor\n ? pad.lightColorHash(creator)\n : getBgColor(fresh)\n para.setAttribute(\n 'style',\n messageBodyStyle + 'background-color: ' + bgcolor + ';'\n )\n }\n\n function getBgColor (fresh) {\n return fresh ? '#e8ffe8' : 'white'\n }\n\n // Sentiment strip\n const strip = sentimentStripLinked(message, message.doc())\n if (strip.children.length) {\n td2.appendChild(dom.createElement('br'))\n td2.appendChild(strip)\n }\n\n // Message tool bar button\n const td3 = dom.createElement('td')\n messageRow.appendChild(td3)\n const toolsButton = widgets.button(\n dom,\n icons.iconBase + 'noun_243787.svg',\n '...'\n )\n td3.appendChild(toolsButton)\n toolsButton.addEventListener('click', function (_event) {\n if (messageRow.toolTR) {\n // already got a toolbar? Toogle\n messageRow.parentNode.removeChild(messageRow.toolTR)\n delete messageRow.toolTR\n return\n }\n const toolsTR = dom.createElement('tr')\n const tools = messageToolbar(message, messageRow, userContext, channelObject)\n tools.style =\n 'border: 0.05em solid #888; border-radius: 0 0 0.7em 0.7em; border-top: 0; height:3.5em; background-color: #fff;' // @@ fix\n if (messageRow.nextSibling) {\n messageRow.parentElement.insertBefore(toolsTR, messageRow.nextSibling)\n } else {\n messageRow.parentElement.appendChild(toolsTR)\n }\n messageRow.toolTR = toolsTR\n toolsTR.appendChild(dom.createElement('td')) // left\n const toolsTD = toolsTR.appendChild(dom.createElement('td'))\n toolsTR.appendChild(dom.createElement('td')) // right\n toolsTD.appendChild(tools)\n })\n return messageRow\n}\n\nexport function switchToEditor (messageRow, message, channelObject, userContext) {\n const messageTable = messageRow.parentNode\n const editRow = renderMessageEditor(channelObject, messageTable, userContext,\n channelObject.options, mostRecentVersion(message))\n messageTable.insertBefore(editRow, messageRow)\n editRow.originalRow = messageRow\n messageRow.style.visibility = 'hidden' // Hide the original message. unhide if user cancels edit\n}\n/* Control for a new message -- or editing an old message ***************\n *\n */\nexport function renderMessageEditor (channelObject, messageTable, userContext, options, originalMessage) {\n function revertEditing (messageEditor) {\n messageEditor.originalRow.style.visibility = 'visible' // restore read-only version\n messageEditor.parentNode.removeChild(messageEditor)\n }\n\n async function handleFieldInput (_event) {\n await sendMessage(field.value, true)\n }\n\n async function sendMessage (text, fromMainField) {\n function sendComplete (message, _text2) {\n // const dateStamp = store.any(message, ns.dct('created'), null, message.doc())\n // const content = $rdf.literal(text2)\n insertMessageIntoTable(channelObject, messageTable, message, false, options, userContext) // not green\n\n if (originalMessage) { // editing another message\n const oldRow = messageEditor.originalRow\n // oldRow.style.display = '' // restore read-only version, re-attack\n if (oldRow.parentNode) {\n oldRow.parentNode.removeChild(oldRow) // No longer needed old version\n } else {\n debug.warn('No parentNode on old message ' + oldRow.textContent)\n oldRow.style.backgroundColor = '#fee'\n oldRow.style.visibility = 'hidden' // @@ FIX THIS AND REMOVE FROM DOM INSTEAD\n }\n messageEditor.parentNode.removeChild(messageEditor) // no longer need editor\n } else {\n if (fromMainField) {\n field.value = '' // clear from out for reuse\n field.setAttribute('style', messageBodyStyle)\n field.disabled = false\n field.scrollIntoView(options.newestFirst) // allign bottom (top)\n field.focus() // Start typing next line immediately\n field.select()\n }\n }\n // await channelObject.div.refresh() // Add new day if nec @@ add back\n }\n\n // const me = authn.currentUser() // Must be logged on or wuld have got login button\n if (fromMainField) {\n field.setAttribute('style', messageBodyStyle + 'color: #bbb;') // pendingedit\n field.disabled = true\n }\n\n let message\n try {\n message = await channelObject.updateMessage(text, originalMessage)\n } catch (err) {\n const statusArea = userContext.statusArea || messageEditor\n statusArea.appendChild(\n widgets.errorMessageBlock(dom, 'Error writing message: ' + err)\n )\n return\n }\n sendComplete(message, text)\n } // sendMessage\n\n // DRAG AND DROP\n function droppedFileHandler (files) {\n const base = messageTable.chatDocument.dir().uri\n widgets.uploadFiles(\n store.fetcher,\n files,\n base + 'Files',\n base + 'Pictures',\n async function (theFile, destURI) {\n // @@@@@@ Wait for each if several\n await sendMessage(destURI)\n }\n )\n }\n\n // When a set of URIs are dropped on the field\n const droppedURIHandler = async function (uris) {\n for (const uri of uris) {\n await sendMessage(uri)\n }\n }\n\n // When we are actually logged on\n function turnOnInput () {\n function getImageDoc () {\n imageDoc = $rdf.sym(\n chatDocument.dir().uri + 'Image_' + Date.now() + '.png'\n )\n return imageDoc\n }\n\n async function tookPicture (imageDoc) {\n if (imageDoc) {\n await sendMessage(imageDoc.uri)\n }\n }\n\n // Body of turnOnInput\n\n let menuButton\n if (options.menuHandler) {\n const menuButton = widgets.button(\n dom, icons.iconBase + 'noun_243787.svg', 'More')\n menuButton.setAttribute('style', style.buttonStyle + 'float: right;')\n // menuButton.addEventListener('click', _event => sendMessage(), false) (done in turnoninput)\n rhs.appendChild(menuButton)\n }\n\n if (options.menuHandler && menuButton) {\n const me = authn.currentUser()\n const menuOptions = {\n me,\n dom,\n div: null, // @@ was: div\n newBase: messageTable.chatDocument.dir().uri\n }\n menuButton.addEventListener(\n 'click',\n event => {\n options.menuHandler(event, channelObject.chatChannel, menuOptions)\n },\n false\n )\n }\n\n const me = authn.currentUser() // If already logged on\n creatorAndDate(lhs, me, '', null)\n\n field = dom.createElement('textarea')\n middle.innerHTML = ''\n middle.appendChild(field)\n field.rows = 3\n if (originalMessage) {\n field.value = store.anyValue(originalMessage, ns.sioc('content'), null, originalMessage.doc())\n }\n // field.cols = 40\n field.setAttribute('style', messageBodyStyle + 'background-color: #eef;')\n\n // Trap the Enter BEFORE it is used ti make a newline\n\n field.addEventListener(\n 'keydown',\n async function (e) {\n // User preference?\n if (e.code === 'Enter') {\n // if (e.keyCode === 13) { // deprocated https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/keyCode\n if ((!e.shiftKey && !options.shiftEnterSendsMessage) || (e.shiftKey && options.shiftEnterSendsMessage)) {\n // Shift-Enter just adds a new line\n // (note alt-enter doesn't add newline anyway on my setup - so have to use shift.\n await handleFieldInput(e)\n }\n }\n },\n false\n )\n\n widgets.makeDropTarget(field, droppedURIHandler, droppedFileHandler)\n\n rhs.innerHTML = ''\n\n sendButton = widgets.button(dom, sendIcon, 'Send')\n sendButton.style.float = 'right'\n sendButton.addEventListener('click', _event => handleFieldInput(), false)\n rhs.appendChild(sendButton)\n\n if (originalMessage) { // Are we editing another message?\n const cancelButton = rhs.appendChild(widgets.cancelButton(dom))\n cancelButton.style.float = 'left'\n // cancelButton.firstChild.style.opacity = '0.3' // moved to buttons\n cancelButton.addEventListener('click', _event => revertEditing(messageEditor), false)\n rhs.appendChild(cancelButton)\n }\n\n const chatDocument = channelObject.dateFolder.leafDocumentFromDate(new Date())\n let imageDoc\n\n middle.appendChild(\n media.cameraButton(dom, store, getImageDoc, tookPicture)\n )\n\n pad.recordParticipation(channelObject.channel, channelObject.channel.doc()) // participation =\n } // turn on inpuut\n\n // Body of renderMessageEditor\n\n let sortDate, sendIcon\n if (originalMessage) {\n sortDate = store.anyValue(originalMessage, ns.dct('created'), null, originalMessage.doc())\n // text = store.anyValue(originalMessage, ns.sioc('content'), null, originalMessage.doc())\n sendIcon = icons.iconBase + 'noun_1180158.svg' // Green check\n // cancelIcon = icons.iconBase + 'noun_1180156.svg' // Black cross\n } else {\n sendIcon = icons.iconBase + 'noun_383448.svg'\n sortDate = '9999-01-01T00:00:00Z' // ISO format for field sort\n // text = ''\n }\n const messageEditor = dom.createElement('tr')\n const lhs = dom.createElement('td')\n const middle = dom.createElement('td')\n const rhs = dom.createElement('td')\n messageEditor.appendChild(lhs)\n messageEditor.appendChild(middle)\n messageEditor.appendChild(rhs)\n messageEditor.AJAR_date = sortDate\n // messageEditor.appendChild(dom.createElement('br'))\n\n let field, sendButton\n const context = { div: middle, dom }\n\n ensureLoggedIn(context).then(context => {\n // me = context.me\n turnOnInput()\n Object.assign(context, userContext)\n findBookmarkDocument(context).then(_context => {\n // console.log('Bookmark file: ' + context.bookmarkDocument)\n })\n })\n\n return messageEditor\n} // renderMessageEditor\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"message.js","names":["_infinite","require","_messageTools","_bookmarks","_chatLogic","debug","_interopRequireWildcard","_iconBase","_solidLogic","_login","_index","ns","pad","style","utils","widgets","_signature","_keys","_getRequireWildcardCache","nodeInterop","WeakMap","cacheBabelInterop","cacheNodeInterop","obj","__esModule","_typeof","cache","has","get","newObj","hasPropertyDescriptor","Object","defineProperty","getOwnPropertyDescriptor","key","prototype","hasOwnProperty","call","desc","set","_createForOfIteratorHelper","o","allowArrayLike","it","Symbol","iterator","Array","isArray","_unsupportedIterableToArray","length","i","F","s","n","done","value","e","_e","f","TypeError","normalCompletion","didErr","err","step","next","_e2","minLen","_arrayLikeToArray","toString","slice","constructor","name","from","test","arr","len","arr2","dom","window","document","messageBodyStyle","label","elementForImageURI","imageUri","options","img","createElement","height","inlineImageHeightEms","trim","setAttribute","anchor","appendChild","makeDraggable","$rdf","sym","text","term","a","uri","addEventListener","openHrefInOutlineMode","textContent","nickname","person","store","any","foaf","creatorAndDate","td1","creator","date","message","nickAnchor","fetcher","nowOrWhenFetched","doc","undefined","_ok","_body","creatorAndDateHorizontal","dateBit","fontSize","marginLeft","renderMessageRow","channelObject","fresh","userContext","unsignedMessage","colorizeByAuthor","dct","latestVersion","mostRecentVersion","latestVersionCreator","msgId","content","sioc","signature","concat","SEC","msg","getBlankMsg","id","created","maker","warn","getPublicKey","then","publicKey","log","regex","match","verifySignature","originalMessage","originalVersion","edited","sameTerm","sortDate","the","messageRow","AJAR_date","AJAR_subject","authorDateOnLeft","setImage","shortDate","bothDates","td2","isURI","para","isImage","expandImagesInline","anc","href","bgcolor","lightColorHash","getBgColor","strip","sentimentStripLinked","children","td3","toolsButton","button","icons","iconBase","_event","toolTR","parentNode","removeChild","toolsTR","tools","messageToolbar","nextSibling","parentElement","insertBefore","toolsTD","switchToEditor","messageTable","editRow","renderMessageEditor","originalRow","visibility","revertEditing","messageEditor","handleFieldInput","_x","_handleFieldInput","apply","arguments","_asyncToGenerator2","_regenerator","mark","_callee5","wrap","_callee5$","_context6","prev","sendMessage","field","stop","_x2","_x3","_sendMessage","_callee6","fromMainField","sendComplete","statusArea","_callee6$","_context7","_sendComplete","_text2","insertMessageIntoTable","oldRow","backgroundColor","disabled","scrollIntoView","newestFirst","focus","select","updateMessage","sent","t0","errorMessageBlock","abrupt","droppedFileHandler","files","base","chatDocument","dir","uploadFiles","_ref","_callee","theFile","destURI","_callee$","_context2","_x4","_x5","droppedURIHandler","_ref2","_callee2","uris","_iterator","_step","_callee2$","_context3","finish","_x6","turnOnInput","getImageDoc","imageDoc","Date","now","tookPicture","_x7","_tookPicture","_callee4","_callee4$","_context5","menuButton","menuHandler","buttonStyle","rhs","me","authn","currentUser","menuOptions","div","newBase","event","chatChannel","lhs","middle","innerHTML","rows","anyValue","_ref3","_callee3","_callee3$","_context4","code","shiftKey","shiftEnterSendsMessage","_x8","makeDropTarget","sendButton","sendIcon","cancelButton","dateFolder","leafDocumentFromDate","media","cameraButton","recordParticipation","channel","context","ensureLoggedIn","assign","findBookmarkDocument","_context"],"sources":["../../src/chat/message.js"],"sourcesContent":["/** UI code for individual messages: display them, edit them\n *\n * @packageDocumentation\n */\n\n/* global $rdf */\nimport { insertMessageIntoTable } from './infinite'\nimport { messageToolbar, sentimentStripLinked } from './messageTools'\nimport { findBookmarkDocument } from './bookmarks'\nimport { mostRecentVersion, originalVersion } from './chatLogic'\nimport * as debug from '../debug'\nimport { icons } from '../iconBase'\nimport { store, authn } from 'solid-logic'\nimport { ensureLoggedIn } from '../login/login'\nimport { media } from '../media/index'\nimport * as ns from '../ns'\nimport * as pad from '../pad'\nimport * as style from '../style'\nimport * as utils from '../utils'\nimport * as widgets from '../widgets'\nimport { getBlankMsg, verifySignature, SEC } from './signature'\nimport { getPublicKey } from './keys'\n\nconst dom = window.document\nconst messageBodyStyle = style.messageBodyStyle\n\nconst label = utils.label\n\n/**\n * elementForImageURI\n * HTML component for an image\n * @param imageUri\n * @param options { inlineImageHeightEms }\n * @returns HTMLAnchorElement For Image\n */\nexport function elementForImageURI (imageUri, options) {\n const img = dom.createElement('img')\n let height = '10'\n if (options.inlineImageHeightEms) {\n height = ('' + options.inlineImageHeightEms).trim()\n }\n img.setAttribute(\n 'style',\n 'max-height: ' + height + 'em; border-radius: 1em; margin: 0.7em;'\n )\n // widgets.makeDropTarget(img, handleURIsDroppedOnMugshot, droppedFileHandler)\n if (imageUri) img.setAttribute('src', imageUri)\n const anchor = dom.createElement('a')\n anchor.setAttribute('href', imageUri)\n anchor.setAttribute('target', 'images')\n anchor.appendChild(img)\n widgets.makeDraggable(img, $rdf.sym(imageUri))\n return anchor\n}\n\nconst anchor = function (text, term) {\n // If there is no link return an element anyway\n const a = dom.createElement('a')\n if (term && term.uri) {\n a.setAttribute('href', term.uri)\n a.addEventListener('click', widgets.openHrefInOutlineMode, true)\n a.setAttribute('style', 'color: #3B5998; text-decoration: none; ') // font-weight: bold\n }\n a.textContent = text\n return a\n}\n\nfunction nickname (person) {\n const s = store.any(person, ns.foaf('nick'))\n if (s) return '' + s.value\n return '' + label(person)\n}\n\n/**\n * creatorAndDate\n * Displays creator and date for a chat message\n * inside the `td1` element\n * @param td1\n * @param creator\n * @param date\n * @param message\n * @returns HTMLAnchorElement For Image\n */\nexport function creatorAndDate (td1, creator, date, message) {\n const nickAnchor = td1.appendChild(anchor(nickname(creator), creator))\n if (creator.uri) {\n store.fetcher.nowOrWhenFetched(creator.doc(), undefined, function (\n _ok,\n _body\n ) {\n nickAnchor.textContent = nickname(creator)\n })\n }\n td1.appendChild(dom.createElement('br'))\n td1.appendChild(anchor(date, message))\n}\n\n/**\n * creatorAndDateHorizontal\n * Horizontally displays creator and date for a chat message\n * inside the `td1` element\n * @param td1\n * @param creator\n * @param date\n * @param message\n * @returns HTMLAnchorElement For Image\n */\nexport function creatorAndDateHorizontal (td1, creator, date, message) {\n const nickAnchor = td1.appendChild(anchor(label(creator), creator))\n if (creator.uri) {\n store.fetcher.nowOrWhenFetched(creator.doc(), undefined, function (\n _ok,\n _body\n ) {\n nickAnchor.textContent = nickname(creator)\n })\n }\n const dateBit = td1.appendChild(anchor(date, message))\n dateBit.style.fontSize = '80%'\n dateBit.style.marginLeft = '1em'\n td1.appendChild(dom.createElement('br'))\n}\n\n/**\n * renderMessageRow\n * Renders a chat message, read-only mode\n * @param channelObject\n * @param message\n * @param fresh\n * @param options\n * @param userContext\n * @returns Message Row HTML Table Element\n */\nexport function renderMessageRow (channelObject, message, fresh, options, userContext) {\n let unsignedMessage = false\n const colorizeByAuthor =\n options.colorizeByAuthor === '1' || options.colorizeByAuthor === true\n\n const creator = store.any(message, ns.foaf('maker'))\n const date = store.any(message, ns.dct('created'))\n const latestVersion = mostRecentVersion(message)\n const latestVersionCreator = store.any(latestVersion, ns.foaf('maker'))\n\n // use latest content if same owner, else use original\n const msgId = creator.uri === latestVersionCreator.uri ? latestVersion : message\n const content = store.any(msgId, ns.sioc('content'))\n const signature = store.any(msgId, $rdf.sym(`${SEC}proofValue`))\n\n // set message object\n const msg = getBlankMsg()\n msg.id = msgId.uri\n msg.created = store.any(msgId, ns.dct('created')).value\n msg.content = content.value\n msg.maker = creator.uri\n\n // unsigned message\n if (!signature?.value) {\n unsignedMessage = true\n debug.warn(msgId.uri + ' is unsigned') // TODO replace with UI (colored message ?)\n } else { // signed message, get public key and check signature\n getPublicKey(creator).then(publicKey => {\n debug.log(creator.uri + '\\n' + msg.created + '\\n' + msg.id + '\\n' + publicKey)\n if (!publicKey) {\n // TODO try to recreate the publicKey\n // if(me.uri === creator.uri) await getPrivateKey(creator)\n debug.warn('message is signed but ' + creator.uri + ' is missing publicKey')\n }\n // check that publicKey is a valid hex string\n const regex = /[0-9A-Fa-f]{6}/g\n if (!publicKey?.match(regex)) debug.warn('invalid publicKey hex string\\n' + creator.uri + '\\n' + publicKey)\n // verify signature\n else if (signature?.value && !verifySignature(signature?.value, msg, publicKey)) debug.warn('invalid signature\\n' + msg.id)\n })\n }\n\n const originalMessage = originalVersion(message)\n const edited = !message.sameTerm(originalMessage)\n\n const sortDate = store.the(originalMessage, ns.dct('created'), null, originalMessage.doc()) // In message\n\n const messageRow = dom.createElement('tr')\n if (unsignedMessage) messageRow.setAttribute('style', 'background-color: red')\n messageRow.AJAR_date = sortDate.value\n messageRow.AJAR_subject = message\n\n const td1 = dom.createElement('td')\n messageRow.appendChild(td1)\n if (!options.authorDateOnLeft) {\n const img = dom.createElement('img')\n img.setAttribute(\n 'style',\n 'max-height: 2.5em; max-width: 2.5em; border-radius: 0.5em; margin: auto;'\n )\n widgets.setImage(img, creator)\n td1.appendChild(img)\n } else {\n creatorAndDate(td1, creator, widgets.shortDate(sortDate.value), message)\n }\n let bothDates = widgets.shortDate(sortDate.value)\n if (edited) {\n bothDates += ' ... ' + widgets.shortDate(date.value)\n }\n\n // Render the content ot the message itself\n const td2 = messageRow.appendChild(dom.createElement('td'))\n\n if (!options.authorDateOnLeft) {\n creatorAndDateHorizontal(\n td2,\n creator,\n bothDates, // widgets.shortDate(dateString)\n message\n )\n }\n const text = content.value.trim()\n const isURI = /^https?:\\/[^ <>]*$/i.test(text)\n let para = null\n if (isURI) {\n const isImage = /\\.(gif|jpg|jpeg|tiff|png|svg)$/i.test(text) // @@ Should use content-type not URI\n if (isImage && options.expandImagesInline) {\n const img = elementForImageURI(text, options)\n td2.appendChild(img)\n } else {\n // Link but not Image\n const anc = td2.appendChild(dom.createElement('a'))\n para = anc.appendChild(dom.createElement('p'))\n anc.href = text\n para.textContent = text\n td2.appendChild(anc)\n }\n } else {\n // text\n para = dom.createElement('p')\n td2.appendChild(para)\n para.textContent = text\n }\n if (para) {\n const bgcolor = colorizeByAuthor\n ? pad.lightColorHash(creator)\n : getBgColor(fresh)\n para.setAttribute(\n 'style',\n messageBodyStyle + 'background-color: ' + bgcolor + ';'\n )\n }\n\n function getBgColor (fresh) {\n return fresh ? '#e8ffe8' : 'white'\n }\n\n // Sentiment strip\n const strip = sentimentStripLinked(message, message.doc())\n if (strip.children.length) {\n td2.appendChild(dom.createElement('br'))\n td2.appendChild(strip)\n }\n\n // Message tool bar button\n const td3 = dom.createElement('td')\n messageRow.appendChild(td3)\n const toolsButton = widgets.button(\n dom,\n icons.iconBase + 'noun_243787.svg',\n '...'\n )\n td3.appendChild(toolsButton)\n toolsButton.addEventListener('click', function (_event) {\n if (messageRow.toolTR) {\n // already got a toolbar? Toogle\n messageRow.parentNode.removeChild(messageRow.toolTR)\n delete messageRow.toolTR\n return\n }\n const toolsTR = dom.createElement('tr')\n const tools = messageToolbar(message, messageRow, userContext, channelObject)\n tools.style =\n 'border: 0.05em solid #888; border-radius: 0 0 0.7em 0.7em; border-top: 0; height:3.5em; background-color: #fff;' // @@ fix\n if (messageRow.nextSibling) {\n messageRow.parentElement.insertBefore(toolsTR, messageRow.nextSibling)\n } else {\n messageRow.parentElement.appendChild(toolsTR)\n }\n messageRow.toolTR = toolsTR\n toolsTR.appendChild(dom.createElement('td')) // left\n const toolsTD = toolsTR.appendChild(dom.createElement('td'))\n toolsTR.appendChild(dom.createElement('td')) // right\n toolsTD.appendChild(tools)\n })\n return messageRow\n} // END OF RENDERMESSAGE\n\nexport function switchToEditor (messageRow, message, channelObject, userContext) {\n const messageTable = messageRow.parentNode\n const editRow = renderMessageEditor(channelObject, messageTable, userContext,\n channelObject.options, mostRecentVersion(message))\n messageTable.insertBefore(editRow, messageRow)\n editRow.originalRow = messageRow\n messageRow.style.visibility = 'hidden' // Hide the original message. unhide if user cancels edit\n}\n/* Control for a new message -- or editing an old message ***************\n *\n */\nexport function renderMessageEditor (channelObject, messageTable, userContext, options, originalMessage) {\n function revertEditing (messageEditor) {\n messageEditor.originalRow.style.visibility = 'visible' // restore read-only version\n messageEditor.parentNode.removeChild(messageEditor)\n }\n\n async function handleFieldInput (_event) {\n await sendMessage(field.value, true)\n }\n\n async function sendMessage (text, fromMainField) {\n function sendComplete (message, _text2) {\n insertMessageIntoTable(channelObject, messageTable, message, false, options, userContext) // not green\n\n if (originalMessage) { // editing another message\n const oldRow = messageEditor.originalRow\n // oldRow.style.display = '' // restore read-only version, re-attack\n if (oldRow.parentNode) {\n oldRow.parentNode.removeChild(oldRow) // No longer needed old version\n } else {\n debug.warn('No parentNode on old message ' + oldRow.textContent)\n oldRow.style.backgroundColor = '#fee'\n oldRow.style.visibility = 'hidden' // @@ FIX THIS AND REMOVE FROM DOM INSTEAD\n }\n messageEditor.parentNode.removeChild(messageEditor) // no longer need editor\n } else {\n if (fromMainField) {\n field.value = '' // clear from out for reuse\n field.setAttribute('style', messageBodyStyle)\n field.disabled = false\n field.scrollIntoView(options.newestFirst) // allign bottom (top)\n field.focus() // Start typing next line immediately\n field.select()\n }\n }\n // await channelObject.div.refresh() // Add new day if nec @@ add back\n }\n\n // const me = authn.currentUser() // Must be logged on or wuld have got login button\n if (fromMainField) {\n field.setAttribute('style', messageBodyStyle + 'color: #bbb;') // pendingedit\n field.disabled = true\n }\n\n let message\n try {\n message = await channelObject.updateMessage(text, originalMessage)\n } catch (err) {\n const statusArea = userContext.statusArea || messageEditor\n statusArea.appendChild(\n widgets.errorMessageBlock(dom, 'Error writing message: ' + err)\n )\n return\n }\n sendComplete(message, text)\n } // sendMessage\n\n // DRAG AND DROP\n function droppedFileHandler (files) {\n const base = messageTable.chatDocument.dir().uri\n widgets.uploadFiles(\n store.fetcher,\n files,\n base + 'Files',\n base + 'Pictures',\n async function (theFile, destURI) {\n // @@@@@@ Wait for each if several\n await sendMessage(destURI)\n }\n )\n }\n\n // When a set of URIs are dropped on the field\n const droppedURIHandler = async function (uris) {\n for (const uri of uris) {\n await sendMessage(uri)\n }\n }\n\n // When we are actually logged on\n function turnOnInput () {\n function getImageDoc () {\n imageDoc = $rdf.sym(\n chatDocument.dir().uri + 'Image_' + Date.now() + '.png'\n )\n return imageDoc\n }\n\n async function tookPicture (imageDoc) {\n if (imageDoc) {\n await sendMessage(imageDoc.uri)\n }\n }\n\n // Body of turnOnInput\n\n let menuButton\n if (options.menuHandler) {\n const menuButton = widgets.button(\n dom, icons.iconBase + 'noun_243787.svg', 'More')\n menuButton.setAttribute('style', style.buttonStyle + 'float: right;')\n // menuButton.addEventListener('click', _event => sendMessage(), false) (done in turnoninput)\n rhs.appendChild(menuButton)\n }\n\n if (options.menuHandler && menuButton) {\n const me = authn.currentUser()\n const menuOptions = {\n me,\n dom,\n div: null, // @@ was: div\n newBase: messageTable.chatDocument.dir().uri\n }\n menuButton.addEventListener(\n 'click',\n event => {\n options.menuHandler(event, channelObject.chatChannel, menuOptions)\n },\n false\n )\n }\n\n const me = authn.currentUser() // If already logged on\n creatorAndDate(lhs, me, '', null)\n\n field = dom.createElement('textarea')\n middle.innerHTML = ''\n middle.appendChild(field)\n field.rows = 3\n if (originalMessage) {\n field.value = store.anyValue(originalMessage, ns.sioc('content'), null, originalMessage.doc())\n }\n // field.cols = 40\n field.setAttribute('style', messageBodyStyle + 'background-color: #eef;')\n\n // Trap the Enter BEFORE it is used ti make a newline\n\n field.addEventListener(\n 'keydown',\n async function (e) {\n // User preference?\n if (e.code === 'Enter') {\n // if (e.keyCode === 13) { // deprocated https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/keyCode\n if ((!e.shiftKey && !options.shiftEnterSendsMessage) || (e.shiftKey && options.shiftEnterSendsMessage)) {\n // Shift-Enter just adds a new line\n // (note alt-enter doesn't add newline anyway on my setup - so have to use shift.\n await handleFieldInput(e)\n }\n }\n },\n false\n )\n\n widgets.makeDropTarget(field, droppedURIHandler, droppedFileHandler)\n\n rhs.innerHTML = ''\n\n sendButton = widgets.button(dom, sendIcon, 'Send')\n sendButton.style.float = 'right'\n sendButton.addEventListener('click', _event => handleFieldInput(), false)\n rhs.appendChild(sendButton)\n\n if (originalMessage) { // Are we editing another message?\n const cancelButton = rhs.appendChild(widgets.cancelButton(dom))\n cancelButton.style.float = 'left'\n // cancelButton.firstChild.style.opacity = '0.3' // moved to buttons\n cancelButton.addEventListener('click', _event => revertEditing(messageEditor), false)\n rhs.appendChild(cancelButton)\n }\n\n const chatDocument = channelObject.dateFolder.leafDocumentFromDate(new Date())\n let imageDoc\n\n middle.appendChild(\n media.cameraButton(dom, store, getImageDoc, tookPicture)\n )\n\n pad.recordParticipation(channelObject.channel, channelObject.channel.doc()) // participation =\n } // turn on inpuut\n\n // Body of renderMessageEditor\n\n let sortDate, sendIcon\n if (originalMessage) {\n sortDate = store.anyValue(originalMessage, ns.dct('created'), null, originalMessage.doc())\n // text = store.anyValue(originalMessage, ns.sioc('content'), null, originalMessage.doc())\n sendIcon = icons.iconBase + 'noun_1180158.svg' // Green check\n // cancelIcon = icons.iconBase + 'noun_1180156.svg' // Black cross\n } else {\n sendIcon = icons.iconBase + 'noun_383448.svg'\n sortDate = '9999-01-01T00:00:00Z' // ISO format for field sort\n // text = ''\n }\n const messageEditor = dom.createElement('tr')\n const lhs = dom.createElement('td')\n const middle = dom.createElement('td')\n const rhs = dom.createElement('td')\n messageEditor.appendChild(lhs)\n messageEditor.appendChild(middle)\n messageEditor.appendChild(rhs)\n messageEditor.AJAR_date = sortDate\n // messageEditor.appendChild(dom.createElement('br'))\n\n let field, sendButton\n const context = { div: middle, dom }\n\n ensureLoggedIn(context).then(context => {\n // me = context.me\n turnOnInput()\n Object.assign(context, userContext)\n findBookmarkDocument(context).then(_context => {\n // console.log('Bookmark file: ' + context.bookmarkDocument)\n })\n })\n\n return messageEditor\n} // renderMessageEditor\n"],"mappings":"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"}
|
package/lib/chat/signature.d.ts
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
export declare const utf8Decoder: TextDecoder;
|
|
2
2
|
export declare const utf8Encoder: TextEncoder;
|
|
3
3
|
export declare const SEC = "https://w3id.org/security#";
|
|
4
|
-
export declare const CERT = "http://www.w3.org/ns/auth/cert#";
|
|
5
4
|
export type MsgTemplate = {
|
|
6
5
|
id: string;
|
|
7
6
|
created: string;
|
|
@@ -18,10 +17,8 @@ export type Message = UnsignedMsg & {
|
|
|
18
17
|
sig: string;
|
|
19
18
|
};
|
|
20
19
|
export declare function getBlankMsg(): MsgTemplate;
|
|
21
|
-
export declare function finishMsg(t: MsgTemplate, privateKey: string): Message;
|
|
22
20
|
export declare function serializeMsg(msg: UnsignedMsg): string;
|
|
23
21
|
export declare function getMsgHash(message: UnsignedMsg): string;
|
|
24
|
-
export declare function validateMsg<T>(message: T): message is T & UnsignedMsg;
|
|
25
22
|
export declare function verifySignature(sig: string, message: Message, pubKey: string): boolean;
|
|
26
23
|
export declare function signMsg(message: UnsignedMsg, key: string): string;
|
|
27
24
|
//# sourceMappingURL=signature.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
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;
|
|
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;AA4B/C,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"}
|
package/lib/chat/signature.js
CHANGED
|
@@ -3,14 +3,12 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.SEC =
|
|
7
|
-
exports.finishMsg = finishMsg;
|
|
6
|
+
exports.SEC = void 0;
|
|
8
7
|
exports.getBlankMsg = getBlankMsg;
|
|
9
8
|
exports.getMsgHash = getMsgHash;
|
|
10
9
|
exports.serializeMsg = serializeMsg;
|
|
11
10
|
exports.signMsg = signMsg;
|
|
12
11
|
exports.utf8Encoder = exports.utf8Decoder = void 0;
|
|
13
|
-
exports.validateMsg = validateMsg;
|
|
14
12
|
exports.verifySignature = verifySignature;
|
|
15
13
|
var _secp256k = require("@noble/curves/secp256k1");
|
|
16
14
|
var _utils = require("@noble/hashes/utils");
|
|
@@ -23,8 +21,7 @@ exports.utf8Decoder = utf8Decoder;
|
|
|
23
21
|
var utf8Encoder = new TextEncoder();
|
|
24
22
|
exports.utf8Encoder = utf8Encoder;
|
|
25
23
|
var SEC = 'https://w3id.org/security#'; // Proof, VerificationMethod
|
|
26
|
-
|
|
27
|
-
var CERT = 'http://www.w3.org/ns/auth/cert#'; // PrivateKey, PublicKey
|
|
24
|
+
// export const CERT = 'http://www.w3.org/ns/auth/cert#' // PrivateKey, PublicKey, key
|
|
28
25
|
|
|
29
26
|
/* eslint-disable no-unused-vars */
|
|
30
27
|
/* export enum Kind {
|
|
@@ -50,25 +47,28 @@ var CERT = 'http://www.w3.org/ns/auth/cert#'; // PrivateKey, PublicKey
|
|
|
50
47
|
ProfileBadge = 30009,
|
|
51
48
|
Article = 30023
|
|
52
49
|
} */
|
|
53
|
-
exports.
|
|
50
|
+
exports.SEC = SEC;
|
|
54
51
|
function getBlankMsg() {
|
|
55
52
|
return {
|
|
56
53
|
id: '',
|
|
57
54
|
created: '',
|
|
58
55
|
dateDeleted: '',
|
|
56
|
+
// TODO to remove if not used
|
|
59
57
|
content: '',
|
|
60
58
|
maker: '',
|
|
61
|
-
sig: ''
|
|
59
|
+
sig: '' // TODO to remove if not used
|
|
62
60
|
};
|
|
63
61
|
}
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
message.
|
|
69
|
-
message.
|
|
70
|
-
|
|
71
|
-
|
|
62
|
+
|
|
63
|
+
/* export function finishMsg (t: MsgTemplate, privateKey: string): Message {
|
|
64
|
+
// to update to chat message triples
|
|
65
|
+
const message = t as Message
|
|
66
|
+
// message.pubkey = getPublicKey(privateKey)
|
|
67
|
+
message.id = getMsgHash(message)
|
|
68
|
+
message.sig = signMsg(message, privateKey)
|
|
69
|
+
return message
|
|
70
|
+
} */
|
|
71
|
+
|
|
72
72
|
function serializeMsg(msg) {
|
|
73
73
|
// to update to chat messages triples
|
|
74
74
|
/* if (!validateMsg(msg))
|
|
@@ -80,27 +80,29 @@ function getMsgHash(message) {
|
|
|
80
80
|
var msgHash = (0, _sha.sha256)(utf8Encoder.encode(serializeMsg(message)));
|
|
81
81
|
return (0, _utils.bytesToHex)(msgHash);
|
|
82
82
|
}
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
function validateMsg(message) {
|
|
87
|
-
|
|
83
|
+
|
|
84
|
+
// const isRecord = (obj: unknown): obj is Record<string, unknown> => obj instanceof Object
|
|
85
|
+
|
|
86
|
+
/* export function validateMsg<T> (message: T): message is T & UnsignedMsg {
|
|
87
|
+
if (!isRecord(message)) return false
|
|
88
88
|
if (typeof message.kind !== 'number') return false
|
|
89
89
|
if (typeof message.content !== 'string') return false
|
|
90
90
|
if (typeof message.created_at !== 'number') return false
|
|
91
91
|
if (typeof message.pubkey !== 'string') return false
|
|
92
92
|
if (!message.pubkey.match(/^[a-f0-9]{64}$/)) return false
|
|
93
|
-
|
|
93
|
+
|
|
94
|
+
if (!Array.isArray(message.tags)) return false
|
|
94
95
|
for (let i = 0; i < message.tags.length; i++) {
|
|
95
96
|
let tag = message.tags[i]
|
|
96
97
|
if (!Array.isArray(tag)) return false
|
|
97
98
|
for (let j = 0; j < tag.length; j++) {
|
|
98
99
|
if (typeof tag[j] === 'object') return false
|
|
99
100
|
}
|
|
100
|
-
}
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
return true
|
|
104
|
+
} */
|
|
101
105
|
|
|
102
|
-
return true;
|
|
103
|
-
}
|
|
104
106
|
function verifySignature(sig, message, pubKey) {
|
|
105
107
|
return _secp256k.schnorr.verify(sig, getMsgHash(message), pubKey);
|
|
106
108
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"signature.js","names":["_secp256k","require","_utils","_sha","utf8Decoder","TextDecoder","exports","utf8Encoder","TextEncoder","SEC","
|
|
1
|
+
{"version":3,"file":"signature.js","names":["_secp256k","require","_utils","_sha","utf8Decoder","TextDecoder","exports","utf8Encoder","TextEncoder","SEC","getBlankMsg","id","created","dateDeleted","content","maker","sig","serializeMsg","msg","JSON","stringify","getMsgHash","message","msgHash","sha256","encode","bytesToHex","verifySignature","pubKey","schnorr","verify","signMsg","key","sign"],"sources":["../../src/chat/signature.ts"],"sourcesContent":["import { schnorr } from '@noble/curves/secp256k1'\r\nimport { bytesToHex } from '@noble/hashes/utils'\r\nimport { sha256 } from '@noble/hashes/sha256'\r\n\r\n// import {utf8Encoder} from './utils'\r\n// import { getPublicKey } from './keys'\r\n\r\nexport const utf8Decoder = new TextDecoder('utf-8')\r\nexport const utf8Encoder = new TextEncoder()\r\n\r\nexport const SEC = 'https://w3id.org/security#' // Proof, VerificationMethod\r\n// export const CERT = 'http://www.w3.org/ns/auth/cert#' // PrivateKey, PublicKey, key\r\n\r\n/* eslint-disable no-unused-vars */\r\n/* export enum Kind {\r\n Metadata = 0,\r\n Text = 1,\r\n RecommendRelay = 2,\r\n Contacts = 3,\r\n EncryptedDirectMessage = 4,\r\n EventDeletion = 5,\r\n Reaction = 7,\r\n BadgeAward = 8,\r\n ChannelCreation = 40,\r\n ChannelMetadata = 41,\r\n ChannelMessage = 42,\r\n ChannelHideMessage = 43,\r\n ChannelMuteUser = 44,\r\n Report = 1984,\r\n ZapRequest = 9734,\r\n Zap = 9735,\r\n RelayList = 10002,\r\n ClientAuth = 22242,\r\n BadgeDefinition = 30008,\r\n ProfileBadge = 30009,\r\n Article = 30023\r\n} */\r\n\r\nexport type MsgTemplate = {\r\n id: string\r\n created: string\r\n dateDeleted: string\r\n content: string\r\n maker: string\r\n sig: string\r\n}\r\n\r\nexport type UnsignedMsg = MsgTemplate & {\r\n pubkey: string\r\n}\r\n\r\nexport type Message = UnsignedMsg & {\r\n id: string\r\n sig: string\r\n}\r\n\r\nexport function getBlankMsg (): MsgTemplate {\r\n return {\r\n id: '',\r\n created: '',\r\n dateDeleted: '', // TODO to remove if not used\r\n content: '',\r\n maker: '',\r\n sig: '' // TODO to remove if not used\r\n }\r\n}\r\n\r\n/* export function finishMsg (t: MsgTemplate, privateKey: string): Message {\r\n // to update to chat message triples\r\n const message = t as Message\r\n // message.pubkey = getPublicKey(privateKey)\r\n message.id = getMsgHash(message)\r\n message.sig = signMsg(message, privateKey)\r\n return message\r\n} */\r\n\r\nexport function serializeMsg (msg: UnsignedMsg): string {\r\n // to update to chat messages triples\r\n /* if (!validateMsg(msg))\r\n throw new Error(\"can't serialize message with wrong or missing properties\") */\r\n\r\n return JSON.stringify(msg)\r\n}\r\n\r\nexport function getMsgHash (message: UnsignedMsg) {\r\n const msgHash = sha256(utf8Encoder.encode(serializeMsg(message)))\r\n return bytesToHex(msgHash)\r\n}\r\n\r\n// const isRecord = (obj: unknown): obj is Record<string, unknown> => obj instanceof Object\r\n\r\n/* export function validateMsg<T> (message: T): message is T & UnsignedMsg {\r\n if (!isRecord(message)) return false\r\n if (typeof message.kind !== 'number') return false\r\n if (typeof message.content !== 'string') return false\r\n if (typeof message.created_at !== 'number') return false\r\n if (typeof message.pubkey !== 'string') return false\r\n if (!message.pubkey.match(/^[a-f0-9]{64}$/)) return false\r\n\r\n if (!Array.isArray(message.tags)) return false\r\n for (let i = 0; i < message.tags.length; i++) {\r\n let tag = message.tags[i]\r\n if (!Array.isArray(tag)) return false\r\n for (let j = 0; j < tag.length; j++) {\r\n if (typeof tag[j] === 'object') return false\r\n }\r\n }\r\n\r\n return true\r\n} */\r\n\r\nexport function verifySignature (sig: string, message: Message, pubKey: string): boolean {\r\n return schnorr.verify(\r\n sig,\r\n getMsgHash(message),\r\n pubKey\r\n )\r\n}\r\n\r\nexport function signMsg (message: UnsignedMsg, key: string): string {\r\n return bytesToHex(\r\n schnorr.sign(getMsgHash(message), key)\r\n )\r\n}\r\n"],"mappings":";;;;;;;;;;;;AAAA,IAAAA,SAAA,GAAAC,OAAA;AACA,IAAAC,MAAA,GAAAD,OAAA;AACA,IAAAE,IAAA,GAAAF,OAAA;AAEA;AACA;;AAEO,IAAMG,WAAW,GAAG,IAAIC,WAAW,CAAC,OAAO,CAAC;AAAAC,OAAA,CAAAF,WAAA,GAAAA,WAAA;AAC5C,IAAMG,WAAW,GAAG,IAAIC,WAAW,EAAE;AAAAF,OAAA,CAAAC,WAAA,GAAAA,WAAA;AAErC,IAAME,GAAG,GAAG,4BAA4B,EAAC;AAChD;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAtBAH,OAAA,CAAAG,GAAA,GAAAA,GAAA;AA0CO,SAASC,WAAWA,CAAA,EAAiB;EAC1C,OAAO;IACLC,EAAE,EAAE,EAAE;IACNC,OAAO,EAAE,EAAE;IACXC,WAAW,EAAE,EAAE;IAAE;IACjBC,OAAO,EAAE,EAAE;IACXC,KAAK,EAAE,EAAE;IACTC,GAAG,EAAE,EAAE,CAAC;EACV,CAAC;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO,SAASC,YAAYA,CAAEC,GAAgB,EAAU;EACtD;EACA;AACF;;EAEE,OAAOC,IAAI,CAACC,SAAS,CAACF,GAAG,CAAC;AAC5B;AAEO,SAASG,UAAUA,CAAEC,OAAoB,EAAE;EAChD,IAAMC,OAAO,GAAG,IAAAC,WAAM,EAACjB,WAAW,CAACkB,MAAM,CAACR,YAAY,CAACK,OAAO,CAAC,CAAC,CAAC;EACjE,OAAO,IAAAI,iBAAU,EAACH,OAAO,CAAC;AAC5B;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO,SAASI,eAAeA,CAAEX,GAAW,EAAEM,OAAgB,EAAEM,MAAc,EAAW;EACvF,OAAOC,iBAAO,CAACC,MAAM,CACnBd,GAAG,EACHK,UAAU,CAACC,OAAO,CAAC,EACnBM,MAAM,CACP;AACH;AAEO,SAASG,OAAOA,CAAET,OAAoB,EAAEU,GAAW,EAAU;EAClE,OAAO,IAAAN,iBAAU,EACfG,iBAAO,CAACI,IAAI,CAACZ,UAAU,CAACC,OAAO,CAAC,EAAEU,GAAG,CAAC,CACvC;AACH"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { NamedNode } from 'rdflib';
|
|
2
|
+
export declare const getPodRoot: (webId: NamedNode) => Promise<NamedNode>;
|
|
3
|
+
export declare const pubKeyUrl: (webId: NamedNode) => Promise<string>;
|
|
4
|
+
export declare function getExistingPublicKey(webId: NamedNode, publicKeyUrl: string): Promise<string | undefined>;
|
|
5
|
+
export declare const privKeyUrl: (webId: NamedNode) => Promise<string>;
|
|
6
|
+
export declare function getExistingPrivateKey(webId: NamedNode, privateKeyUrl: string): Promise<string | undefined>;
|
|
7
|
+
type KeyType = 'publicKey' | 'privateKey';
|
|
8
|
+
export declare function getKeyIfExists(webId: NamedNode, keyUrl: string, keyType: KeyType): Promise<string | undefined>;
|
|
9
|
+
export {};
|
|
10
|
+
//# sourceMappingURL=accessData.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"accessData.d.ts","sourceRoot":"","sources":["../../../src/utils/keyHelpers/accessData.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAA;AAElC,eAAO,MAAM,UAAU,UAAiB,SAAS,uBAsBhD,CAAA;AAED,eAAO,MAAM,SAAS,UAAiB,SAAS,oBAI/C,CAAA;AAED,wBAAsB,oBAAoB,CAAE,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,+BAGjF;AAED,eAAO,MAAM,UAAU,UAAiB,SAAS,oBAQhD,CAAA;AAED,wBAAsB,qBAAqB,CAAE,KAAK,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,+BAGnF;AAED,KAAK,OAAO,GAAG,WAAW,GAAG,YAAY,CAAA;AAEzC,wBAAsB,cAAc,CAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,+BA2BvF"}
|