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
+133
View File
@@ -0,0 +1,133 @@
/**
* Copyright (c) Meta Platforms, Inc. and affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/
import {
SerializableError,
Test,
TestEvents,
TestResult,
} from '@jest/test-result';
import {Config} from '@jest/types';
import {TestWatcher} from 'jest-watcher';
declare abstract class BaseTestRunner {
protected readonly _globalConfig: Config.GlobalConfig;
protected readonly _context: TestRunnerContext;
protected readonly _options?: Record<string, unknown> | undefined;
readonly isSerial?: boolean;
abstract readonly supportsEventEmitters: boolean;
constructor(
_globalConfig: Config.GlobalConfig,
_context: TestRunnerContext,
_options?: Record<string, unknown> | undefined,
);
}
export declare abstract class CallbackTestRunner
extends BaseTestRunner
implements CallbackTestRunnerInterface
{
readonly supportsEventEmitters = false;
abstract runTests(
tests: Array<Test>,
watcher: TestWatcher,
onStart: OnTestStart,
onResult: OnTestSuccess,
onFailure: OnTestFailure,
options: TestRunnerOptions,
): Promise<void>;
}
export declare interface CallbackTestRunnerInterface {
readonly isSerial?: boolean;
readonly supportsEventEmitters?: boolean;
runTests(
tests: Array<Test>,
watcher: TestWatcher,
onStart: OnTestStart,
onResult: OnTestSuccess,
onFailure: OnTestFailure,
options: TestRunnerOptions,
): Promise<void>;
}
export {Config};
export declare abstract class EmittingTestRunner
extends BaseTestRunner
implements EmittingTestRunnerInterface
{
readonly supportsEventEmitters = true;
abstract runTests(
tests: Array<Test>,
watcher: TestWatcher,
options: TestRunnerOptions,
): Promise<void>;
abstract on<Name extends keyof TestEvents>(
eventName: Name,
listener: (eventData: TestEvents[Name]) => void | Promise<void>,
): UnsubscribeFn;
}
export declare interface EmittingTestRunnerInterface {
readonly isSerial?: boolean;
readonly supportsEventEmitters: true;
runTests(
tests: Array<Test>,
watcher: TestWatcher,
options: TestRunnerOptions,
): Promise<void>;
on<Name extends keyof TestEvents>(
eventName: Name,
listener: (eventData: TestEvents[Name]) => void | Promise<void>,
): UnsubscribeFn;
}
export declare type JestTestRunner = CallbackTestRunner | EmittingTestRunner;
export declare type OnTestFailure = (
test: Test,
serializableError: SerializableError,
) => Promise<void>;
export declare type OnTestStart = (test: Test) => Promise<void>;
export declare type OnTestSuccess = (
test: Test,
testResult: TestResult,
) => Promise<void>;
export {Test};
export {TestEvents};
declare class TestRunner extends EmittingTestRunner {
#private;
runTests(
tests: Array<Test>,
watcher: TestWatcher,
options: TestRunnerOptions,
): Promise<void>;
on<Name extends keyof TestEvents>(
eventName: Name,
listener: (eventData: TestEvents[Name]) => void | Promise<void>,
): UnsubscribeFn;
}
export default TestRunner;
export declare type TestRunnerContext = {
changedFiles?: Set<string>;
sourcesRelatedToTestsInChangedFiles?: Set<string>;
};
export declare type TestRunnerOptions = {
serial: boolean;
};
export {TestWatcher};
export declare type UnsubscribeFn = () => void;