feat: Passwordless cross-device authentication

- Arkitektur: docs/auth/passwordless-architecture.md
- Backend: iom/quixzoom-auth-service/ (FastAPI + Redis)
- Webb: quixzoom-market-pages/se/login/ (QR-kod + polling)
- App: iom/quixzoom-app/src/features/auth/ (push + deep links)

Flöde: QR-kod → app-godkännande → webb-inloggad
This commit is contained in:
Bernt
2026-07-07 07:11:50 +00:00
parent 4aa984ad74
commit 6989a98d75
61843 changed files with 5491611 additions and 872231 deletions
+3
View File
@@ -0,0 +1,3 @@
export * from './useToastContainer';
export * from './useToast';
export * from './useKeeper';
@@ -0,0 +1,15 @@
import { Id } from '../types';
export declare const enum ActionType {
ADD = 0,
REMOVE = 1
}
export declare type State = Array<Id>;
export declare type Action = {
type: ActionType.ADD;
toastId: Id;
staleId?: Id;
} | {
type: ActionType.REMOVE;
toastId?: Id;
};
export declare function reducer(state: State, action: Action): Id[];
+7
View File
@@ -0,0 +1,7 @@
/**
* `useKeeper` is a helper around `useRef`.
*
* You don't need to access the `.current`property to get the value
* If refresh is set to true. The ref will be updated every render
*/
export declare function useKeeper<T>(arg: T, refresh?: boolean): T;
+10
View File
@@ -0,0 +1,10 @@
import { DOMAttributes } from 'react';
import { ToastProps } from '../types';
export declare function useToast(props: ToastProps): {
playToast: () => void;
pauseToast: () => void;
isRunning: boolean;
preventExitTransition: boolean;
toastRef: import("react").RefObject<HTMLDivElement>;
eventHandlers: DOMAttributes<HTMLElement>;
};
+16
View File
@@ -0,0 +1,16 @@
/// <reference types="react" />
import { Id, ToastContainerProps, Toast, ToastPosition } from '../types';
export interface ContainerInstance {
toastKey: number;
displayedToast: number;
props: ToastContainerProps;
containerId?: Id | null;
isToastActive: (toastId: Id) => boolean;
getToast: (id: Id) => Toast | null;
}
export declare function useToastContainer(props: ToastContainerProps): {
getToastToRender: <T>(cb: (position: ToastPosition, toastList: Toast[]) => T) => T[];
collection: Record<Id, Toast>;
containerRef: import("react").MutableRefObject<null>;
isToastActive: (id: Id) => boolean;
};