bug fix
-- Fixed "Cannot set properties of undefined (setting 'chats')" issue
This commit is contained in:
parent
9e4a23af3c
commit
d956e1d613
224
index.html
224
index.html
@ -18,7 +18,7 @@
|
||||
}
|
||||
</script>
|
||||
<script src="https://unpkg.com/uhtml@3.0.1/es.js"></script>
|
||||
<script src="scripts/lib.js"></script>
|
||||
<script src="scripts/lib.min.js"></script>
|
||||
<script src="scripts/floCrypto.js"></script>
|
||||
<script src="scripts/btcOperator.js"></script>
|
||||
<script src="scripts/floBlockchainAPI.js"></script>
|
||||
@ -27,7 +27,7 @@
|
||||
<script src="scripts/floDapps.js"></script>
|
||||
<script src="scripts/keccak.js"></script>
|
||||
<script src="scripts/messengerEthereum.js"></script>
|
||||
<script src="scripts/messenger.js"></script>
|
||||
<script src="scripts/messenger.min.js"></script>
|
||||
<script id="onLoadStartUp">
|
||||
function onLoadStartUp() {
|
||||
routeTo('loading')
|
||||
@ -45,14 +45,14 @@
|
||||
//load messages from IDB and render them
|
||||
console.log(`Loading Data! Please Wait...`)
|
||||
//Set UI render functions
|
||||
messenger.renderUI.chats = renderChatList;
|
||||
messenger.renderUI.directChat = renderDirectUI;
|
||||
messenger.renderUI.groupChat = renderGroupUI;
|
||||
messenger.renderUI.pipeline = renderPipelineUI;
|
||||
messenger.renderUI.mails = m => renderMailList(m, false);
|
||||
messenger.renderUI.marked = renderMarked;
|
||||
rmMessenger.renderUI.chats = renderChatList;
|
||||
rmMessenger.renderUI.directChat = renderDirectUI;
|
||||
rmMessenger.renderUI.groupChat = renderGroupUI;
|
||||
rmMessenger.renderUI.pipeline = renderPipelineUI;
|
||||
rmMessenger.renderUI.mails = m => renderMailList(m, false);
|
||||
rmMessenger.renderUI.marked = renderMarked;
|
||||
//init messenger
|
||||
messenger.init().then(result => {
|
||||
rmMessenger.init().then(result => {
|
||||
console.log(result);
|
||||
//Check for available bg image
|
||||
setBgImage();
|
||||
@ -692,8 +692,8 @@
|
||||
<h4>Add contact</h4>
|
||||
</header>
|
||||
<sm-form>
|
||||
<sm-input id="add_contact_floID" data-flo-address placeholder="FLO/BTC/ETH address"
|
||||
error-text="Invalid address" animate autofocus required></sm-input>
|
||||
<sm-input id="add_contact_floID" data-address placeholder="FLO/BTC/ETH address" error-text="Invalid address"
|
||||
animate autofocus required></sm-input>
|
||||
<sm-input id="add_contact_name" placeholder="Name" animate required></sm-input>
|
||||
<button class="button button--primary" id="add_contact_button" type="submit" disabled>Add</button>
|
||||
</sm-form>
|
||||
@ -1196,9 +1196,9 @@
|
||||
}
|
||||
|
||||
function getAddressType(floID) {
|
||||
if (messenger.groups.hasOwnProperty(floID))
|
||||
if (rmMessenger.groups.hasOwnProperty(floID))
|
||||
return 'group';
|
||||
else if (messenger.pipeline.hasOwnProperty(floID))
|
||||
else if (rmMessenger.pipeline.hasOwnProperty(floID))
|
||||
return 'pipeline';
|
||||
else return 'plain';
|
||||
}
|
||||
@ -1221,7 +1221,7 @@
|
||||
let contactBtcAddress;
|
||||
let contactEthAddress;
|
||||
if (addressType === 'group')
|
||||
isAdmin = messenger.groups[chatAddress].admin === floDapps.user.id;
|
||||
isAdmin = rmMessenger.groups[chatAddress].admin === floDapps.user.id;
|
||||
let addAsContact
|
||||
if (!floGlobals.contacts.hasOwnProperty(chatAddress) && addressType === 'plain')
|
||||
addAsContact = html`
|
||||
@ -1230,7 +1230,7 @@
|
||||
Add as contact
|
||||
</button>`;
|
||||
let markReadUnread
|
||||
if (messenger.marked[chatAddress] && messenger.marked[chatAddress].includes('unread')) {
|
||||
if (rmMessenger.marked[chatAddress] && rmMessenger.marked[chatAddress].includes('unread')) {
|
||||
markReadUnread = html`
|
||||
<button id="mark_read_option" class="option" onclick="markAsRead()">
|
||||
<svg class="icon" xmlns="http://www.w3.org/2000/svg" enable-background="new 0 0 24 24" height="24px" viewBox="0 0 24 24" width="24px" fill="#000000"> <g> <rect fill="none" height="24" width="24" /> <path d="M12,18l-6,0l-4,4V4c0-1.1,0.9-2,2-2h16c1.1,0,2,0.9,2,2v7l-2,0V4H4v12l8,0V18z M23,14.34l-1.41-1.41l-4.24,4.24l-2.12-2.12 l-1.41,1.41L17.34,20L23,14.34z" /> </g> </svg>
|
||||
@ -1246,7 +1246,7 @@
|
||||
`;
|
||||
}
|
||||
let blockUnblock
|
||||
if (messenger.blocked.has(chatAddress)) {
|
||||
if (rmMessenger.blocked.has(chatAddress)) {
|
||||
blockUnblock = html`
|
||||
<button class="option" onclick="unblockUser()">
|
||||
<svg class="icon" xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 0 24 24" width="24px" fill="#000000"><path d="M0 0h24v24H0V0z" fill="none"/><path d="M7 11v2h10v-2H7zm5-9C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8z"/></svg>
|
||||
@ -1272,7 +1272,7 @@
|
||||
`
|
||||
}
|
||||
if (addressType === 'group') {
|
||||
const { description, created } = messenger.groups[chatAddress]
|
||||
const { description, created } = rmMessenger.groups[chatAddress]
|
||||
contactInitial = html.node`<svg class="icon group-icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64"><path d="M13.61,28.09c-1.63,0-4.72-2.35-5.33-3.58a21.65,21.65,0,0,1-1.35-7.32s-.26-6.07,6.68-6.07a6.38,6.38,0,0,1,6.69,6.07A21.65,21.65,0,0,1,19,24.51c-.62,1.23-3.7,3.58-5.34,3.58"/><path d="M50.39,28.09c-1.64,0-4.72-2.35-5.34-3.58a21.9,21.9,0,0,1-1.35-7.32s-.26-6.07,6.69-6.07a6.37,6.37,0,0,1,6.68,6.07,21.65,21.65,0,0,1-1.35,7.32c-.61,1.23-3.7,3.58-5.33,3.58"/><path d="M32,31.74c-2.21,0-6.37-3.17-7.2-4.83A29.3,29.3,0,0,1,23,17s-.35-8.21,9-8.21c8.68,0,9,8.21,9,8.21a29.3,29.3,0,0,1-1.83,9.88c-.82,1.66-5,4.83-7.2,4.83"/><path d="M48.29,38.58c-4.16-1.83-8.57-3.08-10.34-6.4a12,12,0,0,1-6,3.73,12,12,0,0,1-5.95-3.73c-1.77,3.32-6.18,4.57-10.34,6.4-1.7.71-3.11,9.88-1.13,9.88A33.06,33.06,0,0,0,31.23,53h1.54a33.06,33.06,0,0,0,16.65-4.53C51.4,48.46,50,39.29,48.29,38.58Z"/><path d="M14.82,36.57c.76-.33,1.54-.65,2.3-1,2.49-1,4.85-2,6.22-3.44C21.07,31.23,19,30.25,18,28.41a8.83,8.83,0,0,1-4.41,2.76,8.83,8.83,0,0,1-4.4-2.76c-1.31,2.46-4.58,3.38-7.66,4.74-1.26.52-2.3,7.31-.84,7.31a24.55,24.55,0,0,0,10.86,3.31C11.89,40.81,12.86,37.39,14.82,36.57Z"/><path d="M62.45,33.15c-3.08-1.36-6.35-2.28-7.66-4.74a8.83,8.83,0,0,1-4.4,2.76A8.83,8.83,0,0,1,46,28.41c-1,1.84-3,2.82-5.32,3.76,1.37,1.43,3.73,2.41,6.22,3.44.76.31,1.54.63,2.26,1,2,.83,3,4.25,3.29,7.21a24.55,24.55,0,0,0,10.86-3.31C64.75,40.46,63.71,33.67,62.45,33.15Z"/></svg>`
|
||||
lastInteraction = `Created ${getFormattedTime(created)}`;
|
||||
disableContactName = !isAdmin
|
||||
@ -1280,10 +1280,10 @@
|
||||
getRef('contact_details_popup').classList.add('is-group');
|
||||
floAddressType = 'Group FLO address'
|
||||
} else if (addressType === 'pipeline') {
|
||||
const { model, members } = messenger.pipeline[chatAddress]
|
||||
const { model, members } = rmMessenger.pipeline[chatAddress]
|
||||
contactInitial = html.node`<svg class="icon group-icon" xmlns="http://www.w3.org/2000/svg" enable-background="new 0 0 24 24" height="24px" viewBox="0 0 24 24" width="24px" fill="#000000"><g><rect fill="none" height="24" width="24"></rect></g><g><g><path d="M6,15c1.1,0,2,0.9,2,2s-0.9,2-2,2s-2-0.9-2-2S4.9,15,6,15 M6,13c-2.2,0-4,1.8-4,4s1.8,4,4,4s4-1.8,4-4S8.2,13,6,13z M12,5 c1.1,0,2,0.9,2,2s-0.9,2-2,2s-2-0.9-2-2S10.9,5,12,5 M12,3C9.8,3,8,4.8,8,7s1.8,4,4,4s4-1.8,4-4S14.2,3,12,3z M18,15 c1.1,0,2,0.9,2,2s-0.9,2-2,2s-2-0.9-2-2S16.9,15,18,15 M18,13c-2.2,0-4,1.8-4,4s1.8,4,4,4s4-1.8,4-4S20.2,13,18,13z"></path></g></g></svg>`
|
||||
getRef('contact_details_popup').classList.add('is-group');
|
||||
floAddressType = `${messenger.pipeline[chatAddress].model === 'flo_multisig' ? 'FLO' : 'BTC'} Multisig address`;
|
||||
floAddressType = `${rmMessenger.pipeline[chatAddress].model === 'flo_multisig' ? 'FLO' : 'BTC'} Multisig address`;
|
||||
} else {
|
||||
disableContactName = false;
|
||||
contactInitial = getContactName(chatAddress).charAt(0);
|
||||
@ -1295,7 +1295,7 @@
|
||||
// Get pipeline origin multisig address
|
||||
getTxHex(chatAddress).then(async tx_hex => {
|
||||
let details
|
||||
switch (messenger.pipeline[chatAddress].model) {
|
||||
switch (rmMessenger.pipeline[chatAddress].model) {
|
||||
case 'flo_multisig':
|
||||
details = await floBlockchainAPI.parseTransaction(tx_hex)
|
||||
break;
|
||||
@ -1403,7 +1403,7 @@
|
||||
const contacts = []
|
||||
const groupID = getRef('edit_group_button').dataset.groupId;
|
||||
for (const contact in floGlobals.contacts) {
|
||||
if (!messenger.groups[groupID].members.includes(contact) && floDapps.user.get_pubKey(contact)) {
|
||||
if (!rmMessenger.groups[groupID].members.includes(contact) && floDapps.user.get_pubKey(contact)) {
|
||||
contacts.push(render.selectableContact(contact))
|
||||
}
|
||||
}
|
||||
@ -1443,7 +1443,7 @@
|
||||
switch (e.target.id) {
|
||||
case 'contact_details_popup':
|
||||
renderElem(getRef('contact_details_section'), html``)
|
||||
if (messenger.groups.hasOwnProperty(floGlobals.viewingDetailsOfAddress)) {
|
||||
if (rmMessenger.groups.hasOwnProperty(floGlobals.viewingDetailsOfAddress)) {
|
||||
isGroupEditable = true;
|
||||
}
|
||||
break;
|
||||
@ -1650,8 +1650,8 @@
|
||||
function getContactName(contactAddress) {
|
||||
if (floDapps.user.get_contact(contactAddress))
|
||||
return floDapps.user.get_contact(contactAddress)
|
||||
else if (messenger.groups[contactAddress])
|
||||
return messenger.groups[contactAddress].name
|
||||
else if (rmMessenger.groups[contactAddress])
|
||||
return rmMessenger.groups[contactAddress].name
|
||||
else if (floCrypto.isSameAddr(contactAddress, floDapps.user.id))
|
||||
return 'You'
|
||||
else
|
||||
@ -1824,7 +1824,7 @@
|
||||
getRef('main_navbar').classList.remove('hide-on-mobile')
|
||||
}
|
||||
}
|
||||
messenger.list_request_received({ completed: false }).then(requests => addNotificationBadge('#notification_panel_button', Object.keys(requests).length, { replace: true }))
|
||||
rmMessenger.list_request_received({ completed: false }).then(requests => addNotificationBadge('#notification_panel_button', Object.keys(requests).length, { replace: true }))
|
||||
removeNotificationBadge('#chat_page_button')
|
||||
if (floGlobals.idInterval)
|
||||
clearInterval(floGlobals.idInterval)
|
||||
@ -2470,7 +2470,7 @@
|
||||
let initial
|
||||
if (type === 'group') {
|
||||
initial = html`<svg class="icon group-icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64"><path d="M13.61,28.09c-1.63,0-4.72-2.35-5.33-3.58a21.65,21.65,0,0,1-1.35-7.32s-.26-6.07,6.68-6.07a6.38,6.38,0,0,1,6.69,6.07A21.65,21.65,0,0,1,19,24.51c-.62,1.23-3.7,3.58-5.34,3.58"/><path d="M50.39,28.09c-1.64,0-4.72-2.35-5.34-3.58a21.9,21.9,0,0,1-1.35-7.32s-.26-6.07,6.69-6.07a6.37,6.37,0,0,1,6.68,6.07,21.65,21.65,0,0,1-1.35,7.32c-.61,1.23-3.7,3.58-5.33,3.58"/><path d="M32,31.74c-2.21,0-6.37-3.17-7.2-4.83A29.3,29.3,0,0,1,23,17s-.35-8.21,9-8.21c8.68,0,9,8.21,9,8.21a29.3,29.3,0,0,1-1.83,9.88c-.82,1.66-5,4.83-7.2,4.83"/><path d="M48.29,38.58c-4.16-1.83-8.57-3.08-10.34-6.4a12,12,0,0,1-6,3.73,12,12,0,0,1-5.95-3.73c-1.77,3.32-6.18,4.57-10.34,6.4-1.7.71-3.11,9.88-1.13,9.88A33.06,33.06,0,0,0,31.23,53h1.54a33.06,33.06,0,0,0,16.65-4.53C51.4,48.46,50,39.29,48.29,38.58Z"/><path d="M14.82,36.57c.76-.33,1.54-.65,2.3-1,2.49-1,4.85-2,6.22-3.44C21.07,31.23,19,30.25,18,28.41a8.83,8.83,0,0,1-4.41,2.76,8.83,8.83,0,0,1-4.4-2.76c-1.31,2.46-4.58,3.38-7.66,4.74-1.26.52-2.3,7.31-.84,7.31a24.55,24.55,0,0,0,10.86,3.31C11.89,40.81,12.86,37.39,14.82,36.57Z"/><path d="M62.45,33.15c-3.08-1.36-6.35-2.28-7.66-4.74a8.83,8.83,0,0,1-4.4,2.76A8.83,8.83,0,0,1,46,28.41c-1,1.84-3,2.82-5.32,3.76,1.37,1.43,3.73,2.41,6.22,3.44.76.31,1.54.63,2.26,1,2,.83,3,4.25,3.29,7.21a24.55,24.55,0,0,0,10.86-3.31C64.75,40.46,63.71,33.67,62.45,33.15Z"/></svg> `
|
||||
name = messenger.groups[contactAddress].name
|
||||
name = rmMessenger.groups[contactAddress].name
|
||||
} else if (type === 'pipeline') {
|
||||
initial = html`<svg class="icon group-icon" xmlns="http://www.w3.org/2000/svg" enable-background="new 0 0 24 24" height="24px" viewBox="0 0 24 24" width="24px" fill="#000000"><g><rect fill="none" height="24" width="24"/></g><g><g><path d="M6,15c1.1,0,2,0.9,2,2s-0.9,2-2,2s-2-0.9-2-2S4.9,15,6,15 M6,13c-2.2,0-4,1.8-4,4s1.8,4,4,4s4-1.8,4-4S8.2,13,6,13z M12,5 c1.1,0,2,0.9,2,2s-0.9,2-2,2s-2-0.9-2-2S10.9,5,12,5 M12,3C9.8,3,8,4.8,8,7s1.8,4,4,4s4-1.8,4-4S14.2,3,12,3z M18,15 c1.1,0,2,0.9,2,2s-0.9,2-2,2s-2-0.9-2-2S16.9,15,18,15 M18,13c-2.2,0-4,1.8-4,4s1.8,4,4,4s4-1.8,4-4S20.2,13,18,13z"/></g></g></svg>`
|
||||
} else {
|
||||
@ -2500,7 +2500,7 @@
|
||||
}
|
||||
}
|
||||
let tag = 'BTC'
|
||||
if (type === 'pipeline' && messenger.pipeline[contactAddress].model === 'flo_multisig') {
|
||||
if (type === 'pipeline' && rmMessenger.pipeline[contactAddress].model === 'flo_multisig') {
|
||||
tag = 'FLO'
|
||||
}
|
||||
const className = `contact ${type !== 'contact' ? type : ''} ${markUnread ? 'unread' : ''} interactive collapsed`
|
||||
@ -2509,7 +2509,7 @@
|
||||
<div class="initial flex align-center">
|
||||
${initial}
|
||||
</div>
|
||||
${type === 'pipeline' ? html`<div class="tag">${tag} Multisig ${messenger.pipeline[contactAddress].disabled ? ' - Completed' : ''}</div>` : ''}
|
||||
${type === 'pipeline' ? html`<div class="tag">${tag} Multisig ${rmMessenger.pipeline[contactAddress].disabled ? ' - Completed' : ''}</div>` : ''}
|
||||
<h4 class="name">${name}</h4>
|
||||
${type === 'contact' ? html`<p class="contact__flo-address wrap-around">${contactAddress}</p>` : ''}
|
||||
</div>
|
||||
@ -2599,7 +2599,7 @@
|
||||
} else if (admin) {
|
||||
if (newMembers.length) {
|
||||
const cards = document.createDocumentFragment()
|
||||
const { admin } = messenger.groups[groupID]
|
||||
const { admin } = rmMessenger.groups[groupID]
|
||||
newMembers.forEach(member => {
|
||||
let eventCard = html.node`<p class="group-event-card event-card">${getContactName(admin)} added ${member === floDapps.user.id ? 'you' : getContactName(member)}</p>`
|
||||
cards.append(eventCard)
|
||||
@ -2607,7 +2607,7 @@
|
||||
return cards
|
||||
} else if (rmMembers.length) {
|
||||
const cards = document.createDocumentFragment()
|
||||
const { admin } = messenger.groups[groupID]
|
||||
const { admin } = rmMessenger.groups[groupID]
|
||||
rmMembers.forEach(member => {
|
||||
let eventCard = html.node`<p class="group-event-card event-card">${getContactName(admin)} removed ${member === floDapps.user.id ? 'you' : getContactName(member)}</p>`
|
||||
cards.append(eventCard)
|
||||
@ -2636,7 +2636,7 @@
|
||||
// disable chatting
|
||||
getRef('chat_footer').classList.add('hidden')
|
||||
let redirectTo = `https://ranchimall.github.io/btcwallet/#/check_details?query=`
|
||||
if (messenger.pipeline[activeChat.address].model === 'flo_multisig')
|
||||
if (rmMessenger.pipeline[activeChat.address].model === 'flo_multisig')
|
||||
redirectTo = `https://blockbook.ranchimall.net/tx/`
|
||||
return html.node`<div class="pipeline-event pipeline-event--signed event-card flex align-center wrap-around">
|
||||
<svg class="icon margin-right-0-5" xmlns="http://www.w3.org/2000/svg" enable-background="new 0 0 24 24" height="24px" viewBox="0 0 24 24" width="24px" fill="#000000"><g><rect fill="none" height="24" width="24"/></g><g><path d="M23,12l-2.44-2.79l0.34-3.69l-3.61-0.82L15.4,1.5L12,2.96L8.6,1.5L6.71,4.69L3.1,5.5L3.44,9.2L1,12l2.44,2.79l-0.34,3.7 l3.61,0.82L8.6,22.5l3.4-1.47l3.4,1.46l1.89-3.19l3.61-0.82l-0.34-3.69L23,12z M10.09,16.72l-3.8-3.81l1.48-1.48l2.32,2.33 l5.85-5.87l1.48,1.48L10.09,16.72z"/></g></svg>
|
||||
@ -2655,8 +2655,8 @@
|
||||
},
|
||||
groupMembers(groupID, areSelectable = false) {
|
||||
const groupMembersCards = [];
|
||||
messenger.groups[groupID].members.forEach(floID => {
|
||||
let isAdmin = messenger.groups[groupID].admin === floID ? true : false
|
||||
rmMessenger.groups[groupID].members.forEach(floID => {
|
||||
let isAdmin = rmMessenger.groups[groupID].admin === floID ? true : false
|
||||
let name = getContactName(floID)
|
||||
let initial = name.charAt(0)
|
||||
if (areSelectable) {
|
||||
@ -2679,7 +2679,7 @@
|
||||
},
|
||||
pipelineMembers(pipeID) {
|
||||
const groupMembersCards = [];
|
||||
messenger.pipeline[pipeID].members.forEach(floID => {
|
||||
rmMessenger.pipeline[pipeID].members.forEach(floID => {
|
||||
let name = getContactName(floID)
|
||||
let initial = name.charAt(0)
|
||||
groupMembersCards.push(html`
|
||||
@ -2692,7 +2692,7 @@
|
||||
renderElem(getRef('group_members_list'), html`${groupMembersCards}`)
|
||||
},
|
||||
blockedList() {
|
||||
const blockedListCards = [...messenger.blocked].map(floID => {
|
||||
const blockedListCards = [...rmMessenger.blocked].map(floID => {
|
||||
const name = getContactName(floID)
|
||||
const initial = name.charAt(0)
|
||||
return html`
|
||||
@ -2752,7 +2752,7 @@
|
||||
multisigAddresses() {
|
||||
const multisigMode = getRef('multisig_mode_selector').value || 'btc'
|
||||
return new Promise((resolve, reject) => {
|
||||
Promise.all([messenger.multisig.listAddress(), compactIDB.readAllData('multisigLabels')])
|
||||
Promise.all([rmMessenger.multisig.listAddress(), compactIDB.readAllData('multisigLabels')])
|
||||
.then(([addresses, labels]) => {
|
||||
renderElem(getRef('select_multisig_list'), html``)
|
||||
const list = Object.keys(addresses).map(address => render.multisigAddressCard(address, addresses[address], labels[address], multisigMode)) || []
|
||||
@ -2783,7 +2783,7 @@
|
||||
},
|
||||
async notifications() {
|
||||
try {
|
||||
const notifications = await messenger.list_request_received({ completed: false })
|
||||
const notifications = await rmMessenger.list_request_received({ completed: false })
|
||||
let receivedRequests = []
|
||||
for (const key in notifications) {
|
||||
receivedRequests.unshift(render.notification(key, notifications[key]))
|
||||
@ -2846,24 +2846,24 @@
|
||||
return new Promise((resolve, reject) => {
|
||||
let chatGetter
|
||||
let type
|
||||
if (messenger.chats[floID]) {
|
||||
if (rmMessenger.chats[floID]) {
|
||||
type = 'chat'
|
||||
chatGetter = getMergedChat
|
||||
} else {
|
||||
if (messenger.groups[floID])
|
||||
if (rmMessenger.groups[floID])
|
||||
type = 'group'
|
||||
if (messenger.pipeline[floID])
|
||||
if (rmMessenger.pipeline[floID])
|
||||
type = 'pipeline'
|
||||
chatGetter = messenger.getChat
|
||||
chatGetter = rmMessenger.getChat
|
||||
}
|
||||
chatGetter(floID).then(chat => {
|
||||
let lastMessage = Object.values(chat).reverse().find(({ message }) => message) || { message: '', time: 0 }
|
||||
let { message, time, sender, category } = lastMessage
|
||||
if (type === 'group' && time === 0)
|
||||
lastMessage.time = messenger.groups[floID].created
|
||||
lastMessage.time = rmMessenger.groups[floID].created
|
||||
const amISender = type === 'chat' && category === 'sent' || type === 'group' && sender === floDapps.user.id
|
||||
lastMessage.lastMessage = ''
|
||||
if (messenger.blocked.has(floID)) {
|
||||
if (rmMessenger.blocked.has(floID)) {
|
||||
lastMessage.lastText = 'Blocked conversation'
|
||||
} else {
|
||||
if (amISender) {
|
||||
@ -2985,7 +2985,7 @@
|
||||
document.title = `New mail(s)`
|
||||
addNotificationBadge('#mail_page_button', Object.keys(data.mails).length)
|
||||
}
|
||||
messenger.list_request_received({ completed: false }).then(requests => addNotificationBadge('#notification_panel_button', Object.keys(requests).length, { replace: true }))
|
||||
rmMessenger.list_request_received({ completed: false }).then(requests => addNotificationBadge('#notification_panel_button', Object.keys(requests).length, { replace: true }))
|
||||
updateMessageUI(data.messages)
|
||||
renderMailList(data.mails, true)
|
||||
}
|
||||
@ -3020,7 +3020,7 @@
|
||||
}
|
||||
let floChatID = floCrypto.toFloID(chatID);
|
||||
let btcChatID = btcOperator.convert.legacy2bech(floChatID);
|
||||
Promise.all([messenger.getChat(floChatID), messenger.getChat(btcChatID)])
|
||||
Promise.all([rmMessenger.getChat(floChatID), rmMessenger.getChat(btcChatID)])
|
||||
.then(async ([floChat, btcChat]) => {
|
||||
const transaction = mergeSortedArrays(Object.values(floChat), Object.values(btcChat), 'time')
|
||||
.reverse()
|
||||
@ -3118,8 +3118,8 @@
|
||||
} else {
|
||||
const chatType = floID ? 'chat' : groupID ? 'group' : 'pipeline'
|
||||
if (floID) {
|
||||
if (!(floID in messenger.chats) || !(floCrypto.toFloID(floID) in messenger.chats)) {
|
||||
await messenger.addChat(floID).catch(err => console.error(err))
|
||||
if (!(floID in rmMessenger.chats) || !(floCrypto.toFloID(floID) in rmMessenger.chats)) {
|
||||
await rmMessenger.addChat(floID).catch(err => console.error(err))
|
||||
}
|
||||
}
|
||||
getRef('chats_list').prepend(html.node`${render.contactCard(chatAddress, { type: chatType, prepend: true, markUnread: true, ref: getRef('chats_list') })}`)
|
||||
@ -3129,7 +3129,7 @@
|
||||
chatCard.classList.add('active')
|
||||
}
|
||||
let finalMessage
|
||||
if (messenger.groups && messenger.groups[groupID]) {
|
||||
if (rmMessenger.groups && rmMessenger.groups[groupID]) {
|
||||
finalMessage = `${getContactName(sender)}: ${message}`
|
||||
}
|
||||
else
|
||||
@ -3146,7 +3146,7 @@
|
||||
getRef('scroll_to_bottom').classList.add('new-message')
|
||||
else {
|
||||
if (document.hasFocus()) {
|
||||
messenger.removeMark(chatAddress, 'unread')
|
||||
rmMessenger.removeMark(chatAddress, 'unread')
|
||||
setTimeout(() => {
|
||||
document.title = 'RanchiMall Messenger'
|
||||
getChatCard(chatAddress).classList.remove('unread')
|
||||
@ -3291,7 +3291,7 @@
|
||||
let contact = e.target.closest(".contact")
|
||||
clickedContact['chatCard'] = contact
|
||||
clickedContact.address = contact.dataset.address
|
||||
clickedContact['isGroup'] = messenger.groups.hasOwnProperty(clickedContact.address)
|
||||
clickedContact['isGroup'] = rmMessenger.groups.hasOwnProperty(clickedContact.address)
|
||||
floGlobals.viewingDetailsOfAddress = clickedContact.address
|
||||
openPopup('contact_details_popup')
|
||||
}, 500)
|
||||
@ -3331,7 +3331,7 @@
|
||||
clickedContact = {
|
||||
chatCard: e.delegateTarget,
|
||||
address: e.delegateTarget.dataset.address,
|
||||
isGroup: messenger.groups.hasOwnProperty(e.delegateTarget.dataset.address)
|
||||
isGroup: rmMessenger.groups.hasOwnProperty(e.delegateTarget.dataset.address)
|
||||
}
|
||||
if (clickedContact.address === floGlobals.myFloID) return
|
||||
if (e.target.closest(".initial") || e.target.closest(".menu")) {
|
||||
@ -3404,7 +3404,7 @@
|
||||
})
|
||||
delegate(getRef('select_contacts_container'), 'click', '.request-pubkey', e => {
|
||||
const floID = e.delegateTarget.closest('.selectable-contact').dataset.address
|
||||
messenger.request_pubKey(floID)
|
||||
rmMessenger.request_pubKey(floID)
|
||||
e.delegateTarget.disabled = true;
|
||||
e.delegateTarget.textContent = 'Request sent'
|
||||
})
|
||||
@ -3506,7 +3506,7 @@
|
||||
const label = getRef('multisig_label').value.trim();
|
||||
buttonLoader('create_multisig_button', true)
|
||||
console.log('creating multisig address', selctedPubKeys, minRequired)
|
||||
messenger.multisig.createAddress(selctedPubKeys, minRequired).then(multisigAddress => {
|
||||
rmMessenger.multisig.createAddress(selctedPubKeys, minRequired).then(multisigAddress => {
|
||||
console.log('created multisig address', multisigAddress)
|
||||
compactIDB.writeData('multisigLabels', label, multisigAddress).then(() => {
|
||||
notify('Created multisig address', 'success');
|
||||
@ -3545,14 +3545,14 @@
|
||||
const groupName = getRef('group_name_field').value.trim()
|
||||
const groupDescription = getRef('group_description_field').value.trim()
|
||||
buttonLoader('create_group_button', true)
|
||||
messenger.createGroup(groupName, groupDescription)
|
||||
rmMessenger.createGroup(groupName, groupDescription)
|
||||
.then(groupInfo => {
|
||||
getRef('chats_list').prepend(html.node`${render.contactCard(groupInfo.groupID, { type: 'group', ref: getRef('chats_list') })}`);
|
||||
getRef('chats_list').children[0].click()
|
||||
closePopup()
|
||||
notify('Group created', 'success')
|
||||
if (selectedMembers.size) {
|
||||
messenger.addGroupMembers(groupInfo.groupID, [...selectedMembers])
|
||||
rmMessenger.addGroupMembers(groupInfo.groupID, [...selectedMembers])
|
||||
.then(res => {
|
||||
clearAllMembers()
|
||||
})
|
||||
@ -3682,7 +3682,7 @@
|
||||
function clearUserData() {
|
||||
getConfirmation('Clear Data', { message: 'Are you sure you want to clear all data?', confirmText: 'Yes', cancelText: 'No' }).then(confirmed => {
|
||||
if (confirmed) {
|
||||
messenger.clearUserData().then(result => {
|
||||
rmMessenger.clearUserData().then(result => {
|
||||
notify("Successfully Cleared local data", 'success')
|
||||
onLoadStartUp()
|
||||
}).catch(error => notify(error, "error"))
|
||||
@ -3696,7 +3696,7 @@
|
||||
|
||||
getRef("backup_data").addEventListener("click", function (e) {
|
||||
renderElem(getRef("backup_info"), html`Generating the backup file! Please wait...`)
|
||||
messenger.backupData().then(blob => {
|
||||
rmMessenger.backupData().then(blob => {
|
||||
renderElem(getRef("backup_info"), html`
|
||||
Backup file generated! If the download didn't start automatically,
|
||||
<a href="${URL.createObjectURL(blob)}" download="${`BackupFor_${floDapps.user.id}_${Date.now()}.json`}">click here</a>
|
||||
@ -3717,11 +3717,11 @@
|
||||
notify(`No files selected!`);
|
||||
return;
|
||||
}
|
||||
messenger.parseBackup(file).then(async data => {
|
||||
rmMessenger.parseBackup(file).then(async data => {
|
||||
getConfirmation('Restore Data?', { message: `Found: ${Object.keys(data.contacts).length} Contacts,\n ${Object.keys(data.messages).length} Messages, ${Object.keys(data.mails).length} Mails.`, confirmText: 'Restore', cancelText: 'Cancel' }).then(confirmed => {
|
||||
if (confirmed) {
|
||||
notify(`Restoring data! Please wait.`);
|
||||
messenger.restoreData(data).then(result => {
|
||||
rmMessenger.restoreData(data).then(result => {
|
||||
notify("Data restore completed successful! Initiating reload, Please wait", 'success')
|
||||
setTimeout(() => {
|
||||
location.reload()
|
||||
@ -3762,13 +3762,13 @@
|
||||
try {
|
||||
switch (activeChat.type) {
|
||||
case 'group':
|
||||
await messenger.sendGroupMessage(message, receiver)
|
||||
await rmMessenger.sendGroupMessage(message, receiver)
|
||||
break;
|
||||
case 'pipeline':
|
||||
await messenger.sendPipelineMessage(message, receiver)
|
||||
await rmMessenger.sendPipelineMessage(message, receiver)
|
||||
break;
|
||||
case 'plain':
|
||||
await messenger.sendMessage(message, receiver)
|
||||
await rmMessenger.sendMessage(message, receiver)
|
||||
break;
|
||||
}
|
||||
if (getRef('messages_container').querySelector(`.unconfirmed`))
|
||||
@ -3797,7 +3797,7 @@
|
||||
notify(`Equivalent Address is already saved as ${getContactName(addrInFlo)}`, 'error');
|
||||
return;
|
||||
}
|
||||
messenger.storeContact(addressToSave, name).then(result => {
|
||||
rmMessenger.storeContact(addressToSave, name).then(result => {
|
||||
closePopup()
|
||||
notify(`Added Contact: ${addressToSave}`)
|
||||
const chatCard = getChatCard(addressToSave)
|
||||
@ -3829,7 +3829,7 @@
|
||||
}
|
||||
async function renderCreationList() {
|
||||
const contacts = []
|
||||
const sentRequests = await messenger.list_request_sent();
|
||||
const sentRequests = await rmMessenger.list_request_sent();
|
||||
const skipSendingRequest = new Set();
|
||||
for (const key in sentRequests) {
|
||||
skipSendingRequest.add(sentRequests[key].floID)
|
||||
@ -3846,14 +3846,14 @@
|
||||
renderElem(getRef('select_contacts_container'), html`${contacts}`)
|
||||
}
|
||||
|
||||
async function renderChatList(chatOrder = messenger.getChatOrder()) {
|
||||
async function renderChatList(chatOrder = rmMessenger.getChatOrder()) {
|
||||
const chatOrderLookup = new Set()
|
||||
const mergedChatOrder = []
|
||||
// merge equivalent addresses
|
||||
chatOrder.forEach(address => {
|
||||
if (messenger.groups.hasOwnProperty(address))
|
||||
if (rmMessenger.groups.hasOwnProperty(address))
|
||||
return mergedChatOrder.push(address)
|
||||
if (messenger.pipeline.hasOwnProperty(address))
|
||||
if (rmMessenger.pipeline.hasOwnProperty(address))
|
||||
return mergedChatOrder.push(address)
|
||||
let priorityAddress;
|
||||
let equivalentFloAddress;
|
||||
@ -3880,13 +3880,13 @@
|
||||
}
|
||||
});
|
||||
const chats = mergedChatOrder.map(address => {
|
||||
const markUnread = messenger.marked[address] ? messenger.marked[address].includes('unread') : false;
|
||||
const markUnread = rmMessenger.marked[address] ? rmMessenger.marked[address].includes('unread') : false;
|
||||
let type
|
||||
if (messenger.chats[address])
|
||||
if (rmMessenger.chats[address])
|
||||
type = 'chat'
|
||||
else if (messenger.groups[address])
|
||||
else if (rmMessenger.groups[address])
|
||||
type = 'group'
|
||||
else if (messenger.pipeline[address])
|
||||
else if (rmMessenger.pipeline[address])
|
||||
type = 'pipeline'
|
||||
return render.contactCard(address, { type, markUnread, ref: getRef('chats_list') })
|
||||
})
|
||||
@ -3903,7 +3903,7 @@
|
||||
|
||||
function scrollToBottom(smooth = false) {
|
||||
if (activeChat.address) {
|
||||
messenger.removeMark(activeChat.address, 'unread')
|
||||
rmMessenger.removeMark(activeChat.address, 'unread')
|
||||
if (getChatCard(activeChat.address))
|
||||
getChatCard(activeChat.address).classList.remove('unread')
|
||||
}
|
||||
@ -3918,10 +3918,10 @@
|
||||
buttonLoader(button, true)
|
||||
const tx_hex_signed = floGlobals.pipelineTxHex || getTxHex(pipeID)
|
||||
if (!tx_hex_signed) reject('No transaction found')
|
||||
const pipeline = messenger.pipeline[pipeID]
|
||||
const pipeline = rmMessenger.pipeline[pipeID]
|
||||
const txid = await floBlockchainAPI.broadcastTx(tx_hex_signed)
|
||||
console.debug(txid);
|
||||
const result = await messenger.sendRaw(messenger.encrypt(txid, pipeline.eKey), pipeline.id, "BROADCAST", false)
|
||||
const result = await rmMessenger.sendRaw(rmMessenger.encrypt(txid, pipeline.eKey), pipeline.id, "BROADCAST", false)
|
||||
renderElem(button.closest('.grid'), html``)
|
||||
resolve({
|
||||
tx_hex: tx_hex_signed,
|
||||
@ -3954,7 +3954,7 @@
|
||||
if (newFee <= fee)
|
||||
return notify('New fee should be greater than current fee', 'error')
|
||||
buttonLoader(button, true)
|
||||
const newPipeID = await messenger.editFee(floGlobals.pipelineTxID, newFee, await floDapps.user.private)
|
||||
const newPipeID = await rmMessenger.editFee(floGlobals.pipelineTxID, newFee, await floDapps.user.private)
|
||||
highlightNewGroup(newPipeID)
|
||||
notify('Created a new multisig group. Please collect required signs again.', 'success')
|
||||
} catch (error) {
|
||||
@ -3971,10 +3971,10 @@
|
||||
floChatAddress = validateEthAddress(address) ? floCrypto.getFloID(floGlobals.pubKeys[address] || getEthPubKey(address)) : floCrypto.toFloID(address);
|
||||
if (floChatAddress) {
|
||||
btcChatAddress = btcOperator.convert.legacy2bech(floChatAddress);
|
||||
promises.push(messenger.getChat(floChatAddress), messenger.getChat(btcChatAddress))
|
||||
promises.push(rmMessenger.getChat(floChatAddress), rmMessenger.getChat(btcChatAddress))
|
||||
}
|
||||
if (validateEthAddress(address))
|
||||
promises.push(messenger.getChat(address))
|
||||
promises.push(rmMessenger.getChat(address))
|
||||
Promise.all(promises)
|
||||
.then((chats) => {
|
||||
// recursively merge chats using mergeSortedArrays
|
||||
@ -3989,7 +3989,7 @@
|
||||
let chatLazyLoader
|
||||
function renderMessages(address) {
|
||||
return new Promise(async (resolve, reject) => {
|
||||
(getAddressType(address) === 'plain' ? getMergedChat(address) : messenger.getChat(address)).then(chat => {
|
||||
(getAddressType(address) === 'plain' ? getMergedChat(address) : rmMessenger.getChat(address)).then(chat => {
|
||||
chat = Object.values(chat)
|
||||
if (chatLazyLoader) {
|
||||
chatLazyLoader.update(chat)
|
||||
@ -4071,13 +4071,13 @@
|
||||
getChatCard(floID)?.scrollIntoView({ behavior: 'smooth', block: 'center' })
|
||||
}, 100);
|
||||
getRef("receiver_initial").setAttribute('style', `--contact-color: var(${contactColor(floID)})`)
|
||||
messenger.removeMark(floID, "unread");
|
||||
rmMessenger.removeMark(floID, "unread");
|
||||
if (this.scrollHeight <= this.clientHeight) {
|
||||
chatScrollInfo['isScrolledUp'] = false
|
||||
getRef('scroll_to_bottom').classList.remove('no-transformations')
|
||||
}
|
||||
const floIdType = getAddressType(floID)
|
||||
if (floIdType === 'pipeline' && messenger.pipeline[floID].disabled) {
|
||||
if (floIdType === 'pipeline' && rmMessenger.pipeline[floID].disabled) {
|
||||
getRef('chat_footer').classList.add('hidden')
|
||||
} else {
|
||||
getRef('chat_footer').classList.remove('hidden')
|
||||
@ -4085,7 +4085,7 @@
|
||||
lastSender = ''
|
||||
renderMessages(floID).then(async () => {
|
||||
if (activeChat.type === 'pipeline') {
|
||||
if (!messenger.pipeline[floID].disabled && floGlobals.pipeSigns[floID] && !floGlobals.pipeSigns[floID].has(floDapps.user.id)) {
|
||||
if (!rmMessenger.pipeline[floID].disabled && floGlobals.pipeSigns[floID] && !floGlobals.pipeSigns[floID].has(floDapps.user.id)) {
|
||||
getRef('messages_container').append(html.node`
|
||||
<div class="grid gap-1 card signing-banner" style="margin: 1.5rem auto;">
|
||||
<div class="grid gap-0-5">
|
||||
@ -4101,7 +4101,7 @@
|
||||
if (floGlobals.pipelineTxHex) {
|
||||
try {
|
||||
let parsedTx, currency
|
||||
switch (messenger.pipeline[floID].model) {
|
||||
switch (rmMessenger.pipeline[floID].model) {
|
||||
case 'flo_multisig':
|
||||
currency = 'FLO'
|
||||
parsedTx = await floBlockchainAPI.parseTransaction(floGlobals.pipelineTxHex)
|
||||
@ -4116,8 +4116,8 @@
|
||||
const pendingSigns = minSignsRequired - signsDone || 0;
|
||||
if (getRef('transaction_details')) getRef('transaction_details').remove()
|
||||
let retrySection = ''
|
||||
if (pendingSigns === 0 && !messenger.pipeline[floID].disabled) {
|
||||
switch (messenger.pipeline[floID].model) {
|
||||
if (pendingSigns === 0 && !rmMessenger.pipeline[floID].disabled) {
|
||||
switch (rmMessenger.pipeline[floID].model) {
|
||||
case 'flo_multisig':
|
||||
retrySection = html`
|
||||
<div class="grid gap-0-5 margin-top-1">
|
||||
@ -4130,8 +4130,8 @@
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (messenger.pipeline[floID].disabled && floGlobals.pipelineTxID) {
|
||||
switch (messenger.pipeline[floID].model) {
|
||||
if (rmMessenger.pipeline[floID].disabled && floGlobals.pipelineTxID) {
|
||||
switch (rmMessenger.pipeline[floID].model) {
|
||||
case 'btc_multisig':
|
||||
const { block, confirmations } = await btcOperator.getTx(floGlobals.pipelineTxID)
|
||||
if (!block || confirmations === 0)
|
||||
@ -4248,7 +4248,7 @@
|
||||
function viewMail(mailRef, newView = true) {
|
||||
//stop rerendering if same mail is already open
|
||||
if (mailRef === (activeMail ? activeMail.dataset.ref : '')) return
|
||||
messenger.getMail(mailRef).then(result => {
|
||||
rmMessenger.getMail(mailRef).then(result => {
|
||||
let { from, to, prev, ref, subject, time, content } = result
|
||||
if (newView)
|
||||
getRef('mail_container').innerHTML = ''
|
||||
@ -4257,7 +4257,7 @@
|
||||
getRef("mail_container").lastElementChild.scrollIntoView();
|
||||
//add prop for previous mail (if available)
|
||||
getRef("prev_mail").dataset["value"] = prev;
|
||||
messenger.getMail(prev).then(result => {
|
||||
rmMessenger.getMail(prev).then(result => {
|
||||
getRef("prev_mail").classList.remove("hidden");
|
||||
}).catch(err => {
|
||||
getRef("prev_mail").classList.add("hidden");
|
||||
@ -4270,7 +4270,7 @@
|
||||
getRef('reply_mail_popup').dataset["prev"] = mailRef;
|
||||
getRef('reply_mail_popup').dataset["subject"] = subject.startsWith("Re: ") ? subject : `Re: ${subject}`;
|
||||
}
|
||||
messenger.removeMark(mailRef, "unread");
|
||||
rmMessenger.removeMark(mailRef, "unread");
|
||||
location.hash = `#/mail_page/${getRef("mail_type_selector").value}/mail`
|
||||
}).catch(error => notify("Unable to read mail", "error", error))
|
||||
}
|
||||
@ -4289,7 +4289,7 @@
|
||||
recipients.push(tmp);
|
||||
})
|
||||
buttonLoader('send_mail_button', true)
|
||||
messenger.sendMail(subject, content, recipients).then(result => {
|
||||
rmMessenger.sendMail(subject, content, recipients).then(result => {
|
||||
notify(`Mail sent!`, 'success')
|
||||
renderMailList(result)
|
||||
closePopup()
|
||||
@ -4307,7 +4307,7 @@
|
||||
recipient = recipient.split(',')
|
||||
let subject = getRef('subject_of_reply_mail').value;
|
||||
let content = getRef('reply_mail_content').value;
|
||||
messenger.sendMail(subject, content, recipient, prev).then(result => {
|
||||
rmMessenger.sendMail(subject, content, recipient, prev).then(result => {
|
||||
notify(`Mail replied!`);
|
||||
renderMailList(result)
|
||||
closePopup()
|
||||
@ -4407,7 +4407,7 @@
|
||||
}
|
||||
}
|
||||
function handleGroupDescriptionChange(e) {
|
||||
messenger.changeGroupDescription(floGlobals.viewingDetailsOfAddress, e.detail.value.trim())
|
||||
rmMessenger.changeGroupDescription(floGlobals.viewingDetailsOfAddress, e.detail.value.trim())
|
||||
.then(res => {
|
||||
notify('Changed group description', 'success')
|
||||
})
|
||||
@ -4418,13 +4418,13 @@
|
||||
const floID = floGlobals.viewingDetailsOfAddress
|
||||
const type = getAddressType(floID)
|
||||
if (type === 'group') {
|
||||
messenger.changeGroupName(floID, name).then(res => {
|
||||
rmMessenger.changeGroupName(floID, name).then(res => {
|
||||
updateChatCards({ name, floID })
|
||||
notify('Changed group name', 'success')
|
||||
})
|
||||
.catch(error => notify(error, "error"));
|
||||
} else {
|
||||
messenger.storeContact(floID, name).then(result => {
|
||||
rmMessenger.storeContact(floID, name).then(result => {
|
||||
updateChatCards({ name, floID })
|
||||
notify('Changed contact name', 'success')
|
||||
})
|
||||
@ -4468,20 +4468,20 @@
|
||||
|
||||
function markAsUnread() {
|
||||
getChatCard(floGlobals.viewingDetailsOfAddress).classList.add('unread')
|
||||
messenger.addMark(floGlobals.viewingDetailsOfAddress, 'unread')
|
||||
rmMessenger.addMark(floGlobals.viewingDetailsOfAddress, 'unread')
|
||||
closePopup()
|
||||
}
|
||||
|
||||
function markAsRead() {
|
||||
getChatCard(floGlobals.viewingDetailsOfAddress).classList.remove('unread')
|
||||
messenger.removeMark(floGlobals.viewingDetailsOfAddress, 'unread')
|
||||
rmMessenger.removeMark(floGlobals.viewingDetailsOfAddress, 'unread')
|
||||
closePopup()
|
||||
}
|
||||
|
||||
function blockUser() {
|
||||
getConfirmation('Block this address?', { message: `Are you sure to block this address?`, confirmText: 'Block', cancelText: 'Cancel' }).then(confirmed => {
|
||||
if (confirmed) {
|
||||
messenger.blockUser(floGlobals.viewingDetailsOfAddress).then(result => {
|
||||
rmMessenger.blockUser(floGlobals.viewingDetailsOfAddress).then(result => {
|
||||
getChatCard(floGlobals.viewingDetailsOfAddress).querySelector('.last-message').textContent = 'This user is blocked'
|
||||
closePopup()
|
||||
notify('Address blocked', 'success')
|
||||
@ -4492,7 +4492,7 @@
|
||||
function unblockUser(floID) {
|
||||
getConfirmation('Unblock this address?', { message: `Are you sure to unblock this address?`, confirmText: 'Unblock', cancelText: 'Cancel' }).then(confirmed => {
|
||||
if (confirmed) {
|
||||
messenger.unblockUser(floID || floGlobals.viewingDetailsOfAddress).then(result => {
|
||||
rmMessenger.unblockUser(floID || floGlobals.viewingDetailsOfAddress).then(result => {
|
||||
const chatCard = getChatCard(floID || floGlobals.viewingDetailsOfAddress);
|
||||
getLastMessage(floGlobals.viewingDetailsOfAddress).then(({ lastText }) => {
|
||||
chatCard.querySelector('.last-message').textContent = lastText
|
||||
@ -4516,7 +4516,7 @@
|
||||
function clearChat() {
|
||||
getConfirmation('Clear chat?', { message: `Are you sure to clear this chat?`, confirmText: 'Clear', cancelText: 'Cancel', danger: true }).then(confirmed => {
|
||||
if (confirmed) {
|
||||
messenger.clearChat(floGlobals.viewingDetailsOfAddress).then(result => {
|
||||
rmMessenger.clearChat(floGlobals.viewingDetailsOfAddress).then(result => {
|
||||
let chatCard = getChatCard(floGlobals.viewingDetailsOfAddress);
|
||||
if (chatCard) {
|
||||
chatCard.querySelector('.last-message').textContent = ''
|
||||
@ -4533,7 +4533,7 @@
|
||||
function deleteChat() {
|
||||
getConfirmation('Delete chat', { message: `Are you sure to delete this chat?`, confirmText: 'Delete', cancelText: 'Cancel', danger: true }).then(confirmed => {
|
||||
if (confirmed) {
|
||||
messenger.rmChat(floGlobals.viewingDetailsOfAddress).then(result => {
|
||||
rmMessenger.rmChat(floGlobals.viewingDetailsOfAddress).then(result => {
|
||||
getChatCard(floGlobals.viewingDetailsOfAddress).remove()
|
||||
closePopup()
|
||||
activeChat = {}
|
||||
@ -4597,7 +4597,7 @@
|
||||
|
||||
function addGroupMembers() {
|
||||
const groupID = getRef('edit_group_button').dataset.groupId
|
||||
messenger.addGroupMembers(groupID, [...membersToAdd])
|
||||
rmMessenger.addGroupMembers(groupID, [...membersToAdd])
|
||||
.then(res => {
|
||||
render.groupMembers(groupID)
|
||||
closePopup()
|
||||
@ -4609,7 +4609,7 @@
|
||||
getConfirmation('Remove group members', { message: `Are you sure to remove these members from this group?`, confirmText: 'Remove', cancelText: 'No' }).then(confirmed => {
|
||||
if (confirmed) {
|
||||
const groupID = getRef('edit_group_button').dataset.groupId
|
||||
messenger.rmGroupMembers(groupID, [...membersToRemove])
|
||||
rmMessenger.rmGroupMembers(groupID, [...membersToRemove])
|
||||
.then(res => {
|
||||
editGroupMembers(groupID)
|
||||
})
|
||||
@ -4818,7 +4818,7 @@
|
||||
const multisigAddress = e.target.closest('.multisig-option').dataset.address;
|
||||
renderElem(getRef('multisig_details'), html`<sm-spinner></sm-spinner>`)
|
||||
openPopup('multisig_detail_popup')
|
||||
messenger.multisig.listAddress().then(addresses => {
|
||||
rmMessenger.multisig.listAddress().then(addresses => {
|
||||
const { minRequired, pubKeys, time } = addresses[multisigAddress]
|
||||
renderElem(getRef('multisig_details'), html`
|
||||
<div class="grid gap-0-3">
|
||||
@ -5025,7 +5025,7 @@
|
||||
const amounts = [...getRef('receiver_container').querySelectorAll('.amount-input')].filter(input => input.value.trim() !== '').map(input => {
|
||||
return parseFloat(input.value.trim())
|
||||
});
|
||||
const multisigList = await messenger.multisig.listAddress()
|
||||
const multisigList = await rmMessenger.multisig.listAddress()
|
||||
const redeemScript = multisigList[sender].redeemScript;
|
||||
return [sender, receivers, amounts, redeemScript]
|
||||
} catch (err) {
|
||||
@ -5141,16 +5141,16 @@
|
||||
});
|
||||
const multisigMode = getRef('multisig_mode_selector').value;
|
||||
try {
|
||||
const allMultiSigs = await messenger.multisig.listAddress()
|
||||
const allMultiSigs = await rmMessenger.multisig.listAddress()
|
||||
const { redeemScript } = allMultiSigs[selectedMultisigAddress]
|
||||
let result
|
||||
if (multisigMode === 'btc') {
|
||||
const fee = parseFloat(getRef('send_fee').value.trim());
|
||||
console.debug(selectedMultisigAddress, receivers, amounts, fee);
|
||||
result = await messenger.multisig.createTx_BTC(selectedMultisigAddress, redeemScript, receivers, amounts, fee)
|
||||
result = await rmMessenger.multisig.createTx_BTC(selectedMultisigAddress, redeemScript, receivers, amounts, fee)
|
||||
} else if (multisigMode === 'flo') {
|
||||
const floData = getRef('send_tx__flo_data').value.trim();
|
||||
result = await messenger.multisig.createTx_FLO(floCrypto.toMultisigFloID(selectedMultisigAddress), redeemScript, receivers, amounts, floData)
|
||||
result = await rmMessenger.multisig.createTx_FLO(floCrypto.toMultisigFloID(selectedMultisigAddress), redeemScript, receivers, amounts, floData)
|
||||
}
|
||||
console.log(result);
|
||||
notify('New multisig group created', 'success')
|
||||
@ -5181,17 +5181,17 @@
|
||||
buttonLoader(button, true)
|
||||
console.log('Signing transaction', pipeID);
|
||||
try {
|
||||
switch (messenger.pipeline[pipeID].model) {
|
||||
switch (rmMessenger.pipeline[pipeID].model) {
|
||||
case 'flo_multisig':
|
||||
await messenger.multisig.signTx_FLO(pipeID)
|
||||
await rmMessenger.multisig.signTx_FLO(pipeID)
|
||||
break;
|
||||
case 'btc_multisig':
|
||||
await messenger.multisig.signTx_BTC(pipeID)
|
||||
await rmMessenger.multisig.signTx_BTC(pipeID)
|
||||
break;
|
||||
}
|
||||
getRef('messages_container').querySelector('.signing-banner').remove()
|
||||
notify('Transaction signed', 'success')
|
||||
if (messenger.pipeline[pipeID].disabled)
|
||||
if (rmMessenger.pipeline[pipeID].disabled)
|
||||
getRef('transaction_details').querySelector('h4').textContent = 'Transaction signatures complete'
|
||||
} catch (err) {
|
||||
notify(err, 'error')
|
||||
@ -5211,7 +5211,7 @@
|
||||
getConfirmation('Are you sure you want to accept this request?').then((res) => {
|
||||
if (!res) return;
|
||||
const vectorClock = e.target.closest('.notification').dataset.id;
|
||||
messenger.respond_pubKey(vectorClock).then(() => {
|
||||
rmMessenger.respond_pubKey(vectorClock).then(() => {
|
||||
notify('Request accepted', 'success')
|
||||
render.notifications()
|
||||
}).catch(err => {
|
||||
|
||||
57
scripts/lib.min.js
vendored
Normal file
57
scripts/lib.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
@ -1,5 +1,5 @@
|
||||
(function () {
|
||||
const messenger = window.messenger = {};
|
||||
const rmMessenger = window.rmMessenger = {};
|
||||
|
||||
const user = {
|
||||
get id() {
|
||||
@ -20,8 +20,8 @@
|
||||
mails: (m) => console.log(m),
|
||||
marked: (r) => console.log(r)
|
||||
};
|
||||
messenger.renderUI = {};
|
||||
Object.defineProperties(messenger.renderUI, {
|
||||
rmMessenger.renderUI = {};
|
||||
Object.defineProperties(rmMessenger.renderUI, {
|
||||
chats: {
|
||||
set: ui_fn => UI.chats = ui_fn
|
||||
},
|
||||
@ -43,7 +43,7 @@
|
||||
});
|
||||
|
||||
const _loaded = {};
|
||||
Object.defineProperties(messenger, {
|
||||
Object.defineProperties(rmMessenger, {
|
||||
chats: {
|
||||
get: () => _loaded.chats
|
||||
},
|
||||
@ -63,8 +63,8 @@
|
||||
|
||||
var directConnID = [], groupConnID = {},
|
||||
pipeConnID = {};
|
||||
messenger.conn = {};
|
||||
Object.defineProperties(messenger.conn, {
|
||||
rmMessenger.conn = {};
|
||||
Object.defineProperties(rmMessenger.conn, {
|
||||
direct: {
|
||||
get: () => directConnID
|
||||
},
|
||||
@ -96,12 +96,12 @@
|
||||
.catch(error => reject(error))
|
||||
})
|
||||
}
|
||||
messenger.sendRaw = sendRaw;
|
||||
rmMessenger.sendRaw = sendRaw;
|
||||
|
||||
function encrypt(value, key = _loaded.appendix.AESKey) {
|
||||
return Crypto.AES.encrypt(value, key)
|
||||
}
|
||||
messenger.encrypt = encrypt;
|
||||
rmMessenger.encrypt = encrypt;
|
||||
|
||||
function decrypt(value, key = _loaded.appendix.AESKey) {
|
||||
return Crypto.AES.decrypt(value, key)
|
||||
@ -167,7 +167,7 @@
|
||||
})
|
||||
}
|
||||
|
||||
messenger.blockUser = function (floID) {
|
||||
rmMessenger.blockUser = function (floID) {
|
||||
return new Promise((resolve, reject) => {
|
||||
if (_loaded.blocked.has(floID))
|
||||
return resolve("User is already blocked");
|
||||
@ -178,7 +178,7 @@
|
||||
})
|
||||
}
|
||||
|
||||
messenger.unblockUser = function (floID) {
|
||||
rmMessenger.unblockUser = function (floID) {
|
||||
return new Promise((resolve, reject) => {
|
||||
if (!_loaded.blocked.has(floID))
|
||||
return resolve("User is not blocked");
|
||||
@ -189,7 +189,7 @@
|
||||
})
|
||||
}
|
||||
|
||||
messenger.sendMessage = function (message, receiver) {
|
||||
rmMessenger.sendMessage = function (message, receiver) {
|
||||
return new Promise((resolve, reject) => {
|
||||
sendRaw(message, receiver, "MESSAGE").then(result => {
|
||||
let vc = result.vectorClock;
|
||||
@ -210,7 +210,7 @@
|
||||
})
|
||||
}
|
||||
|
||||
messenger.sendMail = function (subject, content, recipients, prev = null) {
|
||||
rmMessenger.sendMail = function (subject, content, recipients, prev = null) {
|
||||
return new Promise((resolve, reject) => {
|
||||
if (!Array.isArray(recipients))
|
||||
recipients = [recipients]
|
||||
@ -260,10 +260,10 @@
|
||||
})
|
||||
}
|
||||
|
||||
messenger.list_request_sent = (options = null) => listRequests('request_sent', options);
|
||||
messenger.list_request_received = (options = null) => listRequests('request_received', options);
|
||||
messenger.list_response_sent = (options = null) => listRequests('response_sent', options);
|
||||
messenger.list_response_received = (options = null) => listRequests('response_received', options);
|
||||
rmMessenger.list_request_sent = (options = null) => listRequests('request_sent', options);
|
||||
rmMessenger.list_request_received = (options = null) => listRequests('request_received', options);
|
||||
rmMessenger.list_response_sent = (options = null) => listRequests('response_sent', options);
|
||||
rmMessenger.list_response_received = (options = null) => listRequests('response_received', options);
|
||||
|
||||
function sendRequest(receiver, type, message, encrypt = null) {
|
||||
return new Promise((resolve, reject) => {
|
||||
@ -283,7 +283,7 @@
|
||||
})
|
||||
}
|
||||
|
||||
messenger.request_pubKey = (receiver, message = '') => sendRequest(receiver, "PUBLIC_KEY", message, false);
|
||||
rmMessenger.request_pubKey = (receiver, message = '') => sendRequest(receiver, "PUBLIC_KEY", message, false);
|
||||
|
||||
function sendResponse(req_id, message, encrypt = null) {
|
||||
return new Promise((resolve, reject) => {
|
||||
@ -312,7 +312,7 @@
|
||||
})
|
||||
}
|
||||
|
||||
messenger.respond_pubKey = (req_id, message = '') => sendResponse(req_id, message, false);
|
||||
rmMessenger.respond_pubKey = (req_id, message = '') => sendResponse(req_id, message, false);
|
||||
|
||||
const processData = {};
|
||||
processData.direct = function () {
|
||||
@ -484,7 +484,7 @@
|
||||
})
|
||||
}
|
||||
|
||||
messenger.getMail = function (mailRef) {
|
||||
rmMessenger.getMail = function (mailRef) {
|
||||
return new Promise((resolve, reject) => {
|
||||
compactIDB.readData("mails", mailRef).then(mail => {
|
||||
mail.content = decrypt(mail.content)
|
||||
@ -493,7 +493,7 @@
|
||||
});
|
||||
}
|
||||
|
||||
const getChatOrder = messenger.getChatOrder = function (separate = false) {
|
||||
const getChatOrder = rmMessenger.getChatOrder = function (separate = false) {
|
||||
let result;
|
||||
if (separate) {
|
||||
result = {};
|
||||
@ -512,7 +512,7 @@
|
||||
return result;
|
||||
}
|
||||
|
||||
messenger.storeContact = function (floID, name) {
|
||||
rmMessenger.storeContact = function (floID, name) {
|
||||
return floDapps.storeContact(floID, name)
|
||||
}
|
||||
|
||||
@ -569,19 +569,19 @@
|
||||
})
|
||||
}
|
||||
|
||||
messenger.addMark = function (key, mark) {
|
||||
rmMessenger.addMark = function (key, mark) {
|
||||
if (_loaded.marked.hasOwnProperty(key) && !_loaded.marked[key].includes(mark))
|
||||
_loaded.marked[key].push(mark)
|
||||
return addMark(key, mark)
|
||||
}
|
||||
|
||||
messenger.removeMark = function (key, mark) {
|
||||
rmMessenger.removeMark = function (key, mark) {
|
||||
if (_loaded.marked.hasOwnProperty(key))
|
||||
_loaded.marked[key] = _loaded.marked[key].filter(v => v !== mark)
|
||||
return removeMark(key, mark)
|
||||
}
|
||||
|
||||
messenger.addChat = function (chatID) {
|
||||
rmMessenger.addChat = function (chatID) {
|
||||
return new Promise((resolve, reject) => {
|
||||
compactIDB.addData("chats", 0, chatID)
|
||||
.then(result => resolve("Added chat"))
|
||||
@ -589,7 +589,7 @@
|
||||
})
|
||||
}
|
||||
|
||||
messenger.rmChat = function (chatID) {
|
||||
rmMessenger.rmChat = function (chatID) {
|
||||
return new Promise((resolve, reject) => {
|
||||
compactIDB.removeData("chats", chatID)
|
||||
.then(result => resolve("Chat removed"))
|
||||
@ -597,7 +597,7 @@
|
||||
})
|
||||
}
|
||||
|
||||
messenger.clearChat = function (chatID) {
|
||||
rmMessenger.clearChat = function (chatID) {
|
||||
return new Promise((resolve, reject) => {
|
||||
let options = {
|
||||
lowerKey: `${chatID}|`,
|
||||
@ -614,7 +614,7 @@
|
||||
})
|
||||
}
|
||||
|
||||
const getChat = messenger.getChat = function (chatID) {
|
||||
const getChat = rmMessenger.getChat = function (chatID) {
|
||||
return new Promise((resolve, reject) => {
|
||||
let options = {
|
||||
lowerKey: `${chatID}|`,
|
||||
@ -629,7 +629,7 @@
|
||||
})
|
||||
}
|
||||
|
||||
messenger.backupData = function () {
|
||||
rmMessenger.backupData = function () {
|
||||
return new Promise((resolve, reject) => {
|
||||
loadDataFromIDB(false).then(data => {
|
||||
delete data.appendix.AESKey;
|
||||
@ -649,7 +649,7 @@
|
||||
})
|
||||
}
|
||||
|
||||
const parseBackup = messenger.parseBackup = function (blob) {
|
||||
const parseBackup = rmMessenger.parseBackup = function (blob) {
|
||||
return new Promise((resolve, reject) => {
|
||||
if (blob instanceof Blob || blob instanceof File) {
|
||||
let reader = new FileReader();
|
||||
@ -679,7 +679,7 @@
|
||||
})
|
||||
}
|
||||
|
||||
messenger.restoreData = function (arg) {
|
||||
rmMessenger.restoreData = function (arg) {
|
||||
return new Promise((resolve, reject) => {
|
||||
if (arg instanceof Blob || arg instanceof File)
|
||||
var parseData = parseBackup
|
||||
@ -734,7 +734,7 @@
|
||||
})
|
||||
}
|
||||
|
||||
messenger.clearUserData = function () {
|
||||
rmMessenger.clearUserData = function () {
|
||||
return new Promise((resolve, reject) => {
|
||||
let user_floID = floCrypto.toFloID(user.id);
|
||||
let promises = [
|
||||
@ -750,7 +750,7 @@
|
||||
|
||||
//group feature
|
||||
|
||||
messenger.createGroup = function (groupname, description = '') {
|
||||
rmMessenger.createGroup = function (groupname, description = '') {
|
||||
return new Promise((resolve, reject) => {
|
||||
if (!groupname) return reject("Invalid Group Name")
|
||||
let id = floCrypto.generateNewID();
|
||||
@ -778,7 +778,7 @@
|
||||
})
|
||||
}
|
||||
|
||||
messenger.changeGroupName = function (groupID, name) {
|
||||
rmMessenger.changeGroupName = function (groupID, name) {
|
||||
return new Promise((resolve, reject) => {
|
||||
let groupInfo = _loaded.groups[groupID]
|
||||
if (user.id !== groupInfo.admin)
|
||||
@ -790,7 +790,7 @@
|
||||
})
|
||||
}
|
||||
|
||||
messenger.changeGroupDescription = function (groupID, description) {
|
||||
rmMessenger.changeGroupDescription = function (groupID, description) {
|
||||
return new Promise((resolve, reject) => {
|
||||
let groupInfo = _loaded.groups[groupID]
|
||||
if (user.id !== groupInfo.admin)
|
||||
@ -802,7 +802,7 @@
|
||||
})
|
||||
}
|
||||
|
||||
messenger.addGroupMembers = function (groupID, newMem, note = undefined) {
|
||||
rmMessenger.addGroupMembers = function (groupID, newMem, note = undefined) {
|
||||
return new Promise((resolve, reject) => {
|
||||
if (!Array.isArray(newMem) && typeof newMem === "string")
|
||||
newMem = [newMem]
|
||||
@ -841,7 +841,7 @@
|
||||
})
|
||||
}
|
||||
|
||||
messenger.rmGroupMembers = function (groupID, rmMem, note = undefined) {
|
||||
rmMessenger.rmGroupMembers = function (groupID, rmMem, note = undefined) {
|
||||
return new Promise((resolve, reject) => {
|
||||
if (!Array.isArray(rmMem) && typeof rmMem === "string")
|
||||
rmMem = [rmMem]
|
||||
@ -861,7 +861,7 @@
|
||||
})
|
||||
}
|
||||
|
||||
const revokeKey = messenger.revokeKey = function (groupID) {
|
||||
const revokeKey = rmMessenger.revokeKey = function (groupID) {
|
||||
return new Promise((resolve, reject) => {
|
||||
let groupInfo = _loaded.groups[groupID]
|
||||
if (user.id !== groupInfo.admin)
|
||||
@ -876,7 +876,7 @@
|
||||
})
|
||||
}
|
||||
|
||||
messenger.sendGroupMessage = function (message, groupID) {
|
||||
rmMessenger.sendGroupMessage = function (message, groupID) {
|
||||
return new Promise((resolve, reject) => {
|
||||
let k = _loaded.groups[groupID].eKey
|
||||
message = encrypt(message, k)
|
||||
@ -886,7 +886,7 @@
|
||||
})
|
||||
}
|
||||
|
||||
const disableGroup = messenger.disableGroup = function (groupID) {
|
||||
const disableGroup = rmMessenger.disableGroup = function (groupID) {
|
||||
return new Promise((resolve, reject) => {
|
||||
if (!_loaded.groups[groupID])
|
||||
return reject("Group not found");
|
||||
@ -1023,8 +1023,8 @@
|
||||
}
|
||||
}
|
||||
|
||||
//messenger startups
|
||||
messenger.init = function () {
|
||||
//rmMessenger startups
|
||||
rmMessenger.init = function () {
|
||||
return new Promise((resolve, reject) => {
|
||||
initUserDB().then(result => {
|
||||
console.debug(result);
|
||||
@ -1061,7 +1061,7 @@
|
||||
})
|
||||
}
|
||||
|
||||
const loadDataFromBlockchain = messenger.loadDataFromBlockchain = function () {
|
||||
const loadDataFromBlockchain = rmMessenger.loadDataFromBlockchain = function () {
|
||||
return new Promise((resolve, reject) => {
|
||||
let user_floID = floCrypto.toFloID(user.id);
|
||||
if (!user_floID)
|
||||
@ -1094,7 +1094,7 @@
|
||||
}
|
||||
|
||||
//BTC multisig application
|
||||
const MultiSig = messenger.multisig = {}
|
||||
const MultiSig = rmMessenger.multisig = {}
|
||||
const TYPE_BTC_MULTISIG = "btc_multisig", //used for both pipeline and multisig address creation
|
||||
TYPE_FLO_MULTISIG = "flo_multisig"; //only used for pipeline
|
||||
|
||||
@ -1288,7 +1288,7 @@
|
||||
}
|
||||
|
||||
//Pipelines
|
||||
const createPipeline = messenger.createPipeline = function (model, members, ekeySize = 16, pubkeys = null) {
|
||||
const createPipeline = rmMessenger.createPipeline = function (model, members, ekeySize = 16, pubkeys = null) {
|
||||
return new Promise((resolve, reject) => {
|
||||
//optional pubkey parameter
|
||||
if (pubkeys !== null) {
|
||||
@ -1391,7 +1391,7 @@
|
||||
}
|
||||
}
|
||||
|
||||
const disablePipeline = messenger.disablePipeline = function (pipeID) {
|
||||
const disablePipeline = rmMessenger.disablePipeline = function (pipeID) {
|
||||
console.debug(JSON.stringify(pipeConnID), pipeConnID[pipeID])
|
||||
return new Promise((resolve, reject) => {
|
||||
if (!_loaded.pipeline[pipeID])
|
||||
@ -1409,7 +1409,7 @@
|
||||
})
|
||||
}
|
||||
|
||||
messenger.sendPipelineMessage = function (message, pipeID) {
|
||||
rmMessenger.sendPipelineMessage = function (message, pipeID) {
|
||||
return new Promise((resolve, reject) => {
|
||||
let k = _loaded.pipeline[pipeID].eKey;
|
||||
if (k) message = encrypt(message, k);
|
||||
@ -1419,7 +1419,7 @@
|
||||
})
|
||||
}
|
||||
|
||||
messenger.editFee = function (tx_id, new_fee, private_keys, change_only = true) {
|
||||
rmMessenger.editFee = function (tx_id, new_fee, private_keys, change_only = true) {
|
||||
return new Promise(async (resolve, reject) => {
|
||||
//1. FIND REDEEMSCRIPT
|
||||
//2. CHANGE OUTPUT VALUES
|
||||
|
||||
2
scripts/messenger.min.js
vendored
2
scripts/messenger.min.js
vendored
File diff suppressed because one or more lines are too long
Loading…
Reference in New Issue
Block a user