Finanzen: Bankzugang aus WOMS neu verbinden (Freigabe, Rueckkehr, Kontowahl)
startBankAuth/completeBankAuth in bankSync.js. Die Rueckkehr prueft und speichert die Sitzung unter der Sperre der Abrufe (ein laufender Abruf kann den neuen Zugang nicht mehr ueberschreiben) und ruft danach einmal ab. Nachbau: holdNext haelt einen Aufruf an. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
75ca8b78c0
commit
cba14ed0f0
3 files changed
+605
-2
No files matched your search
@@ -45,6 +45,8 @@ export async function startFakeEnableBanking({ publicKeyPem, appId = null }) {
|
||||
let authSeq = 0
|
||||
// Eingeplanter Fehler (failNext): der naechste passende Aufruf scheitert einmalig
|
||||
let pendingFailure = null
|
||||
// Angehaltener Aufruf (holdNext): der naechste passende Aufruf wartet, bis release() gerufen wird
|
||||
let pendingHold = null
|
||||
|
||||
const matchesPath = (path, pathname) => (path instanceof RegExp ? path.test(pathname) : path === pathname)
|
||||
|
||||
@@ -126,6 +128,12 @@ export async function startFakeEnableBanking({ publicKeyPem, appId = null }) {
|
||||
calls.push({ method: req.method, path: url.pathname, query: Object.fromEntries(url.searchParams.entries()), headers: { ...req.headers }, body })
|
||||
|
||||
const authError = jwtError(req.headers.authorization)
|
||||
if (!authError && pendingHold && (!pendingHold.path || matchesPath(pendingHold.path, url.pathname))) {
|
||||
const hold = pendingHold
|
||||
pendingHold = null
|
||||
hold.arrive()
|
||||
await hold.gate
|
||||
}
|
||||
let result
|
||||
if (authError) {
|
||||
result = [401, { code: 401, error: 'UNAUTHORIZED', message: `JWT abgelehnt: ${authError}` }]
|
||||
@@ -168,6 +176,19 @@ export async function startFakeEnableBanking({ publicKeyPem, appId = null }) {
|
||||
failNext: ({ path = null, status = 500, body = { error: 'FAKE_ERROR' }, destroy = false }) => {
|
||||
pendingFailure = { path, status, body, destroy }
|
||||
},
|
||||
/**
|
||||
* Der naechste Aufruf mit gueltigem JWT (path wie bei failNext) bleibt stehen, bis release() gerufen wird
|
||||
* (ein langsamer Bankabruf); erst dann laeuft er weiter (auch ein mit failNext eingeplanter Fehler greift erst
|
||||
* dann). reached erfuellt sich, sobald der Aufruf angekommen ist. Liefert { reached, release }.
|
||||
*/
|
||||
holdNext: ({ path = null } = {}) => {
|
||||
let release
|
||||
let arrive
|
||||
const gate = new Promise((resolve) => (release = resolve))
|
||||
const reached = new Promise((resolve) => (arrive = resolve))
|
||||
pendingHold = { path, gate, arrive }
|
||||
return { reached, release }
|
||||
},
|
||||
close: () => {
|
||||
server.closeAllConnections?.()
|
||||
return new Promise((resolve) => server.close(resolve))
|
||||
|
||||
Reference in new issue
Block a user