Compare commits

..

3 Commits

Author SHA1 Message Date
Krishan
21164a9b61 Release v4.2.1 (#1953) 2024-09-14 23:24:34 +10:00
Krishan
4923b17ad6 Fix auth media check for dendrite (#1952) 2024-09-14 18:54:06 +05:30
Krishan
c75e903619 Release v4.2.0 (#1949) 2024-09-11 19:26:08 +05:30
8 changed files with 34 additions and 48 deletions

4
package-lock.json generated
View File

@@ -1,12 +1,12 @@
{ {
"name": "cinny", "name": "cinny",
"version": "4.1.0", "version": "4.2.1",
"lockfileVersion": 3, "lockfileVersion": 3,
"requires": true, "requires": true,
"packages": { "packages": {
"": { "": {
"name": "cinny", "name": "cinny",
"version": "4.1.0", "version": "4.2.1",
"license": "AGPL-3.0-only", "license": "AGPL-3.0-only",
"dependencies": { "dependencies": {
"@atlaskit/pragmatic-drag-and-drop": "1.1.6", "@atlaskit/pragmatic-drag-and-drop": "1.1.6",

View File

@@ -1,6 +1,6 @@
{ {
"name": "cinny", "name": "cinny",
"version": "4.1.0", "version": "4.2.1",
"description": "Yet another matrix client", "description": "Yet another matrix client",
"main": "index.js", "main": "index.js",
"type": "module", "type": "module",

View File

@@ -1,10 +1,11 @@
import { useSpecVersions } from './useSpecVersions'; import { useSpecVersions } from './useSpecVersions';
export const useMediaAuthentication = (): boolean => { export const useMediaAuthentication = (): boolean => {
const { versions } = useSpecVersions(); const { versions, unstable_features: unstableFeatures } = useSpecVersions();
// Media authentication is introduced in spec version 1.11 // Media authentication is introduced in spec version 1.11
const authenticatedMedia = versions.includes('v1.11'); const authenticatedMedia =
unstableFeatures?.['org.matrix.msc3916.stable'] || versions.includes('v1.11');
return authenticatedMedia; return authenticatedMedia;
}; };

View File

@@ -15,7 +15,7 @@ export function AuthFooter() {
target="_blank" target="_blank"
rel="noreferrer" rel="noreferrer"
> >
v4.1.0 v4.2.1
</Text> </Text>
<Text as="a" size="T300" href="https://twitter.com/cinnyapp" target="_blank" rel="noreferrer"> <Text as="a" size="T300" href="https://twitter.com/cinnyapp" target="_blank" rel="noreferrer">
Twitter Twitter

View File

@@ -24,7 +24,7 @@ export function WelcomePage() {
target="_blank" target="_blank"
rel="noreferrer noopener" rel="noreferrer noopener"
> >
v4.1.0 v4.2.1
</a> </a>
</span> </span>
} }

View File

@@ -1,5 +1,5 @@
const cons = { const cons = {
version: '4.1.0', version: '4.2.1',
secretKey: { secretKey: {
ACCESS_TOKEN: 'cinny_access_token', ACCESS_TOKEN: 'cinny_access_token',
DEVICE_ID: 'cinny_device_id', DEVICE_ID: 'cinny_device_id',

View File

@@ -21,30 +21,25 @@ import './app/i18n';
document.body.classList.add(configClass, varsClass); document.body.classList.add(configClass, varsClass);
settings.applyTheme(); settings.applyTheme();
const registerServiceWorker = async () => { // Register Service Worker
if ('serviceWorker' in navigator) { if ('serviceWorker' in navigator) {
const swUrl = const swUrl =
import.meta.env.MODE === 'production' import.meta.env.MODE === 'production'
? `${trimTrailingSlash(import.meta.env.BASE_URL)}/sw.js` ? `${trimTrailingSlash(import.meta.env.BASE_URL)}/sw.js`
: `/dev-sw.js?dev-sw`; : `/dev-sw.js?dev-sw`;
await navigator.serviceWorker.register(swUrl); navigator.serviceWorker.register(swUrl);
navigator.serviceWorker.ready.then((registration) => {
navigator.serviceWorker.addEventListener('message', (event) => { navigator.serviceWorker.addEventListener('message', (event) => {
if (event.data?.type === 'token' && event.data?.messageId) { if (event.data?.type === 'token' && event.data?.responseKey) {
// Get the token for SW.
const token = localStorage.getItem('cinny_access_token') ?? undefined; const token = localStorage.getItem('cinny_access_token') ?? undefined;
registration.active?.postMessage({ event.source!.postMessage({
messageId: event.data.messageId, responseKey: event.data.responseKey,
token, token,
}); });
} }
}); });
});
} }
};
window.addEventListener('load', registerServiceWorker);
const mountApp = () => { const mountApp = () => {
const rootContainer = document.getElementById('root'); const rootContainer = document.getElementById('root');

View File

@@ -3,26 +3,16 @@
export type {}; export type {};
declare const self: ServiceWorkerGlobalScope; declare const self: ServiceWorkerGlobalScope;
type Message = { messageId: string };
type MessageListener = (message: Message) => void;
const messageListeners = new Map<string, MessageListener>();
self.addEventListener('message', (event) => {
const { messageId } = event.data;
if (typeof messageId === 'string') {
messageListeners.get(messageId)?.(event.data);
messageListeners.delete(messageId);
}
});
type TokenMessage = Message & {
token?: string;
};
async function askForAccessToken(client: Client): Promise<string | undefined> { async function askForAccessToken(client: Client): Promise<string | undefined> {
return new Promise((resolve) => { return new Promise((resolve) => {
const messageId = Math.random().toString(36); const responseKey = Math.random().toString(36);
messageListeners.set(messageId, (message: TokenMessage) => resolve(message.token)); const listener = (event: ExtendableMessageEvent) => {
client.postMessage({ messageId, type: 'token' }); if (event.data.responseKey !== responseKey) return;
resolve(event.data.token);
self.removeEventListener('message', listener);
};
self.addEventListener('message', listener);
client.postMessage({ responseKey, type: 'token' });
}); });
} }