solid-ui 2.4.27-8e7523bf → 2.4.27-8eed2632
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 +5 -1
- package/dist/solid-ui.js +4834 -1131
- package/dist/solid-ui.js.map +1 -1
- package/dist/solid-ui.min.js +1 -1
- package/dist/solid-ui.min.js.LICENSE.txt +4 -0
- package/dist/solid-ui.min.js.map +1 -1
- package/lib/chat/chatLogic.js +71 -26
- package/lib/chat/chatLogic.js.map +1 -1
- package/lib/chat/keys.d.ts +6 -0
- package/lib/chat/keys.d.ts.map +1 -0
- package/lib/chat/keys.js +298 -0
- package/lib/chat/keys.js.map +1 -0
- package/lib/chat/message.js +35 -1
- package/lib/chat/message.js.map +1 -1
- package/lib/chat/signature.d.ts +27 -0
- package/lib/chat/signature.d.ts.map +1 -0
- package/lib/chat/signature.js +110 -0
- package/lib/chat/signature.js.map +1 -0
- package/lib/login/login.d.ts.map +1 -1
- package/lib/login/login.js +41 -30
- package/lib/login/login.js.map +1 -1
- package/lib/utils/cryptoKeyHelpers.d.ts +6 -0
- package/lib/utils/cryptoKeyHelpers.d.ts.map +1 -0
- package/lib/utils/cryptoKeyHelpers.js +235 -0
- package/lib/utils/cryptoKeyHelpers.js.map +1 -0
- package/lib/versionInfo.js +2 -2
- package/lib/versionInfo.js.map +1 -1
- package/package.json +4 -1
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","_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","content","sioc","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'\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 content = store.any(latestVersion, ns.sioc('content'))\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","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","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 { 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\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}Proof`))\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) debug.warn(msgId.uri + ' is unsigned') // TODO replace with UI (colored message ?)\n\n // signed message, get public key and check signature\n else {\n getPublicKey(creator.uri).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 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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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
export declare const utf8Decoder: TextDecoder;
|
|
2
|
+
export declare const utf8Encoder: TextEncoder;
|
|
3
|
+
export declare const SEC = "https://w3id.org/security#";
|
|
4
|
+
export declare const CERT = "http://www.w3.org/ns/auth/cert#";
|
|
5
|
+
export type MsgTemplate = {
|
|
6
|
+
id: string;
|
|
7
|
+
created: string;
|
|
8
|
+
dateDeleted: string;
|
|
9
|
+
content: string;
|
|
10
|
+
maker: string;
|
|
11
|
+
sig: string;
|
|
12
|
+
};
|
|
13
|
+
export type UnsignedMsg = MsgTemplate & {
|
|
14
|
+
pubkey: string;
|
|
15
|
+
};
|
|
16
|
+
export type Message = UnsignedMsg & {
|
|
17
|
+
id: string;
|
|
18
|
+
sig: string;
|
|
19
|
+
};
|
|
20
|
+
export declare function getBlankMsg(): MsgTemplate;
|
|
21
|
+
export declare function finishMsg(t: MsgTemplate, privateKey: string): Message;
|
|
22
|
+
export declare function serializeMsg(msg: UnsignedMsg): string;
|
|
23
|
+
export declare function getMsgHash(message: UnsignedMsg): string;
|
|
24
|
+
export declare function validateMsg<T>(message: T): message is T & UnsignedMsg;
|
|
25
|
+
export declare function verifySignature(sig: string, message: Message, pubKey: string): boolean;
|
|
26
|
+
export declare function signMsg(message: UnsignedMsg, key: string): string;
|
|
27
|
+
//# sourceMappingURL=signature.d.ts.map
|
|
@@ -0,0 +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;AAC/C,eAAO,MAAM,IAAI,oCAAoC,CAAA;AA2BrD,MAAM,MAAM,WAAW,GAAG;IACxB,EAAE,EAAE,MAAM,CAAA;IACV,OAAO,EAAE,MAAM,CAAA;IACf,WAAW,EAAE,MAAM,CAAA;IACnB,OAAO,EAAE,MAAM,CAAA;IACf,KAAK,EAAE,MAAM,CAAA;IACb,GAAG,EAAE,MAAM,CAAA;CACZ,CAAA;AAED,MAAM,MAAM,WAAW,GAAG,WAAW,GAAG;IACtC,MAAM,EAAE,MAAM,CAAA;CACf,CAAA;AAED,MAAM,MAAM,OAAO,GAAG,WAAW,GAAG;IAClC,EAAE,EAAE,MAAM,CAAA;IACV,GAAG,EAAE,MAAM,CAAA;CACZ,CAAA;AAED,wBAAgB,WAAW,IAAK,WAAW,CAS1C;AAED,wBAAgB,SAAS,CAAE,CAAC,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAOtE;AAED,wBAAgB,YAAY,CAAE,GAAG,EAAE,WAAW,GAAG,MAAM,CAMtD;AAED,wBAAgB,UAAU,CAAE,OAAO,EAAE,WAAW,UAG/C;AAID,wBAAgB,WAAW,CAAC,CAAC,EAAG,OAAO,EAAE,CAAC,GAAG,OAAO,IAAI,CAAC,GAAG,WAAW,CAkBtE;AAED,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"}
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.SEC = exports.CERT = void 0;
|
|
7
|
+
exports.finishMsg = finishMsg;
|
|
8
|
+
exports.getBlankMsg = getBlankMsg;
|
|
9
|
+
exports.getMsgHash = getMsgHash;
|
|
10
|
+
exports.serializeMsg = serializeMsg;
|
|
11
|
+
exports.signMsg = signMsg;
|
|
12
|
+
exports.utf8Encoder = exports.utf8Decoder = void 0;
|
|
13
|
+
exports.validateMsg = validateMsg;
|
|
14
|
+
exports.verifySignature = verifySignature;
|
|
15
|
+
var _secp256k = require("@noble/curves/secp256k1");
|
|
16
|
+
var _utils = require("@noble/hashes/utils");
|
|
17
|
+
var _sha = require("@noble/hashes/sha256");
|
|
18
|
+
// import {utf8Encoder} from './utils'
|
|
19
|
+
// import { getPublicKey } from './keys'
|
|
20
|
+
|
|
21
|
+
var utf8Decoder = new TextDecoder('utf-8');
|
|
22
|
+
exports.utf8Decoder = utf8Decoder;
|
|
23
|
+
var utf8Encoder = new TextEncoder();
|
|
24
|
+
exports.utf8Encoder = utf8Encoder;
|
|
25
|
+
var SEC = 'https://w3id.org/security#'; // Proof, VerificationMethod
|
|
26
|
+
exports.SEC = SEC;
|
|
27
|
+
var CERT = 'http://www.w3.org/ns/auth/cert#'; // PrivateKey, PublicKey
|
|
28
|
+
|
|
29
|
+
/* eslint-disable no-unused-vars */
|
|
30
|
+
/* export enum Kind {
|
|
31
|
+
Metadata = 0,
|
|
32
|
+
Text = 1,
|
|
33
|
+
RecommendRelay = 2,
|
|
34
|
+
Contacts = 3,
|
|
35
|
+
EncryptedDirectMessage = 4,
|
|
36
|
+
EventDeletion = 5,
|
|
37
|
+
Reaction = 7,
|
|
38
|
+
BadgeAward = 8,
|
|
39
|
+
ChannelCreation = 40,
|
|
40
|
+
ChannelMetadata = 41,
|
|
41
|
+
ChannelMessage = 42,
|
|
42
|
+
ChannelHideMessage = 43,
|
|
43
|
+
ChannelMuteUser = 44,
|
|
44
|
+
Report = 1984,
|
|
45
|
+
ZapRequest = 9734,
|
|
46
|
+
Zap = 9735,
|
|
47
|
+
RelayList = 10002,
|
|
48
|
+
ClientAuth = 22242,
|
|
49
|
+
BadgeDefinition = 30008,
|
|
50
|
+
ProfileBadge = 30009,
|
|
51
|
+
Article = 30023
|
|
52
|
+
} */
|
|
53
|
+
exports.CERT = CERT;
|
|
54
|
+
function getBlankMsg() {
|
|
55
|
+
return {
|
|
56
|
+
id: '',
|
|
57
|
+
created: '',
|
|
58
|
+
dateDeleted: '',
|
|
59
|
+
content: '',
|
|
60
|
+
maker: '',
|
|
61
|
+
sig: ''
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
function finishMsg(t, privateKey) {
|
|
65
|
+
// to update to chat message triples
|
|
66
|
+
var message = t;
|
|
67
|
+
// message.pubkey = getPublicKey(privateKey)
|
|
68
|
+
message.id = getMsgHash(message);
|
|
69
|
+
message.sig = signMsg(message, privateKey);
|
|
70
|
+
return message;
|
|
71
|
+
}
|
|
72
|
+
function serializeMsg(msg) {
|
|
73
|
+
// to update to chat messages triples
|
|
74
|
+
/* if (!validateMsg(msg))
|
|
75
|
+
throw new Error("can't serialize message with wrong or missing properties") */
|
|
76
|
+
|
|
77
|
+
return JSON.stringify(msg);
|
|
78
|
+
}
|
|
79
|
+
function getMsgHash(message) {
|
|
80
|
+
var msgHash = (0, _sha.sha256)(utf8Encoder.encode(serializeMsg(message)));
|
|
81
|
+
return (0, _utils.bytesToHex)(msgHash);
|
|
82
|
+
}
|
|
83
|
+
var isRecord = function isRecord(obj) {
|
|
84
|
+
return obj instanceof Object;
|
|
85
|
+
};
|
|
86
|
+
function validateMsg(message) {
|
|
87
|
+
/* if (!isRecord(message)) return false
|
|
88
|
+
if (typeof message.kind !== 'number') return false
|
|
89
|
+
if (typeof message.content !== 'string') return false
|
|
90
|
+
if (typeof message.created_at !== 'number') return false
|
|
91
|
+
if (typeof message.pubkey !== 'string') return false
|
|
92
|
+
if (!message.pubkey.match(/^[a-f0-9]{64}$/)) return false
|
|
93
|
+
if (!Array.isArray(message.tags)) return false
|
|
94
|
+
for (let i = 0; i < message.tags.length; i++) {
|
|
95
|
+
let tag = message.tags[i]
|
|
96
|
+
if (!Array.isArray(tag)) return false
|
|
97
|
+
for (let j = 0; j < tag.length; j++) {
|
|
98
|
+
if (typeof tag[j] === 'object') return false
|
|
99
|
+
}
|
|
100
|
+
} */
|
|
101
|
+
|
|
102
|
+
return true;
|
|
103
|
+
}
|
|
104
|
+
function verifySignature(sig, message, pubKey) {
|
|
105
|
+
return _secp256k.schnorr.verify(sig, getMsgHash(message), pubKey);
|
|
106
|
+
}
|
|
107
|
+
function signMsg(message, key) {
|
|
108
|
+
return (0, _utils.bytesToHex)(_secp256k.schnorr.sign(getMsgHash(message), key));
|
|
109
|
+
}
|
|
110
|
+
//# sourceMappingURL=signature.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"signature.js","names":["_secp256k","require","_utils","_sha","utf8Decoder","TextDecoder","exports","utf8Encoder","TextEncoder","SEC","CERT","getBlankMsg","id","created","dateDeleted","content","maker","sig","finishMsg","t","privateKey","message","getMsgHash","signMsg","serializeMsg","msg","JSON","stringify","msgHash","sha256","encode","bytesToHex","isRecord","obj","Object","validateMsg","verifySignature","pubKey","schnorr","verify","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\nexport const CERT = 'http://www.w3.org/ns/auth/cert#' // PrivateKey, PublicKey\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: '',\r\n content: '',\r\n maker: '',\r\n sig: ''\r\n }\r\n}\r\n\r\nexport 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\nconst isRecord = (obj: unknown): obj is Record<string, unknown> => obj instanceof Object\r\n\r\nexport 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;AAAAH,OAAA,CAAAG,GAAA,GAAAA,GAAA;AACzC,IAAMC,IAAI,GAAG,iCAAiC,EAAC;;AAEtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAtBAJ,OAAA,CAAAI,IAAA,GAAAA,IAAA;AA0CO,SAASC,WAAWA,CAAA,EAAiB;EAC1C,OAAO;IACLC,EAAE,EAAE,EAAE;IACNC,OAAO,EAAE,EAAE;IACXC,WAAW,EAAE,EAAE;IACfC,OAAO,EAAE,EAAE;IACXC,KAAK,EAAE,EAAE;IACTC,GAAG,EAAE;EACP,CAAC;AACH;AAEO,SAASC,SAASA,CAAEC,CAAc,EAAEC,UAAkB,EAAW;EACtE;EACA,IAAMC,OAAO,GAAGF,CAAY;EAC5B;EACAE,OAAO,CAACT,EAAE,GAAGU,UAAU,CAACD,OAAO,CAAC;EAChCA,OAAO,CAACJ,GAAG,GAAGM,OAAO,CAACF,OAAO,EAAED,UAAU,CAAC;EAC1C,OAAOC,OAAO;AAChB;AAEO,SAASG,YAAYA,CAAEC,GAAgB,EAAU;EACtD;EACA;AACF;;EAEE,OAAOC,IAAI,CAACC,SAAS,CAACF,GAAG,CAAC;AAC5B;AAEO,SAASH,UAAUA,CAAED,OAAoB,EAAE;EAChD,IAAMO,OAAO,GAAG,IAAAC,WAAM,EAACtB,WAAW,CAACuB,MAAM,CAACN,YAAY,CAACH,OAAO,CAAC,CAAC,CAAC;EACjE,OAAO,IAAAU,iBAAU,EAACH,OAAO,CAAC;AAC5B;AAEA,IAAMI,QAAQ,GAAG,SAAXA,QAAQA,CAAIC,GAAY;EAAA,OAAqCA,GAAG,YAAYC,MAAM;AAAA;AAEjF,SAASC,WAAWA,CAAKd,OAAU,EAA8B;EACtE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;EAGE,OAAO,IAAI;AACb;AAEO,SAASe,eAAeA,CAAEnB,GAAW,EAAEI,OAAgB,EAAEgB,MAAc,EAAW;EACvF,OAAOC,iBAAO,CAACC,MAAM,CACnBtB,GAAG,EACHK,UAAU,CAACD,OAAO,CAAC,EACnBgB,MAAM,CACP;AACH;AAEO,SAASd,OAAOA,CAAEF,OAAoB,EAAEmB,GAAW,EAAU;EAClE,OAAO,IAAAT,iBAAU,EACfO,iBAAO,CAACG,IAAI,CAACnB,UAAU,CAACD,OAAO,CAAC,EAAEmB,GAAG,CAAC,CACvC;AACH"}
|
package/lib/login/login.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"login.d.ts","sourceRoot":"","sources":["../../src/login/login.ts"],"names":[],"mappings":"AACA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAA;AAC9C,OAAO,EAAa,SAAS,EAAM,MAAM,QAAQ,CAAA;AAGjD,OAAO,EACL,UAAU,EACV,qBAAqB,EAYtB,MAAM,aAAa,CAAA;AAwBpB;;;;GAIG;AAEH,wBAAgB,cAAc,CAAE,OAAO,EAAE,qBAAqB,GAAG,OAAO,CAAC,qBAAqB,CAAC,CAwB9F;AAED;;;;;;;GAOG;AAEH,wBAAsB,uBAAuB,CAC3C,OAAO,EAAE,qBAAqB,GAC7B,OAAO,CAAC,qBAAqB,CAAC,
|
|
1
|
+
{"version":3,"file":"login.d.ts","sourceRoot":"","sources":["../../src/login/login.ts"],"names":[],"mappings":"AACA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAA;AAC9C,OAAO,EAAa,SAAS,EAAM,MAAM,QAAQ,CAAA;AAGjD,OAAO,EACL,UAAU,EACV,qBAAqB,EAYtB,MAAM,aAAa,CAAA;AAwBpB;;;;GAIG;AAEH,wBAAgB,cAAc,CAAE,OAAO,EAAE,qBAAqB,GAAG,OAAO,CAAC,qBAAqB,CAAC,CAwB9F;AAED;;;;;;;GAOG;AAEH,wBAAsB,uBAAuB,CAC3C,OAAO,EAAE,qBAAqB,GAC7B,OAAO,CAAC,qBAAqB,CAAC,CAuDhC;AAED;;;;;;GAMG;AAEH,wBAAsB,mBAAmB,CACvC,OAAO,EAAE,qBAAqB,GAC7B,OAAO,CAAC,qBAAqB,CAAC,CAiBhC;AAED;;;;IAII;AACJ,wBAAsB,gBAAgB,CACpC,OAAO,EAAE,qBAAqB,EAC9B,QAAQ,EAAE,SAAS,EACnB,QAAQ,CAAC,EAAE,OAAO,GACjB,OAAO,CAAC,qBAAqB,CAAC,CAShC;AAED,wBAAgB,UAAU,CAAE,OAAO,KAAA,EAAE,KAAK,KAAA,UAIzC;AACD;;GAEG;AACH,wBAAsB,mBAAmB,CACvC,OAAO,EAAE,qBAAqB,EAC9B,QAAQ,KAAA,EACR,QAAQ,KAAA,GACP,OAAO,CAAC,qBAAqB,GAAG,IAAI,CAAC,CAgEvC;AAED,wBAAgB,qBAAqB,CAAE,OAAO,KAAA,EAAE,KAAK,KAAA,EAAE,KAAK,KAAA,OAY3D;AACD;;IAEI;AACJ,wBAAsB,gBAAgB,CAAE,OAAO,EAAE,qBAAqB,EAAE,OAAO,EAAE;IAC/E,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,IAAI,CAAC,EAAE,SAAS,CAAA;CACjB,GAAG,OAAO,CAAC,qBAAqB,CAAC,CAuCjC;AAqGD,wBAAgB,iBAAiB,CAAE,GAAG,EAAE,YAAY,QA+InD;AAED;;;;;;;;;GASG;AACH,wBAAgB,cAAc,CAC5B,GAAG,EAAE,YAAY,EACjB,QAAQ,GAAE,CAAC,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC,GAAG,IAAW,EACtD,OAAO,GAAE;IACP,WAAW,CAAC,EAAE,MAAM,CAAC;CACjB,GACL,WAAW,CAwFb;AAyBD;;;GAGG;AAEH;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,eAAe,CAC7B,GAAG,EAAE,YAAY,EACjB,UAAU,EAAE,UAAU,EACtB,UAAU,EAAE,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,GAC9D,WAAW,CA0Pb;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,cAAc,CAC5B,GAAG,EAAE,YAAY,EACjB,UAAU,EAAE,UAAU,EACtB,QAAQ,EAAE,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,GAC5D,WAAW,CAmBb;AACD;;;GAGG;AACH,wBAAsB,YAAY,IAAK,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAgB/D;AAED;;GAEG;AACH,wBAAsB,oBAAoB,CACxC,KAAK,EAAE,KAAK,CAAC,cAAc,CAAC,GAC3B,OAAO,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,CAGhC"}
|
package/lib/login/login.js
CHANGED
|
@@ -100,93 +100,104 @@ function ensureLoadedPreferences(_x) {
|
|
|
100
100
|
// used to be logInLoadProfile
|
|
101
101
|
function _ensureLoadedPreferences() {
|
|
102
102
|
_ensureLoadedPreferences = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee4(context) {
|
|
103
|
-
var progressDisplay, preferencesFile, m2;
|
|
103
|
+
var statusArea, progressDisplay, complain, preferencesFile, m2;
|
|
104
104
|
return _regenerator["default"].wrap(function _callee4$(_context4) {
|
|
105
105
|
while (1) switch (_context4.prev = _context4.next) {
|
|
106
106
|
case 0:
|
|
107
|
+
complain = function _complain(message) {
|
|
108
|
+
message = "ensureLoadedPreferences: ".concat(message);
|
|
109
|
+
if (statusArea) {
|
|
110
|
+
// statusArea.innerHTML = ''
|
|
111
|
+
statusArea.appendChild(widgets.errorMessageBlock(context.dom, message));
|
|
112
|
+
}
|
|
113
|
+
debug.log(message);
|
|
114
|
+
// reject(new Error(message))
|
|
115
|
+
};
|
|
107
116
|
if (!context.preferencesFile) {
|
|
108
|
-
_context4.next =
|
|
117
|
+
_context4.next = 3;
|
|
109
118
|
break;
|
|
110
119
|
}
|
|
111
120
|
return _context4.abrupt("return", Promise.resolve(context));
|
|
112
|
-
case
|
|
113
|
-
|
|
114
|
-
|
|
121
|
+
case 3:
|
|
122
|
+
// already done
|
|
123
|
+
statusArea = context.statusArea || context.div || null;
|
|
124
|
+
_context4.prev = 4;
|
|
125
|
+
_context4.next = 7;
|
|
115
126
|
return ensureLoadedProfile(context);
|
|
116
|
-
case
|
|
127
|
+
case 7:
|
|
117
128
|
context = _context4.sent;
|
|
118
|
-
_context4.next =
|
|
129
|
+
_context4.next = 10;
|
|
119
130
|
return loadPreferences(context.me);
|
|
120
|
-
case
|
|
131
|
+
case 10:
|
|
121
132
|
preferencesFile = _context4.sent;
|
|
122
133
|
if (progressDisplay) {
|
|
123
134
|
progressDisplay.parentNode.removeChild(progressDisplay);
|
|
124
135
|
}
|
|
125
136
|
context.preferencesFile = preferencesFile;
|
|
126
|
-
_context4.next =
|
|
137
|
+
_context4.next = 51;
|
|
127
138
|
break;
|
|
128
|
-
case
|
|
129
|
-
_context4.prev =
|
|
130
|
-
_context4.t0 = _context4["catch"](
|
|
139
|
+
case 15:
|
|
140
|
+
_context4.prev = 15;
|
|
141
|
+
_context4.t0 = _context4["catch"](4);
|
|
131
142
|
if (!(_context4.t0 instanceof _solidLogic.UnauthorizedError)) {
|
|
132
|
-
_context4.next =
|
|
143
|
+
_context4.next = 22;
|
|
133
144
|
break;
|
|
134
145
|
}
|
|
135
146
|
m2 = 'Ooops - you are not authenticated (properly logged in) to for me to read your preference file. Try loggin out and logging in?';
|
|
136
147
|
(0, _log.alert)(m2);
|
|
137
|
-
_context4.next =
|
|
148
|
+
_context4.next = 51;
|
|
138
149
|
break;
|
|
139
|
-
case
|
|
150
|
+
case 22:
|
|
140
151
|
if (!(_context4.t0 instanceof _solidLogic.CrossOriginForbiddenError)) {
|
|
141
|
-
_context4.next =
|
|
152
|
+
_context4.next = 28;
|
|
142
153
|
break;
|
|
143
154
|
}
|
|
144
155
|
m2 = "Unauthorized: Assuming preference file blocked for origin ".concat(window.location.origin);
|
|
145
156
|
context.preferencesFileError = m2;
|
|
146
157
|
return _context4.abrupt("return", context);
|
|
147
|
-
case
|
|
158
|
+
case 28:
|
|
148
159
|
if (!(_context4.t0 instanceof _solidLogic.SameOriginForbiddenError)) {
|
|
149
|
-
_context4.next =
|
|
160
|
+
_context4.next = 34;
|
|
150
161
|
break;
|
|
151
162
|
}
|
|
152
163
|
m2 = 'You are not authorized to read your preference file. This may be because you are using an untrusted web app.';
|
|
153
164
|
debug.warn(m2);
|
|
154
165
|
return _context4.abrupt("return", context);
|
|
155
|
-
case
|
|
166
|
+
case 34:
|
|
156
167
|
if (!(_context4.t0 instanceof _solidLogic.NotEditableError)) {
|
|
157
|
-
_context4.next =
|
|
168
|
+
_context4.next = 40;
|
|
158
169
|
break;
|
|
159
170
|
}
|
|
160
171
|
m2 = 'You are not authorized to edit your preference file. This may be because you are using an untrusted web app.';
|
|
161
172
|
debug.warn(m2);
|
|
162
173
|
return _context4.abrupt("return", context);
|
|
163
|
-
case
|
|
174
|
+
case 40:
|
|
164
175
|
if (!(_context4.t0 instanceof _solidLogic.WebOperationError)) {
|
|
165
|
-
_context4.next =
|
|
176
|
+
_context4.next = 45;
|
|
166
177
|
break;
|
|
167
178
|
}
|
|
168
179
|
m2 = 'You are not authorized to edit your preference file. This may be because you are using an untrusted web app.';
|
|
169
180
|
debug.warn(m2);
|
|
170
|
-
_context4.next =
|
|
181
|
+
_context4.next = 51;
|
|
171
182
|
break;
|
|
172
|
-
case
|
|
183
|
+
case 45:
|
|
173
184
|
if (!(_context4.t0 instanceof _solidLogic.FetchError)) {
|
|
174
|
-
_context4.next =
|
|
185
|
+
_context4.next = 50;
|
|
175
186
|
break;
|
|
176
187
|
}
|
|
177
188
|
m2 = "Strange: Error ".concat(_context4.t0.status, " trying to read your preference file.").concat(_context4.t0.message);
|
|
178
189
|
(0, _log.alert)(m2);
|
|
179
|
-
_context4.next =
|
|
190
|
+
_context4.next = 51;
|
|
180
191
|
break;
|
|
181
|
-
case
|
|
192
|
+
case 50:
|
|
182
193
|
throw new Error("(via loadPrefs) ".concat(_context4.t0));
|
|
183
|
-
case
|
|
194
|
+
case 51:
|
|
184
195
|
return _context4.abrupt("return", context);
|
|
185
|
-
case
|
|
196
|
+
case 52:
|
|
186
197
|
case "end":
|
|
187
198
|
return _context4.stop();
|
|
188
199
|
}
|
|
189
|
-
}, _callee4, null, [[
|
|
200
|
+
}, _callee4, null, [[4, 15]]);
|
|
190
201
|
}));
|
|
191
202
|
return _ensureLoadedPreferences.apply(this, arguments);
|
|
192
203
|
}
|