chamesu
Version:
This package contains all packages of the chat application.
77 lines (59 loc) • 2.26 kB
text/typescript
/*
* Copyright (c) 2022.
* Author Peter Placzek (tada5hi)
* For the full copyright and license information,
* view the LICENSE file that was distributed with this source code.
*/
import {Context} from "@nuxt/types";
import {Inject} from "@nuxt/types/app";
import {useContactSelfKeyPairStorage, useContactRelatedKeyStorage} from "~/domains/contact/encryption";
import {useChatRoomKeyStorage} from "~/domains/chat-room/encryption";
import {applyContactData, loadAndApplyContactData} from "~/domains/contact-data/utils";
import {changeResponseKeyCase} from "~/modules/api/utils";
export default (ctx : Context, inject : Inject) => {
// init contact encryption
const selfKeyStorage : Promise<LocalForage> = useContactSelfKeyPairStorage();
const relatedKeyStorage : Promise<LocalForage> = useContactRelatedKeyStorage();
// init chat room encryption
const roomKeyStorage : Promise<LocalForage> = useChatRoomKeyStorage();
if(typeof ctx.store.getters['auth/userId'] === 'undefined') return;
Promise.all([selfKeyStorage, relatedKeyStorage, roomKeyStorage])
.then(() => {
loadAndApplyContactData(ctx.store.getters['auth/userId']).then(r => r);
});
const socket = ctx.$socket.use('/');
socket.on('contactDataCreated', async(payload) => {
payload = changeResponseKeyCase(payload);
try {
await applyContactData(payload.data, ctx.store.getters['auth/userId']);
} catch (e) {
console.log(e);
}
});
socket.on('contactCreated', (payload) => {
payload = changeResponseKeyCase(payload);
console.log(payload);
try {
socket.emit('contactJoin', {
id: payload.id,
type: 'contact'
}, (data) => {
console.log(data);
})
} catch (e) {
}
});
socket.on('contactDeleted', (payload) => {
payload = changeResponseKeyCase(payload);
console.log(payload);
try {
socket.emit('contactLeave', {
id: payload.id,
type: 'contact'
}, (data) => {
console.log(data);
})
} catch (e) {
}
});
}