Salta al contenuto
KAMOUniverse

Changelog

Cosa c'è di nuovo.

Ogni miglioramento alla piattaforma, come si spedisce.

  1. · kamo-internal

    Costruisci le caratteristiche della console di amministratore di mutuo

    Sostituisce borchie con veri e propri pannelli con supporto endpoint + fissa un bug di scrittura morta: - Sottoscrizione: Pannello di calcolo dei redditi (qualifica: DTI/PITIA/reserve/LTV + pillola AUS) e pannello Fraud/4506-C (ringhiera di ordinazione: posto/lista/cancella/eventi per FRAUD + TAX TRANSCRIPT). - Prezzo: Scenario confrontare (side-by-side pricing run) e Best-execution spiegatore (base→adjustments→passo finale + runners-up / motivi idonei); cancellato il chip Reverse-LLPA stante (già in RegolazioneDrawer). - Documenti: Live Clearability roll-up (fans prestito-clearability over the oleodotto, aggregati liquidati/bloccanti/svegliati); cancellato stale Workflow-authoring chip (già spedito). - Capitale: FIX il capitale-mercati Prossima rotta — la sua lista POST ha tenuto solo un percorso, quindi il Loan Sale Desk / lock-lifecycle spedito scrive 404'd. Sostituito l'esatto-stringa Set con ancorati modelli RegExp enumerando il 9 reale percorsi (verificati 1:1 contro il controller), ancora non chiuso su nient'altro. - Bollettino: scheda "Promote as bulletin" (docType=BULLETIN) con prodotto/cambiamento/params modificato AI, postando al nuovo relè. Nuova copia dell'interfaccia utente è stringhe semplici (i18n follow-up); tsc --noEmit clean.

  2. · SecurityService

    Gateway relay per promuovere un bollettino rivisto

    MlosCatalogController/Client gain Promot-bulletin, mirroring Promot-guideline (god-eligible gate, org server-stamped). Baselined promotoreBulletin nel test non custodito (guardia delegata, come i suoi 14 fratelli).

  3. · SecurityService

    Persist SecurityService PHI access trail to phi access log

    Il sentiero §164.312(b) stava andando a Slf4jPhiAccessLogWriter: piattaforma di 14 giorni la conservazione contro un obbligo di sei anni, e nulla che possa essere interrogato. The lead reads e CSV/HMDA esporta questi record di servizio sono gli accessi a §164.528 contabilità è assemblata da, quindi il sentiero deve sopravvivere in una tabella. Scambi in JpaPhiAccessLogWriter tramite un fagiolo PhiAccessRecorder raccoglie attraverso ObjectProvider.getIfUnique — nessun sito di chiamata in PhiAccessAuditor cambia. The corrispondente voce com.kamo.z.shared.phi.audit in @EnableJpaRepositories navi in questo stesso commit: il fagiolo non può essere costruito senza il repository, e dichiarare uno senza l'altro è quello che CrashLooped login prima di oggi.

  4. · kamo-login

    Completa un login che si è fermato al secondo fattore

    SecurityService ora passa il login su un secondo fattore (§164.312(d)). Quando uno è deve esso crea la sessione ma tiene la sua chiave una volta, ritornando token di sfida di breve durata — una sessione per cui nessuno detiene un OTK è Non raggiungibile. Questo BFF si aspettava un TimeKey incondizionatamente, quindi una sfida MFA cadde in il ramo "nessuna chiave di sessione ricevuta" e di superficie all'utente come 500. Ora riconosce la sfida e passa mfaRequired/mfaToken al cliente. /api/login/mfa lo completa. Da OTK in poi riutilizza il login esistente route's handoff verbatim — risolvere *** da Redis, cookie stanti chiari, impostare il uno nuovo — perché due implementazioni di sessione-handoff andrebbero alla deriva e quello utilizzato meno spesso sarebbe quello che marcisce. Un codice sbagliato restituisce 401 con mfaRequired ancora vero e lo stesso mfaToken: SecurityService non consuma deliberatamente la sfida sul fallimento, quindi il l'utente memorizza il codice piuttosto che la password. Forcing un repassword su uno Typo è come la gente finisce per spegnere MFA. Inerti fino a quando qualcuno si iscrive; nessuno ha.

  5. · VOIPService

    Persist il sentiero VOIP PHI a phi access log

    Le registrazioni delle chiamate, l'audio di segreteria e le trascrizioni sono state verificate nel registro flusso, che mantiene 14 giorni contro un obbligo di sei anni §164.528 e non può essere queried da risorsa — quindi "chi ha ascoltato questa chiamata" è rimasto senza risposta anche durante la registrazione. Wiring JpaPhiAccessLogWriter come scrittore fagiolo sposta l'errore di Slf4j che PhiAccessRecorder risolve attraverso ObjectProvider.getIfUnique, così i siti di chiamata esistenti di CallRecordingAuditor sono invariato. Le navi di ingresso @EnableJpaRepositories in questo stesso commit per necessità: bean ha bisogno di PhiAccessLogRepository, e la lista di scansione esplicita è l'unica cosa che lo crea. Dichiarare uno senza l'altro fallisce l'avvio del contesto.

  6. · AIService

    Persist AI conversazione PHI accesso a phi access log

    Le conversazioni degli assistenti memorizzate sono le letture meno in grado di permettersi un 14 giorni, flusso di registro incertibile: il modulo siede al di fuori del limite di conformità, quindi richieste circa i mutuatari sono perseverati indefinitamente e una contabilità §164.528 deve essere assemblato da esattamente questo sentiero sei anni dopo. recordDiscloud già fallisce chiuso su una scrittura che non può fare, il che significa solo qualcosa una volta che la scrittura atterra da qualche parte durevole. Dichiara il fagiolo JpaPhiAccessLogWriter e aggiunge com.kamo.z.shared.phi.audit a @EnableJpaRepositories nello stesso commit. La biblioteca lascia lo scrittore non annunciato in modo ~40 servizi non lo costruiscono tutti, che rende il fagiolo e la voce di scansione un unico cambiamento indivisibile — il fagiolo da solo lascia PhiAccessLogRepository senza definizione di fagioli e CrashLoops il servizio.

  7. · MediaService

    Persist MediaService PHI percorso di accesso a phi access log

    Le letture del messaggio di chat sono state registrate attraverso lo scrittore di default Slf4j, che mette il sentiero §164.312(b) in un flusso di registro di 14 giorni contro una ritenzione di sei anni obbligo — e lascia "chi legge questa conversazione" insoddisfacente, da un tronco stream non può essere queried da membro o da risorsa. Il fagiolo JpaPhiAccessLogWriter e la voce com.kamo.z.shared.phi.audit @EnableJpaRepositories nave insieme deliberatamente: @ComponentScan("com.kamo") raccoglie la @Configuration, ma l'elenco dei repository è esplicito, quindi il fagiolo senza la voce di scansione significa PhiAccessLogRepository non ha fagiolo e contesto non inizia. ChatMessageAccessAuditor non ha bisogno di modifiche — PhiAccessRecorder risolve il suo scrittore tramite ObjectProvider.getIfUnique, così lo scrittore JPA si sposta lo Slf4j fallback in ogni sito di chiamata esistente.

  8. · SecurityService

    Iniezione della chiave di crittografia segreta TOTP

    KAMO MFA SECRET KEY mappa a kamo.mfa.secret-chiave dal legame rilassato di primavera, e è ciò che MfaEnrollmentService utilizza per crittografare i segreti TOTP memorizzati a riposo. Senza di esso il servizio inizia ancora — deliberatamente, in modo da distribuire il codice e configurazione della chiave non sono un'operazione atomica attraverso la piattaforma — ma l'iscrizione getta piuttosto che scrivere un segreto di secondo fattore nel chiaro. Che cosa? degrada la funzione, mai il servizio. Chiave generata su-cluster (32 byte casuali, base64) come il segreto `mfa-enc-key`; il valore esiste solo in Kubernetes e non è mai stato stampato o commesso. Ruotarlo invalida le iscrizioni esistenti, motivo per cui è il suo segreto piuttosto che essere piegato in uno esistente.

  9. · DocsService

    Persistere il percorso di controllo PHI di questo servizio al database

    DocsService serve documenti bytes, quindi il suo percorso è quello che una contabilità Le informazioni di cui al §164.528 sono effettivamente raccolte da. Stava scrivendo a 14 giorni log stream contro un obbligo di sei anni, senza superficie di query. Il fagiolo e il @EnableJpaRepositories terreno di ingresso nello stesso commit deliberatamente. JpaPhiAccessLogWriter non è annunciato in biblioteca proprio così servizi optano in uno alla volta; dichiarare il fagiolo senza la scansione corrispondente è che cosa ha preso ogni login sulla piattaforma giù prima di oggi, e separando questi due modifiche attraverso commit riproducono esattamente quel fallimento.

  10. · kamo-shared-library

    Percorso di audit durevole — persistono l'accesso PHI, l'append-only

    Trasforma §164.312(b) da una riga di log in prove. Lo strato di cattura è stato cablato attraverso sette servizi per un po ', ma ha scritto attraverso Slf4jPhiAccessLogWriter — Ritenzione di 14 giorni contro un obbligo di sei anni, e imprevedibile. Il controllo era architettonicamente presente e probabilmente inutile. PhiAccessLog è append-only: @PreUpdate e @PreRemove rifiutano la mutazione, perché un audit trail l'applicazione può modificare non è una prova. La metà del database (REVOKE UPDATE/DELETE) è nella migrazione KamoInitializer. Porta identificatori e mai contenuti, e un test afferma che l'entità non ha campo a forma di contenuto. Un percorso che riproduce ciò che si verifica è semplicemente spostato il PHI in un secondo negozio — uno che per design non viene mai cancellato. JpaPhiAccessLogWriter non è deliberatamente annotato come un fagiolo. Ogni servizio componente-scans com.kamo, quindi uno stereotipo renderebbe tutto ~40 costruire, e dal momento che ha bisogno di un repository ciascuno dovrebbe quindi aggiungere questo pacchetto al proprio esplicito @EnableJpaRepositories elenco o non avviare. L'esatto errore ha commesso ogni login sulla piattaforma giù prima di oggi. Un servizio che vuole un audit durevole dichiara il fagiolo e aggiunge la scansione; il resto mantiene il default Slf4j inalterato. CondividiLibBeanSafety Il test lo fa rispettare. I campi sono troncati piuttosto che permettere di lanciare. Su un tipo di accesso non chiuso un eccezione qui rifiuta la lettura dell'utente, quindi un URL patologico o 4KB user-agent perdere la fila negherebbe anche l'accesso legittimo — lo strato di audit non deve mai essere la cosa che rompe il prodotto. La tabella esiste già nel cluster (KamoInitializer fb89b3d), quindi nulla è armato.

  11. · InitializerService

    Creare phi access log — il percorso di audit §164.312(b) durevole

    Fino ad ora l'accesso PHI è stato registrato solo a un flusso di log con la ritenzione di 14 giorni contro un obbligo di sei anni, e senza superficie di query. Una contabilità divulgazioni ai sensi del §164.528 è una query; stdout non può essere queried. Gli indici sono scelti per le tre domande effettivamente poste: tutto ciò che ha toccato un record, tutto quello che un membro della forza lavoro ha toccato in una finestra, e tutto in un inquilino in una finestra (il §164.308(a)(1)(iii)(D) recensione attività). REVOKE UPDATE/DELETE è la metà del database di append-only; @PreUpdate/@PreRemove on l'entità è la metà dell'applicazione. O solo è debole — la guardia dell'entità è bypassato da SQL grezzo, una sovvenzione può essere reintegrata — ma insieme all'applicazione in esecuzione non può tranquillamente riscrivere una riga di audit. Best-effort: CockroachDB permette al proprietario di un tavolo mantenere i privilegi, quindi un fallimento è registrato piuttosto che fatale. Tabella verificata presente con tutte le 14 colonne e tutti e tre gli indici prima della entità è stata spinta, quindi nessun servizio può costruire contro una mappatura senza tavolo.

  12. · kamo-shared-library

    Menta l'identificatore di prestito universale (ULI) + memorizzare l'org LEI

    Aggiunge l'HMDA ULI all'esportazione LAR. UliMinter costruisce ULI = org LEI(20) + numero di prestito + due cifre di controllo ISO 7064 MOD 97-10 (Mod97CheckDigit — IBAN algoritmo, trascritto da Reg C 12 CFR 1003 appendice C e pinned contro il suo esempio lavorato, NON la variante MERS Luhn). Nuova colonna nullable Organization.lei (KI-applied) con un org-patch percorso di scrittura; HmdaLarService emette l'ULI quando il org ha un LEI valido + un numero di prestito, altrimenti DEGRADES al numero di prestito nudo quindi un malformato ULI la piattaforma CFPB rigetta non è mai scritta. LoanIdentifier guadagni UNIVERSAL LOAN IDENTIFIER (dati: org LEI + LoanFile.loanNumero + assegno).

  13. · kamo-internal

    Impostare l'org LEI in Informazioni Aziendali (attiva l'HMDA ULI)

    La carta Info aziendale acquisisce un campo Legal Entity Identifier (20-char, top- cased), inviato attraverso l'org esistente PUT — OrganizationController deserializes si applica su Organization.lei e OrganizationService. Con un set LEI, HmdaLarService inganna l'Identifier Universal Loan del mutuatario; senza uno si degrada al numero di prestito nudo, quindi questo è ciò che trasforma l'ULI su per org.

  14. · kamo-internal

    Promuovere una versione guida ingerita dalla console

    Per un documento sorgente GUIDELINE il pannello di ingestione mostra un "Promoto come scheda "versione guida" (prodotto selezionare + etichetta di revisione). La scheda del foglio di tasso è ora nascosto anche per i docs guideline. ingestionApi.promoteGuideline messaggi a il nuovo relè.

  15. · SecurityService

    Gateway relay per promuovere una guida ingerita in una versione

    MlosCatalogController/Client gain Promot-guideline, mirroring promote- eleggibilità: dio-eleggibile gate, organizzazioneId server-stamped via write().

  16. · kamo-register

    Auto-login dopo la verifica via e-mail tramite chiave una volta

    Quando /verify-email risponde con l'additivo otk + autoLoginHost campi (minted by SecurityService sulla prima verifica), deeplink direttamente a https://occuhost>/validate?otk=... — lo stesso consumatore — atterraggio del nuovo membro sulla casa interna (FirstOrgCta) invece di consegnarli al modulo di login per un Retype delle credenziali e un terzo *****. - PostCompletionScreen (codice percorso + carta verificata): auto-sessione reindirizzare con la pagina di login reindirizzare mantenuto come il fallback ogni volta OTK è assente; spara prima l'evento email-verified esistente, più un nuovo evento di analisi di sessione automatica sul percorso OTK. - /verificazione (percorso e-mail-link): la risposta token-verify è la uno che trasporta l'OTK, quindi reindirizza lo stesso modo; il registro tab watching over SSE mantiene il suo login fallback ( OTK è singolo uso e vive nella scheda link). - registrareApi: verificare le chiamate ora digitate come VerifyEmailResponse.

  17. · kamo-marketing

    Fase 3+4 — convertire il traffico che già arriva

    - changelog (#2 destinazione) ottiene un blocco di conversione; la carriera mostra lo stato di no-apertura onesto - /subscribe page: piano di post-registrazione intento atterra da qualche parte reale (era un 404 a scopo di pagamento) - prezzi: live-priced FindYourPlanQuiz, midpage CTA, striscia di rassicurazione, esterno/internal CTA split, contatto aziendale utilizza ?topic=Sales (soggetto era silenziosamente caduto) - homepage: striscia di recente spedita dal vero changelog, Caratteristiche/UseCase link in avanti, JumpToBar abbina le sezioni e le offerte effettive - /partners design-partner pagina del programma; circa ottiene un fondatore / built-in-the-open sezione - SEO: tutti i canonici → www + locali-prefisso 200-serving URL; per-locale hreflang + x-default sul 4 modelli programmatici; locali intranslati noindexed; sitemap loc/alternates fisso (solo in+es); robots.txt scende la mappa del sito JSON + blocco /calculator; metadati del blog legge traduzioni reali (ogni post precedentemente indicizzato come «Articolo Non Trovato») - llms.txt/llms-full.txt: prezzi reali, UTM-stamped URLs (i referral AI diventano un canale misurato) - pagina di integrazione della calotta del ghiaccio approfondito in una pagina di atterraggio reale (l'entrata organica #2)

  18. · SecurityService

    Mint autologin OTK sulla prima verifica e-mail

    Completare la verifica e-mail della procedura guidata del registro (6-digit code o email link) già dimostra in arrivo possesso, ma il nuovo utente era rimbalzato alla pagina di login per ridisegnare le credenziali e risolvere un terzo ***. Riutilizzare l'inserto come primitivo invece: sul PRIMO successo verifica, quando l'utente verificato detiene un membro idoneo il loro registro org, menta un login-equivalente *** via PostAuth*****Servizio e avvolgerlo nello stesso singolo uso 180 OTK che kamo-internal /validate pagina già consuma. - EmailVerification Servizio: verificare i metodi di ritorno Risultato di verifica(userId, primaVerificazione) un conto già verificato (ad es. dopo un simile) non può più ri-mint; risolvereRootDomain pacchetto esposto-statico per la risoluzione host. E' una cosa che non va. iscrizione ineleggibile (register /team PROSPECTs mantenere il login redirect), dominio non risolto, installazione SSL personalizzata incompleta, o errore — il successo di verifica stesso non è mai interessato. - /verify-email risposta guadagni additivo otk + autoLoginHost campi; la forma invariata quando la coniazione è saltata.

  19. · kamo-marketing

    Moduli relativi al contenuto + registrazione CTA retargeting su modelli programmatici

    Soluzioni, integrazioni, alternative e modelli glossari erano organici fini morti: nessun collegamento interno e "Start free" CTAs che punta a /prezzare invece di firmare. - Nuovo blocco RelatedContent condiviso (carta/pillole varianti) utilizzando i18n Link così locale è conservato; ogni link relativo incendi relativi-clicca con il destinazione href come elemento evento. - Soluzioni: 3-4 industrie di sebling da INDUSTRY CATEGORI oltre a 2 integra i nomi-gocce del settore copia. - Integrazioni: 3-4 integrazioni della stessa categoria, sormontate per piccole categorie; conversione blurb striscia sopra il piè di pagina CTA. - Alternative: "Confrontare" chip per gli altri 8 concorrenti, fino a 2 pagine curate /solutions, CTA finale di migrazione-angolo (switchFrom key), e una striscia blurb di conversione. - Glossario: termini relativi riempiti a 3-4 tramite il fallback della stessa categoria più un collegamento completo-glossario. - Tutti i CTA privi di inizio primario ora colpito E' una cosa da fare. strumentazione cta-start-free / location; /pricing soggiorni raggiungibili come una secondario View-pricing link su ogni modello.

  20. · SecurityService

    Registrazione del cancello sul secondo fattore — §164.312(d)

    Completa MFA. Il nucleo è atterrato in kamo-shared-library; questo è il filo che gira configurazione memorizzata in un cancello reale. Il cancello è piccolo perché il login aveva già la forma giusta: crea il *** sessione e consegna al cliente SOLO come una chiave di una volta nel corpo di risposta — no cookie è impostato al login. Quindi l'intero meccanismo è quello di tenere l'OTK fino al secondo fattore è dimostrato. Una sessione per cui nessuno detiene un OTK è irraggiungibile, che significa che la creazione di sessione non ha bisogno di alcun intervento. MfaChallengeService detiene il ***Id sotto un token opaco, monouso, di 5 minuti. Il cliente non riceve mai la sessione id, e il token è inutile senza un Codice. Breve di proposito: uno stato semi-autentico sopravvive ad un compromesso di password. POST /api/security/mfa/challenge completa il login, rilasciando OTK così il il cliente riprende esattamente il flusso che avrebbe avuto senza MFA. Un codice sbagliato non rilascia nulla e — deliberatamente — non brucia la sfida, perché forzante un utente di nuovo attraverso la password su un solo tipo è come MFA viene spento. The Il blocco dell'iscrizione conta quei fallimenti. Un successo consuma la sfida così non può essere riprodotto. I codici di recupero completano anche esso, e non sono mai anche provato come un TOTP. I endpoint di iscrizione (/iscrizione, /confirm, /status) richiedono una sessione — iscrivendo una fattore è un'azione autenticata sul proprio conto. /challenge deliberatamente fa no, perché il suo caller è mid-login per definizione. ATTENZIONE: il cancello spara solo su haConfirmedFactor, e nessuno è iscritto, quindi il percorso di login esistente è byte-identical. Questo è il punto — questo può dispiegare prima che qualsiasi cliente lo supporti. Il ratchet del punto finale ha preso i miei tre gestori di registrazione come non sorvegliato. Sono protetto, attraverso un utenteIdFromSession helper la scansione one-method-deep non può seguire, così la correzione era insegnare GUARD che aiutante piuttosto che basarli. Anch'io documentato la limitazione inversa lo stesso esercizio esposto: completeChallenge cancella la scansione solo perché capita di toccare kSessionService.

  21. · kamo-marketing

    Fase 0+1 — strumento il vero imbuto, sbloccare la prima vernice

    - dati in avanti-* attraverso MagneticButton/RippleButton (gli eventi non hanno mai raggiunto il DOM) - strumento SharedNavigation, Hero, PreviewBanner, sezione CTA; ?ref= su ogni link del registro E' morto. + 16 altri componenti orfani - homepage: nessun cancello di precarico, sezioni SSR'd, 16→10 sezioni, prezzi del catalogo dal vivo - iscrizione onesta: un registro di deep-linking del campo di posta elettronica con prefill; termini reali / link di privilegi - uccidere 10MB favicon.svg + logo.svg, drop reage-world-flags (3.7MB) per bandiere emoji, drop three.js deps - generazione statica (senza forza-dinamica), intestazioni a lungo raggio per /img /logos /favicon - analytics: data-performance vitals on, DNT drop rimosso; chat widget lazyOnload; preconnects - eroe: i bgs locali rendono immediatamente (lo swap a tema non-bloccante), Watch Demo → /demo, Parla con noi CTA, statistiche oneste

  22. · kamo-shared-library

    TOTP secondo fattore — §164.312(d)

    La valutazione di conformità ha definito l'assenza di un secondo fattore disqualizzazione da solo, e sotto la regola di sicurezza 2025 NPRM MFA smette di essere indirizzabile a Tutto. Nome utente singolo + password è stato l'unico percorso di autenticazione interattivo sulla piattaforma. TOTP è verificato contro i vettori di prova RFC 6238 Appendix B piuttosto che contro valori che questa implementazione ha prodotto. Questa distinzione è l'intero gioco palla: un home-grown TOTP che concorda solo con se stessa autentica Google Authenticator, e le superfici di guasto a rollout con ogni utente bloccato fuori. Scrivere quei test immediatamente colti che avevo superato unix secondi dove HMAC vuole un contatore — fuori da un fattore di trenta — in modo da generareAt ora fa divisione e nessun chiamante deve ricordarlo. Proprietà che separano MFA reale dall'aspetto di esso, ogni pinned da un test: - I codici sono monouso. Un TOTP rimane valido per il suo intero 30-secondo passo, quindi senza LastUsedTimeStep un codice intercettato o a tracolla funziona di nuovo dentro la sua finestra. Un passo precedente ancora all'interno della tolleranza è rifiutato anche, una volta che uno dopo è stato accettato. - Le iscrizioni non confermate non contano. Inizio iscrizione e abbandonarla prima di dimostrare il possesso non deve soddisfare un requisito MFA. - Lockout è reale: un codice corretto viene rifiutato mentre è bloccato, altrimenti il blocco è decorativo. - inizioIscrizioni rifiuta di sostituire un fattore confermato. In silenzio sovrascriverlo avrebbe permesso a chiunque raggiungesse il punto finale di scambiare l'autentico della vittima per loro. - Il segreto è criptato a riposo e restituito esattamente una volta; i codici di recupero sono hashed e single-use. Né è recuperabile dal personale, quindi un dispositivo perso significa ri-iscrizione — il commercio corretto per una credenziale che bypassa la password. - La verifica si confronta in tempo costante. String.equals ritorna sul primo cifra diversa, che perde quante cifre principali erano giuste e crolla un 10^6 spazio in circa 60 ipotesi. I codici di recupero sono SHA-256 piuttosto che bcrypt deliberatamente: 80 bit di entropia generata dalla macchina non ha alcun dizionario contro, e un hash lento ci sarebbe solo acquistare una negazione di servizio sul percorso di login. Tavoli già esistono nel cluster (KamoInitializer c65a233), quindi nulla è armato con questa spinta. I endpoint di iscrizione e sfida sono il passo successivo; nulla chiama Questo ancora.

  23. · kamo-login

    Aggiungi analytics + ?registered=1 avviso di benvenuto

    - Mont analytics Componente client di analisi nel layout root: successivo/script loader per analytics.kamocrm.com tramite data-domini a login.kamocrm.com solo (sito è white-labeled; domini inquilini mai essere rintracciato), con finestra sorvegliata.analytics?.track digitazioni. - Tracciare un evento di successo di login proprio prima che gli incendi di reindirizzamento post-login. - Maniglia ?registered=1 dal sito del registro con un avviso di successo ("Il tuo account è stato creato. Accedi per continuare."), preriempendo campo email da ?email= — stesso modello come email verified/linked.

  24. · InitializerService

    Creare le tabelle secondarie

    Backs UserMfaIscrizioni e MfaRecoveryCode in kamo-shared-library — §164.312(d) Autenticazione della persona o dell'entity, il gap la valutazione di conformità chiamata squalificare da solo. Entrambe le tabelle verificate presenti nel cluster con la forma prevista prima della entità sono state spinte, quindi nessun servizio può costruire contro una mappatura la cui tabella fa Non esiste. Tre dettagli degni di non perdere a una semplificazione successiva: - SECRET CIPHERTEXT detiene il testo cifrario. Il servizio si rifiuta di scrivere un'iscrizione a tutti quando nessuna chiave è configurata, piuttosto che degradante al testo normale. - LAST USED TIME STEP è ciò che rende un codice un uso singolo. Un TOTP è valido per il suo tutto 30-secondo passo, quindi senza di esso un codice intercettato riecheggia dentro il proprio finestra. - I codici di recupero ottengono una riga ciascuno piuttosto che una lista serializzata, quindi riscattare uno è un aggiornamento mirato invece di una lettura-modifica-scrittura sul set — che sotto concurrency è esattamente come un codice "single-use" viene utilizzato due volte.

  25. · VOIPService

    Richiedere VIEW CALL LOGS per la riproduzione delle chiamate in PHI-handling orgs

    Registrazione e riproduzione vocale controllato tenancy e nient'altro: qualsiasi membro il proprietario org potrebbe tirare qualsiasi chiamata in esso, trascrizione inclusa, su estensioni che non erano loro. Richiesta VIEW CALL LOGS outright non era un'opzione — un diritto può esistere nell'enum e essere concesso a nessuno, quindi accenderlo per tutti prende il softphone lontano dai membri che lo utilizzano oggi. L'esecuzione è quindi portata al confine di conformità che lo rende necessario. Per un org con maniglieSet, registrazione audio, tracce per-leg, audio segreteria e la trascrizione all'interno della registrazione dei metadati richiede il diritto; il rifiuto è un 403 e atterra nel percorso di audit PHI attraverso i registratori di percorso negato esistenti, quindi La prova è visibile. Per ogni altro org — tutti loro oggi — nulla cambia, che E' cio' che i casi si inseriscono. Conseguenza nota: la sessione ?st= stream-token porta solo (orgId, memberId), quindi sotto un inquilino PHI il percorso audio-tag non viene chiuso fino a quando il token non porta la sovvenzione. Registrato in un test piuttosto che lasciato per essere scoperto.

  26. · kamo-internal

    Logoff automatico dopo inattività (HIPAA 164.312(a)(2)(iii))

    Una sessione lasciata aperta su una postazione di lavoro non custodita rimase utilizzabile a tempo indeterminato. Questo termina dopo 15 minuti di nessuna interazione, con un avvertimento di 60 secondi così nessuno è scaricato mid-task. Le regole di tempistica vivono in app/lib/idleTimeout.ts come controller puro (unità testato con timer falsi); il componente è solo uno strato di input. Tre decisioni vale la pena conoscere: - Solo puntatore, chiave, ruota, scorrimento, touch e eventi di visibilità contano come presenza. Cornici Websocket, inquinamenti e timer non — schermi kamo-internal rinfrescarsi costantemente, e trattarlo come umano alla scrivania rendere il controllo decorativo. - La presenza è misurata in tutta l'origine, perché il soggetto del controllo è una macchina incustodita, non una scheda incustodita. Il lavoro in una scheda mantiene la sua fratelli vivi; quando ogni scheda va tranquilla scadono insieme, quindi no disposizione delle schede lascia una sessione utilizzabile su uno schermo abbandonato. - La fine di una sessione è annunciata attraverso le schede. # Id vive in ogni # scheda sessioneStorage su una sessione condivisa Redis, quindi un fratellino che non è mai detto continua a mostrare uno spazio di lavoro autenticato su una sessione che non più esiste. Sia il logoff automatico che la pagina ordinaria /logout ora trasmettono. La terminazione passa attraverso la pagina /logout esistente — SecurityService logout, Cancellazione chiave Redis, schiarimento dei cookie, in avanti a kamo-login — perché compensazione stato client da solo lascia viva la sessione del server e non è un logoff. Copia spedito avanti a questo in kamo-traduzione-dizionario (c39dfb9).

  27. · DocsService

    Audit punti finali dei contenuti WOPI e chiudere gli ultimi gap di byte-serving

    WOPI serve documenti interi a Docs e non ha registrato nulla. G /wopi/files/{id}/contents è la stessa divulgazione di /download, relayed the allo stesso modo attraverso APIService, senza alcuna traccia — apertura di un documento in l'editor non era rintracciabile. L'identità viene dal token di accesso WOPI, non una sessione ***: DocumentController lo mescola con l'org del membro di apertura e id dei membri e Docs lo restituisce su ogni callback, quindi quelle affermazioni sono l'unica identità questi endpoint hanno, e l'unico checkFileInfo già autorizza contro. L'auditor li prende direttamente piuttosto che risolvere un membro in un secondo modo che potrebbe non essere d'accordo con il token la richiesta è stata autorizzata da. Un token che non può essere letto record contro il sentinel non risolto-org invece di essere caduto. PutFile record come VIEW, non DOWNLOAD: un salvataggio invia byte in piuttosto che fuori, così chiamarlo una rivelazione sarebbe doppio conteggiare il GetFile che ha aperto il sessione, e VIEW non si apre così un lavandino di audit malato non può distruggere non salvato lavoro. CheckFileInfo e le operazioni di blocco non registrate — nessun contenuto, e Docs chiama ripetutamente attraverso una sessione, che seppellirebbe la fila che significa byte effettivamente spostato. La spazzata per i restanti sentieri di osservazione ha trovato altri due: - /api/docs/binders/{id}/render fonde ogni documento in un legante in uno PDF. È carica di massa in un wrapper diverso e non ha registrato nulla; ora un evento per documento incorporato, separatori e pagine generate escluse. Ho scritto solo una riga ImgLogDownload. Che cosa? è un record di imaging-dominio letto dal pannello di download-storia, non il traccia cross-surface — così la contabilità delle rivelazioni ha mostrato ruscelli, esportazione e modello PDF, omettendo il byte più utilizzato del servizio Percorso. Entrambe le registrazioni sono ora scritte; rispondono a diverse domande. Nessuna entità, @Column o cambio bibliotecario condiviso.

  28. · kamo-internal

    Promuovere una matrice di eleggibilità ingerita dalla console

    Per un documento sorgente ELIGIBILITY MATRIX il pannello di ingestione ora mostra un Scheda "Promote as eligibility matrix": selezionare il prodotto, tipo di limite (MAX LTV/CLTV/DTI), occupazione e scopo, e ogni file FICO→limit approvato diventa una cella di eleggibilità — il cancello che permette il prezzo del prodotto. The scheda di pubblicazione foglio di tasso è ora nascosto per LLPA e documenti di idoneità (ciascuno ha il proprio percorso di promozione). ingestionApi.promoteIdoneità posti al nuovo relè.

  29. · SecurityService

    Relè gateway per promuovere una matrice di ammissibilità ingerita

    ****************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************** promo-adjustments: gate-eleggibile, organizzazioneId server-stamped via write(), downstream 4xx relayed verbatim.

  30. · kamo-internal

    Autorizzazione UI — elenco, editor di linea-item, gestione di link condivisi

    Completa il sistema preventivo/stimato: il personale può ora costruire un preventivo, prezzo esso, menta un link di condivisione e inviarlo via e-mail, tutti dalla pipeline. app/lib/quotesApi.ts client digitato per la superficie di SecurityService E' il momento giusto. proxy, rispecchia il passaggio POS (X-***-token) PipelineQuotesTab elenco + stato filtro, cablato come un sottotab RETAIL App/commerce/quote/[uid] dettaglio percorso QuoteEditor PipelineRecordLayout con dettagli/condivisione/attività schede QuoteLineItemEditor reusable line-item griglia QuoteShareLinkPanel menta, copia, e-mail, revoca, vista conta QuoteLineItemEditor è deliberatamente il suo componente. La pipeline già trasporta cinque redattori linea-item laminati a mano separati (ordini/nuovi, OrderEditDialog, il griglia di ordine di abbonamento, la tabella di approvvigionamento, lavoro-ordine / parti) senza nulla condiviso tra loro; nuovo lavoro dovrebbe costruire su questo piuttosto che aggiungere un sesto. I totali dell'editor sono un LOCAL PREVIEW e sono etichettati come tali mentre sporco. Loro mirror QuoteTotals esattamente — sconti di linea prima, poi lo sconto di livello citazione, allora tassa e spedizione — in modo che l'anteprima non disacco con il documento salvato, e la risposta del server li sostituisce in ogni salvataggio. Non c'e' nulla che possa impostare un totale. Anche la modalità ENGINE rende "non configurata" piuttosto che una figura fabbricata, corrispondente a ciò che le relazioni API. Un link di condivisione appena coniato viene mostrato una volta con un avviso di copia, perché solo il suo SHA-256 è perseverato e l'URL non può essere recuperato. La lista può mostrare un prefisso gettato e niente di più. Diritti ottenuti in tutto: MANAGE QUOTES per creare/edit, SEND QUOTES per mentare o revocare collegamenti. Citazioni terminali Bloccare l'editor e... offrire una revisione invece. cablato live all'API dall'inizio — nessun generaMock fissa, a differenza di diversi schede delle tubazioni. Se le tabelle di citazione non esistono ancora le superfici di errore Onestamente piuttosto che essere mascherato da file segnaposto.

Il tuo universo ti sta aspettando.

Aggiungi i prodotti quando sei pronto: nessuna migrazione, nessun nuovo login, nessuna richiesta di pagamento.

Gratis per sempre — nessuna carta di credito richiesta