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
+7
View File
@@ -0,0 +1,7 @@
import { RedisError } from "redis-errors";
export default class ClusterAllFailedError extends RedisError {
lastNodeError: RedisError;
static defaultMessage: string;
constructor(message: any, lastNodeError: RedisError);
get name(): string;
}
+15
View File
@@ -0,0 +1,15 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const redis_errors_1 = require("redis-errors");
class ClusterAllFailedError extends redis_errors_1.RedisError {
constructor(message, lastNodeError) {
super(message);
this.lastNodeError = lastNodeError;
Error.captureStackTrace(this, this.constructor);
}
get name() {
return this.constructor.name;
}
}
exports.default = ClusterAllFailedError;
ClusterAllFailedError.defaultMessage = "Failed to refresh slots cache.";
@@ -0,0 +1,5 @@
import { AbortError } from "redis-errors";
export default class MaxRetriesPerRequestError extends AbortError {
constructor(maxRetriesPerRequest: number);
get name(): string;
}
+14
View File
@@ -0,0 +1,14 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const redis_errors_1 = require("redis-errors");
class MaxRetriesPerRequestError extends redis_errors_1.AbortError {
constructor(maxRetriesPerRequest) {
const message = `Reached the max retries per request limit (which is ${maxRetriesPerRequest}). Refer to "maxRetriesPerRequest" option for details.`;
super(message);
Error.captureStackTrace(this, this.constructor);
}
get name() {
return this.constructor.name;
}
}
exports.default = MaxRetriesPerRequestError;
+2
View File
@@ -0,0 +1,2 @@
import MaxRetriesPerRequestError from "./MaxRetriesPerRequestError";
export { MaxRetriesPerRequestError };
+5
View File
@@ -0,0 +1,5 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.MaxRetriesPerRequestError = void 0;
const MaxRetriesPerRequestError_1 = require("./MaxRetriesPerRequestError");
exports.MaxRetriesPerRequestError = MaxRetriesPerRequestError_1.default;